App/eu id updates (#638)

* fix build issues

* generate disclosure proof with euids

* generate disclosure proof with euids

* Eu id updates 2 (#648)

* update vc_and_disclose_id test (dev branch) (#641)

* fix: vc_and_disclose_id test

* chore: yarn prettier

* Show modal on NFC scan error (#642)

* Add help button and error modal actions

* fix the screen management

* yarn nice

* Bump build v2.5.4: ios 132; android 71 (#631)

* bump version and build numbers

* remove tamagui/toast

* fix marketing version

* fix: update TD1 and TD3 checks (#643)

* bum yarn.lock

* add version and user defined data

---------

Co-authored-by: Vishalkulkarni45 <109329073+Vishalkulkarni45@users.noreply.github.com>
Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
Co-authored-by: Seshanth.S🐺 <35675963+seshanthS@users.noreply.github.com>

* remove the mock user define data

* get the useridentifier as a hash from the user defined data

* chore: add version and userDefinedData

* feat: use the version in register / dsc proofs as well

* update calculateUserIdentifierHash

* yarn nice

* refactor: consolidate user context data handling and update payload structure

* fix typing issues on sha1

* remove console.log(sha1)

* fix sha1 import

* refactor: streamline userDefinedData handling and adjust payload type for circuit

* refactor: update sha1 usage and enhance logging in calculateUserIdentifierHash

* yarn nice

* yarn lint common

* use ts-ignore for sha1 import

* fix app ci tests

* fix typing issue

* remove unused ts-ignore

* cast uuid before calling generateinputs

* bump qrcode version

* add tsup on the qrcode sdk

* fix: exports on selfxyz/qrcode

* update how we define config.version

* fix yarn imports

* yarn format

---------

Co-authored-by: Vishalkulkarni45 <109329073+Vishalkulkarni45@users.noreply.github.com>
Co-authored-by: Justin Hernandez <justin.hernandez@self.xyz>
Co-authored-by: Seshanth.S🐺 <35675963+seshanthS@users.noreply.github.com>
Co-authored-by: Ayman <aymanshaik1015@gmail.com>
This commit is contained in:
turnoffthiscomputer
2025-06-23 07:01:23 -04:00
committed by GitHub
parent be83be997f
commit 0468719f9f
25 changed files with 881 additions and 113 deletions

View File

@@ -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: ['<rootDir>/jest.setup.js'],
testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.[jt]sx?$',

View File

@@ -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,
};
});

View File

@@ -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",

View File

@@ -233,6 +233,31 @@ const ProveScreen: React.FC = () => {
onLayout={handleScrollViewLayout}
>
<Disclosures disclosures={disclosureOptions} />
{/* Display userDefinedData if it exists */}
{selectedApp?.userDefinedData && (
<View marginTop={20} paddingHorizontal={20}>
<BodyText
fontSize={16}
color={black}
fontWeight="600"
marginBottom={10}
>
Additional Information:
</BodyText>
<View
backgroundColor={slate300}
padding={15}
borderRadius={8}
marginBottom={10}
>
<BodyText fontSize={14} color={black} lineHeight={20}>
{selectedApp.userDefinedData}
</BodyText>
</View>
</View>
)}
<View marginTop={20}>
<Caption
textAlign="center"

View File

@@ -10,7 +10,6 @@ ethers.computeHmac.register((algo, key, data) => {
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);
});

View File

@@ -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;
}

View File

@@ -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<ProvingState>((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<ProvingState>((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<ProvingState>((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<ProvingState>((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<ProvingState>((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<ProvingState>((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<ProvingState>((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<ProvingState>((set, get) => {
circuitName as string,
endpointType as EndpointType,
endpoint as string,
selfApp?.version,
userDefinedData,
);
const forgeKey = forge.util.createBuffer(
sharedKey?.toString('binary') as string,

View File

@@ -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<ProofTypes, 'register'>}${RegisterSuffixes}`;
type DscProofType = `${Extract<ProofTypes, 'dsc'>}${DscSuffixes}`;
type DiscloseProofType =
`${Extract<ProofTypes, 'disclose'>}${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: {

View File

@@ -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);

View File

@@ -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';

View File

@@ -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';

2
common/.npmignore Normal file
View File

@@ -0,0 +1,2 @@
dist/cjs/tsconfig.cjs.tsbuildinfo
dist/esm/tsconfig.tsbuildinfo

Binary file not shown.

View File

@@ -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,
};

View File

@@ -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",

View File

@@ -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;
}

View File

@@ -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)),
};

View File

@@ -1,5 +1,4 @@
export type UserIdType = 'hex' | 'uuid';
/// UUID
function hexToBigInt(hex: string): bigint {
return BigInt(`0x${hex}`);

View File

@@ -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),
]
);
}

View File

@@ -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;

View File

@@ -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 };

View File

@@ -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": {

View File

@@ -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",

15
sdk/qrcode/tsup.config.ts Normal file
View File

@@ -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',
};

625
yarn.lock
View File

@@ -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