now sending and receiving all needed data

This commit is contained in:
0xturboblitz
2023-07-27 14:26:58 +02:00
parent 0310ee890c
commit 7d62b26fa7
5 changed files with 408 additions and 234 deletions

5
app/.gitignore vendored
View File

@@ -66,5 +66,8 @@ yarn-error.log
/coverage
.env
# Contains personal information
/scripts/env.ts
/scripts/retd.ts
/scripts/retd.ts
/server/passportData.json

View File

@@ -1,5 +1,4 @@
import React, {useEffect, useState} from 'react';
import type {PropsWithChildren} from 'react';
import {
SafeAreaView,
ScrollView,
@@ -14,7 +13,6 @@ import {
TextInput,
ActivityIndicator,
} from 'react-native';
import RNFS from 'react-native-fs';
import {
Colors,
@@ -27,7 +25,7 @@ import {
import PassportReader from 'react-native-passport-reader';
import {checkInputs} from './utils/checks';
// const {PassportReaderModule} = NativeModules;
const CACHE_PASSPORT_DATA = true;
function App(): JSX.Element {
const isDarkMode = useColorScheme() === 'dark';
@@ -54,68 +52,58 @@ function App(): JSX.Element {
async function handleResponse(response: any) {
const {
firstName,
lastName,
gender,
issuer,
nationality,
photo,
dg1File,
dg2File,
dg2InSave,
mrzInfo,
publicKey,
publicKeyOldSchool,
publicKeyPEM,
dataGroupHashes,
sodFile,
signedData,
eContent,
encryptedDigest,
contentBytes,
eContentDecomposed,
} = response;
// const responseJSON = JSON.stringify(response, null, 2);
// const responseJSONPath = RNFS. + '/response.json';
const passportData = {
mrzInfo: JSON.parse(mrzInfo),
publicKey: publicKey,
publicKeyPEM: publicKeyPEM,
dataGroupHashes: JSON.parse(dataGroupHashes),
eContent: JSON.parse(eContent),
encryptedDigest: JSON.parse(encryptedDigest),
contentBytes: JSON.parse(contentBytes),
eContentDecomposed: JSON.parse(eContentDecomposed),
};
// console.log('responseJSONPath', responseJSONPath);
console.log('mrzInfo', passportData.mrzInfo);
console.log('publicKey', passportData.publicKey);
console.log('publicKeyPEM', passportData.publicKeyPEM);
console.log('dataGroupHashes', passportData.dataGroupHashes);
console.log('eContent', passportData.eContent);
console.log('encryptedDigest', passportData.encryptedDigest);
console.log('contentBytes', passportData.contentBytes);
console.log('eContentDecomposed', passportData.eContentDecomposed);
// RNFS.writeFile(responseJSONPath, responseJSON, 'utf8')
// .then(success => console.log('FILE WRITTEN!'))
// .catch(err => console.log(err.message));
// Stores data in local server to avoid having to scan the passport each time
// For development purposes only
console.log('firstName', firstName);
console.log('lastName', lastName);
console.log('gender', gender);
console.log('issuer', issuer);
console.log('nationality', nationality);
console.log('photo', photo);
console.log('dg1File', JSON.parse(dg1File));
// console.log('dg2File', JSON.parse(dg2File));
console.log('dg2InSave', JSON.parse(dg2InSave));
console.log('publicKey', publicKey);
console.log('publicKeyOldSchool', publicKeyOldSchool);
// console.log('dataGroupHashes', JSON.parse(dataGroupHashes));
console.log('eContent', JSON.parse(eContent));
console.log('encryptedDigest', JSON.parse(encryptedDigest));
console.log('sodFile', JSON.parse(sodFile));
console.log('signedData', JSON.parse(signedData));
if (CACHE_PASSPORT_DATA) {
fetch('http://192.168.1.22:3000/passportData', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(passportData),
})
.then(response => response.json())
.then(data => console.log(data.message))
.catch(error => {
console.error('Error:', error);
});
}
// copilot, please write dg2File and dg2InSave to disk as JSON files, in js
fetch('http://192.168.1.22:3000/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: sodFile,
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => {
console.error('Error:', error);
});
setFirstName(firstName);
const {base64, width, height} = photo;
const firstName = passportData.mrzInfo.secondaryIdentifier.split('<')[0];
setFirstName(
firstName.charAt(0).toUpperCase() + firstName.slice(1).toLowerCase(),
);
// 1. Compute the eContent from the dg1File
@@ -146,6 +134,10 @@ function App(): JSX.Element {
}
}
const handleProve = () => {
// Generate a proof of passport here
};
const handleMint = () => {
// mint "Proof of Passport" NFT to the address logic here
};
@@ -208,6 +200,13 @@ function App(): JSX.Element {
value={address}
placeholder="Your Address or ens name"
/>
<Button title="Generate zk proof" onPress={handleProve} />
</View>
) : null}
{step === 'proofGenerated' ? (
<View style={styles.sectionContainer}>
<Text style={styles.header}>Zero-knowledge proof generated</Text>
<Text style={styles.header}>You can now mint your SBT</Text>
<Button title="Mint Proof of Passport" onPress={handleMint} />
</View>
) : null}

View File

@@ -143,11 +143,6 @@ class RNPassportReaderModule(private val reactContext: ReactApplicationContext)
return "RNPassportReader"
}
@ReactMethod
fun createCalendarEvent(name: String, location: String) {
Log.d("CalendarModule", "Create event called with name: $name and location: $location")
}
fun sendDataToJS(passportData: PassportData) {
val gson = Gson()
@@ -242,7 +237,6 @@ class RNPassportReaderModule(private val reactContext: ReactApplicationContext)
private lateinit var dg1File: DG1File
private lateinit var dg2File: DG2File
private lateinit var dg2InSave: InputStream
private lateinit var dg14File: DG14File
private lateinit var sodFile: SODFile
private var imageBase64: String? = null
@@ -291,67 +285,48 @@ class RNPassportReaderModule(private val reactContext: ReactApplicationContext)
}
}
Log.d(TAG, "============FIRST CONSOLE LOG=============")
val gson = Gson()
val dg1In = service.getInputStream(PassportService.EF_DG1)
dg1File = DG1File(dg1In)
Log.d(TAG, "dg1File: " + gson.toJson(dg1File)) //
dg1File = DG1File(dg1In)
val dg2In = service.getInputStream(PassportService.EF_DG2)
dg2File = DG2File(dg2In)
dg2InSave = dg2In
Log.d(TAG, "dg2In:")
Log.d(TAG, gson.toJson(dg2In))
Log.d(TAG, gson.toJson(dg2File))
dg2File = DG2File(dg2In)
val sodIn = service.getInputStream(PassportService.EF_SOD)
sodFile = SODFile(sodIn)
Log.d(TAG, "other data :")
// Log.d(TAG, "============FIRST CONSOLE LOG=============")
// Log.d(TAG, "dg1File: " + gson.toJson(dg1File))
// Log.d(TAG, "dg2File: " + gson.toJson(dg2File))
// Log.d(TAG, "sodFile.docSigningCertificate: ${sodFile.docSigningCertificate}")
Log.d(TAG, "publicKey: ${sodFile.docSigningCertificate.publicKey}")
Log.d(TAG, "publicKey: ${sodFile.docSigningCertificate.publicKey.toString()}")
Log.d(TAG, "publicKey: ${sodFile.docSigningCertificate.publicKey.format}")
Log.d(TAG, "publicKey: ${Base64.encodeToString(sodFile.docSigningCertificate.publicKey.encoded, Base64.DEFAULT)}")
Log.d(TAG, "sodFile.docSigningCertificate: ${gson.toJson(sodFile.docSigningCertificate)}")
val hexMap = sodFile.dataGroupHashes.mapValues { (_, value) ->
value.joinToString("") { "%02x".format(it) }
}
Log.d(TAG, "hexMap: ${gson.toJson(hexMap)}")
Log.d(TAG, "sodFile.dataGroupHashes: ${sodFile.dataGroupHashes}")
Log.d(TAG, "sodFile.dataGroupHashes: ${gson.toJson(sodFile.dataGroupHashes)}")
// var concatenated = concatenateHashes(sodFile.dataGroupHashes)
// Log.d(TAG, "publicKey: ${sodFile.docSigningCertificate.publicKey}")
// Log.d(TAG, "publicKey: ${sodFile.docSigningCertificate.publicKey.toString()}")
// Log.d(TAG, "publicKey: ${sodFile.docSigningCertificate.publicKey.format}")
// Log.d(TAG, "publicKey: ${Base64.encodeToString(sodFile.docSigningCertificate.publicKey.encoded, Base64.DEFAULT)}")
// Log.d(TAG, "sodFile.docSigningCertificate: ${gson.toJson(sodFile.docSigningCertificate)}")
// Log.d(TAG, "sodFile.dataGroupHashes: ${sodFile.dataGroupHashes}")
// Log.d(TAG, "sodFile.dataGroupHashes: ${gson.toJson(sodFile.dataGroupHashes)}")
// Log.d(TAG, "concatenated: $concatenated")
// Log.d(TAG, "concatenated: ${gson.toJson(concatenated)}")
// Log.d(TAG, "concatenated: ${gson.toJson(concatenated.joinToString("") { "%02x".format(it) })}")
Log.d(TAG, "sodFile.eContent: ${sodFile.eContent}")
Log.d(TAG, "sodFile.eContent: ${gson.toJson(sodFile.eContent)}")
Log.d(TAG, "sodFile.eContent: ${gson.toJson(sodFile.eContent.joinToString("") { "%02x".format(it) })}")
Log.d(TAG, "sodFile.encryptedDigest: ${sodFile.encryptedDigest}")
Log.d(TAG, "sodFile.encryptedDigest: ${gson.toJson(sodFile.encryptedDigest)}")
Log.d(TAG, "sodFile.encryptedDigest: ${gson.toJson(sodFile.encryptedDigest.joinToString("") { "%02x".format(it) })}")
// Log.d(TAG, "sodFile.eContent: ${sodFile.eContent}")
// Log.d(TAG, "sodFile.eContent: ${gson.toJson(sodFile.eContent)}")
// Log.d(TAG, "sodFile.eContent: ${gson.toJson(sodFile.eContent.joinToString("") { "%02x".format(it) })}")
// Log.d(TAG, "sodFile.encryptedDigest: ${sodFile.encryptedDigest}")
// Log.d(TAG, "sodFile.encryptedDigest: ${gson.toJson(sodFile.encryptedDigest)}")
// Log.d(TAG, "sodFile.encryptedDigest: ${gson.toJson(sodFile.encryptedDigest.joinToString("") { "%02x".format(it) })}")
// var id = passportNumberView.text.toString()
// try {
// postData(id, sodFile.eContent.joinToString("") { "%02x".format(it) }, sodFile.encryptedDigest.joinToString("") { "%02x".format(it) }, sodFile.docSigningCertificate.publicKey.toString())
// } catch (e: IOException) {
// e.printStackTrace()
// }
Log.d(TAG, "============LET'S VERIFY THE SIGNATURE=============")
// Log.d(TAG, "============LET'S VERIFY THE SIGNATURE=============")
doChipAuth(service)
doPassiveAuth()
Log.d(TAG, "============SIGNATURE VERIFIED=============")
// Log.d(TAG, "============SIGNATURE VERIFIED=============")
// sendDataToJS(PassportData(dg1File, dg2File, sodFile))
// Log.d(TAG, "============DATA SENT TO JS=============")
val allFaceImageInfo: MutableList<FaceImageInfo> = ArrayList()
@@ -399,56 +374,34 @@ class RNPassportReaderModule(private val reactContext: ReactApplicationContext)
private fun doPassiveAuth() {
try {
fun concatenateHashes(dataGroupHashes: Map<Int, ByteArray>): ByteArray {
val allHashes = ArrayList<ByteArray>()
// Order the data group hashes by their keys and concatenate them
for (i in dataGroupHashes.keys.sorted()) {
allHashes.add(dataGroupHashes[i]!!)
}
// Combine all the byte arrays into one
val combinedSize = allHashes.sumOf { it.size }
val result = ByteArray(combinedSize)
var pos = 0
for (hash in allHashes) {
hash.copyInto(result, pos)
pos += hash.size
}
return result
}
Log.d(TAG, "Starting passive authentication...")
val digest = MessageDigest.getInstance(sodFile.digestAlgorithm)
Log.d(TAG, "Using digest algorithm: ${sodFile.digestAlgorithm}")
val gson = Gson()
Log.d(TAG, "Using digest algorithm: ${gson.toJson(sodFile)}")
val dataHashes = sodFile.dataGroupHashes
Log.d(TAG, "dataHashes " + gson.toJson(dataHashes))
val hexMap = sodFile.dataGroupHashes.mapValues { (_, value) ->
value.joinToString("") { "%02x".format(it) }
}
Log.d(TAG, "hexMap: ${gson.toJson(hexMap)}")
var concatenated = concatenateHashes(sodFile.dataGroupHashes)
Log.d(TAG, "concatenated: $concatenated")
Log.d(TAG, "concatenated: ${gson.toJson(concatenated)}")
Log.d(TAG, "concatenated: ${gson.toJson(concatenated.joinToString("") { "%02x".format(it) })}")
val dg14Hash = if (chipAuthSucceeded) digest.digest(dg14Encoded) else ByteArray(0)
val dg1Hash = digest.digest(dg1File.encoded)
Log.d(TAG, "dg1File.encoded " + gson.toJson(dg1File.encoded))
Log.d(TAG, "dg1File.encoded.joinToString " + gson.toJson(dg1File.encoded.joinToString("") { "%02x".format(it) }))
Log.d(TAG, "dg1Hash " + gson.toJson(dg1Hash))
Log.d(TAG, "dg1Hash.joinToString " + gson.toJson(dg1Hash.joinToString("") { "%02x".format(it) }))
val dg2Hash = digest.digest(dg2File.encoded)
Log.d(TAG, "dg2File.encoded " + gson.toJson(dg2File.encoded))
Log.d(TAG, "dg2File.encoded.joinToString " + gson.toJson(dg2File.encoded.joinToString("") { "%02x".format(it) }))
Log.d(TAG, "dg2Hash " + gson.toJson(dg2Hash))
Log.d(TAG, "dg2HashjoinToString " + gson.toJson(dg2Hash.joinToString("") { "%02x".format(it) }))
// Log.d(TAG, "dataHashes " + gson.toJson(dataHashes))
// val hexMap = sodFile.dataGroupHashes.mapValues { (_, value) ->
// value.joinToString("") { "%02x".format(it) }
// }
// Log.d(TAG, "hexMap: ${gson.toJson(hexMap)}")
// Log.d(TAG, "concatenated: $concatenated")
// Log.d(TAG, "concatenated: ${gson.toJson(concatenated)}")
// Log.d(TAG, "concatenated: ${gson.toJson(concatenated.joinToString("") { "%02x".format(it) })}")
// Log.d(TAG, "dg1File.encoded " + gson.toJson(dg1File.encoded))
// Log.d(TAG, "dg1File.encoded.joinToString " + gson.toJson(dg1File.encoded.joinToString("") { "%02x".format(it) }))
// Log.d(TAG, "dg1Hash " + gson.toJson(dg1Hash))
// Log.d(TAG, "dg1Hash.joinToString " + gson.toJson(dg1Hash.joinToString("") { "%02x".format(it) }))
// Log.d(TAG, "dg2File.encoded " + gson.toJson(dg2File.encoded))
// Log.d(TAG, "dg2File.encoded.joinToString " + gson.toJson(dg2File.encoded.joinToString("") { "%02x".format(it) }))
// Log.d(TAG, "dg2Hash " + gson.toJson(dg2Hash))
// Log.d(TAG, "dg2HashjoinToString " + gson.toJson(dg2Hash.joinToString("") { "%02x".format(it) }))
Log.d(TAG, "Comparing data group hashes...")
@@ -463,24 +416,20 @@ class RNPassportReaderModule(private val reactContext: ReactApplicationContext)
val cf = CertificateFactory.getInstance("X.509")
var p: ASN1Primitive?
Log.d(TAG, "Reading ASN1 sequence...")
var obj = asn1InputStream.readObject()
while (obj != null) {
p = obj
// Your processing code for ASN1Primitive p goes here
val asn1 = ASN1Sequence.getInstance(p)
if (asn1 == null || asn1.size() == 0) {
throw IllegalArgumentException("Null or empty sequence passed.")
}
Log.d(TAG, "asn1" + asn1.toString()) //byte sequence
if (asn1.size() != 2) {
throw IllegalArgumentException("Incorrect sequence size: " + asn1.size())
}
val certSet = ASN1Set.getInstance(asn1.getObjectAt(1))
for (i in 0 until certSet.size()) {
// Log.d(TAG, "Processing certificate: $i")
val certificate = Certificate.getInstance(certSet.getObjectAt(i))
val pemCertificate = certificate.encoded
val javaCertificate = cf.generateCertificate(ByteArrayInputStream(pemCertificate))
@@ -495,7 +444,6 @@ class RNPassportReaderModule(private val reactContext: ReactApplicationContext)
for (docSigningCertificate: X509Certificate in docSigningCertificates) {
docSigningCertificate.checkValidity()
Log.d(TAG, "Certificate: ${docSigningCertificate.subjectDN} is valid.")
// Log.d(TAG, docSigningCertificate.toString())
}
val cp = cf.generateCertPath(docSigningCertificates)
@@ -509,12 +457,10 @@ class RNPassportReaderModule(private val reactContext: ReactApplicationContext)
if ((sodDigestEncryptionAlgorithm == "SSAwithRSA/PSS")) {
sodDigestEncryptionAlgorithm = "SHA256withRSA/PSS"
isSSA = true
//Log.d(TAG, sodDigestEncryptionAlgorithm)
}
val sign = Signature.getInstance(sodDigestEncryptionAlgorithm)
if (isSSA) {
//Log.d(TAG, isSSA.toString())
sign.setParameter(PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 32, 1))
}
sign.initVerify(sodFile.docSigningCertificate)
@@ -522,7 +468,6 @@ class RNPassportReaderModule(private val reactContext: ReactApplicationContext)
passiveAuthSuccess = sign.verify(sodFile.encryptedDigest)
Log.d(TAG, "Passive authentication success: $passiveAuthSuccess")
Log.d(TAG, "============LAST CONSOLE LOG=============")
}
} catch (e: Exception) {
Log.w(TAG, "Exception in passive authentication", e)
@@ -555,50 +500,35 @@ class RNPassportReaderModule(private val reactContext: ReactApplicationContext)
val signedDataField = SODFile::class.java.getDeclaredField("signedData")
signedDataField.isAccessible = true
val signedData = signedDataField.get(sodFile)
val signedData = signedDataField.get(sodFile) as SignedData
val eContentAsn1InputStream = ASN1InputStream(sodFile.eContent.inputStream())
val eContentDecomposed: ASN1Primitive = eContentAsn1InputStream.readObject()
val passport = Arguments.createMap()
passport.putString("mrzInfo", gson.toJson(mrzInfo))
passport.putString("dg2File", gson.toJson(dg2File))
passport.putString("publicKey", sodFile.docSigningCertificate.publicKey.toString())
passport.putString("publicKeyPEM", Base64.encodeToString(sodFile.docSigningCertificate.publicKey.encoded, Base64.DEFAULT))
passport.putString("dataGroupHashes", gson.toJson(sodFile.dataGroupHashes))
passport.putString("eContent", gson.toJson(sodFile.eContent))
passport.putString("encryptedDigest", gson.toJson(sodFile.encryptedDigest))
passport.putString("contentBytes", gson.toJson(signedData.getEncapContentInfo()))
passport.putString("eContentDecomposed", gson.toJson(eContentDecomposed))
// Another way to get signing time is to get into signedData.signerInfos, then search for the ICO identifier 1.2.840.113549.1.9.5
// passport.putString("signerInfos", gson.toJson(signedData.signerInfos))
// Log.d(TAG, "signedData.digestAlgorithms: ${gson.toJson(signedData.digestAlgorithms)}")
// Log.d(TAG, "signedData.signerInfos: ${gson.toJson(signedData.signerInfos)}")
// Log.d(TAG, "signedData.certificates: ${gson.toJson(signedData.certificates)}")
val base64 = bitmap?.let { toBase64(it, quality) }
val photo = Arguments.createMap()
photo.putString("base64", base64 ?: "")
photo.putInt("width", bitmap?.width ?: 0)
photo.putInt("height", bitmap?.height ?: 0)
val firstName = mrzInfo.secondaryIdentifier.replace("<", "")
val lastName = mrzInfo.primaryIdentifier.replace("<", "")
val passport = Arguments.createMap()
passport.putString("firstName", firstName)
passport.putString("lastName", lastName)
passport.putString("nationality", mrzInfo.nationality)
passport.putString("gender", mrzInfo.gender.toString())
passport.putString("issuer", mrzInfo.issuingState)
passport.putMap("photo", photo)
passport.putString("dg1File", gson.toJson(dg1File))
passport.putString("dg2File", gson.toJson(dg2File))
passport.putString("dg2InSave", gson.toJson(dg2InSave))
passport.putString("signedData", gson.toJson(signedData))
passport.putString("sodFile", gson.toJson(sodFile))
passport.putString("publicKey", sodFile.docSigningCertificate.publicKey.toString())
passport.putString("publicKeyOldSchool", Base64.encodeToString(sodFile.docSigningCertificate.publicKey.encoded, Base64.DEFAULT))
passport.putString("dataGroupHashes", gson.toJson(sodFile.dataGroupHashes))
passport.putString("eContent", gson.toJson(sodFile.eContent.joinToString("") { "%02x".format(it) }))
passport.putString("eContent", gson.toJson(sodFile.eContent.joinToString("") { "%02x".format(it) }))
passport.putString("encryptedDigest", gson.toJson(sodFile.encryptedDigest.joinToString("") { "%02x".format(it) }))
val asn1InputStream = ASN1InputStream(sodFile.eContent.inputStream())
val asn1Primitive: ASN1Primitive = asn1InputStream.readObject()
// Log.d(TAG, "signedData: ${signedData}")
// Log.d(TAG, "signedData: ${signedData.toString()}")
// Log.d(TAG, "signedData: ${gson.toJson(signedData)}")
Log.d(TAG, "asn1Primitive: ${asn1Primitive}")
Log.d(TAG, "asn1Primitive: ${asn1Primitive.toString()}")
Log.d(TAG, "asn1Primitive: ${gson.toJson(asn1Primitive)}")
// Log.d(TAG, "publicKey: ${sodFile.docSigningCertificate.publicKey}")
// Log.d(TAG, "publicKey: ${Base64.encodeToString(sodFile.docSigningCertificate.publicKey.encoded, Base64.DEFAULT)}")
// Log.d(TAG, "sodFile.dataGroupHashes: ${sodFile.dataGroupHashes}")
// Log.d(TAG, "sodFile.eContent: ${gson.toJson(sodFile.eContent.joinToString("") { "%02x".format(it) })}")
// Log.d(TAG, "sodFile.encryptedDigest: ${gson.toJson(sodFile.encryptedDigest.joinToString("") { "%02x".format(it) })}")
scanPromise?.resolve(passport)
resetState()

View File

@@ -10,14 +10,13 @@
"test": "jest"
},
"dependencies": {
"@types/node-forge": "^1.3.3",
"asn1js": "^3.0.5",
"body-parser": "^1.20.2",
"buffer": "^6.0.3",
"express": "^4.18.2",
"node-forge": "^1.3.1",
"pvutils": "^1.1.3",
"react": "18.2.0",
"react-native": "0.72.3",
"react-native-fs": "^2.20.0",
"react-native-passport-reader": "^1.0.3"
},
"devDependencies": {
@@ -27,6 +26,8 @@
"@react-native/eslint-config": "^0.72.2",
"@react-native/metro-config": "^0.72.9",
"@tsconfig/react-native": "^3.0.0",
"@types/express": "^4.17.17",
"@types/node-forge": "^1.3.3",
"@types/react": "^18.0.24",
"@types/react-test-renderer": "^18.0.0",
"babel-jest": "^29.2.1",

View File

@@ -1848,6 +1848,41 @@
dependencies:
"@babel/types" "^7.20.7"
"@types/body-parser@*":
version "1.19.2"
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0"
integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==
dependencies:
"@types/connect" "*"
"@types/node" "*"
"@types/connect@*":
version "3.4.35"
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
dependencies:
"@types/node" "*"
"@types/express-serve-static-core@^4.17.33":
version "4.17.35"
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f"
integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==
dependencies:
"@types/node" "*"
"@types/qs" "*"
"@types/range-parser" "*"
"@types/send" "*"
"@types/express@^4.17.17":
version "4.17.17"
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4"
integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==
dependencies:
"@types/body-parser" "*"
"@types/express-serve-static-core" "^4.17.33"
"@types/qs" "*"
"@types/serve-static" "*"
"@types/graceful-fs@^4.1.3":
version "4.1.6"
resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz"
@@ -1855,6 +1890,11 @@
dependencies:
"@types/node" "*"
"@types/http-errors@*":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65"
integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1":
version "2.0.4"
resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz"
@@ -1879,6 +1919,16 @@
resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz"
integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==
"@types/mime@*":
version "3.0.1"
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10"
integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==
"@types/mime@^1":
version "1.3.2"
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a"
integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==
"@types/node-forge@^1.3.3":
version "1.3.3"
resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.3.tgz#43de56dd6a7c01b755a64759def25033356cfe5c"
@@ -1901,6 +1951,16 @@
resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz"
integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==
"@types/qs@*":
version "6.9.7"
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
"@types/range-parser@*":
version "1.2.4"
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
"@types/react-test-renderer@^18.0.0":
version "18.0.0"
resolved "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.0.0.tgz"
@@ -1927,6 +1987,23 @@
resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz"
integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==
"@types/send@*":
version "0.17.1"
resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301"
integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==
dependencies:
"@types/mime" "^1"
"@types/node" "*"
"@types/serve-static@*":
version "1.15.2"
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a"
integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==
dependencies:
"@types/http-errors" "*"
"@types/mime" "*"
"@types/node" "*"
"@types/stack-utils@^2.0.0":
version "2.0.1"
resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz"
@@ -2049,7 +2126,7 @@ abort-controller@^3.0.0:
dependencies:
event-target-shim "^5.0.0"
accepts@^1.3.7, accepts@~1.3.5, accepts@~1.3.7:
accepts@^1.3.7, accepts@~1.3.5, accepts@~1.3.7, accepts@~1.3.8:
version "1.3.8"
resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz"
integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
@@ -2160,6 +2237,11 @@ array-buffer-byte-length@^1.0.0:
call-bind "^1.0.2"
is-array-buffer "^3.0.1"
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
array-includes@^3.1.6:
version "3.1.6"
resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz"
@@ -2224,15 +2306,6 @@ asap@~2.0.6:
resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz"
integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
asn1js@^3.0.5:
version "3.0.5"
resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.5.tgz#5ea36820443dbefb51cc7f88a2ebb5b462114f38"
integrity sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==
dependencies:
pvtsutils "^1.3.2"
pvutils "^1.1.3"
tslib "^2.4.0"
ast-types@0.15.2:
version "0.15.2"
resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz"
@@ -2399,11 +2472,6 @@ balanced-match@^1.0.0:
resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
base-64@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb"
integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==
base64-js@^1.1.2, base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
@@ -2418,6 +2486,42 @@ bl@^4.1.0:
inherits "^2.0.4"
readable-stream "^3.4.0"
body-parser@1.20.1:
version "1.20.1"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668"
integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==
dependencies:
bytes "3.1.2"
content-type "~1.0.4"
debug "2.6.9"
depd "2.0.0"
destroy "1.2.0"
http-errors "2.0.0"
iconv-lite "0.4.24"
on-finished "2.4.1"
qs "6.11.0"
raw-body "2.5.1"
type-is "~1.6.18"
unpipe "1.0.0"
body-parser@^1.20.2:
version "1.20.2"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
dependencies:
bytes "3.1.2"
content-type "~1.0.5"
debug "2.6.9"
depd "2.0.0"
destroy "1.2.0"
http-errors "2.0.0"
iconv-lite "0.4.24"
on-finished "2.4.1"
qs "6.11.0"
raw-body "2.5.2"
type-is "~1.6.18"
unpipe "1.0.0"
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
@@ -2476,6 +2580,11 @@ bytes@3.0.0:
resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz"
integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
bytes@3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
call-bind@^1.0.0, call-bind@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz"
@@ -2703,6 +2812,18 @@ connect@^3.6.5:
parseurl "~1.3.3"
utils-merge "1.0.1"
content-disposition@0.5.4:
version "0.5.4"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
dependencies:
safe-buffer "5.2.1"
content-type@~1.0.4, content-type@~1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918"
integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
convert-source-map@^1.6.0, convert-source-map@^1.7.0:
version "1.9.0"
resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz"
@@ -2713,6 +2834,16 @@ convert-source-map@^2.0.0:
resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz"
integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
cookie-signature@1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
cookie@0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
core-js-compat@^3.31.0:
version "3.31.1"
resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz"
@@ -3233,6 +3364,43 @@ expect@^29.6.1:
jest-message-util "^29.6.1"
jest-util "^29.6.1"
express@^4.18.2:
version "4.18.2"
resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==
dependencies:
accepts "~1.3.8"
array-flatten "1.1.1"
body-parser "1.20.1"
content-disposition "0.5.4"
content-type "~1.0.4"
cookie "0.5.0"
cookie-signature "1.0.6"
debug "2.6.9"
depd "2.0.0"
encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
finalhandler "1.2.0"
fresh "0.5.2"
http-errors "2.0.0"
merge-descriptors "1.0.1"
methods "~1.1.2"
on-finished "2.4.1"
parseurl "~1.3.3"
path-to-regexp "0.1.7"
proxy-addr "~2.0.7"
qs "6.11.0"
range-parser "~1.2.1"
safe-buffer "5.2.1"
send "0.18.0"
serve-static "1.15.0"
setprototypeof "1.2.0"
statuses "2.0.1"
type-is "~1.6.18"
utils-merge "1.0.1"
vary "~1.1.2"
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
@@ -3312,6 +3480,19 @@ finalhandler@1.1.2:
statuses "~1.5.0"
unpipe "~1.0.0"
finalhandler@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
dependencies:
debug "2.6.9"
encodeurl "~1.0.2"
escape-html "~1.0.3"
on-finished "2.4.1"
parseurl "~1.3.3"
statuses "2.0.1"
unpipe "~1.0.0"
find-cache-dir@^2.0.0:
version "2.1.0"
resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz"
@@ -3379,6 +3560,11 @@ for-each@^0.3.3:
dependencies:
is-callable "^1.1.3"
forwarded@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
fresh@0.5.2:
version "0.5.2"
resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"
@@ -3621,6 +3807,13 @@ human-signals@^2.1.0:
resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
iconv-lite@0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
dependencies:
safer-buffer ">= 2.1.2 < 3"
ieee754@^1.1.13, ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"
@@ -3701,6 +3894,11 @@ ip@^1.1.5:
resolved "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz"
integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==
ipaddr.js@1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
version "3.0.2"
resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz"
@@ -4568,11 +4766,21 @@ makeerror@1.0.12:
dependencies:
tmpl "1.0.5"
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
memoize-one@^5.0.0:
version "5.2.1"
resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz"
integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==
merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
merge-stream@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz"
@@ -4583,6 +4791,11 @@ merge2@^1.3.0, merge2@^1.4.1:
resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
metro-babel-transformer@0.76.7:
version "0.76.7"
resolved "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.76.7.tgz"
@@ -4862,7 +5075,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
mime-types@^2.1.27, mime-types@~2.1.34:
mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34:
version "2.1.35"
resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
@@ -5226,6 +5439,11 @@ path-parse@^1.0.7:
resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
path-type@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
@@ -5330,6 +5548,14 @@ prop-types@*, prop-types@^15.8.1:
object-assign "^4.1.1"
react-is "^16.13.1"
proxy-addr@~2.0.7:
version "2.0.7"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
dependencies:
forwarded "0.2.0"
ipaddr.js "1.9.1"
punycode@^2.1.0:
version "2.3.0"
resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz"
@@ -5340,18 +5566,18 @@ pure-rand@^6.0.0:
resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz"
integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==
pvtsutils@^1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.2.tgz#9f8570d132cdd3c27ab7d51a2799239bf8d8d5de"
integrity sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==
dependencies:
tslib "^2.4.0"
pvutils@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3"
integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==
qs@6.11.0:
version "6.11.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
dependencies:
side-channel "^1.0.4"
queue-microtask@^1.2.2:
version "1.2.3"
resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
@@ -5369,6 +5595,26 @@ range-parser@~1.2.1:
resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
raw-body@2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
dependencies:
bytes "3.1.2"
http-errors "2.0.0"
iconv-lite "0.4.24"
unpipe "1.0.0"
raw-body@2.5.2:
version "2.5.2"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
dependencies:
bytes "3.1.2"
http-errors "2.0.0"
iconv-lite "0.4.24"
unpipe "1.0.0"
react-devtools-core@^4.27.2:
version "4.28.0"
resolved "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.0.tgz"
@@ -5392,14 +5638,6 @@ react-is@^17.0.1:
resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
react-native-fs@^2.20.0:
version "2.20.0"
resolved "https://registry.yarnpkg.com/react-native-fs/-/react-native-fs-2.20.0.tgz#05a9362b473bfc0910772c0acbb73a78dbc810f6"
integrity sha512-VkTBzs7fIDUiy/XajOSNk0XazFE9l+QlMAce7lGuebZcag5CnjszB+u4BdqzwaQOdcYb5wsJIsqq4kxInIRpJQ==
dependencies:
base-64 "^0.1.0"
utf8 "^3.0.0"
react-native-passport-reader@^1.0.3:
version "1.0.3"
resolved "https://registry.npmjs.org/react-native-passport-reader/-/react-native-passport-reader-1.0.3.tgz"
@@ -5669,7 +5907,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safe-buffer@~5.2.0:
safe-buffer@5.2.1, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@@ -5683,6 +5921,11 @@ safe-regex-test@^1.0.0:
get-intrinsic "^1.1.3"
is-regex "^1.1.4"
"safer-buffer@>= 2.1.2 < 3":
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
scheduler@0.24.0-canary-efb381bbf-20230505:
version "0.24.0-canary-efb381bbf-20230505"
resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz"
@@ -5738,7 +5981,7 @@ serialize-error@^2.1.0:
resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz"
integrity sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==
serve-static@^1.13.1:
serve-static@1.15.0, serve-static@^1.13.1:
version "1.15.0"
resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz"
integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
@@ -6103,11 +6346,6 @@ tslib@^2.0.1:
resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz"
integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
tslib@^2.4.0:
version "2.6.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410"
integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz"
@@ -6142,6 +6380,14 @@ type-fest@^0.7.1:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz"
integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
dependencies:
media-typer "0.3.0"
mime-types "~2.1.24"
typed-array-buffer@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz"
@@ -6232,7 +6478,7 @@ universalify@^0.1.0:
resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
unpipe@~1.0.0:
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
@@ -6257,11 +6503,6 @@ use-sync-external-store@^1.0.0:
resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz"
integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
utf8@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1"
integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"