diff --git a/.changeset/commit.js b/.changeset/commit.js index d9ddde3fc9..705d64393f 100644 --- a/.changeset/commit.js +++ b/.changeset/commit.js @@ -1,4 +1,4 @@ -const { execSync } = require('node:child_process') +import { execSync } from 'node:child_process' const getSignedOffBy = () => { const gitUserName = execSync('git config user.name').toString('utf-8').trim() @@ -7,18 +7,13 @@ const getSignedOffBy = () => { return `Signed-off-by: ${gitUserName} <${gitEmail}>` } -const getAddMessage = async (changeset) => { +export const getAddMessage = async (changeset) => { return `docs(changeset): ${changeset.summary}\n\n${getSignedOffBy()}\n` } -const getVersionMessage = async (releasePlan) => { +export const getVersionMessage = async (releasePlan) => { const publishableReleases = releasePlan.releases.filter((release) => release.type !== 'none') const releasedVersion = publishableReleases[0].newVersion return `chore(release): version ${releasedVersion}\n\n${getSignedOffBy()}\n` } - -module.exports = { - getAddMessage, - getVersionMessage, -} diff --git a/.changeset/tricky-readers-relax.md b/.changeset/tricky-readers-relax.md new file mode 100644 index 0000000000..683142a9e5 --- /dev/null +++ b/.changeset/tricky-readers-relax.md @@ -0,0 +1,27 @@ +--- +"@credo-ts/askar-to-drizzle-storage-migration": minor +"@credo-ts/indy-sdk-to-askar-migration": minor +"@credo-ts/drizzle-storage": minor +"@credo-ts/question-answer": minor +"@credo-ts/react-native": minor +"@credo-ts/action-menu": minor +"@credo-ts/redis-cache": minor +"@credo-ts/anoncreds": minor +"@credo-ts/openid4vc": minor +"@credo-ts/indy-vdr": minor +"@credo-ts/didcomm": minor +"@credo-ts/tenants": minor +"@credo-ts/hedera": minor +"@credo-ts/askar": minor +"@credo-ts/cheqd": minor +"@credo-ts/webvh": minor +"@credo-ts/core": minor +"@credo-ts/drpc": minor +"@credo-ts/node": minor +--- + +Add support for both CJS and ESM module syntax. + +- Use `tsdown` to bundle for both CJS and ESM (bridge period) -> tsdown is based on rust, so it should help with performance +- Update to `vitest` since jest doesn't work well with ESM -> this should also help with performance +- Simplify type checking -> just a single type check script instead of one for all packages. This should help with performance. diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 22fcd1ca9a..0a222d3d5f 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -44,7 +44,7 @@ jobs: - name: Check Types run: pnpm types:check - - name: Compile + - name: Build run: pnpm build unit-tests: @@ -59,7 +59,7 @@ jobs: # Each shard runs a set of the tests # Make sure to UPDATE THE TEST command with the total length of # the shards if you change this!! - shard: [1, 2, 3] + shard: [1, 2] steps: - uses: actions/checkout@v5 @@ -88,15 +88,8 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - # Issue with node 22 starting 22.18 - # https://github.com/nodejs/node/issues/59364 - name: Run tests - run: NODE_OPTIONS="$NODE_OPTIONS --no-experimental-strip-types" pnpm test:unit --coverage --forceExit --shard=${{ matrix.shard }}/3 - if: matrix.node-version == 22 - - - name: Run tests - run: pnpm test:unit --coverage --forceExit --shard=${{ matrix.shard }}/3 - if: matrix.node-version != 22 + run: pnpm test:unit --coverage --shard=${{ matrix.shard }}/2 # Upload coverage for shard - run: mv coverage/coverage-final.json coverage/${{ matrix.shard }}.json @@ -148,15 +141,8 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - # Issue with node 22 starting 22.18 - # https://github.com/nodejs/node/issues/59364 - - name: Run tests - run: NODE_OPTIONS="$NODE_OPTIONS --no-experimental-strip-types" pnpm test:e2e --coverage --forceExit - if: matrix.node-version == 22 - - name: Run tests - run: pnpm test:e2e --coverage --forceExit - if: matrix.node-version != 22 + run: pnpm test:e2e --coverage # Upload coverage for e2e - run: mv coverage/coverage-final.json coverage/e2e.json @@ -212,15 +198,8 @@ jobs: - name: Build drizzle package run: pnpm --filter @credo-ts/drizzle-storage run build - # Issue with node 22 starting 22.18 - # https://github.com/nodejs/node/issues/59364 - - name: Run tests - run: NODE_OPTIONS="$NODE_OPTIONS --no-experimental-strip-types" pnpm test:drizzle --coverage --forceExit - if: matrix.node-version == 22 - - name: Run tests - run: pnpm test:drizzle --coverage --forceExit - if: matrix.node-version != 22 + run: pnpm test:drizzle --coverage # Upload coverage for e2e - run: mv coverage/coverage-final.json coverage/drizzle.json diff --git a/DEVREADME.md b/DEVREADME.md index 7d682bf1ca..20999dc6bd 100644 --- a/DEVREADME.md +++ b/DEVREADME.md @@ -18,7 +18,9 @@ GENESIS_TXN_PATH=/work/network/genesis/local-genesis.txn ## Running tests -Test are executed using jest. E2E tests (ending in `.e2e.test.ts`) require the **indy ledger**, **cheqd ledger**, **postgres database**, or **redis** to be running. +Test are executed using vitest. E2E tests (ending in `.e2e.test.ts`) require the **indy ledger**, **cheqd ledger**, **postgres database**, or **redis** to be running. Drizzle tests (ending in `drizzle.e2e.test.ts`) require the **postgres database** to be running. + +NOTE: when running the Drizzle tests, you must first run `pnpm build`, as the CLI requires the built packages. When running tests that require a connection to the indy ledger pool, you can set the `TEST_AGENT_PUBLIC_DID_SEED`, `ENDORSER_AGENT_PUBLIC_DID_SEED` and `GENESIS_TXN_PATH` environment variables. diff --git a/biome.json b/biome.json index b00a49b32d..c5399f881d 100644 --- a/biome.json +++ b/biome.json @@ -82,7 +82,7 @@ }, "overrides": [ { - "include": ["jest.config.ts", "./scripts/**"], + "include": ["./scripts/**"], "linter": { "rules": { "correctness": { @@ -105,7 +105,7 @@ "include": [ "*.test.ts", "**/__tests__/**", - "jest.*.ts", + "vitest.*.ts", "samples/**", "demo/**", "demo-openid/**", diff --git a/demo-openid/package.json b/demo-openid/package.json index 4098b5705d..ccc8620c18 100644 --- a/demo-openid/package.json +++ b/demo-openid/package.json @@ -9,10 +9,10 @@ }, "license": "Apache-2.0", "scripts": { - "issuer": "ts-node src/IssuerInquirer.ts", + "issuer": "vite-node src/IssuerInquirer.ts", "provider": "tsx src/Provider.js", - "holder": "ts-node src/HolderInquirer.ts", - "verifier": "ts-node src/VerifierInquirer.ts", + "holder": "vite-node src/HolderInquirer.ts", + "verifier": "vite-node src/VerifierInquirer.ts", "proxies": "ngrok --config ngrok.yml,ngrok.auth.yml start provider issuer verifier" }, "dependencies": { @@ -36,7 +36,6 @@ "@types/oidc-provider": "^8.8.1", "clear": "^0.1.0", "figlet": "^1.5.2", - "ts-node": "catalog:", "tsx": "^4.19.4" } } diff --git a/demo-openid/src/Holder.ts b/demo-openid/src/Holder.ts index 5778f71570..f4c1a8d246 100644 --- a/demo-openid/src/Holder.ts +++ b/demo-openid/src/Holder.ts @@ -8,8 +8,8 @@ import { AskarModule } from '@credo-ts/askar' import { DidJwk, DidKey, - JwkDidCreateOptions, - KeyDidCreateOptions, + type JwkDidCreateOptions, + type KeyDidCreateOptions, Kms, Mdoc, W3cJsonLdVerifiableCredential, @@ -26,7 +26,7 @@ import { } from '@credo-ts/openid4vc' import { askar } from '@openwallet-foundation/askar-nodejs' -import { AskarModuleConfigStoreOptions } from '@credo-ts/askar' +import type { AskarModuleConfigStoreOptions } from '@credo-ts/askar' import { BaseAgent } from './BaseAgent' import { Output, greenText } from './OutputClass' diff --git a/demo-openid/src/Issuer.ts b/demo-openid/src/Issuer.ts index e22ee5c394..c23a8c6229 100644 --- a/demo-openid/src/Issuer.ts +++ b/demo-openid/src/Issuer.ts @@ -1,16 +1,16 @@ import type { DidKey, X509Certificate } from '@credo-ts/core' import { - OpenId4VcIssuerModuleConfigOptions, + type OpenId4VcIssuerModuleConfigOptions, OpenId4VcIssuerRecord, OpenId4VcModule, - OpenId4VcVerifierModuleConfigOptions, + type OpenId4VcVerifierModuleConfigOptions, OpenId4VcVerifierRecord, - OpenId4VciCredentialConfigurationsSupportedWithFormats, - OpenId4VciCredentialRequestToCredentialMapper, - OpenId4VciSignMdocCredentials, - OpenId4VciSignSdJwtCredentials, - OpenId4VciSignW3cCredentials, - VerifiedOpenId4VcCredentialHolderBinding, + type OpenId4VciCredentialConfigurationsSupportedWithFormats, + type OpenId4VciCredentialRequestToCredentialMapper, + type OpenId4VciSignMdocCredentials, + type OpenId4VciSignSdJwtCredentials, + type OpenId4VciSignW3cCredentials, + type VerifiedOpenId4VcCredentialHolderBinding, } from '@credo-ts/openid4vc' import { AskarModule, transformSeedToPrivateJwk } from '@credo-ts/askar' diff --git a/demo-openid/tsconfig.json b/demo-openid/tsconfig.json deleted file mode 100644 index b7d9de6c8e..0000000000 --- a/demo-openid/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "skipLibCheck": true - } -} diff --git a/demo/package.json b/demo/package.json index 43c5c3f19e..4cd3036161 100644 --- a/demo/package.json +++ b/demo/package.json @@ -9,8 +9,8 @@ }, "license": "Apache-2.0", "scripts": { - "alice": "ts-node src/AliceInquirer.ts", - "faber": "ts-node src/FaberInquirer.ts" + "alice": "vite-node src/AliceInquirer.ts", + "faber": "vite-node src/FaberInquirer.ts" }, "dependencies": { "@hyperledger/anoncreds-nodejs": "catalog:", @@ -31,7 +31,6 @@ "@types/figlet": "^1.5.4", "@types/inquirer": "^8.2.6", "clear": "^0.1.0", - "figlet": "^1.5.2", - "ts-node": "catalog:" + "figlet": "^1.5.2" } } diff --git a/demo/src/BaseAgent.ts b/demo/src/BaseAgent.ts index 987e4197b7..b8268a4a3d 100644 --- a/demo/src/BaseAgent.ts +++ b/demo/src/BaseAgent.ts @@ -29,12 +29,12 @@ import { } from '@credo-ts/didcomm' import { IndyVdrAnonCredsRegistry, IndyVdrIndyDidResolver, IndyVdrModule } from '@credo-ts/indy-vdr' import { DidCommHttpInboundTransport, agentDependencies } from '@credo-ts/node' -import { HederaNetwork } from '@hiero-did-sdk/client' +import type { HederaNetwork } from '@hiero-did-sdk/client' import { anoncreds } from '@hyperledger/anoncreds-nodejs' import { indyVdr } from '@hyperledger/indy-vdr-nodejs' import { askar } from '@openwallet-foundation/askar-nodejs' -import { AskarModuleConfigStoreOptions } from '@credo-ts/askar' +import type { AskarModuleConfigStoreOptions } from '@credo-ts/askar' import { HederaAnonCredsRegistry, HederaDidRegistrar, HederaDidResolver, HederaModule } from '@credo-ts/hedera' import { greenText } from './OutputClass' diff --git a/demo/tsconfig.json b/demo/tsconfig.json deleted file mode 100644 index df890c6054..0000000000 --- a/demo/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "types": ["node"] - } -} diff --git a/jest.config.base.ts b/jest.config.base.ts deleted file mode 100644 index 8f6564cb5f..0000000000 --- a/jest.config.base.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { Config } from '@jest/types' - -const config: Config.InitialOptions = { - preset: 'ts-jest', - testEnvironment: 'node', - // NOTE: overridden in e2e test. Make sure to - // update that match as well when changing this one - testMatch: ['**/?(*.)test.ts'], - transform: { - '\\.(t|j)sx?$': [ - 'ts-jest', - { - tsconfig: { - isolatedModules: true, - }, - }, - ], - }, -} - -export default config diff --git a/jest.config.ts b/jest.config.ts deleted file mode 100644 index 4c574ee94f..0000000000 --- a/jest.config.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { Config } from '@jest/types' - -import base from './jest.config.base' - -const config: Config.InitialOptions = { - ...base, - roots: [''], - verbose: true, - coverageReporters: ['text-summary', 'lcov', 'json'], - coveragePathIgnorePatterns: ['/build/', '/node_modules/', '/__tests__/', 'tests'], - coverageDirectory: '/coverage/', - projects: [ - '/packages/*/jest.config.ts', - '/tests/jest.config.ts', - '/samples/extension-module/jest.config.ts', - ], -} - -export default config diff --git a/package.json b/package.json index 66d04505b9..21f291e88a 100644 --- a/package.json +++ b/package.json @@ -7,20 +7,18 @@ "url": "https://github.com/openwallet-foundation/credo-ts", "type": "git" }, + "type": "module", "scripts": { - "types:check": "pnpm types:check:build && pnpm types:check:tests", - "types:check:tests": "tsc -p tsconfig.test.json --noEmit", - "types:check:build": "pnpm -r --parallel exec tsc --noEmit", + "types:check": "tsc -p tsconfig.json --noEmit", "style:check": "biome check --unsafe", "style:fix": "biome check --write --unsafe", - "clean": "pnpm -r --parallel run clean", "build": "pnpm -r --parallel run build", - "test:unit": "pnpm test --testPathIgnorePatterns e2e.test.ts", - "test:e2e": "pnpm test --testPathIgnorePatterns drizzle --testMatch '**/?(*.)e2e.test.ts'", - "test:drizzle": "pnpm test --testMatch '**/*drizzle*.test.ts'", - "test": "jest", + "test:unit": "pnpm test --project unit", + "test:e2e": "pnpm test --project e2e", + "test:drizzle": "pnpm test --project drizzle", + "test": "vitest", "validate": "pnpm types:check && pnpm style:check", - "run-mediator": "ts-node ./samples/mediator.ts", + "run-mediator": "vite-node ./samples/mediator.ts", "release": "pnpm build && pnpm changeset publish --no-git-tag", "changeset-version": "pnpm changeset version && pnpm style:fix" }, @@ -32,13 +30,13 @@ "@credo-ts/action-menu": "workspace:*", "@credo-ts/anoncreds": "workspace:*", "@credo-ts/askar": "workspace:*", + "@credo-ts/askar-to-drizzle-storage-migration": "workspace:*", "@credo-ts/cheqd": "workspace:*", "@credo-ts/core": "workspace:*", "@credo-ts/didcomm": "workspace:*", "@credo-ts/drizzle-storage": "workspace:*", "@credo-ts/drpc": "workspace:*", "@credo-ts/indy-sdk-to-askar-migration": "workspace:*", - "@credo-ts/askar-to-drizzle-storage-migration": "workspace:*", "@credo-ts/indy-vdr": "workspace:*", "@credo-ts/node": "workspace:*", "@credo-ts/openid4vc": "workspace:*", @@ -47,33 +45,43 @@ "@credo-ts/redis-cache": "workspace:*", "@credo-ts/tenants": "workspace:*", "@credo-ts/webvh": "workspace:*", - "@jest/types": "^29.6.3", + "@credo-ts/hedera": "workspace:*", "@openwallet-foundation/askar-nodejs": "catalog:", "@types/cors": "^2.8.19", "@types/express": "catalog:", - "@types/jest": "^30.0.0", "@types/node": "catalog:", "@types/supertest": "^6.0.3", "@types/varint": "^6.0.3", - "drizzle-kit": "^0.31.4", "@types/ws": "catalog:", + "@vitest/coverage-v8": "3.2.4", "cors": "^2.8.5", + "drizzle-kit": "^0.31.4", "express": "catalog:", - "jest": "^30.0.3", "nock": "catalog:", + "reflect-metadata": "catalog:", "rxjs": "catalog:", - "supertest": "^7.1.3", - "ts-jest": "^29.4.0", - "ts-node": "catalog:", + "supertest": "^7.1.4", + "tsdown": "^0.15.6", "tsyringe": "catalog:", "typescript": "catalog:", "undici": "^6.21.3", + "vite": "npm:rolldown-vite@latest", + "vite-node": "^3.2.4", + "vitest": "^3.2.4", "ws": "catalog:" }, + "pnpm": { + "overrides": { + "vite": "npm:rolldown-vite@latest" + }, + "patchedDependencies": { + "drizzle-kit": "patches/drizzle-kit.patch" + } + }, "resolutions": { "undici": "^6.20.1" }, "engines": { - "node": ">=20" + "node": ">=20.19" } } diff --git a/packages/action-menu/jest.config.ts b/packages/action-menu/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/action-menu/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/action-menu/package.json b/packages/action-menu/package.json index 4cc1156ca2..1b10bfcda5 100644 --- a/packages/action-menu/package.json +++ b/packages/action-menu/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/action-menu", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/action-menu", "repository": { @@ -17,11 +28,8 @@ "directory": "packages/action-menu" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/core": "workspace:*", @@ -32,7 +40,6 @@ }, "devDependencies": { "reflect-metadata": "catalog:", - "rimraf": "catalog:", "typescript": "catalog:" } } diff --git a/packages/action-menu/src/__tests__/ActionMenuModule.test.ts b/packages/action-menu/src/__tests__/ActionMenuModule.test.ts index e0c8551eb9..6762499877 100644 --- a/packages/action-menu/src/__tests__/ActionMenuModule.test.ts +++ b/packages/action-menu/src/__tests__/ActionMenuModule.test.ts @@ -10,14 +10,14 @@ import { ActionMenuRepository } from '../repository' import { ActionMenuService } from '../services' const featureRegistry = { - register: jest.fn(), + register: vi.fn(), } as unknown as DidCommFeatureRegistry const messageHandlerRegistry = new DidCommMessageHandlerRegistry() const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), resolve: (token: unknown) => token === DidCommFeatureRegistry ? featureRegistry diff --git a/packages/action-menu/src/repository/ActionMenuRepository.ts b/packages/action-menu/src/repository/ActionMenuRepository.ts index 3fdfe307aa..9df1309680 100644 --- a/packages/action-menu/src/repository/ActionMenuRepository.ts +++ b/packages/action-menu/src/repository/ActionMenuRepository.ts @@ -1,4 +1,4 @@ -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { ActionMenuRecord } from './ActionMenuRecord' diff --git a/packages/action-menu/src/services/__tests__/ActionMenuService.test.ts b/packages/action-menu/src/services/__tests__/ActionMenuService.test.ts index af22f80b96..be797cd875 100644 --- a/packages/action-menu/src/services/__tests__/ActionMenuService.test.ts +++ b/packages/action-menu/src/services/__tests__/ActionMenuService.test.ts @@ -6,6 +6,7 @@ import { EventEmitter } from '@credo-ts/core' import { DidCommDidExchangeState, DidCommInboundMessageContext } from '@credo-ts/didcomm' import { Subject } from 'rxjs' +import type { MockedClassConstructor } from '../../../../../tests/types' import { agentDependencies, getAgentConfig, @@ -17,14 +18,13 @@ import { ActionMenuEventTypes } from '../../ActionMenuEvents' import { ActionMenuRole } from '../../ActionMenuRole' import { ActionMenuState } from '../../ActionMenuState' import { ActionMenuProblemReportError } from '../../errors/ActionMenuProblemReportError' -import { ActionMenuProblemReportReason } from '../../errors/ActionMenuProblemReportReason' import { MenuMessage, MenuRequestMessage, PerformMessage } from '../../messages' import { ActionMenu } from '../../models' import { ActionMenuRecord, ActionMenuRepository } from '../../repository' import { ActionMenuService } from '../ActionMenuService' -jest.mock('../../repository/ActionMenuRepository') -const ActionMenuRepositoryMock = ActionMenuRepository as jest.Mock +vi.mock('../../repository/ActionMenuRepository') +const ActionMenuRepositoryMock = ActionMenuRepository as MockedClassConstructor describe('ActionMenuService', () => { const mockConnectionRecord = getMockConnection({ @@ -80,7 +80,7 @@ describe('ActionMenuService', () => { }) it('throws an error when duplicated options are specified', async () => { - expect( + await expect( actionMenuService.createMenu(agentContext, { connection: mockConnectionRecord, menu: { @@ -101,7 +101,7 @@ describe('ActionMenuService', () => { // No previous menu mockFunction(actionMenuRepository.findSingleByQuery).mockReturnValue(Promise.resolve(null)) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) await actionMenuService.createMenu(agentContext, { @@ -141,7 +141,7 @@ describe('ActionMenuService', () => { mockFunction(actionMenuRepository.findSingleByQuery).mockReturnValue(Promise.resolve(previousMenuDone)) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) await actionMenuService.createMenu(agentContext, { @@ -182,7 +182,7 @@ describe('ActionMenuService', () => { mockFunction(actionMenuRepository.findSingleByQuery).mockReturnValue(Promise.resolve(previousMenuClear)) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) await actionMenuService.createMenu(agentContext, { @@ -236,7 +236,7 @@ describe('ActionMenuService', () => { }) it('throws an error when invalid selection is provided', async () => { - expect( + await expect( actionMenuService.createPerform(agentContext, { actionMenuRecord: mockRecord, performedAction: { name: 'fake' }, @@ -249,7 +249,7 @@ describe('ActionMenuService', () => { (state) => state !== ActionMenuState.PreparingSelection )) { mockRecord.state = state - expect( + await expect( actionMenuService.createPerform(agentContext, { actionMenuRecord: mockRecord, performedAction: { name: 'opt1' }, @@ -259,7 +259,7 @@ describe('ActionMenuService', () => { }) it('emits a menu with a valid selection and action menu record', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) mockFunction(actionMenuRepository.findSingleByQuery).mockReturnValue(Promise.resolve(mockRecord)) @@ -312,7 +312,7 @@ describe('ActionMenuService', () => { it('no existing record: emits event and creates new request and record', async () => { mockFunction(actionMenuRepository.findSingleByQuery).mockReturnValue(Promise.resolve(null)) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) const { message, record } = await actionMenuService.createRequest(agentContext, { @@ -350,7 +350,7 @@ describe('ActionMenuService', () => { const previousState = mockRecord.state - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) const { message, record } = await actionMenuService.createRequest(agentContext, { @@ -408,7 +408,7 @@ describe('ActionMenuService', () => { }) it('requester role: emits a cleared menu', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) mockRecord.role = ActionMenuRole.Requester @@ -437,7 +437,7 @@ describe('ActionMenuService', () => { }) it('responder role: emits a cleared menu', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) mockRecord.state = ActionMenuState.AwaitingSelection @@ -507,7 +507,7 @@ describe('ActionMenuService', () => { connection: mockConnectionRecord, }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) mockFunction(actionMenuRepository.findSingleByQuery).mockReturnValue(Promise.resolve(null)) @@ -554,7 +554,7 @@ describe('ActionMenuService', () => { connection: mockConnectionRecord, }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) // It should accept any previous state @@ -632,7 +632,7 @@ describe('ActionMenuService', () => { connection: mockConnectionRecord, }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) mockFunction(actionMenuRepository.findSingleByQuery).mockReturnValue(Promise.resolve(mockRecord)) @@ -689,12 +689,14 @@ describe('ActionMenuService', () => { connection: mockConnectionRecord, }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) mockFunction(actionMenuRepository.findSingleByQuery).mockReturnValue(Promise.resolve(mockRecord)) - expect(actionMenuService.processPerform(messageContext)).rejects.toThrow('Selection does not match valid actions') + await expect(actionMenuService.processPerform(messageContext)).rejects.toThrow( + 'Selection does not match valid actions' + ) expect(actionMenuRepository.update).not.toHaveBeenCalled() expect(actionMenuRepository.save).not.toHaveBeenCalled() @@ -712,12 +714,12 @@ describe('ActionMenuService', () => { connection: mockConnectionRecord, }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) mockFunction(actionMenuRepository.findSingleByQuery).mockReturnValue(Promise.resolve(null)) - expect(actionMenuService.processPerform(messageContext)).rejects.toThrow( + await expect(actionMenuService.processPerform(messageContext)).rejects.toThrow( `No Action Menu found with thread id ${mockPerformMessage.threadId}` ) @@ -737,13 +739,13 @@ describe('ActionMenuService', () => { connection: mockConnectionRecord, }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) mockRecord.state = ActionMenuState.Done mockFunction(actionMenuRepository.findSingleByQuery).mockReturnValue(Promise.resolve(mockRecord)) - expect(actionMenuService.processPerform(messageContext)).rejects.toThrow( + await expect(actionMenuService.processPerform(messageContext)).rejects.toThrow( `Action Menu record is in invalid state ${mockRecord.state}. Valid states are: ${ActionMenuState.AwaitingSelection}.` ) @@ -763,17 +765,13 @@ describe('ActionMenuService', () => { connection: mockConnectionRecord, }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) mockRecord.state = ActionMenuState.Null mockFunction(actionMenuRepository.findSingleByQuery).mockReturnValue(Promise.resolve(mockRecord)) - expect(actionMenuService.processPerform(messageContext)).rejects.toThrow( - new ActionMenuProblemReportError('Action Menu has been cleared by the responder', { - problemCode: ActionMenuProblemReportReason.Timeout, - }) - ) + await expect(actionMenuService.processPerform(messageContext)).rejects.toThrow(ActionMenuProblemReportError) expect(actionMenuRepository.update).not.toHaveBeenCalled() expect(actionMenuRepository.save).not.toHaveBeenCalled() @@ -811,7 +809,7 @@ describe('ActionMenuService', () => { connection: mockConnectionRecord, }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) mockFunction(actionMenuRepository.findSingleByQuery).mockReturnValue(Promise.resolve(null)) @@ -848,7 +846,7 @@ describe('ActionMenuService', () => { connection: mockConnectionRecord, }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(ActionMenuEventTypes.ActionMenuStateChanged, eventListenerMock) // It should accept any previous state diff --git a/packages/action-menu/tests/setup.ts b/packages/action-menu/tests/setup.ts deleted file mode 100644 index 78143033f2..0000000000 --- a/packages/action-menu/tests/setup.ts +++ /dev/null @@ -1,3 +0,0 @@ -import 'reflect-metadata' - -jest.setTimeout(120000) diff --git a/packages/action-menu/tsconfig.build.json b/packages/action-menu/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/action-menu/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/action-menu/tsconfig.json b/packages/action-menu/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/packages/action-menu/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/packages/action-menu/tsdown.config.ts b/packages/action-menu/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/action-menu/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/anoncreds/jest.config.ts b/packages/anoncreds/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/anoncreds/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/anoncreds/package.json b/packages/anoncreds/package.json index 965c034457..0fcbe0d364 100644 --- a/packages/anoncreds/package.json +++ b/packages/anoncreds/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/anoncreds", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/anoncreds", "repository": { @@ -17,11 +28,8 @@ "directory": "packages/anoncreds" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@astronautlabs/jsonpath": "catalog:", @@ -36,7 +44,6 @@ "@credo-ts/node": "workspace:*", "@hyperledger/anoncreds-nodejs": "catalog:", "@hyperledger/anoncreds-shared": "catalog:", - "rimraf": "catalog:", "rxjs": "catalog:", "typescript": "catalog:" }, diff --git a/packages/anoncreds/src/AnonCredsApi.ts b/packages/anoncreds/src/AnonCredsApi.ts index a738285826..8117da43f0 100644 --- a/packages/anoncreds/src/AnonCredsApi.ts +++ b/packages/anoncreds/src/AnonCredsApi.ts @@ -44,9 +44,9 @@ import { AnonCredsSchemaRepository } from './repository/AnonCredsSchemaRepositor import { AnonCredsCredentialDefinitionRecordMetadataKeys } from './repository/anonCredsCredentialDefinitionRecordMetadataTypes' import { AnonCredsRevocationRegistryDefinitionRecordMetadataKeys } from './repository/anonCredsRevocationRegistryDefinitionRecordMetadataTypes' import { - AnonCredsHolderService, + type AnonCredsHolderService, AnonCredsHolderServiceSymbol, - AnonCredsIssuerService, + type AnonCredsIssuerService, AnonCredsIssuerServiceSymbol, } from './services' import { AnonCredsRegistryService } from './services/registry/AnonCredsRegistryService' diff --git a/packages/anoncreds/src/__tests__/AnonCredsModule.test.ts b/packages/anoncreds/src/__tests__/AnonCredsModule.test.ts index 730d78d741..7d824acdcf 100644 --- a/packages/anoncreds/src/__tests__/AnonCredsModule.test.ts +++ b/packages/anoncreds/src/__tests__/AnonCredsModule.test.ts @@ -21,8 +21,8 @@ import { AnonCredsHolderServiceSymbol, AnonCredsIssuerServiceSymbol, AnonCredsVe import { AnonCredsRegistryService } from '../services/registry/AnonCredsRegistryService' const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), } as unknown as DependencyManager const registry = {} as AnonCredsRegistry diff --git a/packages/anoncreds/src/anoncreds-rs/__tests__/AnonCredsRsHolderService.test.ts b/packages/anoncreds/src/anoncreds-rs/__tests__/AnonCredsRsHolderService.test.ts index 8ff0727c38..e163be7c84 100644 --- a/packages/anoncreds/src/anoncreds-rs/__tests__/AnonCredsRsHolderService.test.ts +++ b/packages/anoncreds/src/anoncreds-rs/__tests__/AnonCredsRsHolderService.test.ts @@ -7,6 +7,7 @@ import type { } from '@credo-ts/anoncreds' import type { DidRepository } from '@credo-ts/core' import type { JsonObject } from '@hyperledger/anoncreds-shared' +import type { MockedClassConstructor } from '../../../../../tests/types' import type { W3cAnonCredsCredentialMetadata } from '../../utils/metadata' import type { AnonCredsCredentialTags } from '../../utils/w3cAnonCredsUtils' @@ -51,22 +52,28 @@ import { const agentConfig = getAgentConfig('AnonCredsRsHolderServiceTest') const anonCredsHolderService = new AnonCredsRsHolderService() -jest.mock('../../../../anoncreds/src/repository/AnonCredsCredentialDefinitionRepository') -const CredentialDefinitionRepositoryMock = - AnonCredsCredentialDefinitionRepository as jest.Mock +vi.mock('../../../../anoncreds/src/repository/AnonCredsCredentialDefinitionRepository') +const CredentialDefinitionRepositoryMock = AnonCredsCredentialDefinitionRepository as MockedClassConstructor< + typeof AnonCredsCredentialDefinitionRepository +> const credentialDefinitionRepositoryMock = new CredentialDefinitionRepositoryMock() -jest.mock('../../../../anoncreds/src/repository/AnonCredsLinkSecretRepository') -const AnonCredsLinkSecretRepositoryMock = AnonCredsLinkSecretRepository as jest.Mock +vi.mock('../../../../anoncreds/src/repository/AnonCredsLinkSecretRepository') +const AnonCredsLinkSecretRepositoryMock = AnonCredsLinkSecretRepository as MockedClassConstructor< + typeof AnonCredsLinkSecretRepository +> const anoncredsLinkSecretRepositoryMock = new AnonCredsLinkSecretRepositoryMock() -jest.mock('../../../../core/src/modules/vc/repository/W3cCredentialRepository') -const W3cCredentialRepositoryMock = W3cCredentialRepository as jest.Mock +vi.mock('../../../../core/src/modules/vc/repository/W3cCredentialRepository') +const W3cCredentialRepositoryMock = W3cCredentialRepository as MockedClassConstructor const w3cCredentialRepositoryMock = new W3cCredentialRepositoryMock() -jest.mock('../../../../anoncreds/src/repository/AnonCredsCredentialRepository') -const AnonCredsCredentialRepositoryMock = AnonCredsCredentialRepository as jest.Mock +vi.mock('../../../../anoncreds/src/repository/AnonCredsCredentialRepository') +const AnonCredsCredentialRepositoryMock = AnonCredsCredentialRepository as MockedClassConstructor< + typeof AnonCredsCredentialRepository +> const anoncredsCredentialRepositoryMock = new AnonCredsCredentialRepositoryMock() +mockFunction(anoncredsCredentialRepositoryMock.findByQuery).mockResolvedValue([]) const inMemoryStorageService = new InMemoryStorageService() @@ -96,9 +103,9 @@ const agentContext = getAgentContext({ }) describe('AnonCredsRsHolderService', () => { - const getByCredentialIdMock = jest.spyOn(anoncredsCredentialRepositoryMock, 'getByCredentialId') - const findByIdMock = jest.spyOn(w3cCredentialRepositoryMock, 'findById') - const findByQueryMock = jest.spyOn(w3cCredentialRepositoryMock, 'findByQuery') + const getByCredentialIdMock = vi.spyOn(anoncredsCredentialRepositoryMock, 'getByCredentialId') + const findByIdMock = vi.spyOn(w3cCredentialRepositoryMock, 'findById') + const findByQueryMock = vi.spyOn(w3cCredentialRepositoryMock, 'findByQuery') beforeEach(() => { findByIdMock.mockClear() @@ -316,8 +323,8 @@ describe('AnonCredsRsHolderService', () => { }) describe('getCredentialsForProofRequest', () => { - const findByQueryMock = jest.spyOn(w3cCredentialRepositoryMock, 'findByQuery') - const anonCredsFindByQueryMock = jest.spyOn(anoncredsCredentialRepositoryMock, 'findByQuery') + const findByQueryMock = vi.spyOn(w3cCredentialRepositoryMock, 'findByQuery') + const anonCredsFindByQueryMock = vi.spyOn(anoncredsCredentialRepositoryMock, 'findByQuery') const proofRequest: AnonCredsProofRequest = { nonce: anoncreds.generateNonce(), @@ -578,7 +585,7 @@ describe('AnonCredsRsHolderService', () => { methodName: 'inMemory', }) - expect(findByQueryMock).toHaveBeenCalledWith(agentContext, { + expect(w3cCredentialRepositoryMock.findByQuery).toHaveBeenCalledWith(agentContext, { anonCredsCredentialDefinitionId: 'credDefId', anonCredsSchemaId: 'schemaId', anonCredsSchemaIssuerId: 'schemaIssuerDid', @@ -611,7 +618,7 @@ describe('AnonCredsRsHolderService', () => { new AnonCredsLinkSecretRecord({ linkSecretId: 'linkSecretId', value: linkSecret }) ) - const saveCredentialMock = jest.spyOn(w3cCredentialRepositoryMock, 'save') + const saveCredentialMock = vi.spyOn(w3cCredentialRepositoryMock, 'save') const { credential } = await createCredentialForHolder({ agentContext, diff --git a/packages/anoncreds/src/index.ts b/packages/anoncreds/src/index.ts index 62294bc542..c27ab878ec 100644 --- a/packages/anoncreds/src/index.ts +++ b/packages/anoncreds/src/index.ts @@ -8,7 +8,7 @@ export * from './formats' export * from './protocols' export { AnonCredsModule } from './AnonCredsModule' -export { AnonCredsModuleConfig, AnonCredsModuleConfigOptions } from './AnonCredsModuleConfig' +export { AnonCredsModuleConfig, type AnonCredsModuleConfigOptions } from './AnonCredsModuleConfig' export { AnonCredsApi } from './AnonCredsApi' export * from './AnonCredsApiOptions' export { generateLegacyProverDidLikeString } from './utils/proverDid' @@ -16,7 +16,7 @@ export * from './utils/indyIdentifiers' export { assertBestPracticeRevocationInterval } from './utils/revocationInterval' export { storeLinkSecret } from './utils/linkSecret' -export { dateToTimestamp, AnonCredsCredentialValue, AnonCredsCredentialMetadata } from './utils' +export { dateToTimestamp, type AnonCredsCredentialValue, type AnonCredsCredentialMetadata } from './utils' export { fetchCredentialDefinition, fetchRevocationRegistryDefinition, @@ -25,6 +25,6 @@ export { } from './utils/anonCredsObjects' export { AnonCredsCredentialMetadataKey } from './utils/metadata' -export { getAnonCredsTagsFromRecord, AnonCredsCredentialTags } from './utils/w3cAnonCredsUtils' +export { getAnonCredsTagsFromRecord, type AnonCredsCredentialTags } from './utils/w3cAnonCredsUtils' export { W3cAnonCredsCredentialMetadataKey } from './utils/metadata' export { getCredentialsForAnonCredsProofRequest } from './utils/getCredentialsForAnonCredsRequest' diff --git a/packages/anoncreds/src/models/AnonCredsRequestedPredicate.ts b/packages/anoncreds/src/models/AnonCredsRequestedPredicate.ts index 9df0bcd698..6e5e646c1f 100644 --- a/packages/anoncreds/src/models/AnonCredsRequestedPredicate.ts +++ b/packages/anoncreds/src/models/AnonCredsRequestedPredicate.ts @@ -3,7 +3,7 @@ import type { AnonCredsRestrictionOptions } from './AnonCredsRestriction' import { Expose, Type } from 'class-transformer' import { IsArray, IsIn, IsInstance, IsInt, IsOptional, IsString, ValidateNested } from 'class-validator' -import { AnonCredsPredicateType, anonCredsPredicateType } from '../models' +import { type AnonCredsPredicateType, anonCredsPredicateType } from '../models' import { AnonCredsRestriction, AnonCredsRestrictionTransformer } from './AnonCredsRestriction' import { AnonCredsRevocationInterval } from './AnonCredsRevocationInterval' diff --git a/packages/anoncreds/src/protocols/credentials/v1/__tests__/V1CredentialProtocolCred.test.ts b/packages/anoncreds/src/protocols/credentials/v1/__tests__/V1CredentialProtocolCred.test.ts index 2809cbe6b5..2c9103a12a 100644 --- a/packages/anoncreds/src/protocols/credentials/v1/__tests__/V1CredentialProtocolCred.test.ts +++ b/packages/anoncreds/src/protocols/credentials/v1/__tests__/V1CredentialProtocolCred.test.ts @@ -24,6 +24,7 @@ import { } from '@credo-ts/didcomm' import { Subject } from 'rxjs' +import type { MockedClassConstructor } from '../../../../../../../tests/types' import { getAgentConfig, getAgentContext, getMockConnection, mockFunction } from '../../../../../../core/tests/helpers' import { DidCommConnectionService } from '../../../../../../didcomm/src/modules/connections/services/DidCommConnectionService' import { DidCommCredentialExchangeRepository } from '../../../../../../didcomm/src/modules/credentials/repository/DidCommCredentialExchangeRepository' @@ -45,25 +46,20 @@ import { } from '../messages' // Mock classes -jest.mock('../../../../../../didcomm/src/modules/credentials/repository/DidCommCredentialExchangeRepository') -jest.mock('../../../../formats/LegacyIndyDidCommCredentialFormatService') -jest.mock('../../../../../../didcomm/src/repository/DidCommMessageRepository') -jest.mock('../../../../../../didcomm/src/modules/connections/services/DidCommConnectionService') +vi.mock('../../../../../../didcomm/src/modules/credentials/repository/DidCommCredentialExchangeRepository') +vi.mock('../../../../formats/LegacyIndyDidCommCredentialFormatService') +vi.mock('../../../../../../didcomm/src/repository/DidCommMessageRepository') +vi.mock('../../../../../../didcomm/src/modules/connections/services/DidCommConnectionService') // Mock typed object -const CredentialRepositoryMock = DidCommCredentialExchangeRepository as jest.Mock -const LegacyIndyCredentialFormatServiceMock = - LegacyIndyDidCommCredentialFormatService as jest.Mock -const DidCommMessageRepositoryMock = DidCommMessageRepository as jest.Mock -const ConnectionServiceMock = DidCommConnectionService as jest.Mock - -const credentialRepository = new CredentialRepositoryMock() -const didCommMessageRepository = new DidCommMessageRepositoryMock() -const legacyIndyCredentialFormatService = new LegacyIndyCredentialFormatServiceMock() -const connectionService = new ConnectionServiceMock() - -// @ts-ignore -legacyIndyCredentialFormatService.credentialRecordType = 'w3c' +const CredentialRepositoryMock = DidCommCredentialExchangeRepository as MockedClassConstructor< + typeof DidCommCredentialExchangeRepository +> +const LegacyIndyCredentialFormatServiceMock = LegacyIndyDidCommCredentialFormatService as MockedClassConstructor< + typeof LegacyIndyDidCommCredentialFormatService +> +const DidCommMessageRepositoryMock = DidCommMessageRepository as MockedClassConstructor +const ConnectionServiceMock = DidCommConnectionService as MockedClassConstructor const connection = getMockConnection({ id: '123', @@ -190,11 +186,23 @@ describe('DidCommCredentialV1Protocol', () => { let agentContext: AgentContext let credentialProtocol: DidCommCredentialV1Protocol + let credentialRepository: DidCommCredentialExchangeRepository + let didCommMessageRepository: DidCommMessageRepository + let legacyIndyCredentialFormatService: LegacyIndyDidCommCredentialFormatService + beforeEach(async () => { // real objects agentConfig = getAgentConfig('V1CredentialProtocolCredTest') eventEmitter = new EventEmitter(agentConfig.agentDependencies, new Subject()) + credentialRepository = new CredentialRepositoryMock() + didCommMessageRepository = new DidCommMessageRepositoryMock() + legacyIndyCredentialFormatService = new LegacyIndyCredentialFormatServiceMock() + const connectionService = new ConnectionServiceMock() + + // @ts-ignore + legacyIndyCredentialFormatService.credentialRecordType = 'w3c' + agentContext = getAgentContext({ registerInstances: [ [DidCommCredentialExchangeRepository, credentialRepository], @@ -219,7 +227,7 @@ describe('DidCommCredentialV1Protocol', () => { }) afterEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() }) describe('acceptOffer', () => { @@ -280,7 +288,7 @@ describe('DidCommCredentialV1Protocol', () => { state: DidCommCredentialState.OfferReceived, }) - const updateStateSpy = jest.spyOn(credentialProtocol, 'updateState') + const updateStateSpy = vi.spyOn(credentialProtocol, 'updateState') // mock resolved format call mockFunction(legacyIndyCredentialFormatService.acceptOffer).mockResolvedValue({ @@ -335,7 +343,7 @@ describe('DidCommCredentialV1Protocol', () => { }) test(`updates state to ${DidCommCredentialState.RequestReceived}, set request and returns credential record`, async () => { - const repositoryUpdateSpy = jest.spyOn(credentialRepository, 'update') + const repositoryUpdateSpy = vi.spyOn(credentialRepository, 'update') // given mockFunction(credentialRepository.getSingleByQuery).mockReturnValue(Promise.resolve(credential)) @@ -353,7 +361,7 @@ describe('DidCommCredentialV1Protocol', () => { }) test(`emits stateChange event from ${DidCommCredentialState.OfferSent} to ${DidCommCredentialState.RequestReceived}`, async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommCredentialStateChanged, eventListenerMock @@ -434,7 +442,7 @@ describe('DidCommCredentialV1Protocol', () => { }), }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommCredentialStateChanged, eventListenerMock @@ -555,7 +563,7 @@ describe('DidCommCredentialV1Protocol', () => { test(`updates state to ${DidCommCredentialState.Done}`, async () => { // given - const repositoryUpdateSpy = jest.spyOn(credentialRepository, 'update') + const repositoryUpdateSpy = vi.spyOn(credentialRepository, 'update') // when await credentialProtocol.acceptCredential(agentContext, { credentialExchangeRecord: credential }) @@ -569,7 +577,7 @@ describe('DidCommCredentialV1Protocol', () => { }) test(`emits stateChange event from ${DidCommCredentialState.CredentialReceived} to ${DidCommCredentialState.Done}`, async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommCredentialStateChanged, eventListenerMock @@ -648,7 +656,7 @@ describe('DidCommCredentialV1Protocol', () => { }) test(`updates state to ${DidCommCredentialState.Done} and returns credential record`, async () => { - const repositoryUpdateSpy = jest.spyOn(credentialRepository, 'update') + const repositoryUpdateSpy = vi.spyOn(credentialRepository, 'update') // given mockFunction(credentialRepository.getSingleByQuery).mockReturnValue(Promise.resolve(credential)) @@ -730,7 +738,7 @@ describe('DidCommCredentialV1Protocol', () => { }) test('updates problem report error message and returns credential record', async () => { - const repositoryUpdateSpy = jest.spyOn(credentialRepository, 'update') + const repositoryUpdateSpy = vi.spyOn(credentialRepository, 'update') // given mockFunction(credentialRepository.getSingleByQuery).mockReturnValue(Promise.resolve(credential)) @@ -823,8 +831,9 @@ describe('DidCommCredentialV1Protocol', () => { it('should call delete from repository', async () => { const credentialExchangeRecord = mockCredentialRecord() mockFunction(credentialRepository.getById).mockReturnValue(Promise.resolve(credentialExchangeRecord)) + mockFunction(credentialRepository.delete).mockResolvedValue() - const repositoryDeleteSpy = jest.spyOn(credentialRepository, 'delete') + const repositoryDeleteSpy = vi.spyOn(credentialRepository, 'delete') await credentialProtocol.delete(agentContext, credentialExchangeRecord) expect(repositoryDeleteSpy).toHaveBeenNthCalledWith(1, agentContext, credentialExchangeRecord) }) @@ -834,6 +843,7 @@ describe('DidCommCredentialV1Protocol', () => { const credentialExchangeRecord = mockCredentialRecord() mockFunction(credentialRepository.getById).mockResolvedValue(credentialExchangeRecord) + mockFunction(credentialRepository.delete).mockResolvedValue() await credentialProtocol.delete(agentContext, credentialExchangeRecord, { deleteAssociatedCredentials: true, @@ -852,6 +862,7 @@ describe('DidCommCredentialV1Protocol', () => { const credentialExchangeRecord = mockCredentialRecord() mockFunction(credentialRepository.getById).mockResolvedValue(credentialExchangeRecord) + mockFunction(credentialRepository.delete).mockResolvedValue() await credentialProtocol.delete(agentContext, credentialExchangeRecord, { deleteAssociatedCredentials: false, @@ -866,6 +877,7 @@ describe('DidCommCredentialV1Protocol', () => { const credentialExchangeRecord = mockCredentialRecord() mockFunction(credentialRepository.getById).mockResolvedValue(credentialExchangeRecord) + mockFunction(credentialRepository.delete).mockResolvedValue() await credentialProtocol.delete(agentContext, credentialExchangeRecord) @@ -880,6 +892,7 @@ describe('DidCommCredentialV1Protocol', () => { const credentialExchangeRecord = mockCredentialRecord() mockFunction(credentialRepository.getById).mockResolvedValue(credentialExchangeRecord) + mockFunction(credentialRepository.delete).mockResolvedValue() await credentialProtocol.delete(agentContext, credentialExchangeRecord) diff --git a/packages/anoncreds/src/protocols/credentials/v1/__tests__/V1CredentialProtocolProposeOffer.test.ts b/packages/anoncreds/src/protocols/credentials/v1/__tests__/V1CredentialProtocolProposeOffer.test.ts index 4ae7919295..fc0ed0d5bf 100644 --- a/packages/anoncreds/src/protocols/credentials/v1/__tests__/V1CredentialProtocolProposeOffer.test.ts +++ b/packages/anoncreds/src/protocols/credentials/v1/__tests__/V1CredentialProtocolProposeOffer.test.ts @@ -1,6 +1,6 @@ import type { CredentialProtocolOptions, DidCommCredentialStateChangedEvent } from '@credo-ts/didcomm' -import { EventEmitter, JsonTransformer } from '@credo-ts/core' +import { AgentContext, EventEmitter, JsonTransformer } from '@credo-ts/core' import { DidCommAttachment, DidCommAttachmentData, @@ -13,6 +13,7 @@ import { } from '@credo-ts/didcomm' import { Subject } from 'rxjs' +import type { MockedClassConstructor } from '../../../../../../../tests/types' import { getAgentConfig, getAgentContext, getMockConnection, mockFunction } from '../../../../../../core/tests/helpers' import { DidCommConnectionService } from '../../../../../../didcomm/src/modules/connections/services/DidCommConnectionService' import { DidCommCredentialExchangeRepository } from '../../../../../../didcomm/src/modules/credentials/repository/DidCommCredentialExchangeRepository' @@ -22,39 +23,24 @@ import { DidCommCredentialV1Protocol } from '../DidCommCredentialV1Protocol' import { DidCommCredentialV1Preview, INDY_CREDENTIAL_OFFER_ATTACHMENT_ID, V1OfferCredentialMessage } from '../messages' // Mock classes -jest.mock('../../../../../../didcomm/src/modules/credentials/repository/DidCommCredentialExchangeRepository') -jest.mock('../../../../formats/LegacyIndyDidCommCredentialFormatService') -jest.mock('../../../../../../didcomm/src/repository/DidCommMessageRepository') -jest.mock('../../../../../../didcomm/src/modules/connections/services/DidCommConnectionService') +vi.mock('../../../../../../didcomm/src/modules/credentials/repository/DidCommCredentialExchangeRepository') +vi.mock('../../../../formats/LegacyIndyDidCommCredentialFormatService') +vi.mock('../../../../../../didcomm/src/repository/DidCommMessageRepository') +vi.mock('../../../../../../didcomm/src/modules/connections/services/DidCommConnectionService') // Mock typed object -const CredentialRepositoryMock = DidCommCredentialExchangeRepository as jest.Mock -const DidCommMessageRepositoryMock = DidCommMessageRepository as jest.Mock -const ConnectionServiceMock = DidCommConnectionService as jest.Mock -const LegacyIndyCredentialFormatServiceMock = - LegacyIndyDidCommCredentialFormatService as jest.Mock - -const credentialRepository = new CredentialRepositoryMock() -const didCommMessageRepository = new DidCommMessageRepositoryMock() -const connectionService = new ConnectionServiceMock() -const indyCredentialFormatService = new LegacyIndyCredentialFormatServiceMock() +const CredentialRepositoryMock = DidCommCredentialExchangeRepository as MockedClassConstructor< + typeof DidCommCredentialExchangeRepository +> +const DidCommMessageRepositoryMock = DidCommMessageRepository as MockedClassConstructor +const ConnectionServiceMock = DidCommConnectionService as MockedClassConstructor +const LegacyIndyCredentialFormatServiceMock = LegacyIndyDidCommCredentialFormatService as MockedClassConstructor< + typeof LegacyIndyDidCommCredentialFormatService +> const agentConfig = getAgentConfig('V1CredentialProtocolProposeOfferTest') const eventEmitter = new EventEmitter(agentConfig.agentDependencies, new Subject()) -const agentContext = getAgentContext({ - registerInstances: [ - [DidCommCredentialExchangeRepository, credentialRepository], - [DidCommMessageRepository, didCommMessageRepository], - [DidCommConnectionService, connectionService], - [EventEmitter, eventEmitter], - ], - agentConfig, -}) - -// @ts-ignore -indyCredentialFormatService.credentialRecordType = 'w3c' - const connectionRecord = getMockConnection({ id: '123', state: DidCommDidExchangeState.Completed, @@ -89,8 +75,30 @@ const proposalAttachment = new DidCommAttachment({ describe('V1CredentialProtocolProposeOffer', () => { let credentialProtocol: DidCommCredentialV1Protocol + let agentContext: AgentContext + + let credentialRepository: DidCommCredentialExchangeRepository + let indyCredentialFormatService: LegacyIndyDidCommCredentialFormatService beforeEach(async () => { + const didCommMessageRepository = new DidCommMessageRepositoryMock() + const connectionService = new ConnectionServiceMock() + credentialRepository = new CredentialRepositoryMock() + indyCredentialFormatService = new LegacyIndyCredentialFormatServiceMock() + + // @ts-ignore + indyCredentialFormatService.credentialRecordType = 'w3c' + + agentContext = getAgentContext({ + registerInstances: [ + [DidCommCredentialExchangeRepository, credentialRepository], + [DidCommMessageRepository, didCommMessageRepository], + [DidCommConnectionService, connectionService], + [EventEmitter, eventEmitter], + ], + agentConfig, + }) + // mock function implementations mockFunction(connectionService.getById).mockResolvedValue(connectionRecord) @@ -100,7 +108,7 @@ describe('V1CredentialProtocolProposeOffer', () => { }) afterEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() }) describe('createProposal', () => { @@ -123,7 +131,7 @@ describe('V1CredentialProtocolProposeOffer', () => { } test(`creates credential record in ${DidCommCredentialState.OfferSent} state with offer, thread id`, async () => { - const repositorySaveSpy = jest.spyOn(credentialRepository, 'save') + const repositorySaveSpy = vi.spyOn(credentialRepository, 'save') mockFunction(indyCredentialFormatService.createProposal).mockResolvedValue({ attachment: proposalAttachment, @@ -150,7 +158,7 @@ describe('V1CredentialProtocolProposeOffer', () => { }) test(`emits stateChange event with a new credential in ${DidCommCredentialState.ProposalSent} state`, async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommCredentialStateChanged, eventListenerMock @@ -245,7 +253,7 @@ describe('V1CredentialProtocolProposeOffer', () => { previewAttributes: credentialPreview.attributes, }) - const repositorySaveSpy = jest.spyOn(credentialRepository, 'save') + const repositorySaveSpy = vi.spyOn(credentialRepository, 'save') await credentialProtocol.createOffer(agentContext, offerOptions) @@ -264,7 +272,7 @@ describe('V1CredentialProtocolProposeOffer', () => { }) test(`emits stateChange event with a new credential in ${DidCommCredentialState.OfferSent} state`, async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommCredentialStateChanged, eventListenerMock @@ -345,17 +353,17 @@ describe('V1CredentialProtocolProposeOffer', () => { }) describe('processOffer', () => { - const credentialOfferMessage = new V1OfferCredentialMessage({ - comment: 'some comment', - credentialPreview: credentialPreview, - offerAttachments: [offerAttachment], - }) - const messageContext = new DidCommInboundMessageContext(credentialOfferMessage, { - agentContext, - connection: connectionRecord, - }) - test(`creates and return credential record in ${DidCommCredentialState.OfferReceived} state with offer, thread ID`, async () => { + const credentialOfferMessage = new V1OfferCredentialMessage({ + comment: 'some comment', + credentialPreview: credentialPreview, + offerAttachments: [offerAttachment], + }) + const messageContext = new DidCommInboundMessageContext(credentialOfferMessage, { + agentContext, + connection: connectionRecord, + }) + // when await credentialProtocol.processOffer(messageContext) @@ -376,7 +384,17 @@ describe('V1CredentialProtocolProposeOffer', () => { }) test(`emits stateChange event with ${DidCommCredentialState.OfferReceived}`, async () => { - const eventListenerMock = jest.fn() + const credentialOfferMessage = new V1OfferCredentialMessage({ + comment: 'some comment', + credentialPreview: credentialPreview, + offerAttachments: [offerAttachment], + }) + const messageContext = new DidCommInboundMessageContext(credentialOfferMessage, { + agentContext, + connection: connectionRecord, + }) + + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommCredentialStateChanged, eventListenerMock diff --git a/packages/anoncreds/src/protocols/credentials/v1/errors/index.ts b/packages/anoncreds/src/protocols/credentials/v1/errors/index.ts index eb3679f6b5..bafbea924b 100644 --- a/packages/anoncreds/src/protocols/credentials/v1/errors/index.ts +++ b/packages/anoncreds/src/protocols/credentials/v1/errors/index.ts @@ -1,4 +1,4 @@ export { DidCommCredentialV1ProblemReportError, - DidCommCredentialV1ProblemReportErrorOptions, + type DidCommCredentialV1ProblemReportErrorOptions, } from './DidCommCredentialV1ProblemReportError' diff --git a/packages/anoncreds/src/protocols/proofs/v1/DidCommProofV1Protocol.ts b/packages/anoncreds/src/protocols/proofs/v1/DidCommProofV1Protocol.ts index 1539862b28..79f37feccd 100644 --- a/packages/anoncreds/src/protocols/proofs/v1/DidCommProofV1Protocol.ts +++ b/packages/anoncreds/src/protocols/proofs/v1/DidCommProofV1Protocol.ts @@ -32,7 +32,7 @@ import { import { composeProofAutoAccept, createRequestFromPreview } from '../../../utils' -import { AnonCredsHolderService, AnonCredsHolderServiceSymbol } from '../../../services' +import { type AnonCredsHolderService, AnonCredsHolderServiceSymbol } from '../../../services' import { DidCommPresentationV1ProblemReportError } from './errors' import { DidCommPresentationV1AckHandler, diff --git a/packages/anoncreds/src/protocols/proofs/v1/__tests__/V1ProofProtocol.test.ts b/packages/anoncreds/src/protocols/proofs/v1/__tests__/V1ProofProtocol.test.ts index f7524d1888..5962a81bb5 100644 --- a/packages/anoncreds/src/protocols/proofs/v1/__tests__/V1ProofProtocol.test.ts +++ b/packages/anoncreds/src/protocols/proofs/v1/__tests__/V1ProofProtocol.test.ts @@ -3,6 +3,7 @@ import type { CustomDidCommProofExchangeTags, DidCommProofStateChangedEvent } fr import { Subject } from 'rxjs' +import type { MockedClassConstructor } from '../../../../../../../tests/types' import { EventEmitter } from '../../../../../../core/src' import { getAgentConfig, getAgentContext, getMockConnection, mockFunction } from '../../../../../../core/tests' import { @@ -25,16 +26,20 @@ import { DidCommRequestPresentationV1Message, INDY_PROOF_REQUEST_ATTACHMENT_ID } import { DidCommPresentationV1ProblemReportMessage } from '../messages/DidCommPresentationV1ProblemReportMessage' // Mock classes -jest.mock('../../../../../../didcomm/src/modules/proofs/repository/DidCommProofExchangeRepository') -jest.mock('../../../../formats/LegacyIndyDidCommProofFormatService') -jest.mock('../../../../../../didcomm/src/repository/DidCommMessageRepository') -jest.mock('../../../../../../didcomm/src/modules/connections/services/DidCommConnectionService') +vi.mock('../../../../../../didcomm/src/modules/proofs/repository/DidCommProofExchangeRepository') +vi.mock('../../../../formats/LegacyIndyDidCommProofFormatService') +vi.mock('../../../../../../didcomm/src/repository/DidCommMessageRepository') +vi.mock('../../../../../../didcomm/src/modules/connections/services/DidCommConnectionService') // Mock typed object -const ProofRepositoryMock = DidCommProofExchangeRepository as jest.Mock -const connectionServiceMock = DidCommConnectionService as jest.Mock -const didCommMessageRepositoryMock = DidCommMessageRepository as jest.Mock -const indyProofFormatServiceMock = LegacyIndyDidCommProofFormatService as jest.Mock +const ProofRepositoryMock = DidCommProofExchangeRepository as MockedClassConstructor< + typeof DidCommProofExchangeRepository +> +const connectionServiceMock = DidCommConnectionService as MockedClassConstructor +const didCommMessageRepositoryMock = DidCommMessageRepository as MockedClassConstructor +const indyProofFormatServiceMock = LegacyIndyDidCommProofFormatService as MockedClassConstructor< + typeof LegacyIndyDidCommProofFormatService +> const proofRepository = new ProofRepositoryMock() const connectionService = new connectionServiceMock() @@ -130,7 +135,7 @@ describe('DidCommProofV1Protocol', () => { }) test(`creates and return proof record in ${DidCommProofState.PresentationReceived} state with offer, without thread ID`, async () => { - const repositorySaveSpy = jest.spyOn(proofRepository, 'save') + const repositorySaveSpy = vi.spyOn(proofRepository, 'save') // when const returnedProofExchangeRecord = await proofProtocol.processRequest(messageContext) @@ -151,7 +156,7 @@ describe('DidCommProofV1Protocol', () => { }) test(`emits stateChange event with ${DidCommProofState.RequestReceived}`, async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(DidCommProofEventTypes.ProofStateChanged, eventListenerMock) // when @@ -232,7 +237,7 @@ describe('DidCommProofV1Protocol', () => { }) test('updates problem report error message and returns proof record', async () => { - const repositoryUpdateSpy = jest.spyOn(proofRepository, 'update') + const repositoryUpdateSpy = vi.spyOn(proofRepository, 'update') // given mockFunction(proofRepository.getSingleByQuery).mockReturnValue(Promise.resolve(proof)) diff --git a/packages/anoncreds/src/protocols/proofs/v1/models/DidCommPresentationV1Preview.ts b/packages/anoncreds/src/protocols/proofs/v1/models/DidCommPresentationV1Preview.ts index 02cfe73a07..9dcab57c57 100644 --- a/packages/anoncreds/src/protocols/proofs/v1/models/DidCommPresentationV1Preview.ts +++ b/packages/anoncreds/src/protocols/proofs/v1/models/DidCommPresentationV1Preview.ts @@ -13,7 +13,7 @@ import { ValidateNested, } from 'class-validator' -import { AnonCredsPredicateType, anonCredsPredicateType } from '../../../../models' +import { type AnonCredsPredicateType, anonCredsPredicateType } from '../../../../models' import { unqualifiedCredentialDefinitionIdRegex } from '../../../../utils' export interface DidCommPresentationV1PreviewAttributeOptions { diff --git a/packages/anoncreds/src/repository/AnonCredsCredentialDefinitionPrivateRepository.ts b/packages/anoncreds/src/repository/AnonCredsCredentialDefinitionPrivateRepository.ts index 3b3a278435..eaace0ec94 100644 --- a/packages/anoncreds/src/repository/AnonCredsCredentialDefinitionPrivateRepository.ts +++ b/packages/anoncreds/src/repository/AnonCredsCredentialDefinitionPrivateRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { AnonCredsCredentialDefinitionPrivateRecord } from './AnonCredsCredentialDefinitionPrivateRecord' diff --git a/packages/anoncreds/src/repository/AnonCredsCredentialDefinitionRepository.ts b/packages/anoncreds/src/repository/AnonCredsCredentialDefinitionRepository.ts index 327ae4ddee..f642e07c85 100644 --- a/packages/anoncreds/src/repository/AnonCredsCredentialDefinitionRepository.ts +++ b/packages/anoncreds/src/repository/AnonCredsCredentialDefinitionRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { AnonCredsCredentialDefinitionRecord } from './AnonCredsCredentialDefinitionRecord' diff --git a/packages/anoncreds/src/repository/AnonCredsCredentialRepository.ts b/packages/anoncreds/src/repository/AnonCredsCredentialRepository.ts index 1314501124..d78d7836c5 100644 --- a/packages/anoncreds/src/repository/AnonCredsCredentialRepository.ts +++ b/packages/anoncreds/src/repository/AnonCredsCredentialRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { AnonCredsCredentialRecord } from './AnonCredsCredentialRecord' diff --git a/packages/anoncreds/src/repository/AnonCredsKeyCorrectnessProofRepository.ts b/packages/anoncreds/src/repository/AnonCredsKeyCorrectnessProofRepository.ts index b360f84877..70ff1c2219 100644 --- a/packages/anoncreds/src/repository/AnonCredsKeyCorrectnessProofRepository.ts +++ b/packages/anoncreds/src/repository/AnonCredsKeyCorrectnessProofRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { AnonCredsKeyCorrectnessProofRecord } from './AnonCredsKeyCorrectnessProofRecord' diff --git a/packages/anoncreds/src/repository/AnonCredsLinkSecretRepository.ts b/packages/anoncreds/src/repository/AnonCredsLinkSecretRepository.ts index 2d2590e78c..535b1bfb10 100644 --- a/packages/anoncreds/src/repository/AnonCredsLinkSecretRepository.ts +++ b/packages/anoncreds/src/repository/AnonCredsLinkSecretRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { AnonCredsLinkSecretRecord } from './AnonCredsLinkSecretRecord' diff --git a/packages/anoncreds/src/repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.ts b/packages/anoncreds/src/repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.ts index 6d0b0d126e..b9a090e311 100644 --- a/packages/anoncreds/src/repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.ts +++ b/packages/anoncreds/src/repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.ts @@ -1,7 +1,7 @@ import type { AgentContext } from '@credo-ts/core' import type { AnonCredsRevocationRegistryState } from './AnonCredsRevocationRegistryDefinitionPrivateRecord' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { AnonCredsRevocationRegistryDefinitionPrivateRecord } from './AnonCredsRevocationRegistryDefinitionPrivateRecord' diff --git a/packages/anoncreds/src/repository/AnonCredsRevocationRegistryDefinitionRepository.ts b/packages/anoncreds/src/repository/AnonCredsRevocationRegistryDefinitionRepository.ts index addb8f9b89..4932ff714a 100644 --- a/packages/anoncreds/src/repository/AnonCredsRevocationRegistryDefinitionRepository.ts +++ b/packages/anoncreds/src/repository/AnonCredsRevocationRegistryDefinitionRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { AnonCredsRevocationRegistryDefinitionRecord } from './AnonCredsRevocationRegistryDefinitionRecord' diff --git a/packages/anoncreds/src/repository/AnonCredsSchemaRepository.ts b/packages/anoncreds/src/repository/AnonCredsSchemaRepository.ts index 53619a0475..f6b6ede9b8 100644 --- a/packages/anoncreds/src/repository/AnonCredsSchemaRepository.ts +++ b/packages/anoncreds/src/repository/AnonCredsSchemaRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { AnonCredsSchemaRecord } from './AnonCredsSchemaRecord' diff --git a/packages/anoncreds/src/services/index.ts b/packages/anoncreds/src/services/index.ts index 419436fde9..761b878a1d 100644 --- a/packages/anoncreds/src/services/index.ts +++ b/packages/anoncreds/src/services/index.ts @@ -3,6 +3,6 @@ export * from './AnonCredsHolderServiceOptions' export * from './AnonCredsIssuerService' export * from './AnonCredsIssuerServiceOptions' export * from './registry' -export { TailsFileService, BasicTailsFileService } from './tails' +export { type TailsFileService, BasicTailsFileService } from './tails' export * from './AnonCredsVerifierService' export * from './AnonCredsVerifierServiceOptions' diff --git a/packages/anoncreds/src/services/registry/index.ts b/packages/anoncreds/src/services/registry/index.ts index 6577018992..b6713e95b7 100644 --- a/packages/anoncreds/src/services/registry/index.ts +++ b/packages/anoncreds/src/services/registry/index.ts @@ -3,5 +3,5 @@ export * from './CredentialDefinitionOptions' export * from './SchemaOptions' export * from './RevocationRegistryDefinitionOptions' export * from './RevocationStatusListOptions' -export { AnonCredsResolutionMetadata } from './base' +export type { AnonCredsResolutionMetadata } from './base' export * from './AnonCredsRegistryService' diff --git a/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/credentialDefinition.test.ts b/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/credentialDefinition.test.ts index 65b40bcddb..6affeb31ed 100644 --- a/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/credentialDefinition.test.ts +++ b/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/credentialDefinition.test.ts @@ -1,5 +1,6 @@ import type { AnonCredsCredentialDefinition } from '../../../models' +import type { MockedClassConstructor } from '../../../../../../tests/types' import { JsonTransformer } from '../../../../../core/src' import { Agent } from '../../../../../core/src/agent/Agent' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../core/tests' @@ -11,9 +12,10 @@ import * as testModule from '../credentialDefinition' const agentConfig = getAgentConfig('AnonCreds Migration - Credential Exchange Record - 0.3.1-0.4.0') const agentContext = getAgentContext() -jest.mock('../../../repository/AnonCredsCredentialDefinitionRepository') -const AnonCredsCredentialDefinitionRepositoryMock = - AnonCredsCredentialDefinitionRepository as jest.Mock +vi.mock('../../../repository/AnonCredsCredentialDefinitionRepository') +const AnonCredsCredentialDefinitionRepositoryMock = AnonCredsCredentialDefinitionRepository as MockedClassConstructor< + typeof AnonCredsCredentialDefinitionRepository +> const credentialDefinitionRepository = new AnonCredsCredentialDefinitionRepositoryMock() const inMemoryAnonCredsRegistry = new InMemoryAnonCredsRegistry({ @@ -35,13 +37,13 @@ const inMemoryAnonCredsRegistry = new InMemoryAnonCredsRegistry({ const registryService = { getRegistryForIdentifier: () => inMemoryAnonCredsRegistry, } -jest.mock('../../../../../core/src/agent/Agent', () => { +vi.mock('../../../../../core/src/agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn((injectionSymbol) => + resolve: vi.fn((injectionSymbol) => injectionSymbol === AnonCredsCredentialDefinitionRepository ? credentialDefinitionRepository : registryService ), }, @@ -50,7 +52,7 @@ jest.mock('../../../../../core/src/agent/Agent', () => { }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as unknown as MockedClassConstructor describe('0.3.1-0.4.0 | AnonCreds Migration | Credential Definition Record', () => { let agent: Agent @@ -60,7 +62,7 @@ describe('0.3.1-0.4.0 | AnonCreds Migration | Credential Definition Record', () }) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('migrateAnonCredsCredentialDefinitionRecordToV0_4()', () => { diff --git a/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/credentialExchangeRecord.test.ts b/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/credentialExchangeRecord.test.ts index 621a5813ed..f46dd61221 100644 --- a/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/credentialExchangeRecord.test.ts +++ b/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/credentialExchangeRecord.test.ts @@ -1,5 +1,6 @@ import type { CredentialRecordBinding, DidCommCredentialState } from '../../../../../didcomm/src' +import type { MockedClassConstructor } from '../../../../../../tests/types' import { JsonTransformer } from '../../../../../core/src' import { Agent } from '../../../../../core/src/agent/Agent' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../core/tests' @@ -14,24 +15,26 @@ import * as testModule from '../credentialExchangeRecord' const agentConfig = getAgentConfig('AnonCreds Migration - Credential Exchange Record - 0.3.1-0.4.0') const agentContext = getAgentContext() -jest.mock('../../../../../didcomm/src/modules/credentials/repository/DidCommCredentialExchangeRepository') -const CredentialRepositoryMock = DidCommCredentialExchangeRepository as jest.Mock +vi.mock('../../../../../didcomm/src/modules/credentials/repository/DidCommCredentialExchangeRepository') +const CredentialRepositoryMock = DidCommCredentialExchangeRepository as MockedClassConstructor< + typeof DidCommCredentialExchangeRepository +> const credentialRepository = new CredentialRepositoryMock() -jest.mock('../../../../../core/src/agent/Agent', () => { +vi.mock('../../../../../core/src/agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn(() => credentialRepository), + resolve: vi.fn(() => credentialRepository), }, })), } }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.3.1-0.4.0 | AnonCreds Migration | Credential Exchange Record', () => { let agent: Agent diff --git a/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/linkSecret.test.ts b/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/linkSecret.test.ts index 5eb980f900..d0ff5930c9 100644 --- a/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/linkSecret.test.ts +++ b/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/linkSecret.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../tests/types' import { Agent } from '../../../../../core/src/agent/Agent' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../core/tests' import { AnonCredsLinkSecretRecord } from '../../../repository' @@ -7,24 +8,26 @@ import * as testModule from '../linkSecret' const agentConfig = getAgentConfig('AnonCreds Migration - Link Secret - 0.3.1-0.4.0') const agentContext = getAgentContext() -jest.mock('../../../repository/AnonCredsLinkSecretRepository') -const AnonCredsLinkSecretRepositoryMock = AnonCredsLinkSecretRepository as jest.Mock +vi.mock('../../../repository/AnonCredsLinkSecretRepository') +const AnonCredsLinkSecretRepositoryMock = AnonCredsLinkSecretRepository as MockedClassConstructor< + typeof AnonCredsLinkSecretRepository +> const linkSecretRepository = new AnonCredsLinkSecretRepositoryMock() -jest.mock('../../../../../core/src/agent/Agent', () => { +vi.mock('../../../../../core/src/agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn(() => linkSecretRepository), + resolve: vi.fn(() => linkSecretRepository), }, })), } }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.3.1-0.4.0 | AnonCreds Migration | Link Secret', () => { let agent: Agent @@ -34,7 +37,7 @@ describe('0.3.1-0.4.0 | AnonCreds Migration | Link Secret', () => { }) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('migrateLinkSecretToV0_4()', () => { diff --git a/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/schema.test.ts b/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/schema.test.ts index 0c2f2fd46e..fbe904015a 100644 --- a/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/schema.test.ts +++ b/packages/anoncreds/src/updates/0.3.1-0.4/__tests__/schema.test.ts @@ -1,5 +1,6 @@ import type { AnonCredsSchema } from '../../../models' +import type { MockedClassConstructor } from '../../../../../../tests/types' import { JsonTransformer } from '../../../../../core/src' import { Agent } from '../../../../../core/src/agent/Agent' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../core/tests' @@ -10,24 +11,26 @@ import * as testModule from '../schema' const agentConfig = getAgentConfig('AnonCreds Migration - Credential Exchange Record - 0.3.1-0.4.0') const agentContext = getAgentContext() -jest.mock('../../../repository/AnonCredsSchemaRepository') -const AnonCredsSchemaRepositoryMock = AnonCredsSchemaRepository as jest.Mock +vi.mock('../../../repository/AnonCredsSchemaRepository') +const AnonCredsSchemaRepositoryMock = AnonCredsSchemaRepository as MockedClassConstructor< + typeof AnonCredsSchemaRepository +> const schemaRepository = new AnonCredsSchemaRepositoryMock() -jest.mock('../../../../../core/src/agent/Agent', () => { +vi.mock('../../../../../core/src/agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn(() => schemaRepository), + resolve: vi.fn(() => schemaRepository), }, })), } }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.3.1-0.4.0 | AnonCreds Migration | Schema Record', () => { let agent: Agent @@ -37,7 +40,7 @@ describe('0.3.1-0.4.0 | AnonCreds Migration | Schema Record', () => { }) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('migrateAnonCredsSchemaRecordToV0_4()', () => { diff --git a/packages/anoncreds/src/updates/0.4-0.5/__tests__/w3cCredentialRecordMigration.test.ts b/packages/anoncreds/src/updates/0.4-0.5/__tests__/w3cCredentialRecordMigration.test.ts index a7672eb5b9..3a3afe6762 100644 --- a/packages/anoncreds/src/updates/0.4-0.5/__tests__/w3cCredentialRecordMigration.test.ts +++ b/packages/anoncreds/src/updates/0.4-0.5/__tests__/w3cCredentialRecordMigration.test.ts @@ -21,6 +21,7 @@ import { import { Subject } from 'rxjs' import { InMemoryStorageService } from '../../../../../../tests/InMemoryStorageService' +import type { MockedClassConstructor } from '../../../../../../tests/types' import { agentDependencies, getAgentConfig, getAgentContext, mockFunction, testLogger } from '../../../../../core/tests' import { InMemoryAnonCredsRegistry } from '../../../../tests/InMemoryAnonCredsRegistry' import { AnonCredsModuleConfig } from '../../../AnonCredsModuleConfig' @@ -43,20 +44,20 @@ const stop = new Subject() const eventEmitter = new EventEmitter(agentDependencies, stop) const w3cRepo = { - save: jest.fn(), - update: jest.fn(), + save: vi.fn(), + update: vi.fn(), } const credentialExchangeRepo = { - findByQuery: jest.fn(), - update: jest.fn(), + findByQuery: vi.fn(), + update: vi.fn(), } const inMemoryLruCache = { - get: jest.fn(), - set: jest.fn(), - clear: jest.fn(), - remove: jest.fn(), + get: vi.fn(), + set: vi.fn(), + clear: vi.fn(), + remove: vi.fn(), } const cacheModuleConfig = new CacheModuleConfig({ @@ -87,18 +88,18 @@ const agentContext = getAgentContext({ }) const anonCredsRepo = { - getAll: jest.fn(), - delete: jest.fn(), + getAll: vi.fn(), + delete: vi.fn(), } -jest.mock('../../../../../core/src/agent/Agent', () => { +vi.mock('../../../../../core/src/agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { // biome-ignore lint/suspicious/noExplicitAny: - resolve: jest.fn((repo: any) => { + resolve: vi.fn((repo: any) => { if (repo.prototype.constructor.name === 'AnonCredsCredentialRepository') { return anonCredsRepo } @@ -110,7 +111,7 @@ jest.mock('../../../../../core/src/agent/Agent', () => { }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.4-0.5 | AnonCredsRecord', () => { let agent: Agent diff --git a/packages/anoncreds/src/updates/__tests__/0.3.test.ts b/packages/anoncreds/src/updates/__tests__/0.3.test.ts index 8404bf2936..7441a2a4c2 100644 --- a/packages/anoncreds/src/updates/__tests__/0.3.test.ts +++ b/packages/anoncreds/src/updates/__tests__/0.3.test.ts @@ -15,13 +15,13 @@ import { // Backup date / time is the unique identifier for a backup, needs to be unique for every test const backupDate = new Date('2023-03-19T22:50:20.522Z') -jest.useFakeTimers().setSystemTime(backupDate) +vi.useFakeTimers().setSystemTime(backupDate) describe('UpdateAssistant | AnonCreds | v0.3.1 - v0.4', () => { it('should correctly update the credential exchange records for holders', async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(utils, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(utils, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const holderRecordsString = readFileSync( path.join(__dirname, '__fixtures__/holder-anoncreds-2-credentials-0.3.json'), @@ -91,7 +91,7 @@ describe('UpdateAssistant | AnonCreds | v0.3.1 - v0.4', () => { it('should correctly update the schema and credential definition, and create link secret records for issuers', async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(utils, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(utils, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const issuerRecordsString = readFileSync( path.join(__dirname, '__fixtures__/issuer-anoncreds-2-schema-credential-definition-credentials-0.3.json'), diff --git a/packages/anoncreds/src/updates/__tests__/0.4.test.ts b/packages/anoncreds/src/updates/__tests__/0.4.test.ts index 69eb587fd2..ce28563d41 100644 --- a/packages/anoncreds/src/updates/__tests__/0.4.test.ts +++ b/packages/anoncreds/src/updates/__tests__/0.4.test.ts @@ -23,13 +23,15 @@ import { // Backup date / time is the unique identifier for a backup, needs to be unique for every test const backupDate = new Date('2024-02-28T22:50:20.522Z') -jest.useFakeTimers().setSystemTime(backupDate) +vi.useFakeTimers().setSystemTime(backupDate) // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 -jest.mock('../../../../core/src/utils/uuid', () => { +vi.mock('../../../../core/src/utils/uuid', async (importOriginal) => { + const actual: object = await importOriginal() return { - uuid: jest.fn().mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`), + ...actual, + uuid: vi.fn().mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`), } }) diff --git a/packages/anoncreds/src/updates/__tests__/__snapshots__/0.3.test.ts.snap b/packages/anoncreds/src/updates/__tests__/__snapshots__/0.3.test.ts.snap index 89941a704d..85099304f9 100644 --- a/packages/anoncreds/src/updates/__tests__/__snapshots__/0.3.test.ts.snap +++ b/packages/anoncreds/src/updates/__tests__/__snapshots__/0.3.test.ts.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`UpdateAssistant | AnonCreds | v0.3.1 - v0.4 should correctly update the credential exchange records for holders 1`] = ` +exports[`UpdateAssistant | AnonCreds | v0.3.1 - v0.4 > should correctly update the credential exchange records for holders 1`] = ` { "2c250bf3-da8b-46ac-999d-509e4e6daafa": { "id": "2c250bf3-da8b-46ac-999d-509e4e6daafa", @@ -323,7 +323,7 @@ exports[`UpdateAssistant | AnonCreds | v0.3.1 - v0.4 should correctly update the } `; -exports[`UpdateAssistant | AnonCreds | v0.3.1 - v0.4 should correctly update the schema and credential definition, and create link secret records for issuers 1`] = ` +exports[`UpdateAssistant | AnonCreds | v0.3.1 - v0.4 > should correctly update the schema and credential definition, and create link secret records for issuers 1`] = ` { "1545e17d-fc88-4020-a1f7-e6dbcf1e5266": { "id": "1545e17d-fc88-4020-a1f7-e6dbcf1e5266", diff --git a/packages/anoncreds/src/updates/__tests__/__snapshots__/0.4.test.ts.snap b/packages/anoncreds/src/updates/__tests__/__snapshots__/0.4.test.ts.snap index edc3ab1ec1..e1daa3d8a9 100644 --- a/packages/anoncreds/src/updates/__tests__/__snapshots__/0.4.test.ts.snap +++ b/packages/anoncreds/src/updates/__tests__/__snapshots__/0.4.test.ts.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`UpdateAssistant | AnonCreds | v0.4 - v0.5 should correctly update the credential exchange records for holders 1`] = ` +exports[`UpdateAssistant | AnonCreds | v0.4 - v0.5 > should correctly update the credential exchange records for holders 1`] = ` { "1-4e4f-41d9-94c4-f49351b811f1": { "id": "1-4e4f-41d9-94c4-f49351b811f1", diff --git a/packages/anoncreds/src/utils/index.ts b/packages/anoncreds/src/utils/index.ts index 62a50bbea8..01af41b4ae 100644 --- a/packages/anoncreds/src/utils/index.ts +++ b/packages/anoncreds/src/utils/index.ts @@ -4,7 +4,7 @@ export { assertNoDuplicateGroupsNamesInProofRequest } from './hasDuplicateGroupN export { areAnonCredsProofRequestsEqual } from './areRequestsEqual' export { assertBestPracticeRevocationInterval } from './revocationInterval' export { getRevocationRegistriesForRequest, getRevocationRegistriesForProof } from './getRevocationRegistries' -export { checkValidCredentialValueEncoding, AnonCredsCredentialValue } from './credential' +export { checkValidCredentialValueEncoding, type AnonCredsCredentialValue } from './credential' export { IsMap } from './isMap' export { composeCredentialAutoAccept, composeProofAutoAccept } from './composeAutoAccept' export { areCredentialPreviewAttributesEqual } from './credentialPreviewAttributes' @@ -27,9 +27,9 @@ export { AnonCredsCredentialMetadataKey, AnonCredsCredentialRequestMetadataKey, W3cAnonCredsCredentialMetadataKey, - AnonCredsCredentialMetadata, - AnonCredsCredentialRequestMetadata, - W3cAnonCredsCredentialMetadata, + type AnonCredsCredentialMetadata, + type AnonCredsCredentialRequestMetadata, + type W3cAnonCredsCredentialMetadata, } from './metadata' export { getW3cRecordAnonCredsTags } from './w3cAnonCredsUtils' export { getCredentialsForAnonCredsProofRequest } from './getCredentialsForAnonCredsRequest' diff --git a/packages/anoncreds/tests/legacyAnonCredsSetup.ts b/packages/anoncreds/tests/legacyAnonCredsSetup.ts index b049d69570..d52aff3e97 100644 --- a/packages/anoncreds/tests/legacyAnonCredsSetup.ts +++ b/packages/anoncreds/tests/legacyAnonCredsSetup.ts @@ -357,7 +357,7 @@ export async function setupAnonCredsTests< useDrizzleStorage === 'postgres' ? issuerPostgresDrizzle?.drizzle : useDrizzleStorage === 'sqlite' - ? inMemoryDrizzleSqliteDatabase() + ? await inMemoryDrizzleSqliteDatabase() : undefined const issuerAgent = new Agent( @@ -383,7 +383,7 @@ export async function setupAnonCredsTests< useDrizzleStorage === 'postgres' ? holderPostgresDrizzle?.drizzle : useDrizzleStorage === 'sqlite' - ? inMemoryDrizzleSqliteDatabase() + ? await inMemoryDrizzleSqliteDatabase() : undefined const holderAgent = new Agent( getAgentOptions( @@ -407,7 +407,7 @@ export async function setupAnonCredsTests< useDrizzleStorage === 'postgres' ? verifierPostgresDrizzle?.drizzle : useDrizzleStorage === 'sqlite' - ? inMemoryDrizzleSqliteDatabase() + ? await inMemoryDrizzleSqliteDatabase() : undefined const verifierAgent = verifierName ? new Agent( diff --git a/packages/anoncreds/tests/setup.ts b/packages/anoncreds/tests/setup.ts deleted file mode 100644 index 0254a395ff..0000000000 --- a/packages/anoncreds/tests/setup.ts +++ /dev/null @@ -1,3 +0,0 @@ -import '@hyperledger/anoncreds-nodejs' - -jest.setTimeout(120000) diff --git a/packages/anoncreds/tests/v2-credentials.test.ts b/packages/anoncreds/tests/v2-credentials.test.ts index 49d52ae5bc..f8052ae84c 100644 --- a/packages/anoncreds/tests/v2-credentials.test.ts +++ b/packages/anoncreds/tests/v2-credentials.test.ts @@ -248,7 +248,7 @@ describe('IC V2 AnonCreds credentials', () => { // see if deleteCredential is called const holderService = aliceAgent.dependencyManager.resolve(AnonCredsHolderServiceSymbol) - const deleteCredentialSpy = jest.spyOn(holderService, 'deleteCredential') + const deleteCredentialSpy = vi.spyOn(holderService, 'deleteCredential') await aliceAgent.didcomm.credentials.deleteById(holderCredentialExchangeRecord.id, { deleteAssociatedCredentials: true, deleteAssociatedDidCommMessages: true, diff --git a/packages/anoncreds/tsconfig.build.json b/packages/anoncreds/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/anoncreds/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/anoncreds/tsconfig.json b/packages/anoncreds/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/packages/anoncreds/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/packages/anoncreds/tsdown.config.ts b/packages/anoncreds/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/anoncreds/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/askar-to-drizzle-storage-migration/jest.config.ts b/packages/askar-to-drizzle-storage-migration/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/askar-to-drizzle-storage-migration/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/askar-to-drizzle-storage-migration/package.json b/packages/askar-to-drizzle-storage-migration/package.json index ce0b0ccfcb..9caa197a8b 100644 --- a/packages/askar-to-drizzle-storage-migration/package.json +++ b/packages/askar-to-drizzle-storage-migration/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/askar-to-drizzle-storage-migration", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/askar-to-drizzle-storage-migration", "repository": { @@ -17,11 +28,8 @@ "directory": "packages/askar-to-drizzle-storage-migration" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/askar": "workspace:*", @@ -32,7 +40,6 @@ "@openwallet-foundation/askar-shared": "catalog:" }, "devDependencies": { - "rimraf": "catalog:", "typescript": "catalog:", "@openwallet-foundation/askar-shared": "catalog:" } diff --git a/packages/askar-to-drizzle-storage-migration/src/AskarToDrizzleStorageMigrator.ts b/packages/askar-to-drizzle-storage-migration/src/AskarToDrizzleStorageMigrator.ts index 1b285eb288..806af7ed9f 100644 --- a/packages/askar-to-drizzle-storage-migration/src/AskarToDrizzleStorageMigrator.ts +++ b/packages/askar-to-drizzle-storage-migration/src/AskarToDrizzleStorageMigrator.ts @@ -1,11 +1,11 @@ import { Agent, AgentContext, - AgentDependencies, + type AgentDependencies, BaseRecord, ConsoleLogger, LogLevel, - Logger, + type Logger, StorageVersionRecord, } from '@credo-ts/core' import { EntryListHandle } from '@openwallet-foundation/askar-shared' diff --git a/packages/askar-to-drizzle-storage-migration/tests/migrate.drizzle.e2e.test.ts b/packages/askar-to-drizzle-storage-migration/tests/migrate.drizzle.e2e.test.ts index 205e20d8f2..a1ffbb3654 100644 --- a/packages/askar-to-drizzle-storage-migration/tests/migrate.drizzle.e2e.test.ts +++ b/packages/askar-to-drizzle-storage-migration/tests/migrate.drizzle.e2e.test.ts @@ -12,11 +12,11 @@ import { AskarModule, AskarMultiWalletDatabaseScheme } from '@credo-ts/askar' import { DrizzleStorageModule } from '@credo-ts/drizzle-storage' import { askar, askarPostgresStorageConfig } from '../../askar/tests/helpers' import testLogger from '../../core/tests/logger' -import actionMenuDrizzleBundle from '../../drizzle-storage/src/action-menu/bundle' -import anoncredsDrizzleBundle from '../../drizzle-storage/src/anoncreds/bundle' -import coreDrizzleBundle from '../../drizzle-storage/src/core/bundle' -import didcommDrizzleBundle from '../../drizzle-storage/src/didcomm/bundle' -import tenantsDrizzleBundle from '../../drizzle-storage/src/tenants/bundle' +import { actionMenuBundle } from '../../drizzle-storage/src/action-menu/bundle' +import { anoncredsBundle } from '../../drizzle-storage/src/anoncreds/bundle' +import { coreBundle } from '../../drizzle-storage/src/core/bundle' +import { didcommBundle } from '../../drizzle-storage/src/didcomm/bundle' +import { tenantsBundle } from '../../drizzle-storage/src/tenants/bundle' import { createDrizzlePostgresTestDatabase, inMemoryDrizzleSqliteDatabase, @@ -29,7 +29,7 @@ import { sprindFunkeTestVectorBase64Url } from '../../core/src/modules/mdoc/__te import { sdJwtVcWithSingleDisclosure } from '../../core/src/modules/sd-jwt-vc/__tests__/sdjwtvc.fixtures' import { Ed25519Signature2018Fixtures } from '../../core/src/modules/vc/data-integrity/__tests__/fixtures' import { CredoEs256DidJwkJwtVc } from '../../core/src/modules/vc/jwt-vc/__tests__/fixtures/credo-jwt-vc-v2' -import { TenantAgent, TenantsModule } from '../../tenants' +import { TenantAgent, TenantsModule } from '../../tenants/src' async function populateDatabaseWithRecords(agent: Agent | TenantAgent) { await agent.genericRecords.save({ @@ -103,8 +103,8 @@ describe('Askar to Drizzle Migration', () => { const storeId = `askar sqlite to drizzle sqlite successful migration ${Math.random()}` const drizzleModule = new DrizzleStorageModule({ - bundles: [coreDrizzleBundle, didcommDrizzleBundle, actionMenuDrizzleBundle, anoncredsDrizzleBundle], - database: inMemoryDrizzleSqliteDatabase(), + bundles: [coreBundle, didcommBundle, actionMenuBundle, anoncredsBundle], + database: await inMemoryDrizzleSqliteDatabase(), }) await pushDrizzleSchema(drizzleModule) @@ -150,7 +150,7 @@ describe('Askar to Drizzle Migration', () => { const postgresDatabase = await createDrizzlePostgresTestDatabase() const drizzleModule = new DrizzleStorageModule({ - bundles: [coreDrizzleBundle, didcommDrizzleBundle, actionMenuDrizzleBundle, anoncredsDrizzleBundle], + bundles: [coreBundle, didcommBundle, actionMenuBundle, anoncredsBundle], database: postgresDatabase.drizzle, }) @@ -197,14 +197,8 @@ describe('Askar to Drizzle Migration', () => { const storeId = `askar sqlite to drizzle sqlite with tenants successful migration ${Math.random()}` const drizzleModule = new DrizzleStorageModule({ - bundles: [ - coreDrizzleBundle, - didcommDrizzleBundle, - actionMenuDrizzleBundle, - anoncredsDrizzleBundle, - tenantsDrizzleBundle, - ], - database: inMemoryDrizzleSqliteDatabase(), + bundles: [coreBundle, didcommBundle, actionMenuBundle, anoncredsBundle, tenantsBundle], + database: await inMemoryDrizzleSqliteDatabase(), }) await pushDrizzleSchema(drizzleModule) @@ -282,13 +276,7 @@ describe('Askar to Drizzle Migration', () => { const postgresDatabase = await createDrizzlePostgresTestDatabase() const drizzleModule = new DrizzleStorageModule({ - bundles: [ - coreDrizzleBundle, - didcommDrizzleBundle, - actionMenuDrizzleBundle, - anoncredsDrizzleBundle, - tenantsDrizzleBundle, - ], + bundles: [coreBundle, didcommBundle, actionMenuBundle, anoncredsBundle, tenantsBundle], database: postgresDatabase.drizzle, }) diff --git a/packages/askar-to-drizzle-storage-migration/tests/setup.ts b/packages/askar-to-drizzle-storage-migration/tests/setup.ts index cc14ea93da..bc7d81b0ec 100644 --- a/packages/askar-to-drizzle-storage-migration/tests/setup.ts +++ b/packages/askar-to-drizzle-storage-migration/tests/setup.ts @@ -1,2 +1 @@ import '@openwallet-foundation/askar-nodejs' -jest.setTimeout(20000) diff --git a/packages/askar-to-drizzle-storage-migration/tsconfig.build.json b/packages/askar-to-drizzle-storage-migration/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/askar-to-drizzle-storage-migration/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/askar-to-drizzle-storage-migration/tsconfig.json b/packages/askar-to-drizzle-storage-migration/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/packages/askar-to-drizzle-storage-migration/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/packages/askar-to-drizzle-storage-migration/tsdown.config.ts b/packages/askar-to-drizzle-storage-migration/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/askar-to-drizzle-storage-migration/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/askar/jest.config.ts b/packages/askar/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/askar/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/askar/package.json b/packages/askar/package.json index d4f08d2ed2..f9715d6cbf 100644 --- a/packages/askar/package.json +++ b/packages/askar/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/askar", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/askar", "repository": { @@ -17,11 +28,8 @@ "directory": "packages/askar" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/core": "workspace:*", @@ -37,7 +45,6 @@ "@types/ref-array-di": "^1.2.6", "@types/ref-struct-di": "^1.1.10", "reflect-metadata": "catalog:", - "rimraf": "catalog:", "typescript": "catalog:" }, "peerDependencies": { diff --git a/packages/askar/src/AskarApi.ts b/packages/askar/src/AskarApi.ts index 77ce6a7462..b4fe994339 100644 --- a/packages/askar/src/AskarApi.ts +++ b/packages/askar/src/AskarApi.ts @@ -1,7 +1,7 @@ import { AgentContext } from '@credo-ts/core' import { injectable } from 'tsyringe' -import { AskarStoreExportOptions, AskarStoreImportOptions, AskarStoreRotateKeyOptions } from './AskarApiOptions' +import type { AskarStoreExportOptions, AskarStoreImportOptions, AskarStoreRotateKeyOptions } from './AskarApiOptions' import { AskarModuleConfig } from './AskarModuleConfig' import { AskarStoreManager } from './AskarStoreManager' diff --git a/packages/askar/src/AskarStoreManager.ts b/packages/askar/src/AskarStoreManager.ts index 8ac510200d..4f13249b74 100644 --- a/packages/askar/src/AskarStoreManager.ts +++ b/packages/askar/src/AskarStoreManager.ts @@ -1,9 +1,13 @@ -import { AgentContext, FileSystem, InjectionSymbols, JsonTransformer, StorageVersionRecord } from '@credo-ts/core' +import { AgentContext, type FileSystem, InjectionSymbols, JsonTransformer, StorageVersionRecord } from '@credo-ts/core' import { KdfMethod, Session, Store, StoreKeyMethod } from '@openwallet-foundation/askar-shared' import { inject, injectable } from 'tsyringe' -import { AskarStoreExportOptions, AskarStoreImportOptions, AskarStoreRotateKeyOptions } from './AskarApiOptions' -import { AskarModuleConfig, AskarModuleConfigStoreOptions, AskarMultiWalletDatabaseScheme } from './AskarModuleConfig' +import type { AskarStoreExportOptions, AskarStoreImportOptions, AskarStoreRotateKeyOptions } from './AskarApiOptions' +import { + AskarModuleConfig, + type AskarModuleConfigStoreOptions, + AskarMultiWalletDatabaseScheme, +} from './AskarModuleConfig' import { AskarError, AskarStoreDuplicateError, diff --git a/packages/askar/src/index.ts b/packages/askar/src/index.ts index 6597dd2b17..71da406dd4 100644 --- a/packages/askar/src/index.ts +++ b/packages/askar/src/index.ts @@ -1,4 +1,4 @@ -export { +export type { AskarPostgresConfig, AskarPostgresCredentials, AskarPostgresStorageConfig, @@ -14,10 +14,10 @@ export { recordToInstance } from './storage/utils' // Module export { AskarModule } from './AskarModule' export { - AskarModuleConfigOptions, + type AskarModuleConfigOptions, AskarMultiWalletDatabaseScheme, AskarModuleConfig, - AskarModuleConfigStoreOptions, + type AskarModuleConfigStoreOptions, } from './AskarModuleConfig' export { transformPrivateKeyToPrivateJwk, transformSeedToPrivateJwk } from './utils' diff --git a/packages/askar/src/kms/AskarKeyManagementService.ts b/packages/askar/src/kms/AskarKeyManagementService.ts index 629a098ef7..9ae9ad0061 100644 --- a/packages/askar/src/kms/AskarKeyManagementService.ts +++ b/packages/askar/src/kms/AskarKeyManagementService.ts @@ -15,7 +15,7 @@ import { AskarStoreManager } from '../AskarStoreManager' import { AskarErrorCode, isAskarError, jwkCrvToAskarAlg, jwkEncToAskarAlg } from '../utils' import { aeadDecrypt } from './crypto/decrypt' import { askarSupportedKeyAgreementAlgorithms, deriveDecryptionKey, deriveEncryptionKey } from './crypto/deriveKey' -import { AskarSupportedEncryptionOptions, aeadEncrypt } from './crypto/encrypt' +import { type AskarSupportedEncryptionOptions, aeadEncrypt } from './crypto/encrypt' import { randomBytes } from './crypto/randomBytes' const askarSupportedEncryptionAlgorithms = [ diff --git a/packages/askar/src/secureEnvironment/index.ts b/packages/askar/src/secureEnvironment/index.ts deleted file mode 100644 index 8023cedbf9..0000000000 --- a/packages/askar/src/secureEnvironment/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './secureEnvironment' diff --git a/packages/askar/src/secureEnvironment/secureEnvironment.native.ts b/packages/askar/src/secureEnvironment/secureEnvironment.native.ts deleted file mode 100644 index 6900705586..0000000000 --- a/packages/askar/src/secureEnvironment/secureEnvironment.native.ts +++ /dev/null @@ -1,8 +0,0 @@ -export function importSecureEnvironment() { - try { - const secureEnvironment = require('@animo-id/expo-secure-environment') - return secureEnvironment - } catch (_error) { - throw new Error('@animo-id/expo-secure-environment must be installed as a peer dependency') - } -} diff --git a/packages/askar/src/secureEnvironment/secureEnvironment.ts b/packages/askar/src/secureEnvironment/secureEnvironment.ts deleted file mode 100644 index c01130b6c0..0000000000 --- a/packages/askar/src/secureEnvironment/secureEnvironment.ts +++ /dev/null @@ -1,9 +0,0 @@ -export function importSecureEnvironment(): { - sign: (id: string, message: Uint8Array, biometricsBacked?: boolean) => Promise - getPublicBytesForKeyId: (id: string) => Promise - generateKeypair: (id: string, biometricsBacked?: boolean) => Promise -} { - throw new Error( - '@animo-id/expo-secure-environment cannot be imported in Node.js. Currently, there is no hardware key support for node.js' - ) -} diff --git a/packages/askar/src/storage/__tests__/AskarStorageService.test.ts b/packages/askar/src/storage/__tests__/AskarStorageService.test.ts index 7610eb89e2..625b718a97 100644 --- a/packages/askar/src/storage/__tests__/AskarStorageService.test.ts +++ b/packages/askar/src/storage/__tests__/AskarStorageService.test.ts @@ -254,7 +254,7 @@ describe('AskarStorageService', () => { // FIXME: this should actually return 1 record, but we currently return 2 // See https://github.com/openwallet-foundation/credo-ts/issues/2315 - it.failing('should not return records with null tag values', async () => { + it.fails('should not return records with null tag values', async () => { const expectedRecord = await insertRecord({ tags: { myTag: 'foobar' } }) await insertRecord({ tags: { myTag: null } }) diff --git a/packages/askar/tests/helpers.ts b/packages/askar/tests/helpers.ts index 1ca0d4a7eb..27d89939e8 100644 --- a/packages/askar/tests/helpers.ts +++ b/packages/askar/tests/helpers.ts @@ -1,5 +1,5 @@ import type { Agent, InitConfig } from '@credo-ts/core' -import type { DidCommModuleConfigOptions } from '../../didcomm' +import type { DidCommModuleConfigOptions } from '../../didcomm/src' import path from 'path' import { LogLevel, utils } from '@credo-ts/core' @@ -8,9 +8,9 @@ import { registerAskar } from '@openwallet-foundation/askar-shared' import { waitForBasicMessage } from '../../core/tests/helpers' import { TestLogger } from '../../core/tests/logger' -import { DidCommHandshakeProtocol, DidCommModule } from '../../didcomm' +import { DidCommHandshakeProtocol, DidCommModule } from '../../didcomm/src' import { agentDependencies } from '../../node/src' -import { AskarPostgresStorageConfig } from '../src' +import type { AskarPostgresStorageConfig } from '../src' import { AskarModule } from '../src/AskarModule' registerAskar({ askar }) diff --git a/packages/askar/tests/setup.ts b/packages/askar/tests/setup.ts deleted file mode 100644 index 6440af8bf7..0000000000 --- a/packages/askar/tests/setup.ts +++ /dev/null @@ -1,4 +0,0 @@ -import 'reflect-metadata' -import '@openwallet-foundation/askar-nodejs' - -jest.setTimeout(180000) diff --git a/packages/askar/tsconfig.build.json b/packages/askar/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/askar/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/askar/tsconfig.json b/packages/askar/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/packages/askar/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/packages/askar/tsdown.config.ts b/packages/askar/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/askar/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/cheqd/jest.config.ts b/packages/cheqd/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/cheqd/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/cheqd/package.json b/packages/cheqd/package.json index c6140b8b62..842346c633 100644 --- a/packages/cheqd/package.json +++ b/packages/cheqd/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/cheqd", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/cheqd", "repository": { @@ -17,18 +28,15 @@ "directory": "packages/cheqd" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { - "@cheqd/sdk": "^5.2.1", - "@cheqd/ts-proto": "~2.4.1", - "@cosmjs/crypto": "~0.30.1", - "@cosmjs/proto-signing": "~0.30.1", - "@cosmjs/stargate": "~0.30.1", + "@cheqd/sdk": "npm:@cheqd/sdk-esm@^5.3.4", + "@cheqd/ts-proto": "^4.1.1", + "@cosmjs/crypto": "^0.33.1", + "@cosmjs/proto-signing": "^0.33.1", + "@cosmjs/stargate": "^0.33.1", "@credo-ts/anoncreds": "workspace:*", "@credo-ts/core": "workspace:*", "@stablelib/ed25519": "catalog:", @@ -38,7 +46,6 @@ "tsyringe": "catalog:" }, "devDependencies": { - "rimraf": "catalog:", "typescript": "catalog:" } } diff --git a/packages/cheqd/src/CheqdApi.ts b/packages/cheqd/src/CheqdApi.ts index 205707d814..bb58c60f2d 100644 --- a/packages/cheqd/src/CheqdApi.ts +++ b/packages/cheqd/src/CheqdApi.ts @@ -1,7 +1,7 @@ import { AgentContext } from '@credo-ts/core' import { injectable } from 'tsyringe' -import { CheqdCreateResourceOptions, CheqdDidRegistrar, CheqdDidResolver } from './dids' +import { type CheqdCreateResourceOptions, CheqdDidRegistrar, CheqdDidResolver } from './dids' @injectable() export class CheqdApi { diff --git a/packages/cheqd/src/dids/CheqdDidRegistrar.ts b/packages/cheqd/src/dids/CheqdDidRegistrar.ts index 84e5cc4c60..5676189f67 100644 --- a/packages/cheqd/src/dids/CheqdDidRegistrar.ts +++ b/packages/cheqd/src/dids/CheqdDidRegistrar.ts @@ -1,18 +1,18 @@ -import { CheqdNetwork, DIDDocument, DidStdFee, VerificationMethods } from '@cheqd/sdk' +import { CheqdNetwork, type DIDDocument, type DidStdFee, VerificationMethods } from '@cheqd/sdk' import type { SignInfo } from '@cheqd/ts-proto/cheqd/did/v2' import { AgentContext, DID_V1_CONTEXT_URL, - DidCreateOptions, - DidCreateResult, - DidDeactivateResult, - DidDocumentKey, - DidRegistrar, - DidUpdateOptions, - DidUpdateResult, + type DidCreateOptions, + type DidCreateResult, + type DidDeactivateResult, + type DidDocumentKey, + type DidRegistrar, + type DidUpdateOptions, + type DidUpdateResult, Kms, SECURITY_JWS_CONTEXT_URL, - XOR, + type XOR, getKmsKeyIdForVerifiacationMethod, getPublicJwkFromVerificationMethod, } from '@credo-ts/core' diff --git a/packages/cheqd/src/dids/index.ts b/packages/cheqd/src/dids/index.ts index 315b1c0982..2aee690229 100644 --- a/packages/cheqd/src/dids/index.ts +++ b/packages/cheqd/src/dids/index.ts @@ -1,8 +1,8 @@ export { CheqdDidRegistrar, - CheqdDidCreateOptions, - CheqdDidDeactivateOptions, - CheqdDidUpdateOptions, - CheqdCreateResourceOptions, + type CheqdDidCreateOptions, + type CheqdDidDeactivateOptions, + type CheqdDidUpdateOptions, + type CheqdCreateResourceOptions, } from './CheqdDidRegistrar' export { CheqdDidResolver } from './CheqdDidResolver' diff --git a/packages/cheqd/src/index.ts b/packages/cheqd/src/index.ts index 4270e5c072..dc714ebd2f 100644 --- a/packages/cheqd/src/index.ts +++ b/packages/cheqd/src/index.ts @@ -1,9 +1,9 @@ // Dids export { CheqdDidRegistrar, - CheqdDidCreateOptions, - CheqdDidDeactivateOptions, - CheqdDidUpdateOptions, + type CheqdDidCreateOptions, + type CheqdDidDeactivateOptions, + type CheqdDidUpdateOptions, CheqdDidResolver, } from './dids' @@ -14,4 +14,4 @@ export { CheqdLedgerService } from './ledger' export { CheqdModule } from './CheqdModule' -export { CheqdModuleConfig, CheqdModuleConfigOptions } from './CheqdModuleConfig' +export { CheqdModuleConfig, type CheqdModuleConfigOptions } from './CheqdModuleConfig' diff --git a/packages/cheqd/src/ledger/CheqdLedgerService.ts b/packages/cheqd/src/ledger/CheqdLedgerService.ts index 6a93290c77..43d0d0678f 100644 --- a/packages/cheqd/src/ledger/CheqdLedgerService.ts +++ b/packages/cheqd/src/ledger/CheqdLedgerService.ts @@ -10,8 +10,9 @@ import type { DirectSecp256k1HdWallet, DirectSecp256k1Wallet } from '@cosmjs/pro import type { DidDocumentMetadata } from '@credo-ts/core' import { CheqdNetwork, DIDModule, FeemarketModule, ResourceModule, createCheqdSDK } from '@cheqd/sdk' -import { CredoError, InjectionSymbols, Logger, inject, injectable } from '@credo-ts/core' +import { CredoError, InjectionSymbols, type Logger, inject, injectable } from '@credo-ts/core' +import type { DeliverTxResponse } from '@cosmjs/stargate' import { CheqdModuleConfig } from '../CheqdModuleConfig' import { parseCheqdDid } from '../anoncreds/utils/identifiers' import { getCosmosPayerWallet } from '../dids/didCheqdUtil' @@ -124,7 +125,7 @@ export class CheqdLedgerService { signInputs: SignInfo[], versionId?: string | undefined, fee?: DidStdFee - ) { + ): Promise { const sdk = await this.getSdk(didPayload.id) return sdk.createDidDocTx(signInputs, didPayload, '', fee, undefined, versionId) } @@ -134,7 +135,7 @@ export class CheqdLedgerService { signInputs: SignInfo[], versionId?: string | undefined, fee?: DidStdFee - ) { + ): Promise { const sdk = await this.getSdk(didPayload.id) return sdk.updateDidDocTx(signInputs, didPayload, '', fee, undefined, versionId) } @@ -144,7 +145,7 @@ export class CheqdLedgerService { signInputs: SignInfo[], versionId?: string | undefined, fee?: DidStdFee - ) { + ): Promise { const sdk = await this.getSdk(didPayload.id) return sdk.deactivateDidDocTx(signInputs, didPayload, '', fee, undefined, versionId) } @@ -167,7 +168,7 @@ export class CheqdLedgerService { resourcePayload: Partial, signInputs: SignInfo[], fee?: DidStdFee - ) { + ): Promise { const sdk = await this.getSdk(did) return sdk.createLinkedResourceTx(signInputs, resourcePayload, '', fee, undefined) } diff --git a/packages/cheqd/tests/cheqd-data-integrity.e2e.test.ts b/packages/cheqd/tests/cheqd-data-integrity.e2e.test.ts index c1fa9e9c77..9c23e1521f 100644 --- a/packages/cheqd/tests/cheqd-data-integrity.e2e.test.ts +++ b/packages/cheqd/tests/cheqd-data-integrity.e2e.test.ts @@ -4,7 +4,7 @@ import type { EventReplaySubject } from '../../core/tests' import { InMemoryAnonCredsRegistry } from '../../anoncreds/tests/InMemoryAnonCredsRegistry' import { setupAnonCredsTests } from '../../anoncreds/tests/anoncredsSetup' import { presentationDefinition } from '../../anoncreds/tests/fixtures/presentation-definition' -import { W3cCredential, W3cCredentialSubject } from '../../core' +import { W3cCredential, W3cCredentialSubject } from '../../core/src/index' import { createDidKidVerificationMethod } from '../../core/tests' import { waitForCredentialRecordSubject, waitForProofExchangeRecord } from '../../core/tests/helpers' import { @@ -12,7 +12,7 @@ import { DidCommCredentialExchangeRecord, DidCommCredentialState, DidCommProofState, -} from '../../didcomm' +} from '../../didcomm/src/index' import { cheqdPayerSeeds } from './setupCheqdModule' diff --git a/packages/cheqd/tests/cheqd-did-registrar.e2e.test.ts b/packages/cheqd/tests/cheqd-did-registrar.e2e.test.ts index e895491b09..5d108a99eb 100644 --- a/packages/cheqd/tests/cheqd-did-registrar.e2e.test.ts +++ b/packages/cheqd/tests/cheqd-did-registrar.e2e.test.ts @@ -14,8 +14,8 @@ import { import { getAgentOptions } from '../../core/tests/helpers' import { transformPrivateKeyToPrivateJwk } from '../../askar/src' -import { validService } from './setup' import { cheqdPayerSeeds, getCheqdModules } from './setupCheqdModule' +import { validService } from './testUtils' const agentOptions = getAgentOptions('Faber Dids Registrar', {}, {}, getCheqdModules(cheqdPayerSeeds[0])) diff --git a/packages/cheqd/tests/cheqd-did-utils.test.ts b/packages/cheqd/tests/cheqd-did-utils.test.ts index 24cf566dd1..cafc204771 100644 --- a/packages/cheqd/tests/cheqd-did-utils.test.ts +++ b/packages/cheqd/tests/cheqd-did-utils.test.ts @@ -8,7 +8,7 @@ import { validateSpecCompliantPayload, } from '../src/dids/didCheqdUtil' -import { validDid, validDidDoc } from './setup' +import { validDid, validDidDoc } from './testUtils' describe('Test Cheqd Did Utils', () => { it('should validate did spec compliant payload', () => { diff --git a/packages/cheqd/tests/setup.ts b/packages/cheqd/tests/testUtils.ts similarity index 97% rename from packages/cheqd/tests/setup.ts rename to packages/cheqd/tests/testUtils.ts index c3c7e2283c..06dd0b12d2 100644 --- a/packages/cheqd/tests/setup.ts +++ b/packages/cheqd/tests/testUtils.ts @@ -1,5 +1,3 @@ -jest.setTimeout(60000) - import { DidDocument, DidDocumentService, VerificationMethod } from '@credo-ts/core' export const validDid = 'did:cheqd:testnet:SiVQgrFZ7jFZFrTGstT4ZD' diff --git a/packages/cheqd/tsconfig.build.json b/packages/cheqd/tsconfig.build.json deleted file mode 100644 index e7ee40ad18..0000000000 --- a/packages/cheqd/tsconfig.build.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build", - "baseUrl": ".", - "skipDefaultLibCheck": true - }, - "include": ["src/**/*"], - "exclude": ["../core"] -} diff --git a/packages/cheqd/tsconfig.json b/packages/cheqd/tsconfig.json deleted file mode 100644 index 7958700c2b..0000000000 --- a/packages/cheqd/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"], - "moduleResolution": "node", - "resolveJsonModule": true - } -} diff --git a/packages/cheqd/tsdown.config.ts b/packages/cheqd/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/cheqd/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts deleted file mode 100644 index 7b6ec7f1c5..0000000000 --- a/packages/core/jest.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -process.env.TZ = 'GMT' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/core/package.json b/packages/core/package.json index 5a313556b7..4c0d90812f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,14 +1,29 @@ { "name": "@credo-ts/core", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } + }, + "react-native": { + "./build/modules/vc/data-integrity/libraries/nativeDocumentLoader.js": "./build/modules/vc/data-integrity/libraries/nativeDocumentLoader.js", + "./build/modules/vc/data-integrity/libraries/nativeDocumentLoader.mjs": "./build/modules/vc/data-integrity/libraries/nativeDocumentLoader.mjs" }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/core", "repository": { @@ -17,11 +32,8 @@ "directory": "packages/core" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@animo-id/mdoc": "^0.5.2", @@ -62,7 +74,7 @@ "reflect-metadata": "catalog:", "rxjs": "catalog:", "tsyringe": "catalog:", - "uuid": "^11.1.0", + "uuid": "^13.0.0", "varint": "^6.0.0", "web-did-resolver": "^2.0.21", "webcrypto-core": "^1.8.1", @@ -73,7 +85,6 @@ "@types/object-inspect": "^1.8.0", "@types/varint": "^6.0.0", "nock": "catalog:", - "rimraf": "catalog:", "tslog": "^4.8.2", "typescript": "catalog:" } diff --git a/packages/core/src/agent/EventEmitter.ts b/packages/core/src/agent/EventEmitter.ts index b99f0237af..c6e8ca8940 100644 --- a/packages/core/src/agent/EventEmitter.ts +++ b/packages/core/src/agent/EventEmitter.ts @@ -8,7 +8,7 @@ import { takeUntil } from 'rxjs/operators' import { InjectionSymbols } from '../constants' import { inject, injectable } from '../plugins' -import { AgentDependencies } from './AgentDependencies' +import type { AgentDependencies } from './AgentDependencies' type EmitEvent = Omit diff --git a/packages/core/src/agent/__tests__/Agent.test.ts b/packages/core/src/agent/__tests__/Agent.test.ts index e91081fc65..c98b5b041d 100644 --- a/packages/core/src/agent/__tests__/Agent.test.ts +++ b/packages/core/src/agent/__tests__/Agent.test.ts @@ -35,7 +35,7 @@ import { Agent } from '../Agent' const agentOptions = getAgentOptions('Agent Class Test', undefined, undefined, undefined, { requireDidcomm: true }) -const myModuleMethod = jest.fn() +const myModuleMethod = vi.fn() @injectable() class MyApi { public myModuleMethod = myModuleMethod diff --git a/packages/core/src/agent/__tests__/EventEmitter.test.ts b/packages/core/src/agent/__tests__/EventEmitter.test.ts index 480ccbedbb..14d3013c78 100644 --- a/packages/core/src/agent/__tests__/EventEmitter.test.ts +++ b/packages/core/src/agent/__tests__/EventEmitter.test.ts @@ -1,16 +1,15 @@ import type { EventEmitter as NativeEventEmitter } from 'events' - import { Subject } from 'rxjs' import { agentDependencies, getAgentContext } from '../../../tests/helpers' import { EventEmitter } from '../EventEmitter' -const mockEmit = jest.fn() -const mockOn = jest.fn() -const mockOff = jest.fn() -const mock = jest.fn().mockImplementation(() => { +const mockEmit = vi.fn() +const mockOn = vi.fn() +const mockOff = vi.fn() +const mock = vi.fn().mockImplementation(() => { return { emit: mockEmit, on: mockOn, off: mockOff } -}) as jest.Mock +}) const eventEmitter = new EventEmitter( { ...agentDependencies, EventEmitterClass: mock as unknown as typeof NativeEventEmitter }, @@ -20,7 +19,7 @@ const agentContext = getAgentContext({}) describe('EventEmitter', () => { afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('emit', () => { @@ -42,7 +41,7 @@ describe('EventEmitter', () => { describe('on', () => { test("calls 'on' on native event emitter instance", () => { - const listener = jest.fn() + const listener = vi.fn() eventEmitter.on('some-event', listener) expect(mockOn).toHaveBeenCalledWith('some-event', listener) @@ -50,7 +49,7 @@ describe('EventEmitter', () => { }) describe('off', () => { test("calls 'off' on native event emitter instance", () => { - const listener = jest.fn() + const listener = vi.fn() eventEmitter.off('some-event', listener) expect(mockOff).toHaveBeenCalledWith('some-event', listener) diff --git a/packages/core/src/crypto/JwsService.ts b/packages/core/src/crypto/JwsService.ts index 52d62f0e86..a91ed26f46 100644 --- a/packages/core/src/crypto/JwsService.ts +++ b/packages/core/src/crypto/JwsService.ts @@ -8,14 +8,14 @@ import type { } from './JwsTypes' import { CredoError } from '../error' -import { EncodedX509Certificate, X509ModuleConfig } from '../modules/x509' +import { type EncodedX509Certificate, X509ModuleConfig } from '../modules/x509' import { injectable } from '../plugins' import { Buffer, JsonEncoder, TypedArrayEncoder } from '../utils' import { KeyManagementApi, KeyManagementError, - KnownJwaSignatureAlgorithm, + type KnownJwaSignatureAlgorithm, PublicJwk, assertJwkAsymmetric, assymetricPublicJwkMatches, @@ -24,7 +24,7 @@ import { import { isKnownJwaSignatureAlgorithm } from '../modules/kms/jwk/jwa' import { isJsonObject } from '../types' import { X509Service } from './../modules/x509/X509Service' -import { JwsSigner, JwsSignerWithJwk } from './JwsSigner' +import type { JwsSigner, JwsSignerWithJwk } from './JwsSigner' import { JWS_COMPACT_FORMAT_MATCHER } from './JwsTypes' import { JwtPayload } from './jose/jwt' diff --git a/packages/core/src/crypto/JwsTypes.ts b/packages/core/src/crypto/JwsTypes.ts index bd8c6cb7d0..ef50b490fa 100644 --- a/packages/core/src/crypto/JwsTypes.ts +++ b/packages/core/src/crypto/JwsTypes.ts @@ -1,4 +1,4 @@ -import { Jwk, KnownJwaSignatureAlgorithm, PublicJwk } from '../modules/kms' +import { type Jwk, type KnownJwaSignatureAlgorithm, PublicJwk } from '../modules/kms' export type Kid = string diff --git a/packages/core/src/crypto/index.ts b/packages/core/src/crypto/index.ts index 309e60efd5..d65f2151dc 100644 --- a/packages/core/src/crypto/index.ts +++ b/packages/core/src/crypto/index.ts @@ -1,7 +1,12 @@ export { JwsService } from './JwsService' -export { JwsDetachedFormat, JwsFlattenedDetachedFormat, JwsGeneralFormat, JwsProtectedHeaderOptions } from './JwsTypes' -export { JwsSigner, JwsSignerDid, JwsSignerJwk, JwsSignerWithJwk, JwsSignerX5c } from './JwsSigner' +export type { + JwsDetachedFormat, + JwsFlattenedDetachedFormat, + JwsGeneralFormat, + JwsProtectedHeaderOptions, +} from './JwsTypes' +export type { JwsSigner, JwsSignerDid, JwsSignerJwk, JwsSignerWithJwk, JwsSignerX5c } from './JwsSigner' export * from './jose' diff --git a/packages/core/src/crypto/jose/jwt/Jwt.ts b/packages/core/src/crypto/jose/jwt/Jwt.ts index 6820e35ded..cb813768cf 100644 --- a/packages/core/src/crypto/jose/jwt/Jwt.ts +++ b/packages/core/src/crypto/jose/jwt/Jwt.ts @@ -4,7 +4,7 @@ import { CredoError } from '../../../error' import { JsonEncoder, TypedArrayEncoder } from '../../../utils' import { replaceError } from '../../../logger/replaceError' -import { Jwk } from '../../../modules/kms' +import type { Jwk } from '../../../modules/kms' import { JwtPayload } from './JwtPayload' // TODO: JWT Header typing diff --git a/packages/core/src/crypto/jose/jwt/index.ts b/packages/core/src/crypto/jose/jwt/index.ts index b02f85fc83..1d7e3e266b 100644 --- a/packages/core/src/crypto/jose/jwt/index.ts +++ b/packages/core/src/crypto/jose/jwt/index.ts @@ -1,2 +1,2 @@ export { Jwt } from './Jwt' -export { JwtPayload, JwtPayloadJson, JwtPayloadOptions } from './JwtPayload' +export { JwtPayload, type JwtPayloadJson, type JwtPayloadOptions } from './JwtPayload' diff --git a/packages/core/src/crypto/webcrypto/__tests__/CredoWebCrypto.test.ts b/packages/core/src/crypto/webcrypto/__tests__/CredoWebCrypto.test.ts index 6344962211..35968bef02 100644 --- a/packages/core/src/crypto/webcrypto/__tests__/CredoWebCrypto.test.ts +++ b/packages/core/src/crypto/webcrypto/__tests__/CredoWebCrypto.test.ts @@ -33,7 +33,7 @@ describe('CredoWebCrypto', () => { describe('key creation', () => { supportedAlgorithms.map((algorithm) => { it(`should create key with: ${algorithmToTestName(algorithm)}`, async () => { - expect(async () => await await webCrypto.subtle.generateKey(algorithm, true, ['sign', 'verify'])).resolves + await expect(webCrypto.subtle.generateKey(algorithm, true, ['sign', 'verify'])).resolves.toBeDefined() }) }) }) diff --git a/packages/core/src/crypto/webcrypto/types.ts b/packages/core/src/crypto/webcrypto/types.ts index de0b46f5c1..64a795abd9 100644 --- a/packages/core/src/crypto/webcrypto/types.ts +++ b/packages/core/src/crypto/webcrypto/types.ts @@ -5,8 +5,8 @@ import { Ed25519PublicJwk, - Jwk, - KnownJwaSignatureAlgorithm, + type Jwk, + type KnownJwaSignatureAlgorithm, P256PublicJwk, P384PublicJwk, P521PublicJwk, diff --git a/packages/core/src/crypto/webcrypto/utils/keyAlgorithmConversion.ts b/packages/core/src/crypto/webcrypto/utils/keyAlgorithmConversion.ts index 8c845d713b..71f329a854 100644 --- a/packages/core/src/crypto/webcrypto/utils/keyAlgorithmConversion.ts +++ b/packages/core/src/crypto/webcrypto/utils/keyAlgorithmConversion.ts @@ -3,7 +3,7 @@ import { AlgorithmIdentifier, SubjectPublicKeyInfo } from '@peculiar/asn1-x509' import type { EcKeyGenParams, KeyGenAlgorithm, RsaHashedKeyGenParams } from '../types' import { AsnParser, AsnSerializer } from '@peculiar/asn1-schema' -import { KmsCreateKeyType, PublicJwk, getJwkHumanDescription } from '../../../modules/kms' +import { type KmsCreateKeyType, PublicJwk, getJwkHumanDescription } from '../../../modules/kms' import { CredoWebCryptoError } from '../CredoWebCryptoError' import { ecPublicKeyWithK256AlgorithmIdentifier, diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index ac1fe432b2..0e27751c82 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -28,14 +28,14 @@ export type { FileSystem, DownloadToFileOptions } from './storage/FileSystem' export * from './storage/BaseRecord' export { Repository } from './storage/Repository' export * from './storage/RepositoryEvents' -export { StorageService, Query, QueryOptions, SimpleQuery, BaseRecordConstructor } from './storage/StorageService' +export type { StorageService, Query, QueryOptions, SimpleQuery, BaseRecordConstructor } from './storage/StorageService' export * from './storage/migration' -export { Metadata } from './storage/Metadata' -export { UpdateConfig, V0_1ToV0_2UpdateConfig } from './storage/migration/updates' +export { Metadata, type MetadataBase } from './storage/Metadata' +export type { UpdateConfig, V0_1ToV0_2UpdateConfig } from './storage/migration/updates' export { getDirFromFilePath, joinUriParts } from './utils/path' export { InjectionSymbols } from './constants' -export { VersionString } from './utils/version' +export type { VersionString } from './utils/version' export * from './plugins' export * from './modules/x509' @@ -45,7 +45,9 @@ export * from './modules/cache' export * from './modules/dif-presentation-exchange' export * from './modules/sd-jwt-vc' export * from './modules/mdoc' + export * as Kms from './modules/kms' + export * from './modules/dcql' export * from './modules/generic-records' export { @@ -55,7 +57,7 @@ export { MultiBaseEncoder, MultiHashEncoder, HashlinkEncoder, - BaseName, + type BaseName, Buffer, deepEquality, isDid, diff --git a/packages/core/src/modules/cache/CachedStorageService.ts b/packages/core/src/modules/cache/CachedStorageService.ts index 135c1e7df2..1b14480d71 100644 --- a/packages/core/src/modules/cache/CachedStorageService.ts +++ b/packages/core/src/modules/cache/CachedStorageService.ts @@ -2,7 +2,7 @@ import { AgentContext } from '../../agent' import { InjectionSymbols } from '../../constants' import { inject, injectable } from '../../plugins' import { BaseRecord } from '../../storage/BaseRecord' -import { BaseRecordConstructor, Query, QueryOptions, StorageService } from '../../storage/StorageService' +import type { BaseRecordConstructor, Query, QueryOptions, StorageService } from '../../storage/StorageService' import { JsonTransformer } from '../../utils' import { CacheModuleConfig } from './CacheModuleConfig' diff --git a/packages/core/src/modules/cache/InMemoryLruCache.ts b/packages/core/src/modules/cache/InMemoryLruCache.ts index d717a4bede..936838b416 100644 --- a/packages/core/src/modules/cache/InMemoryLruCache.ts +++ b/packages/core/src/modules/cache/InMemoryLruCache.ts @@ -1,7 +1,7 @@ import type { AgentContext } from '../../agent/context' import type { Cache } from './Cache' -import { LRUMap } from 'lru_map' +import LRUMap from 'lru_map' export interface InMemoryLruCacheOptions { /** The maximum number of entries allowed in the cache */ @@ -15,10 +15,10 @@ export interface InMemoryLruCacheOptions { * If you need the cache to be isolated per agent context instance, make sure to use a different cache implementation. */ export class InMemoryLruCache implements Cache { - private readonly cache: LRUMap + private readonly cache: LRUMap.LRUMap public constructor({ limit }: InMemoryLruCacheOptions) { - this.cache = new LRUMap(limit) + this.cache = new LRUMap.LRUMap(limit) } public async get(_agentContext: AgentContext, key: string) { diff --git a/packages/core/src/modules/cache/__tests__/CacheModule.test.ts b/packages/core/src/modules/cache/__tests__/CacheModule.test.ts index fe38e2e139..9ac97d393a 100644 --- a/packages/core/src/modules/cache/__tests__/CacheModule.test.ts +++ b/packages/core/src/modules/cache/__tests__/CacheModule.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../tests/types' import { DependencyManager } from '../../../plugins/DependencyManager' import { CacheModule } from '../CacheModule' import { CacheModuleConfig } from '../CacheModuleConfig' @@ -5,14 +6,14 @@ import { InMemoryLruCache } from '../InMemoryLruCache' import { SingleContextStorageLruCache } from '../singleContextLruCache' import { SingleContextLruCacheRepository } from '../singleContextLruCache/SingleContextLruCacheRepository' -jest.mock('../../../plugins/DependencyManager') -const DependencyManagerMock = DependencyManager as jest.Mock +vi.mock('../../../plugins/DependencyManager') +const DependencyManagerMock = DependencyManager as MockedClassConstructor const dependencyManager = new DependencyManagerMock() describe('CacheModule', () => { afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) test('registers dependencies on the dependency manager', () => { diff --git a/packages/core/src/modules/cache/index.ts b/packages/core/src/modules/cache/index.ts index 67459d2083..a3bb79ca1e 100644 --- a/packages/core/src/modules/cache/index.ts +++ b/packages/core/src/modules/cache/index.ts @@ -1,17 +1,17 @@ // Module -export { CacheModule, CacheModuleOptions } from './CacheModule' +export { CacheModule, type CacheModuleOptions } from './CacheModule' export { CacheModuleConfig } from './CacheModuleConfig' // Cache -export { Cache } from './Cache' +export type { Cache } from './Cache' // Cache Implementations -export { InMemoryLruCache, InMemoryLruCacheOptions } from './InMemoryLruCache' +export { InMemoryLruCache, type InMemoryLruCacheOptions } from './InMemoryLruCache' export { SingleContextStorageLruCache, - SingleContextStorageLruCacheOptions, + type SingleContextStorageLruCacheOptions, SingleContextLruCacheRecord, - SingleContextLruCacheItem, + type SingleContextLruCacheItem, } from './singleContextLruCache' export { CachedStorageService } from './CachedStorageService' diff --git a/packages/core/src/modules/cache/singleContextLruCache/SingleContextLruCacheRepository.ts b/packages/core/src/modules/cache/singleContextLruCache/SingleContextLruCacheRepository.ts index dab71b9761..de17aec15b 100644 --- a/packages/core/src/modules/cache/singleContextLruCache/SingleContextLruCacheRepository.ts +++ b/packages/core/src/modules/cache/singleContextLruCache/SingleContextLruCacheRepository.ts @@ -2,7 +2,7 @@ import { EventEmitter } from '../../../agent/EventEmitter' import { InjectionSymbols } from '../../../constants' import { inject, injectable } from '../../../plugins' import { Repository } from '../../../storage/Repository' -import { StorageService } from '../../../storage/StorageService' +import type { StorageService } from '../../../storage/StorageService' import { SingleContextLruCacheRecord } from './SingleContextLruCacheRecord' diff --git a/packages/core/src/modules/cache/singleContextLruCache/SingleContextStorageLruCache.ts b/packages/core/src/modules/cache/singleContextLruCache/SingleContextStorageLruCache.ts index 9c8716f360..909e53c605 100644 --- a/packages/core/src/modules/cache/singleContextLruCache/SingleContextStorageLruCache.ts +++ b/packages/core/src/modules/cache/singleContextLruCache/SingleContextStorageLruCache.ts @@ -2,7 +2,7 @@ import type { AgentContext } from '../../../agent/context' import type { Cache } from '../Cache' import type { SingleContextLruCacheItem } from './SingleContextLruCacheRecord' -import { LRUMap } from 'lru_map' +import LRUMap from 'lru_map' import { CredoError, RecordDuplicateError } from '../../../error' @@ -28,7 +28,7 @@ export interface SingleContextStorageLruCacheOptions { */ export class SingleContextStorageLruCache implements Cache { private limit: number - private _cache?: LRUMap + private _cache?: LRUMap.LRUMap private _contextCorrelationId?: string public constructor({ limit }: SingleContextStorageLruCacheOptions) { @@ -101,7 +101,7 @@ export class SingleContextStorageLruCache implements Cache { } private lruFromRecord(cacheRecord: SingleContextLruCacheRecord) { - return new LRUMap(this.limit, cacheRecord.entries.entries()) + return new LRUMap.LRUMap(this.limit, cacheRecord.entries.entries()) } private async fetchCacheRecord(agentContext: AgentContext) { @@ -132,7 +132,7 @@ export class SingleContextStorageLruCache implements Cache { return cacheRecord } - private removeExpiredItems(cache: LRUMap) { + private removeExpiredItems(cache: LRUMap.LRUMap) { cache.forEach((value, key) => { if (value.expiresAt && Date.now() > value.expiresAt) { cache.delete(key) diff --git a/packages/core/src/modules/cache/singleContextLruCache/__tests__/SingleContextStorageLruCache.test.ts b/packages/core/src/modules/cache/singleContextLruCache/__tests__/SingleContextStorageLruCache.test.ts index 0afa59fc10..74a7ab617e 100644 --- a/packages/core/src/modules/cache/singleContextLruCache/__tests__/SingleContextStorageLruCache.test.ts +++ b/packages/core/src/modules/cache/singleContextLruCache/__tests__/SingleContextStorageLruCache.test.ts @@ -1,11 +1,13 @@ +import type { MockedClassConstructor } from '../../../../../../../tests/types' import { getAgentContext, mockFunction } from '../../../../../tests/helpers' import { SingleContextLruCacheRecord } from '../SingleContextLruCacheRecord' import { SingleContextLruCacheRepository } from '../SingleContextLruCacheRepository' import { SingleContextStorageLruCache } from '../SingleContextStorageLruCache' -jest.mock('../SingleContextLruCacheRepository') -const SingleContextLruCacheRepositoryMock = - SingleContextLruCacheRepository as jest.Mock +vi.mock('../SingleContextLruCacheRepository') +const SingleContextLruCacheRepositoryMock = SingleContextLruCacheRepository as MockedClassConstructor< + typeof SingleContextLruCacheRepository +> const cacheRepository = new SingleContextLruCacheRepositoryMock() const agentContext = getAgentContext({ @@ -84,7 +86,7 @@ describe('SingleContextLruCache', () => { contextCorrelationId: 'another', }) - expect(cache.get(secondAgentContext, 'test')).rejects.toThrow( + await expect(cache.get(secondAgentContext, 'test')).rejects.toThrow( 'SingleContextStorageLruCache can not be used with multiple agent context instances. Register a custom cache implementation in the CacheModule.' ) }) diff --git a/packages/core/src/modules/cache/singleContextLruCache/index.ts b/packages/core/src/modules/cache/singleContextLruCache/index.ts index 9f9cd82acd..27ca50417e 100644 --- a/packages/core/src/modules/cache/singleContextLruCache/index.ts +++ b/packages/core/src/modules/cache/singleContextLruCache/index.ts @@ -1,2 +1,2 @@ -export { SingleContextStorageLruCache, SingleContextStorageLruCacheOptions } from './SingleContextStorageLruCache' -export { SingleContextLruCacheRecord, SingleContextLruCacheItem } from './SingleContextLruCacheRecord' +export { SingleContextStorageLruCache, type SingleContextStorageLruCacheOptions } from './SingleContextStorageLruCache' +export { SingleContextLruCacheRecord, type SingleContextLruCacheItem } from './SingleContextLruCacheRecord' diff --git a/packages/core/src/modules/dcql/DcqlService.ts b/packages/core/src/modules/dcql/DcqlService.ts index 5aafc4ba37..d56cda24fd 100644 --- a/packages/core/src/modules/dcql/DcqlService.ts +++ b/packages/core/src/modules/dcql/DcqlService.ts @@ -11,10 +11,17 @@ import { DcqlW3cVcCredential, } from 'dcql' import { injectable } from 'tsyringe' -import { JsonObject, JsonValue, isNonEmptyArray, mapNonEmptyArray } from '../../types' +import { type JsonObject, type JsonValue, isNonEmptyArray, mapNonEmptyArray } from '../../types' import { TypedArrayEncoder, asArray } from '../../utils' import { DidsApi, VerificationMethod, getPublicJwkFromVerificationMethod } from '../dids' -import { Mdoc, MdocApi, MdocDeviceResponse, MdocNameSpaces, MdocRecord, MdocSessionTranscriptOptions } from '../mdoc' +import { + Mdoc, + MdocApi, + MdocDeviceResponse, + type MdocNameSpaces, + MdocRecord, + type MdocSessionTranscriptOptions, +} from '../mdoc' import { SdJwtVcApi, SdJwtVcRecord, SdJwtVcService } from '../sd-jwt-vc' import { buildDisclosureFrameForPayload } from '../sd-jwt-vc/disclosureFrame' import { @@ -36,7 +43,7 @@ import { purposes } from '../vc/data-integrity/libraries/jsonld-signatures' import { W3cV2SdJwtCredentialService, W3cV2SdJwtVerifiableCredential } from '../vc/sd-jwt-vc' import { X509Certificate } from '../x509' import { DcqlError } from './DcqlError' -import { +import type { DcqlCredentialsForRequest, DcqlEncodedPresentations, DcqlFailedCredential, diff --git a/packages/core/src/modules/dcql/__tests__/DcqlModule.test.ts b/packages/core/src/modules/dcql/__tests__/DcqlModule.test.ts index 45829aa05d..cd48c43c6c 100644 --- a/packages/core/src/modules/dcql/__tests__/DcqlModule.test.ts +++ b/packages/core/src/modules/dcql/__tests__/DcqlModule.test.ts @@ -4,10 +4,10 @@ import { DcqlModule } from '../DcqlModule' import { DcqlService } from '../DcqlService' const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), - resolve: jest.fn().mockReturnValue({ logger: { warn: jest.fn() } }), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), + resolve: vi.fn().mockReturnValue({ logger: { warn: vi.fn() } }), } as unknown as DependencyManager describe('DcqlModule', () => { diff --git a/packages/core/src/modules/dcql/__tests__/DcqlService.test.ts b/packages/core/src/modules/dcql/__tests__/DcqlService.test.ts index 2ac34575fe..f0dc3adc6d 100644 --- a/packages/core/src/modules/dcql/__tests__/DcqlService.test.ts +++ b/packages/core/src/modules/dcql/__tests__/DcqlService.test.ts @@ -1,5 +1,5 @@ import { AgentContext } from '../../../agent' -import { SdJwtVc } from '../../sd-jwt-vc' +import type { SdJwtVc } from '../../sd-jwt-vc' import { ClaimFormat } from '../../vc' import { DcqlError } from '../DcqlError' import { DcqlService } from '../DcqlService' diff --git a/packages/core/src/modules/dcql/utils/DcqlPresentationsToCreate.ts b/packages/core/src/modules/dcql/utils/DcqlPresentationsToCreate.ts index da9e4a1f74..fdc277e2eb 100644 --- a/packages/core/src/modules/dcql/utils/DcqlPresentationsToCreate.ts +++ b/packages/core/src/modules/dcql/utils/DcqlPresentationsToCreate.ts @@ -1,5 +1,5 @@ import type { DcqlMdocCredential, DcqlSdJwtVcCredential, DcqlW3cVcCredential } from 'dcql' -import { JsonObject } from '../../../types' +import type { JsonObject } from '../../../types' import { MdocRecord } from '../../mdoc' import { SdJwtVcRecord } from '../../sd-jwt-vc' import { ClaimFormat, W3cCredentialRecord, W3cV2CredentialRecord } from '../../vc' diff --git a/packages/core/src/modules/dids/DidsApi.ts b/packages/core/src/modules/dids/DidsApi.ts index 25ad47fa2c..745240bda8 100644 --- a/packages/core/src/modules/dids/DidsApi.ts +++ b/packages/core/src/modules/dids/DidsApi.ts @@ -16,7 +16,7 @@ import { injectable } from '../../plugins' import { parseDid } from '@sphereon/ssi-types' import { KeyManagementApi } from '../kms' import { DidsModuleConfig } from './DidsModuleConfig' -import { DidPurpose, getPublicJwkFromVerificationMethod } from './domain' +import { type DidPurpose, getPublicJwkFromVerificationMethod } from './domain' import { getAlternativeDidsForPeerDid, isValidPeerDid } from './methods' import { DidRecord, DidRepository } from './repository' import { DidRegistrarService, DidResolverService } from './services' diff --git a/packages/core/src/modules/dids/__tests__/DidsApi.test.ts b/packages/core/src/modules/dids/__tests__/DidsApi.test.ts index 85fc3c6eba..e929e35f6a 100644 --- a/packages/core/src/modules/dids/__tests__/DidsApi.test.ts +++ b/packages/core/src/modules/dids/__tests__/DidsApi.test.ts @@ -6,7 +6,7 @@ import { isLongFormDidPeer4, isShortFormDidPeer4 } from '../methods/peer/peerDid import { DidDocument, DidDocumentService, - PeerDidCreateOptions, + type PeerDidCreateOptions, PeerDidNumAlgo, TypedArrayEncoder, createPeerDidDocumentFromServices, @@ -161,7 +161,7 @@ describe('DidsApi', () => { }) expect(await agent.dids.getCreatedDids({ did })).toHaveLength(1) - expect( + await expect( agent.dids.import({ did, didDocument: didDocument2, @@ -214,8 +214,8 @@ describe('DidsApi', () => { ? result.didState.didDocument?.alsoKnownAs[0] : undefined - if (!longFormDid) fail('Long form did not defined') - if (!shortFormDid) fail('Short form did not defined') + if (!longFormDid) throw new Error('Long form did not defined') + if (!shortFormDid) throw new Error('Short form did not defined') expect(isLongFormDidPeer4(longFormDid)).toBeTruthy() expect(isShortFormDidPeer4(shortFormDid)).toBeTruthy() diff --git a/packages/core/src/modules/dids/__tests__/DidsModule.test.ts b/packages/core/src/modules/dids/__tests__/DidsModule.test.ts index e09efd52fd..c7d0269f6c 100644 --- a/packages/core/src/modules/dids/__tests__/DidsModule.test.ts +++ b/packages/core/src/modules/dids/__tests__/DidsModule.test.ts @@ -1,11 +1,12 @@ +import type { MockedClassConstructor } from '../../../../../../tests/types' import { DependencyManager } from '../../../plugins/DependencyManager' import { DidsModule } from '../DidsModule' import { DidsModuleConfig } from '../DidsModuleConfig' import { DidRepository } from '../repository' import { DidRegistrarService, DidResolverService } from '../services' -jest.mock('../../../plugins/DependencyManager') -const DependencyManagerMock = DependencyManager as jest.Mock +vi.mock('../../../plugins/DependencyManager') +const DependencyManagerMock = DependencyManager as MockedClassConstructor const dependencyManager = new DependencyManagerMock() diff --git a/packages/core/src/modules/dids/domain/DidDocument.ts b/packages/core/src/modules/dids/domain/DidDocument.ts index e7efa89896..89aba1e65a 100644 --- a/packages/core/src/modules/dids/domain/DidDocument.ts +++ b/packages/core/src/modules/dids/domain/DidDocument.ts @@ -10,7 +10,8 @@ import { TypedArrayEncoder } from '../../../utils' import { Ed25519PublicJwk, PublicJwk, X25519PublicJwk } from '../../kms' import { findMatchingEd25519Key } from '../findMatchingEd25519Key' import { getPublicJwkFromVerificationMethod } from './key-type' -import { DidCommV1Service, IndyAgentService, ServiceTransformer } from './service' +import { DidCommV1Service, IndyAgentService } from './service' +import { ServiceTransformer } from './service/ServiceTransformer' import { IsStringOrVerificationMethod, VerificationMethod, VerificationMethodTransformer } from './verificationMethod' export type DidPurpose = diff --git a/packages/core/src/modules/dids/domain/didDocumentKey.ts b/packages/core/src/modules/dids/domain/didDocumentKey.ts index 5d84cb381c..792938519b 100644 --- a/packages/core/src/modules/dids/domain/didDocumentKey.ts +++ b/packages/core/src/modules/dids/domain/didDocumentKey.ts @@ -1,4 +1,4 @@ -import { DidDocumentKey } from '../DidsApiOptions' +import type { DidDocumentKey } from '../DidsApiOptions' import { VerificationMethod } from './verificationMethod' export function getKmsKeyIdForVerifiacationMethod(verificationMethod: VerificationMethod, keys?: DidDocumentKey[]) { diff --git a/packages/core/src/modules/dids/domain/key-type/keyDidMapping.ts b/packages/core/src/modules/dids/domain/key-type/keyDidMapping.ts index d218e2d631..beb3da6c4f 100644 --- a/packages/core/src/modules/dids/domain/key-type/keyDidMapping.ts +++ b/packages/core/src/modules/dids/domain/key-type/keyDidMapping.ts @@ -3,9 +3,9 @@ import type { VerificationMethod } from '../verificationMethod' import { getPublicJwkFromMultikey, isMultikey } from '../verificationMethod' import { getPublicJwkFromJsonWebKey2020, isJsonWebKey2020 } from '../verificationMethod/JsonWebKey2020' -import { Constructor } from '../../../../utils/mixins' +import type { Constructor } from '../../../../utils/mixins' import { PublicJwk } from '../../../kms' -import { SupportedPublicJwkClass } from '../../../kms/jwk/PublicJwk' +import type { SupportedPublicJwkClass } from '../../../kms/jwk/PublicJwk' import { keyDidEd25519 } from './ed25519' import { keyDidJsonWebKey } from './keyDidJsonWebKey' import { keyDidSecp256k1 } from './secp256k1' diff --git a/packages/core/src/modules/dids/domain/service/DidCommV2Service.ts b/packages/core/src/modules/dids/domain/service/DidCommV2Service.ts index 9c6f85568a..bca29d3c78 100644 --- a/packages/core/src/modules/dids/domain/service/DidCommV2Service.ts +++ b/packages/core/src/modules/dids/domain/service/DidCommV2Service.ts @@ -4,7 +4,7 @@ import { IsOptional, IsString, ValidateNested } from 'class-validator' import { CredoError } from '../../../../error' import { IsInstanceOrArrayOfInstances, IsUri } from '../../../../utils' -import { SingleOrArray } from '../../../../types' +import type { SingleOrArray } from '../../../../types' import { DidDocumentService } from './DidDocumentService' export interface DidCommV2ServiceEndpointOptions { diff --git a/packages/core/src/modules/dids/domain/service/DidDocumentService.ts b/packages/core/src/modules/dids/domain/service/DidDocumentService.ts index 2aa798f69e..925c7c0f3f 100644 --- a/packages/core/src/modules/dids/domain/service/DidDocumentService.ts +++ b/packages/core/src/modules/dids/domain/service/DidDocumentService.ts @@ -2,7 +2,7 @@ import type { ValidationOptions } from 'class-validator' import { IsString, ValidateBy, buildMessage, isString } from 'class-validator' -import { SingleOrArray, isJsonObject } from '../../../../types' +import { type SingleOrArray, isJsonObject } from '../../../../types' type ServiceEndpointType = SingleOrArray> diff --git a/packages/core/src/modules/dids/domain/service/index.ts b/packages/core/src/modules/dids/domain/service/index.ts index 54725cb333..98faa38439 100644 --- a/packages/core/src/modules/dids/domain/service/index.ts +++ b/packages/core/src/modules/dids/domain/service/index.ts @@ -1,11 +1,11 @@ import { DidCommV1Service } from './DidCommV1Service' -import { DidCommV2Service, DidCommV2ServiceEndpoint, DidCommV2ServiceEndpointOptions } from './DidCommV2Service' +import { DidCommV2Service, DidCommV2ServiceEndpoint, type DidCommV2ServiceEndpointOptions } from './DidCommV2Service' import { DidDocumentService } from './DidDocumentService' import { IndyAgentService } from './IndyAgentService' import { ServiceTransformer, serviceTypes } from './ServiceTransformer' export { - LegacyDidCommV2ServiceOptions as DidCommV2ServiceOptions, + type LegacyDidCommV2ServiceOptions as DidCommV2ServiceOptions, LegacyDidCommV2Service as DidCommV2Service, } from './LegacyDidCommV2Service' @@ -17,5 +17,5 @@ export { serviceTypes, DidCommV2Service as NewDidCommV2Service, DidCommV2ServiceEndpoint as NewDidCommV2ServiceEndpoint, - DidCommV2ServiceEndpointOptions as NewDidCommV2ServiceEndpointOptions, + type DidCommV2ServiceEndpointOptions as NewDidCommV2ServiceEndpointOptions, } diff --git a/packages/core/src/modules/dids/domain/verificationMethod/VerificationMethod.ts b/packages/core/src/modules/dids/domain/verificationMethod/VerificationMethod.ts index 013ea560b1..60fe1acba4 100644 --- a/packages/core/src/modules/dids/domain/verificationMethod/VerificationMethod.ts +++ b/packages/core/src/modules/dids/domain/verificationMethod/VerificationMethod.ts @@ -1,5 +1,5 @@ import { IsOptional, IsString } from 'class-validator' -import { Jwk } from '../../../kms' +import type { Jwk } from '../../../kms' export interface VerificationMethodOptions { id: string diff --git a/packages/core/src/modules/dids/methods/jwk/JwkDidRegistrar.ts b/packages/core/src/modules/dids/methods/jwk/JwkDidRegistrar.ts index 7aa04837a6..23ad849fa2 100644 --- a/packages/core/src/modules/dids/methods/jwk/JwkDidRegistrar.ts +++ b/packages/core/src/modules/dids/methods/jwk/JwkDidRegistrar.ts @@ -5,12 +5,12 @@ import type { DidCreateOptions, DidCreateResult, DidDeactivateResult, DidUpdateR import { DidDocumentRole } from '../../domain/DidDocumentRole' import { DidRecord, DidRepository } from '../../repository' -import { XOR } from '../../../../types' +import type { XOR } from '../../../../types' import { KeyManagementApi, - KmsCreateKeyOptions, - KmsCreateKeyTypeAssymetric, - KmsJwkPublicAsymmetric, + type KmsCreateKeyOptions, + type KmsCreateKeyTypeAssymetric, + type KmsJwkPublicAsymmetric, PublicJwk, } from '../../../kms' import { DidJwk } from './DidJwk' diff --git a/packages/core/src/modules/dids/methods/jwk/__tests__/JwkDidRegistrar.test.ts b/packages/core/src/modules/dids/methods/jwk/__tests__/JwkDidRegistrar.test.ts index 8ed77f42db..17999e9f08 100644 --- a/packages/core/src/modules/dids/methods/jwk/__tests__/JwkDidRegistrar.test.ts +++ b/packages/core/src/modules/dids/methods/jwk/__tests__/JwkDidRegistrar.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { transformPrivateKeyToPrivateJwk } from '../../../../../../../askar/src/utils' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../../tests/helpers' import { TypedArrayEncoder } from '../../../../../utils' @@ -7,8 +8,8 @@ import { DidDocumentRole } from '../../../domain/DidDocumentRole' import { DidRepository } from '../../../repository/DidRepository' import { JwkDidRegistrar } from '../JwkDidRegistrar' -jest.mock('../../../repository/DidRepository') -const DidRepositoryMock = DidRepository as jest.Mock +vi.mock('../../../repository/DidRepository') +const DidRepositoryMock = DidRepository as MockedClassConstructor const didRepositoryMock = new DidRepositoryMock() const jwkDidRegistrar = new JwkDidRegistrar() @@ -22,7 +23,7 @@ const kms = agentContext.dependencyManager.resolve(KeyManagementApi) describe('DidRegistrar', () => { afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('JwkDidRegistrar', () => { diff --git a/packages/core/src/modules/dids/methods/jwk/__tests__/JwkDidResolver.test.ts b/packages/core/src/modules/dids/methods/jwk/__tests__/JwkDidResolver.test.ts index 28dc34d497..9d3c302485 100644 --- a/packages/core/src/modules/dids/methods/jwk/__tests__/JwkDidResolver.test.ts +++ b/packages/core/src/modules/dids/methods/jwk/__tests__/JwkDidResolver.test.ts @@ -18,7 +18,7 @@ describe('DidResolver', () => { }) it('should correctly resolve a did:jwk document', async () => { - const fromDidSpy = jest.spyOn(DidJwk, 'fromDid') + const fromDidSpy = vi.spyOn(DidJwk, 'fromDid') const result = await keyDidResolver.resolve(agentContext, p256DidJwkEyJjcnYi0iFixture.id) expect(JsonTransformer.toJSON(result)).toMatchObject({ diff --git a/packages/core/src/modules/dids/methods/key/KeyDidRegistrar.ts b/packages/core/src/modules/dids/methods/key/KeyDidRegistrar.ts index ccf3952315..c95bd41068 100644 --- a/packages/core/src/modules/dids/methods/key/KeyDidRegistrar.ts +++ b/packages/core/src/modules/dids/methods/key/KeyDidRegistrar.ts @@ -2,12 +2,12 @@ import type { AgentContext } from '../../../../agent' import type { DidRegistrar } from '../../domain/DidRegistrar' import type { DidCreateOptions, DidCreateResult, DidDeactivateResult, DidUpdateResult } from '../../types' -import { XOR } from '../../../../types' +import type { XOR } from '../../../../types' import { KeyManagementApi, - KmsCreateKeyOptions, - KmsCreateKeyTypeAssymetric, - KmsJwkPublicAsymmetric, + type KmsCreateKeyOptions, + type KmsCreateKeyTypeAssymetric, + type KmsJwkPublicAsymmetric, PublicJwk, } from '../../../kms' import { DidDocumentRole } from '../../domain/DidDocumentRole' diff --git a/packages/core/src/modules/dids/methods/key/__tests__/KeyDidRegistrar.test.ts b/packages/core/src/modules/dids/methods/key/__tests__/KeyDidRegistrar.test.ts index bf3055a010..26b068338d 100644 --- a/packages/core/src/modules/dids/methods/key/__tests__/KeyDidRegistrar.test.ts +++ b/packages/core/src/modules/dids/methods/key/__tests__/KeyDidRegistrar.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { transformPrivateKeyToPrivateJwk } from '../../../../../../../askar/src' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../../tests/helpers' import { TypedArrayEncoder } from '../../../../../utils' @@ -9,8 +10,8 @@ import { KeyDidRegistrar } from '../KeyDidRegistrar' import didKeyz6MksLeFixture from './__fixtures__/didKeyz6MksLe.json' -jest.mock('../../../repository/DidRepository') -const DidRepositoryMock = DidRepository as jest.Mock +vi.mock('../../../repository/DidRepository') +const DidRepositoryMock = DidRepository as MockedClassConstructor const didRepositoryMock = new DidRepositoryMock() const keyDidRegistrar = new KeyDidRegistrar() @@ -23,7 +24,7 @@ const kms = agentContext.resolve(KeyManagementApi) describe('DidRegistrar', () => { afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('KeyDidRegistrar', () => { diff --git a/packages/core/src/modules/dids/methods/key/__tests__/KeyDidResolver.test.ts b/packages/core/src/modules/dids/methods/key/__tests__/KeyDidResolver.test.ts index f4a3cbcb31..02e0c0c524 100644 --- a/packages/core/src/modules/dids/methods/key/__tests__/KeyDidResolver.test.ts +++ b/packages/core/src/modules/dids/methods/key/__tests__/KeyDidResolver.test.ts @@ -17,7 +17,7 @@ describe('DidResolver', () => { }) it('should correctly resolve a did:key document', async () => { - const fromDidSpy = jest.spyOn(DidKey, 'fromDid') + const fromDidSpy = vi.spyOn(DidKey, 'fromDid') const result = await keyDidResolver.resolve( agentContext, 'did:key:z6MkmjY8GnV5i9YTDtPETC2uUAW6ejw3nk5mXF5yci5ab7th' diff --git a/packages/core/src/modules/dids/methods/peer/PeerDidRegistrar.ts b/packages/core/src/modules/dids/methods/peer/PeerDidRegistrar.ts index b38b7b92e2..d91a13a0c7 100644 --- a/packages/core/src/modules/dids/methods/peer/PeerDidRegistrar.ts +++ b/packages/core/src/modules/dids/methods/peer/PeerDidRegistrar.ts @@ -8,9 +8,9 @@ import { DidDocument } from '../../domain' import { DidDocumentRole } from '../../domain/DidDocumentRole' import { DidRecord, DidRepository } from '../../repository' -import { XOR } from '../../../../types' -import { KeyManagementApi, KmsCreateKeyOptions, KmsCreateKeyTypeAssymetric, PublicJwk } from '../../../kms' -import { DidDocumentKey } from '../../DidsApiOptions' +import type { XOR } from '../../../../types' +import { KeyManagementApi, type KmsCreateKeyOptions, type KmsCreateKeyTypeAssymetric, PublicJwk } from '../../../kms' +import type { DidDocumentKey } from '../../DidsApiOptions' import { PeerDidNumAlgo, getAlternativeDidsForPeerDid } from './didPeer' import { publicJwkToNumAlgo0DidDocument } from './peerDidNumAlgo0' import { didDocumentJsonToNumAlgo1Did } from './peerDidNumAlgo1' diff --git a/packages/core/src/modules/dids/methods/peer/__tests__/PeerDidRegistrar.test.ts b/packages/core/src/modules/dids/methods/peer/__tests__/PeerDidRegistrar.test.ts index 5366a553ea..7593428d2e 100644 --- a/packages/core/src/modules/dids/methods/peer/__tests__/PeerDidRegistrar.test.ts +++ b/packages/core/src/modules/dids/methods/peer/__tests__/PeerDidRegistrar.test.ts @@ -6,13 +6,14 @@ import { DidRepository } from '../../../repository/DidRepository' import { PeerDidRegistrar } from '../PeerDidRegistrar' import { PeerDidNumAlgo } from '../didPeer' +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { transformPrivateKeyToPrivateJwk } from '../../../../../../../askar/src' import { TypedArrayEncoder } from '../../../../../utils' import { Ed25519PublicJwk, KeyManagementApi, PublicJwk } from '../../../../kms' import didPeer0z6MksLeFixture from './__fixtures__/didPeer0z6MksLe.json' -jest.mock('../../../repository/DidRepository') -const DidRepositoryMock = DidRepository as jest.Mock +vi.mock('../../../repository/DidRepository') +const DidRepositoryMock = DidRepository as MockedClassConstructor const didRepositoryMock = new DidRepositoryMock() @@ -25,7 +26,7 @@ const kms = agentContext.resolve(KeyManagementApi) describe('DidRegistrar', () => { afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('PeerDidRegistrar', () => { diff --git a/packages/core/src/modules/dids/methods/peer/__tests__/peerDidNumAlgo1.test.ts b/packages/core/src/modules/dids/methods/peer/__tests__/peerDidNumAlgo1.test.ts index c4cd88219f..255c2ff617 100644 --- a/packages/core/src/modules/dids/methods/peer/__tests__/peerDidNumAlgo1.test.ts +++ b/packages/core/src/modules/dids/methods/peer/__tests__/peerDidNumAlgo1.test.ts @@ -10,7 +10,7 @@ describe('peerDidNumAlgo1', () => { }) // FIXME: we need some input data from AFGO for this test to succeed (we create a hash of the document, so any inconsistency is fatal) - xtest('transforms a did document from aries-framework-go into a valid method 1 did', () => { + test.skip('transforms a did document from aries-framework-go into a valid method 1 did', () => { expect(didDocumentJsonToNumAlgo1Did(didPeer1zQmZ)).toEqual(didPeer1zQmZ.id) }) }) diff --git a/packages/core/src/modules/dids/methods/peer/createPeerDidDocumentFromServices.ts b/packages/core/src/modules/dids/methods/peer/createPeerDidDocumentFromServices.ts index 7b85f1d269..5c267ffad4 100644 --- a/packages/core/src/modules/dids/methods/peer/createPeerDidDocumentFromServices.ts +++ b/packages/core/src/modules/dids/methods/peer/createPeerDidDocumentFromServices.ts @@ -3,7 +3,7 @@ import type { ResolvedDidCommService } from '../../../../types' import { convertPublicKeyToX25519 } from '@stablelib/ed25519' import { PublicJwk } from '../../../kms' -import { DidDocumentKey } from '../../DidsApiOptions' +import type { DidDocumentKey } from '../../DidsApiOptions' import { DidDocument, getEd25519VerificationKey2018, getX25519KeyAgreementKey2019 } from '../../domain' import { DidDocumentBuilder } from '../../domain/DidDocumentBuilder' import { DidCommV1Service } from '../../domain/service/DidCommV1Service' diff --git a/packages/core/src/modules/dids/repository/DidRecord.ts b/packages/core/src/modules/dids/repository/DidRecord.ts index ba7bab4252..0cc57e6810 100644 --- a/packages/core/src/modules/dids/repository/DidRecord.ts +++ b/packages/core/src/modules/dids/repository/DidRecord.ts @@ -10,7 +10,7 @@ import { DidDocument } from '../domain' import { DidDocumentRole } from '../domain/DidDocumentRole' import { parseDid } from '../domain/parse' -import { DidDocumentKey } from '../DidsApiOptions' +import type { DidDocumentKey } from '../DidsApiOptions' import { DidRecordMetadataKeys } from './didRecordMetadataTypes' export interface DidRecordProps { diff --git a/packages/core/src/modules/dids/repository/DidRepository.ts b/packages/core/src/modules/dids/repository/DidRepository.ts index d342ef11be..d7b0391b95 100644 --- a/packages/core/src/modules/dids/repository/DidRepository.ts +++ b/packages/core/src/modules/dids/repository/DidRepository.ts @@ -6,11 +6,11 @@ import { EventEmitter } from '../../../agent/EventEmitter' import { InjectionSymbols } from '../../../constants' import { inject, injectable } from '../../../plugins' import { Repository } from '../../../storage/Repository' -import { StorageService } from '../../../storage/StorageService' +import type { StorageService } from '../../../storage/StorageService' import { DidDocumentRole } from '../domain/DidDocumentRole' import { PublicJwk } from '../../kms' -import { DidDocumentKey } from '../DidsApiOptions' +import type { DidDocumentKey } from '../DidsApiOptions' import { DidRecord } from './DidRecord' @injectable() diff --git a/packages/core/src/modules/dids/services/DidRegistrarService.ts b/packages/core/src/modules/dids/services/DidRegistrarService.ts index 3952edd43d..5188ccfa71 100644 --- a/packages/core/src/modules/dids/services/DidRegistrarService.ts +++ b/packages/core/src/modules/dids/services/DidRegistrarService.ts @@ -10,7 +10,7 @@ import type { } from '../types' import { InjectionSymbols } from '../../../constants' -import { Logger } from '../../../logger' +import type { Logger } from '../../../logger' import { inject, injectable } from '../../../plugins' import { DidsModuleConfig } from '../DidsModuleConfig' import { tryParseDid } from '../domain/parse' diff --git a/packages/core/src/modules/dids/services/DidResolverService.ts b/packages/core/src/modules/dids/services/DidResolverService.ts index 266519ec5a..d7aa0525e0 100644 --- a/packages/core/src/modules/dids/services/DidResolverService.ts +++ b/packages/core/src/modules/dids/services/DidResolverService.ts @@ -4,7 +4,7 @@ import type { DidResolutionOptions, DidResolutionResult, ParsedDid } from '../ty import { InjectionSymbols } from '../../../constants' import { CredoError } from '../../../error' -import { Logger } from '../../../logger' +import type { Logger } from '../../../logger' import { inject, injectable } from '../../../plugins' import { JsonTransformer } from '../../../utils' import { CacheModuleConfig } from '../../cache' diff --git a/packages/core/src/modules/dids/services/__tests__/DidRegistrarService.test.ts b/packages/core/src/modules/dids/services/__tests__/DidRegistrarService.test.ts index 30fa7507d4..023654e2bb 100644 --- a/packages/core/src/modules/dids/services/__tests__/DidRegistrarService.test.ts +++ b/packages/core/src/modules/dids/services/__tests__/DidRegistrarService.test.ts @@ -10,13 +10,13 @@ const agentContext = getAgentContext() const didRegistrarMock = { supportedMethods: ['key'], - create: jest.fn(), - update: jest.fn(), - deactivate: jest.fn(), + create: vi.fn(), + update: vi.fn(), + deactivate: vi.fn(), } as DidRegistrar const didResolverMock = { - invalidateCacheForDid: jest.fn(), + invalidateCacheForDid: vi.fn(), } as unknown as DidResolverService const didRegistrarService = new DidRegistrarService( @@ -29,7 +29,7 @@ const didRegistrarService = new DidRegistrarService( describe('DidResolverService', () => { afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('create', () => { diff --git a/packages/core/src/modules/dids/services/__tests__/DidResolverService.test.ts b/packages/core/src/modules/dids/services/__tests__/DidResolverService.test.ts index bfeb65a365..460174e336 100644 --- a/packages/core/src/modules/dids/services/__tests__/DidResolverService.test.ts +++ b/packages/core/src/modules/dids/services/__tests__/DidResolverService.test.ts @@ -15,18 +15,18 @@ const didResolverMock = { allowsCaching: true, allowsLocalDidRecord: false, supportedMethods: ['key'], - resolve: jest.fn(), + resolve: vi.fn(), } as DidResolver const recordResolverMock = { allowsCaching: false, allowsLocalDidRecord: true, supportedMethods: ['record'], - resolve: jest.fn(), + resolve: vi.fn(), } as DidResolver const didRepositoryMock = { - getCreatedDids: jest.fn(), + getCreatedDids: vi.fn(), } as unknown as DidRepository const cache = new InMemoryLruCache({ limit: 10 }) @@ -43,7 +43,7 @@ describe('DidResolverService', () => { ) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) it('should correctly find and call the correct resolver for a specified did', async () => { diff --git a/packages/core/src/modules/dif-presentation-exchange/DifPresentationExchangeService.ts b/packages/core/src/modules/dif-presentation-exchange/DifPresentationExchangeService.ts index 0a4e153bf0..7ba00a3356 100644 --- a/packages/core/src/modules/dif-presentation-exchange/DifPresentationExchangeService.ts +++ b/packages/core/src/modules/dif-presentation-exchange/DifPresentationExchangeService.ts @@ -28,7 +28,7 @@ import { injectable } from 'tsyringe' import { CredoError } from '../../error' import { JsonTransformer } from '../../utils' import { DidsApi, getPublicJwkFromVerificationMethod } from '../dids' -import { Mdoc, MdocApi, MdocRecord, MdocSessionTranscriptOptions } from '../mdoc' +import { Mdoc, MdocApi, MdocRecord, type MdocSessionTranscriptOptions } from '../mdoc' import { MdocDeviceResponse } from '../mdoc/MdocDeviceResponse' import { SdJwtVcApi } from '../sd-jwt-vc' import { @@ -43,7 +43,7 @@ import { AnonCredsDataIntegrityServiceSymbol, } from '../vc/data-integrity/models/IAnonCredsDataIntegrityService' -import { PEVersion, PartialSdJwtDecodedVerifiableCredential } from '@animo-id/pex/dist/main/lib' +import { PEVersion, type PartialSdJwtDecodedVerifiableCredential } from '@animo-id/pex/dist/main/lib/index.js' import { getJwkHumanDescription } from '../kms' import { purposes } from '../vc/data-integrity/libraries/jsonld-signatures' import { DifPresentationExchangeError } from './DifPresentationExchangeError' diff --git a/packages/core/src/modules/dif-presentation-exchange/__tests__/DifPresentationExchangeService.test.ts b/packages/core/src/modules/dif-presentation-exchange/__tests__/DifPresentationExchangeService.test.ts index 4b1e6cbe91..aab11bf5fa 100644 --- a/packages/core/src/modules/dif-presentation-exchange/__tests__/DifPresentationExchangeService.test.ts +++ b/packages/core/src/modules/dif-presentation-exchange/__tests__/DifPresentationExchangeService.test.ts @@ -483,7 +483,7 @@ describe('DifPresentationExchangeService', () => { const selectedCredentials = pexService.selectCredentialsForRequest(credentialsForRequest) - jest.spyOn(kms, 'sign').mockResolvedValue({ signature: new Uint8Array([]) }) + vi.spyOn(kms, 'sign').mockResolvedValue({ signature: new Uint8Array([]) }) const presentation = await pexService.createPresentation(agentContext, { credentialsForInputDescriptor: selectedCredentials, challenge: 'something', @@ -615,7 +615,7 @@ describe('DifPresentationExchangeService', () => { const selectedCredentials = pexService.selectCredentialsForRequest(credentialsForRequest) - jest.spyOn(kms, 'sign').mockResolvedValue({ signature: new Uint8Array([]) }) + vi.spyOn(kms, 'sign').mockResolvedValue({ signature: new Uint8Array([]) }) const presentation = await pexService.createPresentation(agentContext, { credentialsForInputDescriptor: selectedCredentials, @@ -757,7 +757,7 @@ describe('DifPresentationExchangeService', () => { const selectedCredentials = pexService.selectCredentialsForRequest(credentialsForRequest) - jest.spyOn(kms, 'sign').mockResolvedValue({ signature: new Uint8Array([]) }) + vi.spyOn(kms, 'sign').mockResolvedValue({ signature: new Uint8Array([]) }) const presentation = await pexService.createPresentation(agentContext, { credentialsForInputDescriptor: selectedCredentials, diff --git a/packages/core/src/modules/dif-presentation-exchange/models/DifPexCredentialsForRequest.ts b/packages/core/src/modules/dif-presentation-exchange/models/DifPexCredentialsForRequest.ts index 15f860af39..70970d01bc 100644 --- a/packages/core/src/modules/dif-presentation-exchange/models/DifPexCredentialsForRequest.ts +++ b/packages/core/src/modules/dif-presentation-exchange/models/DifPexCredentialsForRequest.ts @@ -1,4 +1,4 @@ -import { JsonObject } from '../../../types' +import type { JsonObject } from '../../../types' import type { MdocNameSpaces, MdocRecord } from '../../mdoc' import type { SdJwtVcRecord } from '../../sd-jwt-vc' import type { ClaimFormat, W3cCredentialRecord } from '../../vc' diff --git a/packages/core/src/modules/dif-presentation-exchange/models/index.ts b/packages/core/src/modules/dif-presentation-exchange/models/index.ts index 21dbbe0f4a..9f7bfe8394 100644 --- a/packages/core/src/modules/dif-presentation-exchange/models/index.ts +++ b/packages/core/src/modules/dif-presentation-exchange/models/index.ts @@ -5,7 +5,7 @@ import type { SdJwtVc } from '../../sd-jwt-vc' import type { W3cV2VerifiableCredential, W3cVerifiableCredential, W3cVerifiablePresentation } from '../../vc' import { PresentationSubmissionLocation } from '@animo-id/pex' -import { W3cV2VerifiablePresentation } from '../../vc/models/presentation/W3cV2VerifiablePresentation' +import type { W3cV2VerifiablePresentation } from '../../vc/models/presentation/W3cV2VerifiablePresentation' export { PresentationSubmissionLocation as DifPresentationExchangeSubmissionLocation } diff --git a/packages/core/src/modules/dif-presentation-exchange/utils/credentialSelection.ts b/packages/core/src/modules/dif-presentation-exchange/utils/credentialSelection.ts index f54a28e179..5934f0a199 100644 --- a/packages/core/src/modules/dif-presentation-exchange/utils/credentialSelection.ts +++ b/packages/core/src/modules/dif-presentation-exchange/utils/credentialSelection.ts @@ -17,7 +17,7 @@ import type { SubmissionEntryCredential, } from '../models' -import { SubmissionRequirementMatchType } from '@animo-id/pex/dist/main/lib/evaluation/core' +import { SubmissionRequirementMatchType } from '@animo-id/pex/dist/main/lib/evaluation/core/index.js' import { JSONPath } from '@astronautlabs/jsonpath' import { decodeSdJwtSync, getClaimsSync } from '@sd-jwt/decode' import { Rules } from '@sphereon/pex-models' @@ -31,7 +31,7 @@ import { SdJwtVcRecord } from '../../sd-jwt-vc' import { ClaimFormat, W3cCredentialRecord } from '../../vc' import { DifPresentationExchangeError } from '../DifPresentationExchangeError' -import { JsonObject } from '../../../types' +import type { JsonObject } from '../../../types' import { getSphereonOriginalVerifiableCredential } from './transform' export async function getCredentialsForRequest( diff --git a/packages/core/src/modules/dif-presentation-exchange/utils/presentationSelection.ts b/packages/core/src/modules/dif-presentation-exchange/utils/presentationSelection.ts index 9c8be42b0a..f14786bcb1 100644 --- a/packages/core/src/modules/dif-presentation-exchange/utils/presentationSelection.ts +++ b/packages/core/src/modules/dif-presentation-exchange/utils/presentationSelection.ts @@ -8,7 +8,7 @@ import type { import { JSONPath } from '@astronautlabs/jsonpath' import { CredoError } from '../../../error' -import { SingleOrArray } from '../../../types' +import type { SingleOrArray } from '../../../types' import { MdocDeviceResponse } from '../../mdoc' import { ClaimFormat, diff --git a/packages/core/src/modules/dif-presentation-exchange/utils/presentationsToCreate.ts b/packages/core/src/modules/dif-presentation-exchange/utils/presentationsToCreate.ts index 0de86720c6..0af8557393 100644 --- a/packages/core/src/modules/dif-presentation-exchange/utils/presentationsToCreate.ts +++ b/packages/core/src/modules/dif-presentation-exchange/utils/presentationsToCreate.ts @@ -1,6 +1,6 @@ import type { DifPexInputDescriptorToCredentials } from '../models' -import { JsonObject } from '../../../types' +import type { JsonObject } from '../../../types' import { MdocRecord } from '../../mdoc' import { SdJwtVcRecord } from '../../sd-jwt-vc' import { ClaimFormat, W3cCredentialRecord } from '../../vc' diff --git a/packages/core/src/modules/generic-records/GenericRecordsApi.ts b/packages/core/src/modules/generic-records/GenericRecordsApi.ts index 5ea2927f81..3d02c2703f 100644 --- a/packages/core/src/modules/generic-records/GenericRecordsApi.ts +++ b/packages/core/src/modules/generic-records/GenericRecordsApi.ts @@ -3,7 +3,7 @@ import type { GenericRecord, SaveGenericRecordOption } from './repository/Generi import { AgentContext } from '../../agent' import { InjectionSymbols } from '../../constants' -import { Logger } from '../../logger' +import type { Logger } from '../../logger' import { inject, injectable } from '../../plugins' import { GenericRecordService } from './services/GenericRecordService' diff --git a/packages/core/src/modules/generic-records/__tests__/GenericRecordsModule.test.ts b/packages/core/src/modules/generic-records/__tests__/GenericRecordsModule.test.ts index 8913cc0a8b..6ddf926747 100644 --- a/packages/core/src/modules/generic-records/__tests__/GenericRecordsModule.test.ts +++ b/packages/core/src/modules/generic-records/__tests__/GenericRecordsModule.test.ts @@ -1,10 +1,11 @@ +import type { MockedClassConstructor } from '../../../../../../tests/types' import { DependencyManager } from '../../../plugins/DependencyManager' import { GenericRecordsModule } from '../GenericRecordsModule' import { GenericRecordsRepository } from '../repository/GenericRecordsRepository' import { GenericRecordService } from '../services/GenericRecordService' -jest.mock('../../../plugins/DependencyManager') -const DependencyManagerMock = DependencyManager as jest.Mock +vi.mock('../../../plugins/DependencyManager') +const DependencyManagerMock = DependencyManager as MockedClassConstructor const dependencyManager = new DependencyManagerMock() diff --git a/packages/core/src/modules/generic-records/repository/GenericRecordsRepository.ts b/packages/core/src/modules/generic-records/repository/GenericRecordsRepository.ts index bcac57ab64..3ff8516cf9 100644 --- a/packages/core/src/modules/generic-records/repository/GenericRecordsRepository.ts +++ b/packages/core/src/modules/generic-records/repository/GenericRecordsRepository.ts @@ -2,7 +2,7 @@ import { EventEmitter } from '../../../agent/EventEmitter' import { InjectionSymbols } from '../../../constants' import { inject, injectable } from '../../../plugins' import { Repository } from '../../../storage/Repository' -import { StorageService } from '../../../storage/StorageService' +import type { StorageService } from '../../../storage/StorageService' import { GenericRecord } from './GenericRecord' diff --git a/packages/core/src/modules/kms/KeyManagementApi.ts b/packages/core/src/modules/kms/KeyManagementApi.ts index a248f3782e..9cf7617bd5 100644 --- a/packages/core/src/modules/kms/KeyManagementApi.ts +++ b/packages/core/src/modules/kms/KeyManagementApi.ts @@ -1,40 +1,40 @@ import { injectable } from 'tsyringe' import { AgentContext } from '../../agent' -import { parseWithErrorHandling } from '../../utils/zod' +import { zParseWithErrorHandling } from '../../utils/zod' import { KeyManagementModuleConfig } from './KeyManagementModuleConfig' import { KeyManagementError } from './error/KeyManagementError' import { KeyManagementKeyNotFoundError } from './error/KeyManagementKeyNotFoundError' -import { KmsJwkPrivate, getJwkHumanDescription } from './jwk' +import { type KmsJwkPrivate, getJwkHumanDescription } from './jwk' import { createKeyTypeForSigningAlgorithm } from './jwk/alg/signing' import { - KmsDecryptOptions, - KmsDeleteKeyOptions, - KmsGetPublicKeyOptions, - KmsImportKeyOptions, - KmsOperation, - KmsRandomBytesOptions, + type KmsDecryptOptions, + type KmsDeleteKeyOptions, + type KmsGetPublicKeyOptions, + type KmsImportKeyOptions, + type KmsOperation, + type KmsRandomBytesOptions, getKmsOperationHumanDescription, } from './options' import { - KmsCreateKeyForSignatureAlgorithmOptions, - KmsCreateKeyOptions, - KmsCreateKeyReturn, - KmsCreateKeyType, - KmsCreateKeyTypeAssymetric, + type KmsCreateKeyForSignatureAlgorithmOptions, + type KmsCreateKeyOptions, + type KmsCreateKeyReturn, + type KmsCreateKeyType, + type KmsCreateKeyTypeAssymetric, zKmsCreateKeyForSignatureAlgorithmOptions, zKmsCreateKeyOptions, } from './options/KmsCreateKeyOptions' import { zKmsDecryptOptions } from './options/KmsDecryptOptions' import { zKmsDeleteKeyOptions } from './options/KmsDeleteKeyOptions' -import { KmsEncryptOptions, zKmsEncryptOptions } from './options/KmsEncryptOptions' +import { type KmsEncryptOptions, zKmsEncryptOptions } from './options/KmsEncryptOptions' import { zKmsGetPublicKeyOptions } from './options/KmsGetPublicKeyOptions' -import { KmsImportKeyReturn, zKmsImportKeyOptions } from './options/KmsImportKeyOptions' +import { type KmsImportKeyReturn, zKmsImportKeyOptions } from './options/KmsImportKeyOptions' import { zKmsRandomBytesOptions } from './options/KmsRandomBytesOptions' -import { KmsSignOptions, zKmsSignOptions } from './options/KmsSignOptions' -import { KmsVerifyOptions, zKmsVerifyOptions } from './options/KmsVerifyOptions' -import { WithBackend, zWithBackend } from './options/backend' +import { type KmsSignOptions, zKmsSignOptions } from './options/KmsSignOptions' +import { type KmsVerifyOptions, zKmsVerifyOptions } from './options/KmsVerifyOptions' +import { type WithBackend, zWithBackend } from './options/backend' @injectable() export class KeyManagementApi { @@ -68,7 +68,7 @@ export class KeyManagementApi { public async createKey( options: WithBackend> ): Promise> { - const { backend, ...kmsOptions } = parseWithErrorHandling( + const { backend, ...kmsOptions } = zParseWithErrorHandling( zWithBackend(zKmsCreateKeyOptions), options, 'Invalid options provided to createKey method' @@ -95,7 +95,7 @@ export class KeyManagementApi { public async createKeyForSignatureAlgorithm( options: WithBackend ): Promise> { - const { backend, algorithm, ...kmsOptions } = parseWithErrorHandling( + const { backend, algorithm, ...kmsOptions } = zParseWithErrorHandling( zWithBackend(zKmsCreateKeyForSignatureAlgorithmOptions), options, 'Invalid options provided to createKeyForSignatureAlgorithm method' @@ -121,7 +121,7 @@ export class KeyManagementApi { * Sign using a key. */ public async sign(options: WithBackend) { - const { backend, ...kmsOptions } = parseWithErrorHandling( + const { backend, ...kmsOptions } = zParseWithErrorHandling( zWithBackend(zKmsSignOptions), options, 'Invalid options provided to sign method' @@ -142,7 +142,7 @@ export class KeyManagementApi { * Verify using a key. */ public async verify(options: WithBackend) { - const { backend, ...kmsOptions } = parseWithErrorHandling( + const { backend, ...kmsOptions } = zParseWithErrorHandling( zWithBackend(zKmsVerifyOptions), options, 'Invalid options provided to verify method' @@ -161,7 +161,7 @@ export class KeyManagementApi { * Encrypt. */ public async encrypt(options: WithBackend) { - const { backend, ...kmsOptions } = parseWithErrorHandling( + const { backend, ...kmsOptions } = zParseWithErrorHandling( zWithBackend(zKmsEncryptOptions), options, 'Invalid options provided to encrypt method' @@ -184,7 +184,7 @@ export class KeyManagementApi { * Decrypt. */ public async decrypt(options: WithBackend) { - const { backend, ...kmsOptions } = parseWithErrorHandling( + const { backend, ...kmsOptions } = zParseWithErrorHandling( zWithBackend(zKmsDecryptOptions), options, 'Invalid options provided to decrypt method' @@ -214,7 +214,7 @@ export class KeyManagementApi { public async importKey( options: WithBackend> ): Promise> { - const { backend, ...kmsOptions } = parseWithErrorHandling( + const { backend, ...kmsOptions } = zParseWithErrorHandling( zWithBackend(zKmsImportKeyOptions), options, 'Invalid options provided to importKey method' @@ -239,7 +239,7 @@ export class KeyManagementApi { * Get a public key. */ public async getPublicKey(options: WithBackend) { - const { backend, keyId } = parseWithErrorHandling( + const { backend, keyId } = zParseWithErrorHandling( zWithBackend(zKmsGetPublicKeyOptions), options, 'Invalid options provided to getPublicKey method' @@ -262,7 +262,7 @@ export class KeyManagementApi { * Delete a key. */ public async deleteKey(options: WithBackend) { - const { backend, ...kmsOptions } = parseWithErrorHandling( + const { backend, ...kmsOptions } = zParseWithErrorHandling( zWithBackend(zKmsDeleteKeyOptions), options, 'Invalid options provided to deleteKey method' @@ -279,7 +279,7 @@ export class KeyManagementApi { * Generate random bytes */ public randomBytes(options: WithBackend) { - const { backend, ...kmsOptions } = parseWithErrorHandling( + const { backend, ...kmsOptions } = zParseWithErrorHandling( zWithBackend(zKmsRandomBytesOptions), options, 'Invalid options provided to randomBytes method' diff --git a/packages/core/src/modules/kms/KeyManagementService.ts b/packages/core/src/modules/kms/KeyManagementService.ts index bdf59a0803..e6a7bb9121 100644 --- a/packages/core/src/modules/kms/KeyManagementService.ts +++ b/packages/core/src/modules/kms/KeyManagementService.ts @@ -5,7 +5,7 @@ import type { KmsCreateKeyOptions, KmsCreateKeyReturn, KmsCreateKeyType } from ' import type { KmsDeleteKeyOptions } from './options/KmsDeleteKeyOptions' import type { KmsEncryptOptions, KmsEncryptReturn } from './options/KmsEncryptOptions' import type { KmsImportKeyOptions, KmsImportKeyReturn } from './options/KmsImportKeyOptions' -import { KmsOperation } from './options/KmsOperation' +import type { KmsOperation } from './options/KmsOperation' import type { KmsSignOptions, KmsSignReturn } from './options/KmsSignOptions' import type { KmsVerifyOptions, KmsVerifyReturn } from './options/KmsVerifyOptions' diff --git a/packages/core/src/modules/kms/__tests__/CreateKeyOptions.test.ts b/packages/core/src/modules/kms/__tests__/CreateKeyOptions.test.ts index 6b03f6ab20..439e3d26b2 100644 --- a/packages/core/src/modules/kms/__tests__/CreateKeyOptions.test.ts +++ b/packages/core/src/modules/kms/__tests__/CreateKeyOptions.test.ts @@ -1,10 +1,10 @@ -import { parseWithErrorHandling } from '../../../utils/zod' +import { zParseWithErrorHandling } from '../../../utils/zod' import { zKmsCreateKeyType } from '../options/KmsCreateKeyOptions' describe('CreateKeyOptions', () => { test('should throw error for invalid create key type', async () => { expect(() => - parseWithErrorHandling(zKmsCreateKeyType, { + zParseWithErrorHandling(zKmsCreateKeyType, { kty: 'oct', algorithm: 'AES', }) diff --git a/packages/core/src/modules/kms/jwk/PublicJwk.ts b/packages/core/src/modules/kms/jwk/PublicJwk.ts index 4bd92786ea..45a9dfe858 100644 --- a/packages/core/src/modules/kms/jwk/PublicJwk.ts +++ b/packages/core/src/modules/kms/jwk/PublicJwk.ts @@ -1,15 +1,15 @@ -import { HashName } from '../../../crypto' +import type { HashName } from '../../../crypto' import { CredoError } from '../../../error' import { MultiBaseEncoder, TypedArrayEncoder, VarintEncoder } from '../../../utils' -import { Constructor } from '../../../utils/mixins' -import { parseWithErrorHandling } from '../../../utils/zod' +import type { Constructor } from '../../../utils/mixins' +import { zParseWithErrorHandling } from '../../../utils/zod' import { KeyManagementError } from '../error/KeyManagementError' import { legacyKeyIdFromPublicJwk } from '../legacy' import { assymetricPublicJwkMatches } from './equals' import { getJwkHumanDescription } from './humanDescription' -import { KnownJwaKeyAgreementAlgorithm, KnownJwaSignatureAlgorithm } from './jwa' +import type { KnownJwaKeyAgreementAlgorithm, KnownJwaSignatureAlgorithm } from './jwa' import { calculateJwkThumbprint } from './jwkThumbprint' -import { KmsJwkPublicAsymmetric, assertJwkAsymmetric, publicJwkFromPrivateJwk, zKmsJwkPublic } from './knownJwk' +import { type KmsJwkPublicAsymmetric, assertJwkAsymmetric, publicJwkFromPrivateJwk, zKmsJwkPublic } from './knownJwk' import { Ed25519PublicJwk, @@ -49,7 +49,7 @@ export class PublicJwk { public static fromUnknown(jwkJson: unknown) { // We remove any private properties if they are present - const publicJwk = publicJwkFromPrivateJwk(parseWithErrorHandling(zKmsJwkPublic, jwkJson, 'jwk is not a valid jwk')) + const publicJwk = publicJwkFromPrivateJwk(zParseWithErrorHandling(zKmsJwkPublic, jwkJson, 'jwk is not a valid jwk')) assertJwkAsymmetric(publicJwk) let jwkInstance: SupportedPublicJwk diff --git a/packages/core/src/modules/kms/jwk/alg/signing.ts b/packages/core/src/modules/kms/jwk/alg/signing.ts index 9571b41de0..e1e0e08aed 100644 --- a/packages/core/src/modules/kms/jwk/alg/signing.ts +++ b/packages/core/src/modules/kms/jwk/alg/signing.ts @@ -4,7 +4,7 @@ import type { KmsJwkPublicOct } from '../kty/oct/octJwk' import { TypedArrayEncoder } from '../../../../utils' import { KeyManagementError } from '../../error/KeyManagementError' -import { KmsCreateKeyType } from '../../options' +import type { KmsCreateKeyType } from '../../options' import { getJwkHumanDescription } from '../humanDescription' /** diff --git a/packages/core/src/modules/kms/jwk/assertSupported.ts b/packages/core/src/modules/kms/jwk/assertSupported.ts index 1810e4ccbf..801de2390f 100644 --- a/packages/core/src/modules/kms/jwk/assertSupported.ts +++ b/packages/core/src/modules/kms/jwk/assertSupported.ts @@ -1,11 +1,11 @@ import { KeyManagementAlgorithmNotSupportedError } from '../error/KeyManagementAlgorithmNotSupportedError' -import { +import type { KmsDecryptDataDecryption, KmsEncryptDataEncryption, KmsKeyAgreementDecryptOptions, KmsKeyAgreementEncryptOptions, } from '../options' -import { +import type { KnownJwaContentEncryptionAlgorithm, KnownJwaKeyAgreementAlgorithm, KnownJwaKeyEncryptionAlgorithm, diff --git a/packages/core/src/modules/kms/jwk/equals.ts b/packages/core/src/modules/kms/jwk/equals.ts index 95d4be3eda..b170f6c7d0 100644 --- a/packages/core/src/modules/kms/jwk/equals.ts +++ b/packages/core/src/modules/kms/jwk/equals.ts @@ -1,6 +1,6 @@ import { KeyManagementError } from '../error/KeyManagementError' import { getJwkHumanDescription } from './humanDescription' -import { KmsJwkPrivateAsymmetric, KmsJwkPublicAsymmetric } from './knownJwk' +import type { KmsJwkPrivateAsymmetric, KmsJwkPublicAsymmetric } from './knownJwk' /** * Checks if two JWK public keys have matching key types diff --git a/packages/core/src/modules/kms/jwk/index.ts b/packages/core/src/modules/kms/jwk/index.ts index 24b57d26cb..cf6e80015f 100644 --- a/packages/core/src/modules/kms/jwk/index.ts +++ b/packages/core/src/modules/kms/jwk/index.ts @@ -47,7 +47,7 @@ export { rawEcSignatureToDer, } from './kty' -export { Jwk, JwkCommon } from './jwk' +export type { Jwk, JwkCommon } from './jwk' export { keyAllowsSign, keyAllowsVerify, diff --git a/packages/core/src/modules/kms/jwk/jwa.ts b/packages/core/src/modules/kms/jwk/jwa.ts index 4fcb1c1782..97869d6f0a 100644 --- a/packages/core/src/modules/kms/jwk/jwa.ts +++ b/packages/core/src/modules/kms/jwk/jwa.ts @@ -1,4 +1,4 @@ -import * as z from '../../../utils/zod' +import { z } from 'zod' function recordToUnion(record: Record) { return Object.values(record) as [ diff --git a/packages/core/src/modules/kms/jwk/jwk.ts b/packages/core/src/modules/kms/jwk/jwk.ts index 8eb2e44005..71a474de5b 100644 --- a/packages/core/src/modules/kms/jwk/jwk.ts +++ b/packages/core/src/modules/kms/jwk/jwk.ts @@ -1,4 +1,4 @@ -import * as z from '../../../utils/zod' +import { z } from 'zod' import { zJwkKeyOps, zJwkUse } from './keyOps' diff --git a/packages/core/src/modules/kms/jwk/jwkThumbprint.ts b/packages/core/src/modules/kms/jwk/jwkThumbprint.ts index 01137a2a51..d157f88d51 100644 --- a/packages/core/src/modules/kms/jwk/jwkThumbprint.ts +++ b/packages/core/src/modules/kms/jwk/jwkThumbprint.ts @@ -1,7 +1,7 @@ -import { HashName, Hasher } from '../../../crypto/hashes/Hasher' +import { type HashName, Hasher } from '../../../crypto/hashes/Hasher' import { TypedArrayEncoder } from '../../../utils' -import { parseWithErrorHandling } from '../../../utils/zod' -import { KmsJwkPublic, zKmsJwkPublic } from './knownJwk' +import { zParseWithErrorHandling } from '../../../utils/zod' +import { type KmsJwkPublic, zKmsJwkPublic } from './knownJwk' export const zJwkThumbprintComponents = zKmsJwkPublic.transform((data) => { if (data.kty === 'EC') { @@ -36,7 +36,7 @@ export interface CalculateJwkThumbprintOptions { } export function calculateJwkThumbprint(options: CalculateJwkThumbprintOptions): Uint8Array { - const jwkThumbprintComponents = parseWithErrorHandling( + const jwkThumbprintComponents = zParseWithErrorHandling( zJwkThumbprintComponents, options.jwk, `Provided jwk does not match a supported jwk structure. Either the 'kty' is not supported, or required values are missing.` diff --git a/packages/core/src/modules/kms/jwk/keyOps.ts b/packages/core/src/modules/kms/jwk/keyOps.ts index 41ec8b3d71..ed936683f1 100644 --- a/packages/core/src/modules/kms/jwk/keyOps.ts +++ b/packages/core/src/modules/kms/jwk/keyOps.ts @@ -1,8 +1,9 @@ import type { KmsJwkPrivate, KmsJwkPublic } from './knownJwk' -import * as z from '../../../utils/zod' +import { z } from 'zod' import { KeyManagementError } from '../error/KeyManagementError' +import { zUniqueArray } from '../../../utils/zod' import { getJwkHumanDescription } from './humanDescription' export const zKnownJwkUse = z.union([z.literal('sig').describe('signature'), z.literal('enc').describe('encryption')]) @@ -23,7 +24,7 @@ export const zKnownJwkKeyOps = z.union([ ]) export type KnownJwkKeyOps = z.output -export const zJwkKeyOps = z.uniqueArray(z.union([zKnownJwkKeyOps, z.string()])) +export const zJwkKeyOps = zUniqueArray(z.union([zKnownJwkKeyOps, z.string()])) export type JwkKeyOps = z.output export function keyAllowsDerive(key: KmsJwkPublic | KmsJwkPrivate): boolean { diff --git a/packages/core/src/modules/kms/jwk/knownJwk.ts b/packages/core/src/modules/kms/jwk/knownJwk.ts index a523791ba0..a2e1276269 100644 --- a/packages/core/src/modules/kms/jwk/knownJwk.ts +++ b/packages/core/src/modules/kms/jwk/knownJwk.ts @@ -1,6 +1,6 @@ -import * as z from '../../../utils/zod' +import { z } from 'zod' import { KeyManagementError } from '../error/KeyManagementError' -import { +import type { KmsCreateKeyType, KmsCreateKeyTypeEc, KmsCreateKeyTypeOct, @@ -8,30 +8,31 @@ import { KmsCreateKeyTypeRsa, } from '../options' +import { zParseWithErrorHandling } from '../../../utils/zod' import { - KmsJwkPrivateEc, - KmsJwkPublicEc, + type KmsJwkPrivateEc, + type KmsJwkPublicEc, zKmsJwkPrivateEc, zKmsJwkPrivateToPublicEc, zKmsJwkPublicEc, } from './kty/ec/ecJwk' import { - KmsJwkPrivateOct, - KmsJwkPublicOct, + type KmsJwkPrivateOct, + type KmsJwkPublicOct, zKmsJwkPrivateOct, zKmsJwkPrivateToPublicOct, zKmsJwkPublicOct, } from './kty/oct/octJwk' import { - KmsJwkPrivateOkp, - KmsJwkPublicOkp, + type KmsJwkPrivateOkp, + type KmsJwkPublicOkp, zKmsJwkPrivateOkp, zKmsJwkPrivateToPublicOkp, zKmsJwkPublicOkp, } from './kty/okp/okpJwk' import { - KmsJwkPrivateRsa, - KmsJwkPublicRsa, + type KmsJwkPrivateRsa, + type KmsJwkPublicRsa, zKmsJwkPrivateRsa, zKmsJwkPrivateToPublicRsa, zKmsJwkPublicRsa, @@ -107,7 +108,7 @@ export type KmsJwkPrivateAsymmetric = z.output export function publicJwkFromPrivateJwk(privateJwk: KmsJwkPrivate | KmsJwkPublic): KmsJwkPublic { // This will remove any private properties - return z.parseWithErrorHandling(zKmsJwkPrivateToPublic, privateJwk) + return zParseWithErrorHandling(zKmsJwkPrivateToPublic, privateJwk) } export type KmsJwkPrivateFromKmsJwkPublic = Type extends KmsCreateKeyTypeRsa diff --git a/packages/core/src/modules/kms/jwk/kty/PublicJwk.ts b/packages/core/src/modules/kms/jwk/kty/PublicJwk.ts index 3f4c510741..28d249a273 100644 --- a/packages/core/src/modules/kms/jwk/kty/PublicJwk.ts +++ b/packages/core/src/modules/kms/jwk/kty/PublicJwk.ts @@ -1,5 +1,5 @@ -import { KnownJwaKeyAgreementAlgorithm, KnownJwaSignatureAlgorithm } from '../jwa' -import { KmsJwkPublicAsymmetric } from '../knownJwk' +import type { KnownJwaKeyAgreementAlgorithm, KnownJwaSignatureAlgorithm } from '../jwa' +import type { KmsJwkPublicAsymmetric } from '../knownJwk' export interface PublicJwkType { readonly jwk: Jwk diff --git a/packages/core/src/modules/kms/jwk/kty/ec/P256PublicJwk.ts b/packages/core/src/modules/kms/jwk/kty/ec/P256PublicJwk.ts index 6afdf4b2a2..c79465fb97 100644 --- a/packages/core/src/modules/kms/jwk/kty/ec/P256PublicJwk.ts +++ b/packages/core/src/modules/kms/jwk/kty/ec/P256PublicJwk.ts @@ -1,6 +1,6 @@ -import { KnownJwaKeyAgreementAlgorithms, KnownJwaSignatureAlgorithm, KnownJwaSignatureAlgorithms } from '../../jwa' -import { PublicJwkType } from '../PublicJwk' -import { KmsJwkPublicEc } from './ecJwk' +import { KnownJwaKeyAgreementAlgorithms, type KnownJwaSignatureAlgorithm, KnownJwaSignatureAlgorithms } from '../../jwa' +import type { PublicJwkType } from '../PublicJwk' +import type { KmsJwkPublicEc } from './ecJwk' import { ecPublicJwkToPublicKey, ecPublicKeyToPublicJwk } from './ecPublicKey' type Jwk = KmsJwkPublicEc & { crv: 'P-256' } diff --git a/packages/core/src/modules/kms/jwk/kty/ec/P384PublicJwk.ts b/packages/core/src/modules/kms/jwk/kty/ec/P384PublicJwk.ts index 9f1dff2578..51104053f4 100644 --- a/packages/core/src/modules/kms/jwk/kty/ec/P384PublicJwk.ts +++ b/packages/core/src/modules/kms/jwk/kty/ec/P384PublicJwk.ts @@ -1,6 +1,6 @@ -import { KnownJwaKeyAgreementAlgorithms, KnownJwaSignatureAlgorithm, KnownJwaSignatureAlgorithms } from '../../jwa' -import { PublicJwkType } from '../PublicJwk' -import { KmsJwkPublicEc } from './ecJwk' +import { KnownJwaKeyAgreementAlgorithms, type KnownJwaSignatureAlgorithm, KnownJwaSignatureAlgorithms } from '../../jwa' +import type { PublicJwkType } from '../PublicJwk' +import type { KmsJwkPublicEc } from './ecJwk' import { ecPublicJwkToPublicKey, ecPublicKeyToPublicJwk } from './ecPublicKey' type Jwk = KmsJwkPublicEc & { crv: 'P-384' } diff --git a/packages/core/src/modules/kms/jwk/kty/ec/P521PublicJwk.ts b/packages/core/src/modules/kms/jwk/kty/ec/P521PublicJwk.ts index 38a5751176..85d9b7c079 100644 --- a/packages/core/src/modules/kms/jwk/kty/ec/P521PublicJwk.ts +++ b/packages/core/src/modules/kms/jwk/kty/ec/P521PublicJwk.ts @@ -1,6 +1,6 @@ -import { KnownJwaKeyAgreementAlgorithms, KnownJwaSignatureAlgorithm, KnownJwaSignatureAlgorithms } from '../../jwa' -import { PublicJwkType } from '../PublicJwk' -import { KmsJwkPublicEc } from './ecJwk' +import { KnownJwaKeyAgreementAlgorithms, type KnownJwaSignatureAlgorithm, KnownJwaSignatureAlgorithms } from '../../jwa' +import type { PublicJwkType } from '../PublicJwk' +import type { KmsJwkPublicEc } from './ecJwk' import { ecPublicJwkToPublicKey, ecPublicKeyToPublicJwk } from './ecPublicKey' type Jwk = KmsJwkPublicEc & { crv: 'P-521' } diff --git a/packages/core/src/modules/kms/jwk/kty/ec/Secp256k1PublicJwk.ts b/packages/core/src/modules/kms/jwk/kty/ec/Secp256k1PublicJwk.ts index bb2324a65c..a777ad3582 100644 --- a/packages/core/src/modules/kms/jwk/kty/ec/Secp256k1PublicJwk.ts +++ b/packages/core/src/modules/kms/jwk/kty/ec/Secp256k1PublicJwk.ts @@ -1,6 +1,6 @@ -import { KnownJwaKeyAgreementAlgorithms, KnownJwaSignatureAlgorithm, KnownJwaSignatureAlgorithms } from '../../jwa' -import { PublicJwkType } from '../PublicJwk' -import { KmsJwkPublicEc } from './ecJwk' +import { KnownJwaKeyAgreementAlgorithms, type KnownJwaSignatureAlgorithm, KnownJwaSignatureAlgorithms } from '../../jwa' +import type { PublicJwkType } from '../PublicJwk' +import type { KmsJwkPublicEc } from './ecJwk' import { ecPublicJwkToPublicKey, ecPublicKeyToPublicJwk } from './ecPublicKey' type Jwk = KmsJwkPublicEc & { crv: 'secp256k1' } diff --git a/packages/core/src/modules/kms/jwk/kty/ec/ecJwk.ts b/packages/core/src/modules/kms/jwk/kty/ec/ecJwk.ts index 6057789a50..9920bd0522 100644 --- a/packages/core/src/modules/kms/jwk/kty/ec/ecJwk.ts +++ b/packages/core/src/modules/kms/jwk/kty/ec/ecJwk.ts @@ -1,4 +1,5 @@ -import * as z from '../../../../../utils/zod' +import { z } from 'zod' +import { zBase64Url, zOptionalToUndefined } from '../../../../../utils/zod' import { vJwkCommon } from '../../jwk' export const zKmsJwkPublicEc = z.object({ @@ -7,8 +8,8 @@ export const zKmsJwkPublicEc = z.object({ crv: z.enum(['P-256', 'P-384', 'P-521', 'secp256k1']), // Public - x: z.base64Url, // Public key x-coordinate - y: z.base64Url, // Public key y-coordinate + x: zBase64Url, // Public key x-coordinate + y: zBase64Url, // Public key y-coordinate // Private d: z.optional(z.undefined()), @@ -17,13 +18,13 @@ export type KmsJwkPublicEc = z.output export const zKmsJwkPrivateToPublicEc = z.object({ ...zKmsJwkPublicEc.shape, - d: z.optionalToUndefined(z.base64Url), + d: zOptionalToUndefined(zBase64Url), }) export const zKmsJwkPrivateEc = z.object({ ...zKmsJwkPublicEc.shape, // Private - d: z.base64Url, + d: zBase64Url, }) export type KmsJwkPrivateEc = z.output diff --git a/packages/core/src/modules/kms/jwk/kty/ec/ecPublicKey.ts b/packages/core/src/modules/kms/jwk/kty/ec/ecPublicKey.ts index 6d85c5ecf3..ff1565694c 100644 --- a/packages/core/src/modules/kms/jwk/kty/ec/ecPublicKey.ts +++ b/packages/core/src/modules/kms/jwk/kty/ec/ecPublicKey.ts @@ -10,7 +10,7 @@ import { } from 'ec-compression' import { TypedArrayEncoder } from '../../../../../utils' import { KeyManagementError } from '../../../error/KeyManagementError' -import { KmsJwkPublicEc } from './ecJwk' +import type { KmsJwkPublicEc } from './ecJwk' // CurveParams for ec-compression lib export const ecCrvToCurveParams: Record = { diff --git a/packages/core/src/modules/kms/jwk/kty/ec/ecSignature.ts b/packages/core/src/modules/kms/jwk/kty/ec/ecSignature.ts index d92922c289..ba7f355962 100644 --- a/packages/core/src/modules/kms/jwk/kty/ec/ecSignature.ts +++ b/packages/core/src/modules/kms/jwk/kty/ec/ecSignature.ts @@ -1,7 +1,7 @@ import { ECDSASigValue } from '@peculiar/asn1-ecc' import { AsnConvert } from '@peculiar/asn1-schema' import { KeyManagementError } from '../../../error/KeyManagementError' -import { KmsJwkPublicEc } from './ecJwk' +import type { KmsJwkPublicEc } from './ecJwk' import { ecCrvToCurveParams } from './ecPublicKey' /** diff --git a/packages/core/src/modules/kms/jwk/kty/oct/octJwk.ts b/packages/core/src/modules/kms/jwk/kty/oct/octJwk.ts index a92988e563..78788689ff 100644 --- a/packages/core/src/modules/kms/jwk/kty/oct/octJwk.ts +++ b/packages/core/src/modules/kms/jwk/kty/oct/octJwk.ts @@ -1,4 +1,5 @@ -import * as z from '../../../../../utils/zod' +import { z } from 'zod' +import { zBase64Url, zOptionalToUndefined } from '../../../../../utils/zod' import { vJwkCommon } from '../../jwk' export const zKmsJwkPublicOct = z.object({ @@ -13,13 +14,13 @@ export type KmsJwkPublicOct = z.output export const zKmsJwkPrivateToPublicOct = z.object({ ...zKmsJwkPublicOct.shape, - k: z.optionalToUndefined(z.base64Url), // Key + k: zOptionalToUndefined(zBase64Url), // Key }) export const zKmsJwkPrivateOct = z.object({ ...zKmsJwkPublicOct.shape, // Private - k: z.base64Url, // Key + k: zBase64Url, // Key }) export type KmsJwkPrivateOct = z.output diff --git a/packages/core/src/modules/kms/jwk/kty/okp/Ed25519PublicJwk.ts b/packages/core/src/modules/kms/jwk/kty/okp/Ed25519PublicJwk.ts index e03dbf3644..5ba9d290aa 100644 --- a/packages/core/src/modules/kms/jwk/kty/okp/Ed25519PublicJwk.ts +++ b/packages/core/src/modules/kms/jwk/kty/okp/Ed25519PublicJwk.ts @@ -1,8 +1,12 @@ import { convertPublicKeyToX25519 } from '@stablelib/ed25519' -import { KnownJwaKeyAgreementAlgorithm, KnownJwaSignatureAlgorithm, KnownJwaSignatureAlgorithms } from '../../jwa' -import { PublicJwkType } from '../PublicJwk' +import { + type KnownJwaKeyAgreementAlgorithm, + type KnownJwaSignatureAlgorithm, + KnownJwaSignatureAlgorithms, +} from '../../jwa' +import type { PublicJwkType } from '../PublicJwk' import { X25519PublicJwk } from './X25519PublicJwk' -import { KmsJwkPublicOkp } from './okpJwk' +import type { KmsJwkPublicOkp } from './okpJwk' import { okpPublicJwkToPublicKey, okpPublicKeyToPublicJwk } from './okpPublicKey' type Jwk = KmsJwkPublicOkp & { crv: 'Ed25519' } diff --git a/packages/core/src/modules/kms/jwk/kty/okp/X25519PublicJwk.ts b/packages/core/src/modules/kms/jwk/kty/okp/X25519PublicJwk.ts index 4952dad56c..a10264f308 100644 --- a/packages/core/src/modules/kms/jwk/kty/okp/X25519PublicJwk.ts +++ b/packages/core/src/modules/kms/jwk/kty/okp/X25519PublicJwk.ts @@ -1,6 +1,6 @@ -import { KnownJwaKeyAgreementAlgorithms, KnownJwaSignatureAlgorithm } from '../../jwa' -import { PublicJwkType } from '../PublicJwk' -import { KmsJwkPublicOkp } from './okpJwk' +import { KnownJwaKeyAgreementAlgorithms, type KnownJwaSignatureAlgorithm } from '../../jwa' +import type { PublicJwkType } from '../PublicJwk' +import type { KmsJwkPublicOkp } from './okpJwk' import { okpPublicJwkToPublicKey, okpPublicKeyToPublicJwk } from './okpPublicKey' type Jwk = KmsJwkPublicOkp & { crv: 'X25519' } diff --git a/packages/core/src/modules/kms/jwk/kty/okp/okpJwk.ts b/packages/core/src/modules/kms/jwk/kty/okp/okpJwk.ts index ba2fd8aab5..084050ece0 100644 --- a/packages/core/src/modules/kms/jwk/kty/okp/okpJwk.ts +++ b/packages/core/src/modules/kms/jwk/kty/okp/okpJwk.ts @@ -1,4 +1,5 @@ -import * as z from '../../../../../utils/zod' +import { z } from 'zod' +import { zBase64Url, zOptionalToUndefined } from '../../../../../utils/zod' import { vJwkCommon } from '../../jwk' // TODO: we should probably create a separate Jwk type for each crv, so we @@ -9,22 +10,22 @@ export const zKmsJwkPublicOkp = z.object({ crv: z.enum(['X25519', 'Ed25519']), // Public - x: z.base64Url, + x: zBase64Url, // Private - d: z.optional(z.base64Url), + d: z.optional(zBase64Url), }) export type KmsJwkPublicOkp = z.output export const zKmsJwkPrivateToPublicOkp = z.object({ ...zKmsJwkPublicOkp.shape, - d: z.optionalToUndefined(z.base64Url), + d: zOptionalToUndefined(zBase64Url), }) export const zKmsJwkPrivateOkp = z.object({ ...zKmsJwkPublicOkp.shape, // Private - d: z.base64Url, + d: zBase64Url, }) export type KmsJwkPrivateOkp = z.output diff --git a/packages/core/src/modules/kms/jwk/kty/okp/okpPublicKey.ts b/packages/core/src/modules/kms/jwk/kty/okp/okpPublicKey.ts index 0dc27dd562..d3f884f159 100644 --- a/packages/core/src/modules/kms/jwk/kty/okp/okpPublicKey.ts +++ b/packages/core/src/modules/kms/jwk/kty/okp/okpPublicKey.ts @@ -1,5 +1,5 @@ import { TypedArrayEncoder } from '../../../../../utils' -import { KmsJwkPublicOkp } from './okpJwk' +import type { KmsJwkPublicOkp } from './okpJwk' export function okpPublicJwkToPublicKey(publicJwk: KmsJwkPublicOkp): Uint8Array { const publicKey = Uint8Array.from(TypedArrayEncoder.fromBase64(publicJwk.x)) diff --git a/packages/core/src/modules/kms/jwk/kty/rsa/RsaPublicJwk.ts b/packages/core/src/modules/kms/jwk/kty/rsa/RsaPublicJwk.ts index 7870b91d32..516b1de4a7 100644 --- a/packages/core/src/modules/kms/jwk/kty/rsa/RsaPublicJwk.ts +++ b/packages/core/src/modules/kms/jwk/kty/rsa/RsaPublicJwk.ts @@ -1,8 +1,8 @@ import { TypedArrayEncoder } from '../../../../../utils' import { KeyManagementError } from '../../../error/KeyManagementError' -import { KnownJwaKeyAgreementAlgorithm, KnownJwaSignatureAlgorithm } from '../../jwa' -import { PublicJwkType } from '../PublicJwk' -import { KmsJwkPublicRsa } from './rsaJwk' +import type { KnownJwaKeyAgreementAlgorithm, KnownJwaSignatureAlgorithm } from '../../jwa' +import type { PublicJwkType } from '../PublicJwk' +import type { KmsJwkPublicRsa } from './rsaJwk' import { rsaPublicJwkToPublicKey, rsaPublicKeyToPublicJwk } from './rsaPublicKey' export class RsaPublicJwk implements PublicJwkType { diff --git a/packages/core/src/modules/kms/jwk/kty/rsa/rsaJwk.ts b/packages/core/src/modules/kms/jwk/kty/rsa/rsaJwk.ts index b462f61773..793f884682 100644 --- a/packages/core/src/modules/kms/jwk/kty/rsa/rsaJwk.ts +++ b/packages/core/src/modules/kms/jwk/kty/rsa/rsaJwk.ts @@ -1,12 +1,13 @@ -import * as z from '../../../../../utils/zod' +import { z } from 'zod' +import { zBase64Url, zOptionalToUndefined } from '../../../../../utils/zod' import { vJwkCommon } from '../../jwk' const zKmsJwkPrivateRsaOth = z.array( z .object({ - d: z.optional(z.base64Url), - r: z.optional(z.base64Url), - t: z.optional(z.base64Url), + d: z.optional(zBase64Url), + r: z.optional(zBase64Url), + t: z.optional(zBase64Url), }) .passthrough() ) @@ -16,8 +17,8 @@ export const zKmsJwkPublicRsa = z.object({ kty: z.literal('RSA'), // Public - n: z.base64Url, // Modulus - e: z.base64Url, // Public exponent + n: zBase64Url, // Modulus + e: zBase64Url, // Public exponent // Private d: z.optional(z.undefined()), // Private exponent @@ -33,25 +34,25 @@ export type KmsJwkPublicRsa = z.output export const zKmsJwkPrivateToPublicRsa = z.object({ ...zKmsJwkPublicRsa.shape, - d: z.optionalToUndefined(z.base64Url), // Private exponent - p: z.optionalToUndefined(z.base64Url), // First prime factor - q: z.optionalToUndefined(z.base64Url), // Second prime factor - dp: z.optionalToUndefined(z.base64Url), // First factor CRT exponent - dq: z.optionalToUndefined(z.base64Url), // Second factor CRT exponent - qi: z.optionalToUndefined(z.base64Url), // First CRT coefficient - oth: z.optionalToUndefined(zKmsJwkPrivateRsaOth), + d: zOptionalToUndefined(zBase64Url), // Private exponent + p: zOptionalToUndefined(zBase64Url), // First prime factor + q: zOptionalToUndefined(zBase64Url), // Second prime factor + dp: zOptionalToUndefined(zBase64Url), // First factor CRT exponent + dq: zOptionalToUndefined(zBase64Url), // Second factor CRT exponent + qi: zOptionalToUndefined(zBase64Url), // First CRT coefficient + oth: zOptionalToUndefined(zKmsJwkPrivateRsaOth), }) export const zKmsJwkPrivateRsa = z.object({ ...zKmsJwkPublicRsa.shape, // Private - d: z.base64Url, // Private exponent - p: z.base64Url, // First prime factor - q: z.base64Url, // Second prime factor - dp: z.base64Url, // First factor CRT exponent - dq: z.base64Url, // Second factor CRT exponent - qi: z.base64Url, // First CRT coefficient + d: zBase64Url, // Private exponent + p: zBase64Url, // First prime factor + q: zBase64Url, // Second prime factor + dp: zBase64Url, // First factor CRT exponent + dq: zBase64Url, // Second factor CRT exponent + qi: zBase64Url, // First CRT coefficient oth: z.optional(zKmsJwkPrivateRsaOth), }) export type KmsJwkPrivateRsa = z.output diff --git a/packages/core/src/modules/kms/jwk/kty/rsa/rsaPublicKey.ts b/packages/core/src/modules/kms/jwk/kty/rsa/rsaPublicKey.ts index b232f32dab..fb06357d72 100644 --- a/packages/core/src/modules/kms/jwk/kty/rsa/rsaPublicKey.ts +++ b/packages/core/src/modules/kms/jwk/kty/rsa/rsaPublicKey.ts @@ -1,5 +1,5 @@ import { TypedArrayEncoder } from '../../../../../utils' -import { KmsJwkPublicRsa } from './rsaJwk' +import type { KmsJwkPublicRsa } from './rsaJwk' export function rsaPublicJwkToPublicKey(publicJwk: KmsJwkPublicRsa) { const modulus = Uint8Array.from(TypedArrayEncoder.fromBase64(publicJwk.n)) diff --git a/packages/core/src/modules/kms/options/KmsCreateKeyOptions.ts b/packages/core/src/modules/kms/options/KmsCreateKeyOptions.ts index 1093e59b30..7f0e6c6d5a 100644 --- a/packages/core/src/modules/kms/options/KmsCreateKeyOptions.ts +++ b/packages/core/src/modules/kms/options/KmsCreateKeyOptions.ts @@ -1,7 +1,7 @@ import type { KmsJwkPublicFromCreateType } from '../jwk/knownJwk' -import * as z from '../../../utils/zod' -import { KnownJwaSignatureAlgorithm } from '../jwk' +import { z } from 'zod' +import type { KnownJwaSignatureAlgorithm } from '../jwk' import { zKnownJwaSignatureAlgorithm } from '../jwk/jwa' import { zKmsJwkPublicEc } from '../jwk/kty/ec/ecJwk' import { zKmsJwkPublicOct } from '../jwk/kty/oct/octJwk' diff --git a/packages/core/src/modules/kms/options/KmsDecryptOptions.ts b/packages/core/src/modules/kms/options/KmsDecryptOptions.ts index 26d01fe0b9..c8aaad85e1 100644 --- a/packages/core/src/modules/kms/options/KmsDecryptOptions.ts +++ b/packages/core/src/modules/kms/options/KmsDecryptOptions.ts @@ -1,4 +1,4 @@ -import * as z from '../../../utils/zod' +import { z } from 'zod' import { KnownJwaContentEncryptionAlgorithms } from '../jwk/jwa' import { zKmsJwkPrivateOct } from '../jwk/kty/oct/octJwk' import { zKmsKeyAgreementDecryptOptions } from './KmsKeyAgreementDecryptOptions' diff --git a/packages/core/src/modules/kms/options/KmsDeleteKeyOptions.ts b/packages/core/src/modules/kms/options/KmsDeleteKeyOptions.ts index fe645ae68b..36436fab45 100644 --- a/packages/core/src/modules/kms/options/KmsDeleteKeyOptions.ts +++ b/packages/core/src/modules/kms/options/KmsDeleteKeyOptions.ts @@ -1,4 +1,4 @@ -import * as z from '../../../utils/zod' +import { z } from 'zod' import { zKmsKeyId } from './common' export const zKmsDeleteKeyOptions = z.object({ diff --git a/packages/core/src/modules/kms/options/KmsEncryptOptions.ts b/packages/core/src/modules/kms/options/KmsEncryptOptions.ts index e695a3fd23..b09d8f1c07 100644 --- a/packages/core/src/modules/kms/options/KmsEncryptOptions.ts +++ b/packages/core/src/modules/kms/options/KmsEncryptOptions.ts @@ -1,4 +1,4 @@ -import * as z from '../../../utils/zod' +import { z } from 'zod' import { KnownJwaContentEncryptionAlgorithms } from '../jwk/jwa' import { zKmsJwkPrivateOct } from '../jwk/kty/oct/octJwk' import { zKmsKeyAgreementEncryptOptions } from './KmsKeyAgreementEncryptOptions' diff --git a/packages/core/src/modules/kms/options/KmsGetPublicKeyOptions.ts b/packages/core/src/modules/kms/options/KmsGetPublicKeyOptions.ts index 0813d410db..94f18d25a4 100644 --- a/packages/core/src/modules/kms/options/KmsGetPublicKeyOptions.ts +++ b/packages/core/src/modules/kms/options/KmsGetPublicKeyOptions.ts @@ -1,4 +1,4 @@ -import * as z from '../../../utils/zod' +import { z } from 'zod' import { zKmsKeyId } from './common' export const zKmsGetPublicKeyOptions = z.object({ diff --git a/packages/core/src/modules/kms/options/KmsImportKeyOptions.ts b/packages/core/src/modules/kms/options/KmsImportKeyOptions.ts index 137f5dc7b4..468cf075f9 100644 --- a/packages/core/src/modules/kms/options/KmsImportKeyOptions.ts +++ b/packages/core/src/modules/kms/options/KmsImportKeyOptions.ts @@ -1,5 +1,5 @@ -import * as z from '../../../utils/zod' -import { KmsJwkPrivate, KmsJwkPublicFromKmsJwkPrivate, zKmsJwkPrivate } from '../jwk/knownJwk' +import { z } from 'zod' +import { type KmsJwkPrivate, type KmsJwkPublicFromKmsJwkPrivate, zKmsJwkPrivate } from '../jwk/knownJwk' export const zKmsImportKeyOptions = z.object({ /** diff --git a/packages/core/src/modules/kms/options/KmsKeyAgreementDecryptOptions.ts b/packages/core/src/modules/kms/options/KmsKeyAgreementDecryptOptions.ts index ffe32a6bad..0159ba2bd1 100644 --- a/packages/core/src/modules/kms/options/KmsKeyAgreementDecryptOptions.ts +++ b/packages/core/src/modules/kms/options/KmsKeyAgreementDecryptOptions.ts @@ -1,4 +1,4 @@ -import * as z from '../../../utils/zod' +import { z } from 'zod' import { zKmsJwkPublicOkp } from '../jwk/kty/okp/okpJwk' import { zKmsEncryptedKey } from './KmsEncryptOptions' import { zKmsJwkPublicEcdh, zKmsKeyAgreementEcdhEs } from './KmsKeyAgreementEncryptOptions' diff --git a/packages/core/src/modules/kms/options/KmsKeyAgreementEncryptOptions.ts b/packages/core/src/modules/kms/options/KmsKeyAgreementEncryptOptions.ts index 67dcd9c2e0..a003cabf3a 100644 --- a/packages/core/src/modules/kms/options/KmsKeyAgreementEncryptOptions.ts +++ b/packages/core/src/modules/kms/options/KmsKeyAgreementEncryptOptions.ts @@ -1,4 +1,4 @@ -import * as z from '../../../utils/zod' +import { z } from 'zod' import { zKmsJwkPublicEc } from '../jwk/kty/ec/ecJwk' import { zKmsJwkPublicOkp } from '../jwk/kty/okp/okpJwk' import { zKmsKeyId } from './common' diff --git a/packages/core/src/modules/kms/options/KmsOperation.ts b/packages/core/src/modules/kms/options/KmsOperation.ts index a506eeebfa..c59a258983 100644 --- a/packages/core/src/modules/kms/options/KmsOperation.ts +++ b/packages/core/src/modules/kms/options/KmsOperation.ts @@ -1,10 +1,10 @@ import { KeyManagementError } from '../error/KeyManagementError' -import { KmsJwkPrivate, KnownJwaSignatureAlgorithm, getJwkHumanDescription } from '../jwk' -import { KmsCreateKeyType } from './KmsCreateKeyOptions' -import { KmsDecryptDataDecryption } from './KmsDecryptOptions' -import { KmsEncryptDataEncryption } from './KmsEncryptOptions' -import { KmsKeyAgreementDecryptOptions } from './KmsKeyAgreementDecryptOptions' -import { KmsKeyAgreementEncryptOptions } from './KmsKeyAgreementEncryptOptions' +import { type KmsJwkPrivate, type KnownJwaSignatureAlgorithm, getJwkHumanDescription } from '../jwk' +import type { KmsCreateKeyType } from './KmsCreateKeyOptions' +import type { KmsDecryptDataDecryption } from './KmsDecryptOptions' +import type { KmsEncryptDataEncryption } from './KmsEncryptOptions' +import type { KmsKeyAgreementDecryptOptions } from './KmsKeyAgreementDecryptOptions' +import type { KmsKeyAgreementEncryptOptions } from './KmsKeyAgreementEncryptOptions' export type KmsOperationCreateKey = { operation: 'createKey' diff --git a/packages/core/src/modules/kms/options/KmsRandomBytesOptions.ts b/packages/core/src/modules/kms/options/KmsRandomBytesOptions.ts index 025440ccb9..28fa9e3563 100644 --- a/packages/core/src/modules/kms/options/KmsRandomBytesOptions.ts +++ b/packages/core/src/modules/kms/options/KmsRandomBytesOptions.ts @@ -1,4 +1,4 @@ -import * as z from '../../../utils/zod' +import { z } from 'zod' export const zKmsRandomBytesOptions = z.object({ /** diff --git a/packages/core/src/modules/kms/options/KmsSignOptions.ts b/packages/core/src/modules/kms/options/KmsSignOptions.ts index 23e58d4cde..9719424f96 100644 --- a/packages/core/src/modules/kms/options/KmsSignOptions.ts +++ b/packages/core/src/modules/kms/options/KmsSignOptions.ts @@ -1,4 +1,4 @@ -import * as z from '../../../utils/zod' +import { z } from 'zod' import { zKnownJwaSignatureAlgorithm } from '../jwk/jwa' import { zKmsKeyId } from './common' diff --git a/packages/core/src/modules/kms/options/KmsVerifyOptions.ts b/packages/core/src/modules/kms/options/KmsVerifyOptions.ts index 21921ccc82..9a5b84d310 100644 --- a/packages/core/src/modules/kms/options/KmsVerifyOptions.ts +++ b/packages/core/src/modules/kms/options/KmsVerifyOptions.ts @@ -1,6 +1,6 @@ import type { KmsJwkPublic } from '../jwk/knownJwk' -import * as z from '../../../utils/zod' +import { z } from 'zod' import { zKnownJwaSignatureAlgorithm } from '../jwk/jwa' import { zKmsJwkPublicAsymmetric } from '../jwk/knownJwk' import { zKmsKeyId } from './common' diff --git a/packages/core/src/modules/kms/options/backend.ts b/packages/core/src/modules/kms/options/backend.ts index 7fcf7d96be..07c0403d01 100644 --- a/packages/core/src/modules/kms/options/backend.ts +++ b/packages/core/src/modules/kms/options/backend.ts @@ -1,6 +1,7 @@ -import * as z from '../../../utils/zod' +import { z } from 'zod' +import type { zBaseSchema } from '../../../utils/zod' -export const zWithBackend = (schema: Schema) => +export const zWithBackend = (schema: Schema) => schema.and(z.object({ backend: z.optional(z.string()) })) export type WithBackend = T & { diff --git a/packages/core/src/modules/kms/options/common.ts b/packages/core/src/modules/kms/options/common.ts index 244f20c1e4..3ef9d3f1bd 100644 --- a/packages/core/src/modules/kms/options/common.ts +++ b/packages/core/src/modules/kms/options/common.ts @@ -1,3 +1,3 @@ -import { z } from '../../../utils/zod' +import { z } from 'zod' export const zKmsKeyId = z.string().describe('A reference to a key in the KMS') diff --git a/packages/core/src/modules/kms/options/index.ts b/packages/core/src/modules/kms/options/index.ts index aa124484fb..1dd91fc957 100644 --- a/packages/core/src/modules/kms/options/index.ts +++ b/packages/core/src/modules/kms/options/index.ts @@ -25,7 +25,7 @@ export type { KmsEncryptDataEncryptionX20c, KmsEncryptedKey, } from './KmsEncryptOptions' -export { +export type { KmsDecryptDataDecryption, KmsDecryptDataDecryptionAesCbc, KmsDecryptDataDecryptionAesGcm, @@ -33,26 +33,26 @@ export { KmsDecryptOptions, KmsDecryptReturn, } from './KmsDecryptOptions' -export { +export type { KmsKeyAgreementEcdhEs, KmsKeyAgreementEncryptEcdhEsKw, KmsKeyAgreementEncryptEcdhHsalsa20, KmsKeyAgreementEncryptOptions, KmsJwkPublicEcdh, } from './KmsKeyAgreementEncryptOptions' -export { +export type { KmsKeyAgreementDecryptOptions, KmsKeyAgreementDecryptEcdhHsalsa20, KmsKeyAgreementDecryptEcdhEsKw, } from './KmsKeyAgreementDecryptOptions' export { - KmsOperation, - KmsOperationCreateKey, - KmsOperationDecrypt, - KmsOperationDeleteKey, - KmsOperationEncrypt, - KmsOperationImportKey, - KmsOperationSign, - KmsOperationVerify, + type KmsOperation, + type KmsOperationCreateKey, + type KmsOperationDecrypt, + type KmsOperationDeleteKey, + type KmsOperationEncrypt, + type KmsOperationImportKey, + type KmsOperationSign, + type KmsOperationVerify, getKmsOperationHumanDescription, } from './KmsOperation' diff --git a/packages/core/src/modules/mdoc/Mdoc.ts b/packages/core/src/modules/mdoc/Mdoc.ts index 318001cab1..da80c38f6c 100644 --- a/packages/core/src/modules/mdoc/Mdoc.ts +++ b/packages/core/src/modules/mdoc/Mdoc.ts @@ -14,7 +14,7 @@ import { import { ClaimFormat } from '../vc/index' import { X509Certificate, X509ModuleConfig } from '../x509' -import { KnownJwaSignatureAlgorithm, PublicJwk } from '../kms' +import { type KnownJwaSignatureAlgorithm, PublicJwk } from '../kms' import { isKnownJwaSignatureAlgorithm } from '../kms/jwk/jwa' import { TypedArrayEncoder } from './../../utils' import { getMdocContext } from './MdocContext' diff --git a/packages/core/src/modules/mdoc/MdocContext.ts b/packages/core/src/modules/mdoc/MdocContext.ts index 41b2a38286..0d168dad35 100644 --- a/packages/core/src/modules/mdoc/MdocContext.ts +++ b/packages/core/src/modules/mdoc/MdocContext.ts @@ -7,7 +7,7 @@ import { sha256 } from '@noble/hashes/sha2' import { CredoWebCrypto, Hasher } from '../../crypto' import { Buffer, TypedArrayEncoder } from '../../utils' -import { KeyManagementApi, KmsJwkPublicAsymmetric, KnownJwaSignatureAlgorithm, PublicJwk } from '../kms' +import { KeyManagementApi, type KmsJwkPublicAsymmetric, type KnownJwaSignatureAlgorithm, PublicJwk } from '../kms' import { X509Certificate, X509Service } from '../x509' export const getMdocContext = (agentContext: AgentContext): MdocContext => { diff --git a/packages/core/src/modules/mdoc/__tests__/mdocServer.test.ts b/packages/core/src/modules/mdoc/__tests__/mdocServer.test.ts index ca5b41cfed..8c68089276 100644 --- a/packages/core/src/modules/mdoc/__tests__/mdocServer.test.ts +++ b/packages/core/src/modules/mdoc/__tests__/mdocServer.test.ts @@ -180,7 +180,7 @@ describe('mdoc service test', () => { ) const deviceResponse = MdocDeviceResponse.fromBase64Url(deviceResponseBase64Url) - expect( + await expect( deviceResponse.verify(agentContext, { sessionTranscriptOptions: { type: 'openId4VpDraft18', diff --git a/packages/core/src/modules/mdoc/index.ts b/packages/core/src/modules/mdoc/index.ts index da856176f0..1e0e763b8b 100644 --- a/packages/core/src/modules/mdoc/index.ts +++ b/packages/core/src/modules/mdoc/index.ts @@ -8,4 +8,4 @@ export * from './MdocOptions' export * from './repository' export * from './Mdoc' export * from './MdocDeviceResponse' -export { isMdocSupportedSignatureAlgorithm, MdocSupportedSignatureAlgorithm } from './mdocSupportedAlgs' +export { isMdocSupportedSignatureAlgorithm, type MdocSupportedSignatureAlgorithm } from './mdocSupportedAlgs' diff --git a/packages/core/src/modules/mdoc/mdocSupportedAlgs.ts b/packages/core/src/modules/mdoc/mdocSupportedAlgs.ts index a71b990ee6..8f4d2d57c0 100644 --- a/packages/core/src/modules/mdoc/mdocSupportedAlgs.ts +++ b/packages/core/src/modules/mdoc/mdocSupportedAlgs.ts @@ -1,4 +1,4 @@ -import { KnownJwaSignatureAlgorithm, KnownJwaSignatureAlgorithms } from '../kms' +import { type KnownJwaSignatureAlgorithm, KnownJwaSignatureAlgorithms } from '../kms' export type MdocSupportedSignatureAlgorithm = (typeof mdocSupporteSignatureAlgorithms)[number] export const mdocSupporteSignatureAlgorithms = [ diff --git a/packages/core/src/modules/mdoc/repository/MdocRecord.ts b/packages/core/src/modules/mdoc/repository/MdocRecord.ts index 17a32b2ce4..95a08990d2 100644 --- a/packages/core/src/modules/mdoc/repository/MdocRecord.ts +++ b/packages/core/src/modules/mdoc/repository/MdocRecord.ts @@ -4,7 +4,7 @@ import type { Constructable } from '../../../utils/mixins' import { BaseRecord } from '../../../storage/BaseRecord' import { JsonTransformer } from '../../../utils' import { uuid } from '../../../utils/uuid' -import { KnownJwaSignatureAlgorithm } from '../../kms' +import type { KnownJwaSignatureAlgorithm } from '../../kms' import { Mdoc } from '../Mdoc' export type DefaultMdocRecordTags = { diff --git a/packages/core/src/modules/mdoc/repository/MdocRepository.ts b/packages/core/src/modules/mdoc/repository/MdocRepository.ts index 885ece6db0..de17c4c3cc 100644 --- a/packages/core/src/modules/mdoc/repository/MdocRepository.ts +++ b/packages/core/src/modules/mdoc/repository/MdocRepository.ts @@ -2,7 +2,7 @@ import { EventEmitter } from '../../../agent/EventEmitter' import { InjectionSymbols } from '../../../constants' import { inject, injectable } from '../../../plugins' import { Repository } from '../../../storage/Repository' -import { StorageService } from '../../../storage/StorageService' +import type { StorageService } from '../../../storage/StorageService' import { MdocRecord } from './MdocRecord' diff --git a/packages/core/src/modules/sd-jwt-vc/SdJwtVcService.ts b/packages/core/src/modules/sd-jwt-vc/SdJwtVcService.ts index b550158ec8..097aff8f16 100644 --- a/packages/core/src/modules/sd-jwt-vc/SdJwtVcService.ts +++ b/packages/core/src/modules/sd-jwt-vc/SdJwtVcService.ts @@ -19,20 +19,20 @@ import { AgentContext } from '../../agent' import { Hasher, JwtPayload } from '../../crypto' import { CredoError } from '../../error' import { X509Service } from '../../modules/x509/X509Service' -import { JsonObject } from '../../types' +import type { JsonObject } from '../../types' import { TypedArrayEncoder, nowInSeconds } from '../../utils' import { getDomainFromUrl } from '../../utils/domain' import { fetchWithTimeout } from '../../utils/fetch' import { getPublicJwkFromVerificationMethod, parseDid } from '../dids' import { ClaimFormat } from '../vc/index' -import { EncodedX509Certificate, X509Certificate, X509ModuleConfig } from '../x509' +import { type EncodedX509Certificate, X509Certificate, X509ModuleConfig } from '../x509' import { KeyManagementApi, PublicJwk } from '../kms' import { SdJwtVcError } from './SdJwtVcError' import { decodeSdJwtVc, sdJwtVcHasher } from './decodeSdJwtVc' import { buildDisclosureFrameForPayload } from './disclosureFrame' import { SdJwtVcRecord, SdJwtVcRepository } from './repository' -import { SdJwtVcTypeMetadata } from './typeMetadata' +import type { SdJwtVcTypeMetadata } from './typeMetadata' import { extractKeyFromHolderBinding, getSdJwtSigner, diff --git a/packages/core/src/modules/sd-jwt-vc/__tests__/SdJwtVcModule.test.ts b/packages/core/src/modules/sd-jwt-vc/__tests__/SdJwtVcModule.test.ts index 7ceb1a2873..8563512516 100644 --- a/packages/core/src/modules/sd-jwt-vc/__tests__/SdJwtVcModule.test.ts +++ b/packages/core/src/modules/sd-jwt-vc/__tests__/SdJwtVcModule.test.ts @@ -5,10 +5,10 @@ import { SdJwtVcService } from '../SdJwtVcService' import { SdJwtVcRepository } from '../repository' const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), - resolve: jest.fn().mockReturnValue({ logger: { warn: jest.fn() } }), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), + resolve: vi.fn().mockReturnValue({ logger: { warn: vi.fn() } }), } as unknown as DependencyManager describe('SdJwtVcModule', () => { diff --git a/packages/core/src/modules/sd-jwt-vc/__tests__/SdJwtVcService.test.ts b/packages/core/src/modules/sd-jwt-vc/__tests__/SdJwtVcService.test.ts index 343df7b166..ceab3c1de0 100644 --- a/packages/core/src/modules/sd-jwt-vc/__tests__/SdJwtVcService.test.ts +++ b/packages/core/src/modules/sd-jwt-vc/__tests__/SdJwtVcService.test.ts @@ -1,4 +1,5 @@ -import type { AgentContext } from '@credo-ts/core' +import type { AgentContext, Constructable } from '@credo-ts/core' +import { vi } from 'vitest' import type { SdJwtVcHeader } from '../SdJwtVcOptions' import { randomUUID } from 'crypto' @@ -60,11 +61,11 @@ const agent = new Agent( ) ) -agent.kms.randomBytes = jest.fn(() => TypedArrayEncoder.fromString('salt')) -Date.prototype.getTime = jest.fn(() => 1698151532000) +agent.kms.randomBytes = vi.fn(() => TypedArrayEncoder.fromString('salt')) +Date.prototype.getTime = vi.fn(() => 1698151532000) -jest.mock('../repository/SdJwtVcRepository') -const SdJwtVcRepositoryMock = SdJwtVcRepository as jest.Mock +vi.mock('../repository/SdJwtVcRepository') +const SdJwtVcRepositoryMock = SdJwtVcRepository as unknown as Constructable const simpleX509Certificate = X509Certificate.fromEncodedCertificate(simpleX509.trustedCertficate) @@ -957,7 +958,7 @@ describe('SdJwtVcService', () => { const sdJwtVcService = agent.dependencyManager.resolve(SdJwtVcService) // Mock call to status list - const fetchSpy = jest.spyOn(fetchUtils, 'fetchWithTimeout') + const fetchSpy = vi.spyOn(fetchUtils, 'fetchWithTimeout') // First time not revoked fetchSpy.mockResolvedValueOnce({ @@ -999,7 +1000,7 @@ describe('SdJwtVcService', () => { const sdJwtVcService = agent.dependencyManager.resolve(SdJwtVcService) // Mock call to status list - const fetchSpy = jest.spyOn(fetchUtils, 'fetchWithTimeout') + const fetchSpy = vi.spyOn(fetchUtils, 'fetchWithTimeout') // First time not revoked fetchSpy.mockResolvedValueOnce({ @@ -1042,7 +1043,7 @@ describe('SdJwtVcService', () => { const sdJwtVcService = agent.dependencyManager.resolve(SdJwtVcService) // Mock call to status list - const fetchSpy = jest.spyOn(fetchUtils, 'fetchWithTimeout') + const fetchSpy = vi.spyOn(fetchUtils, 'fetchWithTimeout') // First time not revoked fetchSpy.mockResolvedValueOnce({ diff --git a/packages/core/src/modules/sd-jwt-vc/repository/SdJwtVcRecord.ts b/packages/core/src/modules/sd-jwt-vc/repository/SdJwtVcRecord.ts index b247180873..9c849a0722 100644 --- a/packages/core/src/modules/sd-jwt-vc/repository/SdJwtVcRecord.ts +++ b/packages/core/src/modules/sd-jwt-vc/repository/SdJwtVcRecord.ts @@ -9,7 +9,7 @@ import { Hasher } from '../../../crypto' import { BaseRecord } from '../../../storage/BaseRecord' import { JsonTransformer } from '../../../utils' import { uuid } from '../../../utils/uuid' -import { KnownJwaSignatureAlgorithm } from '../../kms' +import type { KnownJwaSignatureAlgorithm } from '../../kms' import { decodeSdJwtVc } from '../decodeSdJwtVc' export type DefaultSdJwtVcRecordTags = { diff --git a/packages/core/src/modules/sd-jwt-vc/repository/SdJwtVcRepository.ts b/packages/core/src/modules/sd-jwt-vc/repository/SdJwtVcRepository.ts index 0aa8bbce3d..9c5ef72edc 100644 --- a/packages/core/src/modules/sd-jwt-vc/repository/SdJwtVcRepository.ts +++ b/packages/core/src/modules/sd-jwt-vc/repository/SdJwtVcRepository.ts @@ -2,7 +2,7 @@ import { EventEmitter } from '../../../agent/EventEmitter' import { InjectionSymbols } from '../../../constants' import { inject, injectable } from '../../../plugins' import { Repository } from '../../../storage/Repository' -import { StorageService } from '../../../storage/StorageService' +import type { StorageService } from '../../../storage/StorageService' import { SdJwtVcRecord } from './SdJwtVcRecord' diff --git a/packages/core/src/modules/sd-jwt-vc/utils.ts b/packages/core/src/modules/sd-jwt-vc/utils.ts index 289ce8d849..6484e989c3 100644 --- a/packages/core/src/modules/sd-jwt-vc/utils.ts +++ b/packages/core/src/modules/sd-jwt-vc/utils.ts @@ -5,7 +5,7 @@ import { AgentContext } from '../../agent' import { CredoError } from '../../error' import { TypedArrayEncoder } from '../../utils' import { DidResolverService, DidsApi, getPublicJwkFromVerificationMethod, parseDid } from '../dids' -import { Jwk, KeyManagementApi, PublicJwk } from '../kms' +import { type Jwk, KeyManagementApi, PublicJwk } from '../kms' export async function resolveSigningPublicJwkFromDidUrl(agentContext: AgentContext, didUrl: string) { const dids = agentContext.dependencyManager.resolve(DidsApi) diff --git a/packages/core/src/modules/vc/W3cCredentialServiceOptions.ts b/packages/core/src/modules/vc/W3cCredentialServiceOptions.ts index ee2bbe815c..0d0261d830 100644 --- a/packages/core/src/modules/vc/W3cCredentialServiceOptions.ts +++ b/packages/core/src/modules/vc/W3cCredentialServiceOptions.ts @@ -1,5 +1,5 @@ import type { SingleOrArray } from '../../types' -import { KnownJwaSignatureAlgorithm } from '../kms' +import type { KnownJwaSignatureAlgorithm } from '../kms' import type { ProofPurpose, W3cJsonLdVerifiablePresentation } from './data-integrity' import type { W3cJsonLdVerifiableCredential } from './data-integrity/models/W3cJsonLdVerifiableCredential' import type { W3cJwtVerifiableCredential } from './jwt-vc/W3cJwtVerifiableCredential' diff --git a/packages/core/src/modules/vc/W3cCredentialsModule.ts b/packages/core/src/modules/vc/W3cCredentialsModule.ts index b92e0c8a0d..b09b83f194 100644 --- a/packages/core/src/modules/vc/W3cCredentialsModule.ts +++ b/packages/core/src/modules/vc/W3cCredentialsModule.ts @@ -9,7 +9,7 @@ import { Ed25519PublicJwk } from '../kms' import { W3cCredentialService } from './W3cCredentialService' import { W3cCredentialsApi } from './W3cCredentialsApi' import { W3cCredentialsModuleConfig } from './W3cCredentialsModuleConfig' -import { SignatureSuiteRegistry, SignatureSuiteToken, SuiteInfo } from './data-integrity/SignatureSuiteRegistry' +import { SignatureSuiteRegistry, SignatureSuiteToken, type SuiteInfo } from './data-integrity/SignatureSuiteRegistry' import { W3cJsonLdCredentialService } from './data-integrity/W3cJsonLdCredentialService' import { Ed25519Signature2018, Ed25519Signature2020 } from './data-integrity/signature-suites' import { W3cJwtCredentialService } from './jwt-vc' diff --git a/packages/core/src/modules/vc/W3cV2CredentialService.ts b/packages/core/src/modules/vc/W3cV2CredentialService.ts index c39331f26c..a153135e78 100644 --- a/packages/core/src/modules/vc/W3cV2CredentialService.ts +++ b/packages/core/src/modules/vc/W3cV2CredentialService.ts @@ -17,7 +17,7 @@ import { W3cV2JwtVerifiableCredential, W3cV2JwtVerifiablePresentation } from './ import { W3cV2JwtCredentialService } from './jwt-vc/W3cV2JwtCredentialService' import type { W3cV2VerifiableCredential, W3cV2VerifyCredentialResult, W3cV2VerifyPresentationResult } from './models' import { ClaimFormat } from './models' -import { W3cV2VerifiablePresentation } from './models/presentation/W3cV2VerifiablePresentation' +import type { W3cV2VerifiablePresentation } from './models/presentation/W3cV2VerifiablePresentation' import { W3cV2CredentialRecord, W3cV2CredentialRepository } from './repository' import { W3cV2SdJwtCredentialService, diff --git a/packages/core/src/modules/vc/W3cV2CredentialServiceOptions.ts b/packages/core/src/modules/vc/W3cV2CredentialServiceOptions.ts index c2aa47a92f..39f3b82fc7 100644 --- a/packages/core/src/modules/vc/W3cV2CredentialServiceOptions.ts +++ b/packages/core/src/modules/vc/W3cV2CredentialServiceOptions.ts @@ -1,6 +1,6 @@ -import { HashName } from '../../crypto' -import { KnownJwaSignatureAlgorithm } from '../kms' -import { IDisclosureFrame, IPresentationFrame, SdJwtVcHolderBinding } from '../sd-jwt-vc' +import type { HashName } from '../../crypto' +import type { KnownJwaSignatureAlgorithm } from '../kms' +import type { IDisclosureFrame, IPresentationFrame, SdJwtVcHolderBinding } from '../sd-jwt-vc' import { W3cV2JwtVerifiableCredential, W3cV2JwtVerifiablePresentation } from './jwt-vc' import type { ClaimFormat, W3cV2VerifiableCredential } from './models' import type { W3cV2Credential, W3cV2Presentation } from './models' diff --git a/packages/core/src/modules/vc/__tests__/W3CredentialsModule.test.ts b/packages/core/src/modules/vc/__tests__/W3CredentialsModule.test.ts index cc42946f00..8b05ee1fdf 100644 --- a/packages/core/src/modules/vc/__tests__/W3CredentialsModule.test.ts +++ b/packages/core/src/modules/vc/__tests__/W3CredentialsModule.test.ts @@ -1,16 +1,17 @@ +import type { MockedClassConstructor } from '../../../../../../tests/types' import { DependencyManager } from '../../../plugins/DependencyManager' import { Ed25519PublicJwk } from '../../kms' import { W3cCredentialService } from '../W3cCredentialService' import { W3cCredentialsModule } from '../W3cCredentialsModule' import { W3cCredentialsModuleConfig } from '../W3cCredentialsModuleConfig' -import { SignatureSuiteRegistry, SignatureSuiteToken, SuiteInfo } from '../data-integrity/SignatureSuiteRegistry' +import { SignatureSuiteRegistry, SignatureSuiteToken, type SuiteInfo } from '../data-integrity/SignatureSuiteRegistry' import { W3cJsonLdCredentialService } from '../data-integrity/W3cJsonLdCredentialService' import { Ed25519Signature2018, Ed25519Signature2020 } from '../data-integrity/signature-suites' import { W3cJwtCredentialService } from '../jwt-vc' import { W3cCredentialRepository } from '../repository' -jest.mock('../../../plugins/DependencyManager') -const DependencyManagerMock = DependencyManager as jest.Mock +vi.mock('../../../plugins/DependencyManager') +const DependencyManagerMock = DependencyManager as MockedClassConstructor const dependencyManager = new DependencyManagerMock() diff --git a/packages/core/src/modules/vc/__tests__/W3cCredentialService.test.ts b/packages/core/src/modules/vc/__tests__/W3cCredentialService.test.ts index aec0387541..e6100393a2 100644 --- a/packages/core/src/modules/vc/__tests__/W3cCredentialService.test.ts +++ b/packages/core/src/modules/vc/__tests__/W3cCredentialService.test.ts @@ -1,5 +1,7 @@ import type { AgentContext } from '../../../agent' +import type { MockedFunction } from 'vitest' +import type { MockedClassConstructor } from '../../../../../../tests/types' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../tests' import { JwsService } from '../../../crypto' import { JsonTransformer, asArray } from '../../../utils' @@ -15,8 +17,8 @@ import { W3cJwtCredentialService } from '../jwt-vc' import { W3cPresentation } from '../models' import { W3cCredentialRecord, W3cCredentialRepository } from '../repository' -jest.mock('../repository/W3cCredentialRepository') -const W3cCredentialsRepositoryMock = W3cCredentialRepository as jest.Mock +vi.mock('../repository/W3cCredentialRepository') +const W3cCredentialsRepositoryMock = W3cCredentialRepository as MockedClassConstructor const agentConfig = getAgentConfig('W3cCredentialServiceTest') @@ -94,7 +96,7 @@ describe('W3cCredentialsService', () => { describe('Credential Storage', () => { let w3cCredentialRecord: W3cCredentialRecord - let w3cCredentialRepositoryDeleteMock: jest.MockedFunction<(typeof w3cCredentialsRepository)['deleteById']> + let w3cCredentialRepositoryDeleteMock: MockedFunction<(typeof w3cCredentialsRepository)['deleteById']> beforeEach(async () => { const credential = JsonTransformer.fromJSON( diff --git a/packages/core/src/modules/vc/__tests__/W3cCredentialsApi.test.ts b/packages/core/src/modules/vc/__tests__/W3cCredentialsApi.test.ts index 787dbf398e..fe250cf99f 100644 --- a/packages/core/src/modules/vc/__tests__/W3cCredentialsApi.test.ts +++ b/packages/core/src/modules/vc/__tests__/W3cCredentialsApi.test.ts @@ -44,12 +44,12 @@ describe('W3cCredentialsApi', () => { // for tenants we do it on the tenants api, for the main context // we can do it on the agent instance? So `agent.delete()` maybe? await agent.dependencyManager.registeredModules.inMemory.onDeleteContext?.(agent.context) - agent.shutdown() + await agent.shutdown() }) it('Should successfully store a credential', async () => { - const repoSpy = jest.spyOn(w3cCredentialRepository, 'save') - const serviceSpy = jest.spyOn(w3cCredentialService, 'storeCredential') + const repoSpy = vi.spyOn(w3cCredentialRepository, 'save') + const serviceSpy = vi.spyOn(w3cCredentialService, 'storeCredential') await agent.w3cCredentials.storeCredential({ credential: testCredential, @@ -60,8 +60,8 @@ describe('W3cCredentialsApi', () => { }) it('Should successfully retrieve a credential by id', async () => { - const repoSpy = jest.spyOn(w3cCredentialRepository, 'getById') - const serviceSpy = jest.spyOn(w3cCredentialService, 'getCredentialRecordById') + const repoSpy = vi.spyOn(w3cCredentialRepository, 'getById') + const serviceSpy = vi.spyOn(w3cCredentialService, 'getCredentialRecordById') const storedCredential = await agent.w3cCredentials.storeCredential({ credential: testCredential, @@ -71,15 +71,13 @@ describe('W3cCredentialsApi', () => { expect(storedCredential.id).toEqual(retrievedCredential.id) expect(repoSpy).toHaveBeenCalledTimes(1) - - // biome-ignore lint/suspicious/noExplicitAny: - expect(repoSpy).toHaveBeenCalledWith((agent as any).agentContext, storedCredential.id) + expect(repoSpy).toHaveBeenCalledWith(agent.context, storedCredential.id) expect(serviceSpy).toHaveBeenCalledTimes(1) }) it('Should successfully remove a credential by id', async () => { - const repoSpy = jest.spyOn(w3cCredentialRepository, 'deleteById') - const serviceSpy = jest.spyOn(w3cCredentialService, 'removeCredentialRecord') + const repoSpy = vi.spyOn(w3cCredentialRepository, 'deleteById') + const serviceSpy = vi.spyOn(w3cCredentialService, 'removeCredentialRecord') const storedCredential = await agent.w3cCredentials.storeCredential({ credential: testCredential, diff --git a/packages/core/src/modules/vc/__tests__/W3cCredentialsModuleConfig.test.ts b/packages/core/src/modules/vc/__tests__/W3cCredentialsModuleConfig.test.ts index bda3448a7a..13b850835f 100644 --- a/packages/core/src/modules/vc/__tests__/W3cCredentialsModuleConfig.test.ts +++ b/packages/core/src/modules/vc/__tests__/W3cCredentialsModuleConfig.test.ts @@ -9,7 +9,7 @@ describe('W3cCredentialsModuleConfig', () => { }) test('sets values', () => { - const documentLoader = jest.fn() + const documentLoader = vi.fn() const config = new W3cCredentialsModuleConfig({ documentLoader, }) diff --git a/packages/core/src/modules/vc/data-integrity/SignatureSuiteRegistry.ts b/packages/core/src/modules/vc/data-integrity/SignatureSuiteRegistry.ts index 9664922dc5..71bf734776 100644 --- a/packages/core/src/modules/vc/data-integrity/SignatureSuiteRegistry.ts +++ b/packages/core/src/modules/vc/data-integrity/SignatureSuiteRegistry.ts @@ -1,6 +1,6 @@ import { CredoError } from '../../../error' import { injectAll, injectable } from '../../../plugins' -import { PublicJwk, SupportedPublicJwkClass } from '../../kms/jwk/PublicJwk' +import { PublicJwk, type SupportedPublicJwkClass } from '../../kms/jwk/PublicJwk' import { suites } from './libraries/jsonld-signatures' diff --git a/packages/core/src/modules/vc/data-integrity/W3cJsonLdCredentialService.ts b/packages/core/src/modules/vc/data-integrity/W3cJsonLdCredentialService.ts index 7770a9b1cd..18487a6803 100644 --- a/packages/core/src/modules/vc/data-integrity/W3cJsonLdCredentialService.ts +++ b/packages/core/src/modules/vc/data-integrity/W3cJsonLdCredentialService.ts @@ -18,7 +18,7 @@ import { getPublicJwkFromVerificationMethod } from '../../dids/domain/key-type' import { W3cCredentialsModuleConfig } from '../W3cCredentialsModuleConfig' import { w3cDate } from '../util' -import { SingleOrArray } from '../../../types' +import type { SingleOrArray } from '../../../types' import { PublicJwk } from '../../kms' import { SignatureSuiteRegistry } from './SignatureSuiteRegistry' import { assertOnlyW3cJsonLdVerifiableCredentials } from './jsonldUtil' diff --git a/packages/core/src/modules/vc/data-integrity/__tests__/W3cJsonLdCredentialService.test.ts b/packages/core/src/modules/vc/data-integrity/__tests__/W3cJsonLdCredentialService.test.ts index fbfbfe335c..dd0aa64df9 100644 --- a/packages/core/src/modules/vc/data-integrity/__tests__/W3cJsonLdCredentialService.test.ts +++ b/packages/core/src/modules/vc/data-integrity/__tests__/W3cJsonLdCredentialService.test.ts @@ -6,7 +6,7 @@ import { DidRepository, DidsApi, DidsModuleConfig, - KeyDidCreateOptions, + type KeyDidCreateOptions, VERIFICATION_METHOD_TYPE_ED25519_VERIFICATION_KEY_2018, VERIFICATION_METHOD_TYPE_ED25519_VERIFICATION_KEY_2020, } from '../../../dids' @@ -136,7 +136,7 @@ describe('W3cJsonLdCredentialsService', () => { const credential = JsonTransformer.fromJSON(credentialJson, W3cCredential) - expect(async () => { + await expect(async () => { await w3cJsonLdCredentialService.signCredential(agentContext, { format: ClaimFormat.LdpVc, credential, diff --git a/packages/core/src/modules/vc/data-integrity/index.ts b/packages/core/src/modules/vc/data-integrity/index.ts index 7314cb363b..4133c8aff4 100644 --- a/packages/core/src/modules/vc/data-integrity/index.ts +++ b/packages/core/src/modules/vc/data-integrity/index.ts @@ -1,5 +1,5 @@ export type { DocumentLoader, Proof } from './jsonldUtil' -export { SuiteInfo, SignatureSuiteToken, SignatureSuiteRegistry } from './SignatureSuiteRegistry' +export { type SuiteInfo, SignatureSuiteToken, SignatureSuiteRegistry } from './SignatureSuiteRegistry' export * from './signature-suites' export * from './libraries' export * from './models' diff --git a/packages/core/src/modules/vc/data-integrity/libraries/documentLoader.ts b/packages/core/src/modules/vc/data-integrity/libraries/documentLoader.ts index bde0544e8b..db9dbabd56 100644 --- a/packages/core/src/modules/vc/data-integrity/libraries/documentLoader.ts +++ b/packages/core/src/modules/vc/data-integrity/libraries/documentLoader.ts @@ -59,7 +59,7 @@ export function defaultDocumentLoader(agentContext: AgentContext): DocumentLoade } // fetches the documentLoader from documentLoader.ts or documentLoader.native.ts depending on the platform at bundle time - const platformLoader = getNativeDocumentLoader() + const platformLoader = await getNativeDocumentLoader() const nativeLoader = platformLoader.apply(jsonld, []) return await nativeLoader(url) diff --git a/packages/core/src/modules/vc/data-integrity/libraries/jsonld-signatures.ts b/packages/core/src/modules/vc/data-integrity/libraries/jsonld-signatures.ts index ef7f4a306f..e07e9dd5ee 100644 --- a/packages/core/src/modules/vc/data-integrity/libraries/jsonld-signatures.ts +++ b/packages/core/src/modules/vc/data-integrity/libraries/jsonld-signatures.ts @@ -1,10 +1,7 @@ -import { - constants as JsonLdConstants, - purposes as JsonLdPurposes, - suites as JsonLdSuites, - // No type definitions available for this library - //@ts-ignore -} from '@digitalcredentials/jsonld-signatures' +// No type definitions available for this library +//@ts-ignore +import jsonLdSignatures from '@digitalcredentials/jsonld-signatures' +const { constants: JsonLdConstants, purposes: JsonLdPurposes, suites: JsonLdSuites } = jsonLdSignatures export interface Suites { // biome-ignore lint/suspicious/noExplicitAny: diff --git a/packages/core/src/modules/vc/data-integrity/libraries/nativeDocumentLoader.native.ts b/packages/core/src/modules/vc/data-integrity/libraries/nativeDocumentLoader.native.ts index 56791667c8..59e14a4fe5 100644 --- a/packages/core/src/modules/vc/data-integrity/libraries/nativeDocumentLoader.native.ts +++ b/packages/core/src/modules/vc/data-integrity/libraries/nativeDocumentLoader.native.ts @@ -1,7 +1,12 @@ import type { DocumentLoader } from './jsonld' -export function getNativeDocumentLoader(): () => DocumentLoader { - const loader = require('@digitalcredentials/jsonld/lib/documentLoaders/xhr') +export async function getNativeDocumentLoader(): Promise<() => DocumentLoader> { + // @ts-ignore package doesn't have types + const loader = await import('@digitalcredentials/jsonld/lib/documentLoaders/xhr') - return loader as () => DocumentLoader + if (!loader) throw new Error('Could not load node document loader. Module did not contain a loader function') + if (typeof loader === 'function') return loader + if (typeof loader === 'object' && typeof loader.default === 'function') return loader.default + + throw new Error('Could not load node document loader. Module did not contain a loader function.') } diff --git a/packages/core/src/modules/vc/data-integrity/libraries/nativeDocumentLoader.ts b/packages/core/src/modules/vc/data-integrity/libraries/nativeDocumentLoader.ts index 46c5ede80a..7757eb9514 100644 --- a/packages/core/src/modules/vc/data-integrity/libraries/nativeDocumentLoader.ts +++ b/packages/core/src/modules/vc/data-integrity/libraries/nativeDocumentLoader.ts @@ -1,7 +1,12 @@ import type { DocumentLoader } from './jsonld' -export function getNativeDocumentLoader(): () => DocumentLoader { - const loader = require('@digitalcredentials/jsonld/lib/documentLoaders/node') +export async function getNativeDocumentLoader(): Promise<() => DocumentLoader> { + // @ts-ignore package doesn't have types + const loader = await import('@digitalcredentials/jsonld/lib/documentLoaders/node') - return loader as () => DocumentLoader + if (!loader) throw new Error('Could not load node document loader. Module did not contain a loader function') + if (typeof loader === 'function') return loader + if (typeof loader === 'object' && typeof loader.default === 'function') return loader.default + + throw new Error('Could not load node document loader. Module did not contain a loader function.') } diff --git a/packages/core/src/modules/vc/data-integrity/models/ProofTransformer.ts b/packages/core/src/modules/vc/data-integrity/models/ProofTransformer.ts index 57976234c2..505b67aa90 100644 --- a/packages/core/src/modules/vc/data-integrity/models/ProofTransformer.ts +++ b/packages/core/src/modules/vc/data-integrity/models/ProofTransformer.ts @@ -3,7 +3,7 @@ import type { LinkedDataProofOptions } from './LinkedDataProof' import { Transform, TransformationType, instanceToPlain, plainToInstance } from 'class-transformer' -import { SingleOrArray } from '../../../../types' +import type { SingleOrArray } from '../../../../types' import { DataIntegrityProof } from './DataIntegrityProof' import { LinkedDataProof } from './LinkedDataProof' diff --git a/packages/core/src/modules/vc/data-integrity/models/W3cJsonLdVerifiableCredential.ts b/packages/core/src/modules/vc/data-integrity/models/W3cJsonLdVerifiableCredential.ts index d2bd2b2547..d6b8cf2b71 100644 --- a/packages/core/src/modules/vc/data-integrity/models/W3cJsonLdVerifiableCredential.ts +++ b/packages/core/src/modules/vc/data-integrity/models/W3cJsonLdVerifiableCredential.ts @@ -9,7 +9,7 @@ import { IsInstanceOrArrayOfInstances, JsonTransformer, asArray, mapSingleOrArra import { ClaimFormat } from '../../models/ClaimFormat' import { W3cCredential } from '../../models/credential/W3cCredential' -import { SingleOrArray } from '../../../../types' +import type { SingleOrArray } from '../../../../types' import { DataIntegrityProof } from './DataIntegrityProof' import { LinkedDataProof } from './LinkedDataProof' import { ProofTransformer } from './ProofTransformer' diff --git a/packages/core/src/modules/vc/data-integrity/models/W3cJsonLdVerifiablePresentation.ts b/packages/core/src/modules/vc/data-integrity/models/W3cJsonLdVerifiablePresentation.ts index fd081b1c4e..d5752f0d22 100644 --- a/packages/core/src/modules/vc/data-integrity/models/W3cJsonLdVerifiablePresentation.ts +++ b/packages/core/src/modules/vc/data-integrity/models/W3cJsonLdVerifiablePresentation.ts @@ -6,7 +6,7 @@ import { IsInstanceOrArrayOfInstances, JsonTransformer, asArray } from '../../.. import { ClaimFormat } from '../../models' import { W3cPresentation } from '../../models/presentation/W3cPresentation' -import { SingleOrArray } from '../../../../types' +import type { SingleOrArray } from '../../../../types' import { DataIntegrityProof } from './DataIntegrityProof' import { LinkedDataProof } from './LinkedDataProof' import { ProofTransformer } from './ProofTransformer' diff --git a/packages/core/src/modules/vc/jwt-vc/W3cJwtCredentialService.ts b/packages/core/src/modules/vc/jwt-vc/W3cJwtCredentialService.ts index d629279211..52a4789e94 100644 --- a/packages/core/src/modules/vc/jwt-vc/W3cJwtCredentialService.ts +++ b/packages/core/src/modules/vc/jwt-vc/W3cJwtCredentialService.ts @@ -9,7 +9,7 @@ import type { } from '../W3cCredentialServiceOptions' import type { SingleValidationResult, W3cVerifyCredentialResult, W3cVerifyPresentationResult } from '../models' -import { JwsService } from '../../../crypto' +import { JwsService } from '../../../crypto/JwsService' import { CredoError } from '../../../error' import { injectable } from '../../../plugins' import { MessageValidator, asArray, isDid } from '../../../utils' @@ -20,7 +20,7 @@ import { getPublicJwkFromVerificationMethod, getSupportedVerificationMethodTypesForPublicJwk, } from '../../dids/domain/key-type/keyDidMapping' -import { KnownJwaSignatureAlgorithm, PublicJwk } from '../../kms' +import { type KnownJwaSignatureAlgorithm, PublicJwk } from '../../kms' import { W3cJwtVerifiableCredential } from './W3cJwtVerifiableCredential' import { W3cJwtVerifiablePresentation } from './W3cJwtVerifiablePresentation' import { getJwtPayloadFromCredential } from './credentialTransformer' diff --git a/packages/core/src/modules/vc/jwt-vc/__tests__/W3cV2JwtCredentialService.test.ts b/packages/core/src/modules/vc/jwt-vc/__tests__/W3cV2JwtCredentialService.test.ts index f251e1d293..167f593377 100644 --- a/packages/core/src/modules/vc/jwt-vc/__tests__/W3cV2JwtCredentialService.test.ts +++ b/packages/core/src/modules/vc/jwt-vc/__tests__/W3cV2JwtCredentialService.test.ts @@ -65,8 +65,8 @@ const agentContext = getAgentContext({ const kms = agentContext.dependencyManager.resolve(KeyManagementApi) -kms.randomBytes = jest.fn(() => TypedArrayEncoder.fromString('salt')) -Date.prototype.getTime = jest.fn(() => 1698151532000) +kms.randomBytes = vi.fn(() => TypedArrayEncoder.fromString('salt')) +Date.prototype.getTime = vi.fn(() => 1698151532000) const dids = agentContext.dependencyManager.resolve(DidsApi) const jwsService = new JwsService() diff --git a/packages/core/src/modules/vc/models/W3cV2VerifyResult.ts b/packages/core/src/modules/vc/models/W3cV2VerifyResult.ts index 540e9115f3..372c34fc61 100644 --- a/packages/core/src/modules/vc/models/W3cV2VerifyResult.ts +++ b/packages/core/src/modules/vc/models/W3cV2VerifyResult.ts @@ -1,4 +1,4 @@ -import { SingleValidationResult } from './W3cVerifyResult' +import type { SingleValidationResult } from './W3cVerifyResult' export type W3cV2VerifyPresentationResult = W3cV2VerifyResult export type W3cV2VerifyCredentialResult = W3cV2VerifyResult diff --git a/packages/core/src/modules/vc/models/credential/W3cV2Credential.ts b/packages/core/src/modules/vc/models/credential/W3cV2Credential.ts index 2cac86d4ad..19f98732a6 100644 --- a/packages/core/src/modules/vc/models/credential/W3cV2Credential.ts +++ b/packages/core/src/modules/vc/models/credential/W3cV2Credential.ts @@ -10,15 +10,19 @@ import { } from '../../../../utils/validators' import { CREDENTIALS_CONTEXT_V2_URL } from '../../constants' import { IsCredentialJsonLdContext, IsCredentialType } from '../../validators' -import { W3cV2CredentialSchema, W3cV2CredentialSchemaOptions } from './W3cV2CredentialSchema' -import { W3cV2CredentialStatus, W3cV2CredentialStatusOptions } from './W3cV2CredentialStatus' -import { W3cV2CredentialSubject, W3cV2CredentialSubjectOptions } from './W3cV2CredentialSubject' -import { W3cV2Evidence, W3cV2EvidenceOptions } from './W3cV2Evidence' -import { IsW3cV2Issuer, W3cV2Issuer, W3cV2IssuerOptions, W3cV2IssuerTransformer } from './W3cV2Issuer' -import { W3cV2JsonCredential } from './W3cV2JsonCredential' -import { W3cV2LocalizedValue, W3cV2LocalizedValueOptions, W3cV2LocalizedValueTransformer } from './W3cV2LocalizedValue' -import { W3cV2RefreshService, W3cV2RefreshServiceOptions } from './W3cV2RefreshService' -import { W3cV2TermsOfUse, W3cV2TermsOfUseOptions } from './W3cV2TermsOfUse' +import { W3cV2CredentialSchema, type W3cV2CredentialSchemaOptions } from './W3cV2CredentialSchema' +import { W3cV2CredentialStatus, type W3cV2CredentialStatusOptions } from './W3cV2CredentialStatus' +import { W3cV2CredentialSubject, type W3cV2CredentialSubjectOptions } from './W3cV2CredentialSubject' +import { W3cV2Evidence, type W3cV2EvidenceOptions } from './W3cV2Evidence' +import { IsW3cV2Issuer, W3cV2Issuer, type W3cV2IssuerOptions, W3cV2IssuerTransformer } from './W3cV2Issuer' +import type { W3cV2JsonCredential } from './W3cV2JsonCredential' +import { + W3cV2LocalizedValue, + type W3cV2LocalizedValueOptions, + W3cV2LocalizedValueTransformer, +} from './W3cV2LocalizedValue' +import { W3cV2RefreshService, type W3cV2RefreshServiceOptions } from './W3cV2RefreshService' +import { W3cV2TermsOfUse, type W3cV2TermsOfUseOptions } from './W3cV2TermsOfUse' export interface W3cV2CredentialOptions { context?: Array diff --git a/packages/core/src/modules/vc/models/credential/W3cV2EnvelopedVerifiableCredential.ts b/packages/core/src/modules/vc/models/credential/W3cV2EnvelopedVerifiableCredential.ts index 09e0308168..0fe4eca4cf 100644 --- a/packages/core/src/modules/vc/models/credential/W3cV2EnvelopedVerifiableCredential.ts +++ b/packages/core/src/modules/vc/models/credential/W3cV2EnvelopedVerifiableCredential.ts @@ -1,5 +1,5 @@ import { Exclude, Expose, Transform, TransformationType, instanceToPlain, plainToInstance } from 'class-transformer' -import { IsDataURI, ValidateBy, ValidationOptions, buildMessage, isInstance } from 'class-validator' +import { IsDataURI, ValidateBy, type ValidationOptions, buildMessage, isInstance } from 'class-validator' import { CredoError } from '../../../../error' import type { JsonObject, SingleOrArray } from '../../../../types' import { CREDENTIALS_CONTEXT_V2_URL, ENVELOPED_VERIFIABLE_CREDENTIAL_TYPE } from '../../constants' diff --git a/packages/core/src/modules/vc/models/credential/W3cV2VerifiableCredential.ts b/packages/core/src/modules/vc/models/credential/W3cV2VerifiableCredential.ts index ac05da7479..a44bbcb439 100644 --- a/packages/core/src/modules/vc/models/credential/W3cV2VerifiableCredential.ts +++ b/packages/core/src/modules/vc/models/credential/W3cV2VerifiableCredential.ts @@ -1,9 +1,9 @@ import { Transform, TransformationType } from 'class-transformer' import { ValidationError } from 'class-validator' import { ClassValidationError, CredoError } from '../../../../error' -import { SingleOrArray } from '../../../../types' -import { W3cV2JwtVerifiableCredential, W3cV2JwtVerifiableCredentialOptions } from '../../jwt-vc' -import { W3cV2SdJwtVerifiableCredential, W3cV2SdJwtVerifiableCredentialOptions } from '../../sd-jwt-vc' +import type { SingleOrArray } from '../../../../types' +import { W3cV2JwtVerifiableCredential, type W3cV2JwtVerifiableCredentialOptions } from '../../jwt-vc' +import { W3cV2SdJwtVerifiableCredential, type W3cV2SdJwtVerifiableCredentialOptions } from '../../sd-jwt-vc' import { ClaimFormat } from '../ClaimFormat' const decodeCredential = (v: unknown) => { diff --git a/packages/core/src/modules/vc/models/credential/W3cVerifiableCredential.ts b/packages/core/src/modules/vc/models/credential/W3cVerifiableCredential.ts index 7625384865..742ef5cf33 100644 --- a/packages/core/src/modules/vc/models/credential/W3cVerifiableCredential.ts +++ b/packages/core/src/modules/vc/models/credential/W3cVerifiableCredential.ts @@ -4,7 +4,7 @@ import { Transform, TransformationType } from 'class-transformer' import { ValidationError } from 'class-validator' import { ClassValidationError, CredoError } from '../../../../error' -import { SingleOrArray } from '../../../../types' +import type { SingleOrArray } from '../../../../types' import { JsonTransformer } from '../../../../utils' import { W3cJsonLdVerifiableCredential } from '../../data-integrity/models/W3cJsonLdVerifiableCredential' import { W3cJwtVerifiableCredential } from '../../jwt-vc/W3cJwtVerifiableCredential' diff --git a/packages/core/src/modules/vc/models/presentation/W3cV2EnvelopedVerifiablePresentation.ts b/packages/core/src/modules/vc/models/presentation/W3cV2EnvelopedVerifiablePresentation.ts index dbbd5bc749..008987d748 100644 --- a/packages/core/src/modules/vc/models/presentation/W3cV2EnvelopedVerifiablePresentation.ts +++ b/packages/core/src/modules/vc/models/presentation/W3cV2EnvelopedVerifiablePresentation.ts @@ -1,5 +1,5 @@ import { Exclude, Expose } from 'class-transformer' -import { IsDataURI, ValidateBy, ValidationOptions, buildMessage } from 'class-validator' +import { IsDataURI, ValidateBy, type ValidationOptions, buildMessage } from 'class-validator' import { CredoError } from '../../../../error' import type { JsonObject, SingleOrArray } from '../../../../types' import { diff --git a/packages/core/src/modules/vc/models/presentation/W3cV2JsonPresentation.ts b/packages/core/src/modules/vc/models/presentation/W3cV2JsonPresentation.ts index 63f0718319..7229fbf57e 100644 --- a/packages/core/src/modules/vc/models/presentation/W3cV2JsonPresentation.ts +++ b/packages/core/src/modules/vc/models/presentation/W3cV2JsonPresentation.ts @@ -1,5 +1,5 @@ import type { JsonObject } from '../../../../types' -import { W3cV2JsonCredential } from '../credential/W3cV2JsonCredential' +import type { W3cV2JsonCredential } from '../credential/W3cV2JsonCredential' export interface W3cV2JsonPresentation { '@context': string | Array diff --git a/packages/core/src/modules/vc/models/presentation/W3cV2Presentation.ts b/packages/core/src/modules/vc/models/presentation/W3cV2Presentation.ts index 0793451a8b..a2f79db71c 100644 --- a/packages/core/src/modules/vc/models/presentation/W3cV2Presentation.ts +++ b/packages/core/src/modules/vc/models/presentation/W3cV2Presentation.ts @@ -7,11 +7,11 @@ import { CREDENTIALS_CONTEXT_V2_URL, VERIFIABLE_PRESENTATION_TYPE } from '../../ import { IsCredentialJsonLdContext, IsVerifiablePresentationType } from '../../validators' import { W3cV2EnvelopedVerifiableCredential, - W3cV2EnvelopedVerifiableCredentialOptions, + type W3cV2EnvelopedVerifiableCredentialOptions, W3cV2EnvelopedVerifiableCredentialTransformer, } from '../credential/W3cV2EnvelopedVerifiableCredential' -import { IsW3cV2Holder, W3cV2Holder, W3cV2HolderOptions, W3cV2HolderTransformer } from './W3cV2Holder' -import { W3cV2JsonPresentation } from './W3cV2JsonPresentation' +import { IsW3cV2Holder, W3cV2Holder, type W3cV2HolderOptions, W3cV2HolderTransformer } from './W3cV2Holder' +import type { W3cV2JsonPresentation } from './W3cV2JsonPresentation' export interface W3cV2PresentationOptions { id?: string diff --git a/packages/core/src/modules/vc/models/presentation/W3cV2VerifiablePresentation.ts b/packages/core/src/modules/vc/models/presentation/W3cV2VerifiablePresentation.ts index 46a2f96a46..034923b9b6 100644 --- a/packages/core/src/modules/vc/models/presentation/W3cV2VerifiablePresentation.ts +++ b/packages/core/src/modules/vc/models/presentation/W3cV2VerifiablePresentation.ts @@ -1,5 +1,5 @@ -import { W3cV2JwtVerifiablePresentation, W3cV2JwtVerifiablePresentationOptions } from '../../jwt-vc' -import { W3cV2SdJwtVerifiablePresentation, W3cV2SdJwtVerifiablePresentationOptions } from '../../sd-jwt-vc' +import { W3cV2JwtVerifiablePresentation, type W3cV2JwtVerifiablePresentationOptions } from '../../jwt-vc' +import { W3cV2SdJwtVerifiablePresentation, type W3cV2SdJwtVerifiablePresentationOptions } from '../../sd-jwt-vc' import { ClaimFormat } from '../ClaimFormat' /** diff --git a/packages/core/src/modules/vc/repository/W3cCredentialRecord.ts b/packages/core/src/modules/vc/repository/W3cCredentialRecord.ts index 75fb654e13..0d1a7543d8 100644 --- a/packages/core/src/modules/vc/repository/W3cCredentialRecord.ts +++ b/packages/core/src/modules/vc/repository/W3cCredentialRecord.ts @@ -1,9 +1,9 @@ import type { Constructable } from '../../../utils/mixins' -import { BaseRecord, Tags } from '../../../storage/BaseRecord' +import { BaseRecord, type Tags } from '../../../storage/BaseRecord' import { JsonTransformer } from '../../../utils' import { uuid } from '../../../utils/uuid' -import { ClaimFormat, W3cVerifiableCredential, W3cVerifiableCredentialTransformer } from '../models' +import { ClaimFormat, type W3cVerifiableCredential, W3cVerifiableCredentialTransformer } from '../models' export interface W3cCredentialRecordOptions { id?: string diff --git a/packages/core/src/modules/vc/repository/W3cCredentialRepository.ts b/packages/core/src/modules/vc/repository/W3cCredentialRepository.ts index 6f711e6ed2..2e9f2f48bd 100644 --- a/packages/core/src/modules/vc/repository/W3cCredentialRepository.ts +++ b/packages/core/src/modules/vc/repository/W3cCredentialRepository.ts @@ -2,7 +2,7 @@ import { EventEmitter } from '../../../agent/EventEmitter' import { InjectionSymbols } from '../../../constants' import { inject, injectable } from '../../../plugins' import { Repository } from '../../../storage/Repository' -import { StorageService } from '../../../storage/StorageService' +import type { StorageService } from '../../../storage/StorageService' import { W3cCredentialRecord } from './W3cCredentialRecord' diff --git a/packages/core/src/modules/vc/repository/W3cV2CredentialRecord.ts b/packages/core/src/modules/vc/repository/W3cV2CredentialRecord.ts index 2cb04aed1c..6803bea515 100644 --- a/packages/core/src/modules/vc/repository/W3cV2CredentialRecord.ts +++ b/packages/core/src/modules/vc/repository/W3cV2CredentialRecord.ts @@ -1,8 +1,8 @@ -import { BaseRecord, Tags, TagsBase } from '../../../storage/BaseRecord' +import { BaseRecord, type Tags, type TagsBase } from '../../../storage/BaseRecord' import { JsonTransformer, asArray } from '../../../utils' -import { Constructable } from '../../../utils/mixins' +import type { Constructable } from '../../../utils/mixins' import { uuid } from '../../../utils/uuid' -import { ClaimFormat, W3cV2EnvelopedVerifiableCredential, W3cV2VerifiableCredential } from '../models' +import { ClaimFormat, W3cV2EnvelopedVerifiableCredential, type W3cV2VerifiableCredential } from '../models' import { W3cV2VerifiableCredentialTransformer } from '../models/credential/W3cV2VerifiableCredential' export interface W3cV2CredentialRecordOptions { diff --git a/packages/core/src/modules/vc/repository/W3cV2CredentialRepository.ts b/packages/core/src/modules/vc/repository/W3cV2CredentialRepository.ts index 60fc5f4468..2feb2a8c6b 100644 --- a/packages/core/src/modules/vc/repository/W3cV2CredentialRepository.ts +++ b/packages/core/src/modules/vc/repository/W3cV2CredentialRepository.ts @@ -2,7 +2,7 @@ import { EventEmitter } from '../../../agent/EventEmitter' import { InjectionSymbols } from '../../../constants' import { inject, injectable } from '../../../plugins' import { Repository } from '../../../storage/Repository' -import { StorageService } from '../../../storage/StorageService' +import type { StorageService } from '../../../storage/StorageService' import { W3cV2CredentialRecord } from './W3cV2CredentialRecord' @injectable() diff --git a/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwt.ts b/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwt.ts index c41a24796c..1f9f12e8d5 100644 --- a/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwt.ts +++ b/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwt.ts @@ -1,7 +1,7 @@ import { decodeSdJwtSync, getClaimsSync } from '@sd-jwt/decode' import { Hasher } from '../../../crypto' import { CredoError } from '../../../error' -import { SingleOrArray, isJsonObject } from '../../../types' +import { type SingleOrArray, isJsonObject } from '../../../types' import { ClaimFormat } from '../models' export interface W3cV2SdJwtHeader { diff --git a/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwtCredentialService.ts b/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwtCredentialService.ts index d5bbe9971e..c5d97d1173 100644 --- a/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwtCredentialService.ts +++ b/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwtCredentialService.ts @@ -1,5 +1,5 @@ import { SDJwtInstance } from '@sd-jwt/core' -import { DisclosureFrame, PresentationFrame, SDJWTConfig } from '@sd-jwt/types' +import type { DisclosureFrame, PresentationFrame, SDJWTConfig } from '@sd-jwt/types' import type { AgentContext } from '../../../agent/context' import { JwtPayload } from '../../../crypto' import { CredoError } from '../../../error' diff --git a/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwtVerifiableCredential.ts b/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwtVerifiableCredential.ts index 55649108a0..c58cd61a1c 100644 --- a/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwtVerifiableCredential.ts +++ b/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwtVerifiableCredential.ts @@ -2,7 +2,7 @@ import { CredoError } from '../../../error' import { JsonTransformer, MessageValidator } from '../../../utils' import { ClaimFormat } from '../models/ClaimFormat' import { W3cV2Credential } from '../models/credential/W3cV2Credential' -import { W3cV2SdJwt, decodeSdJwt } from './W3cV2SdJwt' +import { type W3cV2SdJwt, decodeSdJwt } from './W3cV2SdJwt' export interface W3cV2SdJwtVerifiableCredentialOptions { sdJwt: W3cV2SdJwt diff --git a/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwtVerifiablePresentation.ts b/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwtVerifiablePresentation.ts index c4a719850e..7e914e13f9 100644 --- a/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwtVerifiablePresentation.ts +++ b/packages/core/src/modules/vc/sd-jwt-vc/W3cV2SdJwtVerifiablePresentation.ts @@ -2,7 +2,7 @@ import { CredoError } from '../../../error' import { JsonTransformer, MessageValidator } from '../../../utils' import { ClaimFormat } from '../models' import { W3cV2Presentation } from '../models/presentation/W3cV2Presentation' -import { W3cV2SdJwt, decodeSdJwt } from './W3cV2SdJwt' +import { type W3cV2SdJwt, decodeSdJwt } from './W3cV2SdJwt' export interface W3cV2SdJwtVerifiablePresentationOptions { sdJwt: W3cV2SdJwt diff --git a/packages/core/src/modules/vc/sd-jwt-vc/__tests__/W3cV2SdJwtCredentialService.test.ts b/packages/core/src/modules/vc/sd-jwt-vc/__tests__/W3cV2SdJwtCredentialService.test.ts index 77b75f557e..49955efab1 100644 --- a/packages/core/src/modules/vc/sd-jwt-vc/__tests__/W3cV2SdJwtCredentialService.test.ts +++ b/packages/core/src/modules/vc/sd-jwt-vc/__tests__/W3cV2SdJwtCredentialService.test.ts @@ -65,8 +65,8 @@ const kms = agentContext.dependencyManager.resolve(KeyManagementApi) const dids = agentContext.dependencyManager.resolve(DidsApi) const w3cV2JwtCredentialService = new W3cV2SdJwtCredentialService() -kms.randomBytes = jest.fn(() => TypedArrayEncoder.fromString('salt')) -Date.prototype.getTime = jest.fn(() => 1698151532000) +kms.randomBytes = vi.fn(() => TypedArrayEncoder.fromString('salt')) +Date.prototype.getTime = vi.fn(() => 1698151532000) describe('W3cV2SdJwtCredentialService', () => { let issuerDidJwk: DidJwk diff --git a/packages/core/src/modules/vc/v2-jwt-utils.ts b/packages/core/src/modules/vc/v2-jwt-utils.ts index 75286016a3..9a3fc8af65 100644 --- a/packages/core/src/modules/vc/v2-jwt-utils.ts +++ b/packages/core/src/modules/vc/v2-jwt-utils.ts @@ -2,7 +2,7 @@ import { AgentContext } from '../../agent' import { CredoError } from '../../error' import { asArray, isDid } from '../../utils' import { - DidPurpose, + type DidPurpose, DidResolverService, DidsApi, VerificationMethod, @@ -10,7 +10,7 @@ import { parseDid, } from '../dids' import { getSupportedVerificationMethodTypesForPublicJwk } from '../dids/domain/key-type/keyDidMapping' -import { KnownJwaSignatureAlgorithm, PublicJwk } from '../kms' +import { type KnownJwaSignatureAlgorithm, PublicJwk } from '../kms' import { extractKeyFromHolderBinding, parseHolderBindingFromCredential } from '../sd-jwt-vc/utils' import { W3cV2JwtVerifiableCredential, W3cV2JwtVerifiablePresentation } from './jwt-vc' import { W3cV2Presentation } from './models' diff --git a/packages/core/src/modules/x509/X509Api.ts b/packages/core/src/modules/x509/X509Api.ts index 42bb9c49fa..c188bee43b 100644 --- a/packages/core/src/modules/x509/X509Api.ts +++ b/packages/core/src/modules/x509/X509Api.ts @@ -3,7 +3,7 @@ import { injectable } from '../../plugins' import { X509ModuleConfig } from './X509ModuleConfig' import { X509Service } from './X509Service' -import { X509CreateCertificateOptions, X509ValidateCertificateChainOptions } from './X509ServiceOptions' +import type { X509CreateCertificateOptions, X509ValidateCertificateChainOptions } from './X509ServiceOptions' /** * @public diff --git a/packages/core/src/modules/x509/__tests__/X509Service.test.ts b/packages/core/src/modules/x509/__tests__/X509Service.test.ts index 96867cd700..9eda57749c 100644 --- a/packages/core/src/modules/x509/__tests__/X509Service.test.ts +++ b/packages/core/src/modules/x509/__tests__/X509Service.test.ts @@ -7,7 +7,7 @@ import { X509Service } from '../X509Service' import { CredoWebCrypto, Hasher, TypedArrayEncoder, X509ExtendedKeyUsage, X509KeyUsage } from '@credo-ts/core' import { NodeInMemoryKeyManagementStorage, NodeKeyManagementService } from '../../../../../node/src' -import { KeyManagementApi, KeyManagementModuleConfig, KmsJwkPublicEc, P256PublicJwk, PublicJwk } from '../../kms' +import { KeyManagementApi, KeyManagementModuleConfig, type KmsJwkPublicEc, P256PublicJwk, PublicJwk } from '../../kms' /** * @@ -364,8 +364,8 @@ describe('X509Service', () => { const chain = await X509Service.validateCertificateChain(agentContext, { certificateChain }) expect(chain.length).toStrictEqual(1) - expect(chain[0].sanDnsNames).toStrictEqual([]) - expect(chain[0].sanUriNames).toStrictEqual([]) + expect(chain[0].sanDnsNames).toEqual([]) + expect(chain[0].sanUriNames).toEqual([]) }) it('should validate a valid certificate chain', async () => { @@ -466,7 +466,7 @@ describe('X509Service', () => { }) ).toString('base64') - expect( + await expect( async () => await X509Service.validateCertificateChain(agentContext, { certificateChain: [certificate], @@ -487,7 +487,7 @@ describe('X509Service', () => { }) ).toString('base64') - expect( + await expect( async () => await X509Service.validateCertificateChain(agentContext, { certificateChain: [certificate], @@ -496,7 +496,7 @@ describe('X509Service', () => { }) it('should not validate a certificate chain if incorrect signing order', async () => { - expect( + await expect( async () => await X509Service.validateCertificateChain(agentContext, { certificateChain: [certificateChain[1], certificateChain[2], certificateChain[0]], diff --git a/packages/core/src/modules/x509/__tests__/X509ServiceModule.test.ts b/packages/core/src/modules/x509/__tests__/X509ServiceModule.test.ts index 34b19f59f5..a4afd326ad 100644 --- a/packages/core/src/modules/x509/__tests__/X509ServiceModule.test.ts +++ b/packages/core/src/modules/x509/__tests__/X509ServiceModule.test.ts @@ -3,10 +3,10 @@ import type { DependencyManager } from '../../../plugins' import { X509Module, X509ModuleConfig, type X509ModuleConfigOptions, X509Service } from './../index' const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), - resolve: jest.fn().mockReturnValue({ logger: { warn: jest.fn() } }), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), + resolve: vi.fn().mockReturnValue({ logger: { warn: vi.fn() } }), } as unknown as DependencyManager describe('X509ServiceModule', () => { diff --git a/packages/core/src/plugins/DependencyManager.ts b/packages/core/src/plugins/DependencyManager.ts index bf9ffc28cd..8075250e05 100644 --- a/packages/core/src/plugins/DependencyManager.ts +++ b/packages/core/src/plugins/DependencyManager.ts @@ -3,11 +3,11 @@ import type { AgentContext } from '../agent' import type { ModulesMap } from '../agent/AgentModules' import type { Constructor } from '../utils/mixins' -import { InjectionToken, Lifecycle, container as rootContainer } from 'tsyringe' +import { type InjectionToken, Lifecycle, container as rootContainer } from 'tsyringe' import { CredoError } from '../error' -export { InjectionToken } +export type { InjectionToken } export class DependencyManager { public readonly container: DependencyContainer diff --git a/packages/core/src/plugins/__tests__/DependencyManager.test.ts b/packages/core/src/plugins/__tests__/DependencyManager.test.ts index 9711137b9e..73942c44fc 100644 --- a/packages/core/src/plugins/__tests__/DependencyManager.test.ts +++ b/packages/core/src/plugins/__tests__/DependencyManager.test.ts @@ -20,7 +20,7 @@ describe('DependencyManager', () => { }) afterEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() container.reset() }) @@ -28,12 +28,12 @@ describe('DependencyManager', () => { it('calls the register method for all module plugins', () => { @injectable() class Module1 implements Module { - public register = jest.fn() + public register = vi.fn() } @injectable() class Module2 implements Module { - public register = jest.fn() + public register = vi.fn() } const module1 = new Module1() @@ -57,7 +57,7 @@ describe('DependencyManager', () => { it('calls registerSingleton on the container', () => { class Singleton {} - const registerSingletonSpy = jest.spyOn(container, 'registerSingleton') + const registerSingletonSpy = vi.spyOn(container, 'registerSingleton') dependencyManager.registerSingleton(Singleton) expect(registerSingletonSpy).toHaveBeenLastCalledWith(Singleton, undefined) @@ -75,7 +75,7 @@ describe('DependencyManager', () => { const dependencyManager = new DependencyManager(child) child.registerInstance(Instance, instance) - const resolveSpy = jest.spyOn(child, 'resolve') + const resolveSpy = vi.spyOn(child, 'resolve') expect(dependencyManager.resolve(Instance)).toBe(instance) expect(resolveSpy).toHaveBeenCalledWith(Instance) @@ -86,7 +86,7 @@ describe('DependencyManager', () => { it('calls isRegistered on the container', () => { class Singleton {} - const isRegisteredSpy = jest.spyOn(container, 'isRegistered') + const isRegisteredSpy = vi.spyOn(container, 'isRegistered') expect(dependencyManager.isRegistered(Singleton)).toBe(false) @@ -99,7 +99,7 @@ describe('DependencyManager', () => { class Instance {} const instance = new Instance() - const registerInstanceSpy = jest.spyOn(container, 'registerInstance') + const registerInstanceSpy = vi.spyOn(container, 'registerInstance') dependencyManager.registerInstance(Instance, instance) @@ -111,7 +111,7 @@ describe('DependencyManager', () => { it('calls register on the container with Lifecycle.ContainerScoped', () => { class SomeService {} - const registerSpy = jest.spyOn(container, 'register') + const registerSpy = vi.spyOn(container, 'register') dependencyManager.registerContextScoped(SomeService) expect(registerSpy).toHaveBeenCalledWith(SomeService, SomeService, { lifecycle: Lifecycle.ContainerScoped }) @@ -124,7 +124,7 @@ describe('DependencyManager', () => { describe('createChild', () => { it('calls createChildContainer on the container', () => { - const createChildSpy = jest.spyOn(container, 'createChildContainer') + const createChildSpy = vi.spyOn(container, 'createChildContainer') const childDependencyManager = dependencyManager.createChild() expect(createChildSpy).toHaveBeenCalledTimes(1) @@ -133,7 +133,7 @@ describe('DependencyManager', () => { it('inherits the registeredModules from the parent dependency manager', () => { const module = { - register: jest.fn(), + register: vi.fn(), } dependencyManager.registerModules({ diff --git a/packages/core/src/storage/__tests__/Repository.test.ts b/packages/core/src/storage/__tests__/Repository.test.ts index c29ca77efe..7b5112576c 100644 --- a/packages/core/src/storage/__tests__/Repository.test.ts +++ b/packages/core/src/storage/__tests__/Repository.test.ts @@ -12,12 +12,15 @@ import { CredoError, RecordDuplicateError, RecordNotFoundError } from '../../err import { Repository } from '../Repository' import { RepositoryEventTypes } from '../RepositoryEvents' +import type { MockedClassConstructor } from '../../../../../tests/types' import { CacheModuleConfig, InMemoryLruCache } from '../../modules/cache' import { TestRecord } from './TestRecord' -jest.mock('../../../../../tests/InMemoryStorageService') +vi.mock('../../../../../tests/InMemoryStorageService') -const StorageMock = InMemoryStorageService as unknown as jest.Mock> +const StorageMock = InMemoryStorageService as unknown as MockedClassConstructor< + typeof InMemoryStorageService +> const config = getAgentConfig('Repository') @@ -60,7 +63,7 @@ describe('Repository', () => { }) it('should emit saved event', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on>(RepositoryEventTypes.RecordSaved, eventListenerMock) // given @@ -93,7 +96,7 @@ describe('Repository', () => { }) it('should emit updated event', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on>(RepositoryEventTypes.RecordUpdated, eventListenerMock) // given @@ -126,7 +129,7 @@ describe('Repository', () => { }) it('should emit deleted event', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on>(RepositoryEventTypes.RecordDeleted, eventListenerMock) // given @@ -158,7 +161,7 @@ describe('Repository', () => { }) it('should emit deleted event', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on>(RepositoryEventTypes.RecordDeleted, eventListenerMock) const record = getRecord({ id: 'test-id' }) @@ -217,7 +220,7 @@ describe('Repository', () => { it('should return null if the storage service throws an error that is not RecordNotFoundError', async () => { mockFunction(storageMock.getById).mockReturnValue(Promise.reject(new CredoError('Not found'))) - expect(repository.findById(agentContext, 'test-id')).rejects.toThrow(CredoError) + await expect(repository.findById(agentContext, 'test-id')).rejects.toThrow(CredoError) expect(storageMock.getById).toHaveBeenCalledWith(agentContext, TestRecord, 'test-id') }) }) @@ -288,7 +291,7 @@ describe('Repository', () => { const record2 = getRecord({ id: 'test-id2' }) mockFunction(storageMock.findByQuery).mockReturnValue(Promise.resolve([record, record2])) - expect(repository.findSingleByQuery(agentContext, { something: 'interesting' })).rejects.toThrow( + await expect(repository.findSingleByQuery(agentContext, { something: 'interesting' })).rejects.toThrow( RecordDuplicateError ) expect(storageMock.findByQuery).toHaveBeenCalledWith( @@ -319,7 +322,7 @@ describe('Repository', () => { it('should throw RecordNotFoundError if no records are returned by the storage service', async () => { mockFunction(storageMock.findByQuery).mockReturnValue(Promise.resolve([])) - expect(repository.getSingleByQuery(agentContext, { something: 'interesting' })).rejects.toThrow( + await expect(repository.getSingleByQuery(agentContext, { something: 'interesting' })).rejects.toThrow( RecordNotFoundError ) expect(storageMock.findByQuery).toHaveBeenCalledWith( @@ -335,7 +338,7 @@ describe('Repository', () => { const record2 = getRecord({ id: 'test-id2' }) mockFunction(storageMock.findByQuery).mockReturnValue(Promise.resolve([record, record2])) - expect(repository.getSingleByQuery(agentContext, { something: 'interesting' })).rejects.toThrow( + await expect(repository.getSingleByQuery(agentContext, { something: 'interesting' })).rejects.toThrow( RecordDuplicateError ) expect(storageMock.findByQuery).toHaveBeenCalledWith( diff --git a/packages/core/src/storage/migration/StorageUpdateService.ts b/packages/core/src/storage/migration/StorageUpdateService.ts index 876e2b4470..b75d83d098 100644 --- a/packages/core/src/storage/migration/StorageUpdateService.ts +++ b/packages/core/src/storage/migration/StorageUpdateService.ts @@ -3,7 +3,7 @@ import type { VersionString } from '../../utils/version' import type { UpdateToVersion } from './updates' import { InjectionSymbols } from '../../constants' -import { Logger } from '../../logger' +import type { Logger } from '../../logger' import { inject, injectable } from '../../plugins' import { isStorageUpToDate } from './isUpToDate' diff --git a/packages/core/src/storage/migration/__tests__/0.1.test.ts b/packages/core/src/storage/migration/__tests__/0.1.test.ts index a5689b7a0d..4f8b6338b7 100644 --- a/packages/core/src/storage/migration/__tests__/0.1.test.ts +++ b/packages/core/src/storage/migration/__tests__/0.1.test.ts @@ -12,7 +12,7 @@ import { InjectionSymbols } from '../../../constants' import { UpdateAssistant } from '../UpdateAssistant' const backupDate = new Date('2022-01-21T22:50:20.522Z') -jest.useFakeTimers().setSystemTime(backupDate) +vi.useFakeTimers().setSystemTime(backupDate) const mediationRoleUpdateStrategies: V0_1ToV0_2UpdateConfig['mediationRoleUpdateStrategy'][] = [ 'allMediator', @@ -80,7 +80,7 @@ describe('UpdateAssistant | v0.1 - v0.2', () => { it('should correctly update credential records and create didcomm records', async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(utils, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(utils, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const aliceCredentialRecordsString = readFileSync( path.join(__dirname, '__fixtures__/alice-4-credentials-0.1.json'), @@ -138,7 +138,7 @@ describe('UpdateAssistant | v0.1 - v0.2', () => { it('should correctly update the credential records and create didcomm records with auto update', async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(utils, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(utils, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const aliceCredentialRecordsString = readFileSync( path.join(__dirname, '__fixtures__/alice-4-credentials-0.1.json'), @@ -196,7 +196,7 @@ describe('UpdateAssistant | v0.1 - v0.2', () => { it('should correctly update the connection record and create the did and oob records', async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(utils, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(utils, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const aliceConnectionRecordsString = readFileSync( path.join(__dirname, '__fixtures__/alice-8-connections-0.1.json'), diff --git a/packages/core/src/storage/migration/__tests__/0.2.test.ts b/packages/core/src/storage/migration/__tests__/0.2.test.ts index c9ad95352e..9b87c1a514 100644 --- a/packages/core/src/storage/migration/__tests__/0.2.test.ts +++ b/packages/core/src/storage/migration/__tests__/0.2.test.ts @@ -12,13 +12,13 @@ import * as uuid from '../../../utils/uuid' import { UpdateAssistant } from '../UpdateAssistant' const backupDate = new Date('2023-01-21T22:50:20.522Z') -jest.useFakeTimers().setSystemTime(backupDate) +vi.useFakeTimers().setSystemTime(backupDate) describe('UpdateAssistant | v0.2 - v0.3.1', () => { it('should correctly update proof records and create didcomm records', async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const aliceCredentialRecordsString = readFileSync( path.join(__dirname, '__fixtures__/alice-4-proofs-0.2.json'), @@ -80,7 +80,7 @@ describe('UpdateAssistant | v0.2 - v0.3.1', () => { it('should correctly update the proofs records and create didcomm records with auto update', async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const aliceCredentialRecordsString = readFileSync( path.join(__dirname, '__fixtures__/alice-4-proofs-0.2.json'), @@ -120,7 +120,7 @@ describe('UpdateAssistant | v0.2 - v0.3.1', () => { it('should correctly update the did records', async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const aliceDidRecordsString = readFileSync(path.join(__dirname, '__fixtures__/alice-8-dids-0.2.json'), 'utf8') diff --git a/packages/core/src/storage/migration/__tests__/0.3.test.ts b/packages/core/src/storage/migration/__tests__/0.3.test.ts index 31abecc3fa..b3dcea4160 100644 --- a/packages/core/src/storage/migration/__tests__/0.3.test.ts +++ b/packages/core/src/storage/migration/__tests__/0.3.test.ts @@ -10,13 +10,13 @@ import * as uuid from '../../../utils/uuid' import { UpdateAssistant } from '../UpdateAssistant' const backupDate = new Date('2023-03-18T22:50:20.522Z') -jest.useFakeTimers().setSystemTime(backupDate) +vi.useFakeTimers().setSystemTime(backupDate) describe('UpdateAssistant | v0.3.1 - v0.4', () => { it('should correctly update the did records and remove cache records', async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const aliceDidRecordsString = readFileSync( path.join(__dirname, '__fixtures__/alice-2-sov-dids-one-cache-record-0.3.json'), @@ -73,7 +73,7 @@ describe('UpdateAssistant | v0.3.1 - v0.4', () => { it(`should correctly update 'claimFormat' tag to w3c records`, async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const aliceW3cCredentialRecordsString = readFileSync( path.join(__dirname, '__fixtures__/alice-2-w3c-credential-records-0.3.json'), diff --git a/packages/core/src/storage/migration/__tests__/0.4.test.ts b/packages/core/src/storage/migration/__tests__/0.4.test.ts index 392ecd7079..54326ed18b 100644 --- a/packages/core/src/storage/migration/__tests__/0.4.test.ts +++ b/packages/core/src/storage/migration/__tests__/0.4.test.ts @@ -12,13 +12,13 @@ import * as uuid from '../../../utils/uuid' import { UpdateAssistant } from '../UpdateAssistant' const backupDate = new Date('2024-02-05T22:50:20.522Z') -jest.useFakeTimers().setSystemTime(backupDate) +vi.useFakeTimers().setSystemTime(backupDate) describe('UpdateAssistant | v0.4 - v0.5', () => { it(`should correctly add 'type' tag to w3c records`, async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const aliceW3cCredentialRecordsString = readFileSync( path.join(__dirname, '__fixtures__/alice-2-w3c-credential-records-0.4.json'), @@ -78,7 +78,7 @@ describe('UpdateAssistant | v0.4 - v0.5', () => { it('should correctly add role to credential exchange records', async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const aliceW3cCredentialRecordsString = readFileSync( path.join(__dirname, '__fixtures__/2-credentials-0.4.json'), @@ -134,7 +134,7 @@ describe('UpdateAssistant | v0.4 - v0.5', () => { it('should correctly add role to proof exchange records', async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(uuid, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const aliceW3cCredentialRecordsString = readFileSync(path.join(__dirname, '__fixtures__/2-proofs-0.4.json'), 'utf8') diff --git a/packages/core/src/storage/migration/__tests__/__snapshots__/0.1.test.ts.snap b/packages/core/src/storage/migration/__tests__/__snapshots__/0.1.test.ts.snap index 3232e8c9e9..825b54338c 100644 --- a/packages/core/src/storage/migration/__tests__/__snapshots__/0.1.test.ts.snap +++ b/packages/core/src/storage/migration/__tests__/__snapshots__/0.1.test.ts.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`UpdateAssistant | v0.1 - v0.2 should correctly update credential records and create didcomm records 1`] = ` +exports[`UpdateAssistant | v0.1 - v0.2 > should correctly update credential records and create didcomm records 1`] = ` { "1-4e4f-41d9-94c4-f49351b811f1": { "id": "1-4e4f-41d9-94c4-f49351b811f1", @@ -785,7 +785,7 @@ exports[`UpdateAssistant | v0.1 - v0.2 should correctly update credential record } `; -exports[`UpdateAssistant | v0.1 - v0.2 should correctly update the connection record and create the did and oob records 1`] = ` +exports[`UpdateAssistant | v0.1 - v0.2 > should correctly update the connection record and create the did and oob records 1`] = ` { "1-4e4f-41d9-94c4-f49351b811f1": { "id": "1-4e4f-41d9-94c4-f49351b811f1", @@ -2453,7 +2453,7 @@ exports[`UpdateAssistant | v0.1 - v0.2 should correctly update the connection re } `; -exports[`UpdateAssistant | v0.1 - v0.2 should correctly update the credential records and create didcomm records with auto update 1`] = ` +exports[`UpdateAssistant | v0.1 - v0.2 > should correctly update the credential records and create didcomm records with auto update 1`] = ` { "1-4e4f-41d9-94c4-f49351b811f1": { "id": "1-4e4f-41d9-94c4-f49351b811f1", @@ -3238,7 +3238,7 @@ exports[`UpdateAssistant | v0.1 - v0.2 should correctly update the credential re } `; -exports[`UpdateAssistant | v0.1 - v0.2 should correctly update the role in the mediation record: allMediator 1`] = ` +exports[`UpdateAssistant | v0.1 - v0.2 > should correctly update the role in the mediation record > allMediator 1`] = ` { "0b47db94-c0fa-4476-87cf-a5f664440412": { "id": "0b47db94-c0fa-4476-87cf-a5f664440412", @@ -3353,7 +3353,7 @@ exports[`UpdateAssistant | v0.1 - v0.2 should correctly update the role in the m } `; -exports[`UpdateAssistant | v0.1 - v0.2 should correctly update the role in the mediation record: allRecipient 1`] = ` +exports[`UpdateAssistant | v0.1 - v0.2 > should correctly update the role in the mediation record > allRecipient 1`] = ` { "0b47db94-c0fa-4476-87cf-a5f664440412": { "id": "0b47db94-c0fa-4476-87cf-a5f664440412", @@ -3468,7 +3468,7 @@ exports[`UpdateAssistant | v0.1 - v0.2 should correctly update the role in the m } `; -exports[`UpdateAssistant | v0.1 - v0.2 should correctly update the role in the mediation record: doNotChange 1`] = ` +exports[`UpdateAssistant | v0.1 - v0.2 > should correctly update the role in the mediation record > doNotChange 1`] = ` { "0b47db94-c0fa-4476-87cf-a5f664440412": { "id": "0b47db94-c0fa-4476-87cf-a5f664440412", @@ -3583,7 +3583,7 @@ exports[`UpdateAssistant | v0.1 - v0.2 should correctly update the role in the m } `; -exports[`UpdateAssistant | v0.1 - v0.2 should correctly update the role in the mediation record: recipientIfEndpoint 1`] = ` +exports[`UpdateAssistant | v0.1 - v0.2 > should correctly update the role in the mediation record > recipientIfEndpoint 1`] = ` { "0b47db94-c0fa-4476-87cf-a5f664440412": { "id": "0b47db94-c0fa-4476-87cf-a5f664440412", diff --git a/packages/core/src/storage/migration/__tests__/__snapshots__/0.2.test.ts.snap b/packages/core/src/storage/migration/__tests__/__snapshots__/0.2.test.ts.snap index 099d4bf2bc..01f818c45c 100644 --- a/packages/core/src/storage/migration/__tests__/__snapshots__/0.2.test.ts.snap +++ b/packages/core/src/storage/migration/__tests__/__snapshots__/0.2.test.ts.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`UpdateAssistant | v0.2 - v0.3.1 should correctly update proof records and create didcomm records 1`] = ` +exports[`UpdateAssistant | v0.2 - v0.3.1 > should correctly update proof records and create didcomm records 1`] = ` { "3d5d7ad4-f0aa-4b1b-8c2c-780ee383564e": { "id": "3d5d7ad4-f0aa-4b1b-8c2c-780ee383564e", @@ -239,7 +239,7 @@ exports[`UpdateAssistant | v0.2 - v0.3.1 should correctly update proof records a } `; -exports[`UpdateAssistant | v0.2 - v0.3.1 should correctly update the did records 1`] = ` +exports[`UpdateAssistant | v0.2 - v0.3.1 > should correctly update the did records 1`] = ` { "1-4e4f-41d9-94c4-f49351b811f1": { "id": "1-4e4f-41d9-94c4-f49351b811f1", @@ -764,7 +764,7 @@ exports[`UpdateAssistant | v0.2 - v0.3.1 should correctly update the did records } `; -exports[`UpdateAssistant | v0.2 - v0.3.1 should correctly update the proofs records and create didcomm records with auto update 1`] = ` +exports[`UpdateAssistant | v0.2 - v0.3.1 > should correctly update the proofs records and create didcomm records with auto update 1`] = ` { "3d5d7ad4-f0aa-4b1b-8c2c-780ee383564e": { "id": "3d5d7ad4-f0aa-4b1b-8c2c-780ee383564e", diff --git a/packages/core/src/storage/migration/__tests__/__snapshots__/0.3.test.ts.snap b/packages/core/src/storage/migration/__tests__/__snapshots__/0.3.test.ts.snap index b5e57727bd..99a069298f 100644 --- a/packages/core/src/storage/migration/__tests__/__snapshots__/0.3.test.ts.snap +++ b/packages/core/src/storage/migration/__tests__/__snapshots__/0.3.test.ts.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`UpdateAssistant | v0.3.1 - v0.4 should correctly update 'claimFormat' tag to w3c records 1`] = ` +exports[`UpdateAssistant | v0.3.1 - v0.4 > should correctly update 'claimFormat' tag to w3c records 1`] = ` { "0e1f070a-e31f-46cf-88db-25c1621b2f4e": { "id": "0e1f070a-e31f-46cf-88db-25c1621b2f4e", @@ -104,7 +104,7 @@ exports[`UpdateAssistant | v0.3.1 - v0.4 should correctly update 'claimFormat' t } `; -exports[`UpdateAssistant | v0.3.1 - v0.4 should correctly update the did records and remove cache records 1`] = ` +exports[`UpdateAssistant | v0.3.1 - v0.4 > should correctly update the did records and remove cache records 1`] = ` { "4993c740-5cd9-4c79-a7d8-23d1266d31be": { "id": "4993c740-5cd9-4c79-a7d8-23d1266d31be", diff --git a/packages/core/src/storage/migration/__tests__/__snapshots__/0.4.test.ts.snap b/packages/core/src/storage/migration/__tests__/__snapshots__/0.4.test.ts.snap index 14e6ffcded..adc076fe63 100644 --- a/packages/core/src/storage/migration/__tests__/__snapshots__/0.4.test.ts.snap +++ b/packages/core/src/storage/migration/__tests__/__snapshots__/0.4.test.ts.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`UpdateAssistant | v0.4 - v0.5 should correctly add 'type' tag to w3c records 1`] = ` +exports[`UpdateAssistant | v0.4 - v0.5 > should correctly add 'type' tag to w3c records 1`] = ` { "0e1f070a-e31f-46cf-88db-25c1621b2f4e": { "id": "0e1f070a-e31f-46cf-88db-25c1621b2f4e", @@ -104,7 +104,7 @@ exports[`UpdateAssistant | v0.4 - v0.5 should correctly add 'type' tag to w3c re } `; -exports[`UpdateAssistant | v0.4 - v0.5 should correctly add role to credential exchange records 1`] = ` +exports[`UpdateAssistant | v0.4 - v0.5 > should correctly add role to credential exchange records 1`] = ` { "6bab4ff7-45a1-4d66-98a4-ae81efd7f460": { "id": "6bab4ff7-45a1-4d66-98a4-ae81efd7f460", @@ -581,7 +581,7 @@ exports[`UpdateAssistant | v0.4 - v0.5 should correctly add role to credential e } `; -exports[`UpdateAssistant | v0.4 - v0.5 should correctly add role to proof exchange records 1`] = ` +exports[`UpdateAssistant | v0.4 - v0.5 > should correctly add role to proof exchange records 1`] = ` { "3f3351dd-7b56-4288-8ed7-b9c46f33718e": { "id": "3f3351dd-7b56-4288-8ed7-b9c46f33718e", diff --git a/packages/core/src/storage/migration/__tests__/__snapshots__/migration-askar.test.ts.snap b/packages/core/src/storage/migration/__tests__/__snapshots__/migration-askar.test.ts.snap index 7b7006c045..0c2cbc29e2 100644 --- a/packages/core/src/storage/migration/__tests__/__snapshots__/migration-askar.test.ts.snap +++ b/packages/core/src/storage/migration/__tests__/__snapshots__/migration-askar.test.ts.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`UpdateAssistant | Aries Askar should create a backup 1`] = ` +exports[`UpdateAssistant | Aries Askar > should create a backup 1`] = ` [ { "_tags": { diff --git a/packages/core/src/storage/migration/__tests__/migration-askar.test.ts b/packages/core/src/storage/migration/__tests__/migration-askar.test.ts index 5e33c9b976..dad58b69d5 100644 --- a/packages/core/src/storage/migration/__tests__/migration-askar.test.ts +++ b/packages/core/src/storage/migration/__tests__/migration-askar.test.ts @@ -21,7 +21,7 @@ const aliceCredentialRecordsString = readFileSync( ) const backupDate = new Date('2022-03-22T22:50:20.522Z') -jest.useFakeTimers().setSystemTime(backupDate) +vi.useFakeTimers().setSystemTime(backupDate) describe('UpdateAssistant | Aries Askar', () => { let updateAssistant: UpdateAssistant diff --git a/packages/core/src/storage/migration/index.ts b/packages/core/src/storage/migration/index.ts index 4358c05472..498d480919 100644 --- a/packages/core/src/storage/migration/index.ts +++ b/packages/core/src/storage/migration/index.ts @@ -2,5 +2,5 @@ export * from './repository/StorageVersionRecord' export * from './repository/StorageVersionRepository' export * from './StorageUpdateService' export * from './UpdateAssistant' -export { Update } from './updates' +export type { Update } from './updates' export * from './isUpToDate' diff --git a/packages/core/src/storage/migration/repository/StorageVersionRepository.ts b/packages/core/src/storage/migration/repository/StorageVersionRepository.ts index b32edec8cb..a15278be48 100644 --- a/packages/core/src/storage/migration/repository/StorageVersionRepository.ts +++ b/packages/core/src/storage/migration/repository/StorageVersionRepository.ts @@ -2,7 +2,7 @@ import { EventEmitter } from '../../../agent/EventEmitter' import { InjectionSymbols } from '../../../constants' import { inject, injectable } from '../../../plugins' import { Repository } from '../../Repository' -import { StorageService } from '../../StorageService' +import type { StorageService } from '../../StorageService' import { StorageVersionRecord } from './StorageVersionRecord' diff --git a/packages/core/src/storage/migration/updates/0.3-0.3.1/__tests__/did.test.ts b/packages/core/src/storage/migration/updates/0.3-0.3.1/__tests__/did.test.ts index 2d8cbba3a2..d604fac8e8 100644 --- a/packages/core/src/storage/migration/updates/0.3-0.3.1/__tests__/did.test.ts +++ b/packages/core/src/storage/migration/updates/0.3-0.3.1/__tests__/did.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../../tests/helpers' import { AgentContext } from '../../../../../agent' import { Agent } from '../../../../../agent/Agent' @@ -10,24 +11,24 @@ import * as testModule from '../did' const agentConfig = getAgentConfig('Migration DidRecord 0.3-0.3.1') const agentContext = getAgentContext() -jest.mock('../../../../../modules/dids/repository/DidRepository') -const DidRepositoryMock = DidRepository as jest.Mock +vi.mock('../../../../../modules/dids/repository/DidRepository') +const DidRepositoryMock = DidRepository as MockedClassConstructor const didRepository = new DidRepositoryMock() -jest.mock('../../../../../agent/Agent', () => { +vi.mock('../../../../../agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn(() => didRepository), + resolve: vi.fn(() => didRepository), }, })), } }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.3-0.3.1 | Did', () => { let agent: Agent diff --git a/packages/core/src/storage/migration/updates/0.3.1-0.4/__tests__/cache.test.ts b/packages/core/src/storage/migration/updates/0.3.1-0.4/__tests__/cache.test.ts index 477cdb0ffa..38b6761f08 100644 --- a/packages/core/src/storage/migration/updates/0.3.1-0.4/__tests__/cache.test.ts +++ b/packages/core/src/storage/migration/updates/0.3.1-0.4/__tests__/cache.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../../tests/helpers' import { Agent } from '../../../../../agent/Agent' import * as testModule from '../cache' @@ -6,24 +7,24 @@ const agentConfig = getAgentConfig('Migration Cache 0.3.1-0.4') const agentContext = getAgentContext() const storageService = { - getAll: jest.fn(), - deleteById: jest.fn(), + getAll: vi.fn(), + deleteById: vi.fn(), } -jest.mock('../../../../../agent/Agent', () => { +vi.mock('../../../../../agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn(() => storageService), + resolve: vi.fn(() => storageService), }, })), } }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.3.1-0.4 | Cache', () => { let agent: Agent diff --git a/packages/core/src/storage/migration/updates/0.3.1-0.4/__tests__/did.test.ts b/packages/core/src/storage/migration/updates/0.3.1-0.4/__tests__/did.test.ts index e2b267e324..272355d638 100644 --- a/packages/core/src/storage/migration/updates/0.3.1-0.4/__tests__/did.test.ts +++ b/packages/core/src/storage/migration/updates/0.3.1-0.4/__tests__/did.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../../tests/helpers' import { Agent } from '../../../../../agent/Agent' import { DidDocumentRole, DidRecord } from '../../../../../modules/dids' @@ -10,24 +11,24 @@ import * as testModule from '../did' const agentConfig = getAgentConfig('Migration DidRecord 0.3.1-0.4') const agentContext = getAgentContext() -jest.mock('../../../../../modules/dids/repository/DidRepository') -const DidRepositoryMock = DidRepository as jest.Mock +vi.mock('../../../../../modules/dids/repository/DidRepository') +const DidRepositoryMock = DidRepository as MockedClassConstructor const didRepository = new DidRepositoryMock() -jest.mock('../../../../../agent/Agent', () => { +vi.mock('../../../../../agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn(() => didRepository), + resolve: vi.fn(() => didRepository), }, })), } }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.3.1-0.4 | Did', () => { let agent: Agent diff --git a/packages/core/src/storage/migration/updates/0.3.1-0.4/__tests__/w3cCredentialRecord.test.ts b/packages/core/src/storage/migration/updates/0.3.1-0.4/__tests__/w3cCredentialRecord.test.ts index 4dd7339b8c..8e6dfab8c8 100644 --- a/packages/core/src/storage/migration/updates/0.3.1-0.4/__tests__/w3cCredentialRecord.test.ts +++ b/packages/core/src/storage/migration/updates/0.3.1-0.4/__tests__/w3cCredentialRecord.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../../tests/helpers' import { Agent } from '../../../../../agent/Agent' import { W3cCredentialRecord, W3cJsonLdVerifiableCredential } from '../../../../../modules/vc' @@ -9,24 +10,24 @@ const agentConfig = getAgentConfig('Migration W3cCredentialRecord 0.3.1-0.4') const agentContext = getAgentContext() const repository = { - getAll: jest.fn(), - update: jest.fn(), + getAll: vi.fn(), + update: vi.fn(), } -jest.mock('../../../../../agent/Agent', () => { +vi.mock('../../../../../agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn(() => repository), + resolve: vi.fn(() => repository), }, })), } }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.3.1-0.4 | W3cCredentialRecord', () => { let agent: Agent diff --git a/packages/core/src/storage/migration/updates/0.4-0.5/__tests__/w3cCredentialRecord.test.ts b/packages/core/src/storage/migration/updates/0.4-0.5/__tests__/w3cCredentialRecord.test.ts index a4a526da7e..a0ae9b5356 100644 --- a/packages/core/src/storage/migration/updates/0.4-0.5/__tests__/w3cCredentialRecord.test.ts +++ b/packages/core/src/storage/migration/updates/0.4-0.5/__tests__/w3cCredentialRecord.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../../tests/helpers' import { Agent } from '../../../../../agent/Agent' import { W3cCredentialRecord, W3cCredentialRepository, W3cJsonLdVerifiableCredential } from '../../../../../modules/vc' @@ -9,12 +10,12 @@ import * as testModule from '../w3cCredentialRecord' const agentConfig = getAgentConfig('Migration W3cCredentialRecord 0.4-0.5') const repository = { - getAll: jest.fn(), - update: jest.fn(), + getAll: vi.fn(), + update: vi.fn(), } const w3cJsonLdCredentialService = { - getExpandedTypesForCredential: jest.fn().mockResolvedValue(['https://example.com#example']), + getExpandedTypesForCredential: vi.fn().mockResolvedValue(['https://example.com#example']), } const agentContext = getAgentContext({ @@ -25,9 +26,9 @@ const agentContext = getAgentContext({ ], }) -jest.mock('../../../../../agent/Agent', () => { +vi.mock('../../../../../agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: agentContext.dependencyManager, @@ -36,7 +37,7 @@ jest.mock('../../../../../agent/Agent', () => { }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.4-0.5 | W3cCredentialRecord', () => { let agent: Agent @@ -46,7 +47,7 @@ describe('0.4-0.5 | W3cCredentialRecord', () => { }) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('migrateW3cCredentialRecordToV0_5()', () => { diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 9fbb88fd2f..d6705667de 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,5 +1,5 @@ -import { Kms } from '.' import type { Logger } from './logger' +import { Ed25519PublicJwk, PublicJwk } from './modules/kms' export interface InitConfig { logger?: Logger @@ -67,8 +67,8 @@ export type IsAny = unknown extends T ? ([keyof T] extends [never] ? false : export interface ResolvedDidCommService { id: string serviceEndpoint: string - recipientKeys: Kms.PublicJwk[] - routingKeys: Kms.PublicJwk[] + recipientKeys: PublicJwk[] + routingKeys: PublicJwk[] } export const isJsonObject = (value: unknown): value is JsonObject => { diff --git a/packages/core/src/utils/VarintEncoder.ts b/packages/core/src/utils/VarintEncoder.ts index e89d16f7ec..cefe8a869d 100644 --- a/packages/core/src/utils/VarintEncoder.ts +++ b/packages/core/src/utils/VarintEncoder.ts @@ -1,21 +1,21 @@ -import { decode, encode, encodingLength } from 'varint' +import varint from 'varint' import { Buffer } from './buffer' // biome-ignore lint/complexity/noStaticOnlyClass: export class VarintEncoder { public static decode(data: Uint8Array | number[] | Buffer) { - const code = decode(data) - return [code, decode.bytes] as const + const code = varint.decode(data) + return [code, varint.decode.bytes] as const } public static encode(int: number) { const target = new Buffer(VarintEncoder.encodingLength(int)) - encode(int, target) + varint.encode(int, target) return target } public static encodingLength(int: number) { - return encodingLength(int) + return varint.encodingLength(int) } } diff --git a/packages/core/src/utils/buffer.ts b/packages/core/src/utils/buffer.ts index 8ed596442f..bd0ea50c3d 100644 --- a/packages/core/src/utils/buffer.ts +++ b/packages/core/src/utils/buffer.ts @@ -1,3 +1,3 @@ -import { Buffer } from 'buffer/' +import { Buffer } from 'buffer/index.js' export { Buffer } diff --git a/packages/core/src/utils/zod.ts b/packages/core/src/utils/zod.ts index eec5bc68b3..7038f33d88 100644 --- a/packages/core/src/utils/zod.ts +++ b/packages/core/src/utils/zod.ts @@ -3,9 +3,9 @@ import { z } from 'zod' import { ZodValidationError } from '../error' // biome-ignore lint/suspicious/noExplicitAny: -export type BaseSchema = z.Schema +export type zBaseSchema = z.Schema -export function parseWithErrorHandling( +export function zParseWithErrorHandling( schema: Schema, data: unknown, customErrorMessage?: string @@ -22,13 +22,12 @@ export function parseWithErrorHandling( return parseResult.data } -const zUniqueArray = (item: TItem) => +const zUniqueArray = (item: TItem) => z.array(item).refine((a) => new Set<(typeof a)[number]>(a).size === a.length, 'Array must have unique values') -const zOptionalToUndefined = (item: TItem) => +const zOptionalToUndefined = (item: TItem) => z.optional(item.transform(() => undefined)) const zBase64Url = z.string().regex(/[a-zA-Z0-9_-]+/, 'Must be a base64url string') -export * from 'zod' -export { zUniqueArray as uniqueArray, zOptionalToUndefined as optionalToUndefined, zBase64Url as base64Url } +export { zUniqueArray, zOptionalToUndefined, zBase64Url } diff --git a/packages/core/tests/connections.test.ts b/packages/core/tests/connections.test.ts index 798a587fe8..71bbdc4827 100644 --- a/packages/core/tests/connections.test.ts +++ b/packages/core/tests/connections.test.ts @@ -206,7 +206,7 @@ describe('connections', () => { expect(connectionsFound).toEqual([]) }) - xit('should be able to make multiple connections using a multi use invite', async () => { + it.skip('should be able to make multiple connections using a multi use invite', async () => { const faberOutOfBandRecord = await faberAgent.didcomm.oob.createInvitation({ handshakeProtocols: [DidCommHandshakeProtocol.Connections], multiUseInvitation: true, diff --git a/packages/core/tests/generic-records.test.ts b/packages/core/tests/generic-records.test.ts index 9377b12ad2..23be6da3be 100644 --- a/packages/core/tests/generic-records.test.ts +++ b/packages/core/tests/generic-records.test.ts @@ -97,7 +97,7 @@ describe('genericRecords', () => { const deleteRecordById = async () => { await aliceAgent.genericRecords.deleteById('test') } - expect(deleteRecordById).rejects.toThrow(RecordNotFoundError) + await expect(deleteRecordById).rejects.toThrow(RecordNotFoundError) }) test('update generic record', async () => { diff --git a/packages/core/tests/helpers.ts b/packages/core/tests/helpers.ts index 1603bd742a..13c41cb939 100644 --- a/packages/core/tests/helpers.ts +++ b/packages/core/tests/helpers.ts @@ -18,8 +18,8 @@ import type { TrustPingResponseReceivedEvent, } from '../../didcomm/src/modules/connections/DidCommTrustPingEvents' import type { DidCommProofState } from '../../didcomm/src/modules/proofs' -import anoncredsDrizzleBundle from '../../drizzle-storage/src/anoncreds/bundle' -import didcommDrizzleBundle from '../../drizzle-storage/src/didcomm/bundle' +import { anoncredsBundle } from '../../drizzle-storage/src/anoncreds/bundle' +import { didcommBundle } from '../../drizzle-storage/src/didcomm/bundle' import type { Agent, AgentDependencies, @@ -61,12 +61,13 @@ import { sleep } from '../src/utils/sleep' import { uuid } from '../src/utils/uuid' import { askar } from '@openwallet-foundation/askar-nodejs' +import type { MockedFunction } from 'vitest' import { InMemoryWalletModule } from '../../../tests/InMemoryWalletModule' import { AskarModule } from '../../askar/src/AskarModule' -import { AskarModuleConfigStoreOptions } from '../../askar/src/AskarModuleConfig' +import type { AskarModuleConfigStoreOptions } from '../../askar/src/AskarModuleConfig' import { transformPrivateKeyToPrivateJwk } from '../../askar/src/utils' -import { AnyDrizzleDatabase } from '../../drizzle-storage/src/DrizzleStorageModuleConfig' -import { KeyManagementApi, KeyManagementService, PublicJwk } from '../src/modules/kms' +import type { AnyDrizzleDatabase } from '../../drizzle-storage/src/DrizzleStorageModuleConfig' +import { KeyManagementApi, type KeyManagementService, PublicJwk } from '../src/modules/kms' import testLogger, { TestLogger } from './logger' export const genesisPath = process.env.GENESIS_TXN_PATH @@ -141,7 +142,7 @@ export function getAgentOptions< ? { drizzle: new DrizzleStorageModule({ database: drizzle, - bundles: [didcommDrizzleBundle, anoncredsDrizzleBundle], + bundles: [didcommBundle, anoncredsBundle], }), } : {} @@ -799,8 +800,8 @@ export async function makeConnection( * @returns mock function with type annotations */ // biome-ignore lint/suspicious/noExplicitAny: -export function mockFunction any>(fn: T): jest.MockedFunction { - return fn as jest.MockedFunction +export function mockFunction any>(fn: T): MockedFunction { + return fn as MockedFunction } /** diff --git a/packages/core/tests/middleware.test.ts b/packages/core/tests/middleware.test.ts index 1582260c43..49664ef2f5 100644 --- a/packages/core/tests/middleware.test.ts +++ b/packages/core/tests/middleware.test.ts @@ -1,5 +1,5 @@ import type { SubjectMessage } from '../../../tests/transport/SubjectInboundTransport' -import type { DidCommConnectionRecord, DidCommInboundMessageContext } from '../../didcomm' +import type { DidCommConnectionRecord, DidCommInboundMessageContext } from '../../didcomm/src/index' import { Subject } from 'rxjs' diff --git a/packages/core/tests/multi-protocol-version.test.ts b/packages/core/tests/multi-protocol-version.test.ts index d92e52d653..0c92da4167 100644 --- a/packages/core/tests/multi-protocol-version.test.ts +++ b/packages/core/tests/multi-protocol-version.test.ts @@ -49,7 +49,7 @@ describe('multi version protocols', () => { setupSubjectTransports([aliceAgent, bobAgent]) // Register the test handler with the v1.3 version of the message - const mockHandle = jest.fn() + const mockHandle = vi.fn() aliceAgent.didcomm.registerMessageHandlers([{ supportedMessages: [TestMessageV13], handle: mockHandle }]) await aliceAgent.initialize() diff --git a/packages/core/tests/oob.test.ts b/packages/core/tests/oob.test.ts index 96acf3b56b..f0d7f361ab 100644 --- a/packages/core/tests/oob.test.ts +++ b/packages/core/tests/oob.test.ts @@ -152,7 +152,7 @@ describe('out of band', () => { await faberAgent.didcomm.connections.deleteById(connection.id) } - jest.resetAllMocks() + vi.resetAllMocks() }) describe('createInvitation', () => { @@ -268,7 +268,7 @@ describe('out of band', () => { }) test('emits OutOfBandStateChanged event', async () => { - const eventListener = jest.fn() + const eventListener = vi.fn() faberAgent.events.on(DidCommOutOfBandEventTypes.OutOfBandStateChanged, eventListener) const outOfBandRecord = await faberAgent.didcomm.oob.createInvitation({ @@ -447,7 +447,7 @@ describe('out of band', () => { }) test('do not process requests when a connection is not ready', async () => { - const eventListener = jest.fn() + const eventListener = vi.fn() aliceAgent.events.on(DidCommEventTypes.DidCommMessageReceived, eventListener) const { message } = await faberAgent.didcomm.credentials.createOffer(credentialTemplate) @@ -516,8 +516,8 @@ describe('out of band', () => { }) test('do not create a new connection when no messages and handshake reuse succeeds', async () => { - const aliceReuseListener = jest.fn() - const faberReuseListener = jest.fn() + const aliceReuseListener = vi.fn() + const faberReuseListener = vi.fn() // Create first connection const outOfBandRecord = await faberAgent.didcomm.oob.createInvitation(makeConnectionConfig) @@ -596,7 +596,7 @@ describe('out of band', () => { }) test('create a new connection when connection exists and reuse is false', async () => { - const reuseListener = jest.fn() + const reuseListener = vi.fn() // Create first connection const outOfBandRecord = await faberAgent.didcomm.oob.createInvitation(makeConnectionConfig) @@ -675,7 +675,7 @@ describe('out of band', () => { }) test('emits OutOfBandStateChanged event', async () => { - const eventListener = jest.fn() + const eventListener = vi.fn() const { outOfBandInvitation, id } = await faberAgent.didcomm.oob.createInvitation(makeConnectionConfig) aliceAgent.events.on(DidCommOutOfBandEventTypes.OutOfBandStateChanged, eventListener) diff --git a/packages/core/tests/setup.ts b/packages/core/tests/setup.ts deleted file mode 100644 index b2a570cc7b..0000000000 --- a/packages/core/tests/setup.ts +++ /dev/null @@ -1,24 +0,0 @@ -import 'reflect-metadata' - -import type { DidCommConnectionRecord } from '../../didcomm/src' - -jest.setTimeout(120000) -expect.extend({ toBeConnectedWith }) - -// Custom matchers which can be used to extend Jest matchers via extend, e. g. `expect.extend({ toBeConnectedWith })`. -function toBeConnectedWith(actual: DidCommConnectionRecord, expected: DidCommConnectionRecord) { - actual.assertReady() - expected.assertReady() - - const pass = actual.theirDid === expected.did - if (pass) { - return { - message: () => `expected connection ${actual.theirDid} not to be connected to with ${expected.did}`, - pass: true, - } - } - return { - message: () => `expected connection ${actual.theirDid} to be connected to with ${expected.did}`, - pass: false, - } -} diff --git a/packages/core/tsconfig.build.json b/packages/core/tsconfig.build.json deleted file mode 100644 index 9c30e30bd2..0000000000 --- a/packages/core/tsconfig.build.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - - "compilerOptions": { - "outDir": "./build" - }, - - "include": ["src/**/*"] -} diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json deleted file mode 100644 index 93d9dd32b5..0000000000 --- a/packages/core/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "allowJs": false, - "typeRoots": ["../../node_modules/@types", "src/types"], - "types": ["jest"] - } -} diff --git a/packages/core/tsdown.config.ts b/packages/core/tsdown.config.ts new file mode 100644 index 0000000000..ee897a2979 --- /dev/null +++ b/packages/core/tsdown.config.ts @@ -0,0 +1,23 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig( + config.map((entry) => ({ + ...entry, + plugins: [ + ...(entry.plugins ?? []), + { + // Adds reflect-metadata import to top of core package src/index file + // because the imports are reordered and that causes issues since + // reflect metadata needs to be imported first + // See: https://github.com/rolldown/rolldown/issues/6436 + name: 'import-reflect-metadata-at-top', + banner: (chunk) => { + if (chunk.fileName === 'index.js') return "require('reflect-metadata')" + if (chunk.fileName === 'index.mjs') return "import 'reflect-metadata'" + return '' + }, + }, + ], + })) +) diff --git a/packages/core/types/jest.d.ts b/packages/core/types/jest.d.ts deleted file mode 100644 index d32ca4e39e..0000000000 --- a/packages/core/types/jest.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { DidCommConnectionRecord } from '../../didcomm/src' - -declare global { - namespace jest { - interface Matchers { - toBeConnectedWith(connection: DidCommConnectionRecord): R - } - } -} diff --git a/packages/didcomm/jest.config.ts b/packages/didcomm/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/didcomm/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/didcomm/package.json b/packages/didcomm/package.json index 50a6c6068b..54224011f2 100644 --- a/packages/didcomm/package.json +++ b/packages/didcomm/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/didcomm", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/didcomm", "repository": { @@ -17,11 +28,8 @@ "directory": "packages/didcomm" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/core": "workspace:*", @@ -36,7 +44,6 @@ "@sphereon/pex-models": "catalog:", "@types/luxon": "^3.2.0", "reflect-metadata": "catalog:", - "rimraf": "catalog:", "typescript": "catalog:" } } diff --git a/packages/didcomm/src/DidCommApi.ts b/packages/didcomm/src/DidCommApi.ts index bc6960b764..13916dfd02 100644 --- a/packages/didcomm/src/DidCommApi.ts +++ b/packages/didcomm/src/DidCommApi.ts @@ -1,31 +1,31 @@ import type { DidCommMessageHandler, DidCommMessageHandlerMiddleware } from './handlers' import type { DidCommInboundTransport, DidCommOutboundTransport } from './transport' -import { AgentContext, InjectionToken, injectable } from '@credo-ts/core' +import { AgentContext, type InjectionToken, injectable } from '@credo-ts/core' import { DidCommFeatureRegistry } from './DidCommFeatureRegistry' import { DidCommMessageHandlerRegistry } from './DidCommMessageHandlerRegistry' import { DidCommMessageReceiver } from './DidCommMessageReceiver' import { DidCommMessageSender } from './DidCommMessageSender' -import { DidCommModuleConfig, DidCommModuleConfigOptions } from './DidCommModuleConfig' +import { DidCommModuleConfig, type DidCommModuleConfigOptions } from './DidCommModuleConfig' import { - DefaultDidCommMessagePickupProtocols, - DefaultDidCommProofProtocols, + type DefaultDidCommMessagePickupProtocols, + type DefaultDidCommProofProtocols, DidCommBasicMessagesApi, DidCommConnectionsApi, - DidCommCredentialProtocol, + type DidCommCredentialProtocol, DidCommDiscoverFeaturesApi, DidCommMessagePickupApi, - DidCommMessagePickupModuleConfigOptions, - DidCommMessagePickupProtocol, + type DidCommMessagePickupModuleConfigOptions, + type DidCommMessagePickupProtocol, DidCommOutOfBandApi, - DidCommProofProtocol, + type DidCommProofProtocol, DidCommProofsApi, - DidCommProofsModuleConfigOptions, + type DidCommProofsModuleConfigOptions, } from './modules' import { DidCommCredentialsApi } from './modules/credentials/DidCommCredentialsApi' -import { DefaultDidCommCredentialProtocols } from './modules/credentials/DidCommCredentialsModule' -import { DidCommCredentialsModuleConfigOptions } from './modules/credentials/DidCommCredentialsModuleConfig' +import type { DefaultDidCommCredentialProtocols } from './modules/credentials/DidCommCredentialsModule' +import type { DidCommCredentialsModuleConfigOptions } from './modules/credentials/DidCommCredentialsModuleConfig' import { DidCommMediationRecipientApi } from './modules/routing/DidCommMediationRecipientApi' import { DidCommMediatorApi } from './modules/routing/DidCommMediatorApi' diff --git a/packages/didcomm/src/DidCommDispatcher.ts b/packages/didcomm/src/DidCommDispatcher.ts index fa8392d723..09049bfe15 100644 --- a/packages/didcomm/src/DidCommDispatcher.ts +++ b/packages/didcomm/src/DidCommDispatcher.ts @@ -3,7 +3,7 @@ import type { DidCommMessage } from './DidCommMessage' import type { DidCommMessageHandlerMiddleware } from './handlers/DidCommMessageHandlerMiddleware' import type { DidCommInboundMessageContext } from './models/DidCommInboundMessageContext' -import { CredoError, EventEmitter, InjectionSymbols, Logger, inject, injectable } from '@credo-ts/core' +import { CredoError, EventEmitter, InjectionSymbols, type Logger, inject, injectable } from '@credo-ts/core' import { DidCommEventTypes } from './DidCommEvents' import { DidCommMessageHandlerRegistry } from './DidCommMessageHandlerRegistry' diff --git a/packages/didcomm/src/DidCommEnvelopeService.ts b/packages/didcomm/src/DidCommEnvelopeService.ts index e436cda325..ce8c9afaae 100644 --- a/packages/didcomm/src/DidCommEnvelopeService.ts +++ b/packages/didcomm/src/DidCommEnvelopeService.ts @@ -11,7 +11,7 @@ import { import type { DidCommMessage } from './DidCommMessage' import type { DidCommEncryptedMessage, DidCommPlaintextMessage } from './types' -import { Logger, injectable } from '@credo-ts/core' +import { type Logger, injectable } from '@credo-ts/core' import { DidCommModuleConfig } from './DidCommModuleConfig' import { getResolvedDidcommServiceWithSigningKeyId } from './modules/connections/services/helpers' diff --git a/packages/didcomm/src/DidCommMessageReceiver.ts b/packages/didcomm/src/DidCommMessageReceiver.ts index cee3ecab5b..8b1da23475 100644 --- a/packages/didcomm/src/DidCommMessageReceiver.ts +++ b/packages/didcomm/src/DidCommMessageReceiver.ts @@ -6,11 +6,11 @@ import type { DidCommInboundTransport } from './transport' import type { DidCommEncryptedMessage, DidCommPlaintextMessage } from './types' import { - AgentContextProvider, + type AgentContextProvider, CredoError, InjectionSymbols, JsonTransformer, - Logger, + type Logger, inject, injectable, } from '@credo-ts/core' diff --git a/packages/didcomm/src/DidCommMessageSender.ts b/packages/didcomm/src/DidCommMessageSender.ts index 405a34a4b9..7b717e5fa8 100644 --- a/packages/didcomm/src/DidCommMessageSender.ts +++ b/packages/didcomm/src/DidCommMessageSender.ts @@ -15,7 +15,7 @@ import { EventEmitter, Kms, MessageValidator, - ResolvedDidCommService, + type ResolvedDidCommService, didKeyToEd25519PublicJwk, getPublicJwkFromVerificationMethod, injectable, @@ -32,7 +32,7 @@ import { ReturnRouteTypes } from './decorators/transport/TransportDecorator' import { MessageSendingError } from './errors' import { DidCommOutboundMessageContext, OutboundMessageSendStatus } from './models' import { DidCommDocumentService } from './services/DidCommDocumentService' -import { DidCommQueueTransportRepository } from './transport' +import type { DidCommQueueTransportRepository } from './transport' export interface TransportPriorityOptions { schemes: string[] diff --git a/packages/didcomm/src/DidCommModule.ts b/packages/didcomm/src/DidCommModule.ts index bf1f9a029a..bd317c0e41 100644 --- a/packages/didcomm/src/DidCommModule.ts +++ b/packages/didcomm/src/DidCommModule.ts @@ -17,25 +17,25 @@ import { DidCommMessageSender } from './DidCommMessageSender' import { DidCommModuleConfig } from './DidCommModuleConfig' import { DidCommTransportService } from './DidCommTransportService' import { - DefaultDidCommMessagePickupProtocols, - DefaultDidCommProofProtocols, + type DefaultDidCommMessagePickupProtocols, + type DefaultDidCommProofProtocols, DidCommBasicMessagesModule, DidCommConnectionsModule, - DidCommCredentialProtocol, + type DidCommCredentialProtocol, DidCommDiscoverFeaturesModule, DidCommMessagePickupModule, - DidCommMessagePickupModuleConfigOptions, - DidCommMessagePickupProtocol, + type DidCommMessagePickupModuleConfigOptions, + type DidCommMessagePickupProtocol, DidCommOutOfBandModule, - DidCommProofProtocol, + type DidCommProofProtocol, DidCommProofsModule, - DidCommProofsModuleConfigOptions, + type DidCommProofsModuleConfigOptions, } from './modules' import { - DefaultDidCommCredentialProtocols, + type DefaultDidCommCredentialProtocols, DidCommCredentialsModule, } from './modules/credentials/DidCommCredentialsModule' -import { DidCommCredentialsModuleConfigOptions } from './modules/credentials/DidCommCredentialsModuleConfig' +import type { DidCommCredentialsModuleConfigOptions } from './modules/credentials/DidCommCredentialsModuleConfig' import { DidCommMediationRecipientModule } from './modules/routing/DidCommMediationRecipientModule' import { DidCommMediatorModule } from './modules/routing/DidCommMediatorModule' import { DidCommMessageRepository } from './repository' diff --git a/packages/didcomm/src/DidCommModuleConfig.ts b/packages/didcomm/src/DidCommModuleConfig.ts index 5e22886d1b..0932290207 100644 --- a/packages/didcomm/src/DidCommModuleConfig.ts +++ b/packages/didcomm/src/DidCommModuleConfig.ts @@ -1,17 +1,17 @@ import { DID_COMM_TRANSPORT_QUEUE } from './constants' -import { +import type { DidCommConnectionsModuleConfigOptions, DidCommCredentialProtocol, DidCommMessagePickupModuleConfigOptions, DidCommMessagePickupProtocol, DidCommProofsModuleConfigOptions, } from './modules' -import { DidCommCredentialsModuleConfigOptions } from './modules/credentials/DidCommCredentialsModuleConfig' -import { DidCommDiscoverFeaturesModuleConfigOptions } from './modules/discover-features/DidCommDiscoverFeaturesModuleConfig' -import { DidCommProofProtocol } from './modules/proofs/protocol/DidCommProofProtocol' -import { DidCommMediationRecipientModuleConfigOptions } from './modules/routing/DidCommMediationRecipientModuleConfig' -import { DidCommMediatorModuleConfigOptions } from './modules/routing/DidCommMediatorModuleConfig' -import { DidCommQueueTransportRepository, InMemoryQueueTransportRepository } from './transport' +import type { DidCommCredentialsModuleConfigOptions } from './modules/credentials/DidCommCredentialsModuleConfig' +import type { DidCommDiscoverFeaturesModuleConfigOptions } from './modules/discover-features/DidCommDiscoverFeaturesModuleConfig' +import type { DidCommProofProtocol } from './modules/proofs/protocol/DidCommProofProtocol' +import type { DidCommMediationRecipientModuleConfigOptions } from './modules/routing/DidCommMediationRecipientModuleConfig' +import type { DidCommMediatorModuleConfigOptions } from './modules/routing/DidCommMediatorModuleConfig' +import { type DidCommQueueTransportRepository, InMemoryQueueTransportRepository } from './transport' import { DidCommMimeType } from './types' export interface DidCommModuleConfigOptions { diff --git a/packages/didcomm/src/__tests__/DidCommDispatcher.test.ts b/packages/didcomm/src/__tests__/DidCommDispatcher.test.ts index 6120b93265..976c7fd5f1 100644 --- a/packages/didcomm/src/__tests__/DidCommDispatcher.test.ts +++ b/packages/didcomm/src/__tests__/DidCommDispatcher.test.ts @@ -1,5 +1,6 @@ import { Subject } from 'rxjs' +import type { MockedClassConstructor } from '../../../../tests/types' import { EventEmitter } from '../../../core/src/agent/EventEmitter' import { getAgentConfig, getAgentContext } from '../../../core/tests/helpers' import { DidCommDispatcher } from '../DidCommDispatcher' @@ -8,10 +9,10 @@ import { DidCommMessageHandlerRegistry } from '../DidCommMessageHandlerRegistry' import { DidCommMessageSender } from '../DidCommMessageSender' import { getOutboundDidCommMessageContext } from '../getDidCommOutboundMessageContext' import { DidCommInboundMessageContext } from '../models' -import { type DidCommConnectionRecord } from '../modules/connections' +import type { DidCommConnectionRecord } from '../modules/connections' import { parseMessageType } from '../util/messageType' -jest.mock('../DidCommMessageSender') +vi.mock('../DidCommMessageSender') class CustomProtocolMessage extends DidCommMessage { public readonly type = CustomProtocolMessage.type.messageTypeUri @@ -29,7 +30,7 @@ class CustomProtocolMessage extends DidCommMessage { describe('DidCommDispatcher', () => { const agentConfig = getAgentConfig('DispatcherTest') const agentContext = getAgentContext() - const MessageSenderMock = DidCommMessageSender as jest.Mock + const MessageSenderMock = DidCommMessageSender as MockedClassConstructor const eventEmitter = new EventEmitter(agentConfig.agentDependencies, new Subject()) describe('dispatch()', () => { @@ -44,7 +45,7 @@ describe('DidCommDispatcher', () => { const customProtocolMessage = new CustomProtocolMessage({}) const inboundMessageContext = new DidCommInboundMessageContext(customProtocolMessage, { agentContext }) - const mockHandle = jest.fn() + const mockHandle = vi.fn() messageHandlerRegistry.registerMessageHandler({ supportedMessages: [CustomProtocolMessage], handle: mockHandle }) await dispatcher.dispatch(inboundMessageContext) @@ -65,7 +66,7 @@ describe('DidCommDispatcher', () => { }) const inboundMessageContext = new DidCommInboundMessageContext(customProtocolMessage, { agentContext }) - const mockHandle = jest.fn() + const mockHandle = vi.fn() messageHandlerRegistry.registerMessageHandler({ supportedMessages: [], handle: mockHandle }) await expect(dispatcher.dispatch(inboundMessageContext)).rejects.toThrow( @@ -94,8 +95,8 @@ describe('DidCommDispatcher', () => { }) const inboundMessageContext = new DidCommInboundMessageContext(customProtocolMessage, { agentContext }) - const firstMiddleware = jest.fn().mockImplementation(async (_, next) => next()) - const secondMiddleware = jest.fn() + const firstMiddleware = vi.fn().mockImplementation(async (_, next) => next()) + const secondMiddleware = vi.fn() agentContext.dependencyManager .resolve(DidCommMessageHandlerRegistry) .registerMessageHandlerMiddleware(firstMiddleware) @@ -135,8 +136,8 @@ describe('DidCommDispatcher', () => { }) const inboundMessageContext = new DidCommInboundMessageContext(customProtocolMessage, { agentContext }) - const firstMiddleware = jest.fn().mockImplementation(async (_, next) => next()) - const secondMiddleware = jest.fn() + const firstMiddleware = vi.fn().mockImplementation(async (_, next) => next()) + const secondMiddleware = vi.fn() agentContext.dependencyManager .resolve(DidCommMessageHandlerRegistry) .registerMessageHandlerMiddleware(firstMiddleware) @@ -176,7 +177,7 @@ describe('DidCommDispatcher', () => { }) const inboundMessageContext = new DidCommInboundMessageContext(customProtocolMessage, { agentContext }) - const fallbackMessageHandler = jest.fn() + const fallbackMessageHandler = vi.fn() agentContext.dependencyManager .resolve(DidCommMessageHandlerRegistry) .setFallbackMessageHandler(fallbackMessageHandler) @@ -207,7 +208,7 @@ describe('DidCommDispatcher', () => { }) const inboundMessageContext = new DidCommInboundMessageContext(customProtocolMessage, { agentContext }) - const mockHandle = jest.fn() + const mockHandle = vi.fn() agentContext.dependencyManager.resolve(DidCommMessageHandlerRegistry).registerMessageHandlers([ { supportedMessages: [CustomProtocolMessage], @@ -215,7 +216,7 @@ describe('DidCommDispatcher', () => { }, ]) - const middleware = jest.fn() + const middleware = vi.fn() agentContext.dependencyManager.resolve(DidCommMessageHandlerRegistry).registerMessageHandlerMiddleware(middleware) await dispatcher.dispatch(inboundMessageContext) expect(mockHandle).not.toHaveBeenCalled() @@ -247,8 +248,8 @@ describe('DidCommDispatcher', () => { }) const inboundMessageContext = new DidCommInboundMessageContext(customProtocolMessage, { agentContext }) - const handle = jest.fn() - const middleware = jest + const handle = vi.fn() + const middleware = vi .fn() .mockImplementationOnce(async (inboundMessageContext: DidCommInboundMessageContext, next) => { inboundMessageContext.messageHandler = { @@ -284,7 +285,7 @@ describe('DidCommDispatcher', () => { agentConfig.logger ) - const connectionMock = jest.fn() as unknown as DidCommConnectionRecord + const connectionMock = vi.fn() as unknown as DidCommConnectionRecord const customProtocolMessage = new CustomProtocolMessage({ id: '55170d10-b91f-4df2-9dcd-6deb4e806c1b', @@ -294,20 +295,18 @@ describe('DidCommDispatcher', () => { connection: connectionMock, }) - const middleware = jest - .fn() - .mockImplementationOnce(async (inboundMessageContext: DidCommInboundMessageContext) => { - // We do not call next - inboundMessageContext.responseMessage = await getOutboundDidCommMessageContext( - inboundMessageContext.agentContext, - { - message: new CustomProtocolMessage({ - id: 'static-id', - }), - connectionRecord: inboundMessageContext.connection, - } - ) - }) + const middleware = vi.fn().mockImplementationOnce(async (inboundMessageContext: DidCommInboundMessageContext) => { + // We do not call next + inboundMessageContext.responseMessage = await getOutboundDidCommMessageContext( + inboundMessageContext.agentContext, + { + message: new CustomProtocolMessage({ + id: 'static-id', + }), + connectionRecord: inboundMessageContext.connection, + } + ) + }) agentContext.dependencyManager.resolve(DidCommMessageHandlerRegistry).registerMessageHandlerMiddleware(middleware) await dispatcher.dispatch(inboundMessageContext) diff --git a/packages/didcomm/src/__tests__/DidCommMessageSender.test.ts b/packages/didcomm/src/__tests__/DidCommMessageSender.test.ts index f2fa2dc92d..1cacf97fcc 100644 --- a/packages/didcomm/src/__tests__/DidCommMessageSender.test.ts +++ b/packages/didcomm/src/__tests__/DidCommMessageSender.test.ts @@ -20,7 +20,7 @@ import { getMockConnection, mockFunction, } from '../../../core/tests/helpers' -import { DidCommEnvelopeService as EnvelopeServiceImpl } from '../DidCommEnvelopeService' +import { DidCommEnvelopeService } from '../DidCommEnvelopeService' import { DidCommEventTypes } from '../DidCommEvents' import { DidCommMessageSender } from '../DidCommMessageSender' import { DidCommTransportService } from '../DidCommTransportService' @@ -28,18 +28,20 @@ import { ReturnRouteTypes } from '../decorators/transport/TransportDecorator' import { DidCommOutboundMessageContext, OutboundMessageSendStatus } from '../models' import { DidCommDocumentService } from '../services/DidCommDocumentService' -import { AgentConfig, Kms, TypedArrayEncoder } from '../../../core' +import type { MockedClassConstructor } from '../../../../tests/types' +import { AgentConfig, Kms, TypedArrayEncoder } from '../../../core/src/index' import { DidCommModuleConfig } from '../DidCommModuleConfig' import { DummyTransportSession } from './stubs' -jest.mock('../DidCommTransportService') -jest.mock('../DidCommEnvelopeService') -jest.mock('../../../core/src/modules/dids/DidsApi') -jest.mock('../services/DidCommDocumentService') +vi.mock('../DidCommTransportService') +vi.mock('../DidCommEnvelopeService') +vi.mock('../../../core/src/modules/dids/DidsApi') +vi.mock('../services/DidCommDocumentService') -const TransportServiceMock = DidCommTransportService as jest.MockedClass -const DidsApiMock = DidsApi as jest.Mock -const DidCommDocumentServiceMock = DidCommDocumentService as jest.Mock +const TransportServiceMock = DidCommTransportService as MockedClassConstructor +const DidsApiMock = DidsApi as MockedClassConstructor +const DidCommDocumentServiceMock = DidCommDocumentService as MockedClassConstructor +const DidCommEnvelopeServiceMock = DidCommEnvelopeService as MockedClassConstructor class DummyHttpOutboundTransport implements DidCommOutboundTransport { public start(): Promise { @@ -74,8 +76,6 @@ class DummyWsOutboundTransport implements DidCommOutboundTransport { } describe('DidCommMessageSender', () => { - const DidCommEnvelopeService = >(EnvelopeServiceImpl) - const encryptedMessage: DidCommEncryptedMessage = { protected: 'base64url', iv: 'base64url', @@ -83,7 +83,7 @@ describe('DidCommMessageSender', () => { tag: 'base64url', } - const enveloperService = new DidCommEnvelopeService() + const enveloperService = new DidCommEnvelopeServiceMock() const envelopeServicePackMessageMock = mockFunction(enveloperService.packMessage) const didsApi = new DidsApiMock() @@ -113,11 +113,11 @@ describe('DidCommMessageSender', () => { senderKey: senderKey, } session.inboundMessage = inboundMessage - session.send = jest.fn() + session.send = vi.fn() const sessionWithoutKeys = new DummyTransportSession('sessionWithoutKeys-123') sessionWithoutKeys.inboundMessage = inboundMessage - sessionWithoutKeys.send = jest.fn() + sessionWithoutKeys.send = vi.fn() const transportService = new DidCommTransportService(getAgentContext(), eventEmitter) const transportServiceFindSessionMock = mockFunction(transportService.findSessionByConnectionId) @@ -146,7 +146,7 @@ describe('DidCommMessageSender', () => { [AgentConfig, agentConfig], ], }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() describe('sendMessage', () => { beforeEach(() => { @@ -190,7 +190,7 @@ describe('DidCommMessageSender', () => { afterEach(() => { eventEmitter.off(DidCommEventTypes.DidCommMessageSent, eventListenerMock) - jest.resetAllMocks() + vi.resetAllMocks() }) test('throw error when there is no outbound transport', async () => { @@ -236,10 +236,10 @@ describe('DidCommMessageSender', () => { test('call send message when session send method fails', async () => { messageSender.registerOutboundTransport(outboundTransport) transportServiceFindSessionMock.mockReturnValue(session) - session.send = jest.fn().mockRejectedValue(new Error('some error')) + session.send = vi.fn().mockRejectedValue(new Error('some error')) messageSender.registerOutboundTransport(outboundTransport) - const sendMessageSpy = jest.spyOn(outboundTransport, 'sendMessage') + const sendMessageSpy = vi.spyOn(outboundTransport, 'sendMessage') await messageSender.sendMessage(outboundMessageContext) @@ -266,7 +266,7 @@ describe('DidCommMessageSender', () => { test("resolves the did service using the did resolver if connection.theirDid starts with 'did:'", async () => { messageSender.registerOutboundTransport(outboundTransport) - const sendMessageSpy = jest.spyOn(outboundTransport, 'sendMessage') + const sendMessageSpy = vi.spyOn(outboundTransport, 'sendMessage') await messageSender.sendMessage(outboundMessageContext) @@ -319,7 +319,7 @@ describe('DidCommMessageSender', () => { transportServiceFindSessionMock.mockReturnValue(sessionWithoutKeys) messageSender.registerOutboundTransport(outboundTransport) - const sendMessageSpy = jest.spyOn(outboundTransport, 'sendMessage') + const sendMessageSpy = vi.spyOn(outboundTransport, 'sendMessage') await messageSender.sendMessage(outboundMessageContext) @@ -346,9 +346,9 @@ describe('DidCommMessageSender', () => { test('call send message on session when outbound message has sessionId attached', async () => { transportServiceFindSessionByIdMock.mockReturnValue(session) messageSender.registerOutboundTransport(outboundTransport) - const sendMessageSpy = jest.spyOn(outboundTransport, 'sendMessage') + const sendMessageSpy = vi.spyOn(outboundTransport, 'sendMessage') // @ts-ignore - const sendMessageToServiceSpy = jest.spyOn(messageSender, 'sendMessageToService') + const sendMessageToServiceSpy = vi.spyOn(messageSender, 'sendMessageToService') const contextWithSessionId = new DidCommOutboundMessageContext(outboundMessageContext.message, { agentContext: outboundMessageContext.agentContext, @@ -378,9 +378,9 @@ describe('DidCommMessageSender', () => { test('call send message on session when there is a session for a given connection', async () => { messageSender.registerOutboundTransport(outboundTransport) - const sendMessageSpy = jest.spyOn(outboundTransport, 'sendMessage') + const sendMessageSpy = vi.spyOn(outboundTransport, 'sendMessage') //@ts-ignore - const sendToServiceSpy = jest.spyOn(messageSender, 'sendToService') + const sendToServiceSpy = vi.spyOn(messageSender, 'sendToService') await messageSender.sendMessage(outboundMessageContext) @@ -426,9 +426,9 @@ describe('DidCommMessageSender', () => { test('calls sendToService with payload and endpoint from second DidComm service when the first fails', async () => { messageSender.registerOutboundTransport(outboundTransport) - const sendMessageSpy = jest.spyOn(outboundTransport, 'sendMessage') + const sendMessageSpy = vi.spyOn(outboundTransport, 'sendMessage') //@ts-ignore - const sendToServiceSpy = jest.spyOn(messageSender, 'sendToService') + const sendToServiceSpy = vi.spyOn(messageSender, 'sendToService') // Simulate the case when the first call fails sendMessageSpy.mockRejectedValueOnce(new Error()) @@ -530,7 +530,7 @@ describe('DidCommMessageSender', () => { }) afterEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() eventEmitter.off(DidCommEventTypes.DidCommMessageSent, eventListenerMock) }) @@ -560,7 +560,7 @@ describe('DidCommMessageSender', () => { test('calls send message with payload and endpoint from DIDComm service', async () => { messageSender.registerOutboundTransport(outboundTransport) - const sendMessageSpy = jest.spyOn(outboundTransport, 'sendMessage') + const sendMessageSpy = vi.spyOn(outboundTransport, 'sendMessage') outboundMessageContext = new DidCommOutboundMessageContext(new TestMessage(), { agentContext, @@ -593,7 +593,7 @@ describe('DidCommMessageSender', () => { test('call send message with responseRequested when message has return route', async () => { messageSender.registerOutboundTransport(outboundTransport) - const sendMessageSpy = jest.spyOn(outboundTransport, 'sendMessage') + const sendMessageSpy = vi.spyOn(outboundTransport, 'sendMessage') const message = new TestMessage() message.setReturnRouting(ReturnRouteTypes.all) @@ -669,7 +669,7 @@ describe('DidCommMessageSender', () => { }) afterEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() }) test('return outbound message context with connection, payload and endpoint', async () => { diff --git a/packages/didcomm/src/decorators/attachment/DidCommAttachment.ts b/packages/didcomm/src/decorators/attachment/DidCommAttachment.ts index 7b1b41d39a..a8fd69a883 100644 --- a/packages/didcomm/src/decorators/attachment/DidCommAttachment.ts +++ b/packages/didcomm/src/decorators/attachment/DidCommAttachment.ts @@ -1,6 +1,6 @@ import type { JwsDetachedFormat, JwsFlattenedDetachedFormat, JwsGeneralFormat } from '@credo-ts/core' -import { CredoError, JsonEncoder, JsonValue, utils } from '@credo-ts/core' +import { CredoError, JsonEncoder, type JsonValue, utils } from '@credo-ts/core' import { Expose, Type } from 'class-transformer' import { IsDate, IsHash, IsInstance, IsInt, IsMimeType, IsOptional, IsString, ValidateNested } from 'class-validator' diff --git a/packages/didcomm/src/decorators/signature/SignatureDecoratorUtils.test.ts b/packages/didcomm/src/decorators/signature/SignatureDecoratorUtils.test.ts index 29c06d5d13..433ce27f16 100644 --- a/packages/didcomm/src/decorators/signature/SignatureDecoratorUtils.test.ts +++ b/packages/didcomm/src/decorators/signature/SignatureDecoratorUtils.test.ts @@ -1,14 +1,14 @@ import { transformPrivateKeyToPrivateJwk } from '../../../../askar/src' -import { Kms, TypedArrayEncoder } from '../../../../core' +import { Kms, TypedArrayEncoder } from '../../../../core/src/index' import { getAgentConfig, getAgentContext } from '../../../../core/tests/helpers' import { SignatureDecorator } from './SignatureDecorator' import { signData, unpackAndVerifySignatureDecorator } from './SignatureDecoratorUtils' -jest.mock('../../../../core/src/utils/timestamp', () => { +vi.mock('../../../../core/src/utils/timestamp', () => { return { __esModule: true, - default: jest.fn(() => Uint8Array.of(0, 0, 0, 0, 0, 0, 0, 0)), + default: vi.fn(() => Uint8Array.of(0, 0, 0, 0, 0, 0, 0, 0)), } }) diff --git a/packages/didcomm/src/decorators/thread/ThreadDecorator.test.ts b/packages/didcomm/src/decorators/thread/ThreadDecorator.test.ts index ad2e646c94..361f2e4036 100644 --- a/packages/didcomm/src/decorators/thread/ThreadDecorator.test.ts +++ b/packages/didcomm/src/decorators/thread/ThreadDecorator.test.ts @@ -1,6 +1,6 @@ import { validate } from 'class-validator' -import { JsonTransformer } from '../../../../core' +import { JsonTransformer } from '../../../../core/src/index' import { ThreadDecorator } from './ThreadDecorator' diff --git a/packages/didcomm/src/decorators/timing/TimingDecorator.test.ts b/packages/didcomm/src/decorators/timing/TimingDecorator.test.ts index 4875c2c034..b0e3b08f67 100644 --- a/packages/didcomm/src/decorators/timing/TimingDecorator.test.ts +++ b/packages/didcomm/src/decorators/timing/TimingDecorator.test.ts @@ -1,4 +1,4 @@ -import { JsonTransformer } from '../../../../core' +import { JsonTransformer } from '../../../../core/src/index' import { TimingDecorator } from './TimingDecorator' diff --git a/packages/didcomm/src/decorators/transport/TransportDecorator.test.ts b/packages/didcomm/src/decorators/transport/TransportDecorator.test.ts index 3d7590ffcf..95c4d1c015 100644 --- a/packages/didcomm/src/decorators/transport/TransportDecorator.test.ts +++ b/packages/didcomm/src/decorators/transport/TransportDecorator.test.ts @@ -1,4 +1,4 @@ -import { ClassValidationError, JsonTransformer, MessageValidator } from '../../../../core' +import { ClassValidationError, JsonTransformer, MessageValidator } from '../../../../core/src/index' import { ReturnRouteTypes, TransportDecorator } from './TransportDecorator' diff --git a/packages/didcomm/src/getDidCommOutboundMessageContext.ts b/packages/didcomm/src/getDidCommOutboundMessageContext.ts index 83edafe52d..a85ea7898c 100644 --- a/packages/didcomm/src/getDidCommOutboundMessageContext.ts +++ b/packages/didcomm/src/getDidCommOutboundMessageContext.ts @@ -9,10 +9,10 @@ import { CredoError, Kms, utils } from '@credo-ts/core' import { ServiceDecorator } from './decorators/service/ServiceDecorator' import { DidCommOutboundMessageContext } from './models' import { + DidCommInvitationType, DidCommOutOfBandRepository, DidCommOutOfBandRole, DidCommOutOfBandService, - InvitationType, } from './modules/oob' import { DidCommOutOfBandRecordMetadataKeys } from './modules/oob/repository/outOfBandRecordMetadataTypes' import { DidCommRoutingService } from './modules/routing' @@ -329,7 +329,7 @@ async function addExchangeDataToMessage( // Set the parentThreadId on the message from the oob invitation // If connectionless is used, we should not add the parentThreadId - if (outOfBandRecord && legacyInvitationMetadata?.legacyInvitationType !== InvitationType.Connectionless) { + if (outOfBandRecord && legacyInvitationMetadata?.legacyInvitationType !== DidCommInvitationType.Connectionless) { if (!message.thread) { message.setThread({ parentThreadId: outOfBandRecord.outOfBandInvitation.id, diff --git a/packages/didcomm/src/handlers/index.ts b/packages/didcomm/src/handlers/index.ts index 275e00fdbe..93637b285e 100644 --- a/packages/didcomm/src/handlers/index.ts +++ b/packages/didcomm/src/handlers/index.ts @@ -1,5 +1,5 @@ -export { DidCommMessageHandler, DidCommMessageHandlerInboundMessage } from './DidCommMessageHandler' +export type { DidCommMessageHandler, DidCommMessageHandlerInboundMessage } from './DidCommMessageHandler' export { - DidCommMessageHandlerMiddleware, + type DidCommMessageHandlerMiddleware, DidCommMessageHandlerMiddlewareRunner, } from './DidCommMessageHandlerMiddleware' diff --git a/packages/didcomm/src/index.ts b/packages/didcomm/src/index.ts index d758684820..50cf54509e 100644 --- a/packages/didcomm/src/index.ts +++ b/packages/didcomm/src/index.ts @@ -12,7 +12,7 @@ export * from './DidCommEvents' export type { DidCommTransportSession } from './DidCommTransportService' export { DidCommTransportService } from './DidCommTransportService' export { DidCommAttachment, DidCommAttachmentData } from './decorators/attachment/DidCommAttachment' -export { ServiceDecorator, ServiceDecoratorOptions } from './decorators/service/ServiceDecorator' +export { ServiceDecorator, type ServiceDecoratorOptions } from './decorators/service/ServiceDecorator' export { ReturnRouteTypes } from './decorators/transport/TransportDecorator' export { AckDecorator } from './decorators/ack/AckDecorator' @@ -26,7 +26,7 @@ export { DidCommMessageHandlerRegistry } from './DidCommMessageHandlerRegistry' export { DidCommApi } from './DidCommApi' export { DidCommModule } from './DidCommModule' -export { DidCommModuleConfig, DidCommModuleConfigOptions } from './DidCommModuleConfig' +export { DidCommModuleConfig, type DidCommModuleConfigOptions } from './DidCommModuleConfig' export { getOutboundDidCommMessageContext } from './getDidCommOutboundMessageContext' @@ -37,7 +37,7 @@ export { replaceLegacyDidSovPrefix, } from './util/messageType' -export { DidCommLinkedAttachment, DidCommLinkedAttachmentOptions } from './util/DidCommLinkedAttachment' +export { DidCommLinkedAttachment, type DidCommLinkedAttachmentOptions } from './util/DidCommLinkedAttachment' export { oobInvitationFromShortUrl, parseInvitationUrl, parseInvitationShortUrl } from './util/parseInvitation' export { encodeAttachment, isLinkedAttachment } from './util/attachment' export { isValidJweStructure } from './util/JWE' diff --git a/packages/didcomm/src/modules/basic-messages/__tests__/BasicMessageService.test.ts b/packages/didcomm/src/modules/basic-messages/__tests__/BasicMessageService.test.ts index fbbf2204f6..aae8a0dd71 100644 --- a/packages/didcomm/src/modules/basic-messages/__tests__/BasicMessageService.test.ts +++ b/packages/didcomm/src/modules/basic-messages/__tests__/BasicMessageService.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../tests/types' import { EventEmitter } from '../../../../../core/src/agent/EventEmitter' import { getAgentContext, getMockConnection } from '../../../../../core/tests/helpers' import { DidCommInboundMessageContext } from '../../../models' @@ -7,12 +8,14 @@ import { DidCommBasicMessageRecord } from '../repository/DidCommBasicMessageReco import { DidCommBasicMessageRepository } from '../repository/DidCommBasicMessageRepository' import { DidCommBasicMessageService } from '../services' -jest.mock('../repository/DidCommBasicMessageRepository') -const BasicMessageRepositoryMock = DidCommBasicMessageRepository as jest.Mock +vi.mock('../repository/DidCommBasicMessageRepository') +const BasicMessageRepositoryMock = DidCommBasicMessageRepository as MockedClassConstructor< + typeof DidCommBasicMessageRepository +> const basicMessageRepository = new BasicMessageRepositoryMock() -jest.mock('../../../../../core/src/agent/EventEmitter') -const EventEmitterMock = EventEmitter as jest.Mock +vi.mock('../../../../../core/src/agent/EventEmitter') +const EventEmitterMock = EventEmitter as MockedClassConstructor const eventEmitter = new EventEmitterMock() const agentContext = getAgentContext() diff --git a/packages/didcomm/src/modules/basic-messages/__tests__/BasicMessagesModule.test.ts b/packages/didcomm/src/modules/basic-messages/__tests__/BasicMessagesModule.test.ts index abbba311f1..d61f3d8a72 100644 --- a/packages/didcomm/src/modules/basic-messages/__tests__/BasicMessagesModule.test.ts +++ b/packages/didcomm/src/modules/basic-messages/__tests__/BasicMessagesModule.test.ts @@ -6,13 +6,13 @@ import { DidCommBasicMessageRepository } from '../repository' import { DidCommBasicMessageService } from '../services' const featureRegistry = { - register: jest.fn(), + register: vi.fn(), } as unknown as DidCommFeatureRegistry const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), resolve: () => featureRegistry, } as unknown as DependencyManager diff --git a/packages/didcomm/src/modules/basic-messages/__tests__/basic-messages.test.ts b/packages/didcomm/src/modules/basic-messages/__tests__/basic-messages.test.ts index 23a5a9ed43..9d5e322eb8 100644 --- a/packages/didcomm/src/modules/basic-messages/__tests__/basic-messages.test.ts +++ b/packages/didcomm/src/modules/basic-messages/__tests__/basic-messages.test.ts @@ -145,7 +145,7 @@ describe('Basic Messages E2E', () => { test('Alice is unable to send a message', async () => { testLogger.test('Alice sends message to Faber that is undeliverable') - const spy = jest + const spy = vi .spyOn(aliceAgent.didcomm.outboundTransports[0], 'sendMessage') .mockRejectedValue(new Error('any error')) diff --git a/packages/didcomm/src/modules/basic-messages/repository/DidCommBasicMessageRepository.ts b/packages/didcomm/src/modules/basic-messages/repository/DidCommBasicMessageRepository.ts index 609db4b31a..26864b6653 100644 --- a/packages/didcomm/src/modules/basic-messages/repository/DidCommBasicMessageRepository.ts +++ b/packages/didcomm/src/modules/basic-messages/repository/DidCommBasicMessageRepository.ts @@ -1,4 +1,4 @@ -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { DidCommBasicMessageRecord } from './DidCommBasicMessageRecord' diff --git a/packages/didcomm/src/modules/connections/DidExchangeProtocol.ts b/packages/didcomm/src/modules/connections/DidExchangeProtocol.ts index 3c2add48a4..8b1d8bebb2 100644 --- a/packages/didcomm/src/modules/connections/DidExchangeProtocol.ts +++ b/packages/didcomm/src/modules/connections/DidExchangeProtocol.ts @@ -15,7 +15,7 @@ import { JsonTransformer, JwsService, Kms, - Logger, + type Logger, PeerDidNumAlgo, TypedArrayEncoder, base64ToBase64URL, @@ -32,7 +32,7 @@ import { import { DidCommAttachment, DidCommAttachmentData } from '../../decorators/attachment/DidCommAttachment' import { DidCommInboundMessageContext } from '../../models' -import { ParsedMessageType } from '../../util/messageType' +import type { ParsedMessageType } from '../../util/messageType' import { DidCommOutOfBandRole } from '../oob/domain/DidCommOutOfBandRole' import { DidCommOutOfBandState } from '../oob/domain/DidCommOutOfBandState' import { getMediationRecordForDidDocument } from '../routing/services/helpers' diff --git a/packages/didcomm/src/modules/connections/__tests__/ConnectionInvitationMessage.test.ts b/packages/didcomm/src/modules/connections/__tests__/ConnectionInvitationMessage.test.ts index 2c1ef68d37..585f2cf990 100644 --- a/packages/didcomm/src/modules/connections/__tests__/ConnectionInvitationMessage.test.ts +++ b/packages/didcomm/src/modules/connections/__tests__/ConnectionInvitationMessage.test.ts @@ -99,21 +99,21 @@ describe('DidCommConnectionInvitationMessage', () => { }) describe('fromUrl', () => { - it('should correctly convert a valid invitation url to a `DidCommConnectionInvitationMessage` with `d_m` as parameter', () => { + it('should correctly convert a valid invitation url to a `DidCommConnectionInvitationMessage` with `d_m` as parameter', async () => { const invitationUrl = 'https://trinsic.studio/link/?d_m=eyJsYWJlbCI6InRlc3QiLCJpbWFnZVVybCI6Imh0dHBzOi8vdHJpbnNpY2FwaWFzc2V0cy5henVyZWVkZ2UubmV0L2ZpbGVzL2IyODhkMTE3LTNjMmMtNGFjNC05MzVhLWE1MDBkODQzYzFlOV9kMGYxN2I0OS0wNWQ5LTQ4ZDAtODJlMy1jNjg3MGI4MjNjMTUucG5nIiwic2VydmljZUVuZHBvaW50IjoiaHR0cHM6Ly9hcGkucG9ydGFsLnN0cmVldGNyZWQuaWQvYWdlbnQvTVZob1VaQjlHdUl6bVJzSTNIWUNuZHpBcXVKY1ZNdFUiLCJyb3V0aW5nS2V5cyI6WyJCaFZRdEZHdGJ4NzZhMm13Y3RQVkJuZWtLaG1iMTdtUHdFMktXWlVYTDFNaSJdLCJyZWNpcGllbnRLZXlzIjpbIkcyOVF6bXBlVXN0dUVHYzlXNzlYNnV2aUhTUTR6UlV2VWFFOHpXV2VZYjduIl0sIkBpZCI6IjgxYzZiNDUzLWNkMTUtNDQwMC04MWU5LTkwZTJjM2NhY2I1NCIsIkB0eXBlIjoiZGlkOnNvdjpCekNic05ZaE1yakhpcVpEVFVBU0hnO3NwZWMvY29ubmVjdGlvbnMvMS4wL2ludml0YXRpb24ifQ%3D%3D&orig=https://trinsic.studio/url/6dd56daf-e153-40dd-b849-2b345b6853f6' const invitation = DidCommConnectionInvitationMessage.fromUrl(invitationUrl) - expect(validateOrReject(invitation)).resolves.toBeUndefined() + await expect(validateOrReject(invitation)).resolves.toBeUndefined() }) - it('should correctly convert a valid invitation url to a `DidCommConnectionInvitationMessage` with `c_i` as parameter', () => { + it('should correctly convert a valid invitation url to a `DidCommConnectionInvitationMessage` with `c_i` as parameter', async () => { const invitationUrl = 'https://example.com?c_i=eyJAdHlwZSI6ICJkaWQ6c292OkJ6Q2JzTlloTXJqSGlxWkRUVUFTSGc7c3BlYy9jb25uZWN0aW9ucy8xLjAvaW52aXRhdGlvbiIsICJAaWQiOiAiZmM3ODFlMDItMjA1YS00NGUzLWE5ZTQtYjU1Y2U0OTE5YmVmIiwgInNlcnZpY2VFbmRwb2ludCI6ICJodHRwczovL2RpZGNvbW0uZmFiZXIuYWdlbnQuYW5pbW8uaWQiLCAibGFiZWwiOiAiQW5pbW8gRmFiZXIgQWdlbnQiLCAicmVjaXBpZW50S2V5cyI6IFsiR0hGczFQdFRabjdmYU5LRGVnMUFzU3B6QVAyQmpVckVjZlR2bjc3SnBRTUQiXX0=' const invitation = DidCommConnectionInvitationMessage.fromUrl(invitationUrl) - expect(validateOrReject(invitation)).resolves.toBeUndefined() + await expect(validateOrReject(invitation)).resolves.toBeUndefined() }) it('should throw error if url does not contain `c_i` or `d_m`', () => { diff --git a/packages/didcomm/src/modules/connections/__tests__/ConnectionRepository.test.ts b/packages/didcomm/src/modules/connections/__tests__/ConnectionRepository.test.ts index 2a537478c1..cc760b0018 100644 --- a/packages/didcomm/src/modules/connections/__tests__/ConnectionRepository.test.ts +++ b/packages/didcomm/src/modules/connections/__tests__/ConnectionRepository.test.ts @@ -4,15 +4,15 @@ import { CachedStorageService, InjectionSymbols, SingleContextStorageLruCache, - StorageService, + type StorageService, } from '@credo-ts/core' import { getAgentOptions } from '../../../../../core/tests' import { DidCommDidExchangeRole, DidCommDidExchangeState } from '../models' import { DidCommConnectionRecord, DidCommConnectionRepository } from '../repository' const cache = new SingleContextStorageLruCache({ limit: 500 }) -const cacheSetSpy = jest.spyOn(cache, 'set') -const cacheGetSpy = jest.spyOn(cache, 'get') +const cacheSetSpy = vi.spyOn(cache, 'set') +const cacheGetSpy = vi.spyOn(cache, 'get') const agentOptions = getAgentOptions( 'Agent Connection Repository', @@ -51,7 +51,7 @@ describe('ConnectionRepository', () => { const storageService = agent.context.resolve>( InjectionSymbols.StorageService ) - const storageServiceGetByIdSpy = jest.spyOn(storageService, 'getById') + const storageServiceGetByIdSpy = vi.spyOn(storageService, 'getById') const connectionRecord = new DidCommConnectionRecord({ role: DidCommDidExchangeRole.Requester, @@ -87,7 +87,7 @@ describe('ConnectionRepository', () => { const storageService = agent.context.resolve>( InjectionSymbols.StorageService ) - const storageServiceFindByQuerySpy = jest.spyOn(storageService, 'findByQuery') + const storageServiceFindByQuerySpy = vi.spyOn(storageService, 'findByQuery') const foundConnectionRecord2 = await connectionRepository.findByDids(agent.context, dids) expect(foundConnectionRecord2).toEqual(foundConnectionRecord) diff --git a/packages/didcomm/src/modules/connections/__tests__/ConnectionService.test.ts b/packages/didcomm/src/modules/connections/__tests__/ConnectionService.test.ts index 5abe5c7f44..b29b5a0c19 100644 --- a/packages/didcomm/src/modules/connections/__tests__/ConnectionService.test.ts +++ b/packages/didcomm/src/modules/connections/__tests__/ConnectionService.test.ts @@ -3,8 +3,9 @@ import type { DidCommRouting } from '../../../models' import { Subject } from 'rxjs' -import { Kms, TypedArrayEncoder } from '../../../../../core' +import type { MockedClassConstructor } from '../../../../../../tests/types' import { EventEmitter } from '../../../../../core/src/agent/EventEmitter' +import { Kms, TypedArrayEncoder } from '../../../../../core/src/index' import { DidKey, IndyAgentService } from '../../../../../core/src/modules/dids' import { DidDocumentRole } from '../../../../../core/src/modules/dids/domain/DidDocumentRole' import { DidCommV1Service } from '../../../../../core/src/modules/dids/domain/service/DidCommV1Service' @@ -44,14 +45,16 @@ import { DidCommConnectionRepository } from '../repository' import { DidCommConnectionService } from '../services' import { convertToNewDidDocument } from '../services/helpers' -jest.mock('../repository/DidCommConnectionRepository') -jest.mock('../../oob/repository/DidCommOutOfBandRepository') -jest.mock('../../oob/DidCommOutOfBandService') -jest.mock('../../../../../core/src/modules/dids/repository/DidRepository') -const ConnectionRepositoryMock = DidCommConnectionRepository as jest.Mock -const OutOfBandRepositoryMock = DidCommOutOfBandRepository as jest.Mock -const OutOfBandServiceMock = DidCommOutOfBandService as jest.Mock -const DidRepositoryMock = DidRepository as jest.Mock +vi.mock('../repository/DidCommConnectionRepository') +vi.mock('../../oob/repository/DidCommOutOfBandRepository') +vi.mock('../../oob/DidCommOutOfBandService') +vi.mock('../../../../../core/src/modules/dids/repository/DidRepository') +const ConnectionRepositoryMock = DidCommConnectionRepository as MockedClassConstructor< + typeof DidCommConnectionRepository +> +const OutOfBandRepositoryMock = DidCommOutOfBandRepository as MockedClassConstructor +const OutOfBandServiceMock = DidCommOutOfBandService as MockedClassConstructor +const DidRepositoryMock = DidRepository as MockedClassConstructor const connectionImageUrl = 'https://example.com/image.png' @@ -109,14 +112,12 @@ describe('DidCommConnectionService', () => { } mockFunction(didRepository.getById).mockResolvedValue( - Promise.resolve( - new DidRecord({ - did: 'did:peer:123', - role: DidDocumentRole.Created, - }) - ) + new DidRecord({ + did: 'did:peer:123', + role: DidDocumentRole.Created, + }) ) - mockFunction(didRepository.findByQuery).mockResolvedValue(Promise.resolve([])) + mockFunction(didRepository.findByQuery).mockResolvedValue([]) }) describe('createRequest', () => { @@ -393,7 +394,7 @@ describe('DidCommConnectionService', () => { it(`throws an error when out-of-band role is not ${DidCommOutOfBandRole.Sender}`, async () => { expect.assertions(1) - const inboundMessage = new DidCommInboundMessageContext(jest.fn()(), { + const inboundMessage = new DidCommInboundMessageContext(vi.fn()(), { agentContext, recipientKey: Kms.PublicJwk.fromPublicKey({ kty: 'OKP', @@ -427,7 +428,7 @@ describe('DidCommConnectionService', () => { (state) => { expect.assertions(1) - const inboundMessage = new DidCommInboundMessageContext(jest.fn()(), { agentContext }) + const inboundMessage = new DidCommInboundMessageContext(vi.fn()(), { agentContext }) const outOfBand = getMockOutOfBand({ role: DidCommOutOfBandRole.Sender, state }) return expect(connectionService.processRequest(inboundMessage, outOfBand)).rejects.toThrow( @@ -615,7 +616,7 @@ describe('DidCommConnectionService', () => { role: DidCommDidExchangeRole.Responder, state: DidCommDidExchangeState.RequestSent, }) - const messageContext = new DidCommInboundMessageContext(jest.fn()(), { + const messageContext = new DidCommInboundMessageContext(vi.fn()(), { agentContext, connection: connectionRecord, recipientKey: Kms.PublicJwk.fromPublicKey({ diff --git a/packages/didcomm/src/modules/connections/__tests__/ConnectionsModule.test.ts b/packages/didcomm/src/modules/connections/__tests__/ConnectionsModule.test.ts index 43533ca24a..b84cdaf7b1 100644 --- a/packages/didcomm/src/modules/connections/__tests__/ConnectionsModule.test.ts +++ b/packages/didcomm/src/modules/connections/__tests__/ConnectionsModule.test.ts @@ -18,9 +18,9 @@ import { DidCommDidRotateService } from '../services/DidCommDidRotateService' describe('DidCommConnectionsModule', () => { test('registers dependencies on the dependency manager', () => { const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), } as unknown as DependencyManager const connectionsModule = new DidCommConnectionsModule() diff --git a/packages/didcomm/src/modules/connections/__tests__/did-rotate.test.ts b/packages/didcomm/src/modules/connections/__tests__/did-rotate.test.ts index 6eb4d23834..3ac02b743a 100644 --- a/packages/didcomm/src/modules/connections/__tests__/did-rotate.test.ts +++ b/packages/didcomm/src/modules/connections/__tests__/did-rotate.test.ts @@ -386,7 +386,7 @@ describe('Rotation E2E tests', () => { }) // If Bob attempts to send a message to Alice after they received the hangup, framework should reject it - expect( + await expect( // biome-ignore lint/style/noNonNullAssertion: bobAgent.didcomm.basicMessages.sendMessage(bobAliceConnection?.id!, 'Message after hangup') ).rejects.toThrow() @@ -419,7 +419,7 @@ describe('Rotation E2E tests', () => { // Verify that alice connection has been effectively deleted // biome-ignore lint/style/noNonNullAssertion: - expect(aliceAgent.didcomm.connections.getById(aliceBobConnection?.id!)).rejects.toThrow(RecordNotFoundError) + await expect(aliceAgent.didcomm.connections.getById(aliceBobConnection?.id!)).rejects.toThrow(RecordNotFoundError) // Wait for hangup await waitForAgentMessageProcessedEvent(bobAgent, { diff --git a/packages/didcomm/src/modules/connections/repository/DidCommConnectionRepository.ts b/packages/didcomm/src/modules/connections/repository/DidCommConnectionRepository.ts index f71b33bc36..215a4edaa7 100644 --- a/packages/didcomm/src/modules/connections/repository/DidCommConnectionRepository.ts +++ b/packages/didcomm/src/modules/connections/repository/DidCommConnectionRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { DidCommDidExchangeRole } from '../models' import { DidCommConnectionRecord } from './DidCommConnectionRecord' diff --git a/packages/didcomm/src/modules/connections/services/DidCommConnectionService.ts b/packages/didcomm/src/modules/connections/services/DidCommConnectionService.ts index efe6403cd4..2a9a64e24a 100644 --- a/packages/didcomm/src/modules/connections/services/DidCommConnectionService.ts +++ b/packages/didcomm/src/modules/connections/services/DidCommConnectionService.ts @@ -20,7 +20,7 @@ import { InjectionSymbols, JsonTransformer, Kms, - Logger, + type Logger, TypedArrayEncoder, didDocumentJsonToNumAlgo1Did, filterContextCorrelationId, @@ -32,11 +32,11 @@ import { import { ReplaySubject, firstValueFrom } from 'rxjs' import { first, map, timeout } from 'rxjs/operators' import { signData, unpackAndVerifySignatureDecorator } from '../../../decorators/signature/SignatureDecoratorUtils' -import { DidCommRouting } from '../../../models' +import type { DidCommRouting } from '../../../models' import { DidCommOutOfBandService } from '../../oob/DidCommOutOfBandService' import { DidCommOutOfBandRole } from '../../oob/domain/DidCommOutOfBandRole' import { DidCommOutOfBandState } from '../../oob/domain/DidCommOutOfBandState' -import { InvitationType } from '../../oob/messages' +import { DidCommInvitationType } from '../../oob/messages' import { DidCommOutOfBandRepository } from '../../oob/repository' import { DidCommOutOfBandRecordMetadataKeys } from '../../oob/repository/outOfBandRecordMetadataTypes' import { DidCommConnectionEventTypes } from '../DidCommConnectionEvents' @@ -653,7 +653,7 @@ export class DidCommConnectionService { // If the original invitation was a legacy connectionless invitation, it's okay if the message does not have a pthid. if ( - legacyInvitationMetadata?.legacyInvitationType !== InvitationType.Connectionless && + legacyInvitationMetadata?.legacyInvitationType !== DidCommInvitationType.Connectionless && outOfBandRecord.outOfBandInvitation.id !== outOfBandInvitationId ) { throw new CredoError( diff --git a/packages/didcomm/src/modules/connections/services/DidCommDidRotateService.ts b/packages/didcomm/src/modules/connections/services/DidCommDidRotateService.ts index e13ab08c84..cb92d5b462 100644 --- a/packages/didcomm/src/modules/connections/services/DidCommDidRotateService.ts +++ b/packages/didcomm/src/modules/connections/services/DidCommDidRotateService.ts @@ -10,7 +10,7 @@ import { DidsApi, EventEmitter, InjectionSymbols, - Logger, + type Logger, PeerDidNumAlgo, getAlternativeDidsForPeerDid, getNumAlgoFromPeerDid, diff --git a/packages/didcomm/src/modules/connections/services/helpers.ts b/packages/didcomm/src/modules/connections/services/helpers.ts index 1e12a5669f..7c39c6b1c6 100644 --- a/packages/didcomm/src/modules/connections/services/helpers.ts +++ b/packages/didcomm/src/modules/connections/services/helpers.ts @@ -1,4 +1,4 @@ -import { AgentContext, DidDocumentKey, Kms, PeerDidNumAlgo, ResolvedDidCommService } from '@credo-ts/core' +import { AgentContext, type DidDocumentKey, Kms, PeerDidNumAlgo, type ResolvedDidCommService } from '@credo-ts/core' import type { DidCommRouting } from '../../../models' import type { DidDoc, PublicKey } from '../models' @@ -16,7 +16,7 @@ import { getEd25519VerificationKey2018, } from '@credo-ts/core' import { OutOfBandDidCommService } from '../../oob/domain/OutOfBandDidCommService' -import { DidCommOutOfBandInlineServiceKey } from '../../oob/repository/DidCommOutOfBandRecord' +import type { DidCommOutOfBandInlineServiceKey } from '../../oob/repository/DidCommOutOfBandRecord' import { EmbeddedAuthentication } from '../models' export function convertToNewDidDocument(didDoc: DidDoc, keys?: DidDocumentKey[]) { diff --git a/packages/didcomm/src/modules/credentials/DidCommCredentialsApi.ts b/packages/didcomm/src/modules/credentials/DidCommCredentialsApi.ts index 2b19fd2dc7..709c3bcc82 100644 --- a/packages/didcomm/src/modules/credentials/DidCommCredentialsApi.ts +++ b/packages/didcomm/src/modules/credentials/DidCommCredentialsApi.ts @@ -23,7 +23,7 @@ import type { DidCommCredentialProtocol } from './protocol/DidCommCredentialProt import type { CredentialFormatsFromProtocols } from './protocol/DidCommCredentialProtocolOptions' import type { DidCommCredentialExchangeRecord } from './repository/DidCommCredentialExchangeRecord' -import { AgentContext, CredoError, InjectionSymbols, Logger, inject, injectable } from '@credo-ts/core' +import { AgentContext, CredoError, InjectionSymbols, type Logger, inject, injectable } from '@credo-ts/core' import { DidCommMessage } from '../../DidCommMessage' import { DidCommMessageSender } from '../../DidCommMessageSender' diff --git a/packages/didcomm/src/modules/credentials/__tests__/CredentialsModule.test.ts b/packages/didcomm/src/modules/credentials/__tests__/CredentialsModule.test.ts index 645c00d094..fceeaaf51e 100644 --- a/packages/didcomm/src/modules/credentials/__tests__/CredentialsModule.test.ts +++ b/packages/didcomm/src/modules/credentials/__tests__/CredentialsModule.test.ts @@ -12,13 +12,13 @@ import { DidCommRevocationNotificationService } from '../protocol/revocation-not import { DidCommCredentialExchangeRepository } from '../repository' const featureRegistry = { - register: jest.fn(), + register: vi.fn(), } as unknown as DidCommFeatureRegistry const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), resolve: () => featureRegistry, } as unknown as DependencyManager @@ -48,7 +48,7 @@ describe('CredentialsModule', () => { }) test('calls register on the provided CredentialProtocols', async () => { - const registerMock = jest.fn() + const registerMock = vi.fn() const credentialProtocol = { register: registerMock, } as unknown as DidCommCredentialProtocol diff --git a/packages/didcomm/src/modules/credentials/__tests__/CredentialsModuleConfig.test.ts b/packages/didcomm/src/modules/credentials/__tests__/CredentialsModuleConfig.test.ts index 2634ef60ca..4c71286409 100644 --- a/packages/didcomm/src/modules/credentials/__tests__/CredentialsModuleConfig.test.ts +++ b/packages/didcomm/src/modules/credentials/__tests__/CredentialsModuleConfig.test.ts @@ -14,7 +14,7 @@ describe('CredentialsModuleConfig', () => { }) test('sets values', () => { - const credentialProtocol = jest.fn() as unknown as DidCommCredentialProtocol + const credentialProtocol = vi.fn() as unknown as DidCommCredentialProtocol const config = new DidCommCredentialsModuleConfig({ autoAcceptCredentials: DidCommAutoAcceptCredential.Always, credentialProtocols: [credentialProtocol], diff --git a/packages/didcomm/src/modules/credentials/formats/dataIntegrity/dataIntegrityExchange.ts b/packages/didcomm/src/modules/credentials/formats/dataIntegrity/dataIntegrityExchange.ts index 73c77b4034..892e2b1500 100644 --- a/packages/didcomm/src/modules/credentials/formats/dataIntegrity/dataIntegrityExchange.ts +++ b/packages/didcomm/src/modules/credentials/formats/dataIntegrity/dataIntegrityExchange.ts @@ -1,4 +1,4 @@ -import { JsonObject, JsonTransformer, W3cCredential } from '@credo-ts/core' +import { type JsonObject, JsonTransformer, W3cCredential } from '@credo-ts/core' import { Expose, Type } from 'class-transformer' import { ArrayNotEmpty, IsBoolean, IsEnum, IsOptional, IsString, ValidateNested } from 'class-validator' diff --git a/packages/didcomm/src/modules/credentials/formats/jsonld/__tests__/JsonLdCredentialFormatService.test.ts b/packages/didcomm/src/modules/credentials/formats/jsonld/__tests__/JsonLdCredentialFormatService.test.ts index 5cfd3e5478..89088e84aa 100644 --- a/packages/didcomm/src/modules/credentials/formats/jsonld/__tests__/JsonLdCredentialFormatService.test.ts +++ b/packages/didcomm/src/modules/credentials/formats/jsonld/__tests__/JsonLdCredentialFormatService.test.ts @@ -8,6 +8,7 @@ import type { JsonCredential, } from '../DidCommJsonLdCredentialFormat' +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { DidDocument } from '../../../../../../../core/src/modules/dids' import { DidResolverService } from '../../../../../../../core/src/modules/dids/services/DidResolverService' import { @@ -27,13 +28,15 @@ import { DidCommCredentialV2Preview } from '../../../protocol/v2/messages' import { DidCommCredentialExchangeRecord } from '../../../repository/DidCommCredentialExchangeRecord' import { DidCommJsonLdCredentialFormatService } from '../DidCommJsonLdCredentialFormatService' -jest.mock('../../../../../../../core/src/modules/vc/W3cCredentialService') -jest.mock('../../../../../../../core/src/modules/vc/data-integrity/W3cJsonLdCredentialService') -jest.mock('../../../../../../../core/src/modules/dids/services/DidResolverService') +vi.mock('../../../../../../../core/src/modules/vc/W3cCredentialService') +vi.mock('../../../../../../../core/src/modules/vc/data-integrity/W3cJsonLdCredentialService') +vi.mock('../../../../../../../core/src/modules/dids/services/DidResolverService') -const W3cCredentialServiceMock = W3cCredentialService as jest.Mock -const W3cJsonLdCredentialServiceMock = W3cJsonLdCredentialService as jest.Mock -const DidResolverServiceMock = DidResolverService as jest.Mock +const W3cCredentialServiceMock = W3cCredentialService as MockedClassConstructor +const W3cJsonLdCredentialServiceMock = W3cJsonLdCredentialService as MockedClassConstructor< + typeof W3cJsonLdCredentialService +> +const DidResolverServiceMock = DidResolverService as MockedClassConstructor const didDocument = JsonTransformer.fromJSON( { diff --git a/packages/didcomm/src/modules/credentials/protocol/index.ts b/packages/didcomm/src/modules/credentials/protocol/index.ts index e10cc26022..0ab0b1b2de 100644 --- a/packages/didcomm/src/modules/credentials/protocol/index.ts +++ b/packages/didcomm/src/modules/credentials/protocol/index.ts @@ -2,7 +2,7 @@ export * from './v2' export * from './revocation-notification' import * as CredentialProtocolOptions from './DidCommCredentialProtocolOptions' -export { DidCommCredentialProtocol } from './DidCommCredentialProtocol' +export type { DidCommCredentialProtocol } from './DidCommCredentialProtocol' // NOTE: ideally we don't export the BaseDidCommCredentialProtocol, but as the DidCommCredentialV1Protocol is defined in the // anoncreds package, we need to export it. We should at some point look at creating a core package which can be used for // sharing internal types, and when you want to build you own modules, and an agent package, which is the one you use when diff --git a/packages/didcomm/src/modules/credentials/protocol/revocation-notification/services/DidCommRevocationNotificationService.ts b/packages/didcomm/src/modules/credentials/protocol/revocation-notification/services/DidCommRevocationNotificationService.ts index 5e2d07b651..0804f61e13 100644 --- a/packages/didcomm/src/modules/credentials/protocol/revocation-notification/services/DidCommRevocationNotificationService.ts +++ b/packages/didcomm/src/modules/credentials/protocol/revocation-notification/services/DidCommRevocationNotificationService.ts @@ -4,7 +4,7 @@ import type { DidCommRevocationNotificationReceivedEvent } from '../../../DidCom import type { DidCommRevocationNotificationV1Message } from '../messages/DidCommRevocationNotificationV1Message' import type { V2DidCommCreateRevocationNotificationMessageOptions } from './DidCommRevocationNotificationServiceOptions' -import { CredoError, EventEmitter, InjectionSymbols, Logger, inject, injectable } from '@credo-ts/core' +import { CredoError, EventEmitter, InjectionSymbols, type Logger, inject, injectable } from '@credo-ts/core' import { DidCommConnectionRecord } from '../../../../connections' import { DidCommCredentialEventTypes } from '../../../DidCommCredentialEvents' import { DidCommRevocationNotification } from '../../../models/DidCommRevocationNotification' diff --git a/packages/didcomm/src/modules/credentials/protocol/revocation-notification/services/__tests__/RevocationNotificationService.test.ts b/packages/didcomm/src/modules/credentials/protocol/revocation-notification/services/__tests__/RevocationNotificationService.test.ts index 7faf1dc2f3..40a08e54bc 100644 --- a/packages/didcomm/src/modules/credentials/protocol/revocation-notification/services/__tests__/RevocationNotificationService.test.ts +++ b/packages/didcomm/src/modules/credentials/protocol/revocation-notification/services/__tests__/RevocationNotificationService.test.ts @@ -1,9 +1,10 @@ -import type { AnonCredsCredentialMetadata } from '../../../../../../../../anoncreds' +import type { AnonCredsCredentialMetadata } from '../../../../../../../../anoncreds/src/index' import type { AgentContext } from '../../../../../../../../core/src/agent' import type { DidCommRevocationNotificationReceivedEvent } from '../../../../DidCommCredentialEvents' import { Subject } from 'rxjs' +import type { MockedClassConstructor } from '../../../../../../../../../tests/types' import { EventEmitter } from '../../../../../../../../core/src/agent/EventEmitter' import { getAgentConfig, @@ -11,7 +12,6 @@ import { getMockConnection, mockFunction, } from '../../../../../../../../core/tests/helpers' -import { DidCommMessageHandlerRegistry } from '../../../../../../DidCommMessageHandlerRegistry' import { DidCommInboundMessageContext } from '../../../../../../models' import { DidCommDidExchangeState } from '../../../../../connections' import { DidCommCredentialEventTypes } from '../../../../DidCommCredentialEvents' @@ -21,14 +21,12 @@ import { DidCommCredentialExchangeRepository } from '../../../../repository/DidC import { DidCommRevocationNotificationV1Message, DidCommRevocationNotificationV2Message } from '../../messages' import { DidCommRevocationNotificationService } from '../DidCommRevocationNotificationService' -jest.mock('../../../../repository/DidCommCredentialExchangeRepository') -const CredentialRepositoryMock = DidCommCredentialExchangeRepository as jest.Mock +vi.mock('../../../../repository/DidCommCredentialExchangeRepository') +const CredentialRepositoryMock = DidCommCredentialExchangeRepository as MockedClassConstructor< + typeof DidCommCredentialExchangeRepository +> const credentialRepository = new CredentialRepositoryMock() -jest.mock('../../../../../../DidCommMessageHandlerRegistry') -const MessageHandlerRegistryMock = DidCommMessageHandlerRegistry as jest.Mock -const _messageHandlerRegistry = new MessageHandlerRegistryMock() - const connection = getMockConnection({ state: DidCommDidExchangeState.Completed, }) @@ -52,12 +50,12 @@ describe('RevocationNotificationService', () => { }) afterEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() }) describe('v1ProcessRevocationNotification', () => { test('emits revocation notification event if credential record exists for indy thread', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommRevocationNotificationReceived, @@ -67,7 +65,7 @@ describe('RevocationNotificationService', () => { const date = new Date('2020-01-01T00:00:00.000Z') // @ts-ignore - const dateSpy = jest.spyOn(global, 'Date').mockImplementation(() => date) + const dateSpy = vi.spyOn(global, 'Date').mockImplementation(() => date) const credentialRecord = new DidCommCredentialExchangeRecord({ threadId: 'thread-id', @@ -122,7 +120,7 @@ describe('RevocationNotificationService', () => { }) test('does not emit revocation notification event if no credential record exists for indy thread', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommRevocationNotificationReceived, @@ -151,7 +149,7 @@ describe('RevocationNotificationService', () => { }) test('does not emit revocation notification event if invalid threadId is passed', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommRevocationNotificationReceived, @@ -173,7 +171,7 @@ describe('RevocationNotificationService', () => { describe('v2ProcessRevocationNotification', () => { test('emits revocation notification event if credential record exists for indy thread', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommRevocationNotificationReceived, @@ -183,7 +181,7 @@ describe('RevocationNotificationService', () => { const date = new Date('2020-01-01T00:00:00.000Z') // @ts-ignore - const dateSpy = jest.spyOn(global, 'Date').mockImplementation(() => date) + const dateSpy = vi.spyOn(global, 'Date').mockImplementation(() => date) const credentialRecord = new DidCommCredentialExchangeRecord({ threadId: 'thread-id', @@ -235,7 +233,7 @@ describe('RevocationNotificationService', () => { }) test('does not emit revocation notification event if no credential record exists for indy thread', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommRevocationNotificationReceived, @@ -265,7 +263,7 @@ describe('RevocationNotificationService', () => { }) test('does not emit revocation notification event if invalid threadId is passed', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommRevocationNotificationReceived, diff --git a/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/V2CredentialProtocolCred.test.ts b/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/V2CredentialProtocolCred.test.ts index 5bc71e00cc..ead1c50efc 100644 --- a/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/V2CredentialProtocolCred.test.ts +++ b/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/V2CredentialProtocolCred.test.ts @@ -13,6 +13,7 @@ import type { CustomDidCommCredentialExchangeTags } from '../../../repository/Di import { Subject } from 'rxjs' +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { EventEmitter } from '../../../../../../../core/src/agent/EventEmitter' import { CredoError } from '../../../../../../../core/src/error' import { JsonTransformer } from '../../../../../../../core/src/utils' @@ -43,17 +44,20 @@ import { DidCommCredentialV2ProblemReportMessage } from '../messages/DidCommCred import { DidCommIssueCredentialV2Message } from '../messages/DidCommIssueCredentialV2Message' import { DidCommOfferCredentialV2Message } from '../messages/DidCommOfferCredentialV2Message' import { DidCommRequestCredentialV2Message } from '../messages/DidCommRequestCredentialV2Message' + // Mock classes -jest.mock('../../../repository/DidCommCredentialExchangeRepository') -jest.mock('../../../../../repository/DidCommMessageRepository') -jest.mock('../../../../connections/services/DidCommConnectionService') -jest.mock('../../../../../DidCommDispatcher') +vi.mock('../../../repository/DidCommCredentialExchangeRepository') +vi.mock('../../../../../repository/DidCommMessageRepository') +vi.mock('../../../../connections/services/DidCommConnectionService') +vi.mock('../../../../../DidCommDispatcher') // Mock typed object -const CredentialRepositoryMock = DidCommCredentialExchangeRepository as jest.Mock -const DidCommMessageRepositoryMock = DidCommMessageRepository as jest.Mock -const ConnectionServiceMock = DidCommConnectionService as jest.Mock +const CredentialRepositoryMock = DidCommCredentialExchangeRepository as MockedClassConstructor< + typeof DidCommCredentialExchangeRepository +> +const DidCommMessageRepositoryMock = DidCommMessageRepository as MockedClassConstructor +const ConnectionServiceMock = DidCommConnectionService as MockedClassConstructor const credentialRepository = new CredentialRepositoryMock() const didCommMessageRepository = new DidCommMessageRepositoryMock() @@ -243,10 +247,10 @@ export const testCredentialFormatService = { _agentContext: AgentContext, _options: DidCommCredentialFormatAcceptRequestOptions ) => ({ attachment: credentialAttachment, format: credentialFormat }), - deleteCredentialById: jest.fn(), - processCredential: jest.fn(), + deleteCredentialById: vi.fn(), + processCredential: vi.fn(), acceptOffer: () => ({ attachment: requestAttachment, format: requestFormat }), - processRequest: jest.fn(), + processRequest: vi.fn(), } as unknown as TestCredentialFormatService describe('credentialProtocol', () => { @@ -269,7 +273,7 @@ describe('credentialProtocol', () => { }) afterEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() }) describe('acceptOffer', () => { @@ -368,7 +372,7 @@ describe('credentialProtocol', () => { agentContext, }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommCredentialStateChanged, eventListenerMock @@ -436,7 +440,7 @@ describe('credentialProtocol', () => { connectionId: 'b1e2f039-aa39-40be-8643-6ce2797b5190', }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() // given mockFunction(credentialRepository.getById).mockResolvedValue(credentialExchangeRecord) @@ -543,7 +547,7 @@ describe('credentialProtocol', () => { connectionId: 'b1e2f039-aa39-40be-8643-6ce2797b5190', }) - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommCredentialStateChanged, eventListenerMock @@ -778,7 +782,7 @@ describe('credentialProtocol', () => { const credentialExchangeRecord = mockCredentialRecord() mockFunction(credentialRepository.getById).mockReturnValue(Promise.resolve(credentialExchangeRecord)) - const repositoryDeleteSpy = jest.spyOn(credentialRepository, 'delete') + const repositoryDeleteSpy = mockFunction(credentialRepository.delete) await credentialProtocol.delete(agentContext, credentialExchangeRecord) expect(repositoryDeleteSpy).toHaveBeenNthCalledWith(1, agentContext, credentialExchangeRecord) }) diff --git a/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/V2CredentialProtocolOffer.test.ts b/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/V2CredentialProtocolOffer.test.ts index 11d9cdf830..3f39f0cd75 100644 --- a/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/V2CredentialProtocolOffer.test.ts +++ b/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/V2CredentialProtocolOffer.test.ts @@ -9,6 +9,7 @@ import type { CreateCredentialOfferOptions } from '../../DidCommCredentialProtoc import { Subject } from 'rxjs' +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { EventEmitter } from '../../../../../../../core/src/agent/EventEmitter' import { JsonTransformer } from '../../../../../../../core/src/utils' import { @@ -77,27 +78,29 @@ export const testCredentialFormatService = { }, ], }), - acceptRequest: jest.fn(), - deleteCredentialById: jest.fn(), - processCredential: jest.fn(), - acceptOffer: jest.fn(), - processRequest: jest.fn(), - processOffer: jest.fn(), + acceptRequest: vi.fn(), + deleteCredentialById: vi.fn(), + processCredential: vi.fn(), + acceptOffer: vi.fn(), + processRequest: vi.fn(), + processOffer: vi.fn(), } as unknown as TestCredentialFormatService // Mock classes -jest.mock('../../../repository/DidCommCredentialExchangeRepository') -jest.mock('../../../../../repository/DidCommMessageRepository') -jest.mock('../../../../routing/services/DidCommRoutingService') -jest.mock('../../../../connections/services/DidCommConnectionService') -jest.mock('../../../../../DidCommDispatcher') +vi.mock('../../../repository/DidCommCredentialExchangeRepository') +vi.mock('../../../../../repository/DidCommMessageRepository') +vi.mock('../../../../routing/services/DidCommRoutingService') +vi.mock('../../../../connections/services/DidCommConnectionService') +vi.mock('../../../../../DidCommDispatcher') // Mock typed object -const CredentialRepositoryMock = DidCommCredentialExchangeRepository as jest.Mock -const DidCommMessageRepositoryMock = DidCommMessageRepository as jest.Mock -const RoutingServiceMock = DidCommRoutingService as jest.Mock -const ConnectionServiceMock = DidCommConnectionService as jest.Mock -const DispatcherMock = DidCommDispatcher as jest.Mock +const CredentialRepositoryMock = DidCommCredentialExchangeRepository as MockedClassConstructor< + typeof DidCommCredentialExchangeRepository +> +const DidCommMessageRepositoryMock = DidCommMessageRepository as MockedClassConstructor +const RoutingServiceMock = DidCommRoutingService as MockedClassConstructor +const ConnectionServiceMock = DidCommConnectionService as MockedClassConstructor +const DispatcherMock = DidCommDispatcher as MockedClassConstructor const credentialRepository = new CredentialRepositoryMock() const didCommMessageRepository = new DidCommMessageRepositoryMock() @@ -138,7 +141,7 @@ describe('V2CredentialProtocolOffer', () => { }) afterEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() }) describe('createOffer', () => { @@ -169,7 +172,7 @@ describe('V2CredentialProtocolOffer', () => { }) test(`emits stateChange event with a new credential in ${DidCommCredentialState.OfferSent} state`, async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommCredentialStateChanged, eventListenerMock @@ -254,7 +257,7 @@ describe('V2CredentialProtocolOffer', () => { }) test(`emits stateChange event with ${DidCommCredentialState.OfferReceived}`, async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommCredentialEventTypes.DidCommCredentialStateChanged, eventListenerMock diff --git a/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/v2-credentials-auto-accept.drizzle.e2e.test.ts b/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/v2-credentials-auto-accept.drizzle.e2e.test.ts index 8cb02fe33c..9ded7ea424 100644 --- a/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/v2-credentials-auto-accept.drizzle.e2e.test.ts +++ b/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/v2-credentials-auto-accept.drizzle.e2e.test.ts @@ -1,4 +1,3 @@ -import type { EventReplaySubject } from '@credo-ts/core/tests' import type { AnonCredsTestsAgent } from '../../../../../../../anoncreds/tests/legacyAnonCredsSetup' import { @@ -16,6 +15,7 @@ import { DidCommCredentialV2Preview } from '../messages/DidCommCredentialV2Previ import { setupAnonCredsTests } from '../../../../../../../anoncreds/tests/legacyAnonCredsSetup' import { anoncredsDefinitionFourAttributesNoRevocation } from '../../../../../../../anoncreds/tests/preCreatedAnonCredsDefinition' +import type { EventReplaySubject } from '../../../../../../../core/tests' describe('V2 Credentials Auto Accept', () => { let faberAgent: AnonCredsTestsAgent diff --git a/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/v2-credentials.drizzle.e2e.test.ts b/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/v2-credentials.drizzle.e2e.test.ts index 440ca36bfb..8757a9b22a 100644 --- a/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/v2-credentials.drizzle.e2e.test.ts +++ b/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/v2-credentials.drizzle.e2e.test.ts @@ -246,7 +246,7 @@ describe('v2 credentials', () => { // see if deleteCredential is called const holderService = aliceAgent.dependencyManager.resolve(AnonCredsHolderServiceSymbol) - const deleteCredentialSpy = jest.spyOn(holderService, 'deleteCredential') + const deleteCredentialSpy = vi.spyOn(holderService, 'deleteCredential') await aliceAgent.didcomm.credentials.deleteById(holderCredentialExchangeRecord.id, { deleteAssociatedCredentials: true, deleteAssociatedDidCommMessages: true, diff --git a/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/v2.ldproof.credentials.propose-offerED25519.e2e.test.ts b/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/v2.ldproof.credentials.propose-offerED25519.e2e.test.ts index a0546dcd72..b7f04c3240 100644 --- a/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/v2.ldproof.credentials.propose-offerED25519.e2e.test.ts +++ b/packages/didcomm/src/modules/credentials/protocol/v2/__tests__/v2.ldproof.credentials.propose-offerED25519.e2e.test.ts @@ -18,7 +18,7 @@ import { testLogger, waitForCredentialRecordSubject, } from '../../../../../../../core/tests' -import { DidCommModuleConfigOptions } from '../../../../../DidCommModuleConfig' +import type { DidCommModuleConfigOptions } from '../../../../../DidCommModuleConfig' import { DidCommProofEventTypes } from '../../../../proofs' import { DidCommCredentialEventTypes } from '../../../DidCommCredentialEvents' import { DidCommJsonLdCredentialFormatService } from '../../../formats' diff --git a/packages/didcomm/src/modules/credentials/protocol/v2/errors/index.ts b/packages/didcomm/src/modules/credentials/protocol/v2/errors/index.ts index 6fb8121ed8..4b0dc3928e 100644 --- a/packages/didcomm/src/modules/credentials/protocol/v2/errors/index.ts +++ b/packages/didcomm/src/modules/credentials/protocol/v2/errors/index.ts @@ -1,4 +1,4 @@ export { DidCommCredentialV2ProblemReportError as V2CredentialProblemReportError, - DidCommCredentialV2ProblemReportErrorOptions as V2CredentialProblemReportErrorOptions, + type DidCommCredentialV2ProblemReportErrorOptions as V2CredentialProblemReportErrorOptions, } from './DidCommCredentialV2ProblemReportError' diff --git a/packages/didcomm/src/modules/credentials/protocol/v2/messages/DidCommCredentialV2AckMessage.ts b/packages/didcomm/src/modules/credentials/protocol/v2/messages/DidCommCredentialV2AckMessage.ts index a1b1d5bcfb..a33b36ca1a 100644 --- a/packages/didcomm/src/modules/credentials/protocol/v2/messages/DidCommCredentialV2AckMessage.ts +++ b/packages/didcomm/src/modules/credentials/protocol/v2/messages/DidCommCredentialV2AckMessage.ts @@ -1,4 +1,4 @@ -import { DidCommAckMessage, DidCommAckMessageOptions } from '../../../../../messages' +import { DidCommAckMessage, type DidCommAckMessageOptions } from '../../../../../messages' import { IsValidMessageType, parseMessageType } from '../../../../../util/messageType' export type DidCommCredentialV2AckMessageOptions = DidCommAckMessageOptions diff --git a/packages/didcomm/src/modules/credentials/repository/DidCommCredentialExchangeRepository.ts b/packages/didcomm/src/modules/credentials/repository/DidCommCredentialExchangeRepository.ts index 139a4c02c1..aac7a98162 100644 --- a/packages/didcomm/src/modules/credentials/repository/DidCommCredentialExchangeRepository.ts +++ b/packages/didcomm/src/modules/credentials/repository/DidCommCredentialExchangeRepository.ts @@ -1,4 +1,4 @@ -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { DidCommCredentialExchangeRecord } from './DidCommCredentialExchangeRecord' diff --git a/packages/didcomm/src/modules/discover-features/__tests__/DiscoverFeaturesModule.test.ts b/packages/didcomm/src/modules/discover-features/__tests__/DiscoverFeaturesModule.test.ts index 2df4b7a435..301fd66047 100644 --- a/packages/didcomm/src/modules/discover-features/__tests__/DiscoverFeaturesModule.test.ts +++ b/packages/didcomm/src/modules/discover-features/__tests__/DiscoverFeaturesModule.test.ts @@ -1,4 +1,4 @@ -import type { DependencyManager } from '../../../../../core' +import type { DependencyManager } from '../../../../../core/src/index' import { getAgentContext } from '../../../../../core/tests' import { DidCommFeatureRegistry } from '../../../DidCommFeatureRegistry' @@ -11,9 +11,9 @@ import { DidCommDiscoverFeaturesV2Service } from '../protocol/v2' describe('DiscoverFeaturesModule', () => { test('registers dependencies on the dependency manager', () => { const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), } as unknown as DependencyManager new DidCommDiscoverFeaturesModule().register(dependencyManager) @@ -29,8 +29,8 @@ describe('DiscoverFeaturesModule', () => { registerInstances: [ [DidCommFeatureRegistry, featureRegistry], [DidCommMessageHandlerRegistry, new DidCommMessageHandlerRegistry()], - [DidCommDiscoverFeaturesV2Service, { register: jest.fn() } as unknown as DidCommDiscoverFeaturesV2Service], - [DidCommDiscoverFeaturesV1Service, { register: jest.fn() } as unknown as DidCommDiscoverFeaturesV1Service], + [DidCommDiscoverFeaturesV2Service, { register: vi.fn() } as unknown as DidCommDiscoverFeaturesV2Service], + [DidCommDiscoverFeaturesV1Service, { register: vi.fn() } as unknown as DidCommDiscoverFeaturesV1Service], ], }) await new DidCommDiscoverFeaturesModule().initialize(agentContext) diff --git a/packages/didcomm/src/modules/discover-features/protocol/v1/DidCommDiscoverFeaturesV1Service.ts b/packages/didcomm/src/modules/discover-features/protocol/v1/DidCommDiscoverFeaturesV1Service.ts index cab77f4dc2..c41dcb9054 100644 --- a/packages/didcomm/src/modules/discover-features/protocol/v1/DidCommDiscoverFeaturesV1Service.ts +++ b/packages/didcomm/src/modules/discover-features/protocol/v1/DidCommDiscoverFeaturesV1Service.ts @@ -10,7 +10,7 @@ import type { DiscoverFeaturesProtocolMsgReturnType, } from '../../DidCommDiscoverFeaturesServiceOptions' -import { CredoError, EventEmitter, InjectionSymbols, Logger, inject, injectable } from '@credo-ts/core' +import { CredoError, EventEmitter, InjectionSymbols, type Logger, inject, injectable } from '@credo-ts/core' import { DidCommFeatureRegistry } from '../../../../DidCommFeatureRegistry' import { DidCommMessageHandlerRegistry } from '../../../../DidCommMessageHandlerRegistry' diff --git a/packages/didcomm/src/modules/discover-features/protocol/v1/__tests__/V1DiscoverFeaturesService.test.ts b/packages/didcomm/src/modules/discover-features/protocol/v1/__tests__/V1DiscoverFeaturesService.test.ts index b8d2b80fee..9a4ec4f243 100644 --- a/packages/didcomm/src/modules/discover-features/protocol/v1/__tests__/V1DiscoverFeaturesService.test.ts +++ b/packages/didcomm/src/modules/discover-features/protocol/v1/__tests__/V1DiscoverFeaturesService.test.ts @@ -6,11 +6,11 @@ import type { DiscoverFeaturesProtocolMsgReturnType } from '../../../DidCommDisc import { Subject } from 'rxjs' +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { EventEmitter } from '../../../../../../../core/src/agent/EventEmitter' import { ConsoleLogger } from '../../../../../../../core/src/logger' import { agentDependencies, getAgentContext, getMockConnection } from '../../../../../../../core/tests/helpers' import { DidCommFeatureRegistry } from '../../../../../DidCommFeatureRegistry' -import { DidCommMessageHandlerRegistry } from '../../../../../DidCommMessageHandlerRegistry' import { DidCommInboundMessageContext, DidCommProtocol } from '../../../../../models' import { DidCommDidExchangeState } from '../../../../connections' import { DidCommDiscoverFeaturesEventTypes } from '../../../DidCommDiscoverFeaturesEvents' @@ -18,8 +18,6 @@ import { DidCommDiscoverFeaturesModuleConfig } from '../../../DidCommDiscoverFea import { DidCommDiscoverFeaturesV1Service } from '../DidCommDiscoverFeaturesV1Service' import { DidCommFeaturesDiscloseMessage, DidCommFeaturesQueryMessage } from '../messages' -jest.mock('../../../../../DidCommMessageHandlerRegistry') -const _MessageHandlerRegistryMock = DidCommMessageHandlerRegistry as jest.Mock const eventEmitter = new EventEmitter(agentDependencies, new Subject()) const featureRegistry = new DidCommFeatureRegistry() featureRegistry.register(new DidCommProtocol({ id: 'https://didcomm.org/connections/1.0' })) @@ -28,8 +26,8 @@ featureRegistry.register( ) featureRegistry.register(new DidCommProtocol({ id: 'https://didcomm.org/issue-credential/1.0' })) -jest.mock('../../../../../../../core/src/logger') -const LoggerMock = ConsoleLogger as jest.Mock +vi.mock('../../../../../../../core/src/logger') +const LoggerMock = ConsoleLogger as MockedClassConstructor describe('V1DiscoverFeaturesService - auto accept queries', () => { const discoverFeaturesModuleConfig = new DidCommDiscoverFeaturesModuleConfig({ autoAcceptQueries: true }) @@ -98,7 +96,7 @@ describe('V1DiscoverFeaturesService - auto accept queries', () => { }) it('should throw error if features other than protocols are disclosed', async () => { - expect( + await expect( discoverFeaturesService.createDisclosure({ disclosureQueries: [ { featureType: 'protocol', match: '1' }, @@ -110,7 +108,7 @@ describe('V1DiscoverFeaturesService - auto accept queries', () => { }) it('should throw error if no thread id is provided', async () => { - expect( + await expect( discoverFeaturesService.createDisclosure({ disclosureQueries: [{ featureType: 'protocol', match: '1' }], }) @@ -130,7 +128,7 @@ describe('V1DiscoverFeaturesService - auto accept queries', () => { }) it('should throw error if multiple features are queried', async () => { - expect( + await expect( discoverFeaturesService.createQuery({ queries: [ { featureType: 'protocol', match: '1' }, @@ -141,7 +139,7 @@ describe('V1DiscoverFeaturesService - auto accept queries', () => { }) it('should throw error if a feature other than protocol is queried', async () => { - expect( + await expect( discoverFeaturesService.createQuery({ queries: [{ featureType: 'goal-code', match: '1' }], }) @@ -151,7 +149,7 @@ describe('V1DiscoverFeaturesService - auto accept queries', () => { describe('processQuery', () => { it('should emit event and create disclosure message', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommDiscoverFeaturesEventTypes.QueryReceived, eventListenerMock @@ -197,7 +195,7 @@ describe('V1DiscoverFeaturesService - auto accept queries', () => { describe('processDisclosure', () => { it('should emit event', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommDiscoverFeaturesEventTypes.DisclosureReceived, eventListenerMock @@ -251,7 +249,7 @@ describe('V1DiscoverFeaturesService - auto accept disabled', () => { describe('processQuery', () => { it('should emit event and not send any message', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommDiscoverFeaturesEventTypes.QueryReceived, eventListenerMock diff --git a/packages/didcomm/src/modules/discover-features/protocol/v2/DidCommDiscoverFeaturesV2Service.ts b/packages/didcomm/src/modules/discover-features/protocol/v2/DidCommDiscoverFeaturesV2Service.ts index 500c2b824f..726d0fac5a 100644 --- a/packages/didcomm/src/modules/discover-features/protocol/v2/DidCommDiscoverFeaturesV2Service.ts +++ b/packages/didcomm/src/modules/discover-features/protocol/v2/DidCommDiscoverFeaturesV2Service.ts @@ -9,7 +9,7 @@ import type { DiscoverFeaturesProtocolMsgReturnType, } from '../../DidCommDiscoverFeaturesServiceOptions' -import { EventEmitter, InjectionSymbols, Logger, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, type Logger, inject, injectable } from '@credo-ts/core' import { DidCommFeatureRegistry } from '../../../../DidCommFeatureRegistry' import { DidCommMessageHandlerRegistry } from '../../../../DidCommMessageHandlerRegistry' diff --git a/packages/didcomm/src/modules/discover-features/protocol/v2/__tests__/V2DiscoverFeaturesService.test.ts b/packages/didcomm/src/modules/discover-features/protocol/v2/__tests__/V2DiscoverFeaturesService.test.ts index ca5b79a0c6..cabe136529 100644 --- a/packages/didcomm/src/modules/discover-features/protocol/v2/__tests__/V2DiscoverFeaturesService.test.ts +++ b/packages/didcomm/src/modules/discover-features/protocol/v2/__tests__/V2DiscoverFeaturesService.test.ts @@ -6,11 +6,11 @@ import type { DiscoverFeaturesProtocolMsgReturnType } from '../../../DidCommDisc import { Subject } from 'rxjs' +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { EventEmitter } from '../../../../../../../core/src/agent/EventEmitter' import { ConsoleLogger } from '../../../../../../../core/src/logger' import { agentDependencies, getAgentContext, getMockConnection } from '../../../../../../../core/tests/helpers' import { DidCommFeatureRegistry } from '../../../../../DidCommFeatureRegistry' -import { DidCommMessageHandlerRegistry } from '../../../../../DidCommMessageHandlerRegistry' import { DidCommGoalCode, DidCommInboundMessageContext, DidCommProtocol } from '../../../../../models' import { DidCommDidExchangeState } from '../../../../connections' import { DidCommDiscoverFeaturesEventTypes } from '../../../DidCommDiscoverFeaturesEvents' @@ -18,8 +18,6 @@ import { DidCommDiscoverFeaturesModuleConfig } from '../../../DidCommDiscoverFea import { DidCommDiscoverFeaturesV2Service } from '../DidCommDiscoverFeaturesV2Service' import { DidCommFeaturesDisclosuresMessage, DidCommFeaturesQueriesMessage } from '../messages' -jest.mock('../../../../../DidCommMessageHandlerRegistry') -const _MessageHandlerRegistryMock = DidCommMessageHandlerRegistry as jest.Mock const eventEmitter = new EventEmitter(agentDependencies, new Subject()) const featureRegistry = new DidCommFeatureRegistry() featureRegistry.register(new DidCommProtocol({ id: 'https://didcomm.org/connections/1.0' })) @@ -31,8 +29,8 @@ featureRegistry.register(new DidCommGoalCode({ id: 'aries.vc.1' })) featureRegistry.register(new DidCommGoalCode({ id: 'aries.vc.2' })) featureRegistry.register(new DidCommGoalCode({ id: 'caries.vc.3' })) -jest.mock('../../../../../../../core/src/logger') -const LoggerMock = ConsoleLogger as jest.Mock +vi.mock('../../../../../../../core/src/logger') +const LoggerMock = ConsoleLogger as MockedClassConstructor describe('V2DiscoverFeaturesService - auto accept queries', () => { const discoverFeaturesModuleConfig = new DidCommDiscoverFeaturesModuleConfig({ autoAcceptQueries: true }) @@ -163,7 +161,7 @@ describe('V2DiscoverFeaturesService - auto accept queries', () => { describe('processQuery', () => { it('should emit event and create disclosure message', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommDiscoverFeaturesEventTypes.QueryReceived, eventListenerMock @@ -209,7 +207,7 @@ describe('V2DiscoverFeaturesService - auto accept queries', () => { describe('processDisclosure', () => { it('should emit event', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommDiscoverFeaturesEventTypes.DisclosureReceived, eventListenerMock @@ -266,7 +264,7 @@ describe('V2DiscoverFeaturesService - auto accept disabled', () => { describe('processQuery', () => { it('should emit event and not send any message', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( DidCommDiscoverFeaturesEventTypes.QueryReceived, eventListenerMock diff --git a/packages/didcomm/src/modules/message-pickup/DidCommMessagePickupApi.ts b/packages/didcomm/src/modules/message-pickup/DidCommMessagePickupApi.ts index 9f8ca9ddf0..d249eb0822 100644 --- a/packages/didcomm/src/modules/message-pickup/DidCommMessagePickupApi.ts +++ b/packages/didcomm/src/modules/message-pickup/DidCommMessagePickupApi.ts @@ -15,7 +15,15 @@ import type { DidCommMessagePickupSession, DidCommMessagePickupSessionRole } fro import type { DidCommMessagePickupV1Protocol, DidCommMessagePickupV2Protocol } from './protocol' import type { DidCommMessagePickupProtocol } from './protocol/DidCommMessagePickupProtocol' -import { AgentContext, CredoError, EventEmitter, InjectionSymbols, Logger, inject, injectable } from '@credo-ts/core' +import { + AgentContext, + CredoError, + EventEmitter, + InjectionSymbols, + type Logger, + inject, + injectable, +} from '@credo-ts/core' import { ReplaySubject, Subject, filter, first, firstValueFrom, takeUntil, timeout } from 'rxjs' import { DidCommMessageSender } from '../../DidCommMessageSender' diff --git a/packages/didcomm/src/modules/message-pickup/__tests__/MessagePickupApi.test.ts b/packages/didcomm/src/modules/message-pickup/__tests__/MessagePickupApi.test.ts index dd346e4743..8bfc6c19a5 100644 --- a/packages/didcomm/src/modules/message-pickup/__tests__/MessagePickupApi.test.ts +++ b/packages/didcomm/src/modules/message-pickup/__tests__/MessagePickupApi.test.ts @@ -1,15 +1,16 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ import type { DidCommMessagePickupSession } from '../DidCommMessagePickupSession' import type { DidCommMessagePickupProtocol } from '../protocol/DidCommMessagePickupProtocol' import { Subject } from 'rxjs' -import { Logger } from '@credo-ts/core' +import type { Logger } from '@credo-ts/core' +import type { MockedFunction } from 'vitest' +import type { MockedClassConstructor } from '../../../../../../tests/types' import { EventEmitter } from '../../../../../core/src/agent/EventEmitter' import { CredoError } from '../../../../../core/src/error/CredoError' import { testLogger } from '../../../../../core/tests' import { getAgentContext, getMockConnection, mockFunction } from '../../../../../core/tests/helpers' -import { DidCommModuleConfig } from '../../../../../didcomm' +import { DidCommModuleConfig } from '../../../../../didcomm/src' import { DidCommMessageSender } from '../../../DidCommMessageSender' import { DidCommDidExchangeState } from '../../connections/models/DidCommDidExchangeState' import { DidCommConnectionService } from '../../connections/services/DidCommConnectionService' @@ -26,16 +27,17 @@ const mockConnection = getMockConnection({ state: DidCommDidExchangeState.Completed, }) -jest.mock('../../../../../core/src/agent/EventEmitter') -jest.mock('../../../DidCommMessageSender') -jest.mock('../../connections/services/DidCommConnectionService') -jest.mock('../services/DidCommMessagePickupSessionService') +vi.mock('../../../../../core/src/agent/EventEmitter') +vi.mock('../../../DidCommMessageSender') +vi.mock('../../connections/services/DidCommConnectionService') +vi.mock('../services/DidCommMessagePickupSessionService') -const EventEmitterMock = EventEmitter as jest.Mock -const MessageSenderMock = DidCommMessageSender as jest.Mock -const ConnectionServiceMock = DidCommConnectionService as jest.Mock -const MessagePickupSessionServiceMock = - DidCommMessagePickupSessionService as jest.Mock +const EventEmitterMock = EventEmitter as MockedClassConstructor +const MessageSenderMock = DidCommMessageSender as MockedClassConstructor +const ConnectionServiceMock = DidCommConnectionService as MockedClassConstructor +const MessagePickupSessionServiceMock = DidCommMessagePickupSessionService as MockedClassConstructor< + typeof DidCommMessagePickupSessionService +> const messagePickupModuleConfig = new DidCommMessagePickupModuleConfig({ maximumBatchSize: 10, @@ -61,14 +63,14 @@ const agentContext = getAgentContext({ }) describe('DidCommMessagePickupApi', () => { - jest.resetAllMocks() + vi.resetAllMocks() let api: DidCommMessagePickupApi let mockLogger: Logger let stop$: Subject beforeEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() stop$ = new Subject() mockLogger = testLogger api = new DidCommMessagePickupApi( @@ -115,7 +117,7 @@ describe('DidCommMessagePickupApi', () => { ], }) - const sendMessageMock = messageSender.sendMessage as jest.Mock + const sendMessageMock = messageSender.sendMessage as MockedFunction<(typeof messageSender)['sendMessage']> const [outboundCtx, options] = sendMessageMock.mock.calls[0] expect(messageSender.sendMessage).toHaveBeenCalledTimes(1) diff --git a/packages/didcomm/src/modules/message-pickup/__tests__/MessagePickupModule.test.ts b/packages/didcomm/src/modules/message-pickup/__tests__/MessagePickupModule.test.ts index 494b63b9a1..06c8b6b296 100644 --- a/packages/didcomm/src/modules/message-pickup/__tests__/MessagePickupModule.test.ts +++ b/packages/didcomm/src/modules/message-pickup/__tests__/MessagePickupModule.test.ts @@ -11,8 +11,8 @@ import { DidCommMessagePickupSessionService } from '../services' describe('DidCommMessagePickupModule', () => { test('registers dependencies on the dependency manager', () => { const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), isRegistered: () => { return false }, @@ -30,7 +30,7 @@ describe('DidCommMessagePickupModule', () => { test('calls register on the provided ProofProtocols', async () => { const messagePickupProtocol = { - register: jest.fn(), + register: vi.fn(), } as unknown as DidCommMessagePickupProtocol const messagePickupModule = new DidCommMessagePickupModule({ @@ -40,7 +40,7 @@ describe('DidCommMessagePickupModule', () => { expect(messagePickupModule.config.protocols).toEqual([messagePickupProtocol]) const messagePickupSessionSessionService = { - start: jest.fn(), + start: vi.fn(), } as unknown as DidCommMessagePickupSessionService const messageHandlerRegistry = new DidCommMessageHandlerRegistry() diff --git a/packages/didcomm/src/modules/message-pickup/__tests__/MessagePickupSessionService.test.ts b/packages/didcomm/src/modules/message-pickup/__tests__/MessagePickupSessionService.test.ts index 113fcddce5..77a7fd0d4c 100644 --- a/packages/didcomm/src/modules/message-pickup/__tests__/MessagePickupSessionService.test.ts +++ b/packages/didcomm/src/modules/message-pickup/__tests__/MessagePickupSessionService.test.ts @@ -7,7 +7,7 @@ import { AgentContext } from '../../../../../core/src/agent/context/AgentContext import { InjectionSymbols } from '../../../../../core/src/constants' import { agentDependencies, getAgentContext } from '../../../../../core/tests/helpers' import { DidCommMessage } from '../../../DidCommMessage' -import { DidCommTransportSession } from '../../../DidCommTransportService' +import type { DidCommTransportSession } from '../../../DidCommTransportService' import { DidCommTransportEventTypes } from '../../../transport/DidCommTransportEventTypes' import { DidCommMessagePickupSessionRole } from '../DidCommMessagePickupSession' import { DidCommMessagePickupSessionService } from '../services/DidCommMessagePickupSessionService' @@ -19,7 +19,7 @@ describe('start listener remove live sessions', () => { let eventEmitter: EventEmitter beforeEach(() => { - jest.resetAllMocks() + vi.resetAllMocks() stop$ = new Subject() eventEmitter = new EventEmitter(agentDependencies, stop$) @@ -30,7 +30,7 @@ describe('start listener remove live sessions', () => { ], }) instance = new DidCommMessagePickupSessionService() - jest.spyOn(instance, 'removeLiveSession').mockImplementation() + vi.spyOn(instance, 'removeLiveSession').mockImplementation(() => {}) }) test('removes live session on related transport event', () => { @@ -46,8 +46,8 @@ describe('start listener remove live sessions', () => { }, inboundMessage: new DidCommMessage(), connectionId: 'conn-123', - send: jest.fn(), - close: jest.fn(), + send: vi.fn(), + close: vi.fn(), } // Add the session to the instance @@ -83,8 +83,8 @@ describe('start listener remove live sessions', () => { }, inboundMessage: new DidCommMessage(), connectionId: 'conn-123', - send: jest.fn(), - close: jest.fn(), + send: vi.fn(), + close: vi.fn(), } eventEmitter.emit(agentContext, { @@ -112,8 +112,8 @@ describe('start listener remove live sessions', () => { }, inboundMessage: new DidCommMessage(), connectionId: 'conn-123', - send: jest.fn(), - close: jest.fn(), + send: vi.fn(), + close: vi.fn(), } eventEmitter.emit(agentContext, { diff --git a/packages/didcomm/src/modules/message-pickup/protocol/index.ts b/packages/didcomm/src/modules/message-pickup/protocol/index.ts index 329e627779..9491e92bd3 100644 --- a/packages/didcomm/src/modules/message-pickup/protocol/index.ts +++ b/packages/didcomm/src/modules/message-pickup/protocol/index.ts @@ -1,3 +1,3 @@ export * from './v1' export * from './v2' -export { DidCommMessagePickupProtocol } from './DidCommMessagePickupProtocol' +export type { DidCommMessagePickupProtocol } from './DidCommMessagePickupProtocol' diff --git a/packages/didcomm/src/modules/message-pickup/protocol/v1/messages/DidCommBatchMessage.ts b/packages/didcomm/src/modules/message-pickup/protocol/v1/messages/DidCommBatchMessage.ts index dc88983dd6..fffffdf0d0 100644 --- a/packages/didcomm/src/modules/message-pickup/protocol/v1/messages/DidCommBatchMessage.ts +++ b/packages/didcomm/src/modules/message-pickup/protocol/v1/messages/DidCommBatchMessage.ts @@ -4,7 +4,7 @@ import { IsArray, IsInstance, IsObject, Matches, ValidateNested } from 'class-va import { MessageIdRegExp } from '../../../../../BaseDidCommMessage' import { DidCommMessage } from '../../../../../DidCommMessage' -import { DidCommEncryptedMessage } from '../../../../../types' +import type { DidCommEncryptedMessage } from '../../../../../types' import { IsValidMessageType, parseMessageType } from '../../../../../util/messageType' export class DidCommBatchMessageMessage { diff --git a/packages/didcomm/src/modules/message-pickup/protocol/v2/__tests__/V2MessagePickupProtocol.test.ts b/packages/didcomm/src/modules/message-pickup/protocol/v2/__tests__/V2MessagePickupProtocol.test.ts index ecba68dbf9..36672ab143 100644 --- a/packages/didcomm/src/modules/message-pickup/protocol/v2/__tests__/V2MessagePickupProtocol.test.ts +++ b/packages/didcomm/src/modules/message-pickup/protocol/v2/__tests__/V2MessagePickupProtocol.test.ts @@ -1,7 +1,7 @@ import type { DidCommEncryptedMessage } from '../../../../../types' +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { EventEmitter } from '../../../../../../../core/src/agent/EventEmitter' -import { CredoError } from '../../../../../../../core/src/error' import { verkeyToDidKey } from '../../../../../../../core/src/modules/dids/helpers' import { uuid } from '../../../../../../../core/src/utils/uuid' import { getAgentContext, getMockConnection, mockFunction } from '../../../../../../../core/tests/helpers' @@ -9,6 +9,7 @@ import { DidCommEventTypes } from '../../../../../DidCommEvents' import { DidCommMessageSender } from '../../../../../DidCommMessageSender' import { DidCommModuleConfig } from '../../../../../DidCommModuleConfig' import { DidCommAttachment } from '../../../../../decorators/attachment/DidCommAttachment' +import { DidCommProblemReportError } from '../../../../../errors/problem-reports/DidCommProblemReportError' import { DidCommInboundMessageContext } from '../../../../../models' import { InMemoryQueueTransportRepository } from '../../../../../transport/queue/InMemoryQueueTransportRepository' import { DidCommConnectionService, DidCommDidExchangeState, DidCommTrustPingMessage } from '../../../../connections' @@ -28,16 +29,18 @@ const mockConnection = getMockConnection({ }) // Mock classes -jest.mock('../../../../../transport/queue/InMemoryQueueTransportRepository') -jest.mock('../../../../../../../core/src/agent/EventEmitter') -jest.mock('../../../../../DidCommMessageSender') -jest.mock('../../../../connections/services/DidCommConnectionService') +vi.mock('../../../../../transport/queue/InMemoryQueueTransportRepository') +vi.mock('../../../../../../../core/src/agent/EventEmitter') +vi.mock('../../../../../DidCommMessageSender') +vi.mock('../../../../connections/services/DidCommConnectionService') // Mock typed object -const InMessageRepositoryMock = InMemoryQueueTransportRepository as jest.Mock -const EventEmitterMock = EventEmitter as jest.Mock -const MessageSenderMock = DidCommMessageSender as jest.Mock -const ConnectionServiceMock = DidCommConnectionService as jest.Mock +const InMessageRepositoryMock = InMemoryQueueTransportRepository as MockedClassConstructor< + typeof InMemoryQueueTransportRepository +> +const EventEmitterMock = EventEmitter as MockedClassConstructor +const MessageSenderMock = DidCommMessageSender as MockedClassConstructor +const ConnectionServiceMock = DidCommConnectionService as MockedClassConstructor const queueTransportRepository = new InMessageRepositoryMock() @@ -386,9 +389,7 @@ describe('DidCommMessagePickupV2Protocol', () => { agentContext, }) - await expect(pickupProtocol.processDelivery(messageContext)).rejects.toThrow( - new CredoError('Error processing attachments') - ) + await expect(pickupProtocol.processDelivery(messageContext)).rejects.toThrowError(DidCommProblemReportError) }) it('should return a message received with an message id list in it', async () => { @@ -422,7 +423,7 @@ describe('DidCommMessagePickupV2Protocol', () => { it('calls the event emitter for each message', async () => { // This is to not take into account events previously emitted - jest.clearAllMocks() + vi.clearAllMocks() const messageDeliveryMessage = new DidCommMessageDeliveryV2Message({ threadId: uuid(), diff --git a/packages/didcomm/src/modules/oob/DidCommOutOfBandApi.ts b/packages/didcomm/src/modules/oob/DidCommOutOfBandApi.ts index 593f52e60b..58ffa5d2b2 100644 --- a/packages/didcomm/src/modules/oob/DidCommOutOfBandApi.ts +++ b/packages/didcomm/src/modules/oob/DidCommOutOfBandApi.ts @@ -14,7 +14,7 @@ import { JsonEncoder, JsonTransformer, Kms, - Logger, + type Logger, filterContextCorrelationId, inject, injectable, @@ -50,9 +50,9 @@ import { DidCommOutOfBandRole } from './domain/DidCommOutOfBandRole' import { DidCommOutOfBandState } from './domain/DidCommOutOfBandState' import { OutOfBandDidCommService } from './domain/OutOfBandDidCommService' import { outOfBandServiceToInlineKeysNumAlgo2Did } from './helpers' -import { DidCommOutOfBandInvitation, InvitationType } from './messages' +import { DidCommInvitationType, DidCommOutOfBandInvitation } from './messages' import { DidCommOutOfBandRepository } from './repository' -import { DidCommOutOfBandInlineServiceKey, DidCommOutOfBandRecord } from './repository/DidCommOutOfBandRecord' +import { type DidCommOutOfBandInlineServiceKey, DidCommOutOfBandRecord } from './repository/DidCommOutOfBandRecord' import { DidCommOutOfBandRecordMetadataKeys } from './repository/outOfBandRecordMetadataTypes' const didCommProfiles = ['didcomm/aip1', 'didcomm/aip2;env=rfc19'] @@ -283,7 +283,7 @@ export class DidCommOutOfBandApi { // Set legacy invitation type outOfBandRecord.metadata.set(DidCommOutOfBandRecordMetadataKeys.LegacyInvitation, { - legacyInvitationType: InvitationType.Connection, + legacyInvitationType: DidCommInvitationType.Connection, }) const outOfBandRepository = this.agentContext.dependencyManager.resolve(DidCommOutOfBandRepository) await outOfBandRepository.update(this.agentContext, outOfBandRecord) @@ -309,7 +309,7 @@ export class DidCommOutOfBandApi { // Set legacy invitation type outOfBandRecord.metadata.set(DidCommOutOfBandRecordMetadataKeys.LegacyInvitation, { - legacyInvitationType: InvitationType.Connectionless, + legacyInvitationType: DidCommInvitationType.Connectionless, }) const outOfBandRepository = this.agentContext.dependencyManager.resolve(DidCommOutOfBandRepository) await outOfBandRepository.update(this.agentContext, outOfBandRecord) @@ -481,7 +481,7 @@ export class DidCommOutOfBandApi { } // If the invitation was converted from another legacy format, we store this, as its needed for some flows - if (outOfBandInvitation.invitationType && outOfBandInvitation.invitationType !== InvitationType.OutOfBand) { + if (outOfBandInvitation.invitationType && outOfBandInvitation.invitationType !== DidCommInvitationType.OutOfBand) { outOfBandRecord.metadata.set(DidCommOutOfBandRecordMetadataKeys.LegacyInvitation, { legacyInvitationType: outOfBandInvitation.invitationType, }) @@ -920,7 +920,7 @@ export class DidCommOutOfBandApi { // If the invitation is created from a legacy connectionless invitation, we don't need to set the pthid // as that's not expected, and it's generated on our side only - if (legacyInvitationMetadata?.legacyInvitationType === InvitationType.Connectionless) { + if (legacyInvitationMetadata?.legacyInvitationType === DidCommInvitationType.Connectionless) { return } diff --git a/packages/didcomm/src/modules/oob/DidCommOutOfBandService.ts b/packages/didcomm/src/modules/oob/DidCommOutOfBandService.ts index aedf5251d0..e6d0054b27 100644 --- a/packages/didcomm/src/modules/oob/DidCommOutOfBandService.ts +++ b/packages/didcomm/src/modules/oob/DidCommOutOfBandService.ts @@ -14,7 +14,7 @@ import { DidCommOutOfBandRole } from './domain/DidCommOutOfBandRole' import { DidCommOutOfBandState } from './domain/DidCommOutOfBandState' import { DidCommHandshakeReuseMessage, DidCommOutOfBandInvitation } from './messages' import { DidCommHandshakeReuseAcceptedMessage } from './messages/DidCommHandshakeReuseAcceptedMessage' -import { DidCommOutOfBandInlineServiceKey, DidCommOutOfBandRecord, DidCommOutOfBandRepository } from './repository' +import { type DidCommOutOfBandInlineServiceKey, DidCommOutOfBandRecord, DidCommOutOfBandRepository } from './repository' export interface CreateFromImplicitInvitationConfig { did: string diff --git a/packages/didcomm/src/modules/oob/__tests__/OutOfBandModule.test.ts b/packages/didcomm/src/modules/oob/__tests__/OutOfBandModule.test.ts index 28abf65a04..783be4a3f9 100644 --- a/packages/didcomm/src/modules/oob/__tests__/OutOfBandModule.test.ts +++ b/packages/didcomm/src/modules/oob/__tests__/OutOfBandModule.test.ts @@ -1,10 +1,11 @@ +import type { MockedClassConstructor } from '../../../../../../tests/types' import { DependencyManager } from '../../../../../core/src/plugins/DependencyManager' import { DidCommOutOfBandModule } from '../DidCommOutOfBandModule' import { DidCommOutOfBandService } from '../DidCommOutOfBandService' import { DidCommOutOfBandRepository } from '../repository/DidCommOutOfBandRepository' -jest.mock('../../../../../core/src/plugins/DependencyManager') -const DependencyManagerMock = DependencyManager as jest.Mock +vi.mock('../../../../../core/src/plugins/DependencyManager') +const DependencyManagerMock = DependencyManager as MockedClassConstructor const dependencyManager = new DependencyManagerMock() diff --git a/packages/didcomm/src/modules/oob/__tests__/OutOfBandService.test.ts b/packages/didcomm/src/modules/oob/__tests__/OutOfBandService.test.ts index 74a8486db3..1596d7ab80 100644 --- a/packages/didcomm/src/modules/oob/__tests__/OutOfBandService.test.ts +++ b/packages/didcomm/src/modules/oob/__tests__/OutOfBandService.test.ts @@ -3,6 +3,7 @@ import type { DidCommDocumentService } from '../../../services' import { Subject } from 'rxjs' import { Kms, TypedArrayEncoder } from '@credo-ts/core' +import type { MockedClassConstructor } from '../../../../../../tests/types' import { EventEmitter } from '../../../../../core/src/agent/EventEmitter' import { CredoError } from '../../../../../core/src/error' import { @@ -22,8 +23,8 @@ import { DidCommHandshakeReuseMessage } from '../messages' import { DidCommHandshakeReuseAcceptedMessage } from '../messages/DidCommHandshakeReuseAcceptedMessage' import { DidCommOutOfBandRepository } from '../repository' -jest.mock('../repository/DidCommOutOfBandRepository') -const OutOfBandRepositoryMock = DidCommOutOfBandRepository as jest.Mock +vi.mock('../repository/DidCommOutOfBandRepository') +const OutOfBandRepositoryMock = DidCommOutOfBandRepository as MockedClassConstructor const key = Kms.PublicJwk.fromPublicKey({ kty: 'OKP', @@ -162,7 +163,7 @@ describe('DidCommOutOfBandService', () => { parentThreadId: 'parentThreadId', }) - const reuseListener = jest.fn() + const reuseListener = vi.fn() const connection = getMockConnection({ state: DidCommDidExchangeState.Completed }) const messageContext = new DidCommInboundMessageContext(reuseMessage, { @@ -214,7 +215,7 @@ describe('DidCommOutOfBandService', () => { }) mockFunction(outOfBandRepository.findSingleByQuery).mockResolvedValue(mockOob) - const updateStateSpy = jest.spyOn(outOfBandService, 'updateState') + const updateStateSpy = vi.spyOn(outOfBandService, 'updateState') // Reusable shouldn't update state await outOfBandService.processHandshakeReuse(messageContext) @@ -377,7 +378,7 @@ describe('DidCommOutOfBandService', () => { threadId: 'threadId', }) - const reuseListener = jest.fn() + const reuseListener = vi.fn() const connection = getMockConnection({ state: DidCommDidExchangeState.Completed, id: 'connectionId' }) const messageContext = new DidCommInboundMessageContext(reuseAcceptedMessage, { @@ -432,7 +433,7 @@ describe('DidCommOutOfBandService', () => { }) mockFunction(outOfBandRepository.findSingleByQuery).mockResolvedValue(mockOob) - const updateStateSpy = jest.spyOn(outOfBandService, 'updateState') + const updateStateSpy = vi.spyOn(outOfBandService, 'updateState') await outOfBandService.processHandshakeReuseAccepted(messageContext) expect(updateStateSpy).toHaveBeenCalledWith(agentContext, mockOob, DidCommOutOfBandState.Done) @@ -461,7 +462,7 @@ describe('DidCommOutOfBandService', () => { }) test('emits an OutOfBandStateChangedEvent', async () => { - const stateChangedListener = jest.fn() + const stateChangedListener = vi.fn() const mockOob = getMockOutOfBand({ state: DidCommOutOfBandState.Initial, diff --git a/packages/didcomm/src/modules/oob/__tests__/connect-to-self.test.ts b/packages/didcomm/src/modules/oob/__tests__/connect-to-self.test.ts index 3b5d740172..9b11943d79 100644 --- a/packages/didcomm/src/modules/oob/__tests__/connect-to-self.test.ts +++ b/packages/didcomm/src/modules/oob/__tests__/connect-to-self.test.ts @@ -4,7 +4,7 @@ import { Subject } from 'rxjs' import { SubjectInboundTransport } from '../../../../../../tests/transport/SubjectInboundTransport' import { SubjectOutboundTransport } from '../../../../../../tests/transport/SubjectOutboundTransport' -import { Agent } from '../../../../../core' +import { Agent } from '../../../../../core/src/index' import { getAgentOptions } from '../../../../../core/tests/helpers' import { DidCommDidExchangeState, DidCommHandshakeProtocol } from '../../connections' import { DidCommOutOfBandState } from '../domain/DidCommOutOfBandState' diff --git a/packages/didcomm/src/modules/oob/__tests__/implicit.test.ts b/packages/didcomm/src/modules/oob/__tests__/implicit.test.ts index b26dfb9443..f12a393300 100644 --- a/packages/didcomm/src/modules/oob/__tests__/implicit.test.ts +++ b/packages/didcomm/src/modules/oob/__tests__/implicit.test.ts @@ -69,7 +69,7 @@ describe('out of band implicit', () => { await faberAgent.didcomm.connections.deleteById(connection.id) } - jest.resetAllMocks() + vi.resetAllMocks() }) test(`make a connection with ${DidCommHandshakeProtocol.DidExchange} based on implicit OOB invitation`, async () => { diff --git a/packages/didcomm/src/modules/oob/converters.ts b/packages/didcomm/src/modules/oob/converters.ts index 516e9baff4..8d39f5a451 100644 --- a/packages/didcomm/src/modules/oob/converters.ts +++ b/packages/didcomm/src/modules/oob/converters.ts @@ -11,11 +11,11 @@ import { import { DidCommConnectionInvitationMessage, - DidCommConnectionInvitationMessageOptions, + type DidCommConnectionInvitationMessageOptions, } from '../connections/messages/DidCommConnectionInvitationMessage' import { OutOfBandDidCommService } from './domain/OutOfBandDidCommService' -import { DidCommOutOfBandInvitation, InvitationType } from './messages/DidCommOutOfBandInvitation' +import { DidCommInvitationType, DidCommOutOfBandInvitation } from './messages/DidCommOutOfBandInvitation' export function convertToNewInvitation(oldInvitation: DidCommConnectionInvitationMessage) { let service: string | OutOfBandDidCommService @@ -46,7 +46,7 @@ export function convertToNewInvitation(oldInvitation: DidCommConnectionInvitatio } const outOfBandInvitation = new DidCommOutOfBandInvitation(options) - outOfBandInvitation.invitationType = InvitationType.Connection + outOfBandInvitation.invitationType = DidCommInvitationType.Connection return outOfBandInvitation } diff --git a/packages/didcomm/src/modules/oob/messages/DidCommInvitationType.ts b/packages/didcomm/src/modules/oob/messages/DidCommInvitationType.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/didcomm/src/modules/oob/messages/DidCommOutOfBandInvitation.ts b/packages/didcomm/src/modules/oob/messages/DidCommOutOfBandInvitation.ts index 77776f6765..30b871f703 100644 --- a/packages/didcomm/src/modules/oob/messages/DidCommOutOfBandInvitation.ts +++ b/packages/didcomm/src/modules/oob/messages/DidCommOutOfBandInvitation.ts @@ -11,6 +11,15 @@ import { IsValidMessageType, parseMessageType, replaceLegacyDidSovPrefix } from import { OutOfBandDidCommService } from '../domain/OutOfBandDidCommService' import { outOfBandServiceToNumAlgo2Did } from '../helpers' +/** + * The original invitation an out of band invitation was derived from. + */ +export enum DidCommInvitationType { + OutOfBand = 'out-of-band/1.x', + Connection = 'connections/1.x', + Connectionless = 'connectionless', +} + export interface DidCommOutOfBandInvitationOptions { id?: string label?: string @@ -45,7 +54,7 @@ export class DidCommOutOfBandInvitation extends DidCommMessage { * from what the oob invitation was originally created (e.g. legacy connectionless invitation). */ @Exclude() - public invitationType?: InvitationType + public invitationType?: DidCommInvitationType public addRequest(message: DidCommMessage) { if (!this.requests) this.requests = [] @@ -182,12 +191,3 @@ function OutOfBandServiceTransformer() { return value }) } - -/** - * The original invitation an out of band invitation was derived from. - */ -export enum InvitationType { - OutOfBand = 'out-of-band/1.x', - Connection = 'connections/1.x', - Connectionless = 'connectionless', -} diff --git a/packages/didcomm/src/modules/oob/repository/DidCommOutOfBandRepository.ts b/packages/didcomm/src/modules/oob/repository/DidCommOutOfBandRepository.ts index 73f70a31d7..b1ed2580a1 100644 --- a/packages/didcomm/src/modules/oob/repository/DidCommOutOfBandRepository.ts +++ b/packages/didcomm/src/modules/oob/repository/DidCommOutOfBandRepository.ts @@ -1,4 +1,4 @@ -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { DidCommOutOfBandRecord } from './DidCommOutOfBandRecord' diff --git a/packages/didcomm/src/modules/oob/repository/__tests__/OutOfBandRecord.test.ts b/packages/didcomm/src/modules/oob/repository/__tests__/OutOfBandRecord.test.ts index 147fb454c1..c7739c375e 100644 --- a/packages/didcomm/src/modules/oob/repository/__tests__/OutOfBandRecord.test.ts +++ b/packages/didcomm/src/modules/oob/repository/__tests__/OutOfBandRecord.test.ts @@ -1,4 +1,4 @@ -import { JsonTransformer } from '../../../../../../core' +import { JsonTransformer } from '../../../../../../core/src/index' import { DidCommOutOfBandRole } from '../../domain/DidCommOutOfBandRole' import { DidCommOutOfBandState } from '../../domain/DidCommOutOfBandState' import { OutOfBandDidCommService } from '../../domain/OutOfBandDidCommService' diff --git a/packages/didcomm/src/modules/oob/repository/outOfBandRecordMetadataTypes.ts b/packages/didcomm/src/modules/oob/repository/outOfBandRecordMetadataTypes.ts index bd667e4941..d16780df54 100644 --- a/packages/didcomm/src/modules/oob/repository/outOfBandRecordMetadataTypes.ts +++ b/packages/didcomm/src/modules/oob/repository/outOfBandRecordMetadataTypes.ts @@ -1,4 +1,4 @@ -import type { InvitationType } from '../messages' +import type { DidCommInvitationType } from '../messages' export enum DidCommOutOfBandRecordMetadataKeys { RecipientRouting = '_internal/recipientRouting', @@ -20,6 +20,6 @@ export type DidCommOutOfBandRecordMetadata = { /** * Indicates the type of the legacy invitation that was used for this out of band exchange. */ - legacyInvitationType?: Exclude + legacyInvitationType?: Exclude } } diff --git a/packages/didcomm/src/modules/proofs/__tests__/ProofsModule.test.ts b/packages/didcomm/src/modules/proofs/__tests__/ProofsModule.test.ts index 4abd974868..8e9e4dc206 100644 --- a/packages/didcomm/src/modules/proofs/__tests__/ProofsModule.test.ts +++ b/packages/didcomm/src/modules/proofs/__tests__/ProofsModule.test.ts @@ -1,4 +1,4 @@ -import type { DependencyManager } from '../../../../../core' +import type { DependencyManager } from '../../../../../core/src/index' import type { DidCommProofProtocol } from '../protocol/DidCommProofProtocol' import { getAgentContext } from '../../../../../core/tests' @@ -10,9 +10,9 @@ import { DidCommProofV2Protocol } from '../protocol/v2/DidCommProofV2Protocol' import { DidCommProofExchangeRepository } from '../repository' const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), } as unknown as DependencyManager describe('DidCommProofsModule', () => { @@ -36,7 +36,7 @@ describe('DidCommProofsModule', () => { }) test('calls register on the provided ProofProtocols', async () => { - const registerMock = jest.fn() + const registerMock = vi.fn() const proofProtocol = { register: registerMock, } as unknown as DidCommProofProtocol diff --git a/packages/didcomm/src/modules/proofs/__tests__/ProofsModuleConfig.test.ts b/packages/didcomm/src/modules/proofs/__tests__/ProofsModuleConfig.test.ts index 3ce837e7f8..a4c5f0c64a 100644 --- a/packages/didcomm/src/modules/proofs/__tests__/ProofsModuleConfig.test.ts +++ b/packages/didcomm/src/modules/proofs/__tests__/ProofsModuleConfig.test.ts @@ -14,7 +14,7 @@ describe('ProofsModuleConfig', () => { }) test('sets values', () => { - const proofProtocol = jest.fn() as unknown as DidCommProofProtocol + const proofProtocol = vi.fn() as unknown as DidCommProofProtocol const config = new DidCommProofsModuleConfig({ autoAcceptProofs: DidCommAutoAcceptProof.Always, proofProtocols: [proofProtocol], diff --git a/packages/didcomm/src/modules/proofs/formats/dif-presentation-exchange/__tests__/PresentationExchangeProofFormatService.test.ts b/packages/didcomm/src/modules/proofs/formats/dif-presentation-exchange/__tests__/PresentationExchangeProofFormatService.test.ts index ef336fb1ae..0e971787bb 100644 --- a/packages/didcomm/src/modules/proofs/formats/dif-presentation-exchange/__tests__/PresentationExchangeProofFormatService.test.ts +++ b/packages/didcomm/src/modules/proofs/formats/dif-presentation-exchange/__tests__/PresentationExchangeProofFormatService.test.ts @@ -1,4 +1,4 @@ -import type { DifPresentationExchangeDefinitionV1 } from '../../../../../../../core' +import type { DifPresentationExchangeDefinitionV1 } from '../../../../../../../core/src/index' import type { DidCommProofFormatService } from '../../DidCommProofFormatService' import type { DidCommDifPresentationExchangeProofFormat } from '../DidCommDifPresentationExchangeProofFormat' @@ -82,8 +82,8 @@ const verifiablePresentation = new W3cJsonLdVerifiablePresentation({ proofValue: 'z58DAdFfa9SkqZMVPxAQpic7ndSayn1PzZs6ZjWp1CktyGesjuTSwRdoWhAfGFCF5bppETSTojQCrfFPP2oumHKtz', }, }) -jest.spyOn(W3cCredentialRepository.prototype, 'findByQuery').mockResolvedValue([mockCredentialRecord]) -jest.spyOn(DifPresentationExchangeService.prototype, 'createPresentation').mockResolvedValue({ +vi.spyOn(W3cCredentialRepository.prototype, 'findByQuery').mockResolvedValue([mockCredentialRecord]) +vi.spyOn(DifPresentationExchangeService.prototype, 'createPresentation').mockResolvedValue({ presentationSubmission, verifiablePresentations: [verifiablePresentation], presentationSubmissionLocation: PresentationSubmissionLocation.PRESENTATION, diff --git a/packages/didcomm/src/modules/proofs/protocol/index.ts b/packages/didcomm/src/modules/proofs/protocol/index.ts index a03e5d92cb..7cb9e25d05 100644 --- a/packages/didcomm/src/modules/proofs/protocol/index.ts +++ b/packages/didcomm/src/modules/proofs/protocol/index.ts @@ -1,7 +1,7 @@ export * from './v2' import * as ProofProtocolOptions from './DidCommProofProtocolOptions' -export { DidCommProofProtocol } from './DidCommProofProtocol' +export type { DidCommProofProtocol } from './DidCommProofProtocol' // NOTE: ideally we don't export the BaseProofProtocol, but as the DidCommProofV1Protocol is defined in the // anoncreds package, we need to export it. We should at some point look at creating a core package which can be used for // sharing internal types, and when you want to build you own modules, and an agent package, which is the one you use when diff --git a/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/V2ProofProtocol.test.ts b/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/V2ProofProtocol.test.ts index e24ebe01ec..8b3a94d827 100644 --- a/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/V2ProofProtocol.test.ts +++ b/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/V2ProofProtocol.test.ts @@ -4,6 +4,7 @@ import type { CustomDidCommProofExchangeTags } from '../../../repository/DidComm import { Subject } from 'rxjs' +import type { MockedClassConstructor } from '../../../../../../../../tests/types' import { EventEmitter } from '../../../../../../../core/src/agent/EventEmitter' import { uuid } from '../../../../../../../core/src/utils/uuid' import { @@ -31,21 +32,23 @@ import { DidCommProofV2Protocol } from '../DidCommProofV2Protocol' import { DidCommPresentationV2ProblemReportMessage, DidCommRequestPresentationV2Message } from '../messages' // Mock classes -jest.mock('../../../repository/DidCommProofExchangeRepository') -jest.mock('../../../../connections/services/DidCommConnectionService') -jest.mock('../../../../../repository/DidCommMessageRepository') +vi.mock('../../../repository/DidCommProofExchangeRepository') +vi.mock('../../../../connections/services/DidCommConnectionService') +vi.mock('../../../../../repository/DidCommMessageRepository') // Mock typed object -const ProofRepositoryMock = DidCommProofExchangeRepository as jest.Mock -const connectionServiceMock = DidCommConnectionService as jest.Mock -const didCommMessageRepositoryMock = DidCommMessageRepository as jest.Mock +const ProofRepositoryMock = DidCommProofExchangeRepository as MockedClassConstructor< + typeof DidCommProofExchangeRepository +> +const connectionServiceMock = DidCommConnectionService as MockedClassConstructor +const didCommMessageRepositoryMock = DidCommMessageRepository as MockedClassConstructor const proofRepository = new ProofRepositoryMock() const connectionService = new connectionServiceMock() const didCommMessageRepository = new didCommMessageRepositoryMock() const proofFormatService = { supportsFormat: () => true, - processRequest: jest.fn(), + processRequest: vi.fn(), } as unknown as DidCommProofFormatService const agentConfig = getAgentConfig('V2ProofProtocolTest') @@ -128,7 +131,7 @@ describe('DidCommProofV2Protocol', () => { }) test(`creates and return proof record in ${DidCommProofState.PresentationReceived} state with offer, without thread ID`, async () => { - const repositorySaveSpy = jest.spyOn(proofRepository, 'save') + const repositorySaveSpy = vi.spyOn(proofRepository, 'save') // when const returnedProofExchangeRecord = await proofProtocol.processRequest(messageContext) @@ -149,7 +152,7 @@ describe('DidCommProofV2Protocol', () => { }) test(`emits stateChange event with ${DidCommProofState.RequestReceived}`, async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on(DidCommProofEventTypes.ProofStateChanged, eventListenerMock) // when @@ -226,7 +229,7 @@ describe('DidCommProofV2Protocol', () => { }) test('updates problem report error message and returns proof record', async () => { - const repositoryUpdateSpy = jest.spyOn(proofRepository, 'update') + const repositoryUpdateSpy = vi.spyOn(proofRepository, 'update') // given mockFunction(proofRepository.getSingleByQuery).mockReturnValue(Promise.resolve(proof)) diff --git a/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-anoncreds-unqualified-proofs.e2e.test.ts b/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-anoncreds-unqualified-proofs.e2e.test.ts index 2ac8631fb8..bdf1a2377f 100644 --- a/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-anoncreds-unqualified-proofs.e2e.test.ts +++ b/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-anoncreds-unqualified-proofs.e2e.test.ts @@ -8,7 +8,11 @@ import { } from '../../../../../../../anoncreds/tests/legacyAnonCredsSetup' import { waitForProofExchangeRecord } from '../../../../../../../core/tests' import testLogger from '../../../../../../../core/tests/logger' -import { DidCommAttachment, DidCommAttachmentData, DidCommLinkedAttachment } from '../../../../../../../didcomm' +import { + DidCommAttachment, + DidCommAttachmentData, + DidCommLinkedAttachment, +} from '../../../../../../../didcomm/src/index' import { DidCommProofState } from '../../../models' import { DidCommProofExchangeRecord } from '../../../repository' import { diff --git a/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-indy-connectionless-proofs.e2e.test.ts b/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-indy-connectionless-proofs.e2e.test.ts index fac88581d5..42ca6e85ce 100644 --- a/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-indy-connectionless-proofs.e2e.test.ts +++ b/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-indy-connectionless-proofs.e2e.test.ts @@ -12,7 +12,7 @@ import { prepareForAnonCredsIssuance, setupAnonCredsTests, } from '../../../../../../../anoncreds/tests/legacyAnonCredsSetup' -import { Agent } from '../../../../../../../core' +import { Agent } from '../../../../../../../core/src/index' import { uuid } from '../../../../../../../core/src/utils/uuid' import { getAgentOptions, diff --git a/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-indy-proofs.e2e.test.ts b/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-indy-proofs.e2e.test.ts index 543c8e5cfc..96d2357193 100644 --- a/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-indy-proofs.e2e.test.ts +++ b/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-indy-proofs.e2e.test.ts @@ -7,7 +7,11 @@ import { } from '../../../../../../../anoncreds/tests/legacyAnonCredsSetup' import { waitForProofExchangeRecord } from '../../../../../../../core/tests' import testLogger from '../../../../../../../core/tests/logger' -import { DidCommAttachment, DidCommAttachmentData, DidCommLinkedAttachment } from '../../../../../../../didcomm' +import { + DidCommAttachment, + DidCommAttachmentData, + DidCommLinkedAttachment, +} from '../../../../../../../didcomm/src/index' import { DidCommProofState } from '../../../models' import { DidCommProofExchangeRecord } from '../../../repository' import { diff --git a/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-presentation-exchange-presentation.test.ts b/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-presentation-exchange-presentation.test.ts index fd3beb729c..7ee5d8849e 100644 --- a/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-presentation-exchange-presentation.test.ts +++ b/packages/didcomm/src/modules/proofs/protocol/v2/__tests__/v2-presentation-exchange-presentation.test.ts @@ -1,7 +1,7 @@ -import type { Agent } from '../../../../../../../core' +import type { Agent } from '../../../../../../../core/src/index' import type { getJsonLdModules } from '../../../../../../../core/tests' -import { CREDENTIALS_CONTEXT_V1_URL, TypedArrayEncoder } from '../../../../../../../core' +import { CREDENTIALS_CONTEXT_V1_URL, TypedArrayEncoder } from '../../../../../../../core/src/index' import { setupJsonLdTests, waitForCredentialRecord, waitForProofExchangeRecord } from '../../../../../../../core/tests' import testLogger from '../../../../../../../core/tests/logger' import { DidCommMessageRepository } from '../../../../../repository' diff --git a/packages/didcomm/src/modules/proofs/repository/DidCommProofExchangeRepository.ts b/packages/didcomm/src/modules/proofs/repository/DidCommProofExchangeRepository.ts index 974f637c9f..765b1925d6 100644 --- a/packages/didcomm/src/modules/proofs/repository/DidCommProofExchangeRepository.ts +++ b/packages/didcomm/src/modules/proofs/repository/DidCommProofExchangeRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { DidCommProofExchangeRecord } from './DidCommProofExchangeRecord' diff --git a/packages/didcomm/src/modules/routing/DidCommMediationRecipientApi.ts b/packages/didcomm/src/modules/routing/DidCommMediationRecipientApi.ts index bebc8f818b..76f30fbda0 100644 --- a/packages/didcomm/src/modules/routing/DidCommMediationRecipientApi.ts +++ b/packages/didcomm/src/modules/routing/DidCommMediationRecipientApi.ts @@ -11,7 +11,7 @@ import { DidsApi, EventEmitter, InjectionSymbols, - Logger, + type Logger, filterContextCorrelationId, inject, injectable, diff --git a/packages/didcomm/src/modules/routing/__tests__/MediationRecipientModule.test.ts b/packages/didcomm/src/modules/routing/__tests__/MediationRecipientModule.test.ts index 8cc7a3895b..d50db1f45a 100644 --- a/packages/didcomm/src/modules/routing/__tests__/MediationRecipientModule.test.ts +++ b/packages/didcomm/src/modules/routing/__tests__/MediationRecipientModule.test.ts @@ -1,10 +1,11 @@ +import type { MockedClassConstructor } from '../../../../../../tests/types' import { DependencyManager } from '../../../../../core/src/plugins/DependencyManager' import { DidCommMediationRecipientModule } from '../DidCommMediationRecipientModule' import { DidCommMediationRepository } from '../repository' import { DidCommMediationRecipientService, DidCommRoutingService } from '../services' -jest.mock('../../../../../core/src/plugins/DependencyManager') -const DependencyManagerMock = DependencyManager as jest.Mock +vi.mock('../../../../../core/src/plugins/DependencyManager') +const DependencyManagerMock = DependencyManager as MockedClassConstructor const dependencyManager = new DependencyManagerMock() diff --git a/packages/didcomm/src/modules/routing/__tests__/MediatorModule.test.ts b/packages/didcomm/src/modules/routing/__tests__/MediatorModule.test.ts index 64d45a4099..dca6e5dbb9 100644 --- a/packages/didcomm/src/modules/routing/__tests__/MediatorModule.test.ts +++ b/packages/didcomm/src/modules/routing/__tests__/MediatorModule.test.ts @@ -1,10 +1,11 @@ +import type { MockedClassConstructor } from '../../../../../../tests/types' import { DependencyManager } from '../../../../../core/src/plugins/DependencyManager' import { DidCommMediatorModule } from '../DidCommMediatorModule' import { DidCommMediationRepository, DidCommMediatorRoutingRepository } from '../repository' import { DidCommMediatorService } from '../services' -jest.mock('../../../../../core/src/plugins/DependencyManager') -const DependencyManagerMock = DependencyManager as jest.Mock +vi.mock('../../../../../core/src/plugins/DependencyManager') +const DependencyManagerMock = DependencyManager as MockedClassConstructor const dependencyManager = new DependencyManagerMock() diff --git a/packages/didcomm/src/modules/routing/__tests__/mediation.test.ts b/packages/didcomm/src/modules/routing/__tests__/mediation.test.ts index 8a08b4d3d3..c8d573e16c 100644 --- a/packages/didcomm/src/modules/routing/__tests__/mediation.test.ts +++ b/packages/didcomm/src/modules/routing/__tests__/mediation.test.ts @@ -10,7 +10,7 @@ import { Agent } from '../../../../../core/src/agent/Agent' import { sleep } from '../../../../../core/src/utils/sleep' import { getAgentOptions, waitForBasicMessage } from '../../../../../core/tests/helpers' import { DidCommModule } from '../../../DidCommModule' -import { DidCommModuleConfigOptions } from '../../../DidCommModuleConfig' +import type { DidCommModuleConfigOptions } from '../../../DidCommModuleConfig' import { DidCommConnectionRecord, DidCommHandshakeProtocol } from '../../connections' import { DidCommMediatorPickupStrategy } from '../DidCommMediatorPickupStrategy' import { DidCommMediationState } from '../models/DidCommMediationState' diff --git a/packages/didcomm/src/modules/routing/messages/DidCommForwardMessage.ts b/packages/didcomm/src/modules/routing/messages/DidCommForwardMessage.ts index 40c2fdbbb1..d3379774b3 100644 --- a/packages/didcomm/src/modules/routing/messages/DidCommForwardMessage.ts +++ b/packages/didcomm/src/modules/routing/messages/DidCommForwardMessage.ts @@ -2,7 +2,7 @@ import { Expose } from 'class-transformer' import { IsObject, IsString } from 'class-validator' import { DidCommMessage } from '../../../DidCommMessage' -import { DidCommEncryptedMessage } from '../../../types' +import type { DidCommEncryptedMessage } from '../../../types' import { IsValidMessageType, parseMessageType } from '../../../util/messageType' export interface DidCommForwardMessageOptions { diff --git a/packages/didcomm/src/modules/routing/repository/DidCommMediationRepository.ts b/packages/didcomm/src/modules/routing/repository/DidCommMediationRepository.ts index 2515adeb33..b581ebfd70 100644 --- a/packages/didcomm/src/modules/routing/repository/DidCommMediationRepository.ts +++ b/packages/didcomm/src/modules/routing/repository/DidCommMediationRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { DidCommMediationRecord } from './DidCommMediationRecord' diff --git a/packages/didcomm/src/modules/routing/repository/DidCommMediatorRoutingRepository.ts b/packages/didcomm/src/modules/routing/repository/DidCommMediatorRoutingRepository.ts index 14aad51a01..118cd8e297 100644 --- a/packages/didcomm/src/modules/routing/repository/DidCommMediatorRoutingRepository.ts +++ b/packages/didcomm/src/modules/routing/repository/DidCommMediatorRoutingRepository.ts @@ -1,4 +1,4 @@ -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { DidCommMediatorRoutingRecord } from './DidCommMediatorRoutingRecord' diff --git a/packages/didcomm/src/modules/routing/services/DidCommMediationRecipientService.ts b/packages/didcomm/src/modules/routing/services/DidCommMediationRecipientService.ts index 5ce9091fa7..a2fa3aba77 100644 --- a/packages/didcomm/src/modules/routing/services/DidCommMediationRecipientService.ts +++ b/packages/didcomm/src/modules/routing/services/DidCommMediationRecipientService.ts @@ -1,4 +1,4 @@ -import { AgentContext, Kms, Query, QueryOptions } from '@credo-ts/core' +import { AgentContext, Kms, type Query, type QueryOptions } from '@credo-ts/core' import type { DidCommMessage } from '../../../DidCommMessage' import type { DidCommInboundMessageContext, DidCommRouting } from '../../../models' import type { DidCommConnectionRecord } from '../../connections/repository' diff --git a/packages/didcomm/src/modules/routing/services/DidCommMediatorService.ts b/packages/didcomm/src/modules/routing/services/DidCommMediatorService.ts index acc25d725d..f03c7d5e7c 100644 --- a/packages/didcomm/src/modules/routing/services/DidCommMediatorService.ts +++ b/packages/didcomm/src/modules/routing/services/DidCommMediatorService.ts @@ -10,7 +10,7 @@ import { EventEmitter, InjectionSymbols, Kms, - Logger, + type Logger, RecordDuplicateError, TypedArrayEncoder, didKeyToVerkey, @@ -49,21 +49,18 @@ export class DidCommMediatorService { private logger: Logger private mediationRepository: DidCommMediationRepository private mediatorRoutingRepository: DidCommMediatorRoutingRepository - private messagePickupApi: DidCommMessagePickupApi private eventEmitter: EventEmitter private connectionService: DidCommConnectionService public constructor( mediationRepository: DidCommMediationRepository, mediatorRoutingRepository: DidCommMediatorRoutingRepository, - messagePickupApi: DidCommMessagePickupApi, eventEmitter: EventEmitter, @inject(InjectionSymbols.Logger) logger: Logger, connectionService: DidCommConnectionService ) { this.mediationRepository = mediationRepository this.mediatorRoutingRepository = mediatorRoutingRepository - this.messagePickupApi = messagePickupApi this.eventEmitter = eventEmitter this.logger = logger this.connectionService = connectionService @@ -86,6 +83,8 @@ export class DidCommMediatorService { ): Promise { const { message, agentContext } = messageContext + const messagePickupApi = agentContext.resolve(DidCommMessagePickupApi) + // TODO: update to class-validator validation if (!message.to) { throw new CredoError('Invalid Message: Missing required attribute "to"') @@ -106,24 +105,24 @@ export class DidCommMediatorService { switch (messageForwardingStrategy) { case DidCommMessageForwardingStrategy.QueueOnly: - await this.messagePickupApi.queueMessage({ + await messagePickupApi.queueMessage({ connectionId: mediationRecord.connectionId, recipientDids: [verkeyToDidKey(message.to)], message: message.message, }) break case DidCommMessageForwardingStrategy.QueueAndLiveModeDelivery: { - await this.messagePickupApi.queueMessage({ + await messagePickupApi.queueMessage({ connectionId: mediationRecord.connectionId, recipientDids: [verkeyToDidKey(message.to)], message: message.message, }) - const session = await this.messagePickupApi.getLiveModeSession({ + const session = await messagePickupApi.getLiveModeSession({ connectionId: mediationRecord.connectionId, role: DidCommMessagePickupSessionRole.MessageHolder, }) if (session) { - await this.messagePickupApi.deliverMessagesFromQueue({ + await messagePickupApi.deliverMessagesFromQueue({ pickupSessionId: session.id, recipientDid: verkeyToDidKey(message.to), }) diff --git a/packages/didcomm/src/modules/routing/services/__tests__/MediationRecipientService.test.ts b/packages/didcomm/src/modules/routing/services/__tests__/MediationRecipientService.test.ts index ba425ed573..35438fe7ca 100644 --- a/packages/didcomm/src/modules/routing/services/__tests__/MediationRecipientService.test.ts +++ b/packages/didcomm/src/modules/routing/services/__tests__/MediationRecipientService.test.ts @@ -2,6 +2,7 @@ import type { AgentContext } from '../../../../../../core/src/agent' import type { DidCommRouting } from '../../../../models' import { Kms, TypedArrayEncoder } from '@credo-ts/core' +import type { MockedClassConstructor } from '../../../../../../../tests/types' import { EventEmitter } from '../../../../../../core/src/agent/EventEmitter' import { DidRepository } from '../../../../../../core/src/modules/dids/repository/DidRepository' import { uuid } from '../../../../../../core/src/utils/uuid' @@ -24,20 +25,22 @@ import { DidCommMediationRecord } from '../../repository/DidCommMediationRecord' import { DidCommMediationRepository } from '../../repository/DidCommMediationRepository' import { DidCommMediationRecipientService } from '../DidCommMediationRecipientService' -jest.mock('../../repository/DidCommMediationRepository') -const MediationRepositoryMock = DidCommMediationRepository as jest.Mock +vi.mock('../../repository/DidCommMediationRepository') +const MediationRepositoryMock = DidCommMediationRepository as MockedClassConstructor -jest.mock('../../../connections/repository/DidCommConnectionRepository') -const ConnectionRepositoryMock = DidCommConnectionRepository as jest.Mock +vi.mock('../../../connections/repository/DidCommConnectionRepository') +const ConnectionRepositoryMock = DidCommConnectionRepository as MockedClassConstructor< + typeof DidCommConnectionRepository +> -jest.mock('../../../../../../core/src/modules/dids/repository/DidRepository') -const DidRepositoryMock = DidRepository as jest.Mock +vi.mock('../../../../../../core/src/modules/dids/repository/DidRepository') +const DidRepositoryMock = DidRepository as MockedClassConstructor -jest.mock('../../../../../../core/src/agent/EventEmitter') -const EventEmitterMock = EventEmitter as jest.Mock +vi.mock('../../../../../../core/src/agent/EventEmitter') +const EventEmitterMock = EventEmitter as MockedClassConstructor -jest.mock('../../../../DidCommMessageSender') -const MessageSenderMock = DidCommMessageSender as jest.Mock +vi.mock('../../../../DidCommMessageSender') +const MessageSenderMock = DidCommMessageSender as MockedClassConstructor describe('DidCommMediationRecipientService', () => { const config = getAgentConfig('MediationRecipientServiceTest', { @@ -133,7 +136,7 @@ describe('DidCommMediationRecipientService', () => { describe('processKeylistUpdateResults', () => { it('it stores did:key-encoded keys in base58 format', async () => { - const spyAddRecipientKey = jest.spyOn(mediationRecord, 'addRecipientKey') + const spyAddRecipientKey = vi.spyOn(mediationRecord, 'addRecipientKey') const connection = getMockConnection({ state: DidCommDidExchangeState.Completed, @@ -197,7 +200,7 @@ describe('DidCommMediationRecipientService', () => { }) beforeEach(() => { - jest.spyOn(mediationRecipientService, 'keylistUpdateAndAwait').mockResolvedValue(mediationRecord) + vi.spyOn(mediationRecipientService, 'keylistUpdateAndAwait').mockResolvedValue(mediationRecord) }) test('adds mediation routing id mediator id is passed', async () => { @@ -217,7 +220,7 @@ describe('DidCommMediationRecipientService', () => { test('adds mediation routing if useDefaultMediator is true and default mediation is found', async () => { mockFunction(mediationRepository.findSingleByQuery).mockResolvedValue(mediationRecord) - jest.spyOn(mediationRecipientService, 'keylistUpdateAndAwait').mockResolvedValue(mediationRecord) + vi.spyOn(mediationRecipientService, 'keylistUpdateAndAwait').mockResolvedValue(mediationRecord) const extendedRouting = await mediationRecipientService.addMediationRouting(agentContext, routing, { useDefaultMediator: true, }) @@ -232,7 +235,7 @@ describe('DidCommMediationRecipientService', () => { test('does not add mediation routing if no mediation is found', async () => { mockFunction(mediationRepository.findSingleByQuery).mockResolvedValue(mediationRecord) - jest.spyOn(mediationRecipientService, 'keylistUpdateAndAwait').mockResolvedValue(mediationRecord) + vi.spyOn(mediationRecipientService, 'keylistUpdateAndAwait').mockResolvedValue(mediationRecord) const extendedRouting = await mediationRecipientService.addMediationRouting(agentContext, routing, { useDefaultMediator: false, }) diff --git a/packages/didcomm/src/modules/routing/services/__tests__/MediatorService.test.ts b/packages/didcomm/src/modules/routing/services/__tests__/MediatorService.test.ts index 5bc0750bb0..99390a0482 100644 --- a/packages/didcomm/src/modules/routing/services/__tests__/MediatorService.test.ts +++ b/packages/didcomm/src/modules/routing/services/__tests__/MediatorService.test.ts @@ -1,6 +1,7 @@ import { Subject } from 'rxjs' import { Kms, TypedArrayEncoder } from '@credo-ts/core' +import type { MockedClassConstructor } from '../../../../../../../tests/types' import { EventEmitter } from '../../../../../../core/src/agent/EventEmitter' import { isDidKey } from '../../../../../../core/src/modules/dids/helpers' import { getAgentConfig, getAgentContext, getMockConnection, mockFunction } from '../../../../../../core/tests/helpers' @@ -15,17 +16,19 @@ import { DidCommMediationRepository } from '../../repository/DidCommMediationRep import { DidCommMediatorRoutingRepository } from '../../repository/DidCommMediatorRoutingRepository' import { DidCommMediatorService } from '../DidCommMediatorService' -jest.mock('../../repository/DidCommMediationRepository') -const MediationRepositoryMock = DidCommMediationRepository as jest.Mock +vi.mock('../../repository/DidCommMediationRepository') +const MediationRepositoryMock = DidCommMediationRepository as MockedClassConstructor -jest.mock('../../repository/DidCommMediatorRoutingRepository') -const MediatorRoutingRepositoryMock = DidCommMediatorRoutingRepository as jest.Mock +vi.mock('../../repository/DidCommMediatorRoutingRepository') +const MediatorRoutingRepositoryMock = DidCommMediatorRoutingRepository as MockedClassConstructor< + typeof DidCommMediatorRoutingRepository +> -jest.mock('../../../connections/services/DidCommConnectionService') -const ConnectionServiceMock = DidCommConnectionService as jest.Mock +vi.mock('../../../connections/services/DidCommConnectionService') +const ConnectionServiceMock = DidCommConnectionService as MockedClassConstructor -jest.mock('../../../connections/services/DidCommConnectionService') -const MessagePickupApiMock = DidCommMessagePickupApi as jest.Mock +vi.mock('../../../connections/services/DidCommConnectionService') +const MessagePickupApiMock = DidCommMessagePickupApi as MockedClassConstructor const mediationRepository = new MediationRepositoryMock() const mediatorRoutingRepository = new MediatorRoutingRepositoryMock() @@ -41,13 +44,15 @@ describe('MediatorService - default config', () => { const agentContext = getAgentContext({ agentConfig, - registerInstances: [[DidCommModuleConfig, new DidCommModuleConfig()]], + registerInstances: [ + [DidCommModuleConfig, new DidCommModuleConfig()], + [DidCommMessagePickupApi, mediationPickupApi], + ], }) const mediatorService = new DidCommMediatorService( mediationRepository, mediatorRoutingRepository, - mediationPickupApi, new EventEmitter(agentConfig.agentDependencies, new Subject()), agentConfig.logger, connectionService @@ -181,13 +186,15 @@ describe('MediatorService - useDidKeyInProtocols set to false', () => { const agentContext = getAgentContext({ agentConfig, - registerInstances: [[DidCommModuleConfig, new DidCommModuleConfig({ useDidKeyInProtocols: false })]], + registerInstances: [ + [DidCommModuleConfig, new DidCommModuleConfig({ useDidKeyInProtocols: false })], + [DidCommMessagePickupApi, mediationPickupApi], + ], }) const mediatorService = new DidCommMediatorService( mediationRepository, mediatorRoutingRepository, - mediationPickupApi, new EventEmitter(agentConfig.agentDependencies, new Subject()), agentConfig.logger, connectionService diff --git a/packages/didcomm/src/modules/routing/services/__tests__/RoutingService.test.ts b/packages/didcomm/src/modules/routing/services/__tests__/RoutingService.test.ts index 9350a9f082..08e28afac5 100644 --- a/packages/didcomm/src/modules/routing/services/__tests__/RoutingService.test.ts +++ b/packages/didcomm/src/modules/routing/services/__tests__/RoutingService.test.ts @@ -1,5 +1,6 @@ import { Subject } from 'rxjs' +import type { MockedClassConstructor } from '../../../../../../../tests/types' import { EventEmitter } from '../../../../../../core/src/agent/EventEmitter' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../../core/tests/helpers' import { NodeInMemoryKeyManagementStorage, NodeKeyManagementService } from '../../../../../../node/src' @@ -8,8 +9,10 @@ import { DidCommRoutingEventTypes } from '../../DidCommRoutingEvents' import { DidCommMediationRecipientService } from '../DidCommMediationRecipientService' import { DidCommRoutingService } from '../DidCommRoutingService' -jest.mock('../DidCommMediationRecipientService') -const MediationRecipientServiceMock = DidCommMediationRecipientService as jest.Mock +vi.mock('../DidCommMediationRecipientService') +const MediationRecipientServiceMock = DidCommMediationRecipientService as MockedClassConstructor< + typeof DidCommMediationRecipientService +> const agentConfig = getAgentConfig('DidCommRoutingService', { endpoints: ['http://endpoint.com'], @@ -26,7 +29,7 @@ mockFunction(mediationRecipientService.addMediationRouting).mockImplementation(a describe('DidCommRoutingService', () => { afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('getRouting', () => { @@ -43,7 +46,7 @@ describe('DidCommRoutingService', () => { }) test('emits RoutingCreatedEvent', async () => { - const routingListener = jest.fn() + const routingListener = vi.fn() eventEmitter.on(DidCommRoutingEventTypes.RoutingCreatedEvent, routingListener) const newRouting = await routingService.getRouting(agentContext) diff --git a/packages/didcomm/src/repository/DidCommMessageRepository.ts b/packages/didcomm/src/repository/DidCommMessageRepository.ts index 2742c26050..368f9d3196 100644 --- a/packages/didcomm/src/repository/DidCommMessageRepository.ts +++ b/packages/didcomm/src/repository/DidCommMessageRepository.ts @@ -2,7 +2,7 @@ import type { AgentContext } from '@credo-ts/core' import type { ConstructableAgentMessage, DidCommMessage } from '../DidCommMessage' import type { DidCommMessageRole } from './DidCommMessageRole' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { parseMessageType } from '../util/messageType' diff --git a/packages/didcomm/src/repository/__tests__/DidCommMessageRepository.test.ts b/packages/didcomm/src/repository/__tests__/DidCommMessageRepository.test.ts index c93c04f863..c23f3fd1dc 100644 --- a/packages/didcomm/src/repository/__tests__/DidCommMessageRepository.test.ts +++ b/packages/didcomm/src/repository/__tests__/DidCommMessageRepository.test.ts @@ -4,15 +4,18 @@ import { CacheModuleConfig, EventEmitter, InMemoryLruCache, JsonTransformer } fr import { Subject } from 'rxjs' import { InMemoryStorageService } from '../../../../../tests/InMemoryStorageService' +import type { MockedClassConstructor } from '../../../../../tests/types' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../core/tests' import { DidCommConnectionInvitationMessage } from '../../modules' import { DidCommMessageRecord } from '../DidCommMessageRecord' import { DidCommMessageRepository } from '../DidCommMessageRepository' import { DidCommMessageRole } from '../DidCommMessageRole' -jest.mock('../../../../../tests/InMemoryStorageService') +vi.mock('../../../../../tests/InMemoryStorageService') -const StorageMock = InMemoryStorageService as unknown as jest.Mock> +const StorageMock = InMemoryStorageService as unknown as MockedClassConstructor< + typeof InMemoryStorageService +> const invitationJson = { '@type': 'https://didcomm.org/connections/1.0/invitation', diff --git a/packages/didcomm/src/services/DidCommDocumentService.ts b/packages/didcomm/src/services/DidCommDocumentService.ts index f4d99e9828..6ea4741d07 100644 --- a/packages/didcomm/src/services/DidCommDocumentService.ts +++ b/packages/didcomm/src/services/DidCommDocumentService.ts @@ -1,4 +1,4 @@ -import { AgentContext, ResolvedDidCommService, findMatchingEd25519Key } from '@credo-ts/core' +import { AgentContext, type ResolvedDidCommService, findMatchingEd25519Key } from '@credo-ts/core' import { CredoError, diff --git a/packages/didcomm/src/services/__tests__/DidCommDocumentService.test.ts b/packages/didcomm/src/services/__tests__/DidCommDocumentService.test.ts index 6f73bdada9..b71213be5e 100644 --- a/packages/didcomm/src/services/__tests__/DidCommDocumentService.test.ts +++ b/packages/didcomm/src/services/__tests__/DidCommDocumentService.test.ts @@ -1,4 +1,5 @@ import { Kms, TypedArrayEncoder } from '@credo-ts/core' +import type { MockedClassConstructor } from '../../../../../tests/types' import type { AgentContext } from '../../../..//core/src/agent' import type { VerificationMethod } from '../../../../core/src/modules/dids' import { DidCommV1Service, DidDocument, IndyAgentService } from '../../../../core/src/modules/dids' @@ -8,11 +9,11 @@ import { DidResolverService } from '../../../../core/src/modules/dids/services/D import { getAgentContext, mockFunction } from '../../../../core/tests/helpers' import { DidCommDocumentService } from '../DidCommDocumentService' -jest.mock('../../../../core/src/modules/dids/services/DidResolverService') -const DidResolverServiceMock = DidResolverService as jest.Mock +vi.mock('../../../../core/src/modules/dids/services/DidResolverService') +const DidResolverServiceMock = DidResolverService as MockedClassConstructor -jest.mock('../../../../core/src/modules/dids/services/DidResolverService') -const DidRepositoryMock = DidRepository as jest.Mock +vi.mock('../../../../core/src/modules/dids/services/DidResolverService') +const DidRepositoryMock = DidRepository as MockedClassConstructor describe('DidCommDocumentService', () => { let didCommDocumentService: DidCommDocumentService diff --git a/packages/didcomm/src/transport/queue/QueueTransportRepositoryOptions.ts b/packages/didcomm/src/transport/queue/QueueTransportRepositoryOptions.ts index 3ee8d43b78..113029d474 100644 --- a/packages/didcomm/src/transport/queue/QueueTransportRepositoryOptions.ts +++ b/packages/didcomm/src/transport/queue/QueueTransportRepositoryOptions.ts @@ -1,4 +1,4 @@ -import { DidCommEncryptedMessage } from '../../types' +import type { DidCommEncryptedMessage } from '../../types' export interface GetAvailableMessageCountOptions { connectionId: string diff --git a/packages/didcomm/src/updates/0.1-0.2/__tests__/connection.test.ts b/packages/didcomm/src/updates/0.1-0.2/__tests__/connection.test.ts index 51ffc4b14b..b15e5e2ff8 100644 --- a/packages/didcomm/src/updates/0.1-0.2/__tests__/connection.test.ts +++ b/packages/didcomm/src/updates/0.1-0.2/__tests__/connection.test.ts @@ -1,4 +1,5 @@ -import { Agent, DidDocumentRole, DidRecord, DidRepository, JsonTransformer } from '../../../../../core' +import type { MockedClassConstructor } from '../../../../../../tests/types' +import { Agent, DidDocumentRole, DidRecord, DidRepository, JsonTransformer } from '../../../../../core/src/index' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../core/tests/helpers' import { DidCommConnectionRecord, @@ -22,25 +23,27 @@ import legacyDidPeerR1xKJw17sUoXhejEpugMYJ from './__fixtures__/legacyDidPeerR1x const agentConfig = getAgentConfig('Migration DidCommConnectionRecord 0.1-0.2') const agentContext = getAgentContext() -jest.mock('../../../modules/connections/repository/DidCommConnectionRepository') -const ConnectionRepositoryMock = DidCommConnectionRepository as jest.Mock +vi.mock('../../../modules/connections/repository/DidCommConnectionRepository') +const ConnectionRepositoryMock = DidCommConnectionRepository as MockedClassConstructor< + typeof DidCommConnectionRepository +> const connectionRepository = new ConnectionRepositoryMock() -jest.mock('../../../../../core/src/modules/dids/repository/DidRepository') -const DidRepositoryMock = DidRepository as jest.Mock +vi.mock('../../../../../core/src/modules/dids/repository/DidRepository') +const DidRepositoryMock = DidRepository as MockedClassConstructor const didRepository = new DidRepositoryMock() -jest.mock('../../../modules/oob/repository/DidCommOutOfBandRepository') -const OutOfBandRepositoryMock = DidCommOutOfBandRepository as jest.Mock +vi.mock('../../../modules/oob/repository/DidCommOutOfBandRepository') +const OutOfBandRepositoryMock = DidCommOutOfBandRepository as MockedClassConstructor const outOfBandRepository = new OutOfBandRepositoryMock() -jest.mock('../../../../../core/src/agent/Agent', () => { +vi.mock('../../../../../core/src/agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn((cls) => { + resolve: vi.fn((cls) => { if (cls === DidCommConnectionRepository) { return connectionRepository } @@ -94,7 +97,7 @@ const connectionJsonNewDidStateRole = { } // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.1-0.2 | Connection', () => { let agent: Agent @@ -104,7 +107,7 @@ describe('0.1-0.2 | Connection', () => { }) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('migrateCredentialRecordToV0_2()', () => { diff --git a/packages/didcomm/src/updates/0.1-0.2/__tests__/credential.test.ts b/packages/didcomm/src/updates/0.1-0.2/__tests__/credential.test.ts index a803dbb546..d21f5ab7e3 100644 --- a/packages/didcomm/src/updates/0.1-0.2/__tests__/credential.test.ts +++ b/packages/didcomm/src/updates/0.1-0.2/__tests__/credential.test.ts @@ -1,5 +1,6 @@ import type { CredentialRecordBinding } from '../../../modules/credentials' +import type { MockedClassConstructor } from '../../../../../../tests/types' import { Agent } from '../../../../../core/src/agent/Agent' import { JsonTransformer } from '../../../../../core/src/utils' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../core/tests/helpers' @@ -12,21 +13,23 @@ import * as testModule from '../credential' const agentConfig = getAgentConfig('Migration CredentialRecord 0.1-0.2') const agentContext = getAgentContext() -jest.mock('../../../modules/credentials/repository/DidCommCredentialExchangeRepository') -const CredentialRepositoryMock = DidCommCredentialExchangeRepository as jest.Mock +vi.mock('../../../modules/credentials/repository/DidCommCredentialExchangeRepository') +const CredentialRepositoryMock = DidCommCredentialExchangeRepository as MockedClassConstructor< + typeof DidCommCredentialExchangeRepository +> const credentialRepository = new CredentialRepositoryMock() -jest.mock('../../../repository/DidCommMessageRepository') -const DidCommMessageRepositoryMock = DidCommMessageRepository as jest.Mock +vi.mock('../../../repository/DidCommMessageRepository') +const DidCommMessageRepositoryMock = DidCommMessageRepository as MockedClassConstructor const didCommMessageRepository = new DidCommMessageRepositoryMock() -jest.mock('../../../../../core/src/agent/Agent', () => { +vi.mock('../../../../../core/src/agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn((token) => + resolve: vi.fn((token) => token === CredentialRepositoryMock ? credentialRepository : didCommMessageRepository ), }, @@ -35,7 +38,7 @@ jest.mock('../../../../../core/src/agent/Agent', () => { }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.1-0.2 | Credential', () => { let agent: Agent diff --git a/packages/didcomm/src/updates/0.1-0.2/__tests__/mediation.test.ts b/packages/didcomm/src/updates/0.1-0.2/__tests__/mediation.test.ts index c72c501214..9ee88d2e75 100644 --- a/packages/didcomm/src/updates/0.1-0.2/__tests__/mediation.test.ts +++ b/packages/didcomm/src/updates/0.1-0.2/__tests__/mediation.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../tests/types' import { Agent } from '../../../../../core/src/agent/Agent' import { JsonTransformer } from '../../../../../core/src/utils' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../core/tests/helpers' @@ -8,24 +9,24 @@ import * as testModule from '../mediation' const agentConfig = getAgentConfig('Migration MediationRecord 0.1-0.2') const agentContext = getAgentContext() -jest.mock('../../../modules/routing/repository/DidCommMediationRepository') -const MediationRepositoryMock = DidCommMediationRepository as jest.Mock +vi.mock('../../../modules/routing/repository/DidCommMediationRepository') +const MediationRepositoryMock = DidCommMediationRepository as MockedClassConstructor const mediationRepository = new MediationRepositoryMock() -jest.mock('../../../../../core/src/agent/Agent', () => { +vi.mock('../../../../../core/src/agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn(() => mediationRepository), + resolve: vi.fn(() => mediationRepository), }, })), } }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.1-0.2 | Mediation', () => { let agent: Agent diff --git a/packages/didcomm/src/updates/0.2-0.3/__tests__/connection.test.ts b/packages/didcomm/src/updates/0.2-0.3/__tests__/connection.test.ts index 3ff4407acd..ea0e6463c4 100644 --- a/packages/didcomm/src/updates/0.2-0.3/__tests__/connection.test.ts +++ b/packages/didcomm/src/updates/0.2-0.3/__tests__/connection.test.ts @@ -1,6 +1,7 @@ import type { DidCommMediationRecordProps } from '../../../modules' import type { CustomDidCommConnectionTags, DidCommConnectionRecordProps } from '../../../modules/connections' +import type { MockedClassConstructor } from '../../../../../../tests/types' import { Agent } from '../../../../..//core/src/agent/Agent' import { JsonTransformer } from '../../../../../core/src/utils' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../core/tests/helpers' @@ -18,33 +19,35 @@ import * as testModule from '../connection' const agentConfig = getAgentConfig('Migration DidCommConnectionRecord 0.2-0.3') const agentContext = getAgentContext() -jest.mock('../../../modules/connections/repository/DidCommConnectionRepository') -const ConnectionRepositoryMock = DidCommConnectionRepository as jest.Mock +vi.mock('../../../modules/connections/repository/DidCommConnectionRepository') +const ConnectionRepositoryMock = DidCommConnectionRepository as MockedClassConstructor< + typeof DidCommConnectionRepository +> const connectionRepository = new ConnectionRepositoryMock() -jest.mock('../../../modules/routing/repository/DidCommMediationRepository') -const MediationRepositoryMock = DidCommMediationRepository as jest.Mock +vi.mock('../../../modules/routing/repository/DidCommMediationRepository') +const MediationRepositoryMock = DidCommMediationRepository as MockedClassConstructor const mediationRepository = new MediationRepositoryMock() -jest.mock('../../../../../core/src/agent/Agent', () => { +vi.mock('../../../../../core/src/agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn((token) => (token === ConnectionRepositoryMock ? connectionRepository : mediationRepository)), + resolve: vi.fn((token) => (token === ConnectionRepositoryMock ? connectionRepository : mediationRepository)), }, })), } }) -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.2-0.3 | Connection', () => { let agent: Agent beforeEach(() => { - agent = AgentMock() + agent = new AgentMock() }) describe('migrateConnectionRecordToV0_3', () => { diff --git a/packages/didcomm/src/updates/0.2-0.3/__tests__/proof.test.ts b/packages/didcomm/src/updates/0.2-0.3/__tests__/proof.test.ts index 5b42da6236..0414a1768e 100644 --- a/packages/didcomm/src/updates/0.2-0.3/__tests__/proof.test.ts +++ b/packages/didcomm/src/updates/0.2-0.3/__tests__/proof.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../tests/types' import { Agent } from '../../../../../core/src/agent/Agent' import { JsonTransformer } from '../../../../../core/src/utils' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../core/tests/helpers' @@ -10,28 +11,30 @@ import * as testModule from '../proof' const agentConfig = getAgentConfig('Migration DidCommProofExchangeRecord 0.2-0.3') const agentContext = getAgentContext() -jest.mock('../../../modules/proofs/repository/DidCommProofExchangeRepository') -const ProofRepositoryMock = DidCommProofExchangeRepository as jest.Mock +vi.mock('../../../modules/proofs/repository/DidCommProofExchangeRepository') +const ProofRepositoryMock = DidCommProofExchangeRepository as MockedClassConstructor< + typeof DidCommProofExchangeRepository +> const proofRepository = new ProofRepositoryMock() -jest.mock('../../../repository/DidCommMessageRepository') -const DidCommMessageRepositoryMock = DidCommMessageRepository as jest.Mock +vi.mock('../../../repository/DidCommMessageRepository') +const DidCommMessageRepositoryMock = DidCommMessageRepository as MockedClassConstructor const didCommMessageRepository = new DidCommMessageRepositoryMock() -jest.mock('../../../../../core/src/agent/Agent', () => { +vi.mock('../../../../../core/src/agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn((token) => (token === ProofRepositoryMock ? proofRepository : didCommMessageRepository)), + resolve: vi.fn((token) => (token === ProofRepositoryMock ? proofRepository : didCommMessageRepository)), }, })), } }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.2-0.3 | Proof', () => { let agent: Agent diff --git a/packages/didcomm/src/updates/0.4-0.5/__tests__/credentialExchangeRecord.test.ts b/packages/didcomm/src/updates/0.4-0.5/__tests__/credentialExchangeRecord.test.ts index 86825cc595..638c2286ab 100644 --- a/packages/didcomm/src/updates/0.4-0.5/__tests__/credentialExchangeRecord.test.ts +++ b/packages/didcomm/src/updates/0.4-0.5/__tests__/credentialExchangeRecord.test.ts @@ -1,5 +1,6 @@ import type { CredentialRecordBinding } from '../../../modules/credentials' +import type { MockedClassConstructor } from '../../../../../../tests/types' import { Agent } from '../../../../../core/src/agent/Agent' import { JsonTransformer } from '../../../../../core/src/utils' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../core/tests' @@ -16,20 +17,22 @@ import * as testModule from '../credentialExchangeRecord' const agentConfig = getAgentConfig('Migration - Credential Exchange Record - 0.4-0.5') const agentContext = getAgentContext() -jest.mock('../../../modules/credentials/repository/DidCommCredentialExchangeRepository') -const CredentialRepositoryMock = DidCommCredentialExchangeRepository as jest.Mock +vi.mock('../../../modules/credentials/repository/DidCommCredentialExchangeRepository') +const CredentialRepositoryMock = DidCommCredentialExchangeRepository as MockedClassConstructor< + typeof DidCommCredentialExchangeRepository +> const credentialRepository = new CredentialRepositoryMock() -jest.mock('../../../repository/DidCommMessageRepository') -const DidCommMessageRepositoryMock = DidCommMessageRepository as jest.Mock +vi.mock('../../../repository/DidCommMessageRepository') +const DidCommMessageRepositoryMock = DidCommMessageRepository as MockedClassConstructor const didCommMessageRepository = new DidCommMessageRepositoryMock() -jest.mock('../../../../../core/src/agent/Agent', () => ({ - Agent: jest.fn(() => ({ +vi.mock('../../../../../core/src/agent/Agent', () => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn((injectionToken) => + resolve: vi.fn((injectionToken) => injectionToken === DidCommCredentialExchangeRepository ? credentialRepository : didCommMessageRepository ), }, @@ -37,7 +40,7 @@ jest.mock('../../../../../core/src/agent/Agent', () => ({ })) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.4-0.5 | Migration | Credential Exchange Record', () => { let agent: Agent @@ -47,7 +50,7 @@ describe('0.4-0.5 | Migration | Credential Exchange Record', () => { }) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('migrateCredentialExchangeRecordToV0_5()', () => { diff --git a/packages/didcomm/src/updates/0.4-0.5/__tests__/proofExchangeRecord.test.ts b/packages/didcomm/src/updates/0.4-0.5/__tests__/proofExchangeRecord.test.ts index 93ae4b763b..14c37de3d6 100644 --- a/packages/didcomm/src/updates/0.4-0.5/__tests__/proofExchangeRecord.test.ts +++ b/packages/didcomm/src/updates/0.4-0.5/__tests__/proofExchangeRecord.test.ts @@ -1,3 +1,4 @@ +import type { MockedClassConstructor } from '../../../../../../tests/types' import { Agent } from '../../../../../core/src/agent/Agent' import { JsonTransformer } from '../../../../../core/src/utils' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../core/tests' @@ -14,20 +15,22 @@ import * as testModule from '../proofExchangeRecord' const agentConfig = getAgentConfig('Migration - Proof Exchange Record - 0.4-0.5') const agentContext = getAgentContext() -jest.mock('../../../modules/proofs/repository/DidCommProofExchangeRepository') -const ProofRepositoryMock = DidCommProofExchangeRepository as jest.Mock +vi.mock('../../../modules/proofs/repository/DidCommProofExchangeRepository') +const ProofRepositoryMock = DidCommProofExchangeRepository as MockedClassConstructor< + typeof DidCommProofExchangeRepository +> const proofRepository = new ProofRepositoryMock() -jest.mock('../../../repository/DidCommMessageRepository') -const DidCommMessageRepositoryMock = DidCommMessageRepository as jest.Mock +vi.mock('../../../repository/DidCommMessageRepository') +const DidCommMessageRepositoryMock = DidCommMessageRepository as MockedClassConstructor const didCommMessageRepository = new DidCommMessageRepositoryMock() -jest.mock('../../../../../core/src/agent/Agent', () => ({ - Agent: jest.fn(() => ({ +vi.mock('../../../../../core/src/agent/Agent', () => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn((injectionToken) => + resolve: vi.fn((injectionToken) => injectionToken === DidCommProofExchangeRepository ? proofRepository : didCommMessageRepository ), }, @@ -35,7 +38,7 @@ jest.mock('../../../../../core/src/agent/Agent', () => ({ })) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.4-0.5 | Migration | Proof Exchange Record', () => { let agent: Agent @@ -45,7 +48,7 @@ describe('0.4-0.5 | Migration | Proof Exchange Record', () => { }) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('migrateProofExchangeRecordToV0_5()', () => { diff --git a/packages/didcomm/src/util/__tests__/parseInvitation.test.ts b/packages/didcomm/src/util/__tests__/parseInvitation.test.ts index 4e34ce6dff..3dc56f7500 100644 --- a/packages/didcomm/src/util/__tests__/parseInvitation.test.ts +++ b/packages/didcomm/src/util/__tests__/parseInvitation.test.ts @@ -2,7 +2,7 @@ import { JsonEncoder, JsonTransformer, MessageValidator } from '@credo-ts/core' import { agentDependencies } from '../../../../core/tests' import { DidCommConnectionInvitationMessage } from '../../modules/connections' -import { DidCommOutOfBandInvitation, InvitationType } from '../../modules/oob' +import { DidCommInvitationType, DidCommOutOfBandInvitation } from '../../modules/oob' import { convertToNewInvitation } from '../../modules/oob/converters' import { oobInvitationFromShortUrl, parseInvitationShortUrl } from '../parseInvitation' @@ -93,7 +93,7 @@ let connectionInvitationToNew: DidCommOutOfBandInvitation beforeAll(async () => { outOfBandInvitationMock = JsonTransformer.fromJSON(mockOobInvite, DidCommOutOfBandInvitation) - outOfBandInvitationMock.invitationType = InvitationType.OutOfBand + outOfBandInvitationMock.invitationType = DidCommInvitationType.OutOfBand MessageValidator.validateSync(outOfBandInvitationMock) connectionInvitationMock = JsonTransformer.fromJSON(mockConnectionInvite, DidCommConnectionInvitationMessage) MessageValidator.validateSync(connectionInvitationMock) diff --git a/packages/didcomm/src/util/parseInvitation.ts b/packages/didcomm/src/util/parseInvitation.ts index ff7dc23df4..1b8ae3f71b 100644 --- a/packages/didcomm/src/util/parseInvitation.ts +++ b/packages/didcomm/src/util/parseInvitation.ts @@ -7,7 +7,7 @@ import { DidCommMessage } from '../DidCommMessage' import { DidCommConnectionInvitationMessage } from '../modules/connections/messages' import { convertToNewInvitation } from '../modules/oob/converters' import { OutOfBandDidCommService } from '../modules/oob/domain/OutOfBandDidCommService' -import { DidCommOutOfBandInvitation, InvitationType } from '../modules/oob/messages' +import { DidCommInvitationType, DidCommOutOfBandInvitation } from '../modules/oob/messages' import { parseMessageType, supportsIncomingMessageType } from './messageType' @@ -47,14 +47,14 @@ export const parseInvitationJson = (invitationJson: Record): Di if (supportsIncomingMessageType(parsedMessageType, DidCommOutOfBandInvitation.type)) { const invitation = JsonTransformer.fromJSON(invitationJson, DidCommOutOfBandInvitation) MessageValidator.validateSync(invitation) - invitation.invitationType = InvitationType.OutOfBand + invitation.invitationType = DidCommInvitationType.OutOfBand return invitation } if (supportsIncomingMessageType(parsedMessageType, DidCommConnectionInvitationMessage.type)) { const invitation = JsonTransformer.fromJSON(invitationJson, DidCommConnectionInvitationMessage) MessageValidator.validateSync(invitation) const outOfBandInvitation = convertToNewInvitation(invitation) - outOfBandInvitation.invitationType = InvitationType.Connection + outOfBandInvitation.invitationType = DidCommInvitationType.Connection return outOfBandInvitation } if (invitationJson['~service']) { @@ -123,7 +123,7 @@ export function transformLegacyConnectionlessInvitationToOutOfBandInvitation(mes services: [OutOfBandDidCommService.fromResolvedDidCommService(agentMessage.service.resolvedDidCommService)], }) - invitation.invitationType = InvitationType.Connectionless + invitation.invitationType = DidCommInvitationType.Connectionless invitation.addRequest(JsonTransformer.fromJSON(messageWithoutService, DidCommMessage)) return invitation @@ -154,7 +154,7 @@ export const parseInvitationShortUrl = async ( } try { const outOfBandInvitation = await oobInvitationFromShortUrl(await fetchShortUrl(invitationUrl, dependencies)) - outOfBandInvitation.invitationType = InvitationType.OutOfBand + outOfBandInvitation.invitationType = DidCommInvitationType.OutOfBand return outOfBandInvitation } catch (_error) { throw new CredoError( diff --git a/packages/didcomm/tests/setup.ts b/packages/didcomm/tests/setup.ts deleted file mode 100644 index b2a570cc7b..0000000000 --- a/packages/didcomm/tests/setup.ts +++ /dev/null @@ -1,24 +0,0 @@ -import 'reflect-metadata' - -import type { DidCommConnectionRecord } from '../../didcomm/src' - -jest.setTimeout(120000) -expect.extend({ toBeConnectedWith }) - -// Custom matchers which can be used to extend Jest matchers via extend, e. g. `expect.extend({ toBeConnectedWith })`. -function toBeConnectedWith(actual: DidCommConnectionRecord, expected: DidCommConnectionRecord) { - actual.assertReady() - expected.assertReady() - - const pass = actual.theirDid === expected.did - if (pass) { - return { - message: () => `expected connection ${actual.theirDid} not to be connected to with ${expected.did}`, - pass: true, - } - } - return { - message: () => `expected connection ${actual.theirDid} to be connected to with ${expected.did}`, - pass: false, - } -} diff --git a/packages/didcomm/tsconfig.build.json b/packages/didcomm/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/didcomm/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/didcomm/tsconfig.json b/packages/didcomm/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/packages/didcomm/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/packages/didcomm/tsdown.config.ts b/packages/didcomm/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/didcomm/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/didcomm/types/jest.d.ts b/packages/didcomm/types/jest.d.ts deleted file mode 100644 index f349237152..0000000000 --- a/packages/didcomm/types/jest.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { DidCommConnectionRecord } from '../src' - -declare global { - namespace jest { - interface Matchers { - toBeConnectedWith(connection: DidCommConnectionRecord): R - } - } -} diff --git a/packages/drizzle-storage/README.md b/packages/drizzle-storage/README.md index d6973b12fa..8e2a9471d3 100644 --- a/packages/drizzle-storage/README.md +++ b/packages/drizzle-storage/README.md @@ -96,25 +96,22 @@ The bundles provide the agent with the needed context about which record types a The following bundles are provided out of the box by the Drizzle storage module: -- `coreDrizzleBundle` from `@credo-ts/drizzle-storage/core` (`core`) -- `didcommDrizzleBundle` from `@credo-ts/drizzle-storage/didcomm` (`didcomm`) -- `actionMenuDrizzleBundle` from `@credo-ts/drizzle-storage/action-menu` (`action-menu`) -- `anonCredsDrizzleBundle` from `@credo-ts/drizzle-storage/anoncreds` (`anoncreds`) -- `openid4vcDrizzleBundle` from `@credo-ts/drizzle-storage/openid4vc` (`openid4vc`) -- `drpcDrizzleBundle` from `@credo-ts/drizzle-storage/drpc` (`drpc`) -- `questionAnswerDrizzleBundle` from `@credo-ts/drizzle-storage/question-answer` (`question-answer`) +- `coreBundle` from `@credo-ts/drizzle-storage/core` (`core`) +- `didcommBundle` from `@credo-ts/drizzle-storage/didcomm` (`didcomm`) +- `actionMenuBundle` from `@credo-ts/drizzle-storage/action-menu` (`action-menu`) +- `anonCredsBundle` from `@credo-ts/drizzle-storage/anoncreds` (`anoncreds`) +- `openid4vcBundle` from `@credo-ts/drizzle-storage/openid4vc` (`openid4vc`) +- `drpcBundle` from `@credo-ts/drizzle-storage/drpc` (`drpc`) +- `tenantsBundle` from `@credo-ts/drizzle-storage/tenants` (`tenants`) +- `questionAnswerBundle` from `@credo-ts/drizzle-storage/question-answer` (`question-answer`) > [!IMPORTANT] -> Make sure to order the bundles to account for any dependencies between modules. For example, the `actionMenuDrizzleBundle`, depends on the connection record from `didcommDrizzleBundle`. Generally we recommend to adhere to the order defined above, and always provide custom records after the records provided by the `@credo-ts/drizzle-storage` package. +> Make sure to order the bundles to account for any dependencies between modules. For example, the `actionMenuBundle`, depends on the connection record from `didcommBundle`. Generally we recommend to adhere to the order defined above, and always provide custom records after the records provided by the `@credo-ts/drizzle-storage` package. The following defines the bundles for an agent using the `didcomm` and `anoncreds` extension modules, but doesn't use the `action-menu` extension module: ```ts -const bundles = [ - coreDrizzleBundle, - didcommDrizzleBundle, - anonCredsDrizzleBundle, -] as const; +const bundles = [coreBundle, didcommBundle, anonCredsBundle] as const; ``` ### Migrations diff --git a/packages/drizzle-storage/action-menu.js b/packages/drizzle-storage/action-menu.js index acd792660c..b3a6b1a294 100644 --- a/packages/drizzle-storage/action-menu.js +++ b/packages/drizzle-storage/action-menu.js @@ -1 +1,3 @@ -module.exports = require('./build/action-menu/bundle.js') +// If using CJS and `exports` key in package.json is not supported +// this ensures you can still import `@credo-ts/drizzle-storage/action-menu` +exports.actionMenuBundle = require('./build/action-menu/bundle.js').actionMenuBundle diff --git a/packages/drizzle-storage/anoncreds.js b/packages/drizzle-storage/anoncreds.js index 02a7aee1b6..d81757b931 100644 --- a/packages/drizzle-storage/anoncreds.js +++ b/packages/drizzle-storage/anoncreds.js @@ -1 +1,3 @@ -module.exports = require('./build/anoncreds/bundle.js') +// If using CJS and `exports` key in package.json is not supported +// this ensures you can still import `@credo-ts/drizzle-storage/anoncreds` +exports.anoncredsBundle = require('./build/anoncreds/bundle.js').anoncredsBundle diff --git a/packages/drizzle-storage/bin.js b/packages/drizzle-storage/bin.js deleted file mode 100755 index ba1330aaaf..0000000000 --- a/packages/drizzle-storage/bin.js +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -require('./cli-build/bin') diff --git a/packages/drizzle-storage/bin.mjs b/packages/drizzle-storage/bin.mjs new file mode 100755 index 0000000000..e8bce6d228 --- /dev/null +++ b/packages/drizzle-storage/bin.mjs @@ -0,0 +1,2 @@ +#!/usr/bin/env node +import './cli-build/bin.mjs' diff --git a/packages/drizzle-storage/cli/cli-definition.ts b/packages/drizzle-storage/cli/cli-definition.ts index 9e0bec6557..39ca6cabf2 100644 --- a/packages/drizzle-storage/cli/cli-definition.ts +++ b/packages/drizzle-storage/cli/cli-definition.ts @@ -1,5 +1,5 @@ import { shell } from 'shell' -import { Dialect, generateMigrations } from './generate-migrations' +import { type Dialect, generateMigrations } from './generate-migrations' import { runMigrations } from './run-migrations' import { runStudio } from './run-studio' import { errorLog, log } from './utils' diff --git a/packages/drizzle-storage/cli/cli.ts b/packages/drizzle-storage/cli/cli.ts index 73fc355846..ba77489a29 100644 --- a/packages/drizzle-storage/cli/cli.ts +++ b/packages/drizzle-storage/cli/cli.ts @@ -1,5 +1,5 @@ -import { cli } from './cli-definition' -import { errorLog } from './utils' +import { cli } from './cli-definition.js' +import { errorLog } from './utils.js' async function run() { // Use the route method to handle parsing and routing automatically diff --git a/packages/drizzle-storage/cli/drizzle.config.ts b/packages/drizzle-storage/cli/drizzle.config.ts index 94f23fa405..f73cf43734 100644 --- a/packages/drizzle-storage/cli/drizzle.config.ts +++ b/packages/drizzle-storage/cli/drizzle.config.ts @@ -1,4 +1,4 @@ -import { Config, defineConfig } from 'drizzle-kit' +import { type Config, defineConfig } from 'drizzle-kit' const drizzleDatabaseUrl = process.env.DRIZZLE_DATABASE_URL @@ -16,8 +16,9 @@ let drizzleConfig: Config if (drizzleDialect === 'sqlite') { drizzleConfig = defineConfig({ dialect: drizzleDialect, - // We don't want to provide a schema when migrating, as it requires ts-node, and - // slows things down. We only need this for migration generation + // We don't want to provide a schema when migrating, as it requires a custom bundler that supports + // emitting decorator metadata. Drizzle is built on esbuild which doesn't support this + // We only need this for migration generation schema: drizzleSchemaFile, out: drizzleMigrationsFolder, migrations: drizzleMigrationsTable diff --git a/packages/drizzle-storage/cli/run-migrations.ts b/packages/drizzle-storage/cli/run-migrations.ts index 6a5d0dc29e..3917e5c5a7 100644 --- a/packages/drizzle-storage/cli/run-migrations.ts +++ b/packages/drizzle-storage/cli/run-migrations.ts @@ -1,5 +1,5 @@ import { spawnSync } from 'child_process' -import { Dialect } from './generate-migrations' +import type { Dialect } from './generate-migrations' import { getDrizzleConfigPath, getDrizzleKitCliPath, getMigrationsDirectory, log, resolveBundle } from './utils' interface RunMigrationsOptions { diff --git a/packages/drizzle-storage/cli/run-studio.ts b/packages/drizzle-storage/cli/run-studio.ts index bba129a5ab..6089daeb45 100644 --- a/packages/drizzle-storage/cli/run-studio.ts +++ b/packages/drizzle-storage/cli/run-studio.ts @@ -1,5 +1,5 @@ import { spawn } from 'child_process' -import { Dialect } from './generate-migrations' +import type { Dialect } from './generate-migrations' import { errorLog, getDrizzleConfigPath, getDrizzleKitCliPath, log } from './utils' interface RunStudioOptions { diff --git a/packages/drizzle-storage/cli/utils.ts b/packages/drizzle-storage/cli/utils.ts index 2de06b5f4f..2ca070afe3 100644 --- a/packages/drizzle-storage/cli/utils.ts +++ b/packages/drizzle-storage/cli/utils.ts @@ -3,30 +3,29 @@ import path from 'path' export async function resolveBundle(bundle: string) { const options = [bundle, path.join(process.cwd(), bundle)] - if (!bundle.startsWith('/')) { + if (!bundle.startsWith('/') && !bundle.startsWith('.')) { options.push(`@credo-ts/drizzle-storage/${bundle}`) } + let lastError: Error | undefined for (const option of options) { - try { - require.resolve(option) - } catch { - continue - } - // biome-ignore lint/suspicious/noExplicitAny: let module: any try { - module = require(option) - } catch (e) { - throw new Error(`Error during require of ${option}: ${e}`) + module = await import(option) + } catch (_e) { + lastError = _e + continue } - if (!module.default) { - throw new Error(`Expected bundle ${bundle} to export default object defining the bundle.`) + const bundleValue = Object.values(module).find( + (value) => value && typeof value === 'object' && 'name' in value && 'records' in value + ) + if (!bundleValue) { + throw new Error(`Expected module ${bundle} to export a buundle object defining the bundle.`) } - return module.default as { + return bundleValue as { name: string migrations: { sqlite: { @@ -41,7 +40,7 @@ export async function resolveBundle(bundle: string) { } } - throw new Error(`Unable to resolve bundle ${bundle}`) + throw new Error(`Unable to resolve bundle ${bundle}. ${lastError}`) } export async function resolveSchemaFile(schemaModule: string) { @@ -62,10 +61,11 @@ export function getDrizzleKitCliPath() { return path.join(path.dirname(require.resolve('drizzle-kit')), 'bin.cjs') } +const __dirname = path.dirname(import.meta.url.replace('file://', '')) export function getDrizzleConfigPath() { return existsSync(path.join(__dirname, 'drizzle.config.ts')) ? path.join(__dirname, 'drizzle.config.ts') - : path.join(__dirname, 'drizzle.config.js') + : path.join(__dirname, 'drizzle.config.mjs') } export function log(message: string, ...optionalParams: unknown[]) { diff --git a/packages/drizzle-storage/core.js b/packages/drizzle-storage/core.js index 151652124d..2be0ecd167 100644 --- a/packages/drizzle-storage/core.js +++ b/packages/drizzle-storage/core.js @@ -1 +1,3 @@ -module.exports = require('./build/core/bundle.js') +// If using CJS and `exports` key in package.json is not supported +// this ensures you can still import `@credo-ts/drizzle-storage/core` +exports.coreBundle = require('./build/core/bundle.js').coreBundle diff --git a/packages/drizzle-storage/didcomm.js b/packages/drizzle-storage/didcomm.js index 0e7bd626ff..6a57a6bcf6 100644 --- a/packages/drizzle-storage/didcomm.js +++ b/packages/drizzle-storage/didcomm.js @@ -1 +1,3 @@ -module.exports = require('./build/didcomm/bundle.js') +// If using CJS and `exports` key in package.json is not supported +// this ensures you can still import `@credo-ts/drizzle-storage/didcomm` +exports.didcommBundle = require('./build/didcomm/bundle.js').didcommBundle diff --git a/packages/drizzle-storage/drpc.js b/packages/drizzle-storage/drpc.js index 495811fb6c..b4d2144a1c 100644 --- a/packages/drizzle-storage/drpc.js +++ b/packages/drizzle-storage/drpc.js @@ -1 +1,3 @@ -module.exports = require('./build/drpc/bundle.js') +// If using CJS and `exports` key in package.json is not supported +// this ensures you can still import `@credo-ts/drizzle-storage/drpc` +exports.drpcBundle = require('./build/drpc/bundle.js').drpcBundle diff --git a/packages/drizzle-storage/jest.config.ts b/packages/drizzle-storage/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/drizzle-storage/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/drizzle-storage/openid4vc.js b/packages/drizzle-storage/openid4vc.js index 35ee95b69d..3dfe621767 100644 --- a/packages/drizzle-storage/openid4vc.js +++ b/packages/drizzle-storage/openid4vc.js @@ -1 +1,3 @@ -module.exports = require('./build/openid4vc/bundle.js') +// If using CJS and `exports` key in package.json is not supported +// this ensures you can still import `@credo-ts/drizzle-storage/openid4vc` +exports.openid4vcBundle = require('./build/openid4vc/bundle.js').openid4vcBundle diff --git a/packages/drizzle-storage/package.json b/packages/drizzle-storage/package.json index fe0f110b55..385f84a3f9 100644 --- a/packages/drizzle-storage/package.json +++ b/packages/drizzle-storage/package.json @@ -5,11 +5,8 @@ "build", "cli-build", "migrations", - "tsconfig.drizzle.json", "types", - "cli/drizzle.config.ts", - "src", - "bin.js", + "bin.mjs", "didcomm.js", "didcomm.d.ts", "action-menu.js", @@ -29,11 +26,48 @@ ], "license": "Apache-2.0", "description": "Credo storage service implementation based on Drizzle ORM, supporting PostgreSQL and SQLite", - "bin": "./bin.js", - "main": "src/index.ts", + "bin": "./bin.mjs", + "exports": { + ".": { + "import": "./src/index.ts", + "cli": "./build/index.mjs" + }, + "./didcomm": { "import": "./build/didcomm/bundle.mjs" }, + "./action-menu": { "import": "./build/action-menu/bundle.mjs" }, + "./core": { "import": "./build/core/bundle.mjs" }, + "./drpc": { "import": "./build/drpc/bundle.mjs" }, + "./tenants": { "import": "./build/tenants/bundle.mjs" }, + "./openid4vc": { "import": "./build/openid4vc/bundle.mjs" }, + "./anoncreds": { "import": "./build/anoncreds/bundle.mjs" }, + "./question-answer": { "import": "./build/question-answer/bundle.mjs" } + }, "publishConfig": { "access": "public", - "main": "build/index.js" + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./didcomm": { "import": "./build/didcomm/bundle.mjs", "require": "./build/didcomm/bundle.js" }, + "./*/migrations/sqlite": { + "import": "./migrations/*/sqlite/migrations.js" + }, + "./action-menu": { "import": "./build/action-menu/bundle.mjs", "require": "./build/action-menu/bundle.js" }, + "./core": { "import": "./build/core/bundle.mjs", "require": "./build/core/bundle.js" }, + "./drpc": { "import": "./build/drpc/bundle.mjs", "require": "./build/drpc/bundle.js" }, + "./tenants": { "import": "./build/tenants/bundle.mjs", "require": "./build/tenants/bundle.js" }, + "./openid4vc": { "import": "./build/openid4vc/bundle.mjs", "require": "./build/openid4vc/bundle.js" }, + "./anoncreds": { "import": "./build/anoncreds/bundle.mjs", "require": "./build/anoncreds/bundle.js" }, + "./question-answer": { + "import": "./build/question-answer/bundle.mjs", + "require": "./build/question-answer/bundle.mjs" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/drizzle-storage", "repository": { @@ -42,18 +76,14 @@ "directory": "packages/drizzle-storage" }, "scripts": { - "build": "pnpm run clean && pnpm run compile && pnpm run compile:cli", - "clean": "rimraf ./build ./cli-build", - "compile": "tsc -p tsconfig.build.json", - "compile:cli": "tsc -p tsconfig.cli.json", + "build": "tsdown --config-loader unconfig", "prepublishOnly": "pnpm run build", - "cli:dev": "ts-node --project tsconfig.cli.json ./cli/cli.ts --bundle core --bundle didcomm --bundle anoncreds --bundle action-menu --bundle question-answer --bundle drpc --bundle tenants --bundle openid4vc", - "cli:dev:generate": "pnpm cli:dev generate", - "cli:dev:migrate:postgres": "pnpm cli:dev migrate --dialect postgres --database-url \"postgresql://postgres:postgres@localhost:5432/postgres\"", - "cli:dev:migrate:sqlite": "pnpm cli:dev migrate --dialect sqlite --database-url \"file:local.db\"", - "cli:dev:studio:postgres": "pnpm cli:dev studio --dialect postgres --database-url \"postgresql://postgres:postgres@localhost:5432/postgres\"", - "cli:dev:studio:sqlite": "pnpm cli:dev studio --dialect sqlite --database-url \"file:../../db.db\"", - "test": "jest" + "cli:local": "node --conditions cli bin.mjs --bundle core --bundle didcomm --bundle anoncreds --bundle action-menu --bundle question-answer --bundle drpc --bundle tenants --bundle openid4vc", + "cli:local:generate": "pnpm cli:local generate", + "cli:local:migrate:postgres": "pnpm cli:local migrate --dialect postgres --database-url \"postgresql://postgres:postgres@localhost:5432/postgres\"", + "cli:local:migrate:sqlite": "pnpm cli:local migrate --dialect sqlite --database-url \"file:local.db\"", + "cli:local:studio:postgres": "pnpm cli:local studio --dialect postgres --database-url \"postgresql://postgres:postgres@localhost:5432/postgres\"", + "cli:local:studio:sqlite": "pnpm cli:local studio --dialect sqlite --database-url \"file:../../db.db\"" }, "dependencies": { "@credo-ts/action-menu": "workspace:*", @@ -75,13 +105,11 @@ "drizzle-orm": "^0.44.5" }, "devDependencies": { - "ts-node": "catalog:", "@libsql/client": "^0.15.6", "@types/pg": "^8.15.4", "@types/yargs": "^17.0.33", "drizzle-orm": "^0.44.5", "pg": "^8.16.3", - "rimraf": "catalog:", "typescript": "catalog:" } } diff --git a/packages/drizzle-storage/question-answer.js b/packages/drizzle-storage/question-answer.js index b601536a1e..dc9f74364e 100644 --- a/packages/drizzle-storage/question-answer.js +++ b/packages/drizzle-storage/question-answer.js @@ -1 +1,3 @@ -module.exports = require('./build/question-answer/bundle.js') +// If using CJS and `exports` key in package.json is not supported +// this ensures you can still import `@credo-ts/drizzle-storage/question-answer` +exports.questionAnswerBundle = require('./build/question-answer/bundle.js').questionAnswerBundle diff --git a/packages/drizzle-storage/src/DrizzleDatabase.ts b/packages/drizzle-storage/src/DrizzleDatabase.ts index c2b02a07be..f949af28d7 100644 --- a/packages/drizzle-storage/src/DrizzleDatabase.ts +++ b/packages/drizzle-storage/src/DrizzleDatabase.ts @@ -1,3 +1,4 @@ +import { entityKind } from 'drizzle-orm' import { PgDatabase } from 'drizzle-orm/pg-core' import { BaseSQLiteDatabase } from 'drizzle-orm/sqlite-core' @@ -21,7 +22,8 @@ export function isDrizzlePostgresDatabase(database: DrizzleDatabase): database i } export function isDrizzleSqliteDatabase(database: DrizzleDatabase): database is DrizzleSqliteDatabase { - return database instanceof BaseSQLiteDatabase + // NOTE: somehow instanceof does not work. We use + return Object.getPrototypeOf(database.constructor)[entityKind] === 'BaseSQLiteDatabase' } export function getDrizzleDatabaseType(database: DrizzleDatabase): 'sqlite' | 'postgres' { diff --git a/packages/drizzle-storage/src/DrizzleStorageModuleConfig.ts b/packages/drizzle-storage/src/DrizzleStorageModuleConfig.ts index 202061e11e..a0ff003b6b 100644 --- a/packages/drizzle-storage/src/DrizzleStorageModuleConfig.ts +++ b/packages/drizzle-storage/src/DrizzleStorageModuleConfig.ts @@ -1,8 +1,8 @@ -import { DrizzleDatabase, getDrizzleDatabaseType } from './DrizzleDatabase' -import { DrizzleRecord, DrizzleRecordBundle } from './DrizzleRecord' -import { AnyDrizzleAdapter } from './adapter/BaseDrizzleRecordAdapter' +import { type DrizzleDatabase, getDrizzleDatabaseType } from './DrizzleDatabase' +import type { DrizzleRecord, DrizzleRecordBundle } from './DrizzleRecord' +import type { AnyDrizzleAdapter } from './adapter/BaseDrizzleRecordAdapter' import { getSchemaFromDrizzleRecords } from './combineSchemas' -import coreDrizzleBundle from './core/bundle' +import { coreBundle } from './core/bundle' // biome-ignore lint/suspicious/noExplicitAny: export type AnyDrizzleDatabase = DrizzleDatabase @@ -37,7 +37,7 @@ export class DrizzleStorageModuleConfig { // core MUST always be registered const allRecords: DrizzleRecord[] = Array.from( - new Set([...coreDrizzleBundle.records, ...options.bundles.flatMap((bundle) => bundle.records)]) + new Set([...coreBundle.records, ...options.bundles.flatMap((bundle) => bundle.records)]) ) this.adapters = allRecords .map((record) => (record.adapter ? new record.adapter(this.database) : undefined)) diff --git a/packages/drizzle-storage/src/action-menu/action-menu-record/DrizzleDidcommActionMenuRecordAdapter.ts b/packages/drizzle-storage/src/action-menu/action-menu-record/DrizzleDidcommActionMenuRecordAdapter.ts index 153ee87a36..74a75c3a94 100644 --- a/packages/drizzle-storage/src/action-menu/action-menu-record/DrizzleDidcommActionMenuRecordAdapter.ts +++ b/packages/drizzle-storage/src/action-menu/action-menu-record/DrizzleDidcommActionMenuRecordAdapter.ts @@ -1,9 +1,9 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' -import { ActionMenuOptions, ActionMenuRecord, ActionMenuSelectionOptions } from '@credo-ts/action-menu' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import { type ActionMenuOptions, ActionMenuRecord, type ActionMenuSelectionOptions } from '@credo-ts/action-menu' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/action-menu/bundle.ts b/packages/drizzle-storage/src/action-menu/bundle.ts index 440a49a8f4..9c40774a92 100644 --- a/packages/drizzle-storage/src/action-menu/bundle.ts +++ b/packages/drizzle-storage/src/action-menu/bundle.ts @@ -2,7 +2,7 @@ import type { DrizzleRecordBundle } from '../DrizzleRecord' import { bundleMigrationDefinition } from '../util' import { didcommActionMenuDrizzleRecord } from './action-menu-record' -export default { +export const actionMenuBundle = { name: 'action-menu', records: [didcommActionMenuDrizzleRecord], diff --git a/packages/drizzle-storage/src/adapter/BaseDrizzleRecordAdapter.ts b/packages/drizzle-storage/src/adapter/BaseDrizzleRecordAdapter.ts index f673d9144a..6b856de8e5 100644 --- a/packages/drizzle-storage/src/adapter/BaseDrizzleRecordAdapter.ts +++ b/packages/drizzle-storage/src/adapter/BaseDrizzleRecordAdapter.ts @@ -1,17 +1,17 @@ import { AgentContext, BaseRecord, - BaseRecordConstructor, + type BaseRecordConstructor, CredoError, - Query, - QueryOptions, + type Query, + type QueryOptions, RecordDuplicateError, RecordNotFoundError, } from '@credo-ts/core' -import { DrizzleQueryError, Simplify, and, eq } from 'drizzle-orm' +import { DrizzleQueryError, type Simplify, and, eq } from 'drizzle-orm' import { PgTable, pgTable } from 'drizzle-orm/pg-core' import { SQLiteTable as _SQLiteTable, sqliteTable } from 'drizzle-orm/sqlite-core' -import { DrizzleDatabase, isDrizzlePostgresDatabase, isDrizzleSqliteDatabase } from '../DrizzleDatabase' +import { type DrizzleDatabase, isDrizzlePostgresDatabase, isDrizzleSqliteDatabase } from '../DrizzleDatabase' import { CredoDrizzleStorageError } from '../error' import { getPostgresBaseRecordTable } from '../postgres' import { getSqliteBaseRecordTable } from '../sqlite' @@ -21,7 +21,7 @@ import { extractPostgresErrorCode, extractSqliteErrorCode, } from './drizzleError' -import { DrizzleCustomTagKeyMapping, queryToDrizzlePostgres } from './queryToDrizzlePostgres' +import { type DrizzleCustomTagKeyMapping, queryToDrizzlePostgres } from './queryToDrizzlePostgres' import { queryToDrizzleSqlite } from './queryToDrizzleSqlite' // biome-ignore lint/suspicious/noExplicitAny: diff --git a/packages/drizzle-storage/src/adapter/__tests__/queryToDrizzlePostgres.drizzle.e2e.test.ts b/packages/drizzle-storage/src/adapter/__tests__/queryToDrizzlePostgres.drizzle.e2e.test.ts index e330b65d3d..c79a7c62a8 100644 --- a/packages/drizzle-storage/src/adapter/__tests__/queryToDrizzlePostgres.drizzle.e2e.test.ts +++ b/packages/drizzle-storage/src/adapter/__tests__/queryToDrizzlePostgres.drizzle.e2e.test.ts @@ -1,6 +1,6 @@ import { DidCommConnectionRecord, DidCommDidExchangeRole, DidCommDidExchangeState } from '@credo-ts/didcomm' import { pushSchema } from 'drizzle-kit/api' -import { DrizzlePostgresTestDatabase, createDrizzlePostgresTestDatabase } from '../../../tests/testDatabase' +import { type DrizzlePostgresTestDatabase, createDrizzlePostgresTestDatabase } from '../../../tests/testDatabase' import * as coreContextSchema from '../../core/context-record/postgres' import * as didcommConnectionSchema from '../../didcomm/connection-record/postgres' import { queryToDrizzlePostgres } from '../queryToDrizzlePostgres' diff --git a/packages/drizzle-storage/src/adapter/__tests__/queryToDrizzleSqlite.drizzle.e2e.test.ts b/packages/drizzle-storage/src/adapter/__tests__/queryToDrizzleSqlite.drizzle.e2e.test.ts index ffc53ea2cd..0d4b60147e 100644 --- a/packages/drizzle-storage/src/adapter/__tests__/queryToDrizzleSqlite.drizzle.e2e.test.ts +++ b/packages/drizzle-storage/src/adapter/__tests__/queryToDrizzleSqlite.drizzle.e2e.test.ts @@ -1,7 +1,7 @@ import { DidCommConnectionRecord, DidCommDidExchangeRole, DidCommDidExchangeState } from '@credo-ts/didcomm' import { pushSQLiteSchema } from 'drizzle-kit/api' import { drizzle } from 'drizzle-orm/libsql' -import { DrizzleSqliteDatabase } from '../../DrizzleDatabase' +import type { DrizzleSqliteDatabase } from '../../DrizzleDatabase' import * as coreContextSchema from '../../core/context-record/sqlite' import * as didcommConnectionSchema from '../../didcomm/connection-record/sqlite' import { queryToDrizzleSqlite } from '../queryToDrizzleSqlite' diff --git a/packages/drizzle-storage/src/adapter/index.ts b/packages/drizzle-storage/src/adapter/index.ts index 44ba0d13b7..109388b8ec 100644 --- a/packages/drizzle-storage/src/adapter/index.ts +++ b/packages/drizzle-storage/src/adapter/index.ts @@ -1,6 +1,6 @@ export { - AnyDrizzleAdapter, + type AnyDrizzleAdapter, BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from './BaseDrizzleRecordAdapter' diff --git a/packages/drizzle-storage/src/adapter/queryToDrizzlePostgres.ts b/packages/drizzle-storage/src/adapter/queryToDrizzlePostgres.ts index c26bee454f..d0f59fa84e 100644 --- a/packages/drizzle-storage/src/adapter/queryToDrizzlePostgres.ts +++ b/packages/drizzle-storage/src/adapter/queryToDrizzlePostgres.ts @@ -1,5 +1,5 @@ -import { BaseRecord, Query, TagValue } from '@credo-ts/core' -import { SQL, SQLWrapper, and, eq, not, or, sql } from 'drizzle-orm' +import { BaseRecord, type Query, type TagValue } from '@credo-ts/core' +import { SQL, type SQLWrapper, and, eq, not, or, sql } from 'drizzle-orm' import { PgColumn, pgTable } from 'drizzle-orm/pg-core' import { CredoDrizzleStorageError } from '../error' import { getPostgresBaseRecordTable } from '../postgres' diff --git a/packages/drizzle-storage/src/adapter/queryToDrizzleSqlite.ts b/packages/drizzle-storage/src/adapter/queryToDrizzleSqlite.ts index 7ea739bd41..f884f00907 100644 --- a/packages/drizzle-storage/src/adapter/queryToDrizzleSqlite.ts +++ b/packages/drizzle-storage/src/adapter/queryToDrizzleSqlite.ts @@ -1,10 +1,10 @@ -import { BaseRecord, Query } from '@credo-ts/core' -import { SQL, SQLWrapper, and, eq, not, or, sql } from 'drizzle-orm' +import { BaseRecord, type Query } from '@credo-ts/core' +import { SQL, type SQLWrapper, and, eq, not, or, sql } from 'drizzle-orm' import { sqliteTable } from 'drizzle-orm/sqlite-core' import type { AnySQLiteColumn, SQLiteColumn } from 'drizzle-orm/sqlite-core' import { CredoDrizzleStorageError } from '../error' import { getSqliteBaseRecordTable } from '../sqlite' -import { DrizzleCustomTagKeyMapping } from './queryToDrizzlePostgres' +import type { DrizzleCustomTagKeyMapping } from './queryToDrizzlePostgres' /** * Checks if an array column (stored as JSON text in SQLite) contains all values from the given array diff --git a/packages/drizzle-storage/src/anoncreds/bundle.ts b/packages/drizzle-storage/src/anoncreds/bundle.ts index 43313cae6b..114a67ed60 100644 --- a/packages/drizzle-storage/src/anoncreds/bundle.ts +++ b/packages/drizzle-storage/src/anoncreds/bundle.ts @@ -9,7 +9,7 @@ import { anonCredsRevocationRegistryDefinitionPrivateDrizzleRecord } from './rev import { anonCredsRevocationRegistryDefinitionDrizzleRecord } from './revocation-registry-definition-record' import { anonCredsSchemaDrizzleRecord } from './schema-record' -export default { +export const anoncredsBundle = { name: 'anoncreds', records: [ anonCredsCredentialDrizzleRecord, diff --git a/packages/drizzle-storage/src/anoncreds/credential-definition-private-record/DrizzleAnonCredsCredentialDefinitionPrivateRecordAdapter.ts b/packages/drizzle-storage/src/anoncreds/credential-definition-private-record/DrizzleAnonCredsCredentialDefinitionPrivateRecordAdapter.ts index e551fb1d9a..2f65a45991 100644 --- a/packages/drizzle-storage/src/anoncreds/credential-definition-private-record/DrizzleAnonCredsCredentialDefinitionPrivateRecordAdapter.ts +++ b/packages/drizzle-storage/src/anoncreds/credential-definition-private-record/DrizzleAnonCredsCredentialDefinitionPrivateRecordAdapter.ts @@ -1,9 +1,9 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' import { AnonCredsCredentialDefinitionPrivateRecord } from '@credo-ts/anoncreds' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/anoncreds/credential-definition-record/DrizzleAnonCredsCredentialDefinitionRecordAdapter.ts b/packages/drizzle-storage/src/anoncreds/credential-definition-record/DrizzleAnonCredsCredentialDefinitionRecordAdapter.ts index 186c8c26bc..5a0e2b5d00 100644 --- a/packages/drizzle-storage/src/anoncreds/credential-definition-record/DrizzleAnonCredsCredentialDefinitionRecordAdapter.ts +++ b/packages/drizzle-storage/src/anoncreds/credential-definition-record/DrizzleAnonCredsCredentialDefinitionRecordAdapter.ts @@ -1,9 +1,9 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' import { AnonCredsCredentialDefinitionRecord } from '@credo-ts/anoncreds' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/anoncreds/credential-record/DrizzleAnonCredsCredentialRecordAdapter.ts b/packages/drizzle-storage/src/anoncreds/credential-record/DrizzleAnonCredsCredentialRecordAdapter.ts index 414f4dbd5f..66c87eb967 100644 --- a/packages/drizzle-storage/src/anoncreds/credential-record/DrizzleAnonCredsCredentialRecordAdapter.ts +++ b/packages/drizzle-storage/src/anoncreds/credential-record/DrizzleAnonCredsCredentialRecordAdapter.ts @@ -1,9 +1,9 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' import { AnonCredsCredentialRecord } from '@credo-ts/anoncreds' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/anoncreds/key-correctness-proof-record/DrizzleAnonCredsKeyCorrectnessProofRecordAdapter.ts b/packages/drizzle-storage/src/anoncreds/key-correctness-proof-record/DrizzleAnonCredsKeyCorrectnessProofRecordAdapter.ts index 1410bd2062..3b7ee02010 100644 --- a/packages/drizzle-storage/src/anoncreds/key-correctness-proof-record/DrizzleAnonCredsKeyCorrectnessProofRecordAdapter.ts +++ b/packages/drizzle-storage/src/anoncreds/key-correctness-proof-record/DrizzleAnonCredsKeyCorrectnessProofRecordAdapter.ts @@ -1,9 +1,9 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' import { AnonCredsKeyCorrectnessProofRecord } from '@credo-ts/anoncreds' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/anoncreds/link-secret-record/DrizzleAnonCredsLinkSecretRecordAdapter.ts b/packages/drizzle-storage/src/anoncreds/link-secret-record/DrizzleAnonCredsLinkSecretRecordAdapter.ts index e82e21dfea..8b29cf4b41 100644 --- a/packages/drizzle-storage/src/anoncreds/link-secret-record/DrizzleAnonCredsLinkSecretRecordAdapter.ts +++ b/packages/drizzle-storage/src/anoncreds/link-secret-record/DrizzleAnonCredsLinkSecretRecordAdapter.ts @@ -1,9 +1,9 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' import { AnonCredsLinkSecretRecord } from '@credo-ts/anoncreds' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/anoncreds/revocation-registry-definition-private-record/DrizzleAnonCredsRevocationRegistryDefinitionPrivateRecordAdapter.ts b/packages/drizzle-storage/src/anoncreds/revocation-registry-definition-private-record/DrizzleAnonCredsRevocationRegistryDefinitionPrivateRecordAdapter.ts index c377b2c75d..a17923ca9e 100644 --- a/packages/drizzle-storage/src/anoncreds/revocation-registry-definition-private-record/DrizzleAnonCredsRevocationRegistryDefinitionPrivateRecordAdapter.ts +++ b/packages/drizzle-storage/src/anoncreds/revocation-registry-definition-private-record/DrizzleAnonCredsRevocationRegistryDefinitionPrivateRecordAdapter.ts @@ -1,9 +1,9 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' import { AnonCredsRevocationRegistryDefinitionPrivateRecord } from '@credo-ts/anoncreds' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/anoncreds/revocation-registry-definition-record/DrizzleAnonCredsRevocationRegistryDefinitionRecordAdapter.ts b/packages/drizzle-storage/src/anoncreds/revocation-registry-definition-record/DrizzleAnonCredsRevocationRegistryDefinitionRecordAdapter.ts index 28fc6dbe3e..eeb3481549 100644 --- a/packages/drizzle-storage/src/anoncreds/revocation-registry-definition-record/DrizzleAnonCredsRevocationRegistryDefinitionRecordAdapter.ts +++ b/packages/drizzle-storage/src/anoncreds/revocation-registry-definition-record/DrizzleAnonCredsRevocationRegistryDefinitionRecordAdapter.ts @@ -1,9 +1,9 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' import { AnonCredsRevocationRegistryDefinitionRecord } from '@credo-ts/anoncreds' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/anoncreds/schema-record/DrizzleAnonCredsSchemaRecordAdapter.ts b/packages/drizzle-storage/src/anoncreds/schema-record/DrizzleAnonCredsSchemaRecordAdapter.ts index 923e429615..a35e0a84ad 100644 --- a/packages/drizzle-storage/src/anoncreds/schema-record/DrizzleAnonCredsSchemaRecordAdapter.ts +++ b/packages/drizzle-storage/src/anoncreds/schema-record/DrizzleAnonCredsSchemaRecordAdapter.ts @@ -1,9 +1,9 @@ import { JsonTransformer } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' import { AnonCredsSchemaRecord } from '@credo-ts/anoncreds' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/anoncreds/schema-record/__tests__/schema.drizzle.e2e.test.ts b/packages/drizzle-storage/src/anoncreds/schema-record/__tests__/schema.drizzle.e2e.test.ts index 6733e8fb76..75ecbcb331 100644 --- a/packages/drizzle-storage/src/anoncreds/schema-record/__tests__/schema.drizzle.e2e.test.ts +++ b/packages/drizzle-storage/src/anoncreds/schema-record/__tests__/schema.drizzle.e2e.test.ts @@ -1,7 +1,7 @@ import { AnonCredsSchemaRecord, AnonCredsSchemaRepository } from '@credo-ts/anoncreds' import { JsonTransformer } from '@credo-ts/core' -import { DrizzleRecordTest, setupDrizzleRecordTest } from '../../../../tests/testDatabase' +import { type DrizzleRecordTest, setupDrizzleRecordTest } from '../../../../tests/testDatabase' import { anonCredsSchemaDrizzleRecord } from '../index' describe.each(['postgres', 'sqlite'] as const)('AnonCredsSchemaRecord with %s', (type) => { diff --git a/packages/drizzle-storage/src/applyReactNativeMigrations.ts b/packages/drizzle-storage/src/applyReactNativeMigrations.ts index eb13fda82d..a27fc35526 100644 --- a/packages/drizzle-storage/src/applyReactNativeMigrations.ts +++ b/packages/drizzle-storage/src/applyReactNativeMigrations.ts @@ -1,4 +1,4 @@ -import { AnyDrizzleDatabase } from './DrizzleStorageModuleConfig' +import type { AnyDrizzleDatabase } from './DrizzleStorageModuleConfig' export interface ReactNativeDrizzleMigration { journal: { diff --git a/packages/drizzle-storage/src/combineSchemas.ts b/packages/drizzle-storage/src/combineSchemas.ts index 97c9c7e152..084249845d 100644 --- a/packages/drizzle-storage/src/combineSchemas.ts +++ b/packages/drizzle-storage/src/combineSchemas.ts @@ -1,5 +1,5 @@ -import { UnionToIntersection } from '@credo-ts/core' -import { DrizzleRecord } from './DrizzleRecord' +import type { UnionToIntersection } from '@credo-ts/core' +import type { DrizzleRecord } from './DrizzleRecord' /** * Extracts and combines schema types from an array of DrizzleRecord objects for a specific database type diff --git a/packages/drizzle-storage/src/core/bundle.ts b/packages/drizzle-storage/src/core/bundle.ts index 86c6160d60..c6eeaf1189 100644 --- a/packages/drizzle-storage/src/core/bundle.ts +++ b/packages/drizzle-storage/src/core/bundle.ts @@ -10,7 +10,7 @@ import { storageVersionDrizzleRecord } from './storage-version-record' import { w3cCredentialDrizzleRecord } from './w3c-credential-record' import { w3cV2CredentialDrizzleRecord } from './w3c-v2-credential-record' -export default { +export const coreBundle = { name: 'core', records: [ contextDrizzleRecord, diff --git a/packages/drizzle-storage/src/core/did-record/DrizzleDidRecordAdapter.ts b/packages/drizzle-storage/src/core/did-record/DrizzleDidRecordAdapter.ts index ba18c2ccf2..17f8cf5358 100644 --- a/packages/drizzle-storage/src/core/did-record/DrizzleDidRecordAdapter.ts +++ b/packages/drizzle-storage/src/core/did-record/DrizzleDidRecordAdapter.ts @@ -1,8 +1,8 @@ import { DidRecord, JsonTransformer } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/core/generic-record/DrizzleGenericRecordAdapter.ts b/packages/drizzle-storage/src/core/generic-record/DrizzleGenericRecordAdapter.ts index f881842ba7..dee0f723a2 100644 --- a/packages/drizzle-storage/src/core/generic-record/DrizzleGenericRecordAdapter.ts +++ b/packages/drizzle-storage/src/core/generic-record/DrizzleGenericRecordAdapter.ts @@ -1,8 +1,8 @@ -import { GenericRecord, JsonTransformer, TagsBase } from '@credo-ts/core' +import { GenericRecord, JsonTransformer, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/core/mdoc-record/DrizzleMdocRecordAdapter.ts b/packages/drizzle-storage/src/core/mdoc-record/DrizzleMdocRecordAdapter.ts index a86ad52367..996e33b90a 100644 --- a/packages/drizzle-storage/src/core/mdoc-record/DrizzleMdocRecordAdapter.ts +++ b/packages/drizzle-storage/src/core/mdoc-record/DrizzleMdocRecordAdapter.ts @@ -1,8 +1,8 @@ import { JsonTransformer, MdocRecord } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/core/sd-jwt-vc-record/DrizzleSdJwtVcRecordAdapter.ts b/packages/drizzle-storage/src/core/sd-jwt-vc-record/DrizzleSdJwtVcRecordAdapter.ts index b3bd411ba5..b1d750fc35 100644 --- a/packages/drizzle-storage/src/core/sd-jwt-vc-record/DrizzleSdJwtVcRecordAdapter.ts +++ b/packages/drizzle-storage/src/core/sd-jwt-vc-record/DrizzleSdJwtVcRecordAdapter.ts @@ -1,8 +1,8 @@ import { JsonTransformer, SdJwtVcRecord } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/core/single-context-lru-cache-record/DrizzleSingleContextLruCacheRecordAdapter.ts b/packages/drizzle-storage/src/core/single-context-lru-cache-record/DrizzleSingleContextLruCacheRecordAdapter.ts index 52bb05fbb9..d6204e8b1c 100644 --- a/packages/drizzle-storage/src/core/single-context-lru-cache-record/DrizzleSingleContextLruCacheRecordAdapter.ts +++ b/packages/drizzle-storage/src/core/single-context-lru-cache-record/DrizzleSingleContextLruCacheRecordAdapter.ts @@ -1,8 +1,8 @@ -import { JsonTransformer, SingleContextLruCacheRecord, TagsBase } from '@credo-ts/core' +import { JsonTransformer, SingleContextLruCacheRecord, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/core/storage-version-record/DrizzleStorageVersionRecordAdapter.ts b/packages/drizzle-storage/src/core/storage-version-record/DrizzleStorageVersionRecordAdapter.ts index 11fbec9939..f19038fea9 100644 --- a/packages/drizzle-storage/src/core/storage-version-record/DrizzleStorageVersionRecordAdapter.ts +++ b/packages/drizzle-storage/src/core/storage-version-record/DrizzleStorageVersionRecordAdapter.ts @@ -1,8 +1,8 @@ -import { JsonTransformer, StorageVersionRecord, TagsBase } from '@credo-ts/core' +import { JsonTransformer, StorageVersionRecord, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/core/w3c-credential-record/DrizzleW3cCredentialRecordAdapter.ts b/packages/drizzle-storage/src/core/w3c-credential-record/DrizzleW3cCredentialRecordAdapter.ts index 36089499ab..ca7c404b7b 100644 --- a/packages/drizzle-storage/src/core/w3c-credential-record/DrizzleW3cCredentialRecordAdapter.ts +++ b/packages/drizzle-storage/src/core/w3c-credential-record/DrizzleW3cCredentialRecordAdapter.ts @@ -1,8 +1,8 @@ import { JsonTransformer, W3cCredentialRecord } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/core/w3c-v2-credential-record/DrizzleW3cV2CredentialRecordAdapter.ts b/packages/drizzle-storage/src/core/w3c-v2-credential-record/DrizzleW3cV2CredentialRecordAdapter.ts index c4377eedc1..d06845f5b2 100644 --- a/packages/drizzle-storage/src/core/w3c-v2-credential-record/DrizzleW3cV2CredentialRecordAdapter.ts +++ b/packages/drizzle-storage/src/core/w3c-v2-credential-record/DrizzleW3cV2CredentialRecordAdapter.ts @@ -1,8 +1,8 @@ import { JsonTransformer, W3cV2CredentialRecord } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/core/w3c-v2-credential-record/index.ts b/packages/drizzle-storage/src/core/w3c-v2-credential-record/index.ts index bcb9bcd427..0796b8e3b7 100644 --- a/packages/drizzle-storage/src/core/w3c-v2-credential-record/index.ts +++ b/packages/drizzle-storage/src/core/w3c-v2-credential-record/index.ts @@ -1,4 +1,4 @@ -import { DrizzleRecord } from '../../DrizzleRecord' +import type { DrizzleRecord } from '../../DrizzleRecord' import { DrizzleW3cV2CredentialRecordAdapter } from './DrizzleW3cV2CredentialRecordAdapter' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/didcomm/basic-message-record/DrizzleDidcommBasicMessageRecordAdapter.ts b/packages/drizzle-storage/src/didcomm/basic-message-record/DrizzleDidcommBasicMessageRecordAdapter.ts index e7131c6b5e..3487c4516a 100644 --- a/packages/drizzle-storage/src/didcomm/basic-message-record/DrizzleDidcommBasicMessageRecordAdapter.ts +++ b/packages/drizzle-storage/src/didcomm/basic-message-record/DrizzleDidcommBasicMessageRecordAdapter.ts @@ -1,9 +1,9 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' import { BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from '../../adapter/BaseDrizzleRecordAdapter' import { DidCommBasicMessageRecord } from '@credo-ts/didcomm' diff --git a/packages/drizzle-storage/src/didcomm/basic-message-record/postgres.ts b/packages/drizzle-storage/src/didcomm/basic-message-record/postgres.ts index d5b1524d3e..f3ab5724c8 100644 --- a/packages/drizzle-storage/src/didcomm/basic-message-record/postgres.ts +++ b/packages/drizzle-storage/src/didcomm/basic-message-record/postgres.ts @@ -2,7 +2,7 @@ import type { DidCommBasicMessageRole } from '@credo-ts/didcomm' import { foreignKey, pgEnum, pgTable, text } from 'drizzle-orm/pg-core' import { getPostgresBaseRecordTable, postgresBaseRecordIndexes } from '../../postgres/baseRecord' import { exhaustiveArray } from '../../util' -import { didcommConnection } from '../postgres' +import { didcommConnection } from '../connection-record/postgres' export const didcommBasicMessageRoles = exhaustiveArray({} as DidCommBasicMessageRole, ['sender', 'receiver'] as const) export const didcommBasicMessageRoleEnum = pgEnum('DidcommBasicMessageRole', didcommBasicMessageRoles) diff --git a/packages/drizzle-storage/src/didcomm/basic-message-record/sqlite.ts b/packages/drizzle-storage/src/didcomm/basic-message-record/sqlite.ts index 4dc33733e8..e46de981f3 100644 --- a/packages/drizzle-storage/src/didcomm/basic-message-record/sqlite.ts +++ b/packages/drizzle-storage/src/didcomm/basic-message-record/sqlite.ts @@ -2,7 +2,7 @@ import { foreignKey, sqliteTable, text } from 'drizzle-orm/sqlite-core' import type { DidCommBasicMessageRole } from '@credo-ts/didcomm' import { getSqliteBaseRecordTable, sqliteBaseRecordIndexes } from '../../sqlite/baseRecord' -import { didcommConnection } from '../sqlite' +import { didcommConnection } from '../connection-record/sqlite' export const didcommBasicMessage = sqliteTable( 'DidcommBasicMessage', diff --git a/packages/drizzle-storage/src/didcomm/bundle.ts b/packages/drizzle-storage/src/didcomm/bundle.ts index 09924e3eab..350a6011af 100644 --- a/packages/drizzle-storage/src/didcomm/bundle.ts +++ b/packages/drizzle-storage/src/didcomm/bundle.ts @@ -9,7 +9,7 @@ import { didcommMediatorRoutingDrizzleRecord } from './mediator-routing-record' import { didcommOutOfBandDrizzleRecord } from './out-of-band-record' import { didcommProofExchangeDrizzleRecord } from './proof-exchange-record' -export default { +export const didcommBundle = { name: 'didcomm', records: [ didcommBasicMessageDrizzleRecord, diff --git a/packages/drizzle-storage/src/didcomm/connection-record/DrizzleDidcommConnectionRecordAdapter.ts b/packages/drizzle-storage/src/didcomm/connection-record/DrizzleDidcommConnectionRecordAdapter.ts index 996af8e915..f1725e554f 100644 --- a/packages/drizzle-storage/src/didcomm/connection-record/DrizzleDidcommConnectionRecordAdapter.ts +++ b/packages/drizzle-storage/src/didcomm/connection-record/DrizzleDidcommConnectionRecordAdapter.ts @@ -1,9 +1,9 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' import { DidCommConnectionRecord } from '@credo-ts/didcomm' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/didcomm/credential-exchange-record/DrizzleDidcommCredentialExchangeRecordAdapter.ts b/packages/drizzle-storage/src/didcomm/credential-exchange-record/DrizzleDidcommCredentialExchangeRecordAdapter.ts index a9da93d915..59fee00608 100644 --- a/packages/drizzle-storage/src/didcomm/credential-exchange-record/DrizzleDidcommCredentialExchangeRecordAdapter.ts +++ b/packages/drizzle-storage/src/didcomm/credential-exchange-record/DrizzleDidcommCredentialExchangeRecordAdapter.ts @@ -1,13 +1,13 @@ -import { JsonObject, JsonTransformer, TagsBase } from '@credo-ts/core' +import { type JsonObject, JsonTransformer, type TagsBase } from '@credo-ts/core' import { BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from '../../adapter/BaseDrizzleRecordAdapter' import { DidCommCredentialExchangeRecord } from '@credo-ts/didcomm' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/didcomm/credential-exchange-record/__tests__/credentialExchange.drizzle.e2e.test.ts b/packages/drizzle-storage/src/didcomm/credential-exchange-record/__tests__/credentialExchange.drizzle.e2e.test.ts index bbc4f72e7f..2caf9c15c0 100644 --- a/packages/drizzle-storage/src/didcomm/credential-exchange-record/__tests__/credentialExchange.drizzle.e2e.test.ts +++ b/packages/drizzle-storage/src/didcomm/credential-exchange-record/__tests__/credentialExchange.drizzle.e2e.test.ts @@ -7,7 +7,7 @@ import { DidCommCredentialRole, DidCommCredentialState, } from '@credo-ts/didcomm' -import { DrizzleRecordTest, setupDrizzleRecordTest } from '../../../../tests/testDatabase' +import { type DrizzleRecordTest, setupDrizzleRecordTest } from '../../../../tests/testDatabase' import { didcommCredentialExchangeDrizzleRecord } from '../index' describe.each(['postgres', 'sqlite'] as const)('CredentialExchangeRecord with %s', (type) => { diff --git a/packages/drizzle-storage/src/didcomm/didcomm-message-record/DrizzleDidcommMessageRecordAdapter.ts b/packages/drizzle-storage/src/didcomm/didcomm-message-record/DrizzleDidcommMessageRecordAdapter.ts index e07894344b..f0e00a6da3 100644 --- a/packages/drizzle-storage/src/didcomm/didcomm-message-record/DrizzleDidcommMessageRecordAdapter.ts +++ b/packages/drizzle-storage/src/didcomm/didcomm-message-record/DrizzleDidcommMessageRecordAdapter.ts @@ -1,13 +1,13 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' import { BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from '../../adapter/BaseDrizzleRecordAdapter' import { DidCommMessageRecord } from '@credo-ts/didcomm' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/didcomm/mediation-record/DrizzleDidcommMediationRecordAdapter.ts b/packages/drizzle-storage/src/didcomm/mediation-record/DrizzleDidcommMediationRecordAdapter.ts index 28b74ff2f2..313d773de8 100644 --- a/packages/drizzle-storage/src/didcomm/mediation-record/DrizzleDidcommMediationRecordAdapter.ts +++ b/packages/drizzle-storage/src/didcomm/mediation-record/DrizzleDidcommMediationRecordAdapter.ts @@ -2,12 +2,12 @@ import { JsonTransformer } from '@credo-ts/core' import { BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from '../../adapter/BaseDrizzleRecordAdapter' import { DidCommMediationRecord } from '@credo-ts/didcomm' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/didcomm/mediation-record/postgres.ts b/packages/drizzle-storage/src/didcomm/mediation-record/postgres.ts index fc3a58180e..139a48e984 100644 --- a/packages/drizzle-storage/src/didcomm/mediation-record/postgres.ts +++ b/packages/drizzle-storage/src/didcomm/mediation-record/postgres.ts @@ -2,15 +2,12 @@ import type { DidCommMediationRole, DidCommMediationState, DidCommMediatorPickup import { boolean, foreignKey, pgEnum, pgTable, text } from 'drizzle-orm/pg-core' import { getPostgresBaseRecordTable, postgresBaseRecordIndexes } from '../../postgres/baseRecord' import { exhaustiveArray } from '../../util' -import { didcommConnection } from '../postgres' +import { didcommConnection } from '../connection-record/postgres' -export const didcommMediationStates = exhaustiveArray( - {} as DidCommMediationState, - ['requested', 'granted', 'denied'] as const -) +const didcommMediationStates = exhaustiveArray({} as DidCommMediationState, ['requested', 'granted', 'denied'] as const) export const didcommMediationStateEnum = pgEnum('DidcommMediationState', didcommMediationStates) -export const didcommMediationRoles = exhaustiveArray({} as DidCommMediationRole, ['MEDIATOR', 'RECIPIENT'] as const) +const didcommMediationRoles = exhaustiveArray({} as DidCommMediationRole, ['MEDIATOR', 'RECIPIENT'] as const) export const didcommMediationRoleEnum = pgEnum('DidcommMediationRole', didcommMediationRoles) export const didcommMediationPickupStrategies = exhaustiveArray( diff --git a/packages/drizzle-storage/src/didcomm/mediation-record/sqlite.ts b/packages/drizzle-storage/src/didcomm/mediation-record/sqlite.ts index 02a40bf168..780cc29adf 100644 --- a/packages/drizzle-storage/src/didcomm/mediation-record/sqlite.ts +++ b/packages/drizzle-storage/src/didcomm/mediation-record/sqlite.ts @@ -2,7 +2,7 @@ import { foreignKey, integer, sqliteTable, text } from 'drizzle-orm/sqlite-core' import type { DidCommMediationRole, DidCommMediationState, DidCommMediatorPickupStrategy } from '@credo-ts/didcomm' import { getSqliteBaseRecordTable, sqliteBaseRecordIndexes } from '../../sqlite/baseRecord' -import { didcommConnection } from '../sqlite' +import { didcommConnection } from '../connection-record/sqlite' export const didcommMediation = sqliteTable( 'DidcommMediation', diff --git a/packages/drizzle-storage/src/didcomm/mediator-routing-record/DrizzleDidcommMediatorRoutingRecordAdapter.ts b/packages/drizzle-storage/src/didcomm/mediator-routing-record/DrizzleDidcommMediatorRoutingRecordAdapter.ts index 54a2efb12e..18d2e6ca87 100644 --- a/packages/drizzle-storage/src/didcomm/mediator-routing-record/DrizzleDidcommMediatorRoutingRecordAdapter.ts +++ b/packages/drizzle-storage/src/didcomm/mediator-routing-record/DrizzleDidcommMediatorRoutingRecordAdapter.ts @@ -1,13 +1,13 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' import { BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from '../../adapter/BaseDrizzleRecordAdapter' import { DidCommMediatorRoutingRecord } from '@credo-ts/didcomm' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/didcomm/out-of-band-record/DrizzleDidcommOutOfBandRecordAdapter.ts b/packages/drizzle-storage/src/didcomm/out-of-band-record/DrizzleDidcommOutOfBandRecordAdapter.ts index 1e3dea2b8e..bef5f56007 100644 --- a/packages/drizzle-storage/src/didcomm/out-of-band-record/DrizzleDidcommOutOfBandRecordAdapter.ts +++ b/packages/drizzle-storage/src/didcomm/out-of-band-record/DrizzleDidcommOutOfBandRecordAdapter.ts @@ -2,12 +2,12 @@ import { JsonTransformer } from '@credo-ts/core' import { BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from '../../adapter/BaseDrizzleRecordAdapter' import { DidCommOutOfBandRecord } from '@credo-ts/didcomm' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/didcomm/out-of-band-record/__tests__/outOfBand.drizzle.e2e.test.ts b/packages/drizzle-storage/src/didcomm/out-of-band-record/__tests__/outOfBand.drizzle.e2e.test.ts index d6a204c095..a058760dc0 100644 --- a/packages/drizzle-storage/src/didcomm/out-of-band-record/__tests__/outOfBand.drizzle.e2e.test.ts +++ b/packages/drizzle-storage/src/didcomm/out-of-band-record/__tests__/outOfBand.drizzle.e2e.test.ts @@ -1,7 +1,7 @@ import { JsonTransformer } from '@credo-ts/core' import { DidCommOutOfBandRecord, DidCommOutOfBandRepository } from '@credo-ts/didcomm' -import { DrizzleRecordTest, setupDrizzleRecordTest } from '../../../../tests/testDatabase' +import { type DrizzleRecordTest, setupDrizzleRecordTest } from '../../../../tests/testDatabase' import { didcommOutOfBandDrizzleRecord } from '../index' describe.each(['postgres', 'sqlite'] as const)('OutOfBandRecord with %s', (type) => { diff --git a/packages/drizzle-storage/src/didcomm/proof-exchange-record/DrizzleDidcommProofExchangeRecordAdapter.ts b/packages/drizzle-storage/src/didcomm/proof-exchange-record/DrizzleDidcommProofExchangeRecordAdapter.ts index b2b59bfda2..ceeeafc680 100644 --- a/packages/drizzle-storage/src/didcomm/proof-exchange-record/DrizzleDidcommProofExchangeRecordAdapter.ts +++ b/packages/drizzle-storage/src/didcomm/proof-exchange-record/DrizzleDidcommProofExchangeRecordAdapter.ts @@ -1,13 +1,13 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' import { BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from '../../adapter/BaseDrizzleRecordAdapter' import { DidCommProofExchangeRecord } from '@credo-ts/didcomm' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/didcomm/proof-exchange-record/postgres.ts b/packages/drizzle-storage/src/didcomm/proof-exchange-record/postgres.ts index 858aa89959..de52eb5e98 100644 --- a/packages/drizzle-storage/src/didcomm/proof-exchange-record/postgres.ts +++ b/packages/drizzle-storage/src/didcomm/proof-exchange-record/postgres.ts @@ -2,7 +2,7 @@ import type { DidCommAutoAcceptProof, DidCommProofRole, DidCommProofState } from import { boolean, foreignKey, pgEnum, pgTable, text, unique } from 'drizzle-orm/pg-core' import { getPostgresBaseRecordTable, postgresBaseRecordIndexes } from '../../postgres/baseRecord' import { exhaustiveArray } from '../../util' -import { didcommConnection } from '../postgres' +import { didcommConnection } from '../connection-record/postgres' export const didcommProofExchangeRoles = exhaustiveArray({} as DidCommProofRole, ['verifier', 'prover'] as const) export const didcommProofExchangeRoleEnum = pgEnum('DidcommProofExchangeRole', didcommProofExchangeRoles) diff --git a/packages/drizzle-storage/src/didcomm/proof-exchange-record/sqlite.ts b/packages/drizzle-storage/src/didcomm/proof-exchange-record/sqlite.ts index 704ff3d4d3..df112df38d 100644 --- a/packages/drizzle-storage/src/didcomm/proof-exchange-record/sqlite.ts +++ b/packages/drizzle-storage/src/didcomm/proof-exchange-record/sqlite.ts @@ -2,7 +2,7 @@ import { foreignKey, integer, sqliteTable, text } from 'drizzle-orm/sqlite-core' import type { DidCommAutoAcceptProof, DidCommProofRole, DidCommProofState } from '@credo-ts/didcomm' import { getSqliteBaseRecordTable, sqliteBaseRecordIndexes } from '../../sqlite/baseRecord' -import { didcommConnection } from '../sqlite' +import { didcommConnection } from '../connection-record/sqlite' export const didcommProofExchange = sqliteTable( 'DidcommProofExchange', diff --git a/packages/drizzle-storage/src/drpc/bundle.ts b/packages/drizzle-storage/src/drpc/bundle.ts index 94e57508ac..7d2935741d 100644 --- a/packages/drizzle-storage/src/drpc/bundle.ts +++ b/packages/drizzle-storage/src/drpc/bundle.ts @@ -2,7 +2,7 @@ import type { DrizzleRecordBundle } from '../DrizzleRecord' import { bundleMigrationDefinition } from '../util' import { didcommDrpcDrizzleRecord } from './drpc-record' -export default { +export const drpcBundle = { name: 'drpc', records: [didcommDrpcDrizzleRecord], diff --git a/packages/drizzle-storage/src/drpc/drpc-record/DrizzleDidcommDrpcRecordAdapter.ts b/packages/drizzle-storage/src/drpc/drpc-record/DrizzleDidcommDrpcRecordAdapter.ts index 7c9a8550f9..3cc464e763 100644 --- a/packages/drizzle-storage/src/drpc/drpc-record/DrizzleDidcommDrpcRecordAdapter.ts +++ b/packages/drizzle-storage/src/drpc/drpc-record/DrizzleDidcommDrpcRecordAdapter.ts @@ -1,9 +1,9 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' import { DrpcRecord } from '@credo-ts/drpc' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/index.ts b/packages/drizzle-storage/src/index.ts index d39f9a8848..d4c1aadafd 100644 --- a/packages/drizzle-storage/src/index.ts +++ b/packages/drizzle-storage/src/index.ts @@ -1,9 +1,9 @@ // Adapter export { BaseDrizzleRecordAdapter, - AnyDrizzleAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type AnyDrizzleAdapter, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from './adapter' // Storage @@ -13,17 +13,17 @@ export { DrizzleStorageService } from './storage' export { DrizzleStorageModule } from './DrizzleStorageModule' export { DrizzleStorageModuleConfig } from './DrizzleStorageModuleConfig' -export { DrizzleDatabase } from './DrizzleDatabase' +export type { DrizzleDatabase } from './DrizzleDatabase' export { getPostgresBaseRecordTable, postgresBaseRecordIndexes } from './postgres' export { getSqliteBaseRecordTable, sqliteBaseRecordIndexes } from './sqlite' export type { DrizzleRecord, DrizzleRecordBundle } from './DrizzleRecord' -export { GetSchemaFromDrizzleRecords, getSchemaFromDrizzleRecords } from './combineSchemas' +export { type GetSchemaFromDrizzleRecords, getSchemaFromDrizzleRecords } from './combineSchemas' export { - ReactNativeDrizzleMigration, - ReactNativeDrizzleMigrationsOptions, + type ReactNativeDrizzleMigration, + type ReactNativeDrizzleMigrationsOptions, applyReactNativeMigrations, } from './applyReactNativeMigrations' diff --git a/packages/drizzle-storage/src/openid4vc/bundle.ts b/packages/drizzle-storage/src/openid4vc/bundle.ts index a8730b0cd4..ea0d89489b 100644 --- a/packages/drizzle-storage/src/openid4vc/bundle.ts +++ b/packages/drizzle-storage/src/openid4vc/bundle.ts @@ -5,7 +5,7 @@ import { openid4vcIssuerDrizzleRecord } from './openid4vc-issuer-record' import { openId4VcVerificationSessionDrizzleRecord } from './openid4vc-verification-session-record' import { openid4vcVerifierDrizzleRecord } from './openid4vc-verifier-record' -export default { +export const openid4vcBundle = { name: 'openid4vc', records: [ openid4vcIssuerDrizzleRecord, diff --git a/packages/drizzle-storage/src/openid4vc/openid4vc-issuance-session-record/DrizzleOpenId4VcIssuanceSessionRecordAdapter.ts b/packages/drizzle-storage/src/openid4vc/openid4vc-issuance-session-record/DrizzleOpenId4VcIssuanceSessionRecordAdapter.ts index 89d1abab29..d03fb2667c 100644 --- a/packages/drizzle-storage/src/openid4vc/openid4vc-issuance-session-record/DrizzleOpenId4VcIssuanceSessionRecordAdapter.ts +++ b/packages/drizzle-storage/src/openid4vc/openid4vc-issuance-session-record/DrizzleOpenId4VcIssuanceSessionRecordAdapter.ts @@ -1,13 +1,13 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' import { BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from '../../adapter/BaseDrizzleRecordAdapter' import { OpenId4VcIssuanceSessionRecord } from '@credo-ts/openid4vc' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/openid4vc/openid4vc-issuance-session-record/postgres.ts b/packages/drizzle-storage/src/openid4vc/openid4vc-issuance-session-record/postgres.ts index 0a42d66a1d..e10852cd78 100644 --- a/packages/drizzle-storage/src/openid4vc/openid4vc-issuance-session-record/postgres.ts +++ b/packages/drizzle-storage/src/openid4vc/openid4vc-issuance-session-record/postgres.ts @@ -11,9 +11,9 @@ import type { import { boolean, jsonb, pgEnum, pgTable, text, timestamp } from 'drizzle-orm/pg-core' import { getPostgresBaseRecordTable, postgresBaseRecordIndexes } from '../../postgres/baseRecord' import { exhaustiveArray } from '../../util' -import { openid4vcIssuer } from '../postgres' +import { openid4vcIssuer } from '../openid4vc-issuer-record/postgres' -export const openId4VcIssuanceSessionStates = exhaustiveArray( +const openId4VcIssuanceSessionStates = exhaustiveArray( {} as OpenId4VcIssuanceSessionState, [ 'OfferCreated', diff --git a/packages/drizzle-storage/src/openid4vc/openid4vc-issuance-session-record/sqlite.ts b/packages/drizzle-storage/src/openid4vc/openid4vc-issuance-session-record/sqlite.ts index 7437f9fca4..39da4b18b4 100644 --- a/packages/drizzle-storage/src/openid4vc/openid4vc-issuance-session-record/sqlite.ts +++ b/packages/drizzle-storage/src/openid4vc/openid4vc-issuance-session-record/sqlite.ts @@ -10,7 +10,7 @@ import type { } from '@credo-ts/openid4vc' import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core' import { getSqliteBaseRecordTable, sqliteBaseRecordIndexes } from '../../sqlite/baseRecord' -import { openid4vcIssuer } from '../sqlite' +import { openid4vcIssuer } from '../openid4vc-issuer-record/sqlite' export const openId4VcIssuanceSession = sqliteTable( 'OpenId4VcIssuanceSession', diff --git a/packages/drizzle-storage/src/openid4vc/openid4vc-issuer-record/DrizzleOpenid4vcIssuerRecordAdapter.ts b/packages/drizzle-storage/src/openid4vc/openid4vc-issuer-record/DrizzleOpenid4vcIssuerRecordAdapter.ts index 48d6212496..d98c936815 100644 --- a/packages/drizzle-storage/src/openid4vc/openid4vc-issuer-record/DrizzleOpenid4vcIssuerRecordAdapter.ts +++ b/packages/drizzle-storage/src/openid4vc/openid4vc-issuer-record/DrizzleOpenid4vcIssuerRecordAdapter.ts @@ -1,11 +1,11 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' import { OpenId4VcIssuerRecord } from '@credo-ts/openid4vc' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import { BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from '../../adapter/BaseDrizzleRecordAdapter' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/openid4vc/openid4vc-issuer-record/postgres.ts b/packages/drizzle-storage/src/openid4vc/openid4vc-issuer-record/postgres.ts index 1d9252c313..9a5f5a71e2 100644 --- a/packages/drizzle-storage/src/openid4vc/openid4vc-issuer-record/postgres.ts +++ b/packages/drizzle-storage/src/openid4vc/openid4vc-issuer-record/postgres.ts @@ -1,5 +1,5 @@ import type { Kms } from '@credo-ts/core' -import { +import type { OpenId4VciAuthorizationServerConfig, OpenId4VciBatchCredentialIssuanceOptions, OpenId4VciCredentialConfigurationsSupportedWithFormats, diff --git a/packages/drizzle-storage/src/openid4vc/openid4vc-verification-session-record/DrizzleOpenId4VcVerificationSessionRecordAdapter.ts b/packages/drizzle-storage/src/openid4vc/openid4vc-verification-session-record/DrizzleOpenId4VcVerificationSessionRecordAdapter.ts index 2038f04cbe..309b980910 100644 --- a/packages/drizzle-storage/src/openid4vc/openid4vc-verification-session-record/DrizzleOpenId4VcVerificationSessionRecordAdapter.ts +++ b/packages/drizzle-storage/src/openid4vc/openid4vc-verification-session-record/DrizzleOpenId4VcVerificationSessionRecordAdapter.ts @@ -1,11 +1,11 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' import { OpenId4VcVerificationSessionRecord } from '@credo-ts/openid4vc' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import { BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from '../../adapter/BaseDrizzleRecordAdapter' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/openid4vc/openid4vc-verification-session-record/postgres.ts b/packages/drizzle-storage/src/openid4vc/openid4vc-verification-session-record/postgres.ts index 9bf0f76f3e..3df1dfceb7 100644 --- a/packages/drizzle-storage/src/openid4vc/openid4vc-verification-session-record/postgres.ts +++ b/packages/drizzle-storage/src/openid4vc/openid4vc-verification-session-record/postgres.ts @@ -6,7 +6,7 @@ import type { import { jsonb, pgEnum, pgTable, text, timestamp } from 'drizzle-orm/pg-core' import { getPostgresBaseRecordTable, postgresBaseRecordIndexes } from '../../postgres/baseRecord' import { exhaustiveArray } from '../../util' -import { openid4vcVerifier } from '../postgres' +import { openid4vcVerifier } from '../openid4vc-verifier-record/postgres' export const openId4VcVerificationSessionStates = exhaustiveArray( {} as OpenId4VcVerificationSessionState, diff --git a/packages/drizzle-storage/src/openid4vc/openid4vc-verification-session-record/sqlite.ts b/packages/drizzle-storage/src/openid4vc/openid4vc-verification-session-record/sqlite.ts index d529316018..b6dbdf5d4f 100644 --- a/packages/drizzle-storage/src/openid4vc/openid4vc-verification-session-record/sqlite.ts +++ b/packages/drizzle-storage/src/openid4vc/openid4vc-verification-session-record/sqlite.ts @@ -5,7 +5,7 @@ import type { } from '@credo-ts/openid4vc' import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core' import { getSqliteBaseRecordTable, sqliteBaseRecordIndexes } from '../../sqlite/baseRecord' -import { openid4vcVerifier } from '../sqlite' +import { openid4vcVerifier } from '../openid4vc-verifier-record/sqlite' export const openId4VcVerificationSession = sqliteTable( 'OpenId4VcVerificationSession', diff --git a/packages/drizzle-storage/src/openid4vc/openid4vc-verifier-record/DrizzleOpenid4vcVerifierRecordAdapter.ts b/packages/drizzle-storage/src/openid4vc/openid4vc-verifier-record/DrizzleOpenid4vcVerifierRecordAdapter.ts index fbe74288d8..067cd10a3c 100644 --- a/packages/drizzle-storage/src/openid4vc/openid4vc-verifier-record/DrizzleOpenid4vcVerifierRecordAdapter.ts +++ b/packages/drizzle-storage/src/openid4vc/openid4vc-verifier-record/DrizzleOpenid4vcVerifierRecordAdapter.ts @@ -1,8 +1,8 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' import { OpenId4VcVerifierRecord } from '@credo-ts/openid4vc' -import { DrizzleDatabase } from '../../DrizzleDatabase' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import type { DrizzleDatabase } from '../../DrizzleDatabase' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/question-answer/bundle.ts b/packages/drizzle-storage/src/question-answer/bundle.ts index f734e72dc7..f1fcdddf64 100644 --- a/packages/drizzle-storage/src/question-answer/bundle.ts +++ b/packages/drizzle-storage/src/question-answer/bundle.ts @@ -2,7 +2,7 @@ import type { DrizzleRecordBundle } from '../DrizzleRecord' import { bundleMigrationDefinition } from '../util' import { didcommQuestionAnswerDrizzleRecord } from './question-answer-record' -export default { +export const questionAnswerBundle = { name: 'question-answer', records: [didcommQuestionAnswerDrizzleRecord], diff --git a/packages/drizzle-storage/src/question-answer/question-answer-record/DrizzleDidcommQuestionAnswerRecordAdapter.ts b/packages/drizzle-storage/src/question-answer/question-answer-record/DrizzleDidcommQuestionAnswerRecordAdapter.ts index 1f829f0494..ffedf1a82d 100644 --- a/packages/drizzle-storage/src/question-answer/question-answer-record/DrizzleDidcommQuestionAnswerRecordAdapter.ts +++ b/packages/drizzle-storage/src/question-answer/question-answer-record/DrizzleDidcommQuestionAnswerRecordAdapter.ts @@ -1,8 +1,8 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' import { QuestionAnswerRecord } from '@credo-ts/question-answer' -import { DrizzleDatabase } from '../../DrizzleDatabase' -import { BaseDrizzleRecordAdapter, DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' +import type { DrizzleDatabase } from '../../DrizzleDatabase' +import { BaseDrizzleRecordAdapter, type DrizzleAdapterRecordValues } from '../../adapter/BaseDrizzleRecordAdapter' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/storage/__tests__/DrizzleStorageService.drizzle.e2e.test.ts b/packages/drizzle-storage/src/storage/__tests__/DrizzleStorageService.drizzle.e2e.test.ts index 57a98d4340..65c4a4e756 100644 --- a/packages/drizzle-storage/src/storage/__tests__/DrizzleStorageService.drizzle.e2e.test.ts +++ b/packages/drizzle-storage/src/storage/__tests__/DrizzleStorageService.drizzle.e2e.test.ts @@ -1,14 +1,14 @@ import { Agent, GenericRecord, RecordDuplicateError, RecordNotFoundError } from '@credo-ts/core' -import { GenericRecordsRepository } from '@credo-ts/core/src/modules/generic-records/repository/GenericRecordsRepository' import { agentDependencies } from '@credo-ts/node' +import { GenericRecordsRepository } from '../../../../core/src/modules/generic-records/repository/GenericRecordsRepository' import { - DrizzlePostgresTestDatabase, + type DrizzlePostgresTestDatabase, createDrizzlePostgresTestDatabase, inMemoryDrizzleSqliteDatabase, pushDrizzleSchema, } from '../../../tests/testDatabase' import { DrizzleStorageModule } from '../../DrizzleStorageModule' -import coreDrizzleBundle from '../../core/bundle' +import { coreBundle } from '../../core/bundle' describe.each(['postgres', 'sqlite'] as const)('DrizzleStorageService with %s', (drizzleDialect) => { let postgresDatabase: DrizzlePostgresTestDatabase | undefined = undefined @@ -20,8 +20,8 @@ describe.each(['postgres', 'sqlite'] as const)('DrizzleStorageService with %s', } const drizzleModule = new DrizzleStorageModule({ - database: postgresDatabase?.drizzle ?? inMemoryDrizzleSqliteDatabase(), - bundles: [coreDrizzleBundle], + database: postgresDatabase?.drizzle ?? (await inMemoryDrizzleSqliteDatabase()), + bundles: [coreBundle], }) agent = new Agent({ diff --git a/packages/drizzle-storage/src/tenants/bundle.ts b/packages/drizzle-storage/src/tenants/bundle.ts index 98fbb789a4..e77747d081 100644 --- a/packages/drizzle-storage/src/tenants/bundle.ts +++ b/packages/drizzle-storage/src/tenants/bundle.ts @@ -3,7 +3,7 @@ import { bundleMigrationDefinition } from '../util' import { tenantDrizzleRecord } from './tenant-record' import { tenantRoutingDrizzleRecord } from './tenant-routing-record' -export default { +export const tenantsBundle = { name: 'tenants', records: [tenantDrizzleRecord, tenantRoutingDrizzleRecord], diff --git a/packages/drizzle-storage/src/tenants/tenant-record/DrizzleTenantRecordAdapter.ts b/packages/drizzle-storage/src/tenants/tenant-record/DrizzleTenantRecordAdapter.ts index 90a6bee594..5c999bec0d 100644 --- a/packages/drizzle-storage/src/tenants/tenant-record/DrizzleTenantRecordAdapter.ts +++ b/packages/drizzle-storage/src/tenants/tenant-record/DrizzleTenantRecordAdapter.ts @@ -1,13 +1,13 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' import { BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from '../../adapter/BaseDrizzleRecordAdapter' import { TenantRecord } from '@credo-ts/tenants' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/tenants/tenant-routing-record/DrizzleTenantRoutingRecordAdapter.ts b/packages/drizzle-storage/src/tenants/tenant-routing-record/DrizzleTenantRoutingRecordAdapter.ts index a2ca5dc3ee..0ae61d6d7e 100644 --- a/packages/drizzle-storage/src/tenants/tenant-routing-record/DrizzleTenantRoutingRecordAdapter.ts +++ b/packages/drizzle-storage/src/tenants/tenant-routing-record/DrizzleTenantRoutingRecordAdapter.ts @@ -1,13 +1,13 @@ -import { JsonTransformer, TagsBase } from '@credo-ts/core' +import { JsonTransformer, type TagsBase } from '@credo-ts/core' import { BaseDrizzleRecordAdapter, - DrizzleAdapterRecordValues, - DrizzleAdapterValues, + type DrizzleAdapterRecordValues, + type DrizzleAdapterValues, } from '../../adapter/BaseDrizzleRecordAdapter' import { TenantRoutingRecord } from '@credo-ts/tenants' -import { DrizzleDatabase } from '../../DrizzleDatabase' +import type { DrizzleDatabase } from '../../DrizzleDatabase' import * as postgres from './postgres' import * as sqlite from './sqlite' diff --git a/packages/drizzle-storage/src/tenants/tenant-routing-record/postgres.ts b/packages/drizzle-storage/src/tenants/tenant-routing-record/postgres.ts index 0a69f77e69..9a14846998 100644 --- a/packages/drizzle-storage/src/tenants/tenant-routing-record/postgres.ts +++ b/packages/drizzle-storage/src/tenants/tenant-routing-record/postgres.ts @@ -1,6 +1,6 @@ import { foreignKey, pgTable, text } from 'drizzle-orm/pg-core' import { getPostgresBaseRecordTable, postgresBaseRecordIndexes } from '../../postgres/baseRecord' -import { tenant } from '../postgres' +import { tenant } from '../tenant-record/postgres' export const tenantRouting = pgTable( 'TenantRouting', diff --git a/packages/drizzle-storage/src/tenants/tenant-routing-record/sqlite.ts b/packages/drizzle-storage/src/tenants/tenant-routing-record/sqlite.ts index 8355423e4f..4d20d71484 100644 --- a/packages/drizzle-storage/src/tenants/tenant-routing-record/sqlite.ts +++ b/packages/drizzle-storage/src/tenants/tenant-routing-record/sqlite.ts @@ -1,6 +1,6 @@ import { foreignKey, sqliteTable, text } from 'drizzle-orm/sqlite-core' import { getSqliteBaseRecordTable, sqliteBaseRecordIndexes } from '../../sqlite/baseRecord' -import { tenant } from '../sqlite' +import { tenant } from '../tenant-record/sqlite' export const tenantRouting = sqliteTable( 'TenantRouting', diff --git a/packages/drizzle-storage/src/util.ts b/packages/drizzle-storage/src/util.ts index 63448138b9..c9a7d21d0c 100644 --- a/packages/drizzle-storage/src/util.ts +++ b/packages/drizzle-storage/src/util.ts @@ -1,14 +1,15 @@ import type { DrizzleRecordBundle } from './DrizzleRecord' -export const rootDirectory = `${__dirname}/..` +export const dirname = import.meta.dirname +export const rootDirectory = `${dirname}/..` export const bundleMigrationDefinition = (bundle: string): DrizzleRecordBundle['migrations'] => ({ postgres: { - schemaPath: `${rootDirectory}/build/${bundle}/postgres.js`, + schemaPath: `${rootDirectory}/build/${bundle}/postgres.mjs`, migrationsPath: `${rootDirectory}/migrations/${bundle}/postgres`, }, sqlite: { - schemaPath: `${rootDirectory}/build/${bundle}/sqlite.js`, + schemaPath: `${rootDirectory}/build/${bundle}/sqlite.mjs`, migrationsPath: `${rootDirectory}/migrations/${bundle}/sqlite`, }, }) diff --git a/packages/drizzle-storage/tenants.js b/packages/drizzle-storage/tenants.js index 17ae91c994..a425ad5b1c 100644 --- a/packages/drizzle-storage/tenants.js +++ b/packages/drizzle-storage/tenants.js @@ -1 +1,3 @@ -module.exports = require('./build/tenants/bundle.js') +// If using CJS and `exports` key in package.json is not supported +// this ensures you can still import `@credo-ts/drizzle-storage/tenants` +exports.tenantsBundle = require('./build/tenants/bundle.js').tenantsBundle diff --git a/packages/drizzle-storage/tests/database.drizzle.e2e.test.ts b/packages/drizzle-storage/tests/database.drizzle.e2e.test.ts index e35fce1a86..46fcb3db47 100644 --- a/packages/drizzle-storage/tests/database.drizzle.e2e.test.ts +++ b/packages/drizzle-storage/tests/database.drizzle.e2e.test.ts @@ -1,12 +1,12 @@ import { Agent } from '@credo-ts/core' import { agentDependencies } from '@credo-ts/node' import { DrizzleStorageModule } from '../src' -import actionMenuDrizzleBundle from '../src/action-menu/bundle' -import anoncredsDrizzleBundle from '../src/anoncreds/bundle' -import coreDrizzleBundle from '../src/core/bundle' -import didcommDrizzleBundle from '../src/didcomm/bundle' +import { actionMenuBundle } from '../src/action-menu/bundle' +import { anoncredsBundle } from '../src/anoncreds/bundle' +import { coreBundle } from '../src/core/bundle' +import { didcommBundle } from '../src/didcomm/bundle' import { - DrizzlePostgresTestDatabase, + type DrizzlePostgresTestDatabase, createDrizzlePostgresTestDatabase, inMemoryDrizzleSqliteDatabase, pushDrizzleSchema, @@ -22,8 +22,8 @@ describe.each(['postgres', 'sqlite'] as const)('Drizzle storage with %s', (type) } const drizzleModule = new DrizzleStorageModule({ - database: postgresDatabase?.drizzle ?? inMemoryDrizzleSqliteDatabase(), - bundles: [coreDrizzleBundle, didcommDrizzleBundle, actionMenuDrizzleBundle, anoncredsDrizzleBundle], + database: postgresDatabase?.drizzle ?? (await inMemoryDrizzleSqliteDatabase()), + bundles: [coreBundle, didcommBundle, actionMenuBundle, anoncredsBundle], }) agent = new Agent({ diff --git a/packages/drizzle-storage/tests/setup.ts b/packages/drizzle-storage/tests/setup.ts deleted file mode 100644 index 34e38c9705..0000000000 --- a/packages/drizzle-storage/tests/setup.ts +++ /dev/null @@ -1 +0,0 @@ -jest.setTimeout(120000) diff --git a/packages/drizzle-storage/tests/testDatabase.ts b/packages/drizzle-storage/tests/testDatabase.ts index 5c04541644..c045e24f80 100644 --- a/packages/drizzle-storage/tests/testDatabase.ts +++ b/packages/drizzle-storage/tests/testDatabase.ts @@ -2,9 +2,9 @@ import { Agent, utils } from '@credo-ts/core' import { agentDependencies } from '@credo-ts/node' import type { PgDatabase } from 'drizzle-orm/pg-core' import type { Client as ClientType, Pool as PoolType } from 'pg' -import { DrizzleRecord, DrizzleStorageModule } from '../src' -import { DrizzlePostgresDatabase, isDrizzlePostgresDatabase } from '../src/DrizzleDatabase' -import { AnyDrizzleDatabase } from '../src/DrizzleStorageModuleConfig' +import { type DrizzleRecord, DrizzleStorageModule } from '../src' +import { type DrizzlePostgresDatabase, isDrizzlePostgresDatabase } from '../src/DrizzleDatabase' +import type { AnyDrizzleDatabase } from '../src/DrizzleStorageModuleConfig' export type DrizzlePostgresTestDatabase = { pool: PoolType @@ -14,7 +14,7 @@ export type DrizzlePostgresTestDatabase = { } export async function createDrizzlePostgresTestDatabase(): Promise { - const { Pool, Client } = require('pg') + const { Pool, Client } = await import('pg') const databaseName = utils.uuid().replace('-', '') const pgClient = new Client({ @@ -31,7 +31,7 @@ export async function createDrizzlePostgresTestDatabase(): Promise { await drizzleClient.end() @@ -44,7 +44,7 @@ export async function createDrizzlePostgresTestDatabase(): Promise> export async function setupDrizzleRecordTest(databaseType: 'postgres' | 'sqlite', drizzleRecord: DrizzleRecord) { const postgresDrizzle = databaseType === 'postgres' ? await createDrizzlePostgresTestDatabase() : undefined - const drizzle = postgresDrizzle ? postgresDrizzle.drizzle : inMemoryDrizzleSqliteDatabase() + const drizzle = postgresDrizzle ? postgresDrizzle.drizzle : await inMemoryDrizzleSqliteDatabase() const drizzleModule = new DrizzleStorageModule({ database: drizzle, @@ -82,7 +82,7 @@ export async function setupDrizzleRecordTest(databaseType: 'postgres' | 'sqlite' } export async function pushDrizzleSchema(drizzleModule: DrizzleStorageModule) { - const { pushSQLiteSchema, pushSchema } = require('drizzle-kit/api') + const { pushSQLiteSchema, pushSchema } = await import('drizzle-kit/api') if (isDrizzlePostgresDatabase(drizzleModule.config.database)) { const { apply } = await pushSchema( drizzleModule.config.schemas, @@ -100,14 +100,18 @@ export async function pushDrizzleSchema(drizzleModule: DrizzleStorageModule) { } } -export function drizzleSqliteDatabase(path: string): AnyDrizzleDatabase { - return require('drizzle-orm/libsql').drizzle(path) +export async function drizzleSqliteDatabase(path: string): Promise { + const libsql = await import('drizzle-orm/libsql') + return libsql.drizzle(path) } -export function inMemoryDrizzleSqliteDatabase(): AnyDrizzleDatabase { - return require('drizzle-orm/libsql').drizzle(':memory:') +export async function inMemoryDrizzleSqliteDatabase(): Promise { + const libsql = await import('drizzle-orm/libsql') + return libsql.drizzle(':memory:') } -export function drizzlePostgresDatabase(client: ClientType | PoolType): AnyDrizzleDatabase { - return require('drizzle-orm/node-postgres').drizzle(client) +export async function drizzlePostgresDatabase(client: ClientType | PoolType): Promise { + const pg = await import('drizzle-orm/node-postgres') + + return pg.drizzle(client) } diff --git a/packages/drizzle-storage/tsconfig.build.json b/packages/drizzle-storage/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/drizzle-storage/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/drizzle-storage/tsconfig.cli.json b/packages/drizzle-storage/tsconfig.cli.json deleted file mode 100644 index ae7a479976..0000000000 --- a/packages/drizzle-storage/tsconfig.cli.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./cli-build", - "types": ["node", "./types/shell.d.ts"] - }, - "include": ["cli/**/*"] -} diff --git a/packages/drizzle-storage/tsconfig.drizzle.json b/packages/drizzle-storage/tsconfig.drizzle.json deleted file mode 100644 index 4055b5c492..0000000000 --- a/packages/drizzle-storage/tsconfig.drizzle.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "types": ["node"], - "allowJs": true, - "module": "commonjs", - "target": "ES2020", - "lib": [], - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "skipDefaultLibCheck": true, - "noEmit": true, - "strict": true, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "useUnknownInCatchVariables": false - } -} diff --git a/packages/drizzle-storage/tsconfig.json b/packages/drizzle-storage/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/packages/drizzle-storage/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/packages/drizzle-storage/tsdown.config.ts b/packages/drizzle-storage/tsdown.config.ts new file mode 100644 index 0000000000..9964f344cb --- /dev/null +++ b/packages/drizzle-storage/tsdown.config.ts @@ -0,0 +1,31 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +// NOTE: core is exlcuded since we already import it, so we don't have to add it as entry. +const bundles = ['didcomm', 'action-menu', 'core', 'drpc', 'tenants', 'openid4vc', 'anoncreds', 'question-answer'] +const bundleEntry = (bundle: string) => [ + `src/${bundle}/bundle.ts`, + `src/${bundle}/sqlite.ts`, + `src/${bundle}/postgres.ts`, +] + +export default defineConfig([ + ...config.map((item) => ({ + ...item, + entry: ['src/index.ts', ...bundles.flatMap(bundleEntry)], + })), + // CLI + { + entry: ['cli/bin.ts', 'cli/drizzle.config.ts'], + outDir: 'cli-build', + unbundle: true, + format: 'esm', + target: 'es2020', + dts: { + sourcemap: true, + tsconfig: '../../tsconfig.build.json', + }, + platform: 'node', + logLevel: 'error', + }, +]) diff --git a/packages/drizzle-storage/types/migrations.d.ts b/packages/drizzle-storage/types/migrations.d.ts index f4bca8d6fa..d40a60bc72 100644 --- a/packages/drizzle-storage/types/migrations.d.ts +++ b/packages/drizzle-storage/types/migrations.d.ts @@ -10,6 +10,6 @@ declare const _default: { breakpoints: boolean }[] } - migrations: Record + migrations: Record } export default _default diff --git a/packages/drpc/jest.config.ts b/packages/drpc/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/drpc/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/drpc/package.json b/packages/drpc/package.json index 932e8daaa5..409339ac67 100644 --- a/packages/drpc/package.json +++ b/packages/drpc/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/drpc", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/drpc", "repository": { @@ -17,11 +28,8 @@ "directory": "packages/drpc" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/core": "workspace:*", @@ -32,7 +40,6 @@ "devDependencies": { "@credo-ts/node": "workspace:*", "reflect-metadata": "catalog:", - "rimraf": "catalog:", "typescript": "catalog:" } } diff --git a/packages/drpc/src/__tests__/DrpcMessageService.test.ts b/packages/drpc/src/__tests__/DrpcMessageService.test.ts index d73562548a..4b52750b79 100644 --- a/packages/drpc/src/__tests__/DrpcMessageService.test.ts +++ b/packages/drpc/src/__tests__/DrpcMessageService.test.ts @@ -2,6 +2,7 @@ import type { DrpcRequestObject } from '../messages' import { DidCommDidExchangeState, DidCommInboundMessageContext } from '@credo-ts/didcomm' +import type { MockedClassConstructor } from '../../../../tests/types' import { EventEmitter } from '../../../core/src/agent/EventEmitter' import { getAgentContext, getMockConnection } from '../../../core/tests/helpers' import { DrpcRequestMessage } from '../messages' @@ -10,12 +11,12 @@ import { DrpcRecord } from '../repository/DrpcRecord' import { DrpcRepository } from '../repository/DrpcRepository' import { DrpcService } from '../services' -jest.mock('../repository/DrpcRepository') -const DrpcRepositoryMock = DrpcRepository as jest.Mock +vi.mock('../repository/DrpcRepository') +const DrpcRepositoryMock = DrpcRepository as MockedClassConstructor const drpcMessageRepository = new DrpcRepositoryMock() -jest.mock('../../../core/src/agent/EventEmitter') -const EventEmitterMock = EventEmitter as jest.Mock +vi.mock('../../../core/src/agent/EventEmitter') +const EventEmitterMock = EventEmitter as MockedClassConstructor const eventEmitter = new EventEmitterMock() const agentContext = getAgentContext() diff --git a/packages/drpc/src/__tests__/DrpcMessagesModule.test.ts b/packages/drpc/src/__tests__/DrpcMessagesModule.test.ts index b6214da843..099cfa8d80 100644 --- a/packages/drpc/src/__tests__/DrpcMessagesModule.test.ts +++ b/packages/drpc/src/__tests__/DrpcMessagesModule.test.ts @@ -11,9 +11,9 @@ import { DrpcService } from '../services' describe('DrpcModule', () => { test('registers dependencies on the dependency manager', () => { const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), resolve: () => { return getAgentConfig('dprc') }, diff --git a/packages/drpc/src/repository/DrpcRepository.ts b/packages/drpc/src/repository/DrpcRepository.ts index aa10ef08d1..c96a2aa4a9 100644 --- a/packages/drpc/src/repository/DrpcRepository.ts +++ b/packages/drpc/src/repository/DrpcRepository.ts @@ -1,4 +1,4 @@ -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { DrpcRecord } from './DrpcRecord' diff --git a/packages/drpc/tests/setup.ts b/packages/drpc/tests/setup.ts deleted file mode 100644 index 78143033f2..0000000000 --- a/packages/drpc/tests/setup.ts +++ /dev/null @@ -1,3 +0,0 @@ -import 'reflect-metadata' - -jest.setTimeout(120000) diff --git a/packages/drpc/tsconfig.build.json b/packages/drpc/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/drpc/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/drpc/tsconfig.json b/packages/drpc/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/packages/drpc/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/packages/drpc/tsdown.config.ts b/packages/drpc/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/drpc/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/hedera/jest.config.ts b/packages/hedera/jest.config.ts deleted file mode 100644 index d91513a189..0000000000 --- a/packages/hedera/jest.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], - coveragePathIgnorePatterns: ['../tests'], -} - -export default config diff --git a/packages/hedera/package.json b/packages/hedera/package.json index 430d50d9cd..6cb50be752 100644 --- a/packages/hedera/package.json +++ b/packages/hedera/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/hedera", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/hedera", "repository": { @@ -17,24 +28,18 @@ "directory": "packages/hedera" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest", - "test:coverage": "jest --coverage", - "style:check": "biome check --unsafe", - "style:fix": "biome check --write --unsafe" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/anoncreds": "workspace:*", "@credo-ts/core": "workspace:*", "@hashgraph/sdk": "^2.72.0", "@hiero-did-sdk/anoncreds": "^0.1.5", + "@hiero-did-sdk/cache": "^0.1.5", "@hiero-did-sdk/client": "^0.1.5", "@hiero-did-sdk/core": "^0.1.5", "@hiero-did-sdk/hcs": "^0.1.5", - "@hiero-did-sdk/cache": "^0.1.5", "@hiero-did-sdk/publisher-internal": "^0.1.5", "@hiero-did-sdk/registrar": "^0.1.5", "@hiero-did-sdk/resolver": "^0.1.5" @@ -42,7 +47,6 @@ "devDependencies": { "@credo-ts/node": "workspace:*", "@hyperledger/anoncreds-nodejs": "^0.3.1", - "rimraf": "^4.4.0", "zstd-napi": "^0.0.10" } } diff --git a/packages/hedera/src/HederaModule.ts b/packages/hedera/src/HederaModule.ts index d23a2db144..f942df77b6 100644 --- a/packages/hedera/src/HederaModule.ts +++ b/packages/hedera/src/HederaModule.ts @@ -1,8 +1,8 @@ -import { DependencyManager, Module } from '@credo-ts/core' +import { DependencyManager, type Module } from '@credo-ts/core' import { AgentConfig, Buffer } from '@credo-ts/core' -import { HederaModuleConfig, HederaModuleConfigOptions } from './HederaModuleConfig' +import { HederaModuleConfig, type HederaModuleConfigOptions } from './HederaModuleConfig' import { HederaLedgerService } from './ledger' export class HederaModule implements Module { diff --git a/packages/hedera/src/HederaModuleConfig.ts b/packages/hedera/src/HederaModuleConfig.ts index 796b505f43..3b49dfffa1 100644 --- a/packages/hedera/src/HederaModuleConfig.ts +++ b/packages/hedera/src/HederaModuleConfig.ts @@ -1,5 +1,5 @@ -import { Cache } from '@hiero-did-sdk/core' -import { HederaHcsServiceConfiguration } from '@hiero-did-sdk/hcs' +import type { Cache } from '@hiero-did-sdk/core' +import type { HederaHcsServiceConfiguration } from '@hiero-did-sdk/hcs' export interface HederaModuleConfigOptions extends HederaHcsServiceConfiguration { cache?: Cache diff --git a/packages/hedera/src/anoncreds/HederaAnonCredsRegistry.ts b/packages/hedera/src/anoncreds/HederaAnonCredsRegistry.ts index 9a2dd74b16..cff195cfd5 100644 --- a/packages/hedera/src/anoncreds/HederaAnonCredsRegistry.ts +++ b/packages/hedera/src/anoncreds/HederaAnonCredsRegistry.ts @@ -14,7 +14,7 @@ import type { RegisterSchemaReturn, } from '@credo-ts/anoncreds' import type { AgentContext } from '@credo-ts/core' -import { HederaLedgerService } from '../ledger' +import { HederaLedgerService } from '../ledger/HederaLedgerService' export class HederaAnonCredsRegistry implements AnonCredsRegistry { public readonly methodName = 'hedera' diff --git a/packages/hedera/src/dids/HederaDidRegistrar.ts b/packages/hedera/src/dids/HederaDidRegistrar.ts index 0f0ce9a974..01482beacc 100644 --- a/packages/hedera/src/dids/HederaDidRegistrar.ts +++ b/packages/hedera/src/dids/HederaDidRegistrar.ts @@ -1,20 +1,20 @@ import { AgentContext, - DidCreateResult, - DidDeactivateResult, + type DidCreateResult, + type DidDeactivateResult, DidDocument, - DidDocumentKey, + type DidDocumentKey, DidDocumentRole, DidRecord, - DidRegistrar, + type DidRegistrar, DidRepository, - DidUpdateResult, + type DidUpdateResult, JsonTransformer, } from '@credo-ts/core' import { - HederaDidCreateOptions, - HederaDidDeactivateOptions, - HederaDidUpdateOptions, + type HederaDidCreateOptions, + type HederaDidDeactivateOptions, + type HederaDidUpdateOptions, HederaLedgerService, } from '../ledger' diff --git a/packages/hedera/src/ledger/HederaLedgerService.ts b/packages/hedera/src/ledger/HederaLedgerService.ts index 3ead504b8c..a528736fe7 100644 --- a/packages/hedera/src/ledger/HederaLedgerService.ts +++ b/packages/hedera/src/ledger/HederaLedgerService.ts @@ -1,4 +1,4 @@ -import { +import type { GetCredentialDefinitionReturn, GetRevocationRegistryDefinitionReturn, GetRevocationStatusListReturn, @@ -14,25 +14,32 @@ import { } from '@credo-ts/anoncreds' import { type AgentContext, - DidCreateOptions, - DidDeactivateOptions, + type DidCreateOptions, + type DidDeactivateOptions, type DidDocument, - DidDocumentKey, + type DidDocumentKey, DidRepository, - DidUpdateOptions, + type DidUpdateOptions, Kms, injectable, } from '@credo-ts/core' import { Client } from '@hashgraph/sdk' import { HederaAnoncredsRegistry } from '@hiero-did-sdk/anoncreds' import { LRUMemoryCache } from '@hiero-did-sdk/cache' -import { HederaClientService, HederaNetwork } from '@hiero-did-sdk/client' -import { Cache, DIDResolution, DID_ROOT_KEY_ID, Service, VerificationMethod, parseDID } from '@hiero-did-sdk/core' +import { HederaClientService, type HederaNetwork } from '@hiero-did-sdk/client' +import { + type Cache, + type DIDResolution, + DID_ROOT_KEY_ID, + type Service, + type VerificationMethod, + parseDID, +} from '@hiero-did-sdk/core' import { - CreateDIDResult, + type CreateDIDResult, DIDUpdateBuilder, - DeactivateDIDResult, - UpdateDIDResult, + type DeactivateDIDResult, + type UpdateDIDResult, generateCreateDIDRequest, generateDeactivateDIDRequest, generateUpdateDIDRequest, diff --git a/packages/hedera/src/ledger/index.ts b/packages/hedera/src/ledger/index.ts index d17260d425..17138d5bbd 100644 --- a/packages/hedera/src/ledger/index.ts +++ b/packages/hedera/src/ledger/index.ts @@ -1,7 +1,7 @@ export { HederaLedgerService, - HederaDidCreateOptions, - HederaDidUpdateOptions, - HederaDidDeactivateOptions, - HederaCreateDidResult, + type HederaDidCreateOptions, + type HederaDidUpdateOptions, + type HederaDidDeactivateOptions, + type HederaCreateDidResult, } from './HederaLedgerService' diff --git a/packages/hedera/tests/integration/hedera-anoncreds-registry.e2e.test.ts b/packages/hedera/tests/integration/hedera-anoncreds-registry.e2e.test.ts index f8a013068f..a410baff52 100644 --- a/packages/hedera/tests/integration/hedera-anoncreds-registry.e2e.test.ts +++ b/packages/hedera/tests/integration/hedera-anoncreds-registry.e2e.test.ts @@ -1,5 +1,5 @@ import { Agent, ConsoleLogger, InMemoryLruCache, LogLevel, utils } from '@credo-ts/core' -import { HederaDidCreateOptions } from '../../src' +import type { HederaDidCreateOptions } from '../../src' import { getHederaAgent } from './utils' describe('Hedera AnonCreds support', () => { diff --git a/packages/hedera/tests/integration/hedera-did-registrar.e2e.test.ts b/packages/hedera/tests/integration/hedera-did-registrar.e2e.test.ts index 9099b6da58..0629d46616 100644 --- a/packages/hedera/tests/integration/hedera-did-registrar.e2e.test.ts +++ b/packages/hedera/tests/integration/hedera-did-registrar.e2e.test.ts @@ -1,14 +1,6 @@ -import { - Agent, - ConsoleLogger, - DidDocument, - DidDocumentKey, - DidDocumentService, - Kms, - LogLevel, - VerificationMethod, -} from '@credo-ts/core' -import { HederaDidCreateOptions, HederaDidUpdateOptions } from '../../src' +import { Agent, DidDocument, type DidDocumentKey, DidDocumentService, Kms, VerificationMethod } from '@credo-ts/core' +import { testLogger } from '../../../core/tests' +import type { HederaDidCreateOptions, HederaDidUpdateOptions } from '../../src' import { getMultibasePublicKey } from '../../src/ledger/utils' import { getHederaAgent } from './utils' @@ -38,12 +30,11 @@ function getValidDidDocument(publicKeyMultibase?: string) { } describe('Hedera DID registrar', () => { - const logger = new ConsoleLogger(LogLevel.error) let agent: Agent beforeAll(async () => { agent = getHederaAgent({ - logger, + logger: testLogger, label: 'alice', }) await agent.initialize() diff --git a/packages/hedera/tests/integration/hedera-did-resolver.e2e.test.ts b/packages/hedera/tests/integration/hedera-did-resolver.e2e.test.ts index 018c51f53a..cfa20cc5e9 100644 --- a/packages/hedera/tests/integration/hedera-did-resolver.e2e.test.ts +++ b/packages/hedera/tests/integration/hedera-did-resolver.e2e.test.ts @@ -1,5 +1,5 @@ import { Agent, ConsoleLogger, JsonTransformer, LogLevel } from '@credo-ts/core' -import { HederaDidCreateOptions } from '../../src' +import type { HederaDidCreateOptions } from '../../src' import { getHederaAgent } from './utils' describe('Hedera DID resolver', () => { diff --git a/packages/hedera/tests/integration/utils/hederaModule.ts b/packages/hedera/tests/integration/utils/hederaModule.ts index 26c495f950..886dbdecb6 100644 --- a/packages/hedera/tests/integration/utils/hederaModule.ts +++ b/packages/hedera/tests/integration/utils/hederaModule.ts @@ -1,8 +1,8 @@ import { AnonCredsModule } from '@credo-ts/anoncreds' import { AskarModule } from '@credo-ts/askar' -import { Agent, Cache, CacheModule, DidsModule, Logger, ModulesMap, utils } from '@credo-ts/core' +import { Agent, type Cache, CacheModule, DidsModule, type Logger, type ModulesMap, utils } from '@credo-ts/core' import { agentDependencies } from '@credo-ts/node' -import { HederaNetwork } from '@hiero-did-sdk/client' +import type { HederaNetwork } from '@hiero-did-sdk/client' import { anoncreds } from '@hyperledger/anoncreds-nodejs' import { askar } from '@openwallet-foundation/askar-nodejs' import { InMemoryTailsFileService } from '../../../../anoncreds/tests/InMemoryTailsFileService' @@ -11,7 +11,7 @@ import { HederaDidRegistrar, HederaDidResolver, HederaModule, - HederaModuleConfigOptions, + type HederaModuleConfigOptions, } from '../../../src' export const getHederaModuleConfig = (props: { diff --git a/packages/hedera/tests/setup.ts b/packages/hedera/tests/setup.ts deleted file mode 100644 index cc76304a17..0000000000 --- a/packages/hedera/tests/setup.ts +++ /dev/null @@ -1 +0,0 @@ -jest.setTimeout(100000) diff --git a/packages/hedera/tests/unit/fixtures/did-document.ts b/packages/hedera/tests/unit/fixtures/did-document.ts index 723b1b2cad..0fdb741440 100644 --- a/packages/hedera/tests/unit/fixtures/did-document.ts +++ b/packages/hedera/tests/unit/fixtures/did-document.ts @@ -1,5 +1,5 @@ -import { ParsedDid, parseDid } from '@credo-ts/core' -import { DIDResolutionMetadata, JsonLdDIDDocument } from '@hiero-did-sdk/core' +import { type ParsedDid, parseDid } from '@credo-ts/core' +import type { DIDResolutionMetadata, JsonLdDIDDocument } from '@hiero-did-sdk/core' export const did = 'did:hedera:testnet:4BGybF4yCeYNi8RFVowK3zHc1xs2psYdkbiEvETrp3HL_0.0.1000001' export const parsedDid: ParsedDid = parseDid(did) diff --git a/packages/hedera/tests/unit/hedera-anoncres-registry.test.ts b/packages/hedera/tests/unit/hedera-anoncres-registry.test.ts index 40b57a849d..81be1df096 100644 --- a/packages/hedera/tests/unit/hedera-anoncres-registry.test.ts +++ b/packages/hedera/tests/unit/hedera-anoncres-registry.test.ts @@ -1,16 +1,16 @@ import { - GetCredentialDefinitionReturn, - GetRevocationRegistryDefinitionReturn, - GetRevocationStatusListReturn, - GetSchemaReturn, - RegisterCredentialDefinitionOptions, - RegisterCredentialDefinitionReturn, - RegisterRevocationRegistryDefinitionOptions, - RegisterRevocationRegistryDefinitionReturn, - RegisterRevocationStatusListOptions, - RegisterRevocationStatusListReturn, - RegisterSchemaOptions, - RegisterSchemaReturn, + type GetCredentialDefinitionReturn, + type GetRevocationRegistryDefinitionReturn, + type GetRevocationStatusListReturn, + type GetSchemaReturn, + type RegisterCredentialDefinitionOptions, + type RegisterCredentialDefinitionReturn, + type RegisterRevocationRegistryDefinitionOptions, + type RegisterRevocationRegistryDefinitionReturn, + type RegisterRevocationStatusListOptions, + type RegisterRevocationStatusListReturn, + type RegisterSchemaOptions, + type RegisterSchemaReturn, } from '@credo-ts/anoncreds' import { AgentContext } from '@credo-ts/core' import { mockFunction } from '../../../core/tests/helpers' @@ -18,27 +18,27 @@ import { HederaAnonCredsRegistry } from '../../src/anoncreds/HederaAnonCredsRegi import { HederaLedgerService } from '../../src/ledger/HederaLedgerService' const mockLedgerService = { - registerSchema: jest.fn(), - getSchema: jest.fn(), - registerCredentialDefinition: jest.fn(), - getCredentialDefinition: jest.fn(), - registerRevocationRegistryDefinition: jest.fn(), - getRevocationRegistryDefinition: jest.fn(), - registerRevocationStatusList: jest.fn(), - getRevocationStatusList: jest.fn(), + registerSchema: vi.fn(), + getSchema: vi.fn(), + registerCredentialDefinition: vi.fn(), + getCredentialDefinition: vi.fn(), + registerRevocationRegistryDefinition: vi.fn(), + getRevocationRegistryDefinition: vi.fn(), + registerRevocationStatusList: vi.fn(), + getRevocationStatusList: vi.fn(), } as unknown as HederaLedgerService const mockAgentContext = { dependencyManager: { - resolve: jest.fn().mockImplementation((cls) => { + resolve: vi.fn().mockImplementation((cls) => { if (cls === HederaLedgerService) return mockLedgerService }), }, config: { logger: { - trace: jest.fn(), - debug: jest.fn(), - error: jest.fn(), + trace: vi.fn(), + debug: vi.fn(), + error: vi.fn(), }, }, } as unknown as AgentContext diff --git a/packages/hedera/tests/unit/hedera-did-registrar.test.ts b/packages/hedera/tests/unit/hedera-did-registrar.test.ts index 684d4c5d6b..9b3830824e 100644 --- a/packages/hedera/tests/unit/hedera-did-registrar.test.ts +++ b/packages/hedera/tests/unit/hedera-did-registrar.test.ts @@ -1,35 +1,35 @@ -import { AgentContext, DidDocumentKey, DidRecord, DidRepository } from '@credo-ts/core' +import { AgentContext, type DidDocumentKey, DidRecord, DidRepository } from '@credo-ts/core' import { DidDocumentRole } from '@credo-ts/core' import { mockFunction } from '../../../core/tests/helpers' import { HederaDidRegistrar } from '../../src/dids/HederaDidRegistrar' -import { HederaDidUpdateOptions, HederaLedgerService } from '../../src/ledger/HederaLedgerService' +import { type HederaDidUpdateOptions, HederaLedgerService } from '../../src/ledger/HederaLedgerService' import { did, didDocument, didResolutionMetadata } from './fixtures/did-document' const mockDidRepository = { - save: jest.fn(), - findCreatedDid: jest.fn(), - update: jest.fn(), + save: vi.fn(), + findCreatedDid: vi.fn(), + update: vi.fn(), } as unknown as DidRepository const mockLedgerService = { - createDid: jest.fn(), - resolveDid: jest.fn(), - updateDid: jest.fn(), - deactivateDid: jest.fn(), + createDid: vi.fn(), + resolveDid: vi.fn(), + updateDid: vi.fn(), + deactivateDid: vi.fn(), } as unknown as HederaLedgerService const mockAgentContext = { dependencyManager: { - resolve: jest.fn().mockImplementation((cls) => { + resolve: vi.fn().mockImplementation((cls) => { if (cls === DidRepository) return mockDidRepository if (cls === HederaLedgerService) return mockLedgerService }), }, config: { logger: { - debug: jest.fn(), - error: jest.fn(), + debug: vi.fn(), + error: vi.fn(), }, }, } as unknown as AgentContext diff --git a/packages/hedera/tests/unit/hedera-did-resolver.test.ts b/packages/hedera/tests/unit/hedera-did-resolver.test.ts index dacd0449af..4d12b592a3 100644 --- a/packages/hedera/tests/unit/hedera-did-resolver.test.ts +++ b/packages/hedera/tests/unit/hedera-did-resolver.test.ts @@ -5,18 +5,18 @@ import { HederaLedgerService } from '../../src/ledger/HederaLedgerService' import { did, didDocument, didResolutionMetadata, parsedDid } from './fixtures/did-document' const mockLedgerService = { - resolveDid: jest.fn(), + resolveDid: vi.fn(), } as unknown as HederaLedgerService const mockAgentContext = { config: { logger: { - trace: jest.fn(), - debug: jest.fn(), + trace: vi.fn(), + debug: vi.fn(), }, }, dependencyManager: { - resolve: jest.fn().mockImplementation((cls) => { + resolve: vi.fn().mockImplementation((cls) => { if (cls === HederaLedgerService) return mockLedgerService }), }, @@ -34,7 +34,7 @@ describe('HederaDidResolver', () => { mockFunction(mockLedgerService.resolveDid).mockResolvedValue(resolutionResult) - jest.spyOn(JsonTransformer, 'fromJSON').mockReturnValue(didDocument) + vi.spyOn(JsonTransformer, 'fromJSON').mockReturnValue(didDocument) const result = await resolver.resolve(mockAgentContext, did, parsedDid, {}) diff --git a/packages/hedera/tests/unit/hedera-ledger-service.test.ts b/packages/hedera/tests/unit/hedera-ledger-service.test.ts index 88098c57c3..42e4c87d0f 100644 --- a/packages/hedera/tests/unit/hedera-ledger-service.test.ts +++ b/packages/hedera/tests/unit/hedera-ledger-service.test.ts @@ -1,4 +1,4 @@ -import { +import type { RegisterCredentialDefinitionOptions, RegisterRevocationRegistryDefinitionOptions, RegisterRevocationStatusListOptions, @@ -6,41 +6,41 @@ import { } from '@credo-ts/anoncreds' import { DidDocument, DidRecord, DidRepository, TypedArrayEncoder } from '@credo-ts/core' import { AgentContext } from '@credo-ts/core' -import { DidDocumentKey, Kms } from '@credo-ts/core' +import { type DidDocumentKey, Kms } from '@credo-ts/core' import { Client, PrivateKey } from '@hashgraph/sdk' import { HederaLedgerService } from '../../src/ledger/HederaLedgerService' -jest.mock('@hiero-did-sdk/registrar', () => ({ - DIDUpdateBuilder: jest.fn().mockReturnValue({ - addService: jest.fn().mockReturnThis(), - removeService: jest.fn().mockReturnThis(), - addVerificationMethod: jest.fn().mockReturnThis(), - removeVerificationMethod: jest.fn().mockReturnThis(), - addAssertionMethod: jest.fn().mockReturnThis(), - removeAssertionMethod: jest.fn().mockReturnThis(), - addAuthenticationMethod: jest.fn().mockReturnThis(), - removeAuthenticationMethod: jest.fn().mockReturnThis(), - addCapabilityDelegationMethod: jest.fn().mockReturnThis(), - removeCapabilityDelegationMethod: jest.fn().mockReturnThis(), - addCapabilityInvocationMethod: jest.fn().mockReturnThis(), - removeCapabilityInvocationMethod: jest.fn().mockReturnThis(), - addKeyAgreementMethod: jest.fn().mockReturnThis(), - removeKeyAgreementMethod: jest.fn().mockReturnThis(), - build: jest.fn(), +vi.mock('@hiero-did-sdk/registrar', () => ({ + DIDUpdateBuilder: vi.fn().mockReturnValue({ + addService: vi.fn().mockReturnThis(), + removeService: vi.fn().mockReturnThis(), + addVerificationMethod: vi.fn().mockReturnThis(), + removeVerificationMethod: vi.fn().mockReturnThis(), + addAssertionMethod: vi.fn().mockReturnThis(), + removeAssertionMethod: vi.fn().mockReturnThis(), + addAuthenticationMethod: vi.fn().mockReturnThis(), + removeAuthenticationMethod: vi.fn().mockReturnThis(), + addCapabilityDelegationMethod: vi.fn().mockReturnThis(), + removeCapabilityDelegationMethod: vi.fn().mockReturnThis(), + addCapabilityInvocationMethod: vi.fn().mockReturnThis(), + removeCapabilityInvocationMethod: vi.fn().mockReturnThis(), + addKeyAgreementMethod: vi.fn().mockReturnThis(), + removeKeyAgreementMethod: vi.fn().mockReturnThis(), + build: vi.fn(), }), - generateCreateDIDRequest: jest.fn(), - submitCreateDIDRequest: jest.fn(), - generateUpdateDIDRequest: jest.fn(), - submitUpdateDIDRequest: jest.fn(), - generateDeactivateDIDRequest: jest.fn(), - submitDeactivateDIDRequest: jest.fn(), + generateCreateDIDRequest: vi.fn(), + submitCreateDIDRequest: vi.fn(), + generateUpdateDIDRequest: vi.fn(), + submitUpdateDIDRequest: vi.fn(), + generateDeactivateDIDRequest: vi.fn(), + submitDeactivateDIDRequest: vi.fn(), })) import { - CreateDIDRequest, + type CreateDIDRequest, DIDUpdateBuilder, - DeactivateDIDRequest, - UpdateDIDRequest, + type DeactivateDIDRequest, + type UpdateDIDRequest, generateCreateDIDRequest, generateDeactivateDIDRequest, generateUpdateDIDRequest, @@ -49,14 +49,15 @@ import { submitUpdateDIDRequest, } from '@hiero-did-sdk/registrar' -jest.mock('@hiero-did-sdk/resolver', () => ({ - resolveDID: jest.fn(), - TopicReaderHederaHcs: jest.fn(), +vi.mock('@hiero-did-sdk/resolver', () => ({ + resolveDID: vi.fn(), + TopicReaderHederaHcs: vi.fn(), })) import { resolveDID } from '@hiero-did-sdk/resolver' import { DID_ROOT_KEY_ID } from '@hiero-did-sdk/core' +import type { MockInstance } from 'vitest' import { mockFunction } from '../../../core/tests/helpers' import { HederaAnonCredsRegistry } from '../../src/anoncreds/HederaAnonCredsRegistry' import { did, didDocument } from './fixtures/did-document' @@ -73,12 +74,12 @@ const mockPublicJwk: Kms.KmsJwkPublicOkp & { crv: 'Ed25519' } = { } const mockKms = { - sign: jest.fn().mockResolvedValue({ signature: new Uint8Array([1, 2, 3]) }), - getPublicKey: jest.fn().mockReturnValue(mockPublicJwk), + sign: vi.fn().mockResolvedValue({ signature: new Uint8Array([1, 2, 3]) }), + getPublicKey: vi.fn().mockReturnValue(mockPublicJwk), } as unknown as Kms.KeyManagementApi const mockDidRepository = { - findCreatedDid: jest.fn().mockResolvedValue({ + findCreatedDid: vi.fn().mockResolvedValue({ keys: [ { didDocumentRelativeKeyId: DID_ROOT_KEY_ID, @@ -90,7 +91,7 @@ const mockDidRepository = { const mockAgentContext = { dependencyManager: { - resolve: jest.fn((cls) => { + resolve: vi.fn((cls) => { if (cls === Kms.KeyManagementApi) { return mockKms } @@ -103,14 +104,14 @@ const mockAgentContext = { } as unknown as AgentContext const mockHederaAnonCredsRegistry = { - getSchema: jest.fn().mockResolvedValue('schema'), - registerSchema: jest.fn().mockResolvedValue('registerSchema'), - getCredentialDefinition: jest.fn().mockResolvedValue('credDef'), - registerCredentialDefinition: jest.fn().mockResolvedValue('registerCredDef'), - getRevocationRegistryDefinition: jest.fn().mockResolvedValue('revRegDef'), - registerRevocationRegistryDefinition: jest.fn().mockResolvedValue('registerRevRegDef'), - getRevocationStatusList: jest.fn().mockResolvedValue('revStatusList'), - registerRevocationStatusList: jest.fn().mockResolvedValue('registerRevStatus'), + getSchema: vi.fn().mockResolvedValue('schema'), + registerSchema: vi.fn().mockResolvedValue('registerSchema'), + getCredentialDefinition: vi.fn().mockResolvedValue('credDef'), + registerCredentialDefinition: vi.fn().mockResolvedValue('registerCredDef'), + getRevocationRegistryDefinition: vi.fn().mockResolvedValue('revRegDef'), + registerRevocationRegistryDefinition: vi.fn().mockResolvedValue('registerRevRegDef'), + getRevocationStatusList: vi.fn().mockResolvedValue('revStatusList'), + registerRevocationStatusList: vi.fn().mockResolvedValue('registerRevStatus'), } as unknown as HederaAnonCredsRegistry describe('HederaLedgerService', () => { @@ -124,27 +125,27 @@ describe('HederaLedgerService', () => { }, ], cache: { - get: jest.fn().mockResolvedValue(null), - set: jest.fn().mockResolvedValue(undefined), - remove: jest.fn().mockResolvedValue(undefined), - clear: jest.fn(), + get: vi.fn().mockResolvedValue(null), + set: vi.fn().mockResolvedValue(undefined), + remove: vi.fn().mockResolvedValue(undefined), + clear: vi.fn(), }, }, }) const builder: DIDUpdateBuilder = new DIDUpdateBuilder() // biome-ignore lint/suspicious/noExplicitAny: - jest.spyOn((service as any).clientService, 'withClient').mockImplementation(async (_props, operation) => { + vi.spyOn((service as any).clientService, 'withClient').mockImplementation(async (_props, operation) => { const mockClient = {} as Client // @ts-ignore return operation(mockClient) }) // biome-ignore lint/suspicious/noExplicitAny: - jest.spyOn(service as any, 'getHederaAnonCredsRegistry').mockReturnValue(mockHederaAnonCredsRegistry) + vi.spyOn(service as any, 'getHederaAnonCredsRegistry').mockReturnValue(mockHederaAnonCredsRegistry) // biome-ignore lint/suspicious/noExplicitAny: - jest.spyOn(service as any, 'getPublisher').mockResolvedValue({}) + vi.spyOn(service as any, 'getPublisher').mockResolvedValue({}) describe('resolveDid', () => it('should call resolveDID with proper args and returns result', async () => { @@ -193,7 +194,7 @@ describe('HederaLedgerService', () => { mockFunction(generateCreateDIDRequest).mockResolvedValueOnce(createDidRequest) mockFunction(submitCreateDIDRequest).mockResolvedValueOnce({ did, didDocument }) - const updateDidSpy = jest.spyOn(service, 'updateDid').mockResolvedValueOnce({ did, didDocument }) + const updateDidSpy = vi.spyOn(service, 'updateDid').mockResolvedValueOnce({ did, didDocument }) const result = await service.createDid(mockAgentContext, { method: 'hedera', @@ -228,23 +229,23 @@ describe('HederaLedgerService', () => { it('should call correct builder methods for each field and action', () => { const spies = { - addService: jest.spyOn(builder, 'addService'), - removeService: jest.spyOn(builder, 'removeService'), - addVerificationMethod: jest.spyOn(builder, 'addVerificationMethod'), - removeVerificationMethod: jest.spyOn(builder, 'removeVerificationMethod'), - addAssertionMethod: jest.spyOn(builder, 'addAssertionMethod'), - removeAssertionMethod: jest.spyOn(builder, 'removeAssertionMethod'), - addAuthenticationMethod: jest.spyOn(builder, 'addAuthenticationMethod'), - removeAuthenticationMethod: jest.spyOn(builder, 'removeAuthenticationMethod'), - addCapabilityDelegationMethod: jest.spyOn(builder, 'addCapabilityDelegationMethod'), - removeCapabilityDelegationMethod: jest.spyOn(builder, 'removeCapabilityDelegationMethod'), - addCapabilityInvocationMethod: jest.spyOn(builder, 'addCapabilityInvocationMethod'), - removeCapabilityInvocationMethod: jest.spyOn(builder, 'removeCapabilityInvocationMethod'), - addKeyAgreementMethod: jest.spyOn(builder, 'addKeyAgreementMethod'), - removeKeyAgreementMethod: jest.spyOn(builder, 'removeKeyAgreementMethod'), + addService: vi.spyOn(builder, 'addService'), + removeService: vi.spyOn(builder, 'removeService'), + addVerificationMethod: vi.spyOn(builder, 'addVerificationMethod'), + removeVerificationMethod: vi.spyOn(builder, 'removeVerificationMethod'), + addAssertionMethod: vi.spyOn(builder, 'addAssertionMethod'), + removeAssertionMethod: vi.spyOn(builder, 'removeAssertionMethod'), + addAuthenticationMethod: vi.spyOn(builder, 'addAuthenticationMethod'), + removeAuthenticationMethod: vi.spyOn(builder, 'removeAuthenticationMethod'), + addCapabilityDelegationMethod: vi.spyOn(builder, 'addCapabilityDelegationMethod'), + removeCapabilityDelegationMethod: vi.spyOn(builder, 'removeCapabilityDelegationMethod'), + addCapabilityInvocationMethod: vi.spyOn(builder, 'addCapabilityInvocationMethod'), + removeCapabilityInvocationMethod: vi.spyOn(builder, 'removeCapabilityInvocationMethod'), + addKeyAgreementMethod: vi.spyOn(builder, 'addKeyAgreementMethod'), + removeKeyAgreementMethod: vi.spyOn(builder, 'removeKeyAgreementMethod'), } - const testCases: [string, 'add' | 'remove', string, jest.SpyInstance][] = [ + const testCases: [string, 'add' | 'remove', string, MockInstance][] = [ ['service', 'add', 'service-item', spies.addService], ['service', 'remove', 'service-id', spies.removeService], @@ -268,7 +269,7 @@ describe('HederaLedgerService', () => { ] for (const [property, action, param, spy] of testCases) { - jest.clearAllMocks() + vi.clearAllMocks() // biome-ignore lint/suspicious/noExplicitAny: const builderMethod = (service as any).getUpdateMethod(builder, property, action) @@ -321,15 +322,15 @@ describe('HederaLedgerService', () => { // @ts-ignore - there is a conflict with 'resolveDID' "overloaded" signatures mockFunction(resolveDID).mockResolvedValueOnce({ didDocument }) - jest + vi // biome-ignore lint/suspicious/noExplicitAny: .spyOn(service as any, 'prepareDidUpdates') - .mockReturnValueOnce({ build: jest.fn().mockReturnValueOnce(updatedDidDocument) }) + .mockReturnValueOnce({ build: vi.fn().mockReturnValueOnce(updatedDidDocument) }) mockFunction(generateUpdateDIDRequest).mockResolvedValueOnce(updateDidRequest) // biome-ignore lint/suspicious/noExplicitAny: - jest.spyOn(service as any, 'signRequests').mockResolvedValueOnce(Promise.resolve()) + vi.spyOn(service as any, 'signRequests').mockResolvedValueOnce(Promise.resolve()) mockFunction(submitUpdateDIDRequest).mockResolvedValueOnce({ did, didDocument: updatedDidDocument }) await expect( @@ -356,7 +357,7 @@ describe('HederaLedgerService', () => { }) it('should throw an error if root key is not found in deactivateDid', async () => { - mockFunction(mockAgentContext.dependencyManager.resolve).mockReturnValueOnce({ sign: jest.fn() }) + mockFunction(mockAgentContext.dependencyManager.resolve).mockReturnValueOnce({ sign: vi.fn() }) await expect( service.deactivateDid(mockAgentContext, { diff --git a/packages/hedera/tests/unit/kms-publisher.test.ts b/packages/hedera/tests/unit/kms-publisher.test.ts index c4462eabb5..41b156cd5e 100644 --- a/packages/hedera/tests/unit/kms-publisher.test.ts +++ b/packages/hedera/tests/unit/kms-publisher.test.ts @@ -1,41 +1,36 @@ +import { AgentContext, Kms } from '@credo-ts/core' +import { PublicKey } from '@hashgraph/sdk' +import { PublicJwk } from '../../../core/src/modules/kms/jwk/PublicJwk' +import { mockFunction } from '../../../core/tests/helpers' +import { KmsPublisher } from '../../src/ledger/publisher/KmsPublisher' +import { createOrGetKey, hederaPublicKeyFromPublicJwk } from '../../src/ledger/utils' + const mockPublicJwk = { keyId: 'test-key-id', publicKey: { publicKey: new Uint8Array([1, 2, 3]) }, } as Kms.PublicJwk -import { AgentContext, Kms } from '@credo-ts/core' -import { mockFunction } from '../../../core/tests/helpers' -import { KmsPublisher } from '../../src/ledger/publisher/KmsPublisher' +vi.mock('../../../core/src/modules/kms/jwk/PublicJwk') +vi.mock('../../../core/src/modules/kms/KeyManagementApi') -jest.mock('@credo-ts/core', () => ({ - ...jest.requireActual('@credo-ts/core'), - Kms: { - KeyManagementApi: jest.fn().mockReturnValue({}), - PublicJwk: { - fromFingerprint: jest.fn().mockReturnValue(mockPublicJwk), - }, - }, -})) +mockFunction(PublicJwk.fromFingerprint).mockReturnValue(mockPublicJwk) -jest.mock('../../src/ledger/utils', () => ({ - createOrGetKey: jest.fn(), - hederaPublicKeyFromPublicJwk: jest.fn(), +vi.mock('../../src/ledger/utils', () => ({ + createOrGetKey: vi.fn(), + hederaPublicKeyFromPublicJwk: vi.fn(), })) -import { PublicKey } from '@hashgraph/sdk' -import { createOrGetKey, hederaPublicKeyFromPublicJwk } from '../../src/ledger/utils' - -jest.mock('@hiero-did-sdk/publisher-internal', () => { +vi.mock('@hiero-did-sdk/publisher-internal', () => { return { - Publisher: jest.fn(), + Publisher: vi.fn(), } }) describe('KmsPublisher', () => { const mockClient = { - freezeWith: jest.fn(), - signWith: jest.fn(), - execute: jest.fn(), + freezeWith: vi.fn(), + signWith: vi.fn(), + execute: vi.fn(), operator: { accountId: '0.0.1234', publicKey: {}, @@ -43,14 +38,14 @@ describe('KmsPublisher', () => { } const mockFrozenTransaction = { - signWith: jest.fn(), + signWith: vi.fn(), } const mockResponse = { - getReceipt: jest.fn(), + getReceipt: vi.fn(), } - const signMock = jest.fn().mockResolvedValue({ signature: 'signature-bytes' }) + const signMock = vi.fn().mockResolvedValue({ signature: 'signature-bytes' }) const kmsMock = { sign: signMock, @@ -58,7 +53,7 @@ describe('KmsPublisher', () => { const agentContext = { dependencyManager: { - resolve: jest.fn().mockImplementation((key) => { + resolve: vi.fn().mockImplementation((key) => { if (key === Kms.KeyManagementApi) { return kmsMock } @@ -70,7 +65,7 @@ describe('KmsPublisher', () => { const mockPublicKey = {} beforeEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() mockFunction(hederaPublicKeyFromPublicJwk).mockReturnValue(mockPublicKey as PublicKey) mockClient.freezeWith.mockReturnValue(mockFrozenTransaction) diff --git a/packages/hedera/tests/unit/kms-signer.test.ts b/packages/hedera/tests/unit/kms-signer.test.ts index 3379e1c997..d7182dc984 100644 --- a/packages/hedera/tests/unit/kms-signer.test.ts +++ b/packages/hedera/tests/unit/kms-signer.test.ts @@ -1,4 +1,9 @@ +import { Kms } from '@credo-ts/core' +import { PublicKey } from '@hashgraph/sdk' +import { PublicJwk } from '../../../core/src/modules/kms/jwk/PublicJwk' +import { mockFunction } from '../../../core/tests/helpers' import { KmsSigner } from '../../src/ledger/signer/KmsSigner' +import { createOrGetKey, hederaPublicKeyFromPublicJwk } from '../../src/ledger/utils' const mockKeyId = 'test-key-id' const mockPublicJwk = { @@ -6,30 +11,19 @@ const mockPublicJwk = { publicKey: { publicKey: new Uint8Array([1, 2, 3]) }, } as Kms.PublicJwk -import { Kms } from '@credo-ts/core' -import { mockFunction } from '../../../core/tests/helpers' +vi.mock('../../../core/src/modules/kms/jwk/PublicJwk') +vi.mock('../../../core/src/modules/kms/KeyManagementApi') -jest.mock('@credo-ts/core', () => ({ - ...jest.requireActual('@credo-ts/core'), - Kms: { - KeyManagementApi: jest.fn().mockReturnValue({}), - PublicJwk: { - fromFingerprint: jest.fn().mockReturnValue(mockPublicJwk), - }, - }, -})) +mockFunction(PublicJwk.fromFingerprint).mockReturnValue(mockPublicJwk) -jest.mock('../../src/ledger/utils', () => ({ - createOrGetKey: jest.fn(), - hederaPublicKeyFromPublicJwk: jest.fn(), +vi.mock('../../src/ledger/utils', () => ({ + createOrGetKey: vi.fn(), + hederaPublicKeyFromPublicJwk: vi.fn(), })) -import { PublicKey } from '@hashgraph/sdk' -import { createOrGetKey, hederaPublicKeyFromPublicJwk } from '../../src/ledger/utils' - describe('KmsSigner', () => { - const signMock = jest.fn().mockResolvedValue({ signature: new Uint8Array([7, 8, 9]) }) - const verifyMock = jest.fn().mockResolvedValue({ verified: true }) + const signMock = vi.fn().mockResolvedValue({ signature: new Uint8Array([7, 8, 9]) }) + const verifyMock = vi.fn().mockResolvedValue({ verified: true }) const kmsMock = { sign: signMock, @@ -37,11 +31,11 @@ describe('KmsSigner', () => { } const mockPublicKey = { - toStringDer: jest.fn().mockReturnValue('mock-der-string'), + toStringDer: vi.fn().mockReturnValue('mock-der-string'), } beforeEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() mockFunction(hederaPublicKeyFromPublicJwk).mockReturnValue(mockPublicKey as unknown as PublicKey) }) diff --git a/packages/hedera/tests/unit/utils.test.ts b/packages/hedera/tests/unit/utils.test.ts index 6f5799f307..02dcdb76d7 100644 --- a/packages/hedera/tests/unit/utils.test.ts +++ b/packages/hedera/tests/unit/utils.test.ts @@ -1,12 +1,13 @@ import { Kms } from '@credo-ts/core' import { PublicKey } from '@hashgraph/sdk' import { KeysUtility } from '@hiero-did-sdk/core' +import type { Mocked } from 'vitest' import { mockFunction } from '../../../core/tests/helpers' import { createOrGetKey, getMultibasePublicKey, hederaPublicKeyFromPublicJwk } from '../../src/ledger/utils' -jest.mock('@hiero-did-sdk/core', () => ({ +vi.mock('@hiero-did-sdk/core', () => ({ KeysUtility: { - fromBytes: jest.fn(), + fromBytes: vi.fn(), }, })) @@ -24,13 +25,13 @@ describe('getMultibasePublicKey', () => { }) describe('createOrGetKey', () => { - let kmsMock: jest.Mocked + let kmsMock: Mocked beforeEach(() => { kmsMock = { - createKey: jest.fn(), - getPublicKey: jest.fn(), - } as unknown as jest.Mocked + createKey: vi.fn(), + getPublicKey: vi.fn(), + } as unknown as Mocked }) it('should create a key if keyId is not provided', async () => { @@ -72,7 +73,7 @@ describe('createOrGetKey', () => { kmsMock.getPublicKey.mockResolvedValue(badJwk) - const spyDesc = jest.spyOn(Kms, 'getJwkHumanDescription').mockReturnValue('unsupported key type') + const spyDesc = vi.spyOn(Kms, 'getJwkHumanDescription').mockReturnValue('unsupported key type') await expect(createOrGetKey(kmsMock, keyId)).rejects.toThrow( `Key with key id '${keyId}' uses unsupported unsupported key type for did:hedera` @@ -84,11 +85,11 @@ describe('createOrGetKey', () => { describe('hederaPublicKeyFromPublicJwk', () => { beforeEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) it('should convert a public JWK to a Hedera PublicKey', () => { - const mockPublicKey = { toPublicKey: jest.fn() } as unknown as ReturnType + const mockPublicKey = { toPublicKey: vi.fn() } as unknown as ReturnType const mockHederaPublicKey = {} as PublicKey mockFunction(mockPublicKey.toPublicKey).mockReturnValue(mockHederaPublicKey) diff --git a/packages/hedera/tsconfig.build.json b/packages/hedera/tsconfig.build.json deleted file mode 100644 index e7ee40ad18..0000000000 --- a/packages/hedera/tsconfig.build.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build", - "baseUrl": ".", - "skipDefaultLibCheck": true - }, - "include": ["src/**/*"], - "exclude": ["../core"] -} diff --git a/packages/hedera/tsconfig.json b/packages/hedera/tsconfig.json deleted file mode 100644 index dcd84a3af2..0000000000 --- a/packages/hedera/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"], - "moduleResolution": "node" - } -} diff --git a/packages/hedera/tsdown.config.ts b/packages/hedera/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/hedera/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/indy-sdk-to-askar-migration/jest.config.ts b/packages/indy-sdk-to-askar-migration/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/indy-sdk-to-askar-migration/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/indy-sdk-to-askar-migration/package.json b/packages/indy-sdk-to-askar-migration/package.json index 8ddb0b02d2..0f0451735c 100644 --- a/packages/indy-sdk-to-askar-migration/package.json +++ b/packages/indy-sdk-to-askar-migration/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/indy-sdk-to-askar-migration", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/indy-sdk-to-askar-migration", "repository": { @@ -17,11 +28,8 @@ "directory": "packages/indy-sdk-to-askar-migration" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/anoncreds": "workspace:*", @@ -32,7 +40,7 @@ "devDependencies": { "@openwallet-foundation/askar-nodejs": "catalog:", "@openwallet-foundation/askar-shared": "catalog:", - "rimraf": "catalog:", + "typescript": "catalog:" }, "peerDependencies": { diff --git a/packages/indy-sdk-to-askar-migration/src/IndySdkToAskarMigrationUpdater.ts b/packages/indy-sdk-to-askar-migration/src/IndySdkToAskarMigrationUpdater.ts index 83e1f44619..c21305df81 100644 --- a/packages/indy-sdk-to-askar-migration/src/IndySdkToAskarMigrationUpdater.ts +++ b/packages/indy-sdk-to-askar-migration/src/IndySdkToAskarMigrationUpdater.ts @@ -1,6 +1,6 @@ import type { AnonCredsCredentialValue } from '@credo-ts/anoncreds' import type { Agent, FileSystem } from '@credo-ts/core' -import { EntryObject, KdfMethod, StoreKeyMethod } from '@openwallet-foundation/askar-shared' +import { type EntryObject, KdfMethod, StoreKeyMethod } from '@openwallet-foundation/askar-shared' import { AnonCredsCredentialRecord, AnonCredsLinkSecretRecord } from '@credo-ts/anoncreds' import { InjectionSymbols, JsonTransformer, TypedArrayEncoder } from '@credo-ts/core' diff --git a/packages/indy-sdk-to-askar-migration/tests/setup.ts b/packages/indy-sdk-to-askar-migration/tests/setup.ts deleted file mode 100644 index 226f7031fa..0000000000 --- a/packages/indy-sdk-to-askar-migration/tests/setup.ts +++ /dev/null @@ -1 +0,0 @@ -jest.setTimeout(20000) diff --git a/packages/indy-sdk-to-askar-migration/tsconfig.build.json b/packages/indy-sdk-to-askar-migration/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/indy-sdk-to-askar-migration/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/indy-sdk-to-askar-migration/tsconfig.json b/packages/indy-sdk-to-askar-migration/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/packages/indy-sdk-to-askar-migration/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/packages/indy-sdk-to-askar-migration/tsdown.config.ts b/packages/indy-sdk-to-askar-migration/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/indy-sdk-to-askar-migration/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/indy-vdr/jest.config.ts b/packages/indy-vdr/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/indy-vdr/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/indy-vdr/package.json b/packages/indy-vdr/package.json index e4c544b4ee..5b946771c1 100644 --- a/packages/indy-vdr/package.json +++ b/packages/indy-vdr/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/indy-vdr", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/indy-vdr", "repository": { @@ -17,11 +28,8 @@ "directory": "packages/indy-vdr" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/anoncreds": "workspace:*", @@ -33,7 +41,7 @@ "@stablelib/ed25519": "^1.0.2", "@types/ref-array-di": "^1.2.6", "@types/ref-struct-di": "^1.1.10", - "rimraf": "catalog:", + "rxjs": "catalog:", "typescript": "catalog:" }, diff --git a/packages/indy-vdr/src/__tests__/IndyVdrModule.test.ts b/packages/indy-vdr/src/__tests__/IndyVdrModule.test.ts index 3ca6553695..951b913cb6 100644 --- a/packages/indy-vdr/src/__tests__/IndyVdrModule.test.ts +++ b/packages/indy-vdr/src/__tests__/IndyVdrModule.test.ts @@ -7,10 +7,10 @@ import { IndyVdrModuleConfig } from '../IndyVdrModuleConfig' import { IndyVdrPoolService } from '../pool' const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), - resolve: jest.fn().mockReturnValue({ logger: { warn: jest.fn() } }), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), + resolve: vi.fn().mockReturnValue({ logger: { warn: vi.fn() } }), } as unknown as DependencyManager describe('IndyVdrModule', () => { diff --git a/packages/indy-vdr/src/dids/__tests__/IndyVdrIndyDidRegistrar.test.ts b/packages/indy-vdr/src/dids/__tests__/IndyVdrIndyDidRegistrar.test.ts index 1e79b3af92..3618a5921f 100644 --- a/packages/indy-vdr/src/dids/__tests__/IndyVdrIndyDidRegistrar.test.ts +++ b/packages/indy-vdr/src/dids/__tests__/IndyVdrIndyDidRegistrar.test.ts @@ -1,4 +1,4 @@ -import { DidRecord, RecordSavedEvent } from '@credo-ts/core' +import { DidRecord, type RecordSavedEvent } from '@credo-ts/core' import { DidCommV1Service, @@ -19,13 +19,14 @@ import { import { Subject } from 'rxjs' import { InMemoryStorageService } from '../../../../../tests/InMemoryStorageService' +import type { MockedClassConstructor } from '../../../../../tests/types' import { transformPrivateKeyToPrivateJwk } from '../../../../askar/src' import { agentDependencies, getAgentConfig, getAgentContext, mockProperty } from '../../../../core/tests' import { IndyVdrPool, IndyVdrPoolService } from '../../pool' import { IndyVdrIndyDidRegistrar } from '../IndyVdrIndyDidRegistrar' -jest.mock('../../pool/IndyVdrPool') -const IndyVdrPoolMock = IndyVdrPool as jest.Mock +vi.mock('../../pool/IndyVdrPool') +const IndyVdrPoolMock = IndyVdrPool as MockedClassConstructor const poolMock = new IndyVdrPoolMock() mockProperty(poolMock, 'indyNamespace', 'ns1') @@ -38,11 +39,11 @@ const didRepository = new DidRepository(storageService, eventEmitter) const agentContext = getAgentContext({ registerInstances: [ [DidRepository, didRepository], - [IndyVdrPoolService, { getPoolForNamespace: jest.fn().mockReturnValue(poolMock) }], + [IndyVdrPoolService, { getPoolForNamespace: vi.fn().mockReturnValue(poolMock) }], [ DidsApi, { - resolve: jest.fn().mockResolvedValue({ + resolve: vi.fn().mockResolvedValue({ didDocument: new DidDocument({ id: 'did:indy:pool1:BzCbsNYhMrjHiqZDTUASHg', authentication: [ @@ -55,7 +56,7 @@ const agentContext = getAgentContext({ ], }), }), - resolveCreatedDidDocumentWithKeys: jest.fn().mockResolvedValue({ + resolveCreatedDidDocumentWithKeys: vi.fn().mockResolvedValue({ keys: [], didDocument: new DidDocument({ id: 'did:indy:pool1:BzCbsNYhMrjHiqZDTUASHg', @@ -94,7 +95,7 @@ describe('IndyVdrIndyDidRegistrar', () => { }) afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) test('returns an error state if the provided key id is not an Ed25519 key', async () => { @@ -147,7 +148,7 @@ describe('IndyVdrIndyDidRegistrar', () => { test('creates a did:indy document without services', async () => { // @ts-ignore - method is private - const createRegisterDidWriteRequest = jest.spyOn( + const createRegisterDidWriteRequest = vi.spyOn( indyVdrIndyDidRegistrar, 'createRegisterDidWriteRequest' ) @@ -155,7 +156,7 @@ describe('IndyVdrIndyDidRegistrar', () => { createRegisterDidWriteRequest.mockImplementationOnce(() => Promise.resolve()) // @ts-ignore - method is private - const registerPublicDidSpy = jest.spyOn(indyVdrIndyDidRegistrar, 'registerPublicDid') + const registerPublicDidSpy = vi.spyOn(indyVdrIndyDidRegistrar, 'registerPublicDid') // @ts-ignore type check fails because method is private registerPublicDidSpy.mockImplementationOnce(() => Promise.resolve()) @@ -210,7 +211,7 @@ describe('IndyVdrIndyDidRegistrar', () => { test('creates a did:indy document with services using attrib', async () => { // @ts-ignore - method is private - const createRegisterDidWriteRequestSpy = jest.spyOn( + const createRegisterDidWriteRequestSpy = vi.spyOn( indyVdrIndyDidRegistrar, 'createRegisterDidWriteRequest' ) @@ -218,12 +219,12 @@ describe('IndyVdrIndyDidRegistrar', () => { createRegisterDidWriteRequestSpy.mockImplementationOnce(() => Promise.resolve()) // @ts-ignore - method is private - const registerPublicDidSpy = jest.spyOn(indyVdrIndyDidRegistrar, 'registerPublicDid') + const registerPublicDidSpy = vi.spyOn(indyVdrIndyDidRegistrar, 'registerPublicDid') // @ts-ignore type check fails because method is private registerPublicDidSpy.mockImplementationOnce(() => Promise.resolve()) // @ts-ignore - method is private - const createSetDidEndpointsRequestSpy = jest.spyOn( + const createSetDidEndpointsRequestSpy = vi.spyOn( indyVdrIndyDidRegistrar, 'createSetDidEndpointsRequest' ) @@ -231,7 +232,7 @@ describe('IndyVdrIndyDidRegistrar', () => { createSetDidEndpointsRequestSpy.mockImplementationOnce(() => Promise.resolve(undefined)) // @ts-ignore - method is private - const setEndpointsForDidSpy = jest.spyOn(indyVdrIndyDidRegistrar, 'setEndpointsForDid') + const setEndpointsForDidSpy = vi.spyOn(indyVdrIndyDidRegistrar, 'setEndpointsForDid') // @ts-ignore type check fails because method is private setEndpointsForDidSpy.mockImplementationOnce(() => Promise.resolve(undefined)) @@ -362,7 +363,7 @@ describe('IndyVdrIndyDidRegistrar', () => { test('stores the did document', async () => { // @ts-ignore - method is private - const createRegisterDidWriteRequestSpy = jest.spyOn( + const createRegisterDidWriteRequestSpy = vi.spyOn( indyVdrIndyDidRegistrar, 'createRegisterDidWriteRequest' ) @@ -370,16 +371,16 @@ describe('IndyVdrIndyDidRegistrar', () => { createRegisterDidWriteRequestSpy.mockImplementationOnce(() => Promise.resolve()) // @ts-ignore - method is private - const registerPublicDidSpy = jest.spyOn(indyVdrIndyDidRegistrar, 'registerPublicDid') + const registerPublicDidSpy = vi.spyOn(indyVdrIndyDidRegistrar, 'registerPublicDid') // @ts-ignore type check fails because method is private registerPublicDidSpy.mockImplementationOnce(() => Promise.resolve()) // @ts-ignore - method is private - const setEndpointsForDidSpy = jest.spyOn(indyVdrIndyDidRegistrar, 'setEndpointsForDid') + const setEndpointsForDidSpy = vi.spyOn(indyVdrIndyDidRegistrar, 'setEndpointsForDid') // @ts-ignore type check fails because method is private setEndpointsForDidSpy.mockImplementationOnce(() => Promise.resolve(undefined)) - const saveCalled = jest.fn() + const saveCalled = vi.fn() eventEmitter.on>(RepositoryEventTypes.RecordSaved, saveCalled) await indyVdrIndyDidRegistrar.create(agentContext, { diff --git a/packages/indy-vdr/src/dids/__tests__/IndyVdrIndyDidResolver.test.ts b/packages/indy-vdr/src/dids/__tests__/IndyVdrIndyDidResolver.test.ts index c027d083d7..a86d7436b9 100644 --- a/packages/indy-vdr/src/dids/__tests__/IndyVdrIndyDidResolver.test.ts +++ b/packages/indy-vdr/src/dids/__tests__/IndyVdrIndyDidResolver.test.ts @@ -1,16 +1,19 @@ +import '@hyperledger/indy-vdr-nodejs' import { JsonTransformer } from '@credo-ts/core' import { getAgentConfig, getAgentContext, mockProperty } from '../../../../core/tests/helpers' -import { IndyVdrPool, IndyVdrPoolService } from '../../pool' +import { IndyVdrPoolService } from '../../pool' +import { IndyVdrPool } from '../../pool/IndyVdrPool' import { IndyVdrIndyDidResolver } from '../IndyVdrIndyDidResolver' +import type { MockedClassConstructor } from '../../../../../tests/types' import didIndyLjgpST2rjsoxYegQDRm7EL from './__fixtures__/didIndyLjgpST2rjsoxYegQDRm7EL.json' import didIndyLjgpST2rjsoxYegQDRm7ELdiddocContent from './__fixtures__/didIndyLjgpST2rjsoxYegQDRm7ELdiddocContent.json' import didIndyR1xKJw17sUoXhejEpugMYJFixture from './__fixtures__/didIndyR1xKJw17sUoXhejEpugMYJ.json' import didIndyWJz9mHyW9BZksioQnRsrAoFixture from './__fixtures__/didIndyWJz9mHyW9BZksioQnRsrAo.json' -jest.mock('../../pool/IndyVdrPool') -const IndyVdrPoolMock = IndyVdrPool as jest.Mock +vi.mock('../../pool/IndyVdrPool') +const IndyVdrPoolMock = IndyVdrPool as MockedClassConstructor const poolMock = new IndyVdrPoolMock() mockProperty(poolMock, 'indyNamespace', 'ns1') @@ -18,7 +21,7 @@ const agentConfig = getAgentConfig('IndyVdrIndyDidResolver') const agentContext = getAgentContext({ agentConfig, - registerInstances: [[IndyVdrPoolService, { getPoolForNamespace: jest.fn().mockReturnValue(poolMock) }]], + registerInstances: [[IndyVdrPoolService, { getPoolForNamespace: vi.fn().mockReturnValue(poolMock) }]], }) const resolver = new IndyVdrIndyDidResolver() @@ -39,7 +42,7 @@ describe('IndyVdrIndyDidResolver', () => { }, } - const poolMockSubmitRequest = jest.spyOn(poolMock, 'submitRequest') + const poolMockSubmitRequest = vi.spyOn(poolMock, 'submitRequest') poolMockSubmitRequest.mockResolvedValueOnce(nymResponse) const result = await resolver.resolve(agentContext, did) @@ -75,8 +78,8 @@ describe('IndyVdrIndyDidResolver', () => { }, } - jest.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(nymResponse) - jest.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(attribResponse) + vi.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(nymResponse) + vi.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(attribResponse) const result = await resolver.resolve(agentContext, did) @@ -114,8 +117,8 @@ describe('IndyVdrIndyDidResolver', () => { }, } - jest.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(nymResponse) - jest.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(attribResponse) + vi.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(nymResponse) + vi.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(attribResponse) const result = await resolver.resolve(agentContext, did) @@ -131,7 +134,7 @@ describe('IndyVdrIndyDidResolver', () => { it('should return did resolution metadata with error if the indy ledger service throws an error', async () => { const did = 'did:indy:ns1:R1xKJw17sUoXhejEpugMYJ' - jest.spyOn(poolMock, 'submitRequest').mockRejectedValue(new Error('Error submitting read request')) + vi.spyOn(poolMock, 'submitRequest').mockRejectedValue(new Error('Error submitting read request')) const result = await resolver.resolve(agentContext, did) diff --git a/packages/indy-vdr/src/dids/__tests__/IndyVdrSovDidResolver.test.ts b/packages/indy-vdr/src/dids/__tests__/IndyVdrSovDidResolver.test.ts index 2c9ad30494..ed3d067632 100644 --- a/packages/indy-vdr/src/dids/__tests__/IndyVdrSovDidResolver.test.ts +++ b/packages/indy-vdr/src/dids/__tests__/IndyVdrSovDidResolver.test.ts @@ -1,5 +1,7 @@ +import '@hyperledger/indy-vdr-nodejs' import { JsonTransformer } from '@credo-ts/core' +import type { MockedClassConstructor } from '../../../../../tests/types' import { parseDid } from '../../../../core/src/modules/dids/domain/parse' import { getAgentConfig, getAgentContext, mockProperty } from '../../../../core/tests/helpers' import { IndyVdrPool } from '../../pool/IndyVdrPool' @@ -9,8 +11,8 @@ import { IndyVdrSovDidResolver } from '../IndyVdrSovDidResolver' import didSovR1xKJw17sUoXhejEpugMYJFixture from './__fixtures__/didSovR1xKJw17sUoXhejEpugMYJ.json' import didSovWJz9mHyW9BZksioQnRsrAoFixture from './__fixtures__/didSovWJz9mHyW9BZksioQnRsrAo.json' -jest.mock('../../pool/IndyVdrPool') -const IndyVdrPoolMock = IndyVdrPool as jest.Mock +vi.mock('../../pool/IndyVdrPool') +const IndyVdrPoolMock = IndyVdrPool as MockedClassConstructor const poolMock = new IndyVdrPoolMock() mockProperty(poolMock, 'indyNamespace', 'local') @@ -18,7 +20,7 @@ const agentConfig = getAgentConfig('IndyVdrSovDidResolver') const agentContext = getAgentContext({ agentConfig, - registerInstances: [[IndyVdrPoolService, { getPoolForDid: jest.fn().mockReturnValue({ pool: poolMock }) }]], + registerInstances: [[IndyVdrPoolService, { getPoolForDid: vi.fn().mockReturnValue({ pool: poolMock }) }]], }) const resolver = new IndyVdrSovDidResolver() @@ -50,8 +52,8 @@ describe('DidResolver', () => { }, } - jest.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(nymResponse) - jest.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(attribResponse) + vi.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(nymResponse) + vi.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(attribResponse) const result = await resolver.resolve(agentContext, did, parseDid(did)) @@ -89,8 +91,8 @@ describe('DidResolver', () => { }, } - jest.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(nymResponse) - jest.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(attribResponse) + vi.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(nymResponse) + vi.spyOn(poolMock, 'submitRequest').mockResolvedValueOnce(attribResponse) const result = await resolver.resolve(agentContext, did, parseDid(did)) @@ -106,7 +108,7 @@ describe('DidResolver', () => { it('should return did resolution metadata with error if the indy ledger service throws an error', async () => { const did = 'did:sov:R1xKJw17sUoXhejEpugMYJ' - jest.spyOn(poolMock, 'submitRequest').mockRejectedValue(new Error('Error submitting read request')) + vi.spyOn(poolMock, 'submitRequest').mockRejectedValue(new Error('Error submitting read request')) const result = await resolver.resolve(agentContext, did, parseDid(did)) diff --git a/packages/indy-vdr/src/dids/index.ts b/packages/indy-vdr/src/dids/index.ts index 09983bad74..09cab7de16 100644 --- a/packages/indy-vdr/src/dids/index.ts +++ b/packages/indy-vdr/src/dids/index.ts @@ -1,3 +1,7 @@ -export { IndyVdrIndyDidRegistrar, IndyVdrDidCreateResult, IndyVdrDidCreateOptions } from './IndyVdrIndyDidRegistrar' +export { + IndyVdrIndyDidRegistrar, + type IndyVdrDidCreateResult, + type IndyVdrDidCreateOptions, +} from './IndyVdrIndyDidRegistrar' export { IndyVdrIndyDidResolver } from './IndyVdrIndyDidResolver' export { IndyVdrSovDidResolver } from './IndyVdrSovDidResolver' diff --git a/packages/indy-vdr/src/index.ts b/packages/indy-vdr/src/index.ts index ecd29dbc80..b38cad30f0 100644 --- a/packages/indy-vdr/src/index.ts +++ b/packages/indy-vdr/src/index.ts @@ -2,10 +2,10 @@ export { IndyVdrIndyDidRegistrar, IndyVdrIndyDidResolver, IndyVdrSovDidResolver, - IndyVdrDidCreateResult, - IndyVdrDidCreateOptions, + type IndyVdrDidCreateResult, + type IndyVdrDidCreateOptions, } from './dids' -export { IndyVdrPoolConfig, IndyVdrPoolService } from './pool' +export { type IndyVdrPoolConfig, IndyVdrPoolService } from './pool' export * from './IndyVdrModule' export * from './IndyVdrModuleConfig' export * from './anoncreds' diff --git a/packages/indy-vdr/src/pool/IndyVdrPoolService.ts b/packages/indy-vdr/src/pool/IndyVdrPoolService.ts index 87875e07c9..5f47d98bd9 100644 --- a/packages/indy-vdr/src/pool/IndyVdrPoolService.ts +++ b/packages/indy-vdr/src/pool/IndyVdrPoolService.ts @@ -2,7 +2,7 @@ import type { AgentContext } from '@credo-ts/core' import type { GetNymResponse } from '@hyperledger/indy-vdr-shared' import { didIndyRegex } from '@credo-ts/anoncreds' -import { CacheModuleConfig, InjectionSymbols, Logger, inject, injectable } from '@credo-ts/core' +import { CacheModuleConfig, InjectionSymbols, type Logger, inject, injectable } from '@credo-ts/core' import { GetNymRequest } from '@hyperledger/indy-vdr-shared' import { IndyVdrModuleConfig } from '../IndyVdrModuleConfig' diff --git a/packages/indy-vdr/tests/setup.ts b/packages/indy-vdr/tests/setup.ts deleted file mode 100644 index a5714a641c..0000000000 --- a/packages/indy-vdr/tests/setup.ts +++ /dev/null @@ -1,3 +0,0 @@ -import '@hyperledger/indy-vdr-nodejs' - -jest.setTimeout(120000) diff --git a/packages/indy-vdr/tsconfig.build.json b/packages/indy-vdr/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/indy-vdr/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/indy-vdr/tsconfig.json b/packages/indy-vdr/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/packages/indy-vdr/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/packages/indy-vdr/tsdown.config.ts b/packages/indy-vdr/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/indy-vdr/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/node/jest.config.ts b/packages/node/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/node/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/node/package.json b/packages/node/package.json index 5c48a9b0b2..f7b279e2b2 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,14 +1,28 @@ { "name": "@credo-ts/node", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", + "engines": { + "node": ">=20.19" + }, "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/node", "repository": { @@ -17,11 +31,8 @@ "directory": "packages/node" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@2060.io/ffi-napi": "^4.0.9", @@ -37,7 +48,7 @@ "@types/node": "catalog:", "@types/ws": "catalog:", "nock": "catalog:", - "rimraf": "catalog:", + "typescript": "catalog:" } } diff --git a/packages/node/src/index.ts b/packages/node/src/index.ts index 7d928f7517..9dfc535dd2 100644 --- a/packages/node/src/index.ts +++ b/packages/node/src/index.ts @@ -9,7 +9,7 @@ import { DidCommWsInboundTransport } from './transport/DidCommWsInboundTransport export { NodeInMemoryKeyManagementStorage } from './kms/NodeInMemoryKeyManagementStorage' export { NodeKeyManagementService } from './kms/NodeKeyManagementService' -export { NodeKeyManagementStorage } from './kms/NodeKeyManagementStorage' +export type { NodeKeyManagementStorage } from './kms/NodeKeyManagementStorage' const agentDependencies: AgentDependencies = { FileSystem: NodeFileSystem, diff --git a/packages/node/src/kms/__tests__/NodeKeyManagementService.test.ts b/packages/node/src/kms/__tests__/NodeKeyManagementService.test.ts index cbe819fb1f..35deb41f78 100644 --- a/packages/node/src/kms/__tests__/NodeKeyManagementService.test.ts +++ b/packages/node/src/kms/__tests__/NodeKeyManagementService.test.ts @@ -1852,7 +1852,6 @@ describe('NodeKeyManagementService', () => { await expect( service.importKey(agentContext, { privateJwk: { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-expect-error kty: 'something', }, diff --git a/packages/node/src/kms/crypto/verify.ts b/packages/node/src/kms/crypto/verify.ts index 7db5b32ef5..1776a1adff 100644 --- a/packages/node/src/kms/crypto/verify.ts +++ b/packages/node/src/kms/crypto/verify.ts @@ -1,4 +1,4 @@ -import { CanBePromise, Kms } from '@credo-ts/core' +import { type CanBePromise, Kms } from '@credo-ts/core' import { Buffer } from 'node:buffer' import { @@ -49,7 +49,6 @@ export function performVerify( .update(data) .digest() - // eslint-disable-next-line no-restricted-globals return timingSafeEqual(expectedHmac, Buffer.from(signature)) } default: diff --git a/packages/node/src/transport/DidCommWsInboundTransport.ts b/packages/node/src/transport/DidCommWsInboundTransport.ts index 1fb0fef7e2..21dd1e028c 100644 --- a/packages/node/src/transport/DidCommWsInboundTransport.ts +++ b/packages/node/src/transport/DidCommWsInboundTransport.ts @@ -8,17 +8,20 @@ import type { import { CredoError, EventEmitter, utils } from '@credo-ts/core' import { DidCommEventTypes, DidCommModuleConfig, DidCommTransportService } from '@credo-ts/didcomm' -import WebSocket, { Server } from 'ws' +import WebSocket, { WebSocketServer } from 'ws' export class DidCommWsInboundTransport implements DidCommInboundTransport { - private socketServer: Server + private socketServer: WebSocketServer private logger!: Logger // We're using a `socketId` just for the prevention of calling the connection handler twice. private socketIds: Record = {} - public constructor({ server, port }: { server: Server; port?: undefined } | { server?: undefined; port: number }) { - this.socketServer = server ?? new Server({ port }) + public constructor({ + server, + port, + }: { server: WebSocketServer; port?: undefined } | { server?: undefined; port: number }) { + this.socketServer = server ?? new WebSocketServer({ port }) } public async start(agentContext: AgentContext) { diff --git a/packages/node/tests/setup.ts b/packages/node/tests/setup.ts deleted file mode 100644 index 89b8a1af96..0000000000 --- a/packages/node/tests/setup.ts +++ /dev/null @@ -1 +0,0 @@ -jest.setTimeout(15000) diff --git a/packages/node/tsconfig.build.json b/packages/node/tsconfig.build.json index 5f125502b3..075dc173ba 100644 --- a/packages/node/tsconfig.build.json +++ b/packages/node/tsconfig.build.json @@ -1,10 +1,6 @@ { "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build", "types": ["node"] - }, - - "include": ["src/**/*"] + } } diff --git a/packages/node/tsconfig.json b/packages/node/tsconfig.json deleted file mode 100644 index 89375a3930..0000000000 --- a/packages/node/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["node", "jest"] - } -} diff --git a/packages/node/tsdown.config.ts b/packages/node/tsdown.config.ts new file mode 100644 index 0000000000..ae8485814f --- /dev/null +++ b/packages/node/tsdown.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig( + config.map((e) => ({ + ...e, + dts: { + ...e.dts, + // We have overridden the tsconfig for node module + tsconfig: 'tsconfig.build.json', + }, + })) +) diff --git a/packages/openid4vc/jest.config.ts b/packages/openid4vc/jest.config.ts deleted file mode 100644 index 8641cf4d67..0000000000 --- a/packages/openid4vc/jest.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/openid4vc/package.json b/packages/openid4vc/package.json index c971c96aff..d0b73a113b 100644 --- a/packages/openid4vc/package.json +++ b/packages/openid4vc/package.json @@ -1,14 +1,29 @@ { "name": "@credo-ts/openid4vc", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } + }, + "react-native": { + "./build/shared/router/express.mjs": "./build/shared/router/express.native.mjs", + "./build/shared/router/express.js": "./build/shared/router/express.native.js" }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/openid4vc", "repository": { @@ -17,11 +32,8 @@ "directory": "packages/openid4vc" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/core": "workspace:*", @@ -31,14 +43,13 @@ "@openid4vc/openid4vci": "0.3.0-alpha-20251001121503", "@openid4vc/oauth2": "0.3.0-alpha-20251001121503", "@openid4vc/openid4vp": "0.3.0-alpha-20251001121503", - "@openid4vc/utils": "0.3.0-alpha-20251001121503" + "@openid4vc/utils": "0.3.0-alpha-20251001121503", + "@types/express": "catalog:", + "express": "catalog:" }, "devDependencies": { "@credo-ts/tenants": "workspace:*", - "@types/express": "catalog:", - "express": "catalog:", "nock": "catalog:", - "rimraf": "catalog:", "typescript": "catalog:" } } diff --git a/packages/openid4vc/src/OpenId4VcApi.ts b/packages/openid4vc/src/OpenId4VcApi.ts index 921a0e0ca6..81a64810f4 100644 --- a/packages/openid4vc/src/OpenId4VcApi.ts +++ b/packages/openid4vc/src/OpenId4VcApi.ts @@ -2,8 +2,8 @@ import { AgentContext, injectable } from '@credo-ts/core' import { OpenId4VcModuleConfig } from './OpenId4VcModuleConfig' import { OpenId4VcHolderApi } from './openid4vc-holder' -import { OpenId4VcIssuerApi, OpenId4VcIssuerModuleConfigOptions } from './openid4vc-issuer' -import { OpenId4VcVerifierApi, OpenId4VcVerifierModuleConfigOptions } from './openid4vc-verifier' +import { OpenId4VcIssuerApi, type OpenId4VcIssuerModuleConfigOptions } from './openid4vc-issuer' +import { OpenId4VcVerifierApi, type OpenId4VcVerifierModuleConfigOptions } from './openid4vc-verifier' /** * @public diff --git a/packages/openid4vc/src/OpenId4VcModule.ts b/packages/openid4vc/src/OpenId4VcModule.ts index 3ec0a254c7..059317f616 100644 --- a/packages/openid4vc/src/OpenId4VcModule.ts +++ b/packages/openid4vc/src/OpenId4VcModule.ts @@ -3,10 +3,10 @@ import type { AgentContext, DependencyManager, Module } from '@credo-ts/core' import { AgentConfig } from '@credo-ts/core' import { setGlobalConfig } from '@openid4vc/oauth2' import { OpenId4VcApi } from './OpenId4VcApi' -import { OpenId4VcModuleConfig, OpenId4VcModuleConfigOptions } from './OpenId4VcModuleConfig' +import { OpenId4VcModuleConfig, type OpenId4VcModuleConfigOptions } from './OpenId4VcModuleConfig' import { OpenId4VcHolderModule } from './openid4vc-holder' -import { OpenId4VcIssuerModule, OpenId4VcIssuerModuleConfigOptions } from './openid4vc-issuer' -import { OpenId4VcVerifierModule, OpenId4VcVerifierModuleConfigOptions } from './openid4vc-verifier' +import { OpenId4VcIssuerModule, type OpenId4VcIssuerModuleConfigOptions } from './openid4vc-issuer' +import { OpenId4VcVerifierModule, type OpenId4VcVerifierModuleConfigOptions } from './openid4vc-verifier' /** * @public diff --git a/packages/openid4vc/src/OpenId4VcModuleConfig.ts b/packages/openid4vc/src/OpenId4VcModuleConfig.ts index e13d755517..aa5525da80 100644 --- a/packages/openid4vc/src/OpenId4VcModuleConfig.ts +++ b/packages/openid4vc/src/OpenId4VcModuleConfig.ts @@ -1,7 +1,7 @@ import type { Router } from 'express' -import { OpenId4VcIssuerModuleConfig, OpenId4VcIssuerModuleConfigOptions } from './openid4vc-issuer' -import { OpenId4VcVerifierModuleConfig, OpenId4VcVerifierModuleConfigOptions } from './openid4vc-verifier' +import { OpenId4VcIssuerModuleConfig, type OpenId4VcIssuerModuleConfigOptions } from './openid4vc-issuer' +import { OpenId4VcVerifierModuleConfig, type OpenId4VcVerifierModuleConfigOptions } from './openid4vc-verifier' export type OpenId4VcModuleConfigOptions< IssuerConfig extends OpenId4VcIssuerModuleConfigOptions | undefined | null = null, diff --git a/packages/openid4vc/src/openid4vc-holder/OpenId4VcHolderApi.ts b/packages/openid4vc/src/openid4vc-holder/OpenId4VcHolderApi.ts index 3a4eaac33c..951fd6481b 100644 --- a/packages/openid4vc/src/openid4vc-holder/OpenId4VcHolderApi.ts +++ b/packages/openid4vc/src/openid4vc-holder/OpenId4VcHolderApi.ts @@ -16,14 +16,14 @@ import type { import { AgentContext, - DcqlQueryResult, + type DcqlQueryResult, DcqlService, - DifPexCredentialsForRequest, + type DifPexCredentialsForRequest, DifPresentationExchangeService, injectable, } from '@credo-ts/core' -import { OpenId4VciMetadata } from '../shared' +import type { OpenId4VciMetadata } from '../shared' import { OpenId4VciHolderService } from './OpenId4VciHolderService' import { OpenId4VpHolderService } from './OpenId4vpHolderService' diff --git a/packages/openid4vc/src/openid4vc-holder/OpenId4VciHolderService.ts b/packages/openid4vc/src/openid4vc-holder/OpenId4VciHolderService.ts index cdc75b31fe..0b5f273376 100644 --- a/packages/openid4vc/src/openid4vc-holder/OpenId4VciHolderService.ts +++ b/packages/openid4vc/src/openid4vc-holder/OpenId4VciHolderService.ts @@ -3,7 +3,7 @@ import { CredoError, InjectionSymbols, Kms, - Logger, + type Logger, Mdoc, MdocApi, SdJwtVcApi, @@ -16,10 +16,11 @@ import { parseDid, } from '@credo-ts/core' import { - CallbackContext, - Jwk, + type AccessTokenResponse, + type CallbackContext, + type Jwk, Oauth2Client, - RequestDpopOptions, + type RequestDpopOptions, authorizationCodeGrantIdentifier, clientAuthenticationAnonymous, clientAuthenticationClientAttestationJwt, @@ -29,14 +30,14 @@ import { refreshTokenGrantIdentifier, } from '@openid4vc/oauth2' import { - DeferredCredentialResponse, + type DeferredCredentialResponse, determineAuthorizationServerForCredentialOffer, parseKeyAttestationJwt, } from '@openid4vc/openid4vci' import { AuthorizationFlow, - CredentialResponse, - IssuerMetadataResult, + type CredentialResponse, + type IssuerMetadataResult, Openid4vciClient, Openid4vciDraftVersion, Openid4vciRetrieveCredentialsError, @@ -282,7 +283,10 @@ export class OpenId4VciHolderService { public async retrieveAuthorizationCodeUsingPresentation( agentContext: AgentContext, options: OpenId4VciRetrieveAuthorizationCodeUsingPresentationOptions - ) { + ): Promise<{ + authorizationCode: string + dpop?: OpenId4VciDpopRequestOptions + }> { const client = this.getClient(agentContext, { clientAttestation: options.walletAttestationJwt, }) @@ -314,7 +318,14 @@ export class OpenId4VciHolderService { } } - public async requestAccessToken(agentContext: AgentContext, options: OpenId4VciTokenRequestOptions) { + public async requestAccessToken( + agentContext: AgentContext, + options: OpenId4VciTokenRequestOptions + ): Promise<{ + authorizationServer: string + accessTokenResponse: AccessTokenResponse + dpop?: OpenId4VciDpopRequestOptions + }> { const { metadata, credentialOfferPayload } = options.resolvedCredentialOffer const client = this.getClient(agentContext, { clientAttestation: options.walletAttestationJwt, @@ -376,7 +387,15 @@ export class OpenId4VciHolderService { } } - public async refreshAccessToken(agentContext: AgentContext, options: OpenId4VciTokenRefreshOptions) { + public async refreshAccessToken( + agentContext: AgentContext, + options: OpenId4VciTokenRefreshOptions + ): Promise< + // FIXME: export type in oid4vc library + Omit>, 'dpop'> & { + dpop?: OpenId4VciDpopRequestOptions + } + > { const oauth2Client = this.getOauth2Client(agentContext, { clientAttestation: options.walletAttestationJwt, clientId: options.clientId, @@ -423,7 +442,12 @@ export class OpenId4VciHolderService { dpop?: OpenId4VciDpopRequestOptions clientId?: string } - ) { + ): Promise<{ + credentials: OpenId4VciCredentialResponse[] + deferredCredentials: OpenId4VciDeferredCredentialResponse[] + dpop?: OpenId4VciDpopRequestOptions + cNonce?: string + }> { const { resolvedCredentialOffer, acceptCredentialOfferOptions } = options const { metadata, offeredCredentialConfigurations } = resolvedCredentialOffer const { @@ -583,7 +607,11 @@ export class OpenId4VciHolderService { public async retrieveDeferredCredentials( agentContext: AgentContext, options: OpenId4VciDeferredCredentialRequestOptions - ) { + ): Promise<{ + credentials: OpenId4VciCredentialResponse[] + deferredCredentials: OpenId4VciDeferredCredentialResponse[] + dpop?: OpenId4VciDpopRequestOptions + }> { const { issuerMetadata, transactionId, diff --git a/packages/openid4vc/src/openid4vc-holder/OpenId4vpHolderService.ts b/packages/openid4vc/src/openid4vc-holder/OpenId4vpHolderService.ts index 64b0f7de82..30375910d2 100644 --- a/packages/openid4vc/src/openid4vc-holder/OpenId4vpHolderService.ts +++ b/packages/openid4vc/src/openid4vc-holder/OpenId4vpHolderService.ts @@ -27,9 +27,9 @@ import { injectable, } from '@credo-ts/core' import { - Openid4vpAuthorizationResponse, + type Openid4vpAuthorizationResponse, Openid4vpClient, - VpToken, + type VpToken, extractEncryptionJwkFromJwks, getOpenid4vpClientId, isJarmResponseMode, @@ -38,8 +38,8 @@ import { parseTransactionData, } from '@openid4vc/openid4vp' -import { Jwk } from '@openid4vc/oauth2' -import { OpenId4VpVersion } from '../openid4vc-verifier' +import type { Jwk } from '@openid4vc/oauth2' +import type { OpenId4VpVersion } from '../openid4vc-verifier' import { getOid4vcCallbacks } from '../shared/callbacks' @injectable() diff --git a/packages/openid4vc/src/openid4vc-holder/OpenId4vpHolderServiceOptions.ts b/packages/openid4vc/src/openid4vc-holder/OpenId4vpHolderServiceOptions.ts index 99ccf14c18..29457d34a2 100644 --- a/packages/openid4vc/src/openid4vc-holder/OpenId4vpHolderServiceOptions.ts +++ b/packages/openid4vc/src/openid4vc-holder/OpenId4vpHolderServiceOptions.ts @@ -6,7 +6,7 @@ import type { DifPresentationExchangeDefinition, EncodedX509Certificate, } from '@credo-ts/core' -import { ResolvedOpenid4vpAuthorizationRequest } from '@openid4vc/openid4vp' +import type { ResolvedOpenid4vpAuthorizationRequest } from '@openid4vc/openid4vp' import type { OpenId4VpAuthorizationRequestPayload } from '../shared' // TODO: export from oid4vp diff --git a/packages/openid4vc/src/openid4vc-holder/__tests__/OpenId4VcHolderModule.test.ts b/packages/openid4vc/src/openid4vc-holder/__tests__/OpenId4VcHolderModule.test.ts index 0ecf7f4491..b073a1c5e8 100644 --- a/packages/openid4vc/src/openid4vc-holder/__tests__/OpenId4VcHolderModule.test.ts +++ b/packages/openid4vc/src/openid4vc-holder/__tests__/OpenId4VcHolderModule.test.ts @@ -5,10 +5,10 @@ import { OpenId4VciHolderService } from '../OpenId4VciHolderService' import { OpenId4VpHolderService } from '../OpenId4vpHolderService' const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), - resolve: jest.fn().mockReturnValue({ logger: { warn: jest.fn() } }), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), + resolve: vi.fn().mockReturnValue({ logger: { warn: vi.fn() } }), } as unknown as DependencyManager describe('OpenId4VcHolderModule', () => { diff --git a/packages/openid4vc/src/openid4vc-holder/__tests__/openid4vci-holder.test.ts b/packages/openid4vc/src/openid4vc-holder/__tests__/openid4vci-holder.test.ts index 6560418a45..591f1ba723 100644 --- a/packages/openid4vc/src/openid4vc-holder/__tests__/openid4vci-holder.test.ts +++ b/packages/openid4vc/src/openid4vc-holder/__tests__/openid4vci-holder.test.ts @@ -1,4 +1,5 @@ -import { KeyDidCreateOptions, Kms, SdJwtVc } from '@credo-ts/core' +import '@openwallet-foundation/askar-nodejs' +import { type KeyDidCreateOptions, Kms, type SdJwtVc } from '@credo-ts/core' import { Agent, DidKey, TypedArrayEncoder, W3cCredentialService, W3cJwtVerifiableCredential } from '@credo-ts/core' import nock, { cleanAll, enableNetConnect } from 'nock' @@ -105,9 +106,10 @@ describe('OpenId4VcHolder', () => { // The credential issued by mattr launchpad is expired, so we mock the verification... const w3cCredentialService = holder.dependencyManager.resolve(W3cCredentialService) - jest - .spyOn(w3cCredentialService, 'verifyCredential') - .mockImplementationOnce(async () => ({ isValid: true, validations: {} })) + vi.spyOn(w3cCredentialService, 'verifyCredential').mockImplementationOnce(async () => ({ + isValid: true, + validations: {}, + })) const credentialsResult = await holder.openid4vc.holder.requestCredentials({ resolvedCredentialOffer: resolved, diff --git a/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerService.ts b/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerService.ts index 852ab049ca..a103480a72 100644 --- a/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerService.ts +++ b/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerService.ts @@ -27,8 +27,8 @@ import { JwtPayload, Kms, MdocApi, - Query, - QueryOptions, + type Query, + type QueryOptions, SdJwtVcApi, TypedArrayEncoder, W3cCredentialService, @@ -38,11 +38,11 @@ import { utils, } from '@credo-ts/core' import { - AuthorizationServerMetadata, + type AuthorizationServerMetadata, HashAlgorithm, - Jwk, - JwtSignerJwk, - JwtSignerWithJwk, + type Jwk, + type JwtSignerJwk, + type JwtSignerWithJwk, Oauth2AuthorizationServer, Oauth2Client, Oauth2ErrorCodes, @@ -53,15 +53,15 @@ import { preAuthorizedCodeGrantIdentifier, } from '@openid4vc/oauth2' import { - CredentialConfigurationSupportedWithFormats, - CredentialConfigurationsSupportedWithFormats, - CredentialIssuerMetadata, - CredentialRequestFormatSpecific, - CredentialResponse, - DeferredCredentialResponse, + type CredentialConfigurationSupportedWithFormats, + type CredentialConfigurationsSupportedWithFormats, + type CredentialIssuerMetadata, + type CredentialRequestFormatSpecific, + type CredentialResponse, + type DeferredCredentialResponse, Openid4vciDraftVersion, Openid4vciIssuer, - ParseCredentialRequestReturn, + type ParseCredentialRequestReturn, extractScopesForCredentialConfigurationIds, getCredentialConfigurationsMatchingRequestFormat, } from '@openid4vc/openid4vci' @@ -79,7 +79,7 @@ import { import { OpenId4VcVerifierApi } from '../openid4vc-verifier' import { OpenId4VcIssuanceSessionState } from './OpenId4VcIssuanceSessionState' -import { OpenId4VcIssuanceSessionStateChangedEvent, OpenId4VcIssuerEvents } from './OpenId4VcIssuerEvents' +import { type OpenId4VcIssuanceSessionStateChangedEvent, OpenId4VcIssuerEvents } from './OpenId4VcIssuerEvents' import { OpenId4VcIssuerModuleConfig } from './OpenId4VcIssuerModuleConfig' import { OpenId4VcIssuanceSessionRecord, diff --git a/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerServiceOptions.ts b/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerServiceOptions.ts index 1160e975c0..c2d1f2333e 100644 --- a/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerServiceOptions.ts +++ b/packages/openid4vc/src/openid4vc-issuer/OpenId4VcIssuerServiceOptions.ts @@ -27,7 +27,7 @@ import type { VerifiedOpenId4VcCredentialHolderBinding, } from '../shared' import type { OpenId4VciAuthorizationServerConfig } from '../shared/models/OpenId4VciAuthorizationServerConfig' -import { OpenId4VcIssuanceSessionRecord, OpenId4VcIssuerRecordProps } from './repository' +import { OpenId4VcIssuanceSessionRecord, type OpenId4VcIssuerRecordProps } from './repository' export interface OpenId4VciCredentialRequestAuthorization { authorizationServer: string diff --git a/packages/openid4vc/src/openid4vc-issuer/__tests__/OpenId4VcIssuerModule.test.ts b/packages/openid4vc/src/openid4vc-issuer/__tests__/OpenId4VcIssuerModule.test.ts index 2cd330f315..b2fba5cf48 100644 --- a/packages/openid4vc/src/openid4vc-issuer/__tests__/OpenId4VcIssuerModule.test.ts +++ b/packages/openid4vc/src/openid4vc-issuer/__tests__/OpenId4VcIssuerModule.test.ts @@ -10,10 +10,10 @@ import { OpenId4VcIssuanceSessionRepository } from '../repository' import { OpenId4VcIssuerRepository } from '../repository/OpenId4VcIssuerRepository' const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), - resolve: jest.fn().mockReturnValue({ logger: { warn: jest.fn() } }), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), + resolve: vi.fn().mockReturnValue({ logger: { warn: vi.fn() } }), } as unknown as DependencyManager const agentContext = getAgentContext() diff --git a/packages/openid4vc/src/openid4vc-issuer/__tests__/openid4vc-issuer.test.ts b/packages/openid4vc/src/openid4vc-issuer/__tests__/openid4vc-issuer.test.ts index 872322060b..abc9c606d8 100644 --- a/packages/openid4vc/src/openid4vc-issuer/__tests__/openid4vc-issuer.test.ts +++ b/packages/openid4vc/src/openid4vc-issuer/__tests__/openid4vc-issuer.test.ts @@ -1,3 +1,4 @@ +import '@openwallet-foundation/askar-nodejs' import type { AgentContext, KeyDidCreateOptions, diff --git a/packages/openid4vc/src/openid4vc-issuer/index.ts b/packages/openid4vc/src/openid4vc-issuer/index.ts index e7a2c98444..882b299fe1 100644 --- a/packages/openid4vc/src/openid4vc-issuer/index.ts +++ b/packages/openid4vc/src/openid4vc-issuer/index.ts @@ -7,13 +7,13 @@ export * from './OpenId4VcIssuerEvents' export * from './OpenId4VcIssuanceSessionState' export { OpenId4VcIssuerRecord, - OpenId4VcIssuerRecordProps, - OpenId4VcIssuerRecordTags, + type OpenId4VcIssuerRecordProps, + type OpenId4VcIssuerRecordTags, OpenId4VcIssuanceSessionRecord, - OpenId4VcIssuanceSessionDpop, - OpenId4VcIssuanceSessionWalletAttestation, - OpenId4VcIssuanceSessionAuthorization, - OpenId4VcIssuanceSessionPresentation, - OpenId4VcIssuanceSessionPkce, - OpenId4VcIssuanceSessionRecordTransaction, + type OpenId4VcIssuanceSessionDpop, + type OpenId4VcIssuanceSessionWalletAttestation, + type OpenId4VcIssuanceSessionAuthorization, + type OpenId4VcIssuanceSessionPresentation, + type OpenId4VcIssuanceSessionPkce, + type OpenId4VcIssuanceSessionRecordTransaction, } from './repository' diff --git a/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.ts b/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.ts index e80fd6549b..5e1e569f61 100644 --- a/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.ts +++ b/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRecord.ts @@ -5,7 +5,7 @@ import { BaseRecord, CredoError, DateTransformer, isJsonObject, utils } from '@c import { PkceCodeChallengeMethod } from '@openid4vc/oauth2' import { Transform, TransformationType } from 'class-transformer' import { OpenId4VcIssuanceSessionState } from '../OpenId4VcIssuanceSessionState' -import { OpenId4VciVersion } from '../OpenId4VcIssuerServiceOptions' +import type { OpenId4VciVersion } from '../OpenId4VcIssuerServiceOptions' export type OpenId4VcIssuanceSessionRecordTags = RecordTags diff --git a/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.ts b/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.ts index 4439da7afb..0b28743c12 100644 --- a/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.ts +++ b/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuanceSessionRepository.ts @@ -1,4 +1,4 @@ -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { OpenId4VcIssuanceSessionRecord } from './OpenId4VcIssuanceSessionRecord' diff --git a/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuerRecord.ts b/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuerRecord.ts index cdd2d4419f..d79a57949d 100644 --- a/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuerRecord.ts +++ b/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuerRecord.ts @@ -1,4 +1,4 @@ -import { Kms, RecordTags, TagsBase } from '@credo-ts/core' +import { Kms, type RecordTags, type TagsBase } from '@credo-ts/core' import type { OpenId4VciAuthorizationServerConfig, OpenId4VciCredentialConfigurationsSupportedWithFormats, diff --git a/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuerRepository.ts b/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuerRepository.ts index 711da94224..2b4416ec8c 100644 --- a/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuerRepository.ts +++ b/packages/openid4vc/src/openid4vc-issuer/repository/OpenId4VcIssuerRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { OpenId4VcIssuerRecord } from './OpenId4VcIssuerRecord' diff --git a/packages/openid4vc/src/openid4vc-issuer/router/accessTokenEndpoint.ts b/packages/openid4vc/src/openid4vc-issuer/router/accessTokenEndpoint.ts index cd23efae68..c6ac65dd82 100644 --- a/packages/openid4vc/src/openid4vc-issuer/router/accessTokenEndpoint.ts +++ b/packages/openid4vc/src/openid4vc-issuer/router/accessTokenEndpoint.ts @@ -3,7 +3,7 @@ import type { NextFunction, Response, Router } from 'express' import type { OpenId4VcIssuerModuleConfig } from '../OpenId4VcIssuerModuleConfig' import type { OpenId4VcIssuanceRequest } from './requestContext' -import { CredoError, Query, joinUriParts, utils } from '@credo-ts/core' +import { CredoError, type Query, joinUriParts, utils } from '@credo-ts/core' import { Oauth2ErrorCodes, Oauth2ServerErrorResponseError, diff --git a/packages/openid4vc/src/openid4vc-issuer/router/credentialEndpoint.ts b/packages/openid4vc/src/openid4vc-issuer/router/credentialEndpoint.ts index aab4fe5a5b..6894df4390 100644 --- a/packages/openid4vc/src/openid4vc-issuer/router/credentialEndpoint.ts +++ b/packages/openid4vc/src/openid4vc-issuer/router/credentialEndpoint.ts @@ -6,7 +6,7 @@ import type { OpenId4VcIssuanceRequest } from './requestContext' import { joinUriParts, utils } from '@credo-ts/core' import { Oauth2ErrorCodes, Oauth2ResourceUnauthorizedError, Oauth2ServerErrorResponseError } from '@openid4vc/oauth2' import { - CredentialConfigurationsSupportedWithFormats, + type CredentialConfigurationsSupportedWithFormats, Openid4vciDraftVersion, getCredentialConfigurationsMatchingRequestFormat, } from '@openid4vc/openid4vci' diff --git a/packages/openid4vc/src/openid4vc-issuer/router/index.ts b/packages/openid4vc/src/openid4vc-issuer/router/index.ts index 1c2bd59adf..a2c301d7b1 100644 --- a/packages/openid4vc/src/openid4vc-issuer/router/index.ts +++ b/packages/openid4vc/src/openid4vc-issuer/router/index.ts @@ -3,7 +3,7 @@ export { configureCredentialEndpoint } from './credentialEndpoint' export { configureIssuerMetadataEndpoint } from './issuerMetadataEndpoint' export { configureOAuthAuthorizationServerMetadataEndpoint } from './authorizationServerMetadataEndpoint' export { configureCredentialOfferEndpoint } from './credentialOfferEndpoint' -export { OpenId4VcIssuanceRequest } from './requestContext' +export type { OpenId4VcIssuanceRequest } from './requestContext' export { configureJwksEndpoint } from './jwksEndpoint' export { configureNonceEndpoint } from './nonceEndpoint' export { configureAuthorizationChallengeEndpoint } from './authorizationChallengeEndpoint' diff --git a/packages/openid4vc/src/openid4vc-verifier/OpenId4VpVerifierService.ts b/packages/openid4vc/src/openid4vc-verifier/OpenId4VpVerifierService.ts index 1f7dd07549..e5a3e7f955 100644 --- a/packages/openid4vc/src/openid4vc-verifier/OpenId4VpVerifierService.ts +++ b/packages/openid4vc/src/openid4vc-verifier/OpenId4VpVerifierService.ts @@ -1,17 +1,17 @@ import { AgentContext, ClaimFormat, - DcqlEncodedPresentations, - DcqlQuery, - DifPresentationExchangeDefinition, - DifPresentationExchangeSubmission, - HashName, + type DcqlEncodedPresentations, + type DcqlQuery, + type DifPresentationExchangeDefinition, + type DifPresentationExchangeSubmission, + type HashName, Kms, - MdocSessionTranscriptOptions, - MdocSupportedSignatureAlgorithm, - Query, - QueryOptions, - VerifiablePresentation, + type MdocSessionTranscriptOptions, + type MdocSupportedSignatureAlgorithm, + type Query, + type QueryOptions, + type VerifiablePresentation, W3cV2CredentialService, W3cV2SdJwtVerifiablePresentation, } from '@credo-ts/core' @@ -24,7 +24,7 @@ import { JsonEncoder, JsonTransformer, Jwt, - Logger, + type Logger, MdocDeviceResponse, SdJwtVcApi, SignatureSuiteRegistry, @@ -44,22 +44,22 @@ import { joinUriParts, utils, } from '@credo-ts/core' -import { NonEmptyArray, mapNonEmptyArray } from '@credo-ts/core' -import { Jwk, Oauth2ErrorCodes, Oauth2ServerErrorResponseError } from '@openid4vc/oauth2' +import { type NonEmptyArray, mapNonEmptyArray } from '@credo-ts/core' +import { type Jwk, Oauth2ErrorCodes, Oauth2ServerErrorResponseError } from '@openid4vc/oauth2' import { - ClientIdPrefix, - ClientMetadata, + type ClientIdPrefix, + type ClientMetadata, JarmMode, Openid4vpVerifier, - ParsedOpenid4vpAuthorizationResponse, - TransactionDataHashesCredentials, + type ParsedOpenid4vpAuthorizationResponse, + type TransactionDataHashesCredentials, getOpenid4vpClientId, isJarmResponseMode, isOpenid4vpAuthorizationRequestDcApi, zOpenid4vpAuthorizationResponse, } from '@openid4vc/openid4vp' import { getOid4vcCallbacks } from '../shared/callbacks' -import { OpenId4VpAuthorizationRequestPayload } from '../shared/index' +import type { OpenId4VpAuthorizationRequestPayload } from '../shared/index' import { storeActorIdForContextCorrelationId } from '../shared/router' import { getSdJwtVcTransactionDataHashes } from '../shared/transactionData' import { @@ -69,7 +69,7 @@ import { requestSignerToJwtIssuer, } from '../shared/utils' import { OpenId4VcVerificationSessionState } from './OpenId4VcVerificationSessionState' -import { OpenId4VcVerificationSessionStateChangedEvent, OpenId4VcVerifierEvents } from './OpenId4VcVerifierEvents' +import { type OpenId4VcVerificationSessionStateChangedEvent, OpenId4VcVerifierEvents } from './OpenId4VcVerifierEvents' import { OpenId4VcVerifierModuleConfig } from './OpenId4VcVerifierModuleConfig' import type { OpenId4VpCreateAuthorizationRequestOptions, diff --git a/packages/openid4vc/src/openid4vc-verifier/OpenId4VpVerifierServiceOptions.ts b/packages/openid4vc/src/openid4vc-verifier/OpenId4VpVerifierServiceOptions.ts index 000818ebfa..e96cf80b59 100644 --- a/packages/openid4vc/src/openid4vc-verifier/OpenId4VpVerifierServiceOptions.ts +++ b/packages/openid4vc/src/openid4vc-verifier/OpenId4VpVerifierServiceOptions.ts @@ -14,7 +14,7 @@ import type { VerifierAttestations, createOpenid4vpAuthorizationRequest, } from '@openid4vc/openid4vp' -import { NonEmptyArray } from '@openid4vc/utils' +import type { NonEmptyArray } from '@openid4vc/utils' import type { OpenId4VcIssuerX5c, OpenId4VcJwtIssuerDid } from '../shared' import type { OpenId4VcVerificationSessionRecord, OpenId4VcVerifierRecordProps } from './repository' diff --git a/packages/openid4vc/src/openid4vc-verifier/__tests__/OpenId4VcVerifierModule.test.ts b/packages/openid4vc/src/openid4vc-verifier/__tests__/OpenId4VcVerifierModule.test.ts index e0af4c7b8c..46e34cff8c 100644 --- a/packages/openid4vc/src/openid4vc-verifier/__tests__/OpenId4VcVerifierModule.test.ts +++ b/packages/openid4vc/src/openid4vc-verifier/__tests__/OpenId4VcVerifierModule.test.ts @@ -9,10 +9,10 @@ import { OpenId4VpVerifierService } from '../OpenId4VpVerifierService' import { OpenId4VcVerifierRepository } from '../repository' const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), - resolve: jest.fn().mockReturnValue({ logger: { warn: jest.fn() } }), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), + resolve: vi.fn().mockReturnValue({ logger: { warn: vi.fn() } }), } as unknown as DependencyManager describe('OpenId4VcVerifierModule', () => { diff --git a/packages/openid4vc/src/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.ts b/packages/openid4vc/src/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.ts index 43900394c6..dcb82f4595 100644 --- a/packages/openid4vc/src/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.ts +++ b/packages/openid4vc/src/openid4vc-verifier/repository/OpenId4VcVerificationSessionRecord.ts @@ -1,8 +1,8 @@ import type { OpenId4VpAuthorizationRequestPayload, OpenId4VpAuthorizationResponsePayload } from '../../shared/models' import type { OpenId4VcVerificationSessionState } from '../OpenId4VcVerificationSessionState' -import { BaseRecord, CredoError, DateTransformer, Jwt, RecordTags, TagsBase, utils } from '@credo-ts/core' -import { OpenId4VpVersion } from '../OpenId4VpVerifierServiceOptions' +import { BaseRecord, CredoError, DateTransformer, Jwt, type RecordTags, type TagsBase, utils } from '@credo-ts/core' +import type { OpenId4VpVersion } from '../OpenId4VpVerifierServiceOptions' export type OpenId4VcVerificationSessionRecordTags = RecordTags diff --git a/packages/openid4vc/src/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.ts b/packages/openid4vc/src/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.ts index 6770247585..c673454476 100644 --- a/packages/openid4vc/src/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.ts +++ b/packages/openid4vc/src/openid4vc-verifier/repository/OpenId4VcVerificationSessionRepository.ts @@ -1,4 +1,4 @@ -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { OpenId4VcVerificationSessionRecord } from './OpenId4VcVerificationSessionRecord' diff --git a/packages/openid4vc/src/openid4vc-verifier/repository/OpenId4VcVerifierRepository.ts b/packages/openid4vc/src/openid4vc-verifier/repository/OpenId4VcVerifierRepository.ts index 1e9747d113..2d164e8e42 100644 --- a/packages/openid4vc/src/openid4vc-verifier/repository/OpenId4VcVerifierRepository.ts +++ b/packages/openid4vc/src/openid4vc-verifier/repository/OpenId4VcVerifierRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { OpenId4VcVerifierRecord } from './OpenId4VcVerifierRecord' diff --git a/packages/openid4vc/src/openid4vc-verifier/router/index.ts b/packages/openid4vc/src/openid4vc-verifier/router/index.ts index 8242556be4..2dc5df4080 100644 --- a/packages/openid4vc/src/openid4vc-verifier/router/index.ts +++ b/packages/openid4vc/src/openid4vc-verifier/router/index.ts @@ -1,2 +1,2 @@ export { configureAuthorizationEndpoint } from './authorizationEndpoint' -export { OpenId4VcVerificationRequest } from './requestContext' +export type { OpenId4VcVerificationRequest } from './requestContext' diff --git a/packages/openid4vc/src/shared/callbacks.ts b/packages/openid4vc/src/shared/callbacks.ts index 41d12b40e7..3cb98d9c08 100644 --- a/packages/openid4vc/src/shared/callbacks.ts +++ b/packages/openid4vc/src/shared/callbacks.ts @@ -1,4 +1,4 @@ -import { AgentContext, JwsSignerWithJwk, Kms } from '@credo-ts/core' +import { AgentContext, type JwsSignerWithJwk, Kms } from '@credo-ts/core' import type { CallbackContext, ClientAuthenticationCallback, diff --git a/packages/openid4vc/src/shared/issuerMetadataUtils.ts b/packages/openid4vc/src/shared/issuerMetadataUtils.ts index 80608f2d33..484c7063ea 100644 --- a/packages/openid4vc/src/shared/issuerMetadataUtils.ts +++ b/packages/openid4vc/src/shared/issuerMetadataUtils.ts @@ -3,7 +3,7 @@ import type { OpenId4VciCredentialConfigurationsSupportedWithFormats, } from './models' -import { type CredentialConfigurationsSupported } from '@openid4vc/openid4vci' +import type { CredentialConfigurationsSupported } from '@openid4vc/openid4vci' /** * Returns all entries from the credential offer with the associated metadata resolved. diff --git a/packages/openid4vc/src/shared/models/index.ts b/packages/openid4vc/src/shared/models/index.ts index 957340686e..3fea4b3c85 100644 --- a/packages/openid4vc/src/shared/models/index.ts +++ b/packages/openid4vc/src/shared/models/index.ts @@ -21,7 +21,7 @@ import type { } from '@openid4vc/openid4vp' export { authorizationCodeGrantIdentifier, preAuthorizedCodeGrantIdentifier } from '@openid4vc/oauth2' -export { Openid4vpAuthorizationRequest } from '@openid4vc/openid4vp' +export type { Openid4vpAuthorizationRequest } from '@openid4vc/openid4vp' export type OpenId4VciCredentialConfigurationSupportedWithFormats = CredentialConfigurationSupportedWithFormats export type OpenId4VciCredentialConfigurationSupported = CredentialConfigurationSupported diff --git a/packages/openid4vc/src/shared/router/express.ts b/packages/openid4vc/src/shared/router/express.ts index 9fc0c90a91..1ec10b1d99 100644 --- a/packages/openid4vc/src/shared/router/express.ts +++ b/packages/openid4vc/src/shared/router/express.ts @@ -1,11 +1,6 @@ -import type { default as Express } from 'express' +import express from 'express' +// In React Native the express.native.ts file will be used which will throw when actuall called. export function importExpress() { - try { - // NOTE: 'express' is added as a peer-dependency, and is required when using this module - const express = require('express') as typeof Express - return express - } catch (_error) { - throw new Error('Express must be installed as a peer dependency') - } + return express } diff --git a/packages/openid4vc/src/shared/transactionData.ts b/packages/openid4vc/src/shared/transactionData.ts index 3a09165fba..a5e6152416 100644 --- a/packages/openid4vc/src/shared/transactionData.ts +++ b/packages/openid4vc/src/shared/transactionData.ts @@ -1,4 +1,4 @@ -import { CredoError, SdJwtVc } from '@credo-ts/core' +import { CredoError, type SdJwtVc } from '@credo-ts/core' export function getSdJwtVcTransactionDataHashes(sdJwtVc: SdJwtVc) { if (!sdJwtVc.kbJwt) { diff --git a/packages/openid4vc/src/shared/utils.ts b/packages/openid4vc/src/shared/utils.ts index da112688a1..86e1c2d162 100644 --- a/packages/openid4vc/src/shared/utils.ts +++ b/packages/openid4vc/src/shared/utils.ts @@ -1,4 +1,4 @@ -import { AgentContext, ClaimFormat, DcqlQuery, DidPurpose, Kms } from '@credo-ts/core' +import { AgentContext, ClaimFormat, type DcqlQuery, type DidPurpose, Kms } from '@credo-ts/core' import type { Jwk, JwtSigner, JwtSignerX5c } from '@openid4vc/oauth2' import type { OpenId4VcJwtIssuer } from './models' diff --git a/packages/openid4vc/tests/openid4vc-batch-issuance.e2e.test.ts b/packages/openid4vc/tests/openid4vc-batch-issuance.e2e.test.ts index 223f8addb4..dfb5eb0972 100644 --- a/packages/openid4vc/tests/openid4vc-batch-issuance.e2e.test.ts +++ b/packages/openid4vc/tests/openid4vc-batch-issuance.e2e.test.ts @@ -7,7 +7,7 @@ import express, { type Express } from 'express' import { setupNockToExpress } from '../../../tests/nockToExpress' import { OpenId4VcIssuanceSessionState, - OpenId4VcIssuerModuleConfigOptions, + type OpenId4VcIssuerModuleConfigOptions, OpenId4VcModule, OpenId4VciCredentialFormatProfile, } from '../src' diff --git a/packages/openid4vc/tests/openid4vc-presentation-during-issuance.e2e.test.ts b/packages/openid4vc/tests/openid4vc-presentation-during-issuance.e2e.test.ts index 3598bd20ab..4d737d1733 100644 --- a/packages/openid4vc/tests/openid4vc-presentation-during-issuance.e2e.test.ts +++ b/packages/openid4vc/tests/openid4vc-presentation-during-issuance.e2e.test.ts @@ -1,10 +1,10 @@ import type { DcqlQuery, DifPresentationExchangeDefinitionV2, SdJwtVc, SdJwtVcIssuer } from '@credo-ts/core' import { - OpenId4VcIssuerModuleConfigOptions, + type OpenId4VcIssuerModuleConfigOptions, OpenId4VcModule, - OpenId4VcVerifierModuleConfigOptions, - OpenId4VciGetVerificationSessionForIssuanceSessionAuthorization, - OpenId4VciSignSdJwtCredentials, + type OpenId4VcVerifierModuleConfigOptions, + type OpenId4VciGetVerificationSessionForIssuanceSessionAuthorization, + type OpenId4VciSignSdJwtCredentials, } from '../src' import type { OpenId4VciCredentialBindingResolver } from '../src/openid4vc-holder' import type { AgentType } from './utils' diff --git a/packages/openid4vc/tests/openid4vc-wallet-key-attestation.e2e.test.ts b/packages/openid4vc/tests/openid4vc-wallet-key-attestation.e2e.test.ts index bfba09329c..d590d3d93e 100644 --- a/packages/openid4vc/tests/openid4vc-wallet-key-attestation.e2e.test.ts +++ b/packages/openid4vc/tests/openid4vc-wallet-key-attestation.e2e.test.ts @@ -6,15 +6,15 @@ import express, { type Express } from 'express' import { setupNockToExpress } from '../../../tests/nockToExpress' import { OpenId4VcIssuanceSessionState, - OpenId4VcIssuerModuleConfigOptions, + type OpenId4VcIssuerModuleConfigOptions, OpenId4VcIssuerRecord, OpenId4VcModule, - OpenId4VcVerifierModuleConfigOptions, - OpenId4VciCredentialConfigurationSupportedWithFormats, + type OpenId4VcVerifierModuleConfigOptions, + type OpenId4VciCredentialConfigurationSupportedWithFormats, OpenId4VciCredentialFormatProfile, } from '../src' -import { Jwk } from '@openid4vc/oauth2' +import type { Jwk } from '@openid4vc/oauth2' import { AuthorizationFlow, Openid4vciWalletProvider } from '@openid4vc/openid4vci' import { InMemoryWalletModule } from '../../../tests/InMemoryWalletModule' import { getOid4vcCallbacks } from '../src/shared/callbacks' diff --git a/packages/openid4vc/tests/openid4vci-deferred.e2e.test.ts b/packages/openid4vc/tests/openid4vci-deferred.e2e.test.ts index 956fbecc09..61ca66e719 100644 --- a/packages/openid4vc/tests/openid4vci-deferred.e2e.test.ts +++ b/packages/openid4vc/tests/openid4vci-deferred.e2e.test.ts @@ -19,16 +19,16 @@ import { calculateJwkThumbprint, preAuthorizedCodeGrantIdentifier, } from '@openid4vc/oauth2' -import { AuthorizationFlow, CredentialRequest } from '@openid4vc/openid4vci' +import { AuthorizationFlow, type CredentialRequest } from '@openid4vc/openid4vci' import express, { type Express } from 'express' import { InMemoryWalletModule } from '../../../tests/InMemoryWalletModule' import { setupNockToExpress } from '../../../tests/nockToExpress' import { TenantsModule } from '../../tenants/src' import { - OpenId4VcIssuerModuleConfigOptions, + type OpenId4VcIssuerModuleConfigOptions, OpenId4VcModule, - OpenId4VciSignMdocCredentials, - VerifiedOpenId4VcCredentialHolderBinding, + type OpenId4VciSignMdocCredentials, + type VerifiedOpenId4VcCredentialHolderBinding, } from '../src' import { OpenId4VcIssuanceSessionState } from '../src' import type { OpenId4VciCredentialBindingResolver } from '../src/openid4vc-holder' diff --git a/packages/openid4vc/tests/openid4vp-dcapi.e2e.test.ts b/packages/openid4vc/tests/openid4vp-dcapi.e2e.test.ts index 59c4a10d5c..daff82afea 100644 --- a/packages/openid4vc/tests/openid4vp-dcapi.e2e.test.ts +++ b/packages/openid4vc/tests/openid4vp-dcapi.e2e.test.ts @@ -1,5 +1,5 @@ import type { DcqlQuery, X509Certificate } from '@credo-ts/core' -import { OpenId4VcModule, OpenId4VcVerifierModuleConfigOptions, OpenId4VcVerifierRecord } from '../src' +import { OpenId4VcModule, type OpenId4VcVerifierModuleConfigOptions, OpenId4VcVerifierRecord } from '../src' import type { AgentType } from './utils' import { diff --git a/packages/openid4vc/tests/openid4vp-draft21.e2e.test.ts b/packages/openid4vc/tests/openid4vp-draft21.e2e.test.ts index 8e0683c856..a57ff7b8a2 100644 --- a/packages/openid4vc/tests/openid4vp-draft21.e2e.test.ts +++ b/packages/openid4vc/tests/openid4vp-draft21.e2e.test.ts @@ -4,7 +4,7 @@ import type { AgentType } from './utils' import { ClaimFormat, Kms, X509Service, parseDid } from '@credo-ts/core' import express, { type Express } from 'express' import { TenantsModule } from '../../tenants/src' -import { OpenId4VcModule, OpenId4VcVerificationSessionState, OpenId4VcVerifierModuleConfigOptions } from '../src' +import { OpenId4VcModule, OpenId4VcVerificationSessionState, type OpenId4VcVerifierModuleConfigOptions } from '../src' import { InMemoryWalletModule } from '../../../tests/InMemoryWalletModule' import { setupNockToExpress } from '../../../tests/nockToExpress' diff --git a/packages/openid4vc/tests/openid4vp-draft24.drizzle.e2e.test.ts b/packages/openid4vc/tests/openid4vp-draft24.drizzle.e2e.test.ts index 93f2888f0f..077143e090 100644 --- a/packages/openid4vc/tests/openid4vp-draft24.drizzle.e2e.test.ts +++ b/packages/openid4vc/tests/openid4vp-draft24.drizzle.e2e.test.ts @@ -18,15 +18,15 @@ import express, { type Express } from 'express' import { InMemoryWalletModule } from '../../../tests/InMemoryWalletModule' import { setupNockToExpress } from '../../../tests/nockToExpress' import { DrizzleStorageModule } from '../../drizzle-storage/src' -import openid4vcBundle from '../../drizzle-storage/src/openid4vc/bundle' -import tenantsBundle from '../../drizzle-storage/src/tenants/bundle' +import { openid4vcBundle } from '../../drizzle-storage/src/openid4vc/bundle' +import { tenantsBundle } from '../../drizzle-storage/src/tenants/bundle' import { inMemoryDrizzleSqliteDatabase, pushDrizzleSchema } from '../../drizzle-storage/tests/testDatabase' import { - DrizzlePostgresTestDatabase, + type DrizzlePostgresTestDatabase, createDrizzlePostgresTestDatabase, } from '../../drizzle-storage/tests/testDatabase' import { TenantsModule } from '../../tenants/src' -import { OpenId4VcModule, OpenId4VcVerifierModuleConfigOptions } from '../src' +import { OpenId4VcModule, type OpenId4VcVerifierModuleConfigOptions } from '../src' import { OpenId4VcVerificationSessionState } from '../src' import type { AgentType, TenantType } from './utils' @@ -57,11 +57,7 @@ describe('OpenID4VP Draft 24', () => { let verifier2: TenantType let holderDrizzleModule: DrizzleStorageModule - // Use SQLite for verifier - const verifierDrizzleModule = new DrizzleStorageModule({ - database: inMemoryDrizzleSqliteDatabase(), - bundles: [openid4vcBundle, tenantsBundle], - }) + let verifierDrizzleModule: DrizzleStorageModule beforeAll(async () => { holderPostgresDatabase = await createDrizzlePostgresTestDatabase() @@ -70,6 +66,12 @@ describe('OpenID4VP Draft 24', () => { bundles: [openid4vcBundle, tenantsBundle], }) + // Use SQLite for verifier + verifierDrizzleModule = new DrizzleStorageModule({ + database: await inMemoryDrizzleSqliteDatabase(), + bundles: [openid4vcBundle, tenantsBundle], + }) + await pushDrizzleSchema(holderDrizzleModule) await pushDrizzleSchema(verifierDrizzleModule) }) diff --git a/packages/openid4vc/tests/openid4vp-multi-mdoc-devcie-response.e2e.test.ts b/packages/openid4vc/tests/openid4vp-multi-mdoc-devcie-response.e2e.test.ts index 87e7643304..af074df675 100644 --- a/packages/openid4vc/tests/openid4vp-multi-mdoc-devcie-response.e2e.test.ts +++ b/packages/openid4vc/tests/openid4vp-multi-mdoc-devcie-response.e2e.test.ts @@ -1,6 +1,6 @@ import { Kms, MdocDeviceResponse, TypedArrayEncoder } from '@credo-ts/core' import { InMemoryWalletModule } from '../../../tests/InMemoryWalletModule' -import { OpenId4VcModule, OpenId4VcVerificationSessionState, OpenId4VcVerifierModuleConfigOptions } from '../src' +import { OpenId4VcModule, OpenId4VcVerificationSessionState, type OpenId4VcVerifierModuleConfigOptions } from '../src' import type { AgentType } from './utils' import { createAgentFromModules } from './utils' diff --git a/packages/openid4vc/tests/openid4vp-v1.e2e.test.ts b/packages/openid4vc/tests/openid4vp-v1.e2e.test.ts index 4d4376ad45..605edd6b92 100644 --- a/packages/openid4vc/tests/openid4vp-v1.e2e.test.ts +++ b/packages/openid4vc/tests/openid4vp-v1.e2e.test.ts @@ -21,7 +21,7 @@ import express, { type Express } from 'express' import { InMemoryWalletModule } from '../../../tests/InMemoryWalletModule' import { setupNockToExpress } from '../../../tests/nockToExpress' import { TenantsModule } from '../../tenants/src' -import { OpenId4VcModule, OpenId4VcVerificationSessionState, OpenId4VcVerifierModuleConfigOptions } from '../src' +import { OpenId4VcModule, OpenId4VcVerificationSessionState, type OpenId4VcVerifierModuleConfigOptions } from '../src' import type { AgentType, TenantType } from './utils' import { createAgentFromModules, createTenantForAgent, waitForVerificationSessionRecordSubject } from './utils' import { openBadgeDcqlQuery, universityDegreeDcqlQuery } from './utilsVp' diff --git a/packages/openid4vc/tests/setup.ts b/packages/openid4vc/tests/setup.ts deleted file mode 100644 index 1c93cfbb19..0000000000 --- a/packages/openid4vc/tests/setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -import '@openwallet-foundation/askar-nodejs' -jest.setTimeout(120000) diff --git a/packages/openid4vc/tsconfig.build.json b/packages/openid4vc/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/openid4vc/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/openid4vc/tsconfig.json b/packages/openid4vc/tsconfig.json deleted file mode 100644 index c1aca0e050..0000000000 --- a/packages/openid4vc/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"], - "skipLibCheck": true - } -} diff --git a/packages/openid4vc/tsdown.config.ts b/packages/openid4vc/tsdown.config.ts new file mode 100644 index 0000000000..0fa6dc06a9 --- /dev/null +++ b/packages/openid4vc/tsdown.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig( + config.map((item) => ({ + ...item, + // We have a custom entry point for react native + entry: ['./src/index.ts', './src/shared/router/express.native.ts'], + })) +) diff --git a/packages/question-answer/jest.config.ts b/packages/question-answer/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/question-answer/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/question-answer/package.json b/packages/question-answer/package.json index 1f492275e0..f2702f5d68 100644 --- a/packages/question-answer/package.json +++ b/packages/question-answer/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/question-answer", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/question-answer", "repository": { @@ -17,11 +28,8 @@ "directory": "packages/question-answer" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/core": "workspace:*", @@ -33,7 +41,6 @@ "devDependencies": { "@credo-ts/node": "workspace:*", "reflect-metadata": "catalog:", - "rimraf": "catalog:", "typescript": "catalog:" } } diff --git a/packages/question-answer/src/__tests__/QuestionAnswerModule.test.ts b/packages/question-answer/src/__tests__/QuestionAnswerModule.test.ts index 747bba43a1..f9b67b0157 100644 --- a/packages/question-answer/src/__tests__/QuestionAnswerModule.test.ts +++ b/packages/question-answer/src/__tests__/QuestionAnswerModule.test.ts @@ -13,15 +13,15 @@ import { } from '@credo-ts/question-answer' const featureRegistry = { - register: jest.fn(), + register: vi.fn(), } as unknown as DidCommFeatureRegistry const messageHandlerRegistry = new DidCommMessageHandlerRegistry() const dependencyManager = { - registerInstance: jest.fn(), - registerSingleton: jest.fn(), - registerContextScoped: jest.fn(), + registerInstance: vi.fn(), + registerSingleton: vi.fn(), + registerContextScoped: vi.fn(), resolve: (token: unknown) => { if (token === DidCommFeatureRegistry) return featureRegistry if (token === DidCommMessageHandlerRegistry) return messageHandlerRegistry diff --git a/packages/question-answer/src/__tests__/QuestionAnswerService.test.ts b/packages/question-answer/src/__tests__/QuestionAnswerService.test.ts index 94e784b3c9..8b282ce7fc 100644 --- a/packages/question-answer/src/__tests__/QuestionAnswerService.test.ts +++ b/packages/question-answer/src/__tests__/QuestionAnswerService.test.ts @@ -19,9 +19,10 @@ import { QuestionMessage, } from '@credo-ts/question-answer' import { InMemoryStorageService } from '../../../../tests/InMemoryStorageService' +import type { MockedClassConstructor } from '../../../../tests/types' -jest.mock('../repository/QuestionAnswerRepository') -const QuestionAnswerRepositoryMock = QuestionAnswerRepository as jest.Mock +vi.mock('../repository/QuestionAnswerRepository') +const QuestionAnswerRepositoryMock = QuestionAnswerRepository as MockedClassConstructor describe('QuestionAnswerService', () => { const mockConnectionRecord = getMockConnection({ @@ -73,7 +74,7 @@ describe('QuestionAnswerService', () => { describe('create question', () => { it('emits a question with question text, valid responses, and question answer record', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( QuestionAnswerEventTypes.QuestionAnswerStateChanged, eventListenerMock @@ -124,13 +125,13 @@ describe('QuestionAnswerService', () => { }) it('throws an error when invalid response is provided', async () => { - expect(questionAnswerService.createAnswer(agentContext, mockRecord, 'Maybe')).rejects.toThrow( + await expect(questionAnswerService.createAnswer(agentContext, mockRecord, 'Maybe')).rejects.toThrow( 'Response does not match valid responses' ) }) it('emits an answer with a valid response and question answer record', async () => { - const eventListenerMock = jest.fn() + const eventListenerMock = vi.fn() eventEmitter.on( QuestionAnswerEventTypes.QuestionAnswerStateChanged, eventListenerMock @@ -211,10 +212,10 @@ describe('QuestionAnswerService', () => { connection: mockConnectionRecord, }) - expect(questionAnswerService.processReceiveQuestion(messageContext)).rejects.toThrow( + await expect(questionAnswerService.processReceiveQuestion(messageContext)).rejects.toThrow( `Question answer record with thread Id ${questionMessage.id} already exists.` ) - jest.resetAllMocks() + vi.resetAllMocks() }) }) @@ -258,7 +259,7 @@ describe('QuestionAnswerService', () => { validResponses: [{ text: 'Yes' }, { text: 'No' }], }) ) - jest.resetAllMocks() + vi.resetAllMocks() }) it('throws an error when no existing question is found', async () => { @@ -272,7 +273,7 @@ describe('QuestionAnswerService', () => { connection: mockConnectionRecord, }) - expect(questionAnswerService.receiveAnswer(messageContext)).rejects.toThrow( + await expect(questionAnswerService.receiveAnswer(messageContext)).rejects.toThrow( `Question Answer record with thread Id ${answerMessage.threadId} not found.` ) }) @@ -291,10 +292,10 @@ describe('QuestionAnswerService', () => { connection: mockConnectionRecord, }) - expect(questionAnswerService.receiveAnswer(messageContext)).rejects.toThrow( + await expect(questionAnswerService.receiveAnswer(messageContext)).rejects.toThrow( `Question answer record is in invalid state ${mockRecord.state}. Valid states are: ${QuestionAnswerState.QuestionSent}` ) - jest.resetAllMocks() + vi.resetAllMocks() }) it('throws an error when record is in invalid role', async () => { @@ -312,10 +313,10 @@ describe('QuestionAnswerService', () => { connection: mockConnectionRecord, }) - expect(questionAnswerService.receiveAnswer(messageContext)).rejects.toThrow( + await expect(questionAnswerService.receiveAnswer(messageContext)).rejects.toThrow( `Invalid question answer record role ${mockRecord.role}, expected is ${QuestionAnswerRole.Questioner}` ) }) - jest.resetAllMocks() + vi.resetAllMocks() }) }) diff --git a/packages/question-answer/src/repository/QuestionAnswerRepository.ts b/packages/question-answer/src/repository/QuestionAnswerRepository.ts index 9031f1e2fd..879a395636 100644 --- a/packages/question-answer/src/repository/QuestionAnswerRepository.ts +++ b/packages/question-answer/src/repository/QuestionAnswerRepository.ts @@ -1,4 +1,4 @@ -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { QuestionAnswerRecord } from './QuestionAnswerRecord' diff --git a/packages/question-answer/src/services/QuestionAnswerService.ts b/packages/question-answer/src/services/QuestionAnswerService.ts index b31e9455d3..98e53db12b 100644 --- a/packages/question-answer/src/services/QuestionAnswerService.ts +++ b/packages/question-answer/src/services/QuestionAnswerService.ts @@ -3,7 +3,7 @@ import type { DidCommInboundMessageContext } from '@credo-ts/didcomm' import type { QuestionAnswerStateChangedEvent } from '../QuestionAnswerEvents' import type { ValidResponse } from '../models' -import { CredoError, EventEmitter, InjectionSymbols, Logger, inject, injectable } from '@credo-ts/core' +import { CredoError, EventEmitter, InjectionSymbols, type Logger, inject, injectable } from '@credo-ts/core' import { QuestionAnswerEventTypes } from '../QuestionAnswerEvents' import { QuestionAnswerRole } from '../QuestionAnswerRole' diff --git a/packages/question-answer/tests/setup.ts b/packages/question-answer/tests/setup.ts deleted file mode 100644 index 78143033f2..0000000000 --- a/packages/question-answer/tests/setup.ts +++ /dev/null @@ -1,3 +0,0 @@ -import 'reflect-metadata' - -jest.setTimeout(120000) diff --git a/packages/question-answer/tsconfig.build.json b/packages/question-answer/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/question-answer/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/question-answer/tsconfig.json b/packages/question-answer/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/packages/question-answer/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/packages/question-answer/tsdown.config.ts b/packages/question-answer/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/question-answer/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/react-native/jest.config.ts b/packages/react-native/jest.config.ts deleted file mode 100644 index 2556d19c61..0000000000 --- a/packages/react-native/jest.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, -} - -export default config diff --git a/packages/react-native/package.json b/packages/react-native/package.json index 825ff04975..bd61b1cf36 100644 --- a/packages/react-native/package.json +++ b/packages/react-native/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/react-native", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/react-native", "repository": { @@ -17,11 +28,8 @@ "directory": "packages/react-native" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@azure/core-asynciterator-polyfill": "^1.0.2", @@ -32,7 +40,7 @@ "react-native": "^0.79.3", "react-native-fs": "^2.20.0", "react-native-get-random-values": "^1.8.0", - "rimraf": "catalog:", + "typescript": "catalog:" }, "peerDependencies": { diff --git a/packages/react-native/src/kms/SecureEnvironmentKeyManagementService.ts b/packages/react-native/src/kms/SecureEnvironmentKeyManagementService.ts index c9f50c0080..9836f3a4ca 100644 --- a/packages/react-native/src/kms/SecureEnvironmentKeyManagementService.ts +++ b/packages/react-native/src/kms/SecureEnvironmentKeyManagementService.ts @@ -42,11 +42,12 @@ export class SecureEnvironmentKeyManagementService implements Kms.KeyManagementS } public async deleteKey(_agentContext: AgentContext, options: Kms.KmsDeleteKeyOptions): Promise { + const secureEnvironment = await this.secureEnvironment try { - await this.secureEnvironment.deleteKey(options.keyId) + await secureEnvironment.deleteKey(options.keyId) return true } catch (error) { - if (error instanceof this.secureEnvironment.KeyNotFoundError) { + if (error instanceof secureEnvironment.KeyNotFoundError) { return false } @@ -82,9 +83,10 @@ export class SecureEnvironmentKeyManagementService implements Kms.KeyManagementS } const keyId = options.keyId ?? utils.uuid() + const secureEnvironment = await this.secureEnvironment try { - await this.secureEnvironment.generateKeypair(keyId) + await secureEnvironment.generateKeypair(keyId) return { keyId, @@ -92,7 +94,7 @@ export class SecureEnvironmentKeyManagementService implements Kms.KeyManagementS } } catch (error) { if (error instanceof Kms.KeyManagementError) throw error - if (error instanceof this.secureEnvironment.KeyAlreadyExistsError) { + if (error instanceof secureEnvironment.KeyAlreadyExistsError) { throw new Kms.KeyManagementKeyExistsError(keyId, this.backend) } @@ -108,18 +110,20 @@ export class SecureEnvironmentKeyManagementService implements Kms.KeyManagementS ) } + const secureEnvironment = await this.secureEnvironment + try { // TODO: can we store something like 'use' for the key in secure environment? // Kms.assertKeyAllowsSign(publicJwk) // Perform the signing operation - const signature = await this.secureEnvironment.sign(options.keyId, options.data) + const signature = await secureEnvironment.sign(options.keyId, options.data) return { signature, } } catch (error) { - if (error instanceof this.secureEnvironment.KeyNotFoundError) { + if (error instanceof secureEnvironment.KeyNotFoundError) { throw new Kms.KeyManagementKeyNotFoundError(options.keyId, this.backend) } @@ -145,11 +149,13 @@ export class SecureEnvironmentKeyManagementService implements Kms.KeyManagementS } private async getKeyAsserted(keyId: string) { + const secureEnvironment = await this.secureEnvironment + try { - const publicKeyBytes = await this.secureEnvironment.getPublicBytesForKeyId(keyId) + const publicKeyBytes = await secureEnvironment.getPublicBytesForKeyId(keyId) return this.publicJwkFromPublicKeyBytes(publicKeyBytes, keyId) } catch (error) { - if (error instanceof this.secureEnvironment.KeyNotFoundError) { + if (error instanceof secureEnvironment.KeyNotFoundError) { throw new Kms.KeyManagementKeyNotFoundError(keyId, this.backend) } diff --git a/packages/react-native/src/kms/secureEnvironment.ts b/packages/react-native/src/kms/secureEnvironment.ts index 29fbb3238e..ed2e09c42e 100644 --- a/packages/react-native/src/kms/secureEnvironment.ts +++ b/packages/react-native/src/kms/secureEnvironment.ts @@ -1,13 +1,6 @@ -export function importSecureEnvironment(): { - sign: (id: string, message: Uint8Array) => Promise - getPublicBytesForKeyId: (id: string) => Promise - generateKeypair: (id: string) => Promise - deleteKey: (id: string) => Promise - KeyAlreadyExistsError: typeof Error - KeyNotFoundError: typeof Error -} { +export async function importSecureEnvironment() { try { - const secureEnvironment = require('@animo-id/expo-secure-environment') + const secureEnvironment = await import('@animo-id/expo-secure-environment') return secureEnvironment } catch (_error) { throw new Error('@animo-id/expo-secure-environment must be installed as a peer dependency') diff --git a/packages/react-native/tsconfig.build.json b/packages/react-native/tsconfig.build.json index b916e24804..3625eb3631 100644 --- a/packages/react-native/tsconfig.build.json +++ b/packages/react-native/tsconfig.build.json @@ -1,8 +1,6 @@ { "extends": "../../tsconfig.build.json", "compilerOptions": { - "outDir": "./build", "types": ["react-native"] - }, - "include": ["src/**/*"] + } } diff --git a/packages/react-native/tsconfig.json b/packages/react-native/tsconfig.json deleted file mode 100644 index cbea2d06db..0000000000 --- a/packages/react-native/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - // FIXME https://github.com/openwallet-foundation/credo-ts/pull/327 - "skipLibCheck": true, - "types": ["react-native", "jest"] - } -} diff --git a/packages/react-native/tsdown.config.ts b/packages/react-native/tsdown.config.ts new file mode 100644 index 0000000000..c76f8de6c5 --- /dev/null +++ b/packages/react-native/tsdown.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig( + config.map((e) => ({ + ...e, + dts: { + ...e.dts, + // We have overridden the tsconfig for react-native module + tsconfig: 'tsconfig.build.json', + }, + })) +) diff --git a/packages/redis-cache/jest.config.ts b/packages/redis-cache/jest.config.ts deleted file mode 100644 index 2556d19c61..0000000000 --- a/packages/redis-cache/jest.config.ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, -} - -export default config diff --git a/packages/redis-cache/package.json b/packages/redis-cache/package.json index 72c9c607a6..ef52aa4239 100644 --- a/packages/redis-cache/package.json +++ b/packages/redis-cache/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/redis-cache", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/redis-cache", "repository": { @@ -17,18 +28,14 @@ "directory": "packages/redis-cache" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/core": "workspace:*", "ioredis": "^5.6.1" }, "devDependencies": { - "rimraf": "catalog:", "typescript": "catalog:" } } diff --git a/packages/redis-cache/src/RedisCache.ts b/packages/redis-cache/src/RedisCache.ts index 68f7ba1418..1ba51072d4 100644 --- a/packages/redis-cache/src/RedisCache.ts +++ b/packages/redis-cache/src/RedisCache.ts @@ -1,5 +1,5 @@ -import { AgentContext, Cache, CacheModuleConfig } from '@credo-ts/core' -import Redis, { RedisOptions } from 'ioredis' +import { AgentContext, type Cache, CacheModuleConfig } from '@credo-ts/core' +import Redis, { type RedisOptions } from 'ioredis' export type RedisCacheOptions = RedisOptions diff --git a/packages/redis-cache/src/index.ts b/packages/redis-cache/src/index.ts index 5985639d92..cd0ab02827 100644 --- a/packages/redis-cache/src/index.ts +++ b/packages/redis-cache/src/index.ts @@ -1 +1 @@ -export { RedisCache, RedisCacheOptions } from './RedisCache' +export { RedisCache, type RedisCacheOptions } from './RedisCache' diff --git a/packages/redis-cache/tsconfig.build.json b/packages/redis-cache/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/redis-cache/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/redis-cache/tsconfig.json b/packages/redis-cache/tsconfig.json deleted file mode 100644 index c1aca0e050..0000000000 --- a/packages/redis-cache/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"], - "skipLibCheck": true - } -} diff --git a/packages/redis-cache/tsdown.config.ts b/packages/redis-cache/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/redis-cache/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/tenants/jest.config.ts b/packages/tenants/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/packages/tenants/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/packages/tenants/package.json b/packages/tenants/package.json index 55fc58c088..cfc26ec360 100644 --- a/packages/tenants/package.json +++ b/packages/tenants/package.json @@ -1,14 +1,25 @@ { "name": "@credo-ts/tenants", - "main": "src/index", - "types": "src/index", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "files": ["build"], "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, "homepage": "https://github.com/openwallet-foundation/credo-ts/tree/main/packages/tenants", "repository": { @@ -17,11 +28,8 @@ "directory": "packages/tenants" }, "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/core": "workspace:*", @@ -31,7 +39,6 @@ "devDependencies": { "@credo-ts/node": "workspace:*", "reflect-metadata": "catalog:", - "rimraf": "catalog:", "typescript": "catalog:" } } diff --git a/packages/tenants/src/TenantsApi.ts b/packages/tenants/src/TenantsApi.ts index d91b4fb6b6..70774294d0 100644 --- a/packages/tenants/src/TenantsApi.ts +++ b/packages/tenants/src/TenantsApi.ts @@ -10,7 +10,7 @@ import type { TenantRecord } from './repository' import { AgentContext, InjectionSymbols, - Logger, + type Logger, UpdateAssistant, inject, injectable, diff --git a/packages/tenants/src/__tests__/TenantsApi.test.ts b/packages/tenants/src/__tests__/TenantsApi.test.ts index 44ee88e374..993ea6a738 100644 --- a/packages/tenants/src/__tests__/TenantsApi.test.ts +++ b/packages/tenants/src/__tests__/TenantsApi.test.ts @@ -1,5 +1,7 @@ import { Agent, AgentContext, InjectionSymbols } from '@credo-ts/core' +import type { MockInstance } from 'vitest' +import type { MockedClassConstructor } from '../../../../tests/types' import { getAgentContext, getAgentOptions, mockFunction } from '../../../core/tests' import { TenantAgent } from '../TenantAgent' import { TenantsApi } from '../TenantsApi' @@ -7,11 +9,11 @@ import { TenantAgentContextProvider } from '../context/TenantAgentContextProvide import { TenantRecord } from '../repository' import { TenantRecordService } from '../services/TenantRecordService' -jest.mock('../services/TenantRecordService') -const TenantRecordServiceMock = TenantRecordService as jest.Mock +vi.mock('../services/TenantRecordService') +const TenantRecordServiceMock = TenantRecordService as MockedClassConstructor -jest.mock('../context/TenantAgentContextProvider') -const AgentContextProviderMock = TenantAgentContextProvider as jest.Mock +vi.mock('../context/TenantAgentContextProvider') +const AgentContextProviderMock = TenantAgentContextProvider as MockedClassConstructor const tenantRecordService = new TenantRecordServiceMock() const agentContextProvider = new AgentContextProviderMock() @@ -62,10 +64,9 @@ describe('TenantsApi', () => { tenantDependencyManager.registerInstance(AgentContext, tenantAgentContext) mockFunction(agentContextProvider.getAgentContextForContextCorrelationId).mockResolvedValue(tenantAgentContext) - - let endSessionSpy: jest.SpyInstance | undefined = undefined + let endSessionSpy: MockInstance | undefined = undefined await tenantsApi.withTenantAgent({ tenantId: 'tenant-id' }, async (tenantAgent) => { - endSessionSpy = jest.spyOn(tenantAgent, 'endSession') + endSessionSpy = vi.spyOn(tenantAgent, 'endSession') expect(tenantAgent.isInitialized).toBe(true) expect(agentContextProvider.getAgentContextForContextCorrelationId).toHaveBeenCalledWith('tenant-tenant-id', { @@ -91,10 +92,10 @@ describe('TenantsApi', () => { mockFunction(agentContextProvider.getAgentContextForContextCorrelationId).mockResolvedValue(tenantAgentContext) - let endSessionSpy: jest.SpyInstance | undefined = undefined + let endSessionSpy: MockInstance | undefined = undefined await expect( tenantsApi.withTenantAgent({ tenantId: 'tenant-id' }, async (tenantAgent) => { - endSessionSpy = jest.spyOn(tenantAgent, 'endSession') + endSessionSpy = vi.spyOn(tenantAgent, 'endSession') expect(tenantAgent.isInitialized).toBe(true) expect(agentContextProvider.getAgentContextForContextCorrelationId).toHaveBeenCalledWith('tenant-tenant-id', { @@ -123,13 +124,13 @@ describe('TenantsApi', () => { }) const tenantAgentMock = { - endSession: jest.fn(), + endSession: vi.fn(), } as unknown as TenantAgent mockFunction(tenantRecordService.createTenant).mockResolvedValue(tenantRecord) // @ts-ignore - const getTenantAgentSpy = jest.spyOn(tenantsApi, '_getTenantAgent').mockResolvedValue(tenantAgentMock) + const getTenantAgentSpy = vi.spyOn(tenantsApi, '_getTenantAgent').mockResolvedValue(tenantAgentMock) const createdTenantRecord = await tenantsApi.createTenant({ config: { @@ -148,7 +149,7 @@ describe('TenantsApi', () => { describe('getTenantById', () => { test('calls get tenant by id on tenant service', async () => { - const tenantRecord = jest.fn() as unknown as TenantRecord + const tenantRecord = vi.fn() as unknown as TenantRecord mockFunction(tenantRecordService.getTenantById).mockResolvedValue(tenantRecord) const actualTenantRecord = await tenantsApi.getTenantById('tenant-id') @@ -161,14 +162,14 @@ describe('TenantsApi', () => { describe('deleteTenantById', () => { test('deletes the tenant and removes the wallet', async () => { const tenantAgentMock = { - endSession: jest.fn(), + endSession: vi.fn(), context: { dependencyManager: { - deleteAgentContext: jest.fn(), + deleteAgentContext: vi.fn(), }, }, } as unknown as TenantAgent - const getTenantAgentSpy = jest.spyOn(tenantsApi, 'getTenantAgent').mockResolvedValue(tenantAgentMock) + const getTenantAgentSpy = vi.spyOn(tenantsApi, 'getTenantAgent').mockResolvedValue(tenantAgentMock) await tenantsApi.deleteTenantById('tenant-id') @@ -180,7 +181,7 @@ describe('TenantsApi', () => { describe('getAllTenants', () => { test('calls get all tenants on tenant service', async () => { - const tenantRecords = jest.fn() as unknown as Array + const tenantRecords = vi.fn() as unknown as Array mockFunction(tenantRecordService.getAllTenants).mockResolvedValue(tenantRecords) const actualTenantRecords = await tenantsApi.getAllTenants() diff --git a/packages/tenants/src/__tests__/TenantsModule.test.ts b/packages/tenants/src/__tests__/TenantsModule.test.ts index d89873590a..19c4e57e23 100644 --- a/packages/tenants/src/__tests__/TenantsModule.test.ts +++ b/packages/tenants/src/__tests__/TenantsModule.test.ts @@ -1,5 +1,6 @@ import { InjectionSymbols } from '@credo-ts/core' +import type { MockedClassConstructor } from '../../../../tests/types' import { DependencyManager } from '../../../core/src/plugins/DependencyManager' import { mockFunction } from '../../../core/tests' import { TenantsApi } from '../TenantsApi' @@ -10,12 +11,12 @@ import { TenantSessionCoordinator } from '../context/TenantSessionCoordinator' import { TenantRepository, TenantRoutingRepository } from '../repository' import { TenantRecordService } from '../services' -jest.mock('../../../core/src/plugins/DependencyManager') -const DependencyManagerMock = DependencyManager as jest.Mock +vi.mock('../../../core/src/plugins/DependencyManager') +const DependencyManagerMock = DependencyManager as MockedClassConstructor const dependencyManager = new DependencyManagerMock() -mockFunction(dependencyManager.resolve).mockReturnValue({ logger: { warn: jest.fn() } }) +mockFunction(dependencyManager.resolve).mockReturnValue({ logger: { warn: vi.fn() } }) describe('TenantsModule', () => { test('registers dependencies on the dependency manager', () => { diff --git a/packages/tenants/src/context/TenantAgentContextProvider.ts b/packages/tenants/src/context/TenantAgentContextProvider.ts index fe886bde98..bb7ece8c2e 100644 --- a/packages/tenants/src/context/TenantAgentContextProvider.ts +++ b/packages/tenants/src/context/TenantAgentContextProvider.ts @@ -1,4 +1,4 @@ -import { AgentContextProvider, Kms, TypedArrayEncoder, UpdateAssistantUpdateOptions } from '@credo-ts/core' +import { type AgentContextProvider, Kms, TypedArrayEncoder, type UpdateAssistantUpdateOptions } from '@credo-ts/core' import type { DidCommEncryptedMessage, DidCommRoutingCreatedEvent } from '@credo-ts/didcomm' import type { TenantRecord } from '../repository' @@ -8,7 +8,7 @@ import { EventEmitter, InjectionSymbols, JsonEncoder, - Logger, + type Logger, UpdateAssistant, inject, injectable, diff --git a/packages/tenants/src/context/TenantSessionCoordinator.ts b/packages/tenants/src/context/TenantSessionCoordinator.ts index 57bedc6d9e..52f83f8c53 100644 --- a/packages/tenants/src/context/TenantSessionCoordinator.ts +++ b/packages/tenants/src/context/TenantSessionCoordinator.ts @@ -1,7 +1,15 @@ import type { MutexInterface } from 'async-mutex' import type { TenantRecord } from '../repository' -import { AgentConfig, AgentContext, CredoError, InjectionSymbols, Logger, inject, injectable } from '@credo-ts/core' +import { + AgentConfig, + AgentContext, + CredoError, + InjectionSymbols, + type Logger, + inject, + injectable, +} from '@credo-ts/core' import { Mutex, withTimeout } from 'async-mutex' import { TenantsModuleConfig } from '../TenantsModuleConfig' diff --git a/packages/tenants/src/context/__tests__/TenantAgentContextProvider.test.ts b/packages/tenants/src/context/__tests__/TenantAgentContextProvider.test.ts index 661d22ed77..a19c45f458 100644 --- a/packages/tenants/src/context/__tests__/TenantAgentContextProvider.test.ts +++ b/packages/tenants/src/context/__tests__/TenantAgentContextProvider.test.ts @@ -2,20 +2,21 @@ import type { AgentContext } from '@credo-ts/core' import { Kms } from '@credo-ts/core' +import type { MockedClassConstructor } from '../../../../../tests/types' import { EventEmitter } from '../../../../core/src/agent/EventEmitter' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../core/tests/helpers' import { TenantRecord, TenantRoutingRecord } from '../../repository' import { TenantRecordService } from '../../services/TenantRecordService' import { TenantAgentContextProvider } from '../TenantAgentContextProvider' -import { TenantContextCorrelationId, TenantSessionCoordinator } from '../TenantSessionCoordinator' +import { type TenantContextCorrelationId, TenantSessionCoordinator } from '../TenantSessionCoordinator' -jest.mock('../../../../core/src/agent/EventEmitter') -jest.mock('../../services/TenantRecordService') -jest.mock('../TenantSessionCoordinator') +vi.mock('../../../../core/src/agent/EventEmitter') +vi.mock('../../services/TenantRecordService') +vi.mock('../TenantSessionCoordinator') -const EventEmitterMock = EventEmitter as jest.Mock -const TenantRecordServiceMock = TenantRecordService as jest.Mock -const TenantSessionCoordinatorMock = TenantSessionCoordinator as jest.Mock +const EventEmitterMock = EventEmitter as MockedClassConstructor +const TenantRecordServiceMock = TenantRecordService as MockedClassConstructor +const TenantSessionCoordinatorMock = TenantSessionCoordinator as MockedClassConstructor const tenantRecordService = new TenantRecordServiceMock() const tenantSessionCoordinator = new TenantSessionCoordinatorMock() @@ -48,7 +49,7 @@ const inboundMessage = { describe('TenantAgentContextProvider', () => { afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('getAgentContextForContextCorrelationId', () => { @@ -61,7 +62,7 @@ describe('TenantAgentContextProvider', () => { storageVersion: '0.5', }) - const tenantAgentContext = jest.fn() as unknown as AgentContext + const tenantAgentContext = vi.fn() as unknown as AgentContext mockFunction(tenantRecordService.getTenantById).mockResolvedValue(tenantRecord) mockFunction(tenantSessionCoordinator.getContextForSession).mockResolvedValue(tenantAgentContext) @@ -87,7 +88,7 @@ describe('TenantAgentContextProvider', () => { storageVersion: '0.5', }) - const tenantAgentContext = jest.fn() as unknown as AgentContext + const tenantAgentContext = vi.fn() as unknown as AgentContext mockFunction(tenantRecordService.getTenantById).mockResolvedValue(tenantRecord) mockFunction(tenantSessionCoordinator.getContextForSession).mockResolvedValue(tenantAgentContext) @@ -129,7 +130,7 @@ describe('TenantAgentContextProvider', () => { storageVersion: '0.5', }) - const tenantAgentContext = jest.fn() as unknown as AgentContext + const tenantAgentContext = vi.fn() as unknown as AgentContext mockFunction(tenantRecordService.findTenantRoutingRecordByRecipientKey).mockResolvedValue(tenantRoutingRecord) mockFunction(tenantRecordService.getTenantById).mockResolvedValue(tenantRecord) @@ -156,7 +157,7 @@ describe('TenantAgentContextProvider', () => { describe('disposeAgentContext', () => { test('calls disposeAgentContextSession on tenant session coordinator', async () => { - const tenantAgentContext = jest.fn() as unknown as AgentContext + const tenantAgentContext = vi.fn() as unknown as AgentContext await tenantAgentContextProvider.endSessionForAgentContext(tenantAgentContext) diff --git a/packages/tenants/src/context/__tests__/TenantSessionCoordinator.test.ts b/packages/tenants/src/context/__tests__/TenantSessionCoordinator.test.ts index cdcc675f85..2ff6167a20 100644 --- a/packages/tenants/src/context/__tests__/TenantSessionCoordinator.test.ts +++ b/packages/tenants/src/context/__tests__/TenantSessionCoordinator.test.ts @@ -4,6 +4,7 @@ import type { TenantAgentContextMapping } from '../TenantSessionCoordinator' import { AgentConfig, AgentContext } from '@credo-ts/core' import { Mutex, withTimeout } from 'async-mutex' +import type { MockedClassConstructor } from '../../../../../tests/types' import { getAgentConfig, getAgentContext } from '../../../../core/tests/helpers' import testLogger from '../../../../core/tests/logger' import { TenantsModuleConfig } from '../../TenantsModuleConfig' @@ -11,8 +12,8 @@ import { TenantRecord } from '../../repository' import { TenantSessionCoordinator } from '../TenantSessionCoordinator' import { TenantSessionMutex } from '../TenantSessionMutex' -jest.mock('../TenantSessionMutex') -const TenantSessionMutexMock = TenantSessionMutex as jest.Mock +vi.mock('../TenantSessionMutex') +const TenantSessionMutexMock = TenantSessionMutex as MockedClassConstructor // tenantAgentContextMapping is private, but we need to access it to properly test this class. Adding type override to // make sure we don't get a lot of type errors. @@ -35,13 +36,13 @@ const tenantSessionMutexMock = TenantSessionMutexMock.mock.instances[0] describe('TenantSessionCoordinator', () => { afterEach(() => { tenantSessionCoordinator.tenantAgentContextMapping = {} - jest.resetAllMocks() - jest.clearAllMocks() + vi.resetAllMocks() + vi.clearAllMocks() }) describe('getContextForSession', () => { test('returns the context from the tenantAgentContextMapping and increases the session count if already available', async () => { - const tenant1AgentContext = jest.fn() as unknown as AgentContext + const tenant1AgentContext = vi.fn() as unknown as AgentContext const tenant1 = { agentContext: tenant1AgentContext, @@ -86,12 +87,12 @@ describe('TenantSessionCoordinator', () => { }, storageVersion: '0.5', }) - const createChildSpy = jest.spyOn(agentContext.dependencyManager, 'createChild') - const extendSpy = jest.spyOn(agentContext.config, 'extend') + const createChildSpy = vi.spyOn(agentContext.dependencyManager, 'createChild') + const extendSpy = vi.spyOn(agentContext.config, 'extend') const tenantDependencyManager = { - registerInstance: jest.fn(), - initializeAgentContext: jest.fn(), + registerInstance: vi.fn(), + initializeAgentContext: vi.fn(), } as unknown as DependencyManager createChildSpy.mockReturnValue(tenantDependencyManager) @@ -193,7 +194,7 @@ describe('TenantSessionCoordinator', () => { test('Returns early and does not release a session if the agent context correlation id matches the root agent context', async () => { const rootAgentContextMock = { contextCorrelationId: 'mock', - dependencyManager: { dispose: jest.fn() }, + dependencyManager: { dispose: vi.fn() }, isRootAgentContext: true, } as unknown as AgentContext await tenantSessionCoordinator.endAgentContextSession(rootAgentContextMock) @@ -203,7 +204,7 @@ describe('TenantSessionCoordinator', () => { test('throws an error if no agent context session exists for the tenant', async () => { const tenantAgentContextMock = { contextCorrelationId: 'tenant-does-not-exist' } as unknown as AgentContext - expect(tenantSessionCoordinator.endAgentContextSession(tenantAgentContextMock)).rejects.toThrow( + await expect(tenantSessionCoordinator.endAgentContextSession(tenantAgentContextMock)).rejects.toThrow( `Unknown agent context with contextCorrelationId 'tenant-does-not-exist'. Cannot end session` ) }) @@ -233,7 +234,7 @@ describe('TenantSessionCoordinator', () => { test('closes the agent context and removes the agent context mapping if the number of sessions reaches 0', async () => { const tenant1AgentContext = { - dependencyManager: { closeAgentContext: jest.fn() }, + dependencyManager: { closeAgentContext: vi.fn() }, contextCorrelationId: 'tenant-tenant1', } as unknown as AgentContext diff --git a/packages/tenants/src/index.ts b/packages/tenants/src/index.ts index 203dc6f8f4..243c864aaf 100644 --- a/packages/tenants/src/index.ts +++ b/packages/tenants/src/index.ts @@ -1,7 +1,8 @@ -export { TenantRecord, TenantRecordProps } from './repository/TenantRecord' +export { TenantRecord, type TenantRecordProps } from './repository/TenantRecord' export { TenantRoutingRecord } from './repository/TenantRoutingRecord' export * from './TenantsModule' export * from './TenantsApi' export * from './TenantsApiOptions' export * from './TenantsModuleConfig' export { TenantAgent } from './TenantAgent' +export type { TenantConfig } from './models/TenantConfig' diff --git a/packages/tenants/src/repository/TenantRepository.ts b/packages/tenants/src/repository/TenantRepository.ts index f867f5ffb9..dccdb4a800 100644 --- a/packages/tenants/src/repository/TenantRepository.ts +++ b/packages/tenants/src/repository/TenantRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { TenantRecord } from './TenantRecord' diff --git a/packages/tenants/src/repository/TenantRoutingRepository.ts b/packages/tenants/src/repository/TenantRoutingRepository.ts index b44ca7a182..672dc5d6a5 100644 --- a/packages/tenants/src/repository/TenantRoutingRepository.ts +++ b/packages/tenants/src/repository/TenantRoutingRepository.ts @@ -1,6 +1,6 @@ import type { AgentContext, Kms } from '@credo-ts/core' -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { TenantRoutingRecord } from './TenantRoutingRecord' diff --git a/packages/tenants/src/repository/__tests__/TenantRoutingRepository.test.ts b/packages/tenants/src/repository/__tests__/TenantRoutingRepository.test.ts index b2e86b123e..82efffae2c 100644 --- a/packages/tenants/src/repository/__tests__/TenantRoutingRepository.test.ts +++ b/packages/tenants/src/repository/__tests__/TenantRoutingRepository.test.ts @@ -5,9 +5,9 @@ import { TenantRoutingRecord } from '../TenantRoutingRecord' import { TenantRoutingRepository } from '../TenantRoutingRepository' const storageServiceMock = { - findByQuery: jest.fn(), + findByQuery: vi.fn(), } as unknown as StorageService -const eventEmitter = jest.fn() as unknown as EventEmitter +const eventEmitter = vi.fn() as unknown as EventEmitter const agentContext = getAgentContext({ registerInstances: [ [ @@ -23,7 +23,7 @@ const tenantRoutingRepository = new TenantRoutingRepository(storageServiceMock, describe('TenantRoutingRepository', () => { afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('findByRecipientKey', () => { diff --git a/packages/tenants/src/services/__tests__/TenantService.test.ts b/packages/tenants/src/services/__tests__/TenantService.test.ts index 54c6530468..96103c4b4f 100644 --- a/packages/tenants/src/services/__tests__/TenantService.test.ts +++ b/packages/tenants/src/services/__tests__/TenantService.test.ts @@ -1,14 +1,15 @@ import { Kms } from '@credo-ts/core' +import type { MockedClassConstructor } from '../../../../../tests/types' import { getAgentContext, mockFunction } from '../../../../core/tests/helpers' import { TenantRecord, TenantRoutingRecord } from '../../repository' import { TenantRepository } from '../../repository/TenantRepository' import { TenantRoutingRepository } from '../../repository/TenantRoutingRepository' import { TenantRecordService } from '../TenantRecordService' -jest.mock('../../repository/TenantRepository') -const TenantRepositoryMock = TenantRepository as jest.Mock -jest.mock('../../repository/TenantRoutingRepository') -const TenantRoutingRepositoryMock = TenantRoutingRepository as jest.Mock +vi.mock('../../repository/TenantRepository') +const TenantRepositoryMock = TenantRepository as MockedClassConstructor +vi.mock('../../repository/TenantRoutingRepository') +const TenantRoutingRepositoryMock = TenantRoutingRepository as MockedClassConstructor const tenantRepository = new TenantRepositoryMock() const tenantRoutingRepository = new TenantRoutingRepositoryMock() @@ -18,7 +19,7 @@ const tenantRecordService = new TenantRecordService(tenantRepository, tenantRout describe('TenantRecordService', () => { afterEach(() => { - jest.clearAllMocks() + vi.clearAllMocks() }) describe('createTenant', () => { @@ -40,7 +41,7 @@ describe('TenantRecordService', () => { describe('getTenantById', () => { test('returns value from tenant repository get by id', async () => { - const tenantRecord = jest.fn() as unknown as TenantRecord + const tenantRecord = vi.fn() as unknown as TenantRecord mockFunction(tenantRepository.getById).mockResolvedValue(tenantRecord) const returnedTenantRecord = await tenantRecordService.getTenantById(agentContext, 'tenantId') @@ -101,7 +102,7 @@ describe('TenantRecordService', () => { describe('findTenantRoutingRecordByRecipientKey', () => { test('returns value from tenant routing repository findByRecipientKey', async () => { - const tenantRoutingRecord = jest.fn() as unknown as TenantRoutingRecord + const tenantRoutingRecord = vi.fn() as unknown as TenantRoutingRecord mockFunction(tenantRoutingRepository.findByRecipientKey).mockResolvedValue(tenantRoutingRecord) const recipientKey = Kms.PublicJwk.fromFingerprint('z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL') diff --git a/packages/tenants/src/updates/0.4-0.5/__tests__/tenantRecord.test.ts b/packages/tenants/src/updates/0.4-0.5/__tests__/tenantRecord.test.ts index fea3d8b657..e4e96893b3 100644 --- a/packages/tenants/src/updates/0.4-0.5/__tests__/tenantRecord.test.ts +++ b/packages/tenants/src/updates/0.4-0.5/__tests__/tenantRecord.test.ts @@ -1,5 +1,6 @@ import { Agent, JsonTransformer } from '@credo-ts/core' +import type { MockedClassConstructor } from '../../../../../../tests/types' import { getAgentConfig, getAgentContext, mockFunction } from '../../../../../core/tests' import { TenantRecord } from '../../../repository' import { TenantRepository } from '../../../repository/TenantRepository' @@ -8,25 +9,24 @@ import * as testModule from '../tenantRecord' const agentConfig = getAgentConfig('Tenants Migration - Tenant Record - 0.4-0.5.0') const agentContext = getAgentContext() -TenantRepository -jest.mock('../../../repository/TenantRepository') -const TenantRepositoryMock = TenantRepository as jest.Mock +vi.mock('../../../repository/TenantRepository') +const TenantRepositoryMock = TenantRepository as MockedClassConstructor const tenantRepository = new TenantRepositoryMock() -jest.mock('../../../../../core/src/agent/Agent', () => { +vi.mock('../../../../../core/src/agent/Agent', () => { return { - Agent: jest.fn(() => ({ + Agent: vi.fn(() => ({ config: agentConfig, context: agentContext, dependencyManager: { - resolve: jest.fn(() => tenantRepository), + resolve: vi.fn(() => tenantRepository), }, })), } }) // Mock typed object -const AgentMock = Agent as jest.Mock +const AgentMock = Agent as MockedClassConstructor describe('0.4-0.5 | Tenants Migration | Tenant Record', () => { let agent: Agent diff --git a/packages/tenants/src/updates/__tests__/0.4.test.ts b/packages/tenants/src/updates/__tests__/0.4.test.ts index 34aed7271d..07a12b1f82 100644 --- a/packages/tenants/src/updates/__tests__/0.4.test.ts +++ b/packages/tenants/src/updates/__tests__/0.4.test.ts @@ -9,13 +9,13 @@ import { TenantsModule } from '../../TenantsModule' // Backup date / time is the unique identifier for a backup, needs to be unique for every test const backupDate = new Date('2023-11-23T22:50:20.522Z') -jest.useFakeTimers().setSystemTime(backupDate) +vi.useFakeTimers().setSystemTime(backupDate) describe('UpdateAssistant | Tenants | v0.4 - v0.5', () => { it('should correctly update the tenant records', async () => { // We need to mock the uuid generation to make sure we generate consistent uuids for the new records created. let uuidCounter = 1 - const uuidSpy = jest.spyOn(utils, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) + const uuidSpy = vi.spyOn(utils, 'uuid').mockImplementation(() => `${uuidCounter++}-4e4f-41d9-94c4-f49351b811f1`) const tenantRecordsString = readFileSync(path.join(__dirname, '__fixtures__/tenants-no-label-tag-0.4.json'), 'utf8') diff --git a/packages/tenants/src/updates/__tests__/__snapshots__/0.4.test.ts.snap b/packages/tenants/src/updates/__tests__/__snapshots__/0.4.test.ts.snap index 2979230314..24c65f453c 100644 --- a/packages/tenants/src/updates/__tests__/__snapshots__/0.4.test.ts.snap +++ b/packages/tenants/src/updates/__tests__/__snapshots__/0.4.test.ts.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`UpdateAssistant | Tenants | v0.4 - v0.5 should correctly update the tenant records 1`] = ` +exports[`UpdateAssistant | Tenants | v0.4 - v0.5 > should correctly update the tenant records 1`] = ` { "1-4e4f-41d9-94c4-f49351b811f1": { "id": "1-4e4f-41d9-94c4-f49351b811f1", diff --git a/packages/tenants/tests/setup.ts b/packages/tenants/tests/setup.ts deleted file mode 100644 index 78143033f2..0000000000 --- a/packages/tenants/tests/setup.ts +++ /dev/null @@ -1,3 +0,0 @@ -import 'reflect-metadata' - -jest.setTimeout(120000) diff --git a/packages/tenants/tsconfig.build.json b/packages/tenants/tsconfig.build.json deleted file mode 100644 index 9c30e30bd2..0000000000 --- a/packages/tenants/tsconfig.build.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - - "compilerOptions": { - "outDir": "./build" - }, - - "include": ["src/**/*"] -} diff --git a/packages/tenants/tsconfig.json b/packages/tenants/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/packages/tenants/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/packages/tenants/tsdown.config.ts b/packages/tenants/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/tenants/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/packages/webvh/jest.config.ts b/packages/webvh/jest.config.ts deleted file mode 100644 index 51708ede32..0000000000 --- a/packages/webvh/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: [], -} - -export default config diff --git a/packages/webvh/package.json b/packages/webvh/package.json index 0f299aff84..4c020ca4bd 100644 --- a/packages/webvh/package.json +++ b/packages/webvh/package.json @@ -1,23 +1,31 @@ { "name": "@credo-ts/webvh", + "exports": { + "cli": "./build/index.mjs", + "import": "./src/index.ts" + }, "version": "0.5.13", "description": "Credo WebVH DID method implementation", - "main": "build/index.js", - "types": "build/index.d.ts", "files": ["build"], + "license": "Apache-2.0", "publishConfig": { - "main": "build/index", - "types": "build/index", - "access": "public" + "access": "public", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "module": "./build/index.mjs", + "exports": { + ".": { + "import": "./build/index.mjs", + "require": "./build/index.js", + "types": "./build/index.d.ts" + }, + "./package.json": "./package.json" + } }, - "license": "Apache-2.0", + "scripts": { - "build": "pnpm run clean && pnpm run compile", - "clean": "rimraf -rf ./build", - "compile": "tsc -p tsconfig.build.json", - "prepublishOnly": "pnpm run build", - "test": "jest", - "test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand --config jest.config.js" + "build": "tsdown --config-loader unconfig", + "prepublishOnly": "pnpm run build" }, "dependencies": { "@credo-ts/anoncreds": "workspace:*", @@ -29,7 +37,6 @@ "tsyringe": "^4.8.0" }, "devDependencies": { - "rimraf": "^4.4.0", "typescript": "~5.5.2" } } diff --git a/packages/webvh/src/anoncreds/services/__tests__/WebVhAnonCredsRegistry.test.ts b/packages/webvh/src/anoncreds/services/__tests__/WebVhAnonCredsRegistry.test.ts index f43818dc7b..0265b30d71 100644 --- a/packages/webvh/src/anoncreds/services/__tests__/WebVhAnonCredsRegistry.test.ts +++ b/packages/webvh/src/anoncreds/services/__tests__/WebVhAnonCredsRegistry.test.ts @@ -24,10 +24,10 @@ import { } from './mock-resources' // Mock the WebvhDidResolver -const mockResolveResource = jest.fn() -jest.mock('../../../dids/WebvhDidResolver', () => { +const mockResolveResource = vi.fn() +vi.mock('../../../dids/WebvhDidResolver', () => { return { - WebvhDidResolver: jest.fn().mockImplementation(() => { + WebvhDidResolver: vi.fn().mockImplementation(() => { return { resolveResource: mockResolveResource } }), } @@ -48,7 +48,7 @@ interface DidDocumentOptions { } // Mock DidsApi -const mockResolveDidDocument = jest.fn() +const mockResolveDidDocument = vi.fn() const mockDidsApi = { resolveDidDocument: mockResolveDidDocument, } @@ -72,7 +72,7 @@ describe('WebVhAnonCredsRegistry', () => { }) // Default mock for verifyProof to return true (will be overridden in verifyProof tests) - jest.spyOn(WebVhAnonCredsRegistry.prototype, 'verifyProof').mockResolvedValue(true) + vi.spyOn(WebVhAnonCredsRegistry.prototype, 'verifyProof').mockResolvedValue(true) registry = new WebVhAnonCredsRegistry() }) @@ -198,7 +198,7 @@ describe('WebVhAnonCredsRegistry', () => { it('should return resolutionMetadata with error if proof validation fails (placeholder)', async () => { // Use a type assertion to access the private method for mocking - const verifyProofSpy = jest.spyOn(WebVhAnonCredsRegistry.prototype, 'verifyProof') + const verifyProofSpy = vi.spyOn(WebVhAnonCredsRegistry.prototype, 'verifyProof') verifyProofSpy.mockResolvedValueOnce(false) const schemaContent = { attrNames: ['a'], name: 'N', version: 'V' } @@ -373,7 +373,7 @@ describe('WebVhAnonCredsRegistry', () => { mockResolveResource.mockResolvedValue(mockResolverResponse) // We need to mock verifyProof to return true for this test - const verifyProofSpy = jest.spyOn(WebVhAnonCredsRegistry.prototype, 'verifyProof') + const verifyProofSpy = vi.spyOn(WebVhAnonCredsRegistry.prototype, 'verifyProof') verifyProofSpy.mockResolvedValue(true) const result = await registry.getRevocationRegistryDefinition(agentContext, revRegDefId) @@ -400,7 +400,7 @@ describe('WebVhAnonCredsRegistry', () => { describe('verifyProof', () => { beforeEach(() => { // Clear the default verifyProof mock for these tests - jest.restoreAllMocks() + vi.restoreAllMocks() // Mock successful DID resolution mockResolveDidDocument.mockResolvedValue( diff --git a/packages/webvh/src/anoncreds/services/__tests__/WebVhTransform.test.ts b/packages/webvh/src/anoncreds/services/__tests__/WebVhTransform.test.ts index 3f5b8714a2..178e1c5c00 100644 --- a/packages/webvh/src/anoncreds/services/__tests__/WebVhTransform.test.ts +++ b/packages/webvh/src/anoncreds/services/__tests__/WebVhTransform.test.ts @@ -19,7 +19,7 @@ describe('WebVhTransform', () => { expect(Array.isArray(resource.content.attrNames)).toBe(true) expect(resource.content.attrNames).toContain(mockSchemaResource.content.attrNames[0]) } else { - fail('Content should be a schema') + throw new Error('Content should be a schema') } }) @@ -36,7 +36,7 @@ describe('WebVhTransform', () => { expect(resource.content.tag).toBe(mockCredDefResource.content.tag) expect(resource.content.schemaId).toBe(mockSchemaResource.id) } else { - fail('Content should be a credential definition') + throw new Error('Content should be a credential definition') } }) }) diff --git a/packages/webvh/src/cryptosuites/eddsa-jcs-2022.ts b/packages/webvh/src/cryptosuites/eddsa-jcs-2022.ts index 9693ed889a..5630dc8076 100644 --- a/packages/webvh/src/cryptosuites/eddsa-jcs-2022.ts +++ b/packages/webvh/src/cryptosuites/eddsa-jcs-2022.ts @@ -9,7 +9,7 @@ import { } from '@credo-ts/core' import { canonicalize } from 'json-canonicalize' import { WebVhResource } from '../anoncreds/utils/transform' -import { ProofOptions } from './types' +import type { ProofOptions } from './types' export class EddsaJcs2022Cryptosuite { didApi: DidsApi diff --git a/packages/webvh/src/dids/WebvhDidCrypto.ts b/packages/webvh/src/dids/WebvhDidCrypto.ts index ad3f1f7b15..39cbb7234d 100644 --- a/packages/webvh/src/dids/WebvhDidCrypto.ts +++ b/packages/webvh/src/dids/WebvhDidCrypto.ts @@ -1,5 +1,5 @@ import { type AgentContext, Kms } from '@credo-ts/core' -import { Verifier } from 'didwebvh-ts' +import type { Verifier } from 'didwebvh-ts' export class WebvhDidCrypto implements Verifier { private agentContext: AgentContext diff --git a/packages/webvh/src/dids/__tests__/WebvhDidResolver.integration.test.ts b/packages/webvh/src/dids/__tests__/WebvhDidResolver.integration.test.ts index eba8b93b3b..801f3aca92 100644 --- a/packages/webvh/src/dids/__tests__/WebvhDidResolver.integration.test.ts +++ b/packages/webvh/src/dids/__tests__/WebvhDidResolver.integration.test.ts @@ -20,9 +20,9 @@ interface AttestedResourceContent { } // Mock the `didwebvh-ts` dependency so that `resolveDID` never performs a network call. -jest.mock('didwebvh-ts', () => { +vi.mock('didwebvh-ts', () => { return { - resolveDID: jest.fn(async (did: string) => { + resolveDID: vi.fn(async (did: string) => { return { doc: { '@context': ['https://www.w3.org/ns/did/v1'], @@ -116,7 +116,7 @@ describe('WebvhDidResolver Integration Tests', () => { agentContext = getAgentContext({ agentConfig }) // Mock the agentContext's fetch method - agentContext.config.agentDependencies.fetch = jest.fn(async (input: string | URL | Request): Promise => { + agentContext.config.agentDependencies.fetch = vi.fn(async (input: string | URL | Request): Promise => { const url = typeof input === 'string' ? input : String(input) const stub = createStubContent(url) diff --git a/packages/webvh/tests/webvh-did-resolver.test.ts b/packages/webvh/tests/webvh-did-resolver.test.ts index c845df3c94..14892e81b4 100644 --- a/packages/webvh/tests/webvh-did-resolver.test.ts +++ b/packages/webvh/tests/webvh-did-resolver.test.ts @@ -7,8 +7,8 @@ import { getWebvhModules } from './setupWebvhModule' import { validDid } from './utils' // Simplified mock -jest.mock('didwebvh-ts', () => ({ - resolveDID: jest.fn().mockResolvedValue({ +vi.mock('didwebvh-ts', () => ({ + resolveDID: vi.fn().mockResolvedValue({ doc: { '@context': ['https://www.w3.org/ns/did/v1'], id: 'did:webvh:QmdmPkUdYzbr9txmx8gM2rsHPgr5L6m3gHjJGAf4vUFoGE:domain.example', @@ -24,17 +24,17 @@ jest.mock('didwebvh-ts', () => ({ }, did: 'did:webvh:QmdmPkUdYzbr9txmx8gM2rsHPgr5L6m3gHjJGAf4vUFoGE:domain.example', }), - createDID: jest.fn().mockResolvedValue({ + createDID: vi.fn().mockResolvedValue({ did: 'did:webvh:QmdmPkUdYzbr9txmx8gM2rsHPgr5L6m3gHjJGAf4vUFoGE:domain.example', }), - updateDID: jest.fn().mockResolvedValue({ + updateDID: vi.fn().mockResolvedValue({ did: 'did:webvh:QmdmPkUdYzbr9txmx8gM2rsHPgr5L6m3gHjJGAf4vUFoGE:domain.example', }), - AbstractCrypto: jest.fn().mockImplementation(() => ({ - sign: jest.fn().mockResolvedValue({ + AbstractCrypto: vi.fn().mockImplementation(() => ({ + sign: vi.fn().mockResolvedValue({ signature: 'signature', }), - verify: jest.fn().mockResolvedValue(true), + verify: vi.fn().mockResolvedValue(true), })), })) diff --git a/packages/webvh/tsconfig.build.json b/packages/webvh/tsconfig.build.json deleted file mode 100644 index 2b75d0adab..0000000000 --- a/packages/webvh/tsconfig.build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.build.json", - "compilerOptions": { - "outDir": "./build" - }, - "include": ["src/**/*"] -} diff --git a/packages/webvh/tsconfig.json b/packages/webvh/tsconfig.json deleted file mode 100644 index fc7261ba8c..0000000000 --- a/packages/webvh/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"], - "resolveJsonModule": true - } -} diff --git a/packages/webvh/tsdown.config.ts b/packages/webvh/tsdown.config.ts new file mode 100644 index 0000000000..02472fe2d6 --- /dev/null +++ b/packages/webvh/tsdown.config.ts @@ -0,0 +1,4 @@ +import { defineConfig } from 'tsdown' +import config from '../../tsdown.config.base' + +export default defineConfig(config) diff --git a/patches/drizzle-kit.patch b/patches/drizzle-kit.patch new file mode 100644 index 0000000000..0e2e9b1a0e --- /dev/null +++ b/patches/drizzle-kit.patch @@ -0,0 +1,14 @@ +diff --git a/api.mjs b/api.mjs +index df1c48e05be38829e97f175445c374ab28334dc4..8e3784074418d89256cdc3783fe8bdaaa0528099 100644 +--- a/api.mjs ++++ b/api.mjs +@@ -1,3 +1,9 @@ ++// Allows drizzle-kit/api to be used in Node ESM context. ++// See issue: https://github.com/drizzle-team/drizzle-orm/issues/2853 ++// Similar to this fix: https://github.com/hey-api/openapi-ts/pull/1086/files ++import { createRequire } from 'module' ++const require = createRequire(import.meta.url) ++ + var __create = Object.create; + var __defProp = Object.defineProperty; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 047fe24cf6..1f2e5caa49 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,17 +58,11 @@ catalogs: specifier: ^14.0.5 version: 14.0.5 reflect-metadata: - specifier: ^0.2.2 + specifier: 0.2.2 version: 0.2.2 - rimraf: - specifier: ^6.0.1 - version: 6.0.1 rxjs: specifier: ^7.8.2 version: 7.8.2 - ts-node: - specifier: ^10.9.2 - version: 10.9.2 tsyringe: specifier: ^4.10.0 version: 4.10.0 @@ -84,6 +78,12 @@ catalogs: overrides: undici: ^6.20.1 + vite: npm:rolldown-vite@latest + +patchedDependencies: + drizzle-kit: + hash: 990e481b6a673abca15a32df7ea76ac63bfdb9a3fc8657c42db0ce593c3f5d50 + path: patches/drizzle-kit.patch importers: @@ -128,6 +128,9 @@ importers: '@credo-ts/drpc': specifier: workspace:* version: link:packages/drpc + '@credo-ts/hedera': + specifier: workspace:* + version: link:packages/hedera '@credo-ts/indy-sdk-to-askar-migration': specifier: workspace:* version: link:packages/indy-sdk-to-askar-migration @@ -155,9 +158,6 @@ importers: '@credo-ts/webvh': specifier: workspace:* version: link:packages/webvh - '@jest/types': - specifier: ^29.6.3 - version: 29.6.3 '@openwallet-foundation/askar-nodejs': specifier: 'catalog:' version: 0.4.2 @@ -167,9 +167,6 @@ importers: '@types/express': specifier: 'catalog:' version: 4.17.23 - '@types/jest': - specifier: ^30.0.0 - version: 30.0.0 '@types/node': specifier: 'catalog:' version: 20.19.2 @@ -182,33 +179,33 @@ importers: '@types/ws': specifier: 'catalog:' version: 8.18.1 + '@vitest/coverage-v8': + specifier: 3.2.4 + version: 3.2.4(vitest@3.2.4(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3)) cors: specifier: ^2.8.5 version: 2.8.5 drizzle-kit: specifier: ^0.31.4 - version: 0.31.4 + version: 0.31.4(patch_hash=990e481b6a673abca15a32df7ea76ac63bfdb9a3fc8657c42db0ce593c3f5d50) express: specifier: 'catalog:' version: 4.21.2 - jest: - specifier: ^30.0.3 - version: 30.0.3(@types/node@20.19.2)(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3)) nock: specifier: 'catalog:' version: 14.0.5 + reflect-metadata: + specifier: 'catalog:' + version: 0.2.2 rxjs: specifier: 'catalog:' version: 7.8.2 supertest: - specifier: ^7.1.3 - version: 7.1.3 - ts-jest: - specifier: ^29.4.0 - version: 29.4.0(@babel/core@7.27.7)(@jest/transform@30.0.2)(@jest/types@29.6.3)(babel-jest@30.0.2(@babel/core@7.27.7))(esbuild@0.25.5)(jest-util@30.0.2)(jest@30.0.3(@types/node@20.19.2)(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3)))(typescript@5.8.3) - ts-node: - specifier: 'catalog:' - version: 10.9.2(@types/node@20.19.2)(typescript@5.8.3) + specifier: ^7.1.4 + version: 7.1.4 + tsdown: + specifier: ^0.15.6 + version: 0.15.6(oxc-resolver@11.9.0)(typescript@5.8.3) tsyringe: specifier: 'catalog:' version: 4.10.0 @@ -218,6 +215,15 @@ importers: undici: specifier: ^6.20.1 version: 6.21.0 + vite: + specifier: npm:rolldown-vite@latest + version: rolldown-vite@7.1.16(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3) + vite-node: + specifier: ^3.2.4 + version: 3.2.4(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3) + vitest: + specifier: ^3.2.4 + version: 3.2.4(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3) ws: specifier: 'catalog:' version: 8.18.3 @@ -276,9 +282,6 @@ importers: figlet: specifier: ^1.5.2 version: 1.7.0 - ts-node: - specifier: 'catalog:' - version: 10.9.2(@types/node@20.19.2)(typescript@5.8.3) demo-openid: dependencies: @@ -337,9 +340,6 @@ importers: figlet: specifier: ^1.5.2 version: 1.7.0 - ts-node: - specifier: 'catalog:' - version: 10.9.2(@types/node@20.19.2)(typescript@5.8.3) tsx: specifier: ^4.19.4 version: 4.20.3 @@ -365,9 +365,6 @@ importers: reflect-metadata: specifier: 'catalog:' version: 0.2.2 - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -405,9 +402,6 @@ importers: '@hyperledger/anoncreds-shared': specifier: 'catalog:' version: 0.3.3 - rimraf: - specifier: 'catalog:' - version: 6.0.1 rxjs: specifier: 'catalog:' version: 7.8.2 @@ -451,9 +445,6 @@ importers: reflect-metadata: specifier: 'catalog:' version: 0.2.2 - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -473,9 +464,6 @@ importers: '@openwallet-foundation/askar-shared': specifier: 'catalog:' version: 0.4.2 - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -483,20 +471,20 @@ importers: packages/cheqd: dependencies: '@cheqd/sdk': - specifier: ^5.2.1 - version: 5.2.1 + specifier: npm:@cheqd/sdk-esm@^5.3.4 + version: '@cheqd/sdk-esm@5.3.4' '@cheqd/ts-proto': - specifier: ~2.4.1 - version: 2.4.1 + specifier: ^4.1.1 + version: 4.1.1 '@cosmjs/crypto': - specifier: ~0.30.1 - version: 0.30.1 + specifier: ^0.33.1 + version: 0.33.1 '@cosmjs/proto-signing': - specifier: ~0.30.1 - version: 0.30.1 + specifier: ^0.33.1 + version: 0.33.1 '@cosmjs/stargate': - specifier: ~0.30.1 - version: 0.30.1 + specifier: ^0.33.1 + version: 0.33.1 '@credo-ts/anoncreds': specifier: workspace:* version: link:../anoncreds @@ -519,9 +507,6 @@ importers: specifier: 'catalog:' version: 4.10.0 devDependencies: - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -643,8 +628,8 @@ importers: specifier: 'catalog:' version: 4.10.0 uuid: - specifier: ^11.1.0 - version: 11.1.0 + specifier: ^13.0.0 + version: 13.0.0 varint: specifier: ^6.0.0 version: 6.0.0 @@ -670,9 +655,6 @@ importers: nock: specifier: 'catalog:' version: 14.0.5 - rimraf: - specifier: 'catalog:' - version: 6.0.1 tslog: specifier: ^4.8.2 version: 4.9.3 @@ -713,9 +695,6 @@ importers: reflect-metadata: specifier: 'catalog:' version: 0.2.2 - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -754,7 +733,7 @@ importers: version: 0.14.1 drizzle-kit: specifier: ^0.31.4 - version: 0.31.4 + version: 0.31.4(patch_hash=990e481b6a673abca15a32df7ea76ac63bfdb9a3fc8657c42db0ce593c3f5d50) shell: specifier: ^0.12.0 version: 0.12.0 @@ -780,12 +759,6 @@ importers: pg: specifier: ^8.16.3 version: 8.16.3 - rimraf: - specifier: 'catalog:' - version: 6.0.1 - ts-node: - specifier: 'catalog:' - version: 10.9.2(@types/node@20.19.2)(typescript@5.8.3) typescript: specifier: 'catalog:' version: 5.8.3 @@ -811,9 +784,6 @@ importers: reflect-metadata: specifier: 'catalog:' version: 0.2.2 - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -860,9 +830,6 @@ importers: '@hyperledger/anoncreds-nodejs': specifier: ^0.3.1 version: 0.3.3 - rimraf: - specifier: ^4.4.0 - version: 4.4.1 zstd-napi: specifier: ^0.0.10 version: 0.0.10 @@ -888,9 +855,6 @@ importers: '@openwallet-foundation/askar-shared': specifier: 'catalog:' version: 0.4.2 - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -919,9 +883,6 @@ importers: '@types/ref-struct-di': specifier: ^1.1.10 version: 1.1.12 - rimraf: - specifier: 'catalog:' - version: 6.0.1 rxjs: specifier: 'catalog:' version: 7.8.2 @@ -965,9 +926,6 @@ importers: nock: specifier: 'catalog:' version: 14.0.5 - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -989,9 +947,15 @@ importers: '@openid4vc/utils': specifier: 0.3.0-alpha-20251001121503 version: 0.3.0-alpha-20251001121503 + '@types/express': + specifier: 'catalog:' + version: 4.17.23 class-transformer: specifier: 'catalog:' version: 0.5.1 + express: + specifier: 'catalog:' + version: 4.21.2 rxjs: specifier: 'catalog:' version: 7.8.2 @@ -1002,18 +966,9 @@ importers: '@credo-ts/tenants': specifier: workspace:* version: link:../tenants - '@types/express': - specifier: 'catalog:' - version: 4.17.23 - express: - specifier: 'catalog:' - version: 4.21.2 nock: specifier: 'catalog:' version: 14.0.5 - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -1042,9 +997,6 @@ importers: reflect-metadata: specifier: 'catalog:' version: 0.2.2 - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -1073,9 +1025,6 @@ importers: react-native-get-random-values: specifier: ^1.8.0 version: 1.11.0(react-native@0.79.4(@babel/core@7.27.7)(@react-native-community/cli@10.2.7(@babel/core@7.27.7))(react@18.3.1)) - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -1089,9 +1038,6 @@ importers: specifier: ^5.6.1 version: 5.6.1 devDependencies: - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -1114,9 +1060,6 @@ importers: reflect-metadata: specifier: 'catalog:' version: 0.2.2 - rimraf: - specifier: 'catalog:' - version: 6.0.1 typescript: specifier: 'catalog:' version: 5.8.3 @@ -1145,9 +1088,6 @@ importers: specifier: ^4.8.0 version: 4.8.0 devDependencies: - rimraf: - specifier: ^4.4.0 - version: 4.4.1 typescript: specifier: ~5.5.2 version: 5.5.4 @@ -1182,9 +1122,6 @@ importers: '@types/ws': specifier: 'catalog:' version: 8.18.1 - ts-node: - specifier: 'catalog:' - version: 10.9.2(@types/node@20.19.2)(typescript@5.8.3) samples/tails: dependencies: @@ -1209,10 +1146,6 @@ importers: multer: specifier: ^2.0.1 version: 2.0.1 - devDependencies: - ts-node: - specifier: 'catalog:' - version: 10.9.2(@types/node@20.19.2)(typescript@5.8.3) packages: @@ -1260,10 +1193,6 @@ packages: '@babel/code-frame@7.10.4': resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -1279,14 +1208,14 @@ packages: '@babel/generator@7.2.0': resolution: {integrity: sha512-BA75MVfRlFQG2EZgFYIwyT1r6xSkwfP2bdkY/kLZusEYWiJs4xCowab/alaEaT0wSvmVuXGqiefeBlP+7V1yKg==} - '@babel/generator@7.26.3': - resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.27.5': resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} @@ -1415,13 +1344,13 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.3': - resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} + '@babel/parser@7.27.7': + resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.27.7': - resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==} + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} hasBin: true @@ -1551,12 +1480,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-decorators@7.24.7': resolution: {integrity: sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==} engines: {node: '>=6.9.0'} @@ -1643,12 +1566,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-top-level-await@7.14.5': resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} @@ -2066,18 +1983,10 @@ packages: resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.9': - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} - engines: {node: '>=6.9.0'} - '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.4': - resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.7': resolution: {integrity: sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==} engines: {node: '>=6.9.0'} @@ -2090,8 +1999,13 @@ packages: resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==} engines: {node: '>=6.9.0'} - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} '@biomejs/biome@1.9.4': resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} @@ -2146,11 +2060,8 @@ packages: cpu: [x64] os: [win32] - '@bufbuild/protobuf@2.2.3': - resolution: {integrity: sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==} - - '@bufbuild/protobuf@2.2.5': - resolution: {integrity: sha512-/g5EzJifw5GF8aren8wZ/G5oMuPoGeS6MQD3ca8ddcvdXR5UELUfdTZITCGNhNXynY/AYl3Z4plmxdj/tRl/hQ==} + '@bufbuild/protobuf@2.9.0': + resolution: {integrity: sha512-rnJenoStJ8nvmt9Gzye8nkYd6V22xUAnu4086ER7h1zJ508vStko4pMvDeQ446ilDTFpV5wnoc5YS7XvMwwMqA==} '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': resolution: {integrity: sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==} @@ -2237,92 +2148,48 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} - '@cheqd/sdk@5.2.1': - resolution: {integrity: sha512-R6lpEEF0fTpDr4yebT/WUIs7AUgvVbR/V3RMGudcq2nVRv248fD2zpcJroKOpUKsoTUCa9Fw5PkWz01VvdmUEw==} - engines: {node: '>=20.0.0'} - - '@cheqd/ts-proto@2.4.1': - resolution: {integrity: sha512-tT9MvXjk+GmJXWjFKIMwhXWuStjdhECSBSrx8uyt1cJKVBtFpRBrFLEomA7XIclmfwL6z74YmhM7lEtf5Bn8vg==} - engines: {node: '>=20'} - - '@cheqd/ts-proto@4.0.2': - resolution: {integrity: sha512-8wFc+PDRwd5XO/ep3JyYBoav6BuOFba2a5ifFmbmBQO35sFaptsGEH7y9mh46V6+NFtI+F914avRrtWCFGf1Jw==} - engines: {node: '>=20.0.0'} + '@cheqd/sdk-esm@5.3.4': + resolution: {integrity: sha512-4bfjSE52BxFh05bkMWnruWXVEm9Ennrbs0EiWelDMpqedmpOe7SfCHxNXS02Pq0j6Px05H1MyQplDOHqfTZ+7g==} + engines: {node: '>=22.0.0'} - '@confio/ics23@0.6.8': - resolution: {integrity: sha512-wB6uo+3A50m0sW/EWcU64xpV/8wShZ6bMTa7pF8eYsTrSkQA7oLUIJcs/wb8g4y2Oyq701BaGiO6n/ak5WXO1w==} - deprecated: Unmaintained. The codebase for this package was moved to https://github.com/cosmos/ics23 but then the JS implementation was removed in https://github.com/cosmos/ics23/pull/353. Please consult the maintainers of https://github.com/cosmos for further assistance. - - '@cosmjs/amino@0.30.1': - resolution: {integrity: sha512-yNHnzmvAlkETDYIpeCTdVqgvrdt1qgkOXwuRVi8s27UKI5hfqyE9fJ/fuunXE6ZZPnKkjIecDznmuUOMrMvw4w==} + '@cheqd/ts-proto@4.1.1': + resolution: {integrity: sha512-iaz1sSlyTVT6u82vbIDuTk3ytiN31CQEc62xWfKeH/XaJE8RZQXYsjbtk5sIoXKJ63pb65XoHLY7JVOsqmRhFA==} + engines: {node: '>=22.0.0'} '@cosmjs/amino@0.33.1': resolution: {integrity: sha512-WfWiBf2EbIWpwKG9AOcsIIkR717SY+JdlXM/SL/bI66BdrhniAF+/ZNis9Vo9HF6lP2UU5XrSmFA4snAvEgdrg==} - '@cosmjs/crypto@0.30.1': - resolution: {integrity: sha512-rAljUlake3MSXs9xAm87mu34GfBLN0h/1uPPV6jEwClWjNkAMotzjC0ab9MARy5FFAvYHL3lWb57bhkbt2GtzQ==} - '@cosmjs/crypto@0.33.1': resolution: {integrity: sha512-U4kGIj/SNBzlb2FGgA0sMR0MapVgJUg8N+oIAiN5+vl4GZ3aefmoL1RDyTrFS/7HrB+M+MtHsxC0tvEu4ic/zA==} - - '@cosmjs/encoding@0.30.1': - resolution: {integrity: sha512-rXmrTbgqwihORwJ3xYhIgQFfMSrwLu1s43RIK9I8EBudPx3KmnmyAKzMOVsRDo9edLFNuZ9GIvysUCwQfq3WlQ==} + deprecated: This uses elliptic for cryptographic operations, which contains several security-relevant bugs. To what degree this affects your application is something you need to carefully investigate. See https://github.com/cosmos/cosmjs/issues/1708 for further pointers. Starting with version 0.34.0 the cryptographic library has been replaced. However, private keys might still be at risk. '@cosmjs/encoding@0.33.1': resolution: {integrity: sha512-nuNxf29fUcQE14+1p//VVQDwd1iau5lhaW/7uMz7V2AH3GJbFJoJVaKvVyZvdFk+Cnu+s3wCqgq4gJkhRCJfKw==} - '@cosmjs/json-rpc@0.30.1': - resolution: {integrity: sha512-pitfC/2YN9t+kXZCbNuyrZ6M8abnCC2n62m+JtU9vQUfaEtVsgy+1Fk4TRQ175+pIWSdBMFi2wT8FWVEE4RhxQ==} - '@cosmjs/json-rpc@0.33.1': resolution: {integrity: sha512-T6VtWzecpmuTuMRGZWuBYHsMF/aznWCYUt/cGMWNSz7DBPipVd0w774PKpxXzpEbyt5sr61NiuLXc+Az15S/Cw==} - '@cosmjs/math@0.30.1': - resolution: {integrity: sha512-yaoeI23pin9ZiPHIisa6qqLngfnBR/25tSaWpkTm8Cy10MX70UF5oN4+/t1heLaM6SSmRrhk3psRkV4+7mH51Q==} - '@cosmjs/math@0.33.1': resolution: {integrity: sha512-ytGkWdKFCPiiBU5eqjHNd59djPpIsOjbr2CkNjlnI1Zmdj+HDkSoD9MUGpz9/RJvRir5IvsXqdE05x8EtoQkJA==} - '@cosmjs/proto-signing@0.30.1': - resolution: {integrity: sha512-tXh8pPYXV4aiJVhTKHGyeZekjj+K9s2KKojMB93Gcob2DxUjfKapFYBMJSgfKPuWUPEmyr8Q9km2hplI38ILgQ==} - '@cosmjs/proto-signing@0.33.1': resolution: {integrity: sha512-Sv4W+MxX+0LVnd+2rU4Fw1HRsmMwSVSYULj7pRkij3wnPwUlTVoJjmKFgKz13ooIlfzPrz/dnNjGp/xnmXChFQ==} - '@cosmjs/socket@0.30.1': - resolution: {integrity: sha512-r6MpDL+9N+qOS/D5VaxnPaMJ3flwQ36G+vPvYJsXArj93BjgyFB7BwWwXCQDzZ+23cfChPUfhbINOenr8N2Kow==} - '@cosmjs/socket@0.33.1': resolution: {integrity: sha512-KzAeorten6Vn20sMiM6NNWfgc7jbyVo4Zmxev1FXa5EaoLCZy48cmT3hJxUJQvJP/lAy8wPGEjZ/u4rmF11x9A==} - '@cosmjs/stargate@0.30.1': - resolution: {integrity: sha512-RdbYKZCGOH8gWebO7r6WvNnQMxHrNXInY/gPHPzMjbQF6UatA6fNM2G2tdgS5j5u7FTqlCI10stNXrknaNdzog==} - '@cosmjs/stargate@0.33.1': resolution: {integrity: sha512-CnJ1zpSiaZgkvhk+9aTp5IPmgWn2uo+cNEBN8VuD9sD6BA0V4DMjqe251cNFLiMhkGtiE5I/WXFERbLPww3k8g==} - '@cosmjs/stream@0.30.1': - resolution: {integrity: sha512-Fg0pWz1zXQdoxQZpdHRMGvUH5RqS6tPv+j9Eh7Q953UjMlrwZVo0YFLC8OTf/HKVf10E4i0u6aM8D69Q6cNkgQ==} - '@cosmjs/stream@0.33.1': resolution: {integrity: sha512-bMUvEENjeQPSTx+YRzVsWT1uFIdHRcf4brsc14SOoRQ/j5rOJM/aHfsf/BmdSAnYbdOQ3CMKj/8nGAQ7xUdn7w==} - '@cosmjs/tendermint-rpc@0.30.1': - resolution: {integrity: sha512-Z3nCwhXSbPZJ++v85zHObeUggrEHVfm1u18ZRwXxFE9ZMl5mXTybnwYhczuYOl7KRskgwlB+rID0WYACxj4wdQ==} - '@cosmjs/tendermint-rpc@0.33.1': resolution: {integrity: sha512-22klDFq2MWnf//C8+rZ5/dYatr6jeGT+BmVbutXYfAK9fmODbtFcumyvB6uWaEORWfNukl8YK1OLuaWezoQvxA==} - '@cosmjs/utils@0.30.1': - resolution: {integrity: sha512-KvvX58MGMWh7xA+N+deCfunkA/ZNDvFLw4YbOmX3f/XBIkqrVY7qlotfy2aNb1kgp6h4B6Yc8YawJPDTfvWX7g==} - '@cosmjs/utils@0.33.1': resolution: {integrity: sha512-UnLHDY6KMmC+UXf3Ufyh+onE19xzEXjT4VZ504Acmk4PXxqyvG4cCPprlKUFnGUX7f0z8Or9MAOHXBx41uHBcg==} - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - '@digitalbazaar/bitstring@3.1.0': resolution: {integrity: sha512-Cii+Sl++qaexOvv3vchhgZFfSmtHPNIPzGegaq4ffPnflVXFu+V2qrJ17aL2+gfLxrlC/zazZFuAltyKTPq7eg==} engines: {node: '>=16'} @@ -2406,14 +2273,14 @@ packages: '@electric-sql/pglite@0.3.3': resolution: {integrity: sha512-JrvHOx9q0yvKEby0bK8qzGTVw6K+yEg8enxDWb2IwNKr5XZxRrBb+GNIqoAIP7yXyhRg5jcENWmdHmtnAT87vA==} - '@emnapi/core@1.4.3': - resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + '@emnapi/core@1.5.0': + resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} @@ -2948,14 +2815,6 @@ packages: '@ioredis/commands@1.2.0': resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} - engines: {node: 20 || >=22} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2976,104 +2835,26 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jest/console@30.0.2': - resolution: {integrity: sha512-krGElPU0FipAqpVZ/BRZOy0MZh/ARdJ0Nj+PiH1ykFY1+VpBlYNLjdjVA5CFKxnKR6PFqFutO4Z7cdK9BlGiDA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/core@30.0.3': - resolution: {integrity: sha512-Mgs1N+NSHD3Fusl7bOq1jyxv1JDAUwjy+0DhVR93Q6xcBP9/bAQ+oZhXb5TTnP5sQzAHgb7ROCKQ2SnovtxYtg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - '@jest/create-cache-key-function@29.7.0': resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/diff-sequences@30.0.1': - resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/environment@29.7.0': resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/environment@30.0.2': - resolution: {integrity: sha512-hRLhZRJNxBiOhxIKSq2UkrlhMt3/zVFQOAi5lvS8T9I03+kxsbflwHJEF+eXEYXCrRGRhHwECT7CDk6DyngsRA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/expect-utils@30.0.3': - resolution: {integrity: sha512-SMtBvf2sfX2agcT0dA9pXwcUrKvOSDqBY4e4iRfT+Hya33XzV35YVg+98YQFErVGA/VR1Gto5Y2+A6G9LSQ3Yg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/expect@30.0.3': - resolution: {integrity: sha512-73BVLqfCeWjYWPEQoYjiRZ4xuQRhQZU0WdgvbyXGRHItKQqg5e6mt2y1kVhzLSuZpmUnccZHbGynoaL7IcLU3A==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/fake-timers@29.7.0': resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/fake-timers@30.0.2': - resolution: {integrity: sha512-jfx0Xg7l0gmphTY9UKm5RtH12BlLYj/2Plj6wXjVW5Era4FZKfXeIvwC67WX+4q8UCFxYS20IgnMcFBcEU0DtA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/get-type@30.0.1': - resolution: {integrity: sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/globals@30.0.3': - resolution: {integrity: sha512-fIduqNyYpMeeSr5iEAiMn15KxCzvrmxl7X7VwLDRGj7t5CoHtbF+7K3EvKk32mOUIJ4kIvFRlaixClMH2h/Vaw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/pattern@30.0.1': - resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/reporters@30.0.2': - resolution: {integrity: sha512-l4QzS/oKf57F8WtPZK+vvF4Io6ukplc6XgNFu4Hd/QxaLEO9f+8dSFzUua62Oe0HKlCUjKHpltKErAgDiMJKsA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/schemas@30.0.1': - resolution: {integrity: sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/snapshot-utils@30.0.1': - resolution: {integrity: sha512-6Dpv7vdtoRiISEFwYF8/c7LIvqXD7xDXtLPNzC2xqAfBznKip0MQM+rkseKwUPUpv2PJ7KW/YsnwWXrIL2xF+A==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/source-map@30.0.1': - resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/test-result@30.0.2': - resolution: {integrity: sha512-KKMuBKkkZYP/GfHMhI+cH2/P3+taMZS3qnqqiPC1UXZTJskkCS+YU/ILCtw5anw1+YsTulDHFpDo70mmCedW8w==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - '@jest/test-sequencer@30.0.2': - resolution: {integrity: sha512-fbyU5HPka0rkalZ3MXVvq0hwZY8dx3Y6SCqR64zRmh+xXlDeFl0IdL4l9e7vp4gxEXTYHbwLFA1D+WW5CucaSw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/transform@29.7.0': resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/transform@30.0.2': - resolution: {integrity: sha512-kJIuhLMTxRF7sc0gPzPtCDib/V9KwW3I2U25b+lYCYMVqHHSrcZopS8J8H+znx9yixuFv+Iozl8raLt/4MoxrA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/types@24.9.0': resolution: {integrity: sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==} engines: {node: '>= 6'} @@ -3090,18 +2871,13 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/types@30.0.1': - resolution: {integrity: sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -3116,11 +2892,14 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@js-joda/core@5.6.3': resolution: {integrity: sha512-T1rRxzdqkEXcou0ZprN1q9yDRlvzCPLqmlNt5IIsGBzoEVgLCCYrKEwc84+TvsXuAc95VAZwtWD2zVsKPY4bcA==} @@ -3226,8 +3005,8 @@ packages: '@multiformats/base-x@4.0.1': resolution: {integrity: sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==} - '@napi-rs/wasm-runtime@0.2.11': - resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} + '@napi-rs/wasm-runtime@1.0.6': + resolution: {integrity: sha512-DXj75ewm11LIWUk198QSKUTxjyRjsBwk09MuMk5DGK+GDUtyPhhEHOGP/Xwwj3DjQXXkivoBirmOnKrLfc0+9g==} '@neon-rs/load@0.0.4': resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} @@ -3300,6 +3079,108 @@ packages: '@openwallet-foundation/askar-shared@0.4.2': resolution: {integrity: sha512-OakCxZ3ZYA8ho4ZxSl7QDQxXqR5G42CL2vtszqzisBMOr3zML63B22zpkf8Q+n2IFXt5iuKXfbuTzHBeBSHSjg==} + '@oxc-project/runtime@0.92.0': + resolution: {integrity: sha512-Z7x2dZOmznihvdvCvLKMl+nswtOSVxS2H2ocar+U9xx6iMfTp0VGIrX6a4xB1v80IwOPC7dT1LXIJrY70Xu3Jw==} + engines: {node: ^20.19.0 || >=22.12.0} + + '@oxc-project/types@0.94.0': + resolution: {integrity: sha512-+UgQT/4o59cZfH6Cp7G0hwmqEQ0wE+AdIwhikdwnhWI9Dp8CgSY081+Q3O67/wq3VJu8mgUEB93J9EHHn70fOw==} + + '@oxc-resolver/binding-android-arm-eabi@11.9.0': + resolution: {integrity: sha512-4AxaG6TkSBQ2FiC5oGZEJQ35DjsSfAbW6/AJauebq4EzIPVOIgDJCF4de+PvX/Xi9BkNw6VtJuMXJdWW97iEAA==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.9.0': + resolution: {integrity: sha512-oOEg7rUd2M6YlmRkvPcszJ6KO6TaLGN21oDdcs27gbTVYbQQtCWYbZz5jRW5zEBJu6dopoWVx+shJNGtG1qDFw==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.9.0': + resolution: {integrity: sha512-fM6zE/j6o3C1UIkcZPV7C1f186R7w97guY2N4lyNLlhlgwwhd46acnOezLARvRNU5oyKNev4PvOJhGCCDnFMGg==} + cpu: [arm64] + os: [darwin] + + '@oxc-resolver/binding-darwin-x64@11.9.0': + resolution: {integrity: sha512-Bg3Orw7gAxbUqQlt64YPWvHDVo3bo2JfI26Qmzv6nKo7mIMTDhQKl7YmywtLNMYbX0IgUM4qu1V90euu+WCDOw==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@11.9.0': + resolution: {integrity: sha512-eBqVZqTETH6miBfIZXvpzUe98WATz2+Sh+LEFwuRpGsTsKkIpTyb4p1kwylCLkxrd3Yx7wkxQku+L0AMEGBiAA==} + cpu: [x64] + os: [freebsd] + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.9.0': + resolution: {integrity: sha512-QgCk/IJnGBvpbc8rYTVgO+A3m3edJjH1zfv8Nvx7fmsxpbXwWH2l4b4tY3/SLMzasxsp7x7k87+HWt095bI5Lg==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.9.0': + resolution: {integrity: sha512-xkJH0jldIXD2GwoHpCDEF0ucJ7fvRETCL+iFLctM679o7qeDXvtzsO/E401EgFFXcWBJNKXWvH+ZfdYMKyowfA==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@11.9.0': + resolution: {integrity: sha512-TWq+y2psMzbMtZB9USAq2bSA7NV1TMmh9lhAFbMGQ8Yp2YV4BRC/HilD6qF++efQl6shueGBFOv0LVe9BUXaIA==} + cpu: [arm64] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-musl@11.9.0': + resolution: {integrity: sha512-8WwGLfXk7yttc6rD6g53+RnYfX5B8xOot1ffthLn8oCXzVRO4cdChlmeHStxwLD/MWx8z8BGeyfyINNrsh9N2w==} + cpu: [arm64] + os: [linux] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.9.0': + resolution: {integrity: sha512-ZWiAXfan6actlSzayaFS/kYO2zD6k1k0fmLb1opbujXYMKepEnjjVOvKdzCIYR/zKzudqI39dGc+ywqVdsPIpQ==} + cpu: [ppc64] + os: [linux] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.9.0': + resolution: {integrity: sha512-p9mCSb+Bym+eycNo9k+81wQ5SAE31E+/rtfbDmF4/7krPotkEjPsEBSc3rqunRwO+FtsUn7H68JLY7hlai49eQ==} + cpu: [riscv64] + os: [linux] + + '@oxc-resolver/binding-linux-riscv64-musl@11.9.0': + resolution: {integrity: sha512-/SePuVxgFhLPciRwsJ8kLVltr+rxh0b6riGFuoPnFXBbHFclKnjNIt3TfqzUj0/vOnslXw3cVGPpmtkm2TgCgg==} + cpu: [riscv64] + os: [linux] + + '@oxc-resolver/binding-linux-s390x-gnu@11.9.0': + resolution: {integrity: sha512-zLuEjlYIzfnr1Ei2UZYQBbCTa/9deh+BEjO9rh1ai8BfEq4uj6RupTtNpgHfgAsEYdqOBVExw9EU1S6SW3RCAw==} + cpu: [s390x] + os: [linux] + + '@oxc-resolver/binding-linux-x64-gnu@11.9.0': + resolution: {integrity: sha512-cxdg73WG+aVlPu/k4lEQPRVOhWunYOUglW6OSzclZLJJAXZU0tSZ5ymKaqPRkfTsyNSAafj1cA1XYd+P9UxBgw==} + cpu: [x64] + os: [linux] + + '@oxc-resolver/binding-linux-x64-musl@11.9.0': + resolution: {integrity: sha512-sy5nkVdMvNgqcx9sIY7G6U9TYZUZC4cmMGw/wKhJNuuD2/HFGtbje62ttXSwBAbVbmJ2GgZ4ZUo/S1OMyU+/OA==} + cpu: [x64] + os: [linux] + + '@oxc-resolver/binding-wasm32-wasi@11.9.0': + resolution: {integrity: sha512-dfi/a0Xh6o6nOLbJdaYuy7txncEcwkRHp9DGGZaAP7zxDiepkBZ6ewSJODQrWwhjVmMteXo+XFzEOMjsC7WUtQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@11.9.0': + resolution: {integrity: sha512-b1yKr+eFwyi8pZMjAQwW352rXpaHAmz7FLK03vFIxdyWzWiiL6S3UrfMu+nKQud38963zu4wNNLm7rdXQazgRA==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-ia32-msvc@11.9.0': + resolution: {integrity: sha512-DxRT+1HjCpRH8qYCmGHzgsRCYiK+X14PUM9Fb+aD4TljplA7MdDQXqMISTb4zBZ70AuclvlXKTbW+K1GZop3xA==} + cpu: [ia32] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.9.0': + resolution: {integrity: sha512-gE3QJvhh0Yj9cSAkkHjRLKPmC7BTJeiaB5YyhVKVUwbnWQgTszV92lZ9pvZtNPEghP7jPbhEs4c6983A0ojQwA==} + cpu: [x64] + os: [win32] + '@paralleldrive/cuid2@2.2.2': resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} @@ -3357,10 +3238,6 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pkgr/core@0.2.7': - resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@protobufjs/aspromise@1.1.2': resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} @@ -3391,6 +3268,9 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@quansync/fs@0.1.5': + resolution: {integrity: sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==} + '@react-native-community/cli-clean@10.1.1': resolution: {integrity: sha512-iNsrjzjIRv9yb5y309SWJ8NDHdwYtnCpmxZouQDyOljUdC9MwdZ4ChbtA4rwQyAwgOVfS9F/j56ML3Cslmvrxg==} @@ -3509,17 +3389,103 @@ packages: resolution: {integrity: sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==} engines: {node: '>=14.15'} + '@rolldown/binding-android-arm64@1.0.0-beta.42': + resolution: {integrity: sha512-W5ZKF3TP3bOWuBfotAGp+UGjxOkGV7jRmIRbBA7NFjggx7Oi6vOmGDqpHEIX7kDCiry1cnIsWQaxNvWbMdkvzQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-beta.42': + resolution: {integrity: sha512-abw/wtgJA8OCgaTlL+xJxnN/Z01BwV1rfzIp5Hh9x+IIO6xOBfPsQ0nzi0+rWx3TyZ9FZXyC7bbC+5NpQ9EaXQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-beta.42': + resolution: {integrity: sha512-Y/UrZIRVr8CvXVEB88t6PeC46r1K9/QdPEo2ASE/b/KBEyXIx+QbM6kv9QfQVWU2Atly2+SVsQzxQsIvuk3lZQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-beta.42': + resolution: {integrity: sha512-zRM0oOk7BZiy6DoWBvdV4hyEg+j6+WcBZIMHVirMEZRu8hd18kZdJkg+bjVMfCEhwpWeFUfBfZ1qcaZ5UdYzlQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42': + resolution: {integrity: sha512-6RjFaC52QNwo7ilU8C5H7swbGlgfTkG9pudXwzr3VYyT18s0C9gLg3mvc7OMPIGqNxnQ0M5lU8j6aQCk2DTRVg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42': + resolution: {integrity: sha512-LMYHM5Sf6ROq+VUwHMDVX2IAuEsWTv4SnlFEedBnMGpvRuQ14lCmD4m5Q8sjyAQCgyha9oghdGoK8AEg1sXZKg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42': + resolution: {integrity: sha512-/bNTYb9aKNhzdbPn3O4MK2aLv55AlrkUKPE4KNfBYjkoZUfDr4jWp7gsSlvTc5A/99V1RCm9axvt616ZzeXGyA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42': + resolution: {integrity: sha512-n/SLa4h342oyeGykZdch7Y3GNCNliRPL4k5wkeZ/5eQZs+c6/ZG1SHCJQoy7bZcmxiMyaXs9HoFmv1PEKrZgWg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.42': + resolution: {integrity: sha512-4PSd46sFzqpLHSGdaSViAb1mk55sCUMpJg+X8ittXaVocQsV3QLG/uydSH8RyL0ngHX5fy3D70LcCzlB15AgHw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.42': + resolution: {integrity: sha512-BmWoeJJyeZXmZBcfoxG6J9+rl2G7eO47qdTkAzEegj4n3aC6CBIHOuDcbE8BvhZaEjQR0nh0nJrtEDlt65Q7Sw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.42': + resolution: {integrity: sha512-2Ft32F7uiDTrGZUKws6CLNTlvTWHC33l4vpXrzUucf9rYtUThAdPCOt89Pmn13tNX6AulxjGEP2R0nZjTSW3eQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42': + resolution: {integrity: sha512-hC1kShXW/z221eG+WzQMN06KepvPbMBknF0iGR3VMYJLOe9gwnSTfGxFT5hf8XrPv7CEZqTWRd0GQpkSHRbGsw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42': + resolution: {integrity: sha512-AICBYromawouGjj+GS33369E8Vwhy6UwhQEhQ5evfS8jPCsyVvoICJatbDGDGH01dwtVGLD5eDFzPicUOVpe4g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42': + resolution: {integrity: sha512-XpZ0M+tjoEiSc9c+uZR7FCnOI0uxDRNs1elGOMjeB0pUP1QmvVbZGYNsyLbLoP4u7e3VQN8rie1OQ8/mB6rcJg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-beta.42': + resolution: {integrity: sha512-N7pQzk9CyE7q0bBN/q0J8s6Db279r5kUZc6d7/wWRe9/zXqC52HQovVyu6iXPIDY4BEzzgbVLhVFXrOuGJ22ZQ==} + '@rollup/rollup-linux-x64-gnu@4.9.5': resolution: {integrity: sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==} cpu: [x64] os: [linux] - '@scure/base@1.2.1': - resolution: {integrity: sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ==} - '@scure/base@1.2.6': resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + '@scure/base@2.0.0': + resolution: {integrity: sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==} + '@sd-jwt/core@0.10.0': resolution: {integrity: sha512-EuFsIHP76fwNi97dGcz2jdEenHL/AkDGcqrEA00k82Uw0HP/hvbAfB+yyPxYrd3dVaxe5PWSKvDkgDK6kKk+6Q==} engines: {node: '>=18'} @@ -3591,9 +3557,6 @@ packages: '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@sinclair/typebox@0.34.37': - resolution: {integrity: sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==} - '@sindresorhus/is@5.6.0': resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} @@ -3604,9 +3567,6 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@sinonjs/fake-timers@13.0.5': - resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} - '@sovpro/delimited-stream@1.1.0': resolution: {integrity: sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==} engines: {node: '>= 8'} @@ -3674,20 +3634,8 @@ packages: '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} '@types/accepts@1.3.7': resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} @@ -3707,6 +3655,9 @@ packages: '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -3722,6 +3673,12 @@ packages: '@types/cors@2.8.19': resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} + '@types/deep-eql@4.0.2': + resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/events@3.0.3': resolution: {integrity: sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==} @@ -3761,9 +3718,6 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/jest@30.0.0': - resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} - '@types/keygrip@1.0.6': resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} @@ -3773,9 +3727,6 @@ packages: '@types/koa@2.15.0': resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} - '@types/long@4.0.2': - resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} - '@types/luxon@3.4.2': resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==} @@ -3866,15 +3817,9 @@ packages: '@types/yargs@16.0.9': resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} - '@types/yargs@17.0.32': - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@unimodules/core@7.1.2': resolution: {integrity: sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg==} deprecated: 'replaced by the ''expo'' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc' @@ -3883,113 +3828,56 @@ packages: resolution: {integrity: sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw==} deprecated: 'replaced by the ''expo'' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc' - '@unrs/resolver-binding-android-arm-eabi@1.9.2': - resolution: {integrity: sha512-tS+lqTU3N0kkthU+rYp0spAYq15DU8ld9kXkaKg9sbQqJNF+WPMuNHZQGCgdxrUOEO0j22RKMwRVhF1HTl+X8A==} - cpu: [arm] - os: [android] + '@urql/core@2.3.6': + resolution: {integrity: sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==} + peerDependencies: + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - '@unrs/resolver-binding-android-arm64@1.9.2': - resolution: {integrity: sha512-MffGiZULa/KmkNjHeuuflLVqfhqLv1vZLm8lWIyeADvlElJ/GLSOkoUX+5jf4/EGtfwrNFcEaB8BRas03KT0/Q==} - cpu: [arm64] - os: [android] + '@urql/core@5.1.1': + resolution: {integrity: sha512-aGh024z5v2oINGD/In6rAtVKTm4VmQ2TxKQBAtk2ZSME5dunZFcjltw4p5ENQg+5CBhZ3FHMzl0Oa+rwqiWqlg==} - '@unrs/resolver-binding-darwin-arm64@1.9.2': - resolution: {integrity: sha512-dzJYK5rohS1sYl1DHdJ3mwfwClJj5BClQnQSyAgEfggbUwA9RlROQSSbKBLqrGfsiC/VyrDPtbO8hh56fnkbsQ==} - cpu: [arm64] - os: [darwin] + '@urql/exchange-retry@0.3.0': + resolution: {integrity: sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==} + peerDependencies: + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - '@unrs/resolver-binding-darwin-x64@1.9.2': - resolution: {integrity: sha512-gaIMWK+CWtXcg9gUyznkdV54LzQ90S3X3dn8zlh+QR5Xy7Y+Efqw4Rs4im61K1juy4YNb67vmJsCDAGOnIeffQ==} - cpu: [x64] - os: [darwin] + '@vitest/coverage-v8@3.2.4': + resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} + peerDependencies: + '@vitest/browser': 3.2.4 + vitest: 3.2.4 + peerDependenciesMeta: + '@vitest/browser': + optional: true - '@unrs/resolver-binding-freebsd-x64@1.9.2': - resolution: {integrity: sha512-S7QpkMbVoVJb0xwHFwujnwCAEDe/596xqY603rpi/ioTn9VDgBHnCCxh+UFrr5yxuMH+dliHfjwCZJXOPJGPnw==} - cpu: [x64] - os: [freebsd] + '@vitest/expect@3.2.4': + resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.2': - resolution: {integrity: sha512-+XPUMCuCCI80I46nCDFbGum0ZODP5NWGiwS3Pj8fOgsG5/ctz+/zzuBlq/WmGa+EjWZdue6CF0aWWNv84sE1uw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.9.2': - resolution: {integrity: sha512-sqvUyAd1JUpwbz33Ce2tuTLJKM+ucSsYpPGl2vuFwZnEIg0CmdxiZ01MHQ3j6ExuRqEDUCy8yvkDKvjYFPb8Zg==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.9.2': - resolution: {integrity: sha512-UYA0MA8ajkEDCFRQdng/FVx3F6szBvk3EPnkTTQuuO9lV1kPGuTB+V9TmbDxy5ikaEgyWKxa4CI3ySjklZ9lFA==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-musl@1.9.2': - resolution: {integrity: sha512-P/CO3ODU9YJIHFqAkHbquKtFst0COxdphc8TKGL5yCX75GOiVpGqd1d15ahpqu8xXVsqP4MGFP2C3LRZnnL5MA==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-ppc64-gnu@1.9.2': - resolution: {integrity: sha512-uKStFlOELBxBum2s1hODPtgJhY4NxYJE9pAeyBgNEzHgTqTiVBPjfTlPFJkfxyTjQEuxZbbJlJnMCrRgD7ubzw==} - cpu: [ppc64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-gnu@1.9.2': - resolution: {integrity: sha512-LkbNnZlhINfY9gK30AHs26IIVEZ9PEl9qOScYdmY2o81imJYI4IMnJiW0vJVtXaDHvBvxeAgEy5CflwJFIl3tQ==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-musl@1.9.2': - resolution: {integrity: sha512-vI+e6FzLyZHSLFNomPi+nT+qUWN4YSj8pFtQZSFTtmgFoxqB6NyjxSjAxEC1m93qn6hUXhIsh8WMp+fGgxCoRg==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-s390x-gnu@1.9.2': - resolution: {integrity: sha512-sSO4AlAYhSM2RAzBsRpahcJB1msc6uYLAtP6pesPbZtptF8OU/CbCPhSRW6cnYOGuVmEmWVW5xVboAqCnWTeHQ==} - cpu: [s390x] - os: [linux] - - '@unrs/resolver-binding-linux-x64-gnu@1.9.2': - resolution: {integrity: sha512-jkSkwch0uPFva20Mdu8orbQjv2A3G88NExTN2oPTI1AJ+7mZfYW3cDCTyoH6OnctBKbBVeJCEqh0U02lTkqD5w==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-linux-x64-musl@1.9.2': - resolution: {integrity: sha512-Uk64NoiTpQbkpl+bXsbeyOPRpUoMdcUqa+hDC1KhMW7aN1lfW8PBlBH4mJ3n3Y47dYE8qi0XTxy1mBACruYBaw==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-wasm32-wasi@1.9.2': - resolution: {integrity: sha512-EpBGwkcjDicjR/ybC0g8wO5adPNdVuMrNalVgYcWi+gYtC1XYNuxe3rufcO7dA76OHGeVabcO6cSkPJKVcbCXQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@unrs/resolver-binding-win32-arm64-msvc@1.9.2': - resolution: {integrity: sha512-EdFbGn7o1SxGmN6aZw9wAkehZJetFPao0VGZ9OMBwKx6TkvDuj6cNeLimF/Psi6ts9lMOe+Dt6z19fZQ9Ye2fw==} - cpu: [arm64] - os: [win32] + '@vitest/mocker@3.2.4': + resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.9.2': - resolution: {integrity: sha512-JY9hi1p7AG+5c/dMU8o2kWemM8I6VZxfGwn1GCtf3c5i+IKcMo2NQ8OjZ4Z3/itvY/Si3K10jOBQn7qsD/whUA==} - cpu: [ia32] - os: [win32] + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@unrs/resolver-binding-win32-x64-msvc@1.9.2': - resolution: {integrity: sha512-ryoo+EB19lMxAd80ln9BVf8pdOAxLb97amrQ3SFN9OCRn/5M5wvwDgAe4i8ZjhpbiHoDeP8yavcTEnpKBo7lZg==} - cpu: [x64] - os: [win32] + '@vitest/runner@3.2.4': + resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@urql/core@2.3.6': - resolution: {integrity: sha512-PUxhtBh7/8167HJK6WqBv6Z0piuiaZHQGYbhwpNL9aIQmLROPEdaUYkY4wh45wPQXcTpnd11l0q3Pw+TI11pdw==} - peerDependencies: - graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@urql/core@5.1.1': - resolution: {integrity: sha512-aGh024z5v2oINGD/In6rAtVKTm4VmQ2TxKQBAtk2ZSME5dunZFcjltw4p5ENQg+5CBhZ3FHMzl0Oa+rwqiWqlg==} + '@vitest/spy@3.2.4': + resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@urql/exchange-retry@0.3.0': - resolution: {integrity: sha512-hHqer2mcdVC0eYnVNbWyi28AlGOPb2vjH3lP3/Bc8Lc8BjhMsDwFMm7WhoP5C1+cfbr/QJ6Er3H/L08wznXxfg==} - peerDependencies: - graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + '@vitest/utils@3.2.4': + resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} '@xmldom/xmldom@0.7.13': resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} @@ -4014,10 +3902,6 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - acorn-walk@8.3.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} - engines: {node: '>=0.4.0'} - acorn@8.12.0: resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} engines: {node: '>=0.4.0'} @@ -4076,10 +3960,6 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - ansi-regex@6.2.2: resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} @@ -4096,14 +3976,14 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - ansi-styles@6.2.3: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} + ansis@4.2.0: + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} + engines: {node: '>=14'} + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -4128,9 +4008,6 @@ packages: engines: {node: '>=10'} deprecated: This package is no longer supported. - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -4172,10 +4049,21 @@ packages: resolution: {integrity: sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==} engines: {node: '>=12.0.0'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + ast-kit@2.1.3: + resolution: {integrity: sha512-TH+b3Lv6pUjy/Nu0m6A2JULtdzLpmqF9x1Dhj00ZoEiML8qvVA9j1flkzTKNYgdEhWrjDwtWNpyyCUbfQe514g==} + engines: {node: '>=20.19.0'} + ast-types@0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} + ast-v8-to-istanbul@0.3.5: + resolution: {integrity: sha512-9SdXjNheSiE8bALAQCQQuT6fgQaoxJh7IRYrRGZ8/9nv8WhJeC1aXAwN8TbaOssGOukUvyvnkgD9+Yuykvl1aA==} + astral-regex@1.0.0: resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} engines: {node: '>=4'} @@ -4208,9 +4096,6 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axios@0.21.4: - resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} - axios@1.7.9: resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} @@ -4231,28 +4116,14 @@ packages: peerDependencies: '@babel/core': ^7.8.0 - babel-jest@30.0.2: - resolution: {integrity: sha512-A5kqR1/EUTidM2YC2YMEUDP2+19ppgOwK0IAd9Swc3q2KqFb5f9PtRUXVeZcngu0z5mDMyZ9zH2huJZSOMLiTQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} - babel-plugin-istanbul@7.0.0: - resolution: {integrity: sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==} - engines: {node: '>=12'} - babel-plugin-jest-hoist@29.6.3: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - babel-plugin-jest-hoist@30.0.1: - resolution: {integrity: sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - babel-plugin-polyfill-corejs2@0.4.11: resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} peerDependencies: @@ -4298,11 +4169,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - babel-preset-current-node-syntax@1.2.0: - resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} - peerDependencies: - '@babel/core': ^7.0.0 || ^8.0.0-0 - babel-preset-expo@11.0.14: resolution: {integrity: sha512-4BVYR0Sc2sSNxYTiE/OLSnPiOp+weFNy8eV+hX3aD6YAIbBnw+VubKRWqJV/sOJauzOLz0SgYAYyFciYMqizRA==} @@ -4317,12 +4183,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - babel-preset-jest@30.0.1: - resolution: {integrity: sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -4365,6 +4225,9 @@ packages: bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + birpc@2.6.1: + resolution: {integrity: sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -4420,10 +4283,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -4460,6 +4319,10 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + cacache@18.0.3: resolution: {integrity: sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==} engines: {node: ^16.14.0 || >=18.0.0} @@ -4500,10 +4363,6 @@ packages: resolution: {integrity: sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==} engines: {node: '>=4'} - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -4531,6 +4390,10 @@ packages: cbor-x@1.6.0: resolution: {integrity: sha512-0kareyRwHSkL6ws5VXHEf8uY1liitysCVJjlmhaLG+IXLqhSaOO+t63coaso7yjwEzWZzLy8fJo06gZDVQM9Qg==} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -4539,16 +4402,20 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -4575,13 +4442,6 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - ci-info@4.2.0: - resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} - engines: {node: '>=8'} - - cjs-module-lexer@2.1.0: - resolution: {integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==} - class-transformer@0.5.1: resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} @@ -4642,9 +4502,6 @@ packages: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -4773,15 +4630,9 @@ packages: resolution: {integrity: sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==} engines: {node: '>=4'} - cosmjs-types@0.7.2: - resolution: {integrity: sha512-vf2uLyktjr/XVAgEq0DjMxeAWh1yYREe7AMHDKd7EiHVqxBPCaBS+qEEQUkXbR9ndnckqr1sUG8BQhazh4X5lA==} - cosmjs-types@0.9.0: resolution: {integrity: sha512-MN/yUe6mkJwHnCFfsNPeCfXVhyxHYW6c/xDUzrSbBycYzw++XvWDMJArXp2pLdgD6FQ8DW79vkPjeNKVrXaHeQ==} - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - credentials-context@2.0.0: resolution: {integrity: sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ==} @@ -4887,6 +4738,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 + decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} @@ -4899,13 +4759,9 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - dedent@1.6.0: - resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} deep-equal@1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} @@ -4921,10 +4777,6 @@ packages: resolution: {integrity: sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==} engines: {node: '>=0.10.0'} - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - default-gateway@4.2.0: resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==} engines: {node: '>=6'} @@ -4948,6 +4800,9 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + del@6.1.1: resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} engines: {node: '>=10'} @@ -4995,15 +4850,11 @@ packages: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} - detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} - did-jwt@8.0.9: - resolution: {integrity: sha512-Tc2wdkGwAyqiL1oYZvdIJ4k/LcrUpJIcXEQNb/yyegY9/CPeeXEbwsgg8BDAaoYdaDFknyFolLZb+Sp9uU1U5w==} + did-jwt@8.0.18: + resolution: {integrity: sha512-yS3Y+aUKjYqRFrgR/RY77NuOOqS7SFfvfFH4THhWD6+hkxeUZcKQSsdNZ12QR1Vd48yP9exwae2wzbuOZn0NqQ==} did-resolver@4.1.0: resolution: {integrity: sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==} @@ -5012,8 +4863,8 @@ packages: resolution: {integrity: sha512-VTjA6yKRplrxV2lA1d14lf6B+0uVLdZzPwoqnTuHm/RQVPG1xNj7CRm6Gl5wEnq3NEd/9xJBabqAY7adX94MIQ==} hasBin: true - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + diff@8.0.2: + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} dir-glob@3.0.1: @@ -5124,6 +4975,15 @@ packages: sqlite3: optional: true + dts-resolver@2.1.2: + resolution: {integrity: sha512-xeXHBQkn2ISSXxbJWD828PFjtyg+/UrMDo7W4Ffcs7+YWCquxU8YjV1KoxuiL+eJ5pg3ll+bC6flVv61L3LKZg==} + engines: {node: '>=20.18.0'} + peerDependencies: + oxc-resolver: '>=11.0.0' + peerDependenciesMeta: + oxc-resolver: + optional: true + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -5143,11 +5003,6 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - electron-to-chromium@1.5.178: resolution: {integrity: sha512-wObbz/ar3Bc6e4X5vf0iO8xTN8YAjN/tgiAOJLr7yjYFtP9wAjq8Mb5h0yn6kResir+VYx2DXBj9NNobs0ETSA==} @@ -5157,16 +5012,16 @@ packages: elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} - emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + empathic@2.0.0: + resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} + engines: {node: '>=14'} + encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -5216,6 +5071,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} @@ -5291,6 +5149,9 @@ packages: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} + 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'} @@ -5321,21 +5182,13 @@ packages: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - exit-x@0.2.2: - resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} - engines: {node: '>= 0.8.0'} - expand-template@2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - expect@30.0.3: - resolution: {integrity: sha512-HXg6NvK35/cSYZCUKAtmlgCFyqKM4frEPbzrav5hRqb0GMz0E0lS5hfzYjSaiaE5ysnp/qI2aeZkeyeIAOeXzQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + engines: {node: '>=12.0.0'} expo-asset@10.0.10: resolution: {integrity: sha512-0qoTIihB79k+wGus9wy0JMKq7DdenziVx3iUkGvMAy2azscSgWH6bd2gJ9CGnhC6JRd3qTMFBL0ou/fx7WZl7A==} @@ -5451,6 +5304,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-blob@2.1.2: resolution: {integrity: sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==} engines: {node: ^10.17.0 || >=12.3.0} @@ -5479,16 +5341,9 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} - file-type@16.5.4: - resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} - engines: {node: '>=10'} - - file-type@20.4.1: - resolution: {integrity: sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ==} - engines: {node: '>=18'} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + file-type@21.0.0: + resolution: {integrity: sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==} + engines: {node: '>=20'} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -5682,6 +5537,9 @@ packages: get-symbol-from-current-process-h@1.0.2: resolution: {integrity: sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==} + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + get-tsconfig@4.7.5: resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} @@ -5704,11 +5562,6 @@ packages: engines: {node: '>=16 || 14 >=14.18'} hasBin: true - glob@11.0.3: - resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} - engines: {node: 20 || >=22} - hasBin: true - glob@6.0.4: resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} deprecated: Glob versions prior to v9 are no longer supported @@ -5721,10 +5574,6 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - glob@9.3.5: - resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} - engines: {node: '>=16 || 14 >=14.17'} - globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -5737,9 +5586,6 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -5831,6 +5677,9 @@ packages: hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hosted-git-info@3.0.8: resolution: {integrity: sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==} engines: {node: '>=10'} @@ -5869,10 +5718,6 @@ packages: resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} 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'} @@ -5902,11 +5747,6 @@ packages: resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} engines: {node: '>=4'} - import-local@3.2.0: - resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} - engines: {node: '>=8'} - hasBin: true - imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -6026,10 +5866,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -6178,10 +6014,6 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} - istanbul-lib-instrument@6.0.2: - resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} - engines: {node: '>=10'} - istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} @@ -6190,76 +6022,18 @@ packages: resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} engines: {node: '>=10'} - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} jackspeak@3.4.0: resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} engines: {node: '>=14'} - jackspeak@4.1.1: - resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} - engines: {node: 20 || >=22} - - jake@10.9.2: - resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} - engines: {node: '>=10'} - hasBin: true - - jest-changed-files@30.0.2: - resolution: {integrity: sha512-Ius/iRST9FKfJI+I+kpiDh8JuUlAISnRszF9ixZDIqJF17FckH5sOzKC8a0wd0+D+8em5ADRHA5V5MnfeDk2WA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-circus@30.0.3: - resolution: {integrity: sha512-rD9qq2V28OASJHJWDRVdhoBdRs6k3u3EmBzDYcyuMby8XCO3Ll1uq9kyqM41ZcC4fMiPulMVh3qMw0cBvDbnyg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-cli@30.0.3: - resolution: {integrity: sha512-UWDSj0ayhumEAxpYRlqQLrssEi29kdQ+kddP94AuHhZknrE+mT0cR0J+zMHKFe9XPfX3dKQOc2TfWki3WhFTsA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - - jest-config@30.0.3: - resolution: {integrity: sha512-j0L4oRCtJwNyZktXIqwzEiDVQXBbQ4dqXuLD/TZdn++hXIcIfZmjHgrViEy5s/+j4HvITmAXbexVZpQ/jnr0bg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@types/node': '*' - esbuild-register: '>=3.4.0' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - esbuild-register: - optional: true - ts-node: - optional: true - - jest-diff@30.0.3: - resolution: {integrity: sha512-Q1TAV0cUcBTic57SVnk/mug0/ASyAqtSIOkr7RAlxx97llRYsM74+E8N5WdGJUlwCKwgxPAkVjKh653h1+HA9A==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-docblock@30.0.1: - resolution: {integrity: sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-each@30.0.2: - resolution: {integrity: sha512-ZFRsTpe5FUWFQ9cWTMguCaiA6kkW5whccPy9JjD1ezxh+mJeqmz8naL8Fl/oSbNJv3rgB0x87WBIkA5CObIUZQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-environment-node@29.7.0: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-environment-node@30.0.2: - resolution: {integrity: sha512-XsGtZ0H+a70RsxAQkKuIh0D3ZlASXdZdhpOSBq9WRPq6lhe0IoQHGW0w9ZUaPiZQ/CpkIdprvlfV1QcXcvIQLQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-get-type@26.3.0: resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} engines: {node: '>= 10.14.2'} @@ -6272,43 +6046,14 @@ packages: resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-haste-map@30.0.2: - resolution: {integrity: sha512-telJBKpNLeCb4MaX+I5k496556Y2FiKR/QLZc0+MGBYl4k3OO0472drlV2LUe7c1Glng5HuAu+5GLYp//GpdOQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-leak-detector@30.0.2: - resolution: {integrity: sha512-U66sRrAYdALq+2qtKffBLDWsQ/XoNNs2Lcr83sc9lvE/hEpNafJlq2lXCPUBMNqamMECNxSIekLfe69qg4KMIQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-matcher-utils@30.0.3: - resolution: {integrity: sha512-hMpVFGFOhYmIIRGJ0HgM9htC5qUiJ00famcc9sRFchJJiLZbbVKrAztcgE6VnXLRxA3XZ0bvNA7hQWh3oHXo/A==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-message-util@29.7.0: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-message-util@30.0.2: - resolution: {integrity: sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-mock@29.7.0: resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-mock@30.0.2: - resolution: {integrity: sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-pnp-resolver@1.2.3: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - jest-regex-util@27.5.1: resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -6317,34 +6062,10 @@ packages: resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-regex-util@30.0.1: - resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-resolve-dependencies@30.0.3: - resolution: {integrity: sha512-FlL6u7LiHbF0Oe27k7DHYMq2T2aNpPhxnNo75F7lEtu4A6sSw+TKkNNUGNcVckdFoL0RCWREJsC1HsKDwKRZzQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-resolve@30.0.2: - resolution: {integrity: sha512-q/XT0XQvRemykZsvRopbG6FQUT6/ra+XV6rPijyjT6D0msOyCvR2A5PlWZLd+fH0U8XWKZfDiAgrUNDNX2BkCw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-runner@30.0.3: - resolution: {integrity: sha512-CxYBzu9WStOBBXAKkLXGoUtNOWsiS1RRmUQb6SsdUdTcqVncOau7m8AJ4cW3Mz+YL1O9pOGPSYLyvl8HBdFmkQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-runtime@30.0.3: - resolution: {integrity: sha512-Xjosq0C48G9XEQOtmgrjXJwPaUPaq3sPJwHDRaiC+5wi4ZWxO6Lx6jNkizK/0JmTulVNuxP8iYwt77LGnfg3/w==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-serializer@27.5.1: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - jest-snapshot@30.0.3: - resolution: {integrity: sha512-F05JCohd3OA1N9+5aEPXA6I0qOfZDGIx0zTq5Z4yMBg2i1p5ELfBusjYAWwTkC12c7dHcbyth4QAfQbS7cRjow==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-util@27.5.1: resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -6353,10 +6074,6 @@ packages: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-util@30.0.2: - resolution: {integrity: sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-validate@26.6.2: resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==} engines: {node: '>= 10.14.2'} @@ -6365,14 +6082,6 @@ packages: resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-validate@30.0.2: - resolution: {integrity: sha512-noOvul+SFER4RIvNAwGn6nmV2fXqBq67j+hKGHKGFCmK4ks/Iy1FSrqQNBLGKlu4ZZIRL6Kg1U72N1nxuRCrGQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest-watcher@30.0.2: - resolution: {integrity: sha512-vYO5+E7jJuF+XmONr6CrbXdlYrgvZqtkn6pdkgjt/dU64UAdc0v1cAVaAeWtAfUUMScxNmnUjKPUMdCpNVASwg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -6381,23 +6090,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-worker@30.0.2: - resolution: {integrity: sha512-RN1eQmx7qSLFA+o9pfJKlqViwL5wt+OL3Vff/A+/cPsmuw7NPwfgl33AP+/agRmHzPOFgXviRycR9kYwlcRQXg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - - jest@30.0.3: - resolution: {integrity: sha512-Uy8xfeE/WpT2ZLGDXQmaYNzw2v8NUKuYeKGtkS6sDxwsdQihdgYCXaKIYnph1h95DN5H35ubFDm0dfmsQnjn4Q==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - jimp-compact@0.16.1: resolution: {integrity: sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + joi@17.13.1: resolution: {integrity: sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==} @@ -6423,6 +6122,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -6464,9 +6166,6 @@ packages: json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema-deref-sync@0.13.0: resolution: {integrity: sha512-YBOEogm5w9Op337yb6pAT6ZXDqlxAsQCanM3grid8lMWNxRJO/zWEJi3ZzqDL8boWfwhTFym5EFrNgWwpqcBRg==} engines: {node: '>=6.0.0'} @@ -6578,12 +6277,6 @@ packages: libsodium-wrappers-sumo@0.7.15: resolution: {integrity: sha512-aSWY8wKDZh5TC7rMvEdTHoyppVq/1dTSAeAR7H6pzd6QRT3vQWcT5pGwCotLcpPEOLXX6VvqihSPkpEhYAjANA==} - libsodium-wrappers@0.7.13: - resolution: {integrity: sha512-kasvDsEi/r1fMzKouIDv7B8I6vNmknXwGiYodErGuESoFTohGSKZplFtVxZqHaoQ217AynyIFgnOVRitpHs0Qw==} - - libsodium@0.7.13: - resolution: {integrity: sha512-mK8ju0fnrKXXfleL53vtp9xiPq5hKM0zbDQtcxQIsSmxNgSxqCj6R7Hl9PkrNe2j29T4yoDaF7DJLK9/i5iWUw==} - libsql@0.5.13: resolution: {integrity: sha512-5Bwoa/CqzgkTwySgqHA5TsaUDRrdLIbdM4egdPcaAnqO3aC+qAgS6BwdzuZwARA5digXwiskogZ8H7Yy4XfdOg==} cpu: [x64, arm64, wasm32, arm] @@ -6592,58 +6285,128 @@ packages: lighthouse-logger@1.4.2: resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} + lightningcss-android-arm64@1.30.2: + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + lightningcss-darwin-arm64@1.19.0: resolution: {integrity: sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] + lightningcss-darwin-arm64@1.30.2: + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + lightningcss-darwin-x64@1.19.0: resolution: {integrity: sha512-Lif1wD6P4poaw9c/4Uh2z+gmrWhw/HtXFoeZ3bEsv6Ia4tt8rOJBdkfVaUJ6VXmpKHALve+iTyP2+50xY1wKPw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] + lightningcss-darwin-x64@1.30.2: + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.2: + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + lightningcss-linux-arm-gnueabihf@1.19.0: resolution: {integrity: sha512-P15VXY5682mTXaiDtbnLYQflc8BYb774j2R84FgDLJTN6Qp0ZjWEFyN1SPqyfTj2B2TFjRHRUvQSSZ7qN4Weig==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + lightningcss-linux-arm64-gnu@1.19.0: resolution: {integrity: sha512-zwXRjWqpev8wqO0sv0M1aM1PpjHz6RVIsBcxKszIG83Befuh4yNysjgHVplF9RTU7eozGe3Ts7r6we1+Qkqsww==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + lightningcss-linux-arm64-gnu@1.30.2: + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + lightningcss-linux-arm64-musl@1.19.0: resolution: {integrity: sha512-vSCKO7SDnZaFN9zEloKSZM5/kC5gbzUjoJQ43BvUpyTFUX7ACs/mDfl2Eq6fdz2+uWhUh7vf92c4EaaP4udEtA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + lightningcss-linux-arm64-musl@1.30.2: + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + lightningcss-linux-x64-gnu@1.19.0: resolution: {integrity: sha512-0AFQKvVzXf9byrXUq9z0anMGLdZJS+XSDqidyijI5njIwj6MdbvX2UZK/c4FfNmeRa2N/8ngTffoIuOUit5eIQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + lightningcss-linux-x64-gnu@1.30.2: + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + lightningcss-linux-x64-musl@1.19.0: resolution: {integrity: sha512-SJoM8CLPt6ECCgSuWe+g0qo8dqQYVcPiW2s19dxkmSI5+Uu1GIRzyKA0b7QqmEXolA+oSJhQqCmJpzjY4CuZAg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + lightningcss-linux-x64-musl@1.30.2: + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + lightningcss-win32-x64-msvc@1.19.0: resolution: {integrity: sha512-C+VuUTeSUOAaBZZOPT7Etn/agx/MatzJzGRkeV+zEABmPuntv1zihncsi+AyGmjkkzq3wVedEy7h0/4S84mUtg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] + lightningcss-win32-x64-msvc@1.30.2: + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + lightningcss@1.19.0: resolution: {integrity: sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==} engines: {node: '>= 12.0.0'} + lightningcss@1.30.2: + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} + engines: {node: '>= 12.0.0'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -6671,9 +6434,6 @@ packages: lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -6698,19 +6458,19 @@ packages: resolution: {integrity: sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==} hasBin: true - long@4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - - long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - long@5.3.1: resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==} + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} + lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6719,10 +6479,6 @@ packages: resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} engines: {node: 14 || >=16.14} - lru-cache@11.1.0: - resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} - engines: {node: 20 || >=22} - lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -6737,6 +6493,12 @@ packages: resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} engines: {node: '>=12'} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -6861,7 +6623,6 @@ packages: metro-react-native-babel-preset@0.73.10: resolution: {integrity: sha512-1/dnH4EHwFb2RKEKx34vVDpUS3urt2WEeR8FYim+ogqALg4sTpG7yeQPxWpbgKATezt4rNfqAANpIyH19MS4BQ==} - deprecated: Use @react-native/babel-preset instead peerDependencies: '@babel/core': '*' @@ -6972,21 +6733,9 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - minimatch@10.0.3: - resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} - engines: {node: 20 || >=22} - minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - - minimatch@8.0.4: - resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -7010,10 +6759,6 @@ packages: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} - minipass@4.2.8: - resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} - engines: {node: '>=8'} - minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} @@ -7077,8 +6822,8 @@ packages: engines: {node: '>=12.0.0', npm: '>=6.0.0'} deprecated: This module has been superseded by the multiformats module - multiformats@13.3.2: - resolution: {integrity: sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==} + multiformats@13.4.1: + resolution: {integrity: sha512-VqO6OSvLrFVAYYjgsr8tyv62/rCQhPgsZUXLTqoFLSgdkgiUYKYeArbt1uWLlEpkjxQe+P0+sHlbPEte1Bi06Q==} multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} @@ -7093,8 +6838,8 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -7106,14 +6851,6 @@ packages: napi-build-utils@2.0.0: resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - napi-postinstall@0.2.4: - resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - ncp@2.0.0: resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} hasBin: true @@ -7226,10 +6963,6 @@ packages: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} deprecated: This package is no longer supported. @@ -7347,6 +7080,9 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} + oxc-resolver@11.9.0: + resolution: {integrity: sha512-u714L0DBBXpD0ERErCQlun2XwinuBfIGo2T8bA7xE8WLQ4uaJudO/VOEQCWslOmcDY2nEkS+UVir5PpyvSG23w==} + p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} @@ -7408,10 +7144,6 @@ packages: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - parse-png@2.1.0: resolution: {integrity: sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==} engines: {node: '>=10'} @@ -7450,10 +7182,6 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.0: - resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} - engines: {node: 20 || >=22} - path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} @@ -7464,9 +7192,12 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - peek-readable@4.1.0: - resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} - engines: {node: '>=8'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} + engines: {node: '>= 14.16'} peek-readable@7.0.0: resolution: {integrity: sha512-nri2TO5JE3/mRryik9LlHFT53cgHfRK0Lt0BAZQXku/AW3E6XLt2GaY8siWi7dvW/m1z0ecn+J+bpDa9ZN3IsQ==} @@ -7517,8 +7248,8 @@ packages: resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} engines: {node: '>=10'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} pify@4.0.1: @@ -7539,10 +7270,6 @@ packages: resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==} hasBin: true - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -7551,10 +7278,6 @@ packages: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} - pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - plist@3.1.0: resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} engines: {node: '>=10.4.0'} @@ -7574,6 +7297,10 @@ packages: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -7620,10 +7347,6 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - pretty-format@30.0.2: - resolution: {integrity: sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -7654,14 +7377,6 @@ packages: resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} engines: {node: '>= 8'} - protobufjs@6.11.4: - resolution: {integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==} - hasBin: true - - protobufjs@7.4.0: - resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} - engines: {node: '>=12.0.0'} - protobufjs@7.5.4: resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} engines: {node: '>=12.0.0'} @@ -7680,9 +7395,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - pure-rand@7.0.1: - resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} - pvtsutils@1.3.5: resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} @@ -7697,10 +7409,6 @@ packages: resolution: {integrity: sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==} hasBin: true - qs@6.12.1: - resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} - engines: {node: '>=0.6'} - qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -7708,6 +7416,9 @@ packages: quansync@0.2.10: resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + query-string@7.1.3: resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} engines: {node: '>=6'} @@ -7814,9 +7525,9 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - readable-web-to-node-stream@3.0.2: - resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} - engines: {node: '>=8'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} readline@1.3.0: resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==} @@ -7902,10 +7613,6 @@ packages: resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - resolve-from@3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} @@ -7977,18 +7684,72 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true - rimraf@4.4.1: - resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} - engines: {node: '>=14'} - hasBin: true - rimraf@5.0.10: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true - rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} - engines: {node: 20 || >=22} + rolldown-plugin-dts@0.16.11: + resolution: {integrity: sha512-9IQDaPvPqTx3RjG2eQCK5GYZITo203BxKunGI80AGYicu1ySFTUyugicAaTZWRzFWh9DSnzkgNeMNbDWBbSs0w==} + engines: {node: '>=20.18.0'} + peerDependencies: + '@ts-macro/tsc': ^0.3.6 + '@typescript/native-preview': '>=7.0.0-dev.20250601.1' + rolldown: ^1.0.0-beta.9 + typescript: ^5.0.0 + vue-tsc: ~3.1.0 + peerDependenciesMeta: + '@ts-macro/tsc': + optional: true + '@typescript/native-preview': + optional: true + typescript: + optional: true + vue-tsc: + optional: true + + rolldown-vite@7.1.16: + resolution: {integrity: sha512-cK6tCmZyEC0KRAcXTjQ+ara+wkqmaE7WUoI0ZfZzDuvaRaZ3mtvbhTJc4cH+PjKRok++++Z1bZZaNlf3+SnnGA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + esbuild: ^0.25.0 + jiti: '>=1.21.0' + less: ^4.0.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 + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + rolldown@1.0.0-beta.42: + resolution: {integrity: sha512-xaPcckj+BbJhYLsv8gOqezc8EdMcKKe/gk8v47B0KPvgABDrQ0qmNPAiT/gh9n9Foe0bUkEv2qzj42uU5q1WRg==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true run-async@2.4.1: @@ -8148,6 +7909,9 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 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==} @@ -8182,13 +7946,10 @@ packages: sonic-boom@4.2.0: resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} - source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -8232,6 +7993,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==} @@ -8253,6 +8017,9 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + str2buf@1.3.0: resolution: {integrity: sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==} @@ -8271,10 +8038,6 @@ packages: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -8309,10 +8072,6 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - strip-ansi@7.1.2: resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} @@ -8321,18 +8080,10 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - strip-eof@1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -8341,6 +8092,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} + strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} @@ -8348,10 +8102,6 @@ packages: resolution: {integrity: sha512-Xt18+h4s7Z8xyZ0tmBoRmzxcop97R4BAh+dXouUDCYn+Em+1P3qpkUfI5ueWLT8ynC5hZ+q4iPEmGG1urvQGBg==} engines: {node: '>=18'} - strtok3@6.3.0: - resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} - engines: {node: '>=10'} - structured-headers@0.4.1: resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==} @@ -8372,14 +8122,13 @@ packages: resolution: {integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - superagent@10.2.2: - resolution: {integrity: sha512-vWMq11OwWCC84pQaFPzF/VO3BrjkCeewuvJgt1jfV0499Z1QSAWN4EqfMM5WlFDDX9/oP8JjlDKpblrmEoyu4Q==} + superagent@10.2.3: + resolution: {integrity: sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig==} engines: {node: '>=14.18.0'} - supertest@7.1.3: - resolution: {integrity: sha512-ORY0gPa6ojmg/C74P/bDoS21WL6FMXq5I8mawkEz30/zkwdu0gOeqstFy316vHG6OKxqQ+IbGneRemHI8WraEw==} + supertest@7.1.4: + resolution: {integrity: sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg==} engines: {node: '>=14.18.0'} - deprecated: Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -8405,10 +8154,6 @@ packages: resolution: {integrity: sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==} engines: {node: '>=0.10'} - synckit@0.11.8: - resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==} - engines: {node: ^14.18.0 || >=16.0.0} - tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} @@ -8465,6 +8210,10 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -8487,6 +8236,31 @@ 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==} + + tinyexec@1.0.1: + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} + + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} + engines: {node: '>=14.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -8502,10 +8276,6 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - token-types@4.2.1: - resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} - engines: {node: '>=10'} - token-types@6.0.0: resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} engines: {node: '>=14.16'} @@ -8520,6 +8290,10 @@ packages: resolution: {integrity: sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==} engines: {node: '>= 0.4'} + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + trim-right@1.0.1: resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==} engines: {node: '>=0.10.0'} @@ -8527,45 +8301,26 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-jest@29.4.0: - resolution: {integrity: sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==} - engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + tsdown@0.15.6: + resolution: {integrity: sha512-W6++O3JeV9gm3JY6P/vLiC7zzTcJbZhQxXb+p3AvRMpDOPBIg82yXULyZCcwjsihY/bFG+Qw37HkezZbP7fzUg==} + engines: {node: '>=20.19.0'} hasBin: true peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/transform': ^29.0.0 || ^30.0.0 - '@jest/types': ^29.0.0 || ^30.0.0 - babel-jest: ^29.0.0 || ^30.0.0 - esbuild: '*' - jest: ^29.0.0 || ^30.0.0 - jest-util: ^29.0.0 || ^30.0.0 - typescript: '>=4.3 <6' + '@arethetypeswrong/core': ^0.18.1 + publint: ^0.3.0 + typescript: ^5.0.0 + unplugin-lightningcss: ^0.4.0 + unplugin-unused: ^0.5.0 peerDependenciesMeta: - '@babel/core': + '@arethetypeswrong/core': optional: true - '@jest/transform': + publint: optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - jest-util: + typescript: optional: true - - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': + unplugin-lightningcss: optional: true - '@swc/wasm': + unplugin-unused: optional: true tslib@1.14.1: @@ -8629,10 +8384,6 @@ packages: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} - type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -8696,6 +8447,9 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} + unconfig@7.3.3: + resolution: {integrity: sha512-QCkQoOnJF8L107gxfHL0uavn7WD9b3dpBcFX6HtfQYmjw2YzWxGuFQ0N0J6tE9oguCBJn9KOvfqYDCMPHIZrBA==} + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -8754,9 +8508,6 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unrs-resolver@1.9.2: - resolution: {integrity: sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA==} - update-browserslist-db@1.1.1: resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true @@ -8782,14 +8533,14 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - uuid@10.0.0: - resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} - hasBin: true - uuid@11.1.0: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true + uuid@13.0.0: + resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} + hasBin: true + uuid@7.0.3: resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==} hasBin: true @@ -8798,13 +8549,6 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} - engines: {node: '>=10.12.0'} - valibot@1.0.0-beta.8: resolution: {integrity: sha512-OPAwJZtowb0j91b+bd77+ny7D1VVzsCzD7Jl9waLUlMprTsfI9Y3HHbW3hAQD7wKDKHsmGEesuiYWaYvcZL2wg==} peerDependencies: @@ -8830,6 +8574,39 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vitest@3.2.4: + resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.2.4 + '@vitest/ui': 3.2.4 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} @@ -8897,6 +8674,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + wide-align@1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} @@ -8932,10 +8714,6 @@ packages: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - write-file-atomic@5.0.1: - resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ws@6.2.3: resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==} peerDependencies: @@ -9035,10 +8813,6 @@ packages: resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} engines: {node: '>= 4.0.0'} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -9112,7 +8886,7 @@ snapshots: ajv: 8.17.1 ajv-formats: 2.1.1(ajv@8.17.1) jwt-decode: 3.1.2 - nanoid: 3.3.7 + nanoid: 3.3.11 uint8arrays: 3.1.1 transitivePeerDependencies: - supports-color @@ -9127,12 +8901,6 @@ snapshots: dependencies: '@babel/highlight': 7.24.7 - '@babel/code-frame@7.26.2': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - js-tokens: 4.0.0 - picocolors: 1.1.1 - '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -9163,20 +8931,12 @@ snapshots: '@babel/generator@7.2.0': dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 jsesc: 2.5.2 lodash: 4.17.21 source-map: 0.5.7 trim-right: 1.0.1 - '@babel/generator@7.26.3': - dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - '@babel/generator@7.27.5': dependencies: '@babel/parser': 7.27.7 @@ -9185,9 +8945,17 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 + '@babel/generator@7.28.3': + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.28.4 '@babel/helper-annotate-as-pure@7.27.3': dependencies: @@ -9233,7 +9001,7 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1 + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -9244,7 +9012,7 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - debug: 4.4.1 + debug: 4.4.3 lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: @@ -9252,19 +9020,19 @@ snapshots: '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 '@babel/helper-member-expression-to-functions@7.27.1': dependencies: '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.27.7 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -9280,7 +9048,7 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.27.7 transitivePeerDependencies: - supports-color @@ -9295,7 +9063,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 '@babel/helper-plugin-utils@7.26.5': {} @@ -9340,7 +9108,7 @@ snapshots: dependencies: '@babel/template': 7.27.2 '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -9356,14 +9124,14 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/parser@7.26.3': - dependencies: - '@babel/types': 7.26.3 - '@babel/parser@7.27.7': dependencies: '@babel/types': 7.27.7 + '@babel/parser@7.28.4': + dependencies: + '@babel/types': 7.28.4 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 @@ -9487,19 +9255,14 @@ snapshots: '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.7)': - dependencies: - '@babel/core': 7.27.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 @@ -9542,12 +9305,12 @@ snapshots: '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.7)': dependencies: @@ -9557,34 +9320,29 @@ snapshots: '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.27.7)': - dependencies: - '@babel/core': 7.27.7 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 @@ -9592,7 +9350,7 @@ snapshots: '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.27.7)': dependencies: '@babel/core': 7.27.7 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.7)': dependencies: @@ -9906,7 +9664,7 @@ snapshots: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -10131,30 +9889,12 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.25.9': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 - '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 '@babel/parser': 7.27.7 '@babel/types': 7.27.7 - '@babel/traverse@7.26.4': - dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 - debug: 4.4.1 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.27.7': dependencies: '@babel/code-frame': 7.27.1 @@ -10162,7 +9902,7 @@ snapshots: '@babel/parser': 7.27.7 '@babel/template': 7.27.2 '@babel/types': 7.27.7 - debug: 4.4.1 + debug: 4.4.3 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -10177,7 +9917,12 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@bcoe/v8-coverage@0.2.3': {} + '@babel/types@7.28.4': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@bcoe/v8-coverage@1.0.2': {} '@biomejs/biome@1.9.4': optionalDependencies: @@ -10214,9 +9959,7 @@ snapshots: '@biomejs/cli-win32-x64@1.9.4': optional: true - '@bufbuild/protobuf@2.2.3': {} - - '@bufbuild/protobuf@2.2.5': {} + '@bufbuild/protobuf@2.9.0': {} '@cbor-extract/cbor-extract-darwin-arm64@2.2.0': optional: true @@ -10378,78 +10121,39 @@ snapshots: human-id: 4.1.1 prettier: 2.8.8 - '@cheqd/sdk@5.2.1': + '@cheqd/sdk-esm@5.3.4': dependencies: - '@cheqd/ts-proto': 4.0.2 - '@cheqd/ts-proto-cjs': '@cheqd/ts-proto@2.4.1' + '@cheqd/ts-proto': 4.1.1 '@cosmjs/amino': 0.33.1 - '@cosmjs/amino-cjs': '@cosmjs/amino@0.30.1' '@cosmjs/crypto': 0.33.1 - '@cosmjs/crypto-cjs': '@cosmjs/crypto@0.30.1' '@cosmjs/encoding': 0.33.1 - '@cosmjs/encoding-cjs': '@cosmjs/encoding@0.30.1' '@cosmjs/math': 0.33.1 - '@cosmjs/math-cjs': '@cosmjs/math@0.30.1' '@cosmjs/proto-signing': 0.33.1 - '@cosmjs/proto-signing-cjs': '@cosmjs/proto-signing@0.30.1' '@cosmjs/stargate': 0.33.1 - '@cosmjs/stargate-cjs': '@cosmjs/stargate@0.30.1' '@cosmjs/tendermint-rpc': 0.33.1 - '@cosmjs/tendermint-rpc-cjs': '@cosmjs/tendermint-rpc@0.30.1' '@cosmjs/utils': 0.33.1 - '@cosmjs/utils-cjs': '@cosmjs/utils@0.30.1' '@stablelib/ed25519': 2.0.2 - '@stablelib/ed25519-cjs': '@stablelib/ed25519@1.0.3' '@types/secp256k1': 4.0.6 - '@types/secp256k1-cjs': '@types/secp256k1@4.0.6' cosmjs-types: 0.9.0 - cosmjs-types-cjs: cosmjs-types@0.7.2 - did-jwt: 8.0.9 - did-jwt-cjs: did-jwt@8.0.9 + did-jwt: 8.0.18 did-resolver: 4.1.0 - did-resolver-cjs: did-resolver@4.1.0 exponential-backoff: 3.1.2 - exponential-backoff-cjs: exponential-backoff@3.1.2 - file-type: 20.4.1 - file-type-cjs: file-type@16.5.4 - long-cjs: long@4.0.0 - multiformats: 13.3.2 - multiformats-cjs: multiformats@9.9.0 + file-type: 21.0.0 + multiformats: 13.4.1 secp256k1: 5.0.1 - secp256k1-cjs: secp256k1@5.0.1 uint8arrays: 5.1.0 - uint8arrays-cjs: uint8arrays@3.1.1 uuid: 11.1.0 - uuid-cjs: uuid@10.0.0 transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - '@cheqd/ts-proto@2.4.1': - dependencies: - '@bufbuild/protobuf': 2.2.3 - long: 5.2.3 - protobufjs: 7.4.0 - - '@cheqd/ts-proto@4.0.2': - dependencies: - '@bufbuild/protobuf': 2.2.5 - long: 5.3.1 - protobufjs: 7.4.0 - - '@confio/ics23@0.6.8': - dependencies: - '@noble/hashes': 1.8.0 - protobufjs: 6.11.4 - - '@cosmjs/amino@0.30.1': + '@cheqd/ts-proto@4.1.1': dependencies: - '@cosmjs/crypto': 0.30.1 - '@cosmjs/encoding': 0.30.1 - '@cosmjs/math': 0.30.1 - '@cosmjs/utils': 0.30.1 + '@bufbuild/protobuf': 2.9.0 + long: 5.3.2 + protobufjs: 7.5.4 '@cosmjs/amino@0.33.1': dependencies: @@ -10458,16 +10162,6 @@ snapshots: '@cosmjs/math': 0.33.1 '@cosmjs/utils': 0.33.1 - '@cosmjs/crypto@0.30.1': - dependencies: - '@cosmjs/encoding': 0.30.1 - '@cosmjs/math': 0.30.1 - '@cosmjs/utils': 0.30.1 - '@noble/hashes': 1.6.1 - bn.js: 5.2.1 - elliptic: 6.6.1 - libsodium-wrappers: 0.7.13 - '@cosmjs/crypto@0.33.1': dependencies: '@cosmjs/encoding': 0.33.1 @@ -10478,46 +10172,21 @@ snapshots: elliptic: 6.6.1 libsodium-wrappers-sumo: 0.7.15 - '@cosmjs/encoding@0.30.1': - dependencies: - base64-js: 1.5.1 - bech32: 1.1.4 - readonly-date: 1.0.0 - '@cosmjs/encoding@0.33.1': dependencies: base64-js: 1.5.1 bech32: 1.1.4 readonly-date: 1.0.0 - '@cosmjs/json-rpc@0.30.1': - dependencies: - '@cosmjs/stream': 0.30.1 - xstream: 11.14.0 - '@cosmjs/json-rpc@0.33.1': dependencies: '@cosmjs/stream': 0.33.1 xstream: 11.14.0 - '@cosmjs/math@0.30.1': - dependencies: - bn.js: 5.2.1 - '@cosmjs/math@0.33.1': dependencies: bn.js: 5.2.1 - '@cosmjs/proto-signing@0.30.1': - dependencies: - '@cosmjs/amino': 0.30.1 - '@cosmjs/crypto': 0.30.1 - '@cosmjs/encoding': 0.30.1 - '@cosmjs/math': 0.30.1 - '@cosmjs/utils': 0.30.1 - cosmjs-types: 0.7.2 - long: 4.0.0 - '@cosmjs/proto-signing@0.33.1': dependencies: '@cosmjs/amino': 0.33.1 @@ -10527,16 +10196,6 @@ snapshots: '@cosmjs/utils': 0.33.1 cosmjs-types: 0.9.0 - '@cosmjs/socket@0.30.1': - dependencies: - '@cosmjs/stream': 0.30.1 - isomorphic-ws: 4.0.1(ws@7.5.10) - ws: 7.5.10 - xstream: 11.14.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - '@cosmjs/socket@0.33.1': dependencies: '@cosmjs/stream': 0.33.1 @@ -10547,25 +10206,6 @@ snapshots: - bufferutil - utf-8-validate - '@cosmjs/stargate@0.30.1': - dependencies: - '@confio/ics23': 0.6.8 - '@cosmjs/amino': 0.30.1 - '@cosmjs/encoding': 0.30.1 - '@cosmjs/math': 0.30.1 - '@cosmjs/proto-signing': 0.30.1 - '@cosmjs/stream': 0.30.1 - '@cosmjs/tendermint-rpc': 0.30.1 - '@cosmjs/utils': 0.30.1 - cosmjs-types: 0.7.2 - long: 4.0.0 - protobufjs: 6.11.4 - xstream: 11.14.0 - transitivePeerDependencies: - - bufferutil - - debug - - utf-8-validate - '@cosmjs/stargate@0.33.1': dependencies: '@cosmjs/amino': 0.33.1 @@ -10581,31 +10221,10 @@ snapshots: - debug - utf-8-validate - '@cosmjs/stream@0.30.1': - dependencies: - xstream: 11.14.0 - '@cosmjs/stream@0.33.1': dependencies: xstream: 11.14.0 - '@cosmjs/tendermint-rpc@0.30.1': - dependencies: - '@cosmjs/crypto': 0.30.1 - '@cosmjs/encoding': 0.30.1 - '@cosmjs/json-rpc': 0.30.1 - '@cosmjs/math': 0.30.1 - '@cosmjs/socket': 0.30.1 - '@cosmjs/stream': 0.30.1 - '@cosmjs/utils': 0.30.1 - axios: 0.21.4 - readonly-date: 1.0.0 - xstream: 11.14.0 - transitivePeerDependencies: - - bufferutil - - debug - - utf-8-validate - '@cosmjs/tendermint-rpc@0.33.1': dependencies: '@cosmjs/crypto': 0.33.1 @@ -10623,14 +10242,8 @@ snapshots: - debug - utf-8-validate - '@cosmjs/utils@0.30.1': {} - '@cosmjs/utils@0.33.1': {} - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - '@digitalbazaar/bitstring@3.1.0': dependencies: base64url-universal: 2.0.0 @@ -10796,18 +10409,18 @@ snapshots: '@electric-sql/pglite@0.3.3': optional: true - '@emnapi/core@1.4.3': + '@emnapi/core@1.5.0': dependencies: - '@emnapi/wasi-threads': 1.0.2 + '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.3': + '@emnapi/runtime@1.5.0': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.2': + '@emnapi/wasi-threads@1.1.0': dependencies: tslib: 2.8.1 optional: true @@ -11123,7 +10736,7 @@ snapshots: chalk: 4.1.2 ci-info: 3.9.0 connect: 3.7.0 - debug: 4.4.1 + debug: 4.4.3 env-editor: 0.4.2 fast-glob: 3.3.2 find-yarn-workspace-root: 2.0.0 @@ -11191,7 +10804,7 @@ snapshots: '@expo/plist': 0.1.3 '@expo/sdk-runtime-versions': 1.0.0 chalk: 4.1.2 - debug: 4.4.1 + debug: 4.4.3 find-up: 5.0.0 getenv: 1.0.0 glob: 7.1.6 @@ -11243,7 +10856,7 @@ snapshots: '@expo/env@0.3.0': dependencies: chalk: 4.1.2 - debug: 4.4.1 + debug: 4.4.3 dotenv: 16.4.5 dotenv-expand: 11.0.7 getenv: 1.0.0 @@ -11274,15 +10887,15 @@ snapshots: '@expo/metro-config@0.18.11': dependencies: '@babel/core': 7.27.7 - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.7 - '@babel/types': 7.27.7 + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@expo/config': 9.0.3 '@expo/env': 0.3.0 '@expo/json-file': 8.3.3 '@expo/spawn-async': 1.7.2 chalk: 4.1.2 - debug: 4.4.1 + debug: 4.4.3 find-yarn-workspace-root: 2.0.0 fs-extra: 9.1.0 getenv: 1.0.0 @@ -11328,7 +10941,7 @@ snapshots: '@expo/image-utils': 0.5.1 '@expo/json-file': 8.3.3 '@react-native/normalize-colors': 0.74.85 - debug: 4.4.1 + debug: 4.4.3 expo-modules-autolinking: 1.11.2 fs-extra: 9.1.0 resolve-from: 5.0.0 @@ -11633,17 +11246,11 @@ snapshots: '@ioredis/commands@1.2.0': {} - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.0': - dependencies: - '@isaacs/balanced-match': 4.0.1 - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -11664,57 +11271,10 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jest/console@30.0.2': - dependencies: - '@jest/types': 30.0.1 - '@types/node': 20.19.2 - chalk: 4.1.2 - jest-message-util: 30.0.2 - jest-util: 30.0.2 - slash: 3.0.0 - - '@jest/core@30.0.3(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3))': - dependencies: - '@jest/console': 30.0.2 - '@jest/pattern': 30.0.1 - '@jest/reporters': 30.0.2 - '@jest/test-result': 30.0.2 - '@jest/transform': 30.0.2 - '@jest/types': 30.0.1 - '@types/node': 20.19.2 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 4.2.0 - exit-x: 0.2.2 - graceful-fs: 4.2.11 - jest-changed-files: 30.0.2 - jest-config: 30.0.3(@types/node@20.19.2)(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3)) - jest-haste-map: 30.0.2 - jest-message-util: 30.0.2 - jest-regex-util: 30.0.1 - jest-resolve: 30.0.2 - jest-resolve-dependencies: 30.0.3 - jest-runner: 30.0.3 - jest-runtime: 30.0.3 - jest-snapshot: 30.0.3 - jest-util: 30.0.2 - jest-validate: 30.0.2 - jest-watcher: 30.0.2 - micromatch: 4.0.8 - pretty-format: 30.0.2 - slash: 3.0.0 - transitivePeerDependencies: - - babel-plugin-macros - - esbuild-register - - supports-color - - ts-node - '@jest/create-cache-key-function@29.7.0': dependencies: '@jest/types': 29.6.3 - '@jest/diff-sequences@30.0.1': {} - '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 @@ -11722,24 +11282,6 @@ snapshots: '@types/node': 20.19.2 jest-mock: 29.7.0 - '@jest/environment@30.0.2': - dependencies: - '@jest/fake-timers': 30.0.2 - '@jest/types': 30.0.1 - '@types/node': 20.19.2 - jest-mock: 30.0.2 - - '@jest/expect-utils@30.0.3': - dependencies: - '@jest/get-type': 30.0.1 - - '@jest/expect@30.0.3': - dependencies: - expect: 30.0.3 - jest-snapshot: 30.0.3 - transitivePeerDependencies: - - supports-color - '@jest/fake-timers@29.7.0': dependencies: '@jest/types': 29.6.3 @@ -11749,99 +11291,15 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - '@jest/fake-timers@30.0.2': - dependencies: - '@jest/types': 30.0.1 - '@sinonjs/fake-timers': 13.0.5 - '@types/node': 20.19.2 - jest-message-util: 30.0.2 - jest-mock: 30.0.2 - jest-util: 30.0.2 - - '@jest/get-type@30.0.1': {} - - '@jest/globals@30.0.3': - dependencies: - '@jest/environment': 30.0.2 - '@jest/expect': 30.0.3 - '@jest/types': 30.0.1 - jest-mock: 30.0.2 - transitivePeerDependencies: - - supports-color - - '@jest/pattern@30.0.1': - dependencies: - '@types/node': 20.19.2 - jest-regex-util: 30.0.1 - - '@jest/reporters@30.0.2': - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 30.0.2 - '@jest/test-result': 30.0.2 - '@jest/transform': 30.0.2 - '@jest/types': 30.0.1 - '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.19.2 - chalk: 4.1.2 - collect-v8-coverage: 1.0.2 - exit-x: 0.2.2 - glob: 10.4.2 - graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 - jest-message-util: 30.0.2 - jest-util: 30.0.2 - jest-worker: 30.0.2 - slash: 3.0.0 - string-length: 4.0.2 - v8-to-istanbul: 9.2.0 - transitivePeerDependencies: - - supports-color - '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 - '@jest/schemas@30.0.1': - dependencies: - '@sinclair/typebox': 0.34.37 - - '@jest/snapshot-utils@30.0.1': - dependencies: - '@jest/types': 30.0.1 - chalk: 4.1.2 - graceful-fs: 4.2.11 - natural-compare: 1.4.0 - - '@jest/source-map@30.0.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - callsites: 3.1.0 - graceful-fs: 4.2.11 - - '@jest/test-result@30.0.2': - dependencies: - '@jest/console': 30.0.2 - '@jest/types': 30.0.1 - '@types/istanbul-lib-coverage': 2.0.6 - collect-v8-coverage: 1.0.2 - - '@jest/test-sequencer@30.0.2': - dependencies: - '@jest/test-result': 30.0.2 - graceful-fs: 4.2.11 - jest-haste-map: 30.0.2 - slash: 3.0.0 - '@jest/transform@29.7.0': dependencies: '@babel/core': 7.27.7 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -11850,30 +11308,10 @@ snapshots: jest-haste-map: 29.7.0 jest-regex-util: 29.6.3 jest-util: 29.7.0 - micromatch: 4.0.7 - pirates: 4.0.6 - slash: 3.0.0 - write-file-atomic: 4.0.2 - transitivePeerDependencies: - - supports-color - - '@jest/transform@30.0.2': - dependencies: - '@babel/core': 7.27.7 - '@jest/types': 30.0.1 - '@jridgewell/trace-mapping': 0.3.25 - babel-plugin-istanbul: 7.0.0 - chalk: 4.1.2 - convert-source-map: 2.0.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.11 - jest-haste-map: 30.0.2 - jest-regex-util: 30.0.1 - jest-util: 30.0.2 micromatch: 4.0.8 pirates: 4.0.7 slash: 3.0.0 - write-file-atomic: 5.0.1 + write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color @@ -11907,26 +11345,15 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 '@types/node': 20.19.2 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - - '@jest/types@30.0.1': - dependencies: - '@jest/pattern': 30.0.1 - '@jest/schemas': 30.0.1 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.19.2 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.5': + '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/gen-mapping@0.3.8': + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 @@ -11938,20 +11365,22 @@ snapshots: '@jridgewell/source-map@0.3.6': dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping@0.3.9': + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.5 '@js-joda/core@5.6.3': {} @@ -12082,11 +11511,11 @@ snapshots: '@multiformats/base-x@4.0.1': {} - '@napi-rs/wasm-runtime@0.2.11': + '@napi-rs/wasm-runtime@1.0.6': dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 + '@tybys/wasm-util': 0.10.1 optional: true '@neon-rs/load@0.0.4': {} @@ -12169,6 +11598,69 @@ snapshots: buffer: 6.0.3 tar: 7.4.3 + '@oxc-project/runtime@0.92.0': {} + + '@oxc-project/types@0.94.0': {} + + '@oxc-resolver/binding-android-arm-eabi@11.9.0': + optional: true + + '@oxc-resolver/binding-android-arm64@11.9.0': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.9.0': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.9.0': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.9.0': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.9.0': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.9.0': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@11.9.0': + optional: true + + '@oxc-resolver/binding-linux-arm64-musl@11.9.0': + optional: true + + '@oxc-resolver/binding-linux-ppc64-gnu@11.9.0': + optional: true + + '@oxc-resolver/binding-linux-riscv64-gnu@11.9.0': + optional: true + + '@oxc-resolver/binding-linux-riscv64-musl@11.9.0': + optional: true + + '@oxc-resolver/binding-linux-s390x-gnu@11.9.0': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@11.9.0': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.9.0': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.9.0': + dependencies: + '@napi-rs/wasm-runtime': 1.0.6 + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@11.9.0': + optional: true + + '@oxc-resolver/binding-win32-ia32-msvc@11.9.0': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@11.9.0': + optional: true + '@paralleldrive/cuid2@2.2.2': dependencies: '@noble/hashes': 1.8.0 @@ -12298,8 +11790,6 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.2.7': {} - '@protobufjs/aspromise@1.1.2': {} '@protobufjs/base64@1.1.2': {} @@ -12323,6 +11813,10 @@ snapshots: '@protobufjs/utf8@1.1.0': {} + '@quansync/fs@0.1.5': + dependencies: + quansync: 0.2.11 + '@react-native-community/cli-clean@10.1.1': dependencies: '@react-native-community/cli-tools': 10.1.1 @@ -12552,7 +12046,7 @@ snapshots: '@react-native/codegen@0.74.87(@babel/preset-env@7.27.2(@babel/core@7.27.7))': dependencies: - '@babel/parser': 7.27.7 + '@babel/parser': 7.28.4 '@babel/preset-env': 7.27.2(@babel/core@7.27.7) glob: 7.2.3 hermes-parser: 0.19.1 @@ -12658,13 +12152,59 @@ snapshots: transitivePeerDependencies: - supports-color - '@rollup/rollup-linux-x64-gnu@4.9.5': + '@rolldown/binding-android-arm64@1.0.0-beta.42': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-beta.42': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-beta.42': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-beta.42': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.42': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.42': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.42': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.42': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.42': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.42': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.42': + dependencies: + '@napi-rs/wasm-runtime': 1.0.6 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.42': + optional: true + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.42': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.42': optional: true - '@scure/base@1.2.1': {} + '@rolldown/pluginutils@1.0.0-beta.42': {} + + '@rollup/rollup-linux-x64-gnu@4.9.5': + optional: true '@scure/base@1.2.6': {} + '@scure/base@2.0.0': {} + '@sd-jwt/core@0.10.0': dependencies: '@sd-jwt/decode': 0.10.0 @@ -12752,8 +12292,6 @@ snapshots: '@sinclair/typebox@0.27.8': {} - '@sinclair/typebox@0.34.37': {} - '@sindresorhus/is@5.6.0': {} '@sinonjs/commons@3.0.1': @@ -12764,10 +12302,6 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@sinonjs/fake-timers@13.0.5': - dependencies: - '@sinonjs/commons': 3.0.1 - '@sovpro/delimited-stream@1.1.0': {} '@sphereon/kmp-mdoc-core@0.2.0-SNAPSHOT.26': @@ -12850,7 +12384,7 @@ snapshots: '@tokenizer/inflate@0.2.7': dependencies: - debug: 4.4.1 + debug: 4.4.3 fflate: 0.8.2 token-types: 6.0.0 transitivePeerDependencies: @@ -12858,15 +12392,7 @@ snapshots: '@tokenizer/token@0.3.0': {} - '@tsconfig/node10@1.0.11': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - - '@tybys/wasm-util@0.9.0': + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 optional: true @@ -12877,30 +12403,34 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.28.4 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.3 + '@babel/types': 7.28.4 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 '@types/node': 20.19.2 + '@types/chai@5.2.2': + dependencies: + '@types/deep-eql': 4.0.2 + '@types/connect@3.4.38': dependencies: '@types/node': 20.19.2 @@ -12920,6 +12450,10 @@ snapshots: dependencies: '@types/node': 20.19.2 + '@types/deep-eql@4.0.2': {} + + '@types/estree@1.0.8': {} + '@types/events@3.0.3': {} '@types/express-serve-static-core@4.19.3': @@ -12968,11 +12502,6 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 - '@types/jest@30.0.0': - dependencies: - expect: 30.0.3 - pretty-format: 30.0.2 - '@types/keygrip@1.0.6': {} '@types/koa-compose@3.2.8': @@ -12990,8 +12519,6 @@ snapshots: '@types/koa-compose': 3.2.8 '@types/node': 20.19.2 - '@types/long@4.0.2': {} - '@types/luxon@3.4.2': {} '@types/methods@1.1.4': {} @@ -13105,16 +12632,10 @@ snapshots: '@types/yargs-parser': 21.0.3 optional: true - '@types/yargs@17.0.32': - dependencies: - '@types/yargs-parser': 21.0.3 - '@types/yargs@17.0.33': dependencies: '@types/yargs-parser': 21.0.3 - '@ungap/structured-clone@1.3.0': {} - '@unimodules/core@7.1.2': dependencies: compare-versions: 3.6.0 @@ -13126,83 +12647,85 @@ snapshots: invariant: 2.2.4 optional: true - '@unrs/resolver-binding-android-arm-eabi@1.9.2': - optional: true + '@urql/core@2.3.6(graphql@15.8.0)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@15.8.0) + graphql: 15.8.0 + wonka: 4.0.15 - '@unrs/resolver-binding-android-arm64@1.9.2': - optional: true + '@urql/core@5.1.1(graphql@15.8.0)': + dependencies: + '@0no-co/graphql.web': 1.2.0(graphql@15.8.0) + wonka: 6.3.5 + transitivePeerDependencies: + - graphql - '@unrs/resolver-binding-darwin-arm64@1.9.2': - optional: true + '@urql/exchange-retry@0.3.0(graphql@15.8.0)': + dependencies: + '@urql/core': 5.1.1(graphql@15.8.0) + graphql: 15.8.0 + wonka: 4.0.15 - '@unrs/resolver-binding-darwin-x64@1.9.2': - optional: true + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 1.0.2 + ast-v8-to-istanbul: 0.3.5 + debug: 4.4.3 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.2.0 + magic-string: 0.30.19 + magicast: 0.3.5 + std-env: 3.9.0 + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.2.4(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3) + transitivePeerDependencies: + - supports-color - '@unrs/resolver-binding-freebsd-x64@1.9.2': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.2': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.9.2': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.9.2': - optional: true - - '@unrs/resolver-binding-linux-arm64-musl@1.9.2': - optional: true - - '@unrs/resolver-binding-linux-ppc64-gnu@1.9.2': - optional: true - - '@unrs/resolver-binding-linux-riscv64-gnu@1.9.2': - optional: true - - '@unrs/resolver-binding-linux-riscv64-musl@1.9.2': - optional: true - - '@unrs/resolver-binding-linux-s390x-gnu@1.9.2': - optional: true - - '@unrs/resolver-binding-linux-x64-gnu@1.9.2': - optional: true - - '@unrs/resolver-binding-linux-x64-musl@1.9.2': - optional: true - - '@unrs/resolver-binding-wasm32-wasi@1.9.2': + '@vitest/expect@3.2.4': dependencies: - '@napi-rs/wasm-runtime': 0.2.11 - optional: true + '@types/chai': 5.2.2 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + tinyrainbow: 2.0.0 - '@unrs/resolver-binding-win32-arm64-msvc@1.9.2': - optional: true + '@vitest/mocker@3.2.4(rolldown-vite@7.1.16(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3))': + dependencies: + '@vitest/spy': 3.2.4 + estree-walker: 3.0.3 + magic-string: 0.30.19 + optionalDependencies: + vite: rolldown-vite@7.1.16(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3) - '@unrs/resolver-binding-win32-ia32-msvc@1.9.2': - optional: true + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 - '@unrs/resolver-binding-win32-x64-msvc@1.9.2': - optional: true + '@vitest/runner@3.2.4': + dependencies: + '@vitest/utils': 3.2.4 + pathe: 2.0.3 + strip-literal: 3.1.0 - '@urql/core@2.3.6(graphql@15.8.0)': + '@vitest/snapshot@3.2.4': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@15.8.0) - graphql: 15.8.0 - wonka: 4.0.15 + '@vitest/pretty-format': 3.2.4 + magic-string: 0.30.19 + pathe: 2.0.3 - '@urql/core@5.1.1(graphql@15.8.0)': + '@vitest/spy@3.2.4': dependencies: - '@0no-co/graphql.web': 1.2.0(graphql@15.8.0) - wonka: 6.3.5 - transitivePeerDependencies: - - graphql + tinyspy: 4.0.4 - '@urql/exchange-retry@0.3.0(graphql@15.8.0)': + '@vitest/utils@3.2.4': dependencies: - '@urql/core': 5.1.1(graphql@15.8.0) - graphql: 15.8.0 - wonka: 4.0.15 + '@vitest/pretty-format': 3.2.4 + loupe: 3.2.1 + tinyrainbow: 2.0.0 '@xmldom/xmldom@0.7.13': {} @@ -13222,15 +12745,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-walk@8.3.3: - dependencies: - acorn: 8.12.0 - acorn@8.12.0: {} agent-base@6.0.2: dependencies: - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -13275,8 +12794,6 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} - ansi-regex@6.2.2: {} ansi-styles@3.2.1: @@ -13289,10 +12806,10 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} - ansi-styles@6.2.3: {} + ansis@4.2.0: {} + any-promise@1.3.0: {} anymatch@3.1.3: @@ -13314,8 +12831,6 @@ snapshots: delegates: 1.0.0 readable-stream: 3.6.2 - arg@4.1.3: {} - arg@5.0.2: {} argparse@1.0.10: @@ -13366,10 +12881,23 @@ snapshots: pvutils: 1.1.3 tslib: 2.8.1 + assertion-error@2.0.1: {} + + ast-kit@2.1.3: + dependencies: + '@babel/parser': 7.28.4 + pathe: 2.0.3 + ast-types@0.15.2: dependencies: tslib: 2.8.1 + ast-v8-to-istanbul@0.3.5: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 9.0.1 + astral-regex@1.0.0: optional: true @@ -13381,7 +12909,8 @@ snapshots: dependencies: tslib: 2.8.1 - async@3.2.5: {} + async@3.2.5: + optional: true asynckit@0.4.0: {} @@ -13393,12 +12922,6 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - axios@0.21.4: - dependencies: - follow-redirects: 1.15.6 - transitivePeerDependencies: - - debug - axios@1.7.9: dependencies: follow-redirects: 1.15.6 @@ -13432,51 +12955,22 @@ snapshots: transitivePeerDependencies: - supports-color - babel-jest@30.0.2(@babel/core@7.27.7): - dependencies: - '@babel/core': 7.27.7 - '@jest/transform': 30.0.2 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 7.0.0 - babel-preset-jest: 30.0.1(@babel/core@7.27.7) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.26.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@7.0.0: dependencies: '@babel/helper-plugin-utils': 7.27.1 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 6.0.2 + istanbul-lib-instrument: 5.2.1 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.6 - - babel-plugin-jest-hoist@30.0.1: dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.27.7): dependencies: @@ -13522,7 +13016,7 @@ snapshots: babel-plugin-react-compiler@0.0.0-experimental-fe484b5-20240912: dependencies: '@babel/generator': 7.2.0 - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 chalk: 4.1.2 invariant: 2.2.4 pretty-format: 24.9.0 @@ -13560,25 +13054,6 @@ snapshots: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.7) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.7) - babel-preset-current-node-syntax@1.2.0(@babel/core@7.27.7): - dependencies: - '@babel/core': 7.27.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.27.7) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.7) - babel-preset-expo@11.0.14(@babel/core@7.27.7)(@babel/preset-env@7.27.2(@babel/core@7.27.7)): dependencies: '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.27.7) @@ -13636,12 +13111,6 @@ snapshots: babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.27.7) - babel-preset-jest@30.0.1(@babel/core@7.27.7): - dependencies: - '@babel/core': 7.27.7 - babel-plugin-jest-hoist: 30.0.1 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.7) - balanced-match@1.0.2: {} base-64@0.1.0: {} @@ -13674,6 +13143,8 @@ snapshots: bignumber.js@9.1.2: {} + birpc@2.6.1: {} + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -13756,10 +13227,6 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.1) - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 - bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -13796,6 +13263,8 @@ snapshots: bytes@3.1.2: {} + cac@6.7.14: {} + cacache@18.0.3: dependencies: '@npmcli/fs': 3.1.1 @@ -13855,8 +13324,6 @@ snapshots: callsites@2.0.0: {} - callsites@3.1.0: {} - camelcase@5.3.1: {} camelcase@6.3.0: {} @@ -13885,6 +13352,14 @@ snapshots: optionalDependencies: cbor-extract: 2.2.0 + chai@5.3.3: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.2.1 + pathval: 2.0.1 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -13896,12 +13371,16 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - char-regex@1.0.2: {} - chardet@0.7.0: {} charenc@0.0.2: {} + check-error@2.1.1: {} + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + chownr@1.1.4: {} chownr@2.0.0: {} @@ -13932,10 +13411,6 @@ snapshots: ci-info@3.9.0: {} - ci-info@4.2.0: {} - - cjs-module-lexer@2.1.0: {} - class-transformer@0.5.1: {} class-validator@0.14.1: @@ -13989,14 +13464,12 @@ snapshots: dependencies: '@hapi/bourne': 3.0.0 inflation: 2.1.0 - qs: 6.12.1 + qs: 6.13.0 raw-body: 2.5.2 type-is: 1.6.18 co@4.6.0: {} - collect-v8-coverage@1.0.2: {} - color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -14123,15 +13596,8 @@ snapshots: js-yaml: 3.14.1 parse-json: 4.0.0 - cosmjs-types@0.7.2: - dependencies: - long: 4.0.0 - protobufjs: 6.11.4 - cosmjs-types@0.9.0: {} - create-require@1.1.1: {} - credentials-context@2.0.0: {} cross-fetch@3.1.8: @@ -14226,6 +13692,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.3: + dependencies: + ms: 2.1.3 + decamelize@1.2.0: optional: true @@ -14235,7 +13705,7 @@ snapshots: dependencies: mimic-response: 3.1.0 - dedent@1.6.0: {} + deep-eql@5.0.2: {} deep-equal@1.0.1: {} @@ -14246,8 +13716,6 @@ snapshots: deepmerge@3.3.0: optional: true - deepmerge@4.3.1: {} - default-gateway@4.2.0: dependencies: execa: 1.0.0 @@ -14273,6 +13741,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + defu@6.1.4: {} + del@6.1.1: dependencies: globby: 11.1.0 @@ -14307,19 +13777,17 @@ snapshots: detect-libc@2.0.4: {} - detect-newline@3.1.0: {} - dezalgo@1.0.4: dependencies: asap: 2.0.6 wrappy: 1.0.2 - did-jwt@8.0.9: + did-jwt@8.0.18: dependencies: '@noble/ciphers': 1.2.1 '@noble/curves': 1.9.2 '@noble/hashes': 1.8.0 - '@scure/base': 1.2.1 + '@scure/base': 2.0.0 canonicalize: 2.0.0 did-resolver: 4.1.0 multibase: 4.0.6 @@ -14333,7 +13801,7 @@ snapshots: '@noble/hashes': 1.8.0 json-canonicalize: 1.2.0 - diff@4.0.2: {} + diff@8.0.2: {} dir-glob@3.0.1: dependencies: @@ -14345,7 +13813,7 @@ snapshots: dotenv@16.4.5: {} - drizzle-kit@0.31.4: + drizzle-kit@0.31.4(patch_hash=990e481b6a673abca15a32df7ea76ac63bfdb9a3fc8657c42db0ce593c3f5d50): dependencies: '@drizzle-team/brocli': 0.10.2 '@esbuild-kit/esm-loader': 2.6.5 @@ -14361,6 +13829,10 @@ snapshots: '@types/pg': 8.15.4 pg: 8.16.3 + dts-resolver@2.1.2(oxc-resolver@11.9.0): + optionalDependencies: + oxc-resolver: 11.9.0 + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -14377,10 +13849,6 @@ snapshots: ee-first@1.1.1: {} - ejs@3.1.10: - dependencies: - jake: 10.9.2 - electron-to-chromium@1.5.178: {} electron-to-chromium@1.5.71: {} @@ -14395,12 +13863,12 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - emittery@0.13.1: {} - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} + empathic@2.0.0: {} + encodeurl@1.0.2: {} encodeurl@2.0.0: {} @@ -14493,6 +13961,8 @@ snapshots: es-errors@1.3.0: {} + es-module-lexer@1.7.0: {} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 @@ -14530,7 +14000,7 @@ snapshots: esbuild-register@3.6.0(esbuild@0.25.5): dependencies: - debug: 4.4.1 + debug: 4.4.3 esbuild: 0.25.5 transitivePeerDependencies: - supports-color @@ -14618,6 +14088,10 @@ snapshots: estraverse@4.3.0: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + esutils@2.0.3: {} eta@3.5.0: {} @@ -14645,30 +14119,9 @@ snapshots: signal-exit: 3.0.7 strip-eof: 1.0.0 - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - exit-x@0.2.2: {} - expand-template@2.0.3: {} - expect@30.0.3: - dependencies: - '@jest/expect-utils': 30.0.3 - '@jest/get-type': 30.0.1 - jest-matcher-utils: 30.0.3 - jest-message-util: 30.0.2 - jest-mock: 30.0.2 - jest-util: 30.0.2 + expect-type@1.2.2: {} expo-asset@10.0.10(expo@51.0.29(@babel/core@7.27.7)(@babel/preset-env@7.27.2(@babel/core@7.27.7))): dependencies: @@ -14863,6 +14316,10 @@ snapshots: transitivePeerDependencies: - encoding + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + fetch-blob@2.1.2: {} fetch-blob@3.2.0: @@ -14880,13 +14337,7 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - file-type@16.5.4: - dependencies: - readable-web-to-node-stream: 3.0.2 - strtok3: 6.3.0 - token-types: 4.2.1 - - file-type@20.4.1: + file-type@21.0.0: dependencies: '@tokenizer/inflate': 0.2.7 strtok3: 10.2.2 @@ -14895,10 +14346,6 @@ snapshots: transitivePeerDependencies: - supports-color - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -15120,6 +14567,10 @@ snapshots: get-symbol-from-current-process-h@1.0.2: {} + get-tsconfig@4.10.1: + dependencies: + resolve-pkg-maps: 1.0.0 + get-tsconfig@4.7.5: dependencies: resolve-pkg-maps: 1.0.0 @@ -15145,15 +14596,6 @@ snapshots: package-json-from-dist: 1.0.0 path-scurry: 1.11.1 - glob@11.0.3: - dependencies: - foreground-child: 3.3.1 - jackspeak: 4.1.1 - minimatch: 10.0.3 - minipass: 7.1.2 - package-json-from-dist: 1.0.0 - path-scurry: 2.0.0 - glob@6.0.4: dependencies: inflight: 1.0.6 @@ -15181,19 +14623,12 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - glob@9.3.5: - dependencies: - fs.realpath: 1.0.0 - minimatch: 8.0.4 - minipass: 4.2.8 - path-scurry: 1.11.1 - globals@11.12.0: {} globalthis@1.0.4: dependencies: define-properties: 1.2.1 - gopd: 1.0.1 + gopd: 1.2.0 globby@11.1.0: dependencies: @@ -15204,10 +14639,6 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - gopd@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - gopd@1.2.0: {} got@13.0.0: @@ -15303,6 +14734,8 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + hookable@5.5.3: {} + hosted-git-info@3.0.8: dependencies: lru-cache: 6.0.0 @@ -15340,21 +14773,19 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color human-id@4.1.1: {} - human-signals@2.1.0: {} - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -15379,11 +14810,6 @@ snapshots: caller-path: 2.0.0 resolve-from: 3.0.0 - import-local@3.2.0: - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -15515,8 +14941,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-generator-fn@2.1.0: {} - is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.2 @@ -15654,23 +15078,13 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.27.7 - '@babel/parser': 7.26.3 + '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color - istanbul-lib-instrument@6.0.2: - dependencies: - '@babel/core': 7.27.7 - '@babel/parser': 7.27.7 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.2 - semver: 7.7.2 - transitivePeerDependencies: - - supports-color - istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 @@ -15679,13 +15093,13 @@ snapshots: istanbul-lib-source-maps@5.0.6: dependencies: - '@jridgewell/trace-mapping': 0.3.25 - debug: 4.4.1 + '@jridgewell/trace-mapping': 0.3.31 + debug: 4.4.3 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: - supports-color - istanbul-reports@3.1.7: + istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 @@ -15696,121 +15110,6 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@4.1.1: - dependencies: - '@isaacs/cliui': 8.0.2 - - jake@10.9.2: - dependencies: - async: 3.2.5 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - - jest-changed-files@30.0.2: - dependencies: - execa: 5.1.1 - jest-util: 30.0.2 - p-limit: 3.1.0 - - jest-circus@30.0.3: - dependencies: - '@jest/environment': 30.0.2 - '@jest/expect': 30.0.3 - '@jest/test-result': 30.0.2 - '@jest/types': 30.0.1 - '@types/node': 20.19.2 - chalk: 4.1.2 - co: 4.6.0 - dedent: 1.6.0 - is-generator-fn: 2.1.0 - jest-each: 30.0.2 - jest-matcher-utils: 30.0.3 - jest-message-util: 30.0.2 - jest-runtime: 30.0.3 - jest-snapshot: 30.0.3 - jest-util: 30.0.2 - p-limit: 3.1.0 - pretty-format: 30.0.2 - pure-rand: 7.0.1 - slash: 3.0.0 - stack-utils: 2.0.6 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-cli@30.0.3(@types/node@20.19.2)(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3)): - dependencies: - '@jest/core': 30.0.3(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3)) - '@jest/test-result': 30.0.2 - '@jest/types': 30.0.1 - chalk: 4.1.2 - exit-x: 0.2.2 - import-local: 3.2.0 - jest-config: 30.0.3(@types/node@20.19.2)(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3)) - jest-util: 30.0.2 - jest-validate: 30.0.2 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - esbuild-register - - supports-color - - ts-node - - jest-config@30.0.3(@types/node@20.19.2)(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3)): - dependencies: - '@babel/core': 7.27.7 - '@jest/get-type': 30.0.1 - '@jest/pattern': 30.0.1 - '@jest/test-sequencer': 30.0.2 - '@jest/types': 30.0.1 - babel-jest: 30.0.2(@babel/core@7.27.7) - chalk: 4.1.2 - ci-info: 4.2.0 - deepmerge: 4.3.1 - glob: 10.4.2 - graceful-fs: 4.2.11 - jest-circus: 30.0.3 - jest-docblock: 30.0.1 - jest-environment-node: 30.0.2 - jest-regex-util: 30.0.1 - jest-resolve: 30.0.2 - jest-runner: 30.0.3 - jest-util: 30.0.2 - jest-validate: 30.0.2 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 30.0.2 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.19.2 - esbuild-register: 3.6.0(esbuild@0.25.5) - ts-node: 10.9.2(@types/node@20.19.2)(typescript@5.8.3) - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-diff@30.0.3: - dependencies: - '@jest/diff-sequences': 30.0.1 - '@jest/get-type': 30.0.1 - chalk: 4.1.2 - pretty-format: 30.0.2 - - jest-docblock@30.0.1: - dependencies: - detect-newline: 3.1.0 - - jest-each@30.0.2: - dependencies: - '@jest/get-type': 30.0.1 - '@jest/types': 30.0.1 - chalk: 4.1.2 - jest-util: 30.0.2 - pretty-format: 30.0.2 - jest-environment-node@29.7.0: dependencies: '@jest/environment': 29.7.0 @@ -15820,16 +15119,6 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - jest-environment-node@30.0.2: - dependencies: - '@jest/environment': 30.0.2 - '@jest/fake-timers': 30.0.2 - '@jest/types': 30.0.1 - '@types/node': 20.19.2 - jest-mock: 30.0.2 - jest-util: 30.0.2 - jest-validate: 30.0.2 - jest-get-type@26.3.0: optional: true @@ -15851,36 +15140,9 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - jest-haste-map@30.0.2: - dependencies: - '@jest/types': 30.0.1 - '@types/node': 20.19.2 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.11 - jest-regex-util: 30.0.1 - jest-util: 30.0.2 - jest-worker: 30.0.2 - micromatch: 4.0.8 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - - jest-leak-detector@30.0.2: - dependencies: - '@jest/get-type': 30.0.1 - pretty-format: 30.0.2 - - jest-matcher-utils@30.0.3: - dependencies: - '@jest/get-type': 30.0.1 - chalk: 4.1.2 - jest-diff: 30.0.3 - pretty-format: 30.0.2 - jest-message-util@29.7.0: dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -15890,145 +15152,23 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-message-util@30.0.2: - dependencies: - '@babel/code-frame': 7.27.1 - '@jest/types': 30.0.1 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 30.0.2 - slash: 3.0.0 - stack-utils: 2.0.6 - jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 '@types/node': 20.19.2 jest-util: 29.7.0 - jest-mock@30.0.2: - dependencies: - '@jest/types': 30.0.1 - '@types/node': 20.19.2 - jest-util: 30.0.2 - - jest-pnp-resolver@1.2.3(jest-resolve@30.0.2): - optionalDependencies: - jest-resolve: 30.0.2 - jest-regex-util@27.5.1: optional: true jest-regex-util@29.6.3: {} - jest-regex-util@30.0.1: {} - - jest-resolve-dependencies@30.0.3: - dependencies: - jest-regex-util: 30.0.1 - jest-snapshot: 30.0.3 - transitivePeerDependencies: - - supports-color - - jest-resolve@30.0.2: - dependencies: - chalk: 4.1.2 - graceful-fs: 4.2.11 - jest-haste-map: 30.0.2 - jest-pnp-resolver: 1.2.3(jest-resolve@30.0.2) - jest-util: 30.0.2 - jest-validate: 30.0.2 - slash: 3.0.0 - unrs-resolver: 1.9.2 - - jest-runner@30.0.3: - dependencies: - '@jest/console': 30.0.2 - '@jest/environment': 30.0.2 - '@jest/test-result': 30.0.2 - '@jest/transform': 30.0.2 - '@jest/types': 30.0.1 - '@types/node': 20.19.2 - chalk: 4.1.2 - emittery: 0.13.1 - exit-x: 0.2.2 - graceful-fs: 4.2.11 - jest-docblock: 30.0.1 - jest-environment-node: 30.0.2 - jest-haste-map: 30.0.2 - jest-leak-detector: 30.0.2 - jest-message-util: 30.0.2 - jest-resolve: 30.0.2 - jest-runtime: 30.0.3 - jest-util: 30.0.2 - jest-watcher: 30.0.2 - jest-worker: 30.0.2 - p-limit: 3.1.0 - source-map-support: 0.5.13 - transitivePeerDependencies: - - supports-color - - jest-runtime@30.0.3: - dependencies: - '@jest/environment': 30.0.2 - '@jest/fake-timers': 30.0.2 - '@jest/globals': 30.0.3 - '@jest/source-map': 30.0.1 - '@jest/test-result': 30.0.2 - '@jest/transform': 30.0.2 - '@jest/types': 30.0.1 - '@types/node': 20.19.2 - chalk: 4.1.2 - cjs-module-lexer: 2.1.0 - collect-v8-coverage: 1.0.2 - glob: 10.4.2 - graceful-fs: 4.2.11 - jest-haste-map: 30.0.2 - jest-message-util: 30.0.2 - jest-mock: 30.0.2 - jest-regex-util: 30.0.1 - jest-resolve: 30.0.2 - jest-snapshot: 30.0.3 - jest-util: 30.0.2 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - jest-serializer@27.5.1: dependencies: '@types/node': 20.19.2 graceful-fs: 4.2.11 optional: true - jest-snapshot@30.0.3: - dependencies: - '@babel/core': 7.27.7 - '@babel/generator': 7.27.5 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.7) - '@babel/types': 7.27.7 - '@jest/expect-utils': 30.0.3 - '@jest/get-type': 30.0.1 - '@jest/snapshot-utils': 30.0.1 - '@jest/transform': 30.0.2 - '@jest/types': 30.0.1 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.27.7) - chalk: 4.1.2 - expect: 30.0.3 - graceful-fs: 4.2.11 - jest-diff: 30.0.3 - jest-matcher-utils: 30.0.3 - jest-message-util: 30.0.2 - jest-util: 30.0.2 - pretty-format: 30.0.2 - semver: 7.7.2 - synckit: 0.11.8 - transitivePeerDependencies: - - supports-color - jest-util@27.5.1: dependencies: '@jest/types': 27.5.1 @@ -16048,15 +15188,6 @@ snapshots: graceful-fs: 4.2.11 picomatch: 2.3.1 - jest-util@30.0.2: - dependencies: - '@jest/types': 30.0.1 - '@types/node': 20.19.2 - chalk: 4.1.2 - ci-info: 4.2.0 - graceful-fs: 4.2.11 - picomatch: 4.0.2 - jest-validate@26.6.2: dependencies: '@jest/types': 26.6.2 @@ -16073,28 +15204,8 @@ snapshots: camelcase: 6.3.0 chalk: 4.1.2 jest-get-type: 29.6.3 - leven: 3.1.0 - pretty-format: 29.7.0 - - jest-validate@30.0.2: - dependencies: - '@jest/get-type': 30.0.1 - '@jest/types': 30.0.1 - camelcase: 6.3.0 - chalk: 4.1.2 - leven: 3.1.0 - pretty-format: 30.0.2 - - jest-watcher@30.0.2: - dependencies: - '@jest/test-result': 30.0.2 - '@jest/types': 30.0.1 - '@types/node': 20.19.2 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.13.1 - jest-util: 30.0.2 - string-length: 4.0.2 + leven: 3.1.0 + pretty-format: 29.7.0 jest-worker@27.5.1: dependencies: @@ -16110,29 +15221,10 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest-worker@30.0.2: - dependencies: - '@types/node': 20.19.2 - '@ungap/structured-clone': 1.3.0 - jest-util: 30.0.2 - merge-stream: 2.0.0 - supports-color: 8.1.1 - - jest@30.0.3(@types/node@20.19.2)(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3)): - dependencies: - '@jest/core': 30.0.3(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3)) - '@jest/types': 30.0.1 - import-local: 3.2.0 - jest-cli: 30.0.3(@types/node@20.19.2)(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3)) - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - esbuild-register - - supports-color - - ts-node - jimp-compact@0.16.1: {} + jiti@2.6.1: {} + joi@17.13.1: dependencies: '@hapi/hoek': 9.3.0 @@ -16156,6 +15248,8 @@ snapshots: js-tokens@4.0.0: {} + js-tokens@9.0.1: {} + js-yaml@3.14.1: dependencies: argparse: 1.0.10 @@ -16170,7 +15264,7 @@ snapshots: jscodeshift@0.14.0(@babel/preset-env@7.27.2(@babel/core@7.27.7)): dependencies: '@babel/core': 7.27.7 - '@babel/parser': 7.27.7 + '@babel/parser': 7.28.4 '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.27.7) '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.27.7) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.27.7) @@ -16204,8 +15298,6 @@ snapshots: json-parse-better-errors@1.0.2: {} - json-parse-even-better-errors@2.3.1: {} - json-schema-deref-sync@0.13.0: dependencies: clone: 2.1.2 @@ -16284,7 +15376,7 @@ snapshots: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.9.1 - debug: 4.4.1 + debug: 4.4.3 delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -16342,12 +15434,6 @@ snapshots: dependencies: libsodium-sumo: 0.7.15 - libsodium-wrappers@0.7.13: - dependencies: - libsodium: 0.7.13 - - libsodium@0.7.13: {} - libsql@0.5.13: dependencies: '@neon-rs/load': 0.0.4 @@ -16370,30 +15456,63 @@ snapshots: transitivePeerDependencies: - supports-color + lightningcss-android-arm64@1.30.2: + optional: true + lightningcss-darwin-arm64@1.19.0: optional: true + lightningcss-darwin-arm64@1.30.2: + optional: true + lightningcss-darwin-x64@1.19.0: optional: true + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + lightningcss-linux-arm-gnueabihf@1.19.0: optional: true + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + lightningcss-linux-arm64-gnu@1.19.0: optional: true + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + lightningcss-linux-arm64-musl@1.19.0: optional: true + lightningcss-linux-arm64-musl@1.30.2: + optional: true + lightningcss-linux-x64-gnu@1.19.0: optional: true + lightningcss-linux-x64-gnu@1.30.2: + optional: true + lightningcss-linux-x64-musl@1.19.0: optional: true + lightningcss-linux-x64-musl@1.30.2: + optional: true + + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + lightningcss-win32-x64-msvc@1.19.0: optional: true + lightningcss-win32-x64-msvc@1.30.2: + optional: true + lightningcss@1.19.0: dependencies: detect-libc: 1.0.3 @@ -16407,6 +15526,22 @@ snapshots: lightningcss-linux-x64-musl: 1.19.0 lightningcss-win32-x64-msvc: 1.19.0 + lightningcss@1.30.2: + dependencies: + detect-libc: 2.0.4 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + lines-and-columns@1.2.4: {} locate-path@3.0.0: @@ -16430,8 +15565,6 @@ snapshots: lodash.isarguments@3.1.0: {} - lodash.memoize@4.1.2: {} - lodash.merge@4.6.2: {} lodash.startcase@4.4.0: {} @@ -16456,22 +15589,20 @@ snapshots: yargs: 15.4.1 optional: true - long@4.0.0: {} - - long@5.2.3: {} - long@5.3.1: {} + long@5.3.2: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 + loupe@3.2.1: {} + lowercase-keys@3.0.0: {} lru-cache@10.2.2: {} - lru-cache@11.1.0: {} - lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -16484,6 +15615,16 @@ snapshots: luxon@3.5.0: {} + magic-string@0.30.19: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magicast@0.3.5: + dependencies: + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + source-map-js: 1.2.1 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -16645,7 +15786,7 @@ snapshots: metro-file-map@0.82.4: dependencies: - debug: 4.4.1 + debug: 4.4.3 fb-watchman: 2.0.2 flow-enums-runtime: 0.0.6 graceful-fs: 4.2.11 @@ -16767,7 +15908,7 @@ snapshots: metro-source-map@0.73.10: dependencies: '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 invariant: 2.2.4 metro-symbolicate: 0.73.10 nullthrows: 1.1.1 @@ -16780,9 +15921,9 @@ snapshots: metro-source-map@0.82.4: dependencies: - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.27.7 '@babel/traverse--for-generate-function-map': '@babel/traverse@7.27.7' - '@babel/types': 7.26.3 + '@babel/types': 7.28.4 flow-enums-runtime: 0.0.6 invariant: 2.2.4 metro-symbolicate: 0.82.4 @@ -16819,7 +15960,7 @@ snapshots: metro-transform-plugins@0.73.10: dependencies: '@babel/core': 7.27.7 - '@babel/generator': 7.27.5 + '@babel/generator': 7.28.3 '@babel/template': 7.27.2 '@babel/traverse': 7.27.7 nullthrows: 1.1.1 @@ -16830,9 +15971,9 @@ snapshots: metro-transform-plugins@0.82.4: dependencies: '@babel/core': 7.27.7 - '@babel/generator': 7.26.3 - '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/generator': 7.28.3 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.7 flow-enums-runtime: 0.0.6 nullthrows: 1.1.1 transitivePeerDependencies: @@ -16841,9 +15982,9 @@ snapshots: metro-transform-worker@0.73.10: dependencies: '@babel/core': 7.27.7 - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.7 - '@babel/types': 7.27.7 + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 babel-preset-fbjs: 3.4.0(@babel/core@7.27.7) metro: 0.73.10 metro-babel-transformer: 0.73.10 @@ -16863,9 +16004,9 @@ snapshots: metro-transform-worker@0.82.4: dependencies: '@babel/core': 7.27.7 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 flow-enums-runtime: 0.0.6 metro: 0.82.4 metro-babel-transformer: 0.82.4 @@ -16884,11 +16025,11 @@ snapshots: dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.27.7 - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.7 + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 absolute-path: 0.0.0 accepts: 1.3.8 async: 3.2.5 @@ -16942,18 +16083,18 @@ snapshots: metro@0.82.4: dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 '@babel/core': 7.27.7 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.7 + '@babel/types': 7.28.4 accepts: 1.3.8 chalk: 4.1.2 ci-info: 2.0.0 connect: 3.7.0 - debug: 4.4.1 + debug: 4.4.3 error-stack-parser: 2.1.4 flow-enums-runtime: 0.0.6 graceful-fs: 4.2.11 @@ -17019,22 +16160,10 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} - minimatch@10.0.3: - dependencies: - '@isaacs/brace-expansion': 5.0.0 - minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.1 - - minimatch@8.0.4: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -17057,8 +16186,6 @@ snapshots: dependencies: yallist: 4.0.0 - minipass@4.2.8: {} - minipass@5.0.0: {} minipass@7.1.2: {} @@ -17109,7 +16236,7 @@ snapshots: dependencies: '@multiformats/base-x': 4.0.1 - multiformats@13.3.2: {} + multiformats@13.4.1: {} multiformats@9.9.0: {} @@ -17128,16 +16255,12 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.7: {} + nanoid@3.3.11: {} nanoid@5.0.9: {} napi-build-utils@2.0.0: {} - napi-postinstall@0.2.4: {} - - natural-compare@1.4.0: {} - ncp@2.0.0: optional: true @@ -17230,10 +16353,6 @@ snapshots: dependencies: path-key: 2.0.1 - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - npmlog@5.0.1: dependencies: are-we-there-yet: 2.0.0 @@ -17379,6 +16498,29 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 + oxc-resolver@11.9.0: + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.9.0 + '@oxc-resolver/binding-android-arm64': 11.9.0 + '@oxc-resolver/binding-darwin-arm64': 11.9.0 + '@oxc-resolver/binding-darwin-x64': 11.9.0 + '@oxc-resolver/binding-freebsd-x64': 11.9.0 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.9.0 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.9.0 + '@oxc-resolver/binding-linux-arm64-gnu': 11.9.0 + '@oxc-resolver/binding-linux-arm64-musl': 11.9.0 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.9.0 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.9.0 + '@oxc-resolver/binding-linux-riscv64-musl': 11.9.0 + '@oxc-resolver/binding-linux-s390x-gnu': 11.9.0 + '@oxc-resolver/binding-linux-x64-gnu': 11.9.0 + '@oxc-resolver/binding-linux-x64-musl': 11.9.0 + '@oxc-resolver/binding-wasm32-wasi': 11.9.0 + '@oxc-resolver/binding-win32-arm64-msvc': 11.9.0 + '@oxc-resolver/binding-win32-ia32-msvc': 11.9.0 + '@oxc-resolver/binding-win32-x64-msvc': 11.9.0 + optional: true + p-cancelable@3.0.0: {} p-filter@2.1.0: @@ -17434,13 +16576,6 @@ snapshots: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - parse-png@2.1.0: dependencies: pngjs: 3.4.0 @@ -17469,18 +16604,15 @@ snapshots: lru-cache: 10.2.2 minipass: 7.1.2 - path-scurry@2.0.0: - dependencies: - lru-cache: 11.1.0 - minipass: 7.1.2 - path-to-regexp@0.1.12: {} path-to-regexp@6.3.0: {} path-type@4.0.0: {} - peek-readable@4.1.0: {} + pathe@2.0.3: {} + + pathval@2.0.1: {} peek-readable@7.0.0: {} @@ -17525,7 +16657,7 @@ snapshots: picomatch@3.0.1: {} - picomatch@4.0.2: {} + picomatch@4.0.3: {} pify@4.0.1: {} @@ -17565,18 +16697,12 @@ snapshots: sonic-boom: 4.2.0 thread-stream: 3.1.0 - pirates@4.0.6: {} - pirates@4.0.7: {} pkg-dir@3.0.0: dependencies: find-up: 3.0.0 - pkg-dir@4.2.0: - dependencies: - find-up: 4.1.0 - plist@3.1.0: dependencies: '@xmldom/xmldom': 0.8.10 @@ -17594,9 +16720,15 @@ snapshots: postcss@8.4.38: dependencies: - nanoid: 3.3.7 + nanoid: 3.3.11 + 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.0 + source-map-js: 1.2.1 postgres-array@2.0.0: {} @@ -17650,12 +16782,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - pretty-format@30.0.2: - dependencies: - '@jest/schemas': 30.0.1 - ansi-styles: 5.2.0 - react-is: 18.3.1 - process-nextick-args@2.0.1: optional: true @@ -17686,37 +16812,6 @@ snapshots: propagate@2.0.1: {} - protobufjs@6.11.4: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/long': 4.0.2 - '@types/node': 20.19.2 - long: 4.0.0 - - protobufjs@7.4.0: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/node': 20.19.2 - long: 5.3.1 - protobufjs@7.5.4: dependencies: '@protobufjs/aspromise': 1.1.2 @@ -17730,7 +16825,7 @@ snapshots: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/node': 20.19.2 - long: 5.3.1 + long: 5.3.2 proxy-addr@2.0.7: dependencies: @@ -17746,8 +16841,6 @@ snapshots: punycode@2.3.1: {} - pure-rand@7.0.1: {} - pvtsutils@1.3.5: dependencies: tslib: 2.8.1 @@ -17760,16 +16853,14 @@ snapshots: qrcode-terminal@0.11.0: {} - qs@6.12.1: - dependencies: - side-channel: 1.1.0 - qs@6.13.0: dependencies: side-channel: 1.1.0 quansync@0.2.10: {} + quansync@0.2.11: {} + query-string@7.1.3: dependencies: decode-uri-component: 0.2.2 @@ -17882,7 +16973,7 @@ snapshots: react-refresh: 0.14.2 regenerator-runtime: 0.13.11 scheduler: 0.25.0 - semver: 7.6.2 + semver: 7.7.2 stacktrace-parser: 0.1.10 whatwg-fetch: 3.6.20 ws: 6.2.3 @@ -17927,9 +17018,7 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - readable-web-to-node-stream@3.0.2: - dependencies: - readable-stream: 3.6.2 + readdirp@4.1.2: {} readline@1.3.0: optional: true @@ -18028,10 +17117,6 @@ snapshots: resolve-alpn@1.2.1: {} - resolve-cwd@3.0.0: - dependencies: - resolve-from: 5.0.0 - resolve-from@3.0.0: {} resolve-from@5.0.0: {} @@ -18094,18 +17179,65 @@ snapshots: dependencies: glob: 7.2.3 - rimraf@4.4.1: - dependencies: - glob: 9.3.5 - rimraf@5.0.10: dependencies: glob: 10.4.2 - rimraf@6.0.1: + rolldown-plugin-dts@0.16.11(oxc-resolver@11.9.0)(rolldown@1.0.0-beta.42)(typescript@5.8.3): + dependencies: + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + ast-kit: 2.1.3 + birpc: 2.6.1 + debug: 4.4.3 + dts-resolver: 2.1.2(oxc-resolver@11.9.0) + get-tsconfig: 4.10.1 + magic-string: 0.30.19 + rolldown: 1.0.0-beta.42 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - oxc-resolver + - supports-color + + rolldown-vite@7.1.16(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3): dependencies: - glob: 11.0.3 - package-json-from-dist: 1.0.0 + '@oxc-project/runtime': 0.92.0 + fdir: 6.5.0(picomatch@4.0.3) + lightningcss: 1.30.2 + picomatch: 4.0.3 + postcss: 8.5.6 + rolldown: 1.0.0-beta.42 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 20.19.2 + esbuild: 0.25.5 + fsevents: 2.3.3 + jiti: 2.6.1 + terser: 5.31.1 + tsx: 4.20.3 + + rolldown@1.0.0-beta.42: + dependencies: + '@oxc-project/types': 0.94.0 + '@rolldown/pluginutils': 1.0.0-beta.42 + ansis: 4.2.0 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.42 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.42 + '@rolldown/binding-darwin-x64': 1.0.0-beta.42 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.42 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.42 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.42 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.42 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.42 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.42 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.42 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.42 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.42 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.42 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.42 run-async@2.4.1: {} @@ -18304,6 +17436,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -18339,12 +17473,7 @@ snapshots: dependencies: atomic-sleep: 1.0.0 - source-map-js@1.2.0: {} - - source-map-support@0.5.13: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 + source-map-js@1.2.1: {} source-map-support@0.5.21: dependencies: @@ -18383,6 +17512,8 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + stackback@0.0.2: {} + stackframe@1.3.4: {} stacktrace-parser@0.1.10: @@ -18399,6 +17530,8 @@ snapshots: statuses@2.0.1: {} + std-env@3.9.0: {} + str2buf@1.3.0: {} stream-buffers@2.2.0: {} @@ -18409,11 +17542,6 @@ snapshots: strict-uri-encode@2.0.0: {} - string-length@4.0.2: - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -18424,7 +17552,7 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 string.prototype.trim@1.2.10: dependencies: @@ -18466,26 +17594,22 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.0.1 - strip-ansi@7.1.2: dependencies: ansi-regex: 6.2.2 strip-bom@3.0.0: {} - strip-bom@4.0.0: {} - strip-eof@1.0.0: {} - strip-final-newline@2.0.0: {} - strip-json-comments@2.0.1: {} strip-json-comments@3.1.1: {} + strip-literal@3.1.0: + dependencies: + js-tokens: 9.0.1 + strnum@1.0.5: optional: true @@ -18494,16 +17618,11 @@ snapshots: '@tokenizer/token': 0.3.0 peek-readable: 7.0.0 - strtok3@6.3.0: - dependencies: - '@tokenizer/token': 0.3.0 - peek-readable: 4.1.0 - structured-headers@0.4.1: {} sucrase@3.34.0: dependencies: - '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 glob: 7.1.6 lines-and-columns: 1.2.4 @@ -18518,11 +17637,11 @@ snapshots: sudo-prompt@9.2.1: optional: true - superagent@10.2.2: + superagent@10.2.3: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.4.1 + debug: 4.4.3 fast-safe-stringify: 2.1.1 form-data: 4.0.4 formidable: 3.5.4 @@ -18532,10 +17651,10 @@ snapshots: transitivePeerDependencies: - supports-color - supertest@7.1.3: + supertest@7.1.4: dependencies: methods: 1.1.2 - superagent: 10.2.2 + superagent: 10.2.3 transitivePeerDependencies: - supports-color @@ -18560,10 +17679,6 @@ snapshots: symbol-observable@2.0.3: {} - synckit@0.11.8: - dependencies: - '@pkgr/core': 0.2.7 - tar-fs@2.1.4: dependencies: chownr: 1.1.4 @@ -18645,6 +17760,12 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.2 + minimatch: 9.0.5 + text-table@0.2.0: {} thenify-all@1.6.0: @@ -18669,6 +17790,23 @@ snapshots: through@2.3.8: {} + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyexec@1.0.1: {} + + tinyglobby@0.2.15: + dependencies: + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + + tinypool@1.1.1: {} + + tinyrainbow@2.0.0: {} + + tinyspy@4.0.4: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -18681,11 +17819,6 @@ snapshots: toidentifier@1.0.1: {} - token-types@4.2.1: - dependencies: - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - token-types@6.0.0: dependencies: '@tokenizer/token': 0.3.0 @@ -18701,48 +17834,36 @@ snapshots: typedarray.prototype.slice: 1.0.3 which-typed-array: 1.1.18 + tree-kill@1.2.2: {} + trim-right@1.0.1: {} ts-interface-checker@0.1.13: {} - ts-jest@29.4.0(@babel/core@7.27.7)(@jest/transform@30.0.2)(@jest/types@29.6.3)(babel-jest@30.0.2(@babel/core@7.27.7))(esbuild@0.25.5)(jest-util@30.0.2)(jest@30.0.3(@types/node@20.19.2)(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3)))(typescript@5.8.3): - dependencies: - bs-logger: 0.2.6 - ejs: 3.1.10 - fast-json-stable-stringify: 2.1.0 - jest: 30.0.3(@types/node@20.19.2)(esbuild-register@3.6.0(esbuild@0.25.5))(ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3)) - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 + tsdown@0.15.6(oxc-resolver@11.9.0)(typescript@5.8.3): + dependencies: + ansis: 4.2.0 + cac: 6.7.14 + chokidar: 4.0.3 + debug: 4.4.3 + diff: 8.0.2 + empathic: 2.0.0 + hookable: 5.5.3 + rolldown: 1.0.0-beta.42 + rolldown-plugin-dts: 0.16.11(oxc-resolver@11.9.0)(rolldown@1.0.0-beta.42)(typescript@5.8.3) semver: 7.7.2 - type-fest: 4.41.0 - typescript: 5.8.3 - yargs-parser: 21.1.1 + tinyexec: 1.0.1 + tinyglobby: 0.2.15 + tree-kill: 1.2.2 + unconfig: 7.3.3 optionalDependencies: - '@babel/core': 7.27.7 - '@jest/transform': 30.0.2 - '@jest/types': 29.6.3 - babel-jest: 30.0.2(@babel/core@7.27.7) - esbuild: 0.25.5 - jest-util: 30.0.2 - - ts-node@10.9.2(@types/node@20.19.2)(typescript@5.8.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.19.2 - acorn: 8.12.0 - acorn-walk: 8.3.3 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 typescript: 5.8.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 + transitivePeerDependencies: + - '@ts-macro/tsc' + - '@typescript/native-preview' + - oxc-resolver + - supports-color + - vue-tsc tslib@1.14.1: {} @@ -18755,7 +17876,7 @@ snapshots: tsx@4.20.3: dependencies: esbuild: 0.25.5 - get-tsconfig: 4.7.5 + get-tsconfig: 4.10.1 optionalDependencies: fsevents: 2.3.3 @@ -18789,8 +17910,6 @@ snapshots: type-fest@0.7.1: {} - type-fest@4.41.0: {} - type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -18862,7 +17981,7 @@ snapshots: uint8arrays@5.1.0: dependencies: - multiformats: 13.3.2 + multiformats: 13.4.1 unbox-primitive@1.1.0: dependencies: @@ -18871,6 +17990,13 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 + unconfig@7.3.3: + dependencies: + '@quansync/fs': 0.1.5 + defu: 6.1.4 + jiti: 2.6.1 + quansync: 0.2.11 + undici-types@5.26.5: {} undici-types@6.21.0: {} @@ -18912,30 +18038,6 @@ snapshots: unpipe@1.0.0: {} - unrs-resolver@1.9.2: - dependencies: - napi-postinstall: 0.2.4 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.9.2 - '@unrs/resolver-binding-android-arm64': 1.9.2 - '@unrs/resolver-binding-darwin-arm64': 1.9.2 - '@unrs/resolver-binding-darwin-x64': 1.9.2 - '@unrs/resolver-binding-freebsd-x64': 1.9.2 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.2 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.2 - '@unrs/resolver-binding-linux-arm64-gnu': 1.9.2 - '@unrs/resolver-binding-linux-arm64-musl': 1.9.2 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.2 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.2 - '@unrs/resolver-binding-linux-riscv64-musl': 1.9.2 - '@unrs/resolver-binding-linux-s390x-gnu': 1.9.2 - '@unrs/resolver-binding-linux-x64-gnu': 1.9.2 - '@unrs/resolver-binding-linux-x64-musl': 1.9.2 - '@unrs/resolver-binding-wasm32-wasi': 1.9.2 - '@unrs/resolver-binding-win32-arm64-msvc': 1.9.2 - '@unrs/resolver-binding-win32-ia32-msvc': 1.9.2 - '@unrs/resolver-binding-win32-x64-msvc': 1.9.2 - update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: browserslist: 4.24.2 @@ -18956,22 +18058,14 @@ snapshots: utils-merge@1.0.1: {} - uuid@10.0.0: {} - uuid@11.1.0: {} + uuid@13.0.0: {} + uuid@7.0.3: {} uuid@8.3.2: {} - v8-compile-cache-lib@3.0.1: {} - - v8-to-istanbul@9.2.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - valibot@1.0.0-beta.8(typescript@5.8.3): optionalDependencies: typescript: 5.8.3 @@ -18988,6 +18082,68 @@ snapshots: vary@1.1.2: {} + vite-node@3.2.4(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3): + dependencies: + cac: 6.7.14 + debug: 4.4.3 + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: rolldown-vite@7.1.16(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3) + transitivePeerDependencies: + - '@types/node' + - esbuild + - jiti + - less + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vitest@3.2.4(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3): + dependencies: + '@types/chai': 5.2.2 + '@vitest/expect': 3.2.4 + '@vitest/mocker': 3.2.4(rolldown-vite@7.1.16(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.2.4 + '@vitest/snapshot': 3.2.4 + '@vitest/spy': 3.2.4 + '@vitest/utils': 3.2.4 + chai: 5.3.3 + debug: 4.4.3 + expect-type: 1.2.2 + magic-string: 0.30.19 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: rolldown-vite@7.1.16(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3) + vite-node: 3.2.4(@types/node@20.19.2)(esbuild@0.25.5)(jiti@2.6.1)(terser@5.31.1)(tsx@4.20.3) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 20.19.2 + transitivePeerDependencies: + - esbuild + - jiti + - less + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vlq@1.0.1: {} walker@1.0.8: @@ -19085,6 +18241,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + wide-align@1.1.5: dependencies: string-width: 4.2.3 @@ -19109,9 +18270,9 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 wrappy@1.0.2: {} @@ -19126,11 +18287,6 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - write-file-atomic@5.0.1: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 4.1.0 - ws@6.2.3: dependencies: async-limiter: 1.0.1 @@ -19208,8 +18364,6 @@ snapshots: ylru@1.4.0: {} - yn@3.1.1: {} - yocto-queue@0.1.0: {} zod-validation-error@2.1.0(zod@3.25.67): diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2657bb735f..72473a0e0e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -10,8 +10,7 @@ catalog: rxjs: ^7.8.2 class-transformer: 0.5.1 class-validator: 0.14.1 - reflect-metadata: ^0.2.2 - rimraf: ^6.0.1 + reflect-metadata: 0.2.2 typescript: ~5.8.3 "@stablelib/ed25519": ^1.0.3 zod: ^3.25.56 @@ -26,7 +25,6 @@ catalog: "@astronautlabs/jsonpath": ^1.1.2 "@sphereon/pex-models": ^2.3.2 "@animo-id/pex": ^6.1.0 - ts-node: ^10.9.2 "@types/express": ^4.17.23 "@types/ws": ^8.18.1 ws: ^8.18.2 @@ -44,5 +42,5 @@ onlyBuiltDependencies: - "@hyperledger/anoncreds-nodejs" - "@hyperledger/indy-vdr-nodejs" - "@openwallet-foundation/askar-nodejs" - - "zstd-napi" - - "cbor-extract" + - zstd-napi + - cbor-extract diff --git a/samples/extension-module/dummy/repository/DummyRepository.ts b/samples/extension-module/dummy/repository/DummyRepository.ts index 6f0cc4e46b..d7edc5deee 100644 --- a/samples/extension-module/dummy/repository/DummyRepository.ts +++ b/samples/extension-module/dummy/repository/DummyRepository.ts @@ -1,4 +1,4 @@ -import { EventEmitter, InjectionSymbols, Repository, StorageService, inject, injectable } from '@credo-ts/core' +import { EventEmitter, InjectionSymbols, Repository, type StorageService, inject, injectable } from '@credo-ts/core' import { DummyRecord } from './DummyRecord' diff --git a/samples/extension-module/jest.config.ts b/samples/extension-module/jest.config.ts deleted file mode 100644 index 93c0197296..0000000000 --- a/samples/extension-module/jest.config.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../../jest.config.base' - -import packageJson from './package.json' - -const config: Config.InitialOptions = { - ...base, - displayName: packageJson.name, - setupFilesAfterEnv: ['./tests/setup.ts'], -} - -export default config diff --git a/samples/extension-module/package.json b/samples/extension-module/package.json index 60588ec97b..f79a8b812b 100644 --- a/samples/extension-module/package.json +++ b/samples/extension-module/package.json @@ -9,11 +9,10 @@ }, "license": "Apache-2.0", "scripts": { - "requester": "ts-node requester.ts", - "responder": "ts-node responder.ts" + "requester": "vite-node requester.ts", + "responder": "vite-node responder.ts" }, "devDependencies": { - "ts-node": "catalog:", "@types/express": "catalog:", "@types/ws": "catalog:" }, diff --git a/samples/extension-module/responder.ts b/samples/extension-module/responder.ts index ea8fd414c8..4265657853 100644 --- a/samples/extension-module/responder.ts +++ b/samples/extension-module/responder.ts @@ -7,7 +7,7 @@ import { DidCommModule } from '@credo-ts/didcomm' import { DidCommHttpInboundTransport, DidCommWsInboundTransport, agentDependencies } from '@credo-ts/node' import { askar } from '@openwallet-foundation/askar-nodejs' import express from 'express' -import { Server } from 'ws' +import { WebSocketServer } from 'ws' import { DummyEventTypes, DummyModule, DummyState } from './dummy' @@ -16,7 +16,7 @@ const run = async () => { const port = process.env.RESPONDER_PORT ? Number(process.env.RESPONDER_PORT) : 3002 const autoAcceptRequests = true const app = express() - const socketServer = new Server({ noServer: true }) + const socketServer = new WebSocketServer({ noServer: true }) const httpInboundTransport = new DidCommHttpInboundTransport({ app, port }) const wsInboundTransport = new DidCommWsInboundTransport({ server: socketServer }) diff --git a/samples/extension-module/tests/setup.ts b/samples/extension-module/tests/setup.ts deleted file mode 100644 index 34e38c9705..0000000000 --- a/samples/extension-module/tests/setup.ts +++ /dev/null @@ -1 +0,0 @@ -jest.setTimeout(120000) diff --git a/samples/extension-module/tsconfig.json b/samples/extension-module/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/samples/extension-module/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/samples/mediator.ts b/samples/mediator.ts index 43aabf79aa..bd4988598c 100644 --- a/samples/mediator.ts +++ b/samples/mediator.ts @@ -17,7 +17,7 @@ import type { InitConfig } from '@credo-ts/core' import { askar } from '@openwallet-foundation/askar-nodejs' import express from 'express' -import { Server } from 'ws' +import { WebSocketServer } from 'ws' import { TestLogger } from '../packages/core/tests/logger' @@ -36,7 +36,7 @@ const port = process.env.AGENT_PORT ? Number(process.env.AGENT_PORT) : 3001 // We create our own instance of express here. This is not required // but allows use to use the same server (and port) for both WebSockets and HTTP const app = express() -const socketServer = new Server({ noServer: true }) +const socketServer = new WebSocketServer({ noServer: true }) const endpoints = process.env.AGENT_ENDPOINTS?.split(',') ?? [`http://localhost:${port}`, `ws://localhost:${port}`] @@ -94,16 +94,12 @@ httpInboundTransport.app.get('/invitation', async (req, res) => { } }) -const run = async () => { - await agent.initialize() +await agent.initialize() - // When an 'upgrade' to WS is made on our http server, we forward the - // request to the WS server - httpInboundTransport.server?.on('upgrade', (request, socket, head) => { - socketServer.handleUpgrade(request, socket as Socket, head, (socket) => { - socketServer.emit('connection', socket, request) - }) +// When an 'upgrade' to WS is made on our http server, we forward the +// request to the WS server +httpInboundTransport.server?.on('upgrade', (request, socket, head) => { + socketServer.handleUpgrade(request, socket as Socket, head, (socket) => { + socketServer.emit('connection', socket, request) }) -} - -void run() +}) diff --git a/samples/tails/FullTailsFileService.ts b/samples/tails/FullTailsFileService.ts index 3cd0fedc64..73816c01b0 100644 --- a/samples/tails/FullTailsFileService.ts +++ b/samples/tails/FullTailsFileService.ts @@ -30,7 +30,7 @@ export class FullTailsFileService extends BasicTailsFileService { `${this.tailsServerBaseUrl}/${encodeURIComponent(tailsFileId)}`, { method: 'PUT', - body: data, + body: data.getBuffer(), } ) if (response.status !== 200) { diff --git a/samples/tails/package.json b/samples/tails/package.json index 7f1c303562..063fb1ce0b 100644 --- a/samples/tails/package.json +++ b/samples/tails/package.json @@ -9,10 +9,7 @@ }, "license": "Apache-2.0", "scripts": { - "start": "ts-node server.ts" - }, - "devDependencies": { - "ts-node": "catalog:" + "start": "vite-node server.ts" }, "dependencies": { "@credo-ts/anoncreds": "workspace:*", diff --git a/samples/tails/tsconfig.json b/samples/tails/tsconfig.json deleted file mode 100644 index 46efe6f721..0000000000 --- a/samples/tails/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "types": ["jest"] - } -} diff --git a/tests/jest.config.ts b/tests/jest.config.ts deleted file mode 100644 index 0f965f5f8a..0000000000 --- a/tests/jest.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { Config } from '@jest/types' - -import base from '../jest.config.base' - -const config: Config.InitialOptions = { - ...base, - displayName: '@credo-ts/e2e-test', - setupFilesAfterEnv: ['../packages/core/tests/setup.ts'], -} - -export default config diff --git a/tests/nockToExpress.ts b/tests/nockToExpress.ts index bfd31c186b..ea04fe50a5 100644 --- a/tests/nockToExpress.ts +++ b/tests/nockToExpress.ts @@ -68,6 +68,6 @@ export function setupNockToExpress(baseUrl: string, app: Express) { return () => { cleanAll() - jest.clearAllMocks() + vi.clearAllMocks() } } diff --git a/tests/setup.ts b/tests/setup.ts new file mode 100644 index 0000000000..55cc4e1dd9 --- /dev/null +++ b/tests/setup.ts @@ -0,0 +1,42 @@ +import 'reflect-metadata' +import type { DidCommConnectionRecord } from '@credo-ts/didcomm' +import testLogger from '../packages/core/tests/logger' + +process.on('unhandledRejection', (reason) => { + testLogger.error('Unhandled rejection in test', { + reason, + }) + + process.exit(1) +}) + +expect.extend({ + toBeConnectedWith, +}) + +// Custom matchers which can be used to extend Vitest matchers via extend, e. g. `expect.extend({ toBeConnectedWith })`. +function toBeConnectedWith(actual: DidCommConnectionRecord, expected: DidCommConnectionRecord) { + actual.assertReady() + expected.assertReady() + + const pass = actual.theirDid === expected.did + if (pass) { + return { + message: () => `expected connection ${actual.theirDid} not to be connected to with ${expected.did}`, + pass: true, + } + } + return { + message: () => `expected connection ${actual.theirDid} to be connected to with ${expected.did}`, + pass: false, + } +} + +interface CustomMatchers { + toBeConnectedWith(connection: DidCommConnectionRecord): R +} + +declare module 'vitest' { + // biome-ignore lint/suspicious/noExplicitAny: + interface Matchers extends CustomMatchers {} +} diff --git a/tests/transport/SubjectOutboundTransport.ts b/tests/transport/SubjectOutboundTransport.ts index 58b5c5f982..7fa69632f6 100644 --- a/tests/transport/SubjectOutboundTransport.ts +++ b/tests/transport/SubjectOutboundTransport.ts @@ -56,7 +56,9 @@ export class SubjectOutboundTransport implements DidCommOutboundTransport { next: async ({ message }: SubjectMessage) => { this.logger.test('Received message') - await messageReceiver.receiveMessage(message) + await messageReceiver + .receiveMessage(message) + .catch((e) => this.agentContext.config.logger.error('Error processing message', e)) }, }) diff --git a/tests/types.ts b/tests/types.ts new file mode 100644 index 0000000000..c6be819cd7 --- /dev/null +++ b/tests/types.ts @@ -0,0 +1,6 @@ +import type { MockedClass } from 'vitest' + +// biome-ignore lint/suspicious/noExplicitAny: +export type MockedClassConstructor = MockedClass< + T & { new (): InstanceType } +> diff --git a/tests/vitest.d.ts b/tests/vitest.d.ts new file mode 100644 index 0000000000..966573b2d6 --- /dev/null +++ b/tests/vitest.d.ts @@ -0,0 +1,10 @@ +import type { DidCommConnectionRecord } from '@credo-ts/didcomm' + +interface CustomMatchers { + toBeConnectedWith(connection: DidCommConnectionRecord): R +} + +declare module 'vitest' { + // biome-ignore lint/suspicious/noExplicitAny: + interface Matchers extends CustomMatchers {} +} diff --git a/tsconfig.build.json b/tsconfig.build.json index 46cdcd86a5..844dab9eae 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,6 +1,8 @@ { + "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { - "module": "commonjs", + "module": "es2022", + "moduleResolution": "bundler", "target": "ES2020", "declaration": true, "sourceMap": true, @@ -12,10 +14,22 @@ "allowSyntheticDefaultImports": true, "resolveJsonModule": true, "skipLibCheck": true, + "skipDefaultLibCheck": true, + "verbatimModuleSyntax": true, "experimentalDecorators": true, "emitDecoratorMetadata": true, // TODO: we should update code to assume errors are of type 'unknown' "useUnknownInCatchVariables": false }, - "exclude": ["node_modules", "build", "**/*.test.ts", "**/__tests__/*.ts", "**/__mocks__/*.ts", "**/build/**"] + "exclude": [ + "node_modules", + "**/node_modules/**", + "build", + "**/build/**", + "**/cli-build/**", + "**/*.test.ts", + "**/__tests__/*.ts", + "**/__mocks__/*.ts", + "**/.pnpm/**" + ] } diff --git a/tsconfig.json b/tsconfig.json index 80463f70a7..2e528ef3e6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,27 @@ { "extends": "./tsconfig.build.json", - "ts-node": { - "files": true - }, "compilerOptions": { "baseUrl": ".", - "outDir": "__", - "types": ["jest", "node"], + "types": ["node", "vitest/globals"], "allowJs": true }, - "exclude": ["node_modules", "**/build/**", "coverage", "**/cli-build/**", "**/bin.js"] + "include": [ + "tests", + "samples", + "packages", + "tests/vitest.d.ts", + "demo", + "demo-openid", + "packages/drizzle-storage/types/shell.d.ts" + ], + "exclude": [ + "node_modules", + "**/node_modules/**", + "build", + "**/build/**", + "**/cli-build/**", + "cli-build", + ".pnpm", + "**/.pnpm/**" + ] } diff --git a/tsconfig.test.json b/tsconfig.test.json deleted file mode 100644 index 8b157785fd..0000000000 --- a/tsconfig.test.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "./tsconfig.build.json", - "compilerOptions": { - "baseUrl": ".", - "types": ["jest", "node"] - }, - "include": [ - "tests", - "samples", - "demo", - "demo-openid", - "packages/core/types/jest.d.ts", - "packages/drizzle-storage/types/shell.d.ts" - ], - "exclude": ["node_modules", "build", "**/build/**"] -} diff --git a/tsdown.config.base.ts b/tsdown.config.base.ts new file mode 100644 index 0000000000..d4ea342bbf --- /dev/null +++ b/tsdown.config.base.ts @@ -0,0 +1,41 @@ +import path from 'node:path' +import type { UserConfig } from 'tsdown' + +export default [ + { + entry: ['src/index.ts'], + outDir: 'build', + unbundle: true, + format: 'esm', + target: 'es2020', + tsconfig: path.join(import.meta.dirname, 'tsconfig.build.json'), + dts: { + sourcemap: true, + tsconfig: path.join(import.meta.dirname, 'tsconfig.build.json'), + }, + platform: 'neutral', + logLevel: 'error', + }, + { + entry: ['src/index.ts'], + outDir: 'build', + unbundle: true, + format: 'cjs', + target: 'es2020', + tsconfig: path.join(import.meta.dirname, 'tsconfig.build.json'), + dts: { + sourcemap: true, + tsconfig: path.join(import.meta.dirname, 'tsconfig.build.json'), + }, + platform: 'neutral', + logLevel: 'error', + plugins: [ + { + // Updates dynamic imports to require when transpiling for CJS + // See: https://github.com/rolldown/tsdown/issues/532 + name: 'dynamic-import-to-require', + transform: (code) => code.split(' await import(').join(' require('), + }, + ], + }, +] satisfies UserConfig diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000000..558df5341d --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,56 @@ +import { defineConfig } from 'vitest/config' + +// NOTE: we use vite-rolldown instead of vite. Vite is migrating from +// using ESBuild to Rolldown. The bundler we use `tsdown`, is also built +// on Rolldown, which means it has the same features. Specifically ESBuild +// does not support emitting decorator metadata, a feature we rely on heavily +// for class-transformer, class-validator and tsyringe. + +export default defineConfig({ + test: { + // Ideally we move away from globals, but this + // makes the migration from jest a lot easier + globals: true, + watch: false, + + // hooks sometimes interact with ledger etc, so it needs to be longer than default 10000 + hookTimeout: 40000, + testTimeout: 120000, + + setupFiles: ['./tests/setup.ts'], + coverage: { + exclude: ['/build/', '/node_modules/', '/__tests__/', 'tests', 'coverage'], + }, + + // Enable for debugging + // logHeapUsage: true, + + projects: [ + { + extends: true, + test: { + name: 'unit', + include: ['**/*.{test,spec}.?(c|m)[jt]s?(x)'], + // Ignore e2e tests + exclude: ['**/node_modules/**', '**/build/**', '**/*.e2e.{test,spec}.?(c|m)[jt]s?(x)'], + }, + }, + { + extends: true, + test: { + name: 'e2e', + include: ['**/*.e2e.{test,spec}.?(c|m)[jt]s?(x)'], + // Ignore drizzle tests + exclude: ['**/node_modules/**', '**/build/**', '**/*.drizzle.e2e.{test,spec}.?(c|m)[jt]s?(x)'], + }, + }, + { + extends: true, + test: { + name: 'drizzle', + include: ['**/*.drizzle.e2e.{test,spec}.?(c|m)[jt]s?(x)'], + }, + }, + ], + }, +})