diff --git a/app/jest.config.cjs b/app/jest.config.cjs index 2c1879676..18468c601 100644 --- a/app/jest.config.cjs +++ b/app/jest.config.cjs @@ -2,7 +2,7 @@ module.exports = { preset: 'react-native', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], transformIgnorePatterns: [ - 'node_modules/(?!(react-native|@react-native|@react-navigation|@react-native-community|@segment/analytics-react-native|@openpassport|react-native-keychain|react-native-check-version|react-native-nfc-manager|react-native-passport-reader|uuid|@stablelib|@react-native-google-signin|react-native-cloud-storage|@react-native-clipboard|@react-native-firebase)/)', + 'node_modules/(?!(react-native|@react-native|@react-navigation|@react-native-community|@segment/analytics-react-native|@openpassport|react-native-keychain|react-native-check-version|react-native-nfc-manager|react-native-passport-reader|react-native-gesture-handler|uuid|@stablelib|@react-native-google-signin|react-native-cloud-storage|@react-native-clipboard|@react-native-firebase)/)', ], setupFiles: ['/jest.setup.js'], testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.[jt]sx?$', diff --git a/app/jest.setup.js b/app/jest.setup.js index 30f36de6f..0f304e48d 100644 --- a/app/jest.setup.js +++ b/app/jest.setup.js @@ -47,6 +47,11 @@ jest.mock('@segment/analytics-react-native', () => { reset: jest.fn(), }; + // Mock flush policy classes + const MockFlushPolicy = class { + constructor() {} + }; + return { createClient: jest.fn(() => mockClient), EventPlugin: jest.fn(), @@ -54,7 +59,10 @@ jest.mock('@segment/analytics-react-native', () => { ENRICHMENT: 'enrichment', DESTINATION: 'destination', BEFORE: 'before', + before: 'before', }, + StartupFlushPolicy: MockFlushPolicy, + BackgroundFlushPolicy: MockFlushPolicy, }; }); diff --git a/app/package.json b/app/package.json index beaea521e..091917b98 100644 --- a/app/package.json +++ b/app/package.json @@ -39,6 +39,7 @@ "install-app:setup": "yarn install && yarn build:deps && cd ios && bundle install && cd ..", "ios": "react-native run-ios", "ios:fastlane-debug": "yarn reinstall && bundle exec fastlane --verbose ios internal_test", + "setup": "yarn clean:build && yarn install && yarn build:deps && cd ios && bundle install && bundle exec pod install --repo-update && cd .. && yarn clean:xcode-env-local", "lint": "eslint .", "lint:fix": "eslint --fix .", "nice": "yarn lint:fix && yarn fmt:fix", diff --git a/app/src/screens/prove/ProveScreen.tsx b/app/src/screens/prove/ProveScreen.tsx index ec1959251..bed40977f 100644 --- a/app/src/screens/prove/ProveScreen.tsx +++ b/app/src/screens/prove/ProveScreen.tsx @@ -233,6 +233,31 @@ const ProveScreen: React.FC = () => { onLayout={handleScrollViewLayout} > + + {/* Display userDefinedData if it exists */} + {selectedApp?.userDefinedData && ( + + + Additional Information: + + + + {selectedApp.userDefinedData} + + + + )} + { return crypto.createHmac(algo, key).update(data).digest(); }); -// @ts-expect-error ethers.pbkdf2.register((passwd, salt, iter, keylen, algo) => { return crypto.pbkdf2Sync(passwd, salt, iter, keylen, algo); }); diff --git a/app/src/utils/proving/provingInputs.ts b/app/src/utils/proving/provingInputs.ts index 698d40524..261f5b39d 100644 --- a/app/src/utils/proving/provingInputs.ts +++ b/app/src/utils/proving/provingInputs.ts @@ -2,8 +2,12 @@ import { LeanIMT } from '@openpassport/zk-kit-lean-imt'; import { SMT } from '@openpassport/zk-kit-smt'; import { attributeToPosition, + attributeToPosition_ID, DEFAULT_MAJORITY, + DocumentCategory, + ID_CARD_ATTESTATION_ID, PASSPORT_ATTESTATION_ID, + SelfAppDisclosureConfig, } from '@selfxyz/common'; import { SelfApp } from '@selfxyz/common'; import { getCircuitNameFromPassportData } from '@selfxyz/common'; @@ -13,9 +17,12 @@ import { generateCircuitInputsVCandDisclose, } from '@selfxyz/common'; import { hashEndpointWithScope } from '@selfxyz/common'; +import { calculateUserIdentifierHash } from '@selfxyz/common'; import { PassportData } from '@selfxyz/common'; import nameAndDobSMTData from '@selfxyz/common/ofacdata/outputs/nameAndDobSMT.json'; +import nameAndDobSMTDataID from '@selfxyz/common/ofacdata/outputs/nameAndDobSMT_ID.json'; import nameAndYobSMTData from '@selfxyz/common/ofacdata/outputs/nameAndYobSMT.json'; +import nameAndYobSMTDataID from '@selfxyz/common/ofacdata/outputs/nameAndYobSMT_ID.json'; import passportNoAndNationalitySMTData from '@selfxyz/common/ofacdata/outputs/passportNoAndNationalitySMT.json'; import { poseidon2 } from 'poseidon-lite'; @@ -55,19 +62,17 @@ export function generateTEEInputsDisclose( passportData: PassportData, selfApp: SelfApp, ) { - const { scope, userId, disclosures, endpoint } = selfApp; + const { scope, disclosures, endpoint, userId, userDefinedData, chainID } = + selfApp; + const userIdentifierHash = calculateUserIdentifierHash( + chainID, + userId, + userDefinedData, + ); const scope_hash = hashEndpointWithScope(endpoint, scope); - const selector_dg1 = Array(88).fill('0'); - Object.entries(disclosures).forEach(([attribute, reveal]) => { - if (['ofac', 'excludedCountries', 'minimumAge'].includes(attribute)) { - return; - } - if (reveal) { - const [start, end] = - attributeToPosition[attribute as keyof typeof attributeToPosition]; - selector_dg1.fill('1', start, end + 1); - } - }); + const document: DocumentCategory = passportData.documentCategory; + + const selector_dg1 = getSelectorDg1(document, disclosures); const majority = disclosures.minimumAge ? disclosures.minimumAge.toString() @@ -76,14 +81,18 @@ export function generateTEEInputsDisclose( const selector_ofac = disclosures.ofac ? 1 : 0; - const { passportNoAndNationalitySMT, nameAndDobSMT, nameAndYobSMT } = - getOfacSMTs(); - const serialized_tree = useProtocolStore.getState().passport.commitment_tree; + const { + passportNoAndNationalitySMT, + nameAndDobSMT, + nameAndYobSMT, + nameAndDobSMTID, + nameAndYobSMTID, + } = getOfacSMTs(); + const serialized_tree = useProtocolStore.getState()[document].commitment_tree; const tree = LeanIMT.import((a, b) => poseidon2([a, b]), serialized_tree); - const inputs = generateCircuitInputsVCandDisclose( secret, - PASSPORT_ATTESTATION_ID, + document === 'passport' ? PASSPORT_ATTESTATION_ID : ID_CARD_ATTESTATION_ID, passportData, scope_hash, selector_dg1, @@ -91,15 +100,18 @@ export function generateTEEInputsDisclose( tree, majority, passportNoAndNationalitySMT, - nameAndDobSMT, - nameAndYobSMT, + document === 'passport' ? nameAndDobSMT : nameAndDobSMTID, + document === 'passport' ? nameAndYobSMT : nameAndYobSMTID, selector_ofac, disclosures.excludedCountries ?? [], - userId, + userIdentifierHash.toString(), ); return { inputs, - circuitName: 'vc_and_disclose', + circuitName: + passportData.documentCategory === 'passport' + ? 'vc_and_disclose' + : 'vc_and_disclose_id', endpointType: selfApp.endpointType, endpoint: selfApp.endpoint, }; @@ -115,5 +127,59 @@ function getOfacSMTs() { nameAndDobSMT.import(nameAndDobSMTData); const nameAndYobSMT = new SMT(poseidon2, true); nameAndYobSMT.import(nameAndYobSMTData); - return { passportNoAndNationalitySMT, nameAndDobSMT, nameAndYobSMT }; + const nameAndDobSMTID = new SMT(poseidon2, true); + nameAndDobSMTID.import(nameAndDobSMTDataID); + const nameAndYobSMTID = new SMT(poseidon2, true); + nameAndYobSMTID.import(nameAndYobSMTDataID); + return { + passportNoAndNationalitySMT, + nameAndDobSMT, + nameAndYobSMT, + nameAndDobSMTID, + nameAndYobSMTID, + }; +} + +function getSelectorDg1( + document: DocumentCategory, + disclosures: SelfAppDisclosureConfig, +) { + switch (document) { + case 'passport': + return getSelectorDg1Passport(disclosures); + case 'id_card': + return getSelectorDg1IdCard(disclosures); + } +} + +function getSelectorDg1Passport(disclosures: SelfAppDisclosureConfig) { + const selector_dg1 = Array(88).fill('0'); + Object.entries(disclosures).forEach(([attribute, reveal]) => { + if (['ofac', 'excludedCountries', 'minimumAge'].includes(attribute)) { + return; + } + if (reveal) { + const [start, end] = + attributeToPosition[attribute as keyof typeof attributeToPosition]; + selector_dg1.fill('1', start, end + 1); + } + }); + return selector_dg1; +} + +function getSelectorDg1IdCard(disclosures: SelfAppDisclosureConfig) { + const selector_dg1 = Array(90).fill('0'); + Object.entries(disclosures).forEach(([attribute, reveal]) => { + if (['ofac', 'excludedCountries', 'minimumAge'].includes(attribute)) { + return; + } + if (reveal) { + const [start, end] = + attributeToPosition_ID[ + attribute as keyof typeof attributeToPosition_ID + ]; + selector_dg1.fill('1', start, end + 1); + } + }); + return selector_dg1; } diff --git a/app/src/utils/proving/provingMachine.ts b/app/src/utils/proving/provingMachine.ts index 4d7fd5afb..a7c042cb3 100644 --- a/app/src/utils/proving/provingMachine.ts +++ b/app/src/utils/proving/provingMachine.ts @@ -1,7 +1,11 @@ -import { WS_RPC_URL_VC_AND_DISCLOSE } from '@selfxyz/common'; -import { EndpointType, SelfApp } from '@selfxyz/common'; -import { getCircuitNameFromPassportData } from '@selfxyz/common'; -import { DocumentCategory, PassportData } from '@selfxyz/common'; +import { + DocumentCategory, + EndpointType, + getCircuitNameFromPassportData, + getSolidityPackedUserContextData, + PassportData, + SelfApp, +} from '@selfxyz/common'; import forge from 'node-forge'; import io, { Socket } from 'socket.io-client'; import { v4 } from 'uuid'; @@ -582,6 +586,7 @@ export const useProvingStore = create((set, get) => { actor!.send({ type: 'VALIDATION_SUCCESS' }); return; } else { + console.log('Passport is not registered with local CSCA'); actor!.send({ type: 'PASSPORT_DATA_NOT_FOUND' }); return; } @@ -634,26 +639,24 @@ export const useProvingStore = create((set, get) => { let circuitName, wsRpcUrl; if (get().circuitType === 'disclose') { circuitName = 'disclose'; - wsRpcUrl = WS_RPC_URL_VC_AND_DISCLOSE; + if (passportData.documentCategory === 'passport') { + wsRpcUrl = circuitsMapping?.DISCLOSE?.[circuitName]; + } else { + wsRpcUrl = circuitsMapping?.DISCLOSE_ID?.[circuitName]; + } } else { circuitName = getCircuitNameFromPassportData( passportData, get().circuitType as 'register' | 'dsc', ); if (get().circuitType === 'register') { - if ( - passportData.documentType === 'passport' || - passportData.documentType === 'mock_passport' - ) { + if (passportData.documentCategory === 'passport') { wsRpcUrl = circuitsMapping?.REGISTER?.[circuitName]; } else { wsRpcUrl = circuitsMapping?.REGISTER_ID?.[circuitName]; } } else { - if ( - passportData.documentType === 'passport' || - passportData.documentType === 'mock_passport' - ) { + if (passportData.documentCategory === 'passport') { wsRpcUrl = circuitsMapping?.DSC?.[circuitName]; } else { wsRpcUrl = circuitsMapping?.DSC_ID?.[circuitName]; @@ -664,7 +667,9 @@ export const useProvingStore = create((set, get) => { actor?.send({ type: 'CONNECT_ERROR' }); throw new Error('Could not determine circuit name'); } + if (!wsRpcUrl) { + actor?.send({ type: 'CONNECT_ERROR' }); throw new Error('No WebSocket URL available for TEE connection'); } @@ -797,7 +802,11 @@ export const useProvingStore = create((set, get) => { const document: DocumentCategory = passportData.documentCategory; const selfApp = useSelfAppStore.getState().selfApp; // TODO: according to the circuitType we could check that the params are valid. - let inputs, circuitName, endpointType, endpoint; + let inputs, + circuitName, + endpointType, + endpoint, + circuitTypeWithDocumentExtension; const protocolStore = useProtocolStore.getState(); switch (circuitType) { case 'register': @@ -807,6 +816,7 @@ export const useProvingStore = create((set, get) => { passportData, protocolStore[document].dsc_tree, )); + circuitTypeWithDocumentExtension = `${circuitType}${document === 'passport' ? '' : '_id'}`; break; case 'dsc': ({ inputs, circuitName, endpointType, endpoint } = @@ -814,6 +824,7 @@ export const useProvingStore = create((set, get) => { passportData, protocolStore[document].csca_tree as string[][], )); + circuitTypeWithDocumentExtension = `${circuitType}${document === 'passport' ? '' : '_id'}`; break; case 'disclose': ({ inputs, circuitName, endpointType, endpoint } = @@ -822,12 +833,19 @@ export const useProvingStore = create((set, get) => { passportData, selfApp as SelfApp, )); + circuitTypeWithDocumentExtension = `disclose`; break; default: console.error('Invalid circuit type:' + circuitType); throw new Error('Invalid circuit type:' + circuitType); } - let circuitTypeWithDocumentExtension = `${circuitType}${document === 'passport' ? '' : '_id'}`; + const userDefinedData = selfApp?.userDefinedData + ? getSolidityPackedUserContextData( + selfApp.chainID, + selfApp.userId, + selfApp.userDefinedData, + ).slice(2) + : ''; const payload = getPayload( inputs, circuitTypeWithDocumentExtension as @@ -838,6 +856,8 @@ export const useProvingStore = create((set, get) => { circuitName as string, endpointType as EndpointType, endpoint as string, + selfApp?.version, + userDefinedData, ); const forgeKey = forge.util.createBuffer( sharedKey?.toString('binary') as string, diff --git a/app/src/utils/proving/provingUtils.ts b/app/src/utils/proving/provingUtils.ts index f207b0af0..d3256d576 100644 --- a/app/src/utils/proving/provingUtils.ts +++ b/app/src/utils/proving/provingUtils.ts @@ -32,37 +32,49 @@ export function encryptAES256GCM( }; } -export type TEEPayloadDisclose = { - type: 'disclose'; - endpointType: string; - endpoint: string; - onchain: boolean; +type RegisterSuffixes = '' | '_id'; +type DscSuffixes = '' | '_id'; +type DiscloseSuffixes = '' | '_id'; +type ProofTypes = 'register' | 'dsc' | 'disclose'; +type RegisterProofType = + `${Extract}${RegisterSuffixes}`; +type DscProofType = `${Extract}${DscSuffixes}`; +type DiscloseProofType = + `${Extract}${DiscloseSuffixes}`; + +export type TEEPayloadBase = { + endpointType: EndpointType; circuit: { name: string; inputs: string; }; }; -export type TEEPayload = { - type: 'register' | 'dsc' | 'register_id' | 'dsc_id'; +export type TEEPayload = TEEPayloadBase & { + type: RegisterProofType | DscProofType; onchain: true; - endpointType: string; - circuit: { - name: string; - inputs: string; - }; +}; + +export type TEEPayloadDisclose = TEEPayloadBase & { + type: DiscloseProofType; + onchain: boolean; + endpoint: string; + userDefinedData: string; + version: number; }; export function getPayload( inputs: any, - circuitType: 'register' | 'dsc' | 'disclose' | 'register_id' | 'dsc_id', + circuitType: RegisterProofType | DscProofType | DiscloseProofType, circuitName: string, endpointType: EndpointType, endpoint: string, + version: number = 1, + userDefinedData: string = '', ) { if (circuitType === 'disclose') { const payload: TEEPayloadDisclose = { - type: 'disclose', + type: circuitName === 'vc_and_disclose' ? 'disclose' : 'disclose_id', endpointType: endpointType, endpoint: endpoint, onchain: endpointType === 'celo' ? true : false, @@ -70,11 +82,13 @@ export function getPayload( name: circuitName, inputs: JSON.stringify(inputs), }, + version, + userDefinedData, }; return payload; } else { const payload: TEEPayload = { - type: circuitType as 'register' | 'dsc' | 'register_id' | 'dsc_id', + type: circuitType as RegisterProofType | DscProofType, onchain: true, endpointType: endpointType, circuit: { diff --git a/app/src/utils/proving/validateDocument.ts b/app/src/utils/proving/validateDocument.ts index de812c002..1f0ffda94 100644 --- a/app/src/utils/proving/validateDocument.ts +++ b/app/src/utils/proving/validateDocument.ts @@ -7,6 +7,7 @@ import { getCircuitNameFromPassportData, getLeafDscTree, Hash, + ID_CARD_ATTESTATION_ID, parseCertificateSimple, PASSPORT_ATTESTATION_ID, type PassportData, @@ -78,11 +79,11 @@ export async function isUserRegistered( if (!passportData) { return false; } - const commitment = generateCommitment( - secret, - PASSPORT_ATTESTATION_ID, - passportData, - ); + const attestationId = + passportData.documentCategory === 'passport' + ? PASSPORT_ATTESTATION_ID + : ID_CARD_ATTESTATION_ID; + const commitment = generateCommitment(secret, attestationId, passportData); const document: DocumentCategory = passportData.documentCategory; const serializedTree = useProtocolStore.getState()[document].commitment_tree; const tree = LeanIMT.import((a, b) => poseidon2([a, b]), serializedTree); diff --git a/circuits/tests/disclose/vc_and_disclose.test.ts b/circuits/tests/disclose/vc_and_disclose.test.ts index a267f20fd..3efb55f77 100644 --- a/circuits/tests/disclose/vc_and_disclose.test.ts +++ b/circuits/tests/disclose/vc_and_disclose.test.ts @@ -20,6 +20,7 @@ import { genAndInitMockPassportData } from '@selfxyz/common/utils/passports/genM import { generateCommitment } from '@selfxyz/common/utils/passports/passport'; import { hashEndpointWithScope } from '@selfxyz/common/utils/scope'; import { fileURLToPath } from 'url'; +import { castFromUUID } from '@selfxyz/common/utils/circuits/uuid'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -40,7 +41,7 @@ describe('Disclose', function () { const secret = BigInt(Math.floor(Math.random() * Math.pow(2, 254))).toString(); const majority = '18'; - const user_identifier = crypto.randomUUID(); + const user_identifier = castFromUUID(crypto.randomUUID()); const selector_dg1 = Array(88).fill('1'); const selector_older_than = '1'; const endpoint = 'https://example.com'; diff --git a/circuits/tests/disclose/vc_and_disclose_id.test.ts b/circuits/tests/disclose/vc_and_disclose_id.test.ts index f64201875..215d7f99e 100644 --- a/circuits/tests/disclose/vc_and_disclose_id.test.ts +++ b/circuits/tests/disclose/vc_and_disclose_id.test.ts @@ -22,6 +22,7 @@ import { generateCommitment } from '@selfxyz/common/utils/passports/passport'; import { hashEndpointWithScope } from '@selfxyz/common/utils/scope'; import { genMockIdDocAndInitDataParsing } from '@selfxyz/common/utils/passports/genMockIdDoc'; import { fileURLToPath } from 'url'; +import { castFromUUID } from '@selfxyz/common/utils/circuits/uuid'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -38,7 +39,7 @@ describe('Disclose', function () { const secret = BigInt(Math.floor(Math.random() * Math.pow(2, 254))).toString(); const majority = '18'; - const user_identifier = crypto.randomUUID(); + const user_identifier = castFromUUID(crypto.randomUUID()); const selector_dg1 = Array(90).fill('1'); const selector_older_than = '1'; const endpoint = 'https://example.com'; diff --git a/common/.npmignore b/common/.npmignore new file mode 100644 index 000000000..ed249baa3 --- /dev/null +++ b/common/.npmignore @@ -0,0 +1,2 @@ +dist/cjs/tsconfig.cjs.tsbuildinfo +dist/esm/tsconfig.tsbuildinfo diff --git a/common/bun.lockb b/common/bun.lockb deleted file mode 100755 index fd073df76..000000000 Binary files a/common/bun.lockb and /dev/null differ diff --git a/common/index.ts b/common/index.ts index 83e58705c..64436e254 100644 --- a/common/index.ts +++ b/common/index.ts @@ -28,6 +28,7 @@ export { getSKIPEM } from './src/utils/csca.js'; export { formatMrz } from './src/utils/passports/format.js'; export { getCircuitNameFromPassportData } from './src/utils/circuits/circuitsName.js'; import * as Hash from './src/utils/hash.js'; +import { calculateUserIdentifierHash, getSolidityPackedUserContextData } from './src/utils/hash.js'; export * from './src/constants/countries.js'; export * from './src/constants/constants.js'; export * from './src/utils/appType.js'; @@ -63,4 +64,6 @@ export { genMockIdDoc, genMockIdDocAndInitDataParsing, buildSMT, + calculateUserIdentifierHash, + getSolidityPackedUserContextData, }; diff --git a/common/package.json b/common/package.json index 13909cfeb..a237e3cac 100644 --- a/common/package.json +++ b/common/package.json @@ -1,6 +1,6 @@ { "name": "@selfxyz/common", - "version": "0.0.3", + "version": "0.0.5", "description": "Constants and utils for self sdks", "license": "MIT", "author": "@Selfxyz Team", @@ -34,12 +34,12 @@ "module": "./dist/esm/index.js", "types": "./dist/esm/index.d.ts", "files": [ - "dist/cjs", - "dist/esm", + "dist/**/*", "src/mock_certificates" ], "scripts": { "build": "tsc -p tsconfig.json && tsc -p tsconfig.cjs.json && yarn postbuild", + "test-base": "yarn ts-mocha -n import=tsx --max-old-space-size=8192 --paths -p tsconfig.json", "postbuild": "node ./scripts/post-build.mjs", "format": "prettier --write .", "lint": "prettier --check .", @@ -60,6 +60,7 @@ "country-emoji": "^1.5.6", "country-iso-3-to-2": "^1.1.1", "elliptic": "^6.5.5", + "ethers": "^6.14.4", "fs": "^0.0.1-security", "i18n-iso-countries": "^7.13.0", "js-sha1": "^0.7.0", @@ -76,6 +77,7 @@ "uuid": "^11.0.5" }, "devDependencies": { + "@types/js-sha1": "^0.6.3", "@types/node-forge": "^1.3.10", "mocha": "^10.7.3", "prettier": "^3.3.3", diff --git a/common/src/utils/appType.ts b/common/src/utils/appType.ts index d9efcae1a..100c98914 100644 --- a/common/src/utils/appType.ts +++ b/common/src/utils/appType.ts @@ -7,6 +7,7 @@ import { v4 } from 'uuid'; import { REDIRECT_URL } from '../constants/constants.js'; import { Country3LetterCode } from '../constants/countries.js'; import { formatEndpoint } from './scope.js'; + export interface SelfApp { appName: string; logoBase64: string; @@ -19,6 +20,9 @@ export interface SelfApp { userIdType: UserIdType; devMode: boolean; disclosures: SelfAppDisclosureConfig; + version: number; + chainID: 42220 | 44787; + userDefinedData: string; } export interface SelfAppDisclosureConfig { @@ -92,6 +96,9 @@ export class SelfAppBuilder { header: '', logoBase64: '', disclosures: {}, + chainID: config.endpointType === 'staging_celo' ? 44787 : 42220, + version: config.version ?? 2, + userDefinedData: '', ...config, } as SelfApp; } diff --git a/common/src/utils/circuits/generateInputs.ts b/common/src/utils/circuits/generateInputs.ts index 5b47b1401..4f862b175 100644 --- a/common/src/utils/circuits/generateInputs.ts +++ b/common/src/utils/circuits/generateInputs.ts @@ -35,7 +35,7 @@ import { } from '../trees.js'; import { PassportData } from '../types.js'; import { formatCountriesList } from './formatInputs.js'; -import { castFromUUID, stringToAsciiBigIntArray } from './uuid.js'; +import { stringToAsciiBigIntArray } from './uuid.js'; export function generateCircuitInputsDSC( passportData: PassportData, @@ -245,7 +245,6 @@ export function generateCircuitInputsVCandDisclose( }; } } - // Build Final Input Object const baseInputs = { secret: formatInput(secret), @@ -262,7 +261,7 @@ export function generateCircuitInputsVCandDisclose( scope: formatInput(scope), current_date: formatInput(getCurrentDateYYMMDD()), majority: formatInput(majority_ascii), - user_identifier: formatInput(castFromUUID(user_identifier)), + user_identifier: formatInput(user_identifier), selector_ofac: formatInput(selector_ofac), forbidden_countries_list: formatInput(formatCountriesList(forbidden_countries_list)), }; diff --git a/common/src/utils/circuits/uuid.ts b/common/src/utils/circuits/uuid.ts index ddadbe541..c6c714cab 100644 --- a/common/src/utils/circuits/uuid.ts +++ b/common/src/utils/circuits/uuid.ts @@ -1,5 +1,4 @@ export type UserIdType = 'hex' | 'uuid'; - /// UUID function hexToBigInt(hex: string): bigint { return BigInt(`0x${hex}`); diff --git a/common/src/utils/hash.ts b/common/src/utils/hash.ts index 5850b0a92..362c66d21 100644 --- a/common/src/utils/hash.ts +++ b/common/src/utils/hash.ts @@ -17,10 +17,12 @@ import { poseidon16, } from 'poseidon-lite'; import { sha224, sha256 } from 'js-sha256'; +// @ts-ignore - ESLint incorrectly flags this as needing default import, but TypeScript definitions use named export import { sha1 } from 'js-sha1'; import { sha384, sha512 } from 'js-sha512'; import { hexToSignedBytes, packBytesArray } from './bytes.js'; import * as forge from 'node-forge'; +import { ethers } from 'ethers'; export function flexiblePoseidon(inputs: bigint[]): bigint { switch (inputs.length) { @@ -150,3 +152,35 @@ export function packBytesAndPoseidon(unpacked: number[]) { const packed = packBytesArray(unpacked); return customHasher(packed.map(String)).toString(); } + +export function calculateUserIdentifierHash( + destChainID: number, + userID: string, + userDefinedData: string +): BigInt { + const solidityPackedUserContextData = getSolidityPackedUserContextData( + destChainID, + userID, + userDefinedData + ); + const inputBytes = Buffer.from(solidityPackedUserContextData.slice(2), 'hex'); + const sha256Hash = ethers.sha256(inputBytes); + const ripemdHash = ethers.ripemd160(sha256Hash); + return BigInt(ripemdHash); +} + +export function getSolidityPackedUserContextData( + destChainID: number, + userID: string, + userDefinedData: string +): string { + const userIdHex = userID.replace(/-/g, ''); + return ethers.solidityPacked( + ['bytes32', 'bytes32', 'bytes'], + [ + ethers.zeroPadValue(ethers.toBeHex(destChainID), 32), + ethers.zeroPadValue('0x' + userIdHex, 32), + ethers.toUtf8Bytes(userDefinedData), + ] + ); +} diff --git a/sdk/qrcode/components/SelfQRcode.tsx b/sdk/qrcode/components/SelfQRcode.tsx index adcc2391c..92f3c0517 100644 --- a/sdk/qrcode/components/SelfQRcode.tsx +++ b/sdk/qrcode/components/SelfQRcode.tsx @@ -1,8 +1,8 @@ import React, { useEffect, useState, useRef } from 'react'; import { BounceLoader } from 'react-spinners'; import Lottie from 'lottie-react'; -import CHECK_ANIMATION from '../animations/check_animation.json'; -import X_ANIMATION from '../animations/x_animation.json'; +import CHECK_ANIMATION from '../animations/check_animation.json' with { type: 'json' }; +import X_ANIMATION from '../animations/x_animation.json' with { type: 'json' }; import LED from './LED.js'; import { REDIRECT_URL, @@ -19,9 +19,10 @@ import { QRCodeSVG } from 'qrcode.react'; import { initWebSocket } from '../utils/websocket.js'; import { getUniversalLink, - SelfApp, SelfAppBuilder, } from '@selfxyz/common/utils/appType'; +import type { SelfApp } from '@selfxyz/common/utils/appType'; + interface SelfQRcodeProps { selfApp: SelfApp; onSuccess: () => void; diff --git a/sdk/qrcode/index.ts b/sdk/qrcode/index.ts index aa46f5938..72dcdb40a 100644 --- a/sdk/qrcode/index.ts +++ b/sdk/qrcode/index.ts @@ -1,12 +1,13 @@ import SelfQRcodeWrapper, { SelfQRcode, - SelfApp, SelfAppBuilder, } from './components/SelfQRcode.js'; +import type { SelfApp } from './components/SelfQRcode.js'; import { WebAppInfo } from './utils/websocket.js'; import { countries } from '@selfxyz/common/constants/countries'; export default SelfQRcodeWrapper; -export { SelfQRcodeWrapper, SelfQRcode, SelfApp, SelfAppBuilder, countries }; +export { SelfQRcodeWrapper, SelfQRcode, SelfAppBuilder, countries }; +export type { SelfApp }; export type { WebAppInfo }; diff --git a/sdk/qrcode/package.json b/sdk/qrcode/package.json index 030b7a161..1b7bf4814 100644 --- a/sdk/qrcode/package.json +++ b/sdk/qrcode/package.json @@ -1,6 +1,6 @@ { "name": "@selfxyz/qrcode", - "version": "0.0.19", + "version": "1.0.8", "repository": { "type": "git", "url": "https://github.com/selfxyz/self" @@ -9,23 +9,28 @@ "author": "turnoffthiscomputer", "type": "module", "exports": { - ".": "./dist/index.js" + ".": { + "import": "./dist/index.js", + "require": "./dist/index.cjs", + "types": "./dist/index.d.cts" + } }, - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "dist/index.cjs", + "module": "dist/index.js", + "types": "dist/index.d.cts", "files": [ "dist" ], "scripts": { - "build": "tsc --build", - "build:deps": "yarn workspaces foreach --from @selfxyz/qrcode --topological-dev --recursive run build", "format": "prettier --write .", "install-sdk": "yarn workspace focus @selfxyz/qrcode", "lint": "prettier --check .", "prepublishOnly": "yarn build", "publish": "yarn npm publish --access public", "test": "echo 'no tests found'", - "types": "yarn build" + "types": "yarn build", + "build": "tsup --config tsup.config.ts", + "build:deps": "yarn workspaces foreach --from @selfxyz/qrcode --topological-dev --recursive run build" }, "dependencies": { "@selfxyz/common": "workspace:^", @@ -38,6 +43,7 @@ "qrcode.react": "^4.1.0", "react-spinners": "^0.14.1", "socket.io-client": "^4.8.1", + "tsup": "^8.5.0", "uuid": "^10.0.0" }, "devDependencies": { diff --git a/sdk/qrcode/tsconfig.json b/sdk/qrcode/tsconfig.json index 106c15165..a5b78312c 100644 --- a/sdk/qrcode/tsconfig.json +++ b/sdk/qrcode/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "target": "ES2020", - "module": "Node16", + "module": "NodeNext", "declaration": true, "declarationDir": "./dist", "outDir": "./dist", @@ -11,7 +11,7 @@ "forceConsistentCasingInFileNames": true, "resolveJsonModule": true, "jsx": "react", - "moduleResolution": "node16" + "moduleResolution": "NodeNext" }, "include": [ "animations", diff --git a/sdk/qrcode/tsup.config.ts b/sdk/qrcode/tsup.config.ts new file mode 100644 index 000000000..f3ad9abbc --- /dev/null +++ b/sdk/qrcode/tsup.config.ts @@ -0,0 +1,15 @@ +import type { Options } from 'tsup'; + +const env = process.env.NODE_ENV; + +export const tsup: Options = { + splitting: true, + clean: true, // clean up the dist folder + dts: true, // generate dts files + format: ['cjs', 'esm'], // generate cjs and esm files + skipNodeModulesBundle: true, + entryPoints: ['index.ts', 'animations/**/*', 'components/**/*', 'utils/**/*'], + watch: env === 'development', + target: 'es2020', + outDir: 'dist', +}; diff --git a/yarn.lock b/yarn.lock index a7ce6c760..d5247a388 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2331,7 +2331,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.5": +"@jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": version: 0.3.8 resolution: "@jridgewell/gen-mapping@npm:0.3.8" dependencies: @@ -2366,7 +2366,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": version: 1.5.0 resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 @@ -4019,6 +4019,146 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.44.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-android-arm64@npm:4.44.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.44.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.44.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.44.0" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-freebsd-x64@npm:4.44.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.44.0" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.44.0" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.44.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.44.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loongarch64-gnu@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.44.0" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.44.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.44.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.44.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.44.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.44.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.44.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.44.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.44.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.44.0": + version: 4.44.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.44.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.6": version: 1.1.9 resolution: "@scure/base@npm:1.1.9" @@ -4189,6 +4329,7 @@ __metadata: "@openpassport/zk-kit-imt": "npm:^0.0.5" "@openpassport/zk-kit-lean-imt": "npm:^0.0.6" "@openpassport/zk-kit-smt": "npm:^0.0.1" + "@types/js-sha1": "npm:^0.6.3" "@types/node-forge": "npm:^1.3.10" asn1.js: "npm:^5.4.1" asn1js: "npm:^3.0.5" @@ -4198,6 +4339,7 @@ __metadata: country-emoji: "npm:^1.5.6" country-iso-3-to-2: "npm:^1.1.1" elliptic: "npm:^6.5.5" + ethers: "npm:^6.14.4" fs: "npm:^0.0.1-security" i18n-iso-countries: "npm:^7.13.0" js-sha1: "npm:^0.7.0" @@ -4434,6 +4576,7 @@ __metadata: ts-loader: "npm:^9.5.1" ts-mocha: "npm:^10.0.0" ts-node: "npm:^10.9.2" + tsup: "npm:^8.5.0" typescript: "npm:^5.4.5" uuid: "npm:^10.0.0" peerDependencies: @@ -8235,7 +8378,7 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:^1.0.6": +"@types/estree@npm:*, @types/estree@npm:1.0.8, @types/estree@npm:^1.0.6": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 @@ -8328,6 +8471,13 @@ __metadata: languageName: node linkType: hard +"@types/js-sha1@npm:^0.6.3": + version: 0.6.3 + resolution: "@types/js-sha1@npm:0.6.3" + checksum: 10c0/69b8d505b897c485ae0ed5bbd1ddaff8dd24137408ffe4ce7e738b4dad67668afff3c3fd079541027a3436c149feafdce03094179f0a3383272e02110e3db5de + languageName: node + linkType: hard + "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" @@ -9565,6 +9715,13 @@ __metadata: languageName: node linkType: hard +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 10c0/60f0298ed34c74fef50daab88e8dab786036ed5a7fad02e012ab57e376e0a0b4b29e83b95ea9b5e7d89df762f5f25119b83e00706ecaccb22cfbacee98d74889 + languageName: node + linkType: hard + "anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" @@ -10459,6 +10616,17 @@ __metadata: languageName: node linkType: hard +"bundle-require@npm:^5.1.0": + version: 5.1.0 + resolution: "bundle-require@npm:5.1.0" + dependencies: + load-tsconfig: "npm:^0.2.3" + peerDependencies: + esbuild: ">=0.18" + checksum: 10c0/8bff9df68eb686f05af952003c78e70ffed2817968f92aebb2af620cc0b7428c8154df761d28f1b38508532204278950624ef86ce63644013dc57660a9d1810f + languageName: node + linkType: hard + "bytes-iec@npm:^3.1.1": version: 3.1.1 resolution: "bytes-iec@npm:3.1.1" @@ -10480,6 +10648,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 + languageName: node + linkType: hard + "cacache@npm:^19.0.1": version: 19.0.1 resolution: "cacache@npm:19.0.1" @@ -10601,9 +10776,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001718": - version: 1.0.30001723 - resolution: "caniuse-lite@npm:1.0.30001723" - checksum: 10c0/e019503061759b96017c4d27ddd7ca1b48533eabcd0431b51d2e3156f99f6b031075e46c279c0db63424cdfc874bba992caec2db51b922a0f945e686246886f6 + version: 1.0.30001724 + resolution: "caniuse-lite@npm:1.0.30001724" + checksum: 10c0/ed9ec0bcf619f0e7ef2d33aac74d2346d1faf52060dfded1fb9c32d87854de5c2988b3ba338c281034c88bf797d6b55468a804ce8396a7e16a48cb0d481d4bfe languageName: node linkType: hard @@ -11267,6 +11442,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: 10c0/84a76c08fe6cc08c9c93f62ac573d2907d8e79138999312c92d4155bc2325d487d64d13f669b2000c9f8caf70493c1be2dac74fec3c51d5a04f8bc3ae1830bab + languageName: node + linkType: hard + "commander@npm:^7.2.0": version: 7.2.0 resolution: "commander@npm:7.2.0" @@ -11350,6 +11532,13 @@ __metadata: languageName: node linkType: hard +"confbox@npm:^0.1.8": + version: 0.1.8 + resolution: "confbox@npm:0.1.8" + checksum: 10c0/fc2c68d97cb54d885b10b63e45bd8da83a8a71459d3ecf1825143dd4c7f9f1b696b3283e07d9d12a144c1301c2ebc7842380bdf0014e55acc4ae1c9550102418 + languageName: node + linkType: hard + "connect@npm:^3.6.5": version: 3.7.0 resolution: "connect@npm:3.7.0" @@ -11362,6 +11551,13 @@ __metadata: languageName: node linkType: hard +"consola@npm:^3.4.0": + version: 3.4.2 + resolution: "consola@npm:3.4.2" + checksum: 10c0/7cebe57ecf646ba74b300bcce23bff43034ed6fbec9f7e39c27cee1dc00df8a21cd336b466ad32e304ea70fba04ec9e890c200270de9a526ce021ba8a7e4c11a + languageName: node + linkType: hard + "convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" @@ -11472,7 +11668,19 @@ __metadata: languageName: node linkType: hard -"create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": +"create-hash@npm:~1.1.3": + version: 1.1.3 + resolution: "create-hash@npm:1.1.3" + dependencies: + cipher-base: "npm:^1.0.1" + inherits: "npm:^2.0.1" + ripemd160: "npm:^2.0.0" + sha.js: "npm:^2.4.0" + checksum: 10c0/dbcf4a1b13c8dd5f2a69f5f30bd2701f919ed7d3fbf5aa530cf00b17a950c2b77f63bfe6a2981735a646ae2620d96c8f4584bf70aeeabf050a31de4e46219d08 + languageName: node + linkType: hard + +"create-hmac@npm:^1.1.7": version: 1.1.7 resolution: "create-hmac@npm:1.1.7" dependencies: @@ -12096,9 +12304,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.160": - version: 1.5.170 - resolution: "electron-to-chromium@npm:1.5.170" - checksum: 10c0/138c6d293b310729f7550f6d36ae4b2bdd0453220e8b11d8780395cf38c9ae816b1f30a3978d790f1951cfa89e7c7911af4a779094c33ae167c89c7ba6751834 + version: 1.5.171 + resolution: "electron-to-chromium@npm:1.5.171" + checksum: 10c0/e9d7e70d5fe829951c955287877155889a752336e48c715e373c6919f8e438bb686b7278511013aa8456c329c55895059a1d9e4b799217483f28dbae60c198d8 languageName: node linkType: hard @@ -12447,7 +12655,7 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:~0.25.0": +"esbuild@npm:^0.25.0, esbuild@npm:~0.25.0": version: 0.25.5 resolution: "esbuild@npm:0.25.5" dependencies: @@ -13122,7 +13330,7 @@ __metadata: languageName: node linkType: hard -"ethers@npm:^6.11.0, ethers@npm:^6.12.1, ethers@npm:^6.13.5, ethers@npm:^6.7.0": +"ethers@npm:^6.11.0, ethers@npm:^6.12.1, ethers@npm:^6.13.5, ethers@npm:^6.14.4, ethers@npm:^6.7.0": version: 6.14.4 resolution: "ethers@npm:6.14.4" dependencies: @@ -13565,6 +13773,17 @@ __metadata: languageName: node linkType: hard +"fix-dts-default-cjs-exports@npm:^1.0.0": + version: 1.0.1 + resolution: "fix-dts-default-cjs-exports@npm:1.0.1" + dependencies: + magic-string: "npm:^0.30.17" + mlly: "npm:^1.7.4" + rollup: "npm:^4.34.8" + checksum: 10c0/61a3cbe32b6c29df495ef3aded78199fe9dbb52e2801c899fe76d9ca413d3c8c51f79986bac83f8b4b2094ebde883ddcfe47b68ce469806ba13ca6ed4e7cd362 + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.2.0 resolution: "flat-cache@npm:3.2.0" @@ -14048,7 +14267,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2": +"glob@npm:^10.2.2, glob@npm:^10.3.10": version: 10.4.5 resolution: "glob@npm:10.4.5" dependencies: @@ -14408,6 +14627,15 @@ __metadata: languageName: node linkType: hard +"hash-base@npm:^2.0.0": + version: 2.0.2 + resolution: "hash-base@npm:2.0.2" + dependencies: + inherits: "npm:^2.0.1" + checksum: 10c0/283f6060277b52e627a734c4d19d4315ba82326cab5a2f4f2f00b924d747dc7cc902a8cedb1904c7a3501075fcbb24c08de1152bae296698fdc5ad75b33986af + languageName: node + linkType: hard + "hash-base@npm:^3.0.0": version: 3.1.0 resolution: "hash-base@npm:3.1.0" @@ -15903,6 +16131,13 @@ __metadata: languageName: node linkType: hard +"joycon@npm:^3.1.1": + version: 3.1.1 + resolution: "joycon@npm:3.1.1" + checksum: 10c0/131fb1e98c9065d067fd49b6e685487ac4ad4d254191d7aa2c9e3b90f4e9ca70430c43cad001602bdbdabcf58717d3b5c5b7461c1bd8e39478c8de706b3fe6ae + languageName: node + linkType: hard + "js-base64@npm:^3.7.5": version: 3.7.7 resolution: "js-base64@npm:3.7.7" @@ -16344,7 +16579,7 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:^3.1.3": +"lilconfig@npm:^3.1.1, lilconfig@npm:^3.1.3": version: 3.1.3 resolution: "lilconfig@npm:3.1.3" checksum: 10c0/f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc @@ -16358,6 +16593,13 @@ __metadata: languageName: node linkType: hard +"load-tsconfig@npm:^0.2.3": + version: 0.2.5 + resolution: "load-tsconfig@npm:0.2.5" + checksum: 10c0/bf2823dd26389d3497b6567f07435c5a7a58d9df82e879b0b3892f87d8db26900f84c85bc329ef41c0540c0d6a448d1c23ddc64a80f3ff6838b940f3915a3fcb + languageName: node + linkType: hard + "loader-runner@npm:^4.2.0": version: 4.3.0 resolution: "loader-runner@npm:4.3.0" @@ -16472,6 +16714,13 @@ __metadata: languageName: node linkType: hard +"lodash.sortby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.sortby@npm:4.7.0" + checksum: 10c0/fc48fb54ff7669f33bb32997cab9460757ee99fafaf72400b261c3e10fde21538e47d8cfcbe6a25a31bcb5b7b727c27d52626386fc2de24eb059a6d64a89cdf5 + languageName: node + linkType: hard + "lodash.throttle@npm:^4.1.1": version: 4.1.1 resolution: "lodash.throttle@npm:4.1.1" @@ -16641,6 +16890,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.30.17": + version: 0.30.17 + resolution: "magic-string@npm:0.30.17" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + checksum: 10c0/16826e415d04b88378f200fe022b53e638e3838b9e496edda6c0e086d7753a44a6ed187adc72d19f3623810589bf139af1a315541cd6a26ae0771a0193eaf7b8 + languageName: node + linkType: hard + "make-dir@npm:^2.0.0, make-dir@npm:^2.1.0": version: 2.1.0 resolution: "make-dir@npm:2.1.0" @@ -17535,6 +17793,18 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.7.4": + version: 1.7.4 + resolution: "mlly@npm:1.7.4" + dependencies: + acorn: "npm:^8.14.0" + pathe: "npm:^2.0.1" + pkg-types: "npm:^1.3.0" + ufo: "npm:^1.5.4" + checksum: 10c0/69e738218a13d6365caf930e0ab4e2b848b84eec261597df9788cefb9930f3e40667be9cb58a4718834ba5f97a6efeef31d3b5a95f4388143fd4e0d0deff72ff + languageName: node + linkType: hard + "mnemonist@npm:^0.38.0": version: 0.38.5 resolution: "mnemonist@npm:0.38.5" @@ -17672,6 +17942,17 @@ __metadata: languageName: node linkType: hard +"mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: "npm:^1.0.0" + object-assign: "npm:^4.0.1" + thenify-all: "npm:^1.0.0" + checksum: 10c0/103114e93f87362f0b56ab5b2e7245051ad0276b646e3902c98397d18bb8f4a77f2ea4a2c9d3ad516034ea3a56553b60d3f5f78220001ca4c404bd711bd0af39 + languageName: node + linkType: hard + "nanoassert@npm:^2.0.0": version: 2.0.0 resolution: "nanoassert@npm:2.0.0" @@ -18017,7 +18298,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 @@ -18525,6 +18806,13 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^2.0.1": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 + languageName: node + linkType: hard + "pathval@npm:^1.1.1": version: 1.1.1 resolution: "pathval@npm:1.1.1" @@ -18540,15 +18828,16 @@ __metadata: linkType: hard "pbkdf2@npm:^3.0.17": - version: 3.1.2 - resolution: "pbkdf2@npm:3.1.2" + version: 3.1.3 + resolution: "pbkdf2@npm:3.1.3" dependencies: - create-hash: "npm:^1.1.2" - create-hmac: "npm:^1.1.4" - ripemd160: "npm:^2.0.1" - safe-buffer: "npm:^5.0.1" - sha.js: "npm:^2.4.8" - checksum: 10c0/5a30374e87d33fa080a92734d778cf172542cc7e41b96198c4c88763997b62d7850de3fbda5c3111ddf79805ee7c1da7046881c90ac4920b5e324204518b05fd + create-hash: "npm:~1.1.3" + create-hmac: "npm:^1.1.7" + ripemd160: "npm:=2.0.1" + safe-buffer: "npm:^5.2.1" + sha.js: "npm:^2.4.11" + to-buffer: "npm:^1.2.0" + checksum: 10c0/12779463dfb847701f186e0b7e5fd538a1420409a485dcf5100689c2b3ec3cb113204e82a68668faf3b6dd76ec19260b865313c9d3a9c252807163bdc24652ae languageName: node linkType: hard @@ -18587,7 +18876,7 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.4, pirates@npm:^4.0.6": +"pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.6": version: 4.0.7 resolution: "pirates@npm:4.0.7" checksum: 10c0/a51f108dd811beb779d58a76864bbd49e239fa40c7984cd11596c75a121a8cc789f1c8971d8bb15f0dbf9d48b76c05bb62fcbce840f89b688c0fa64b37e8478a @@ -18612,6 +18901,17 @@ __metadata: languageName: node linkType: hard +"pkg-types@npm:^1.3.0": + version: 1.3.1 + resolution: "pkg-types@npm:1.3.1" + dependencies: + confbox: "npm:^0.1.8" + mlly: "npm:^1.7.4" + pathe: "npm:^2.0.1" + checksum: 10c0/19e6cb8b66dcc66c89f2344aecfa47f2431c988cfa3366bdfdcfb1dd6695f87dcce37fbd90fe9d1605e2f4440b77f391e83c23255347c35cf84e7fd774d7fcea + languageName: node + linkType: hard + "pkijs@npm:^3.2.4": version: 3.2.5 resolution: "pkijs@npm:3.2.5" @@ -18673,6 +18973,29 @@ __metadata: languageName: node linkType: hard +"postcss-load-config@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-load-config@npm:6.0.1" + dependencies: + lilconfig: "npm:^3.1.1" + peerDependencies: + jiti: ">=1.21.0" + postcss: ">=8.0.9" + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + checksum: 10c0/74173a58816dac84e44853f7afbd283f4ef13ca0b6baeba27701214beec33f9e309b128f8102e2b173e8d45ecba45d279a9be94b46bf48d219626aa9b5730848 + languageName: node + linkType: hard + "postinstall-postinstall@npm:^2.1.0": version: 2.1.0 resolution: "postinstall-postinstall@npm:2.1.0" @@ -20029,6 +20352,16 @@ __metadata: languageName: node linkType: hard +"ripemd160@npm:=2.0.1": + version: 2.0.1 + resolution: "ripemd160@npm:2.0.1" + dependencies: + hash-base: "npm:^2.0.0" + inherits: "npm:^2.0.1" + checksum: 10c0/d4cbb4713c1268bb35e44815b12e3744a952a72b72e6a72110c8f3932227ddf68841110285fe2ed1c04805e2621d85f905deb5f55f9d91fa1bfc0f8081a244e6 + languageName: node + linkType: hard + "ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": version: 2.0.2 resolution: "ripemd160@npm:2.0.2" @@ -20050,6 +20383,81 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.34.8": + version: 4.44.0 + resolution: "rollup@npm:4.44.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.44.0" + "@rollup/rollup-android-arm64": "npm:4.44.0" + "@rollup/rollup-darwin-arm64": "npm:4.44.0" + "@rollup/rollup-darwin-x64": "npm:4.44.0" + "@rollup/rollup-freebsd-arm64": "npm:4.44.0" + "@rollup/rollup-freebsd-x64": "npm:4.44.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.44.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.44.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.44.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.44.0" + "@rollup/rollup-linux-loongarch64-gnu": "npm:4.44.0" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.44.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.44.0" + "@rollup/rollup-linux-riscv64-musl": "npm:4.44.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.44.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.44.0" + "@rollup/rollup-linux-x64-musl": "npm:4.44.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.44.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.44.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.44.0" + "@types/estree": "npm:1.0.8" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loongarch64-gnu": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/ff3e0741f2fc7b7b183079628cf50fcfc9163bef86ecfbc9f4e4023adfdee375b7075940963514e2bc4969764688d38d67095bce038b0ad5d572207f114afff5 + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -20358,7 +20766,7 @@ __metadata: languageName: node linkType: hard -"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": +"sha.js@npm:^2.4.0, sha.js@npm:^2.4.11, sha.js@npm:^2.4.8": version: 2.4.11 resolution: "sha.js@npm:2.4.11" dependencies: @@ -20793,6 +21201,15 @@ __metadata: languageName: node linkType: hard +"source-map@npm:0.8.0-beta.0": + version: 0.8.0-beta.0 + resolution: "source-map@npm:0.8.0-beta.0" + dependencies: + whatwg-url: "npm:^7.0.0" + checksum: 10c0/fb4d9bde9a9fdb2c29b10e5eae6c71d10e09ef467e1afb75fdec2eb7e11fa5b343a2af553f74f18b695dbc0b81f9da2e9fa3d7a317d5985e9939499ec6087835 + languageName: node + linkType: hard + "source-map@npm:^0.5.6": version: 0.5.7 resolution: "source-map@npm:0.5.7" @@ -21250,6 +21667,24 @@ __metadata: languageName: node linkType: hard +"sucrase@npm:^3.35.0": + version: 3.35.0 + resolution: "sucrase@npm:3.35.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.2" + commander: "npm:^4.0.0" + glob: "npm:^10.3.10" + lines-and-columns: "npm:^1.1.6" + mz: "npm:^2.7.0" + pirates: "npm:^4.0.1" + ts-interface-checker: "npm:^0.1.9" + bin: + sucrase: bin/sucrase + sucrase-node: bin/sucrase-node + checksum: 10c0/ac85f3359d2c2ecbf5febca6a24ae9bf96c931f05fde533c22a94f59c6a74895e5d5f0e871878dfd59c2697a75ebb04e4b2224ef0bfc24ca1210735c2ec191ef + languageName: node + linkType: hard + "sudo-prompt@npm:^9.0.0": version: 9.2.1 resolution: "sudo-prompt@npm:9.2.1" @@ -21655,6 +22090,24 @@ __metadata: languageName: node linkType: hard +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: "npm:>= 3.1.0 < 4" + checksum: 10c0/9b896a22735e8122754fe70f1d65f7ee691c1d70b1f116fda04fea103d0f9b356e3676cb789506e3909ae0486a79a476e4914b0f92472c2e093d206aed4b7d6b + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: "npm:^1.0.0" + checksum: 10c0/f375aeb2b05c100a456a30bc3ed07ef03a39cbdefe02e0403fb714b8c7e57eeaad1a2f5c4ecfb9ce554ce3db9c2b024eba144843cd9e344566d9fcee73b04767 + languageName: node + linkType: hard + "throat@npm:^5.0.0": version: 5.0.0 resolution: "throat@npm:5.0.0" @@ -21695,6 +22148,13 @@ __metadata: languageName: node linkType: hard +"tinyexec@npm:^0.3.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 + languageName: node + linkType: hard + "tinyglobby@npm:^0.2.11, tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.6": version: 0.2.14 resolution: "tinyglobby@npm:0.2.14" @@ -21744,6 +22204,17 @@ __metadata: languageName: node linkType: hard +"to-buffer@npm:^1.2.0": + version: 1.2.1 + resolution: "to-buffer@npm:1.2.1" + dependencies: + isarray: "npm:^2.0.5" + safe-buffer: "npm:^5.2.1" + typed-array-buffer: "npm:^1.0.3" + checksum: 10c0/bbf07a2a7d6ff9e3ffe503c689176c7149cf3ec25887ce7c4aa5c4841a8845cc71121cd7b4a4769957f823b3f31dbf6b1be6e0a5955798ad864bf2245ee8b5e4 + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -21760,6 +22231,15 @@ __metadata: languageName: node linkType: hard +"tr46@npm:^1.0.1": + version: 1.0.1 + resolution: "tr46@npm:1.0.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/41525c2ccce86e3ef30af6fa5e1464e6d8bb4286a58ea8db09228f598889581ef62347153f6636cd41553dc41685bdfad0a9d032ef58df9fbb0792b3447d0f04 + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -21767,6 +22247,15 @@ __metadata: languageName: node linkType: hard +"tree-kill@npm:^1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 10c0/7b1b7c7f17608a8f8d20a162e7957ac1ef6cd1636db1aba92f4e072dc31818c2ff0efac1e3d91064ede67ed5dc57c565420531a8134090a12ac10cf792ab14d2 + languageName: node + linkType: hard + "treeify@npm:^1.1.0": version: 1.1.0 resolution: "treeify@npm:1.1.0" @@ -21822,6 +22311,13 @@ __metadata: languageName: node linkType: hard +"ts-interface-checker@npm:^0.1.9": + version: 0.1.13 + resolution: "ts-interface-checker@npm:0.1.13" + checksum: 10c0/232509f1b84192d07b81d1e9b9677088e590ac1303436da1e92b296e9be8e31ea042e3e1fd3d29b1742ad2c959e95afe30f63117b8f1bc3a3850070a5142fea7 + languageName: node + linkType: hard + "ts-loader@npm:^9.5.1": version: 9.5.2 resolution: "ts-loader@npm:9.5.2" @@ -21962,6 +22458,48 @@ __metadata: languageName: node linkType: hard +"tsup@npm:^8.5.0": + version: 8.5.0 + resolution: "tsup@npm:8.5.0" + dependencies: + bundle-require: "npm:^5.1.0" + cac: "npm:^6.7.14" + chokidar: "npm:^4.0.3" + consola: "npm:^3.4.0" + debug: "npm:^4.4.0" + esbuild: "npm:^0.25.0" + fix-dts-default-cjs-exports: "npm:^1.0.0" + joycon: "npm:^3.1.1" + picocolors: "npm:^1.1.1" + postcss-load-config: "npm:^6.0.1" + resolve-from: "npm:^5.0.0" + rollup: "npm:^4.34.8" + source-map: "npm:0.8.0-beta.0" + sucrase: "npm:^3.35.0" + tinyexec: "npm:^0.3.2" + tinyglobby: "npm:^0.2.11" + tree-kill: "npm:^1.2.2" + peerDependencies: + "@microsoft/api-extractor": ^7.36.0 + "@swc/core": ^1 + postcss: ^8.4.12 + typescript: ">=4.5.0" + peerDependenciesMeta: + "@microsoft/api-extractor": + optional: true + "@swc/core": + optional: true + postcss: + optional: true + typescript: + optional: true + bin: + tsup: dist/cli-default.js + tsup-node: dist/cli-node.js + checksum: 10c0/2eddc1138ad992a2e67d826e92e0b0c4f650367355866c77df8368ade9489e0a8bf2b52b352e97fec83dc690af05881c29c489af27acb86ac2cef38b0d029087 + languageName: node + linkType: hard + "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" @@ -22206,6 +22744,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.5.4": + version: 1.6.1 + resolution: "ufo@npm:1.6.1" + checksum: 10c0/5a9f041e5945fba7c189d5410508cbcbefef80b253ed29aa2e1f8a2b86f4bd51af44ee18d4485e6d3468c92be9bf4a42e3a2b72dcaf27ce39ce947ec994f1e6b + languageName: node + linkType: hard + "uglify-js@npm:^3.1.4": version: 3.19.3 resolution: "uglify-js@npm:3.19.3" @@ -22669,10 +23214,17 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^4.0.2": + version: 4.0.2 + resolution: "webidl-conversions@npm:4.0.2" + checksum: 10c0/def5c5ac3479286dffcb604547628b2e6b46c5c5b8a8cfaa8c71dc3bafc85859bde5fbe89467ff861f571ab38987cf6ab3d6e7c80b39b999e50e803c12f3164f + languageName: node + linkType: hard + "webpack-sources@npm:^3.2.3": - version: 3.3.2 - resolution: "webpack-sources@npm:3.3.2" - checksum: 10c0/b5308d8acba4c7c6710b6df77187b274800afe0856c1508cba8aa310304558634e745b7eac4991ea086175ea6da3c64d11d958cf508980e6cb7506aa5983913e + version: 3.3.3 + resolution: "webpack-sources@npm:3.3.3" + checksum: 10c0/ab732f6933b513ba4d505130418995ddef6df988421fccf3289e53583c6a39e205c4a0739cee98950964552d3006604912679c736031337fb4a9d78d8576ed40 languageName: node linkType: hard @@ -22730,6 +23282,17 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^7.0.0": + version: 7.1.0 + resolution: "whatwg-url@npm:7.1.0" + dependencies: + lodash.sortby: "npm:^4.7.0" + tr46: "npm:^1.0.1" + webidl-conversions: "npm:^4.0.2" + checksum: 10c0/2785fe4647690e5a0225a79509ba5e21fdf4a71f9de3eabdba1192483fe006fc79961198e0b99f82751557309f17fc5a07d4d83c251aa5b2f85ba71e674cbee9 + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" @@ -23009,9 +23572,9 @@ __metadata: linkType: hard "xstate@npm:^5.19.2": - version: 5.19.4 - resolution: "xstate@npm:5.19.4" - checksum: 10c0/3a3a65c13263cd0f80de90c14d80113cfd53d37d9cb8c2dcaec4d14c07a980c976f508534fc64f09fb8f83d3513b76af43640bf9feca8886e356d209482e2baa + version: 5.20.0 + resolution: "xstate@npm:5.20.0" + checksum: 10c0/4443c87ce86901e71881842845785acb26eb5d7579c3a95966db83e6499f574325efbfd593e3051a21dbf5b101ba9474d284a43335ea56f518c666f0361bfc89 languageName: node linkType: hard