From 885198456655d806615dfe9cc83b0a60c0029735 Mon Sep 17 00:00:00 2001 From: christopherwxyz Date: Wed, 22 Apr 2026 17:25:39 -0400 Subject: [PATCH 1/2] feat(ios): add fast account creation and targeted assertion support - Add platform/security-key assertion request handling with provider selection - Add fast account creation API with availability gating for older iOS versions - Bump expo peer dep to >=53.0.0 and regenerate lockfile --- ios/PasskeyDelegate.swift | 179 +- ios/PasskeyExceptions.swift | 18 + ios/PasskeyOptions.swift | 17 + ios/PasskeyResponses.swift | 59 + ios/ReactNativePasskeysModule.swift | 131 +- ios/Shared.swift | 15 + jest.config.js | 1 + pnpm-lock.yaml | 2572 ++++++++--------- src/ReactNativePasskeys.types.ts | 33 + src/ReactNativePasskeysModule.ts | 21 + src/ReactNativePasskeysModule.web.ts | 14 + .../ReactNativePasskeysModule-test.ts | 77 + src/index.ts | 12 + 13 files changed, 1738 insertions(+), 1411 deletions(-) create mode 100644 jest.config.js create mode 100644 src/__tests__/ReactNativePasskeysModule-test.ts diff --git a/ios/PasskeyDelegate.swift b/ios/PasskeyDelegate.swift index c90ec61..48a3107 100644 --- a/ios/PasskeyDelegate.swift +++ b/ios/PasskeyDelegate.swift @@ -3,7 +3,9 @@ import ExpoModulesCore import Foundation protocol PasskeyResultHandler { - func onSuccess(_ data: PublicKeyCredentialJSON) + func onSuccessRegistration(_ data: RegistrationResponseJSON) + func onSuccessAccountCreation(_ data: AccountCreationResponseJSON) + func onSuccessAuthentication(_ data: AuthenticationResponseJSON) func onFailure(_ error: Error) } @@ -42,63 +44,46 @@ class PasskeyDelegate: NSObject, ASAuthorizationControllerDelegate, controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization ) { - - switch authorization.credential { - case let credential as ASAuthorizationPlatformPublicKeyCredentialRegistration: - if credential.rawAttestationObject == nil { - handler.onFailure((ASAuthorizationError(ASAuthorizationError.Code.failed))) - } - - var largeBlob: AuthenticationExtensionsLargeBlobOutputsJSON? - if #available(iOS 17.0, *) { - largeBlob = AuthenticationExtensionsLargeBlobOutputsJSON( - supported: Field.init(wrappedValue: credential.largeBlob?.isSupported) - ) - } - - var prf: AuthenticationExtensionsPRFOutputsJSON? - if #available(iOS 18.0, *) { - prf = credential.prf.flatMap { it in - AuthenticationExtensionsPRFOutputsJSON( - enabled: Field.init(wrappedValue: it.isSupported), - results: Field.init( - wrappedValue: it.first.map { first in - AuthenticationExtensionsPRFValuesJSON( - first: Field.init(wrappedValue: first.serialize()), - second: Field.init(wrappedValue: it.second.serialize())) - } - ) - ) - } + if #available(iOS 26.0, *), + let credential = + authorization.credential as? ASAuthorizationAccountCreationPlatformPublicKeyCredential + { + guard let registrationResult = createPlatformRegistrationResult( + from: credential.credentialRegistration) + else { + return } - let clientExtensionResults = AuthenticationExtensionsClientOutputsJSON( - largeBlob: Field.init(wrappedValue: largeBlob), - prf: Field.init(wrappedValue: prf) + let accountCreationResult = AccountCreationResponseJSON( + id: Field.init(wrappedValue: registrationResult.id), + rawId: Field.init(wrappedValue: registrationResult.rawId), + response: Field.init(wrappedValue: registrationResult.response), + account: Field.init( + wrappedValue: AccountCreationDetailsJSON( + contactIdentifier: Field.init( + wrappedValue: getContactIdentifier(from: credential.contactIdentifier)), + name: Field.init(wrappedValue: getName(from: credential.name)) + )), + clientExtensionResults: Field.init( + wrappedValue: registrationResult.clientExtensionResults) ) - let response = AuthenticatorAttestationResponseJSON( - clientDataJSON: Field.init( - wrappedValue: credential.rawClientDataJSON.toBase64URLEncodedString()), - publicKey: Field.init( - wrappedValue: getPublicKey(from: credential.rawAttestationObject!)? - .toBase64URLEncodedString()), - attestationObject: Field.init( - wrappedValue: credential.rawAttestationObject!.toBase64URLEncodedString()) - ) + handler.onSuccessAccountCreation(accountCreationResult) + return + } - let registrationResult = RegistrationResponseJSON( - id: Field.init(wrappedValue: credential.credentialID.toBase64URLEncodedString()), - rawId: Field.init(wrappedValue: credential.credentialID.toBase64URLEncodedString()), - response: Field.init(wrappedValue: response), - clientExtensionResults: Field.init(wrappedValue: clientExtensionResults) - ) + switch authorization.credential { + case let credential as ASAuthorizationPlatformPublicKeyCredentialRegistration: + guard let result = createPlatformRegistrationResult(from: credential) else { + return + } - handler.onSuccess(Either(registrationResult)) + handler.onSuccessRegistration(result) case let credential as ASAuthorizationSecurityKeyPublicKeyCredentialRegistration: - if credential.rawAttestationObject == nil { + guard credential.rawAttestationObject != nil else { handler.onFailure((ASAuthorizationError(ASAuthorizationError.Code.failed))) + return } let response = AuthenticatorAttestationResponseJSON( @@ -117,7 +102,7 @@ class PasskeyDelegate: NSObject, ASAuthorizationControllerDelegate, response: Field.init(wrappedValue: response) ) - handler.onSuccess(Either(registrationResult)) + handler.onSuccessRegistration(registrationResult) case let credential as ASAuthorizationPlatformPublicKeyCredentialAssertion: var largeBlob: AuthenticationExtensionsLargeBlobOutputsJSON? = @@ -168,7 +153,7 @@ class PasskeyDelegate: NSObject, ASAuthorizationControllerDelegate, clientExtensionResults: Field.init(wrappedValue: clientExtensionResults) ) - handler.onSuccess(Either(assertionResult)) + handler.onSuccessAuthentication(assertionResult) case let credential as ASAuthorizationSecurityKeyPublicKeyCredentialAssertion: let response = AuthenticatorAssertionResponseJSON( @@ -187,9 +172,99 @@ class PasskeyDelegate: NSObject, ASAuthorizationControllerDelegate, response: Field.init(wrappedValue: response) ) - handler.onSuccess(Either(assertionResult)) + handler.onSuccessAuthentication(assertionResult) default: handler.onFailure((ASAuthorizationError(ASAuthorizationError.Code.failed))) } } + + @available(iOS 15.0, *) + private func createPlatformRegistrationResult( + from credential: ASAuthorizationPlatformPublicKeyCredentialRegistration + ) -> RegistrationResponseJSON? { + guard let attestationObject = credential.rawAttestationObject else { + handler.onFailure((ASAuthorizationError(ASAuthorizationError.Code.failed))) + return nil + } + + var largeBlob: AuthenticationExtensionsLargeBlobOutputsJSON? + if #available(iOS 17.0, *) { + largeBlob = AuthenticationExtensionsLargeBlobOutputsJSON( + supported: Field.init(wrappedValue: credential.largeBlob?.isSupported) + ) + } + + var prf: AuthenticationExtensionsPRFOutputsJSON? + if #available(iOS 18.0, *) { + prf = credential.prf.flatMap { it in + AuthenticationExtensionsPRFOutputsJSON( + enabled: Field.init(wrappedValue: it.isSupported), + results: Field.init( + wrappedValue: it.first.map { first in + AuthenticationExtensionsPRFValuesJSON( + first: Field.init(wrappedValue: first.serialize()), + second: Field.init(wrappedValue: it.second.serialize())) + } + ) + ) + } + } + + let clientExtensionResults = AuthenticationExtensionsClientOutputsJSON( + largeBlob: Field.init(wrappedValue: largeBlob), + prf: Field.init(wrappedValue: prf) + ) + + let response = AuthenticatorAttestationResponseJSON( + clientDataJSON: Field.init( + wrappedValue: credential.rawClientDataJSON.toBase64URLEncodedString()), + publicKey: Field.init( + wrappedValue: getPublicKey(from: attestationObject)?.toBase64URLEncodedString()), + attestationObject: Field.init( + wrappedValue: attestationObject.toBase64URLEncodedString()) + ) + + return RegistrationResponseJSON( + id: Field.init(wrappedValue: credential.credentialID.toBase64URLEncodedString()), + rawId: Field.init(wrappedValue: credential.credentialID.toBase64URLEncodedString()), + response: Field.init(wrappedValue: response), + clientExtensionResults: Field.init(wrappedValue: clientExtensionResults) + ) + } + + @available(iOS 26.0, *) + private func getContactIdentifier( + from identifier: ASContactIdentifier + ) -> AccountCreationContactIdentifierJSON { + switch identifier { + case .email(let email): + return AccountCreationContactIdentifierJSON( + type: Field.init(wrappedValue: "email"), + value: Field.init(wrappedValue: email.value) + ) + case .phoneNumber(let phoneNumber): + return AccountCreationContactIdentifierJSON( + type: Field.init(wrappedValue: "phoneNumber"), + value: Field.init(wrappedValue: phoneNumber.value) + ) + } + } + + @available(iOS 26.0, *) + private func getName( + from name: PersonNameComponents? + ) -> PersonNameComponentsJSON? { + guard let name else { + return nil + } + + return PersonNameComponentsJSON( + namePrefix: Field.init(wrappedValue: name.namePrefix), + givenName: Field.init(wrappedValue: name.givenName), + middleName: Field.init(wrappedValue: name.middleName), + familyName: Field.init(wrappedValue: name.familyName), + nameSuffix: Field.init(wrappedValue: name.nameSuffix), + nickname: Field.init(wrappedValue: name.nickname) + ) + } } diff --git a/ios/PasskeyExceptions.swift b/ios/PasskeyExceptions.swift index 0138931..105bc21 100644 --- a/ios/PasskeyExceptions.swift +++ b/ios/PasskeyExceptions.swift @@ -18,6 +18,12 @@ internal class NotSupportedException: Exception { } } +internal class FastAccountCreationNotSupportedException: Exception { + override var reason: String { + "Fast account creation with passkeys requires iOS 26 or above" + } +} + internal class BiometricException: Exception { override var reason: String { "Biometrics must be enabled" @@ -30,6 +36,18 @@ internal class UserCancelledException: Exception { } } +internal class DeviceNotConfiguredForPasskeyCreationException: Exception { + override var reason: String { + "The device is not configured to create passkeys right now" + } +} + +internal class PreferSignInWithAppleException: Exception { + override var reason: String { + "The user chose to continue with Sign in with Apple instead" + } +} + internal class InvalidChallengeException: Exception { override var reason: String { "The provided challenge was invalid" diff --git a/ios/PasskeyOptions.swift b/ios/PasskeyOptions.swift index a058260..0a6989a 100644 --- a/ios/PasskeyOptions.swift +++ b/ios/PasskeyOptions.swift @@ -58,3 +58,20 @@ internal struct PublicKeyCredentialRequestOptions: Record { @Field var extensions: AuthenticationExtensionsClientInputs? } + +internal struct FastAccountCreationOptions: Record { + @Field + var acceptedContactIdentifiers: [AccountCreationContactIdentifierType] + + @Field + var challenge: Base64URLString + + @Field + var rpId: String + + @Field + var shouldRequestName: Bool? = false + + @Field + var userId: Base64URLString +} diff --git a/ios/PasskeyResponses.swift b/ios/PasskeyResponses.swift index 0fe83bc..d9de0a7 100644 --- a/ios/PasskeyResponses.swift +++ b/ios/PasskeyResponses.swift @@ -3,6 +3,42 @@ import ExpoModulesCore /// Specification reference: https://w3c.github.io/webauthn/#typedefdef-publickeycredentialjson typealias PublicKeyCredentialJSON = Either +internal struct AccountCreationContactIdentifierJSON: Record { + @Field + var type: String + + @Field + var value: String +} + +internal struct PersonNameComponentsJSON: Record { + @Field + var namePrefix: String? + + @Field + var givenName: String? + + @Field + var middleName: String? + + @Field + var familyName: String? + + @Field + var nameSuffix: String? + + @Field + var nickname: String? +} + +internal struct AccountCreationDetailsJSON: Record { + @Field + var contactIdentifier: AccountCreationContactIdentifierJSON + + @Field + var name: PersonNameComponentsJSON? +} + /// Specification reference: https://w3c.github.io/webauthn/#dictdef-registrationresponsejson internal struct RegistrationResponseJSON: Record { @Field @@ -24,6 +60,29 @@ internal struct RegistrationResponseJSON: Record { var type: PublicKeyCredentialType = .publicKey } +internal struct AccountCreationResponseJSON: Record { + @Field + var id: Base64URLString + + @Field + var rawId: Base64URLString + + @Field + var response: AuthenticatorAttestationResponseJSON + + @Field + var account: AccountCreationDetailsJSON + + @Field + var authenticatorAttachment: AuthenticatorAttachment? + + @Field + var clientExtensionResults: AuthenticationExtensionsClientOutputsJSON? + + @Field + var type: PublicKeyCredentialType = .publicKey +} + /// Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticatorattestationresponsejson internal struct AuthenticatorAttestationResponseJSON: Record { diff --git a/ios/ReactNativePasskeysModule.swift b/ios/ReactNativePasskeysModule.swift index 06e9aa9..79791b9 100644 --- a/ios/ReactNativePasskeysModule.swift +++ b/ios/ReactNativePasskeysModule.swift @@ -25,12 +25,18 @@ final public class ReactNativePasskeysModule: Module, PasskeyResultHandler { return false } + Function("isAccountCreationSupported") { () -> Bool in + if #available(iOS 26.0, *) { + return true + } else { + return false + } + } + AsyncFunction("get") { (request: PublicKeyCredentialRequestOptions, promise: Promise) throws in do { - // - all the throws are already in the helper `isAvailable` so we don't need to do anything - // ? this seems like a code smell ... what is the best way to do this - let _ = try isAvailable() + try ensureStandardPasskeysAvailable() } catch let error { throw error } @@ -56,9 +62,7 @@ final public class ReactNativePasskeysModule: Module, PasskeyResultHandler { AsyncFunction("create") { (request: PublicKeyCredentialCreationOptions, promise: Promise) throws in do { - // - all the throws are already in the helper `isAvailable` so we don't need to do anything - // ? this seems like a code smell ... what is the best way to do this - let _ = try isAvailable() + try ensureStandardPasskeysAvailable() } catch let error { throw error } @@ -110,40 +114,104 @@ final public class ReactNativePasskeysModule: Module, PasskeyResultHandler { context.passkeyDelegate.performAuthForController(controller: authController) }.runOnQueue(.main) + AsyncFunction("createAccount") { + (request: FastAccountCreationOptions, promise: Promise) throws in + do { + try ensureFastAccountCreationAvailable() + } catch let error { + throw error + } + + let passkeyDelegate = PasskeyDelegate(handler: self) + let context = PasskeyContext(passkeyDelegate: passkeyDelegate, promise: promise) + + guard let challengeData: Data = Data(base64URLEncoded: request.challenge) else { + throw InvalidChallengeException() + } + + guard let userId: Data = Data(base64URLEncoded: request.userId) else { + throw InvalidUserIdException() + } + + let authController: ASAuthorizationController + + if #available(iOS 26.0, *) { + let provider = ASAuthorizationAccountCreationProvider() + let accountCreationRequest = + provider.createPlatformPublicKeyCredentialRegistrationRequest( + acceptedContactIdentifiers: request.acceptedContactIdentifiers.map({ + $0.appleise() + }), + shouldRequestName: request.shouldRequestName ?? false, + relyingPartyIdentifier: request.rpId, + challenge: challengeData, + userID: userId) + + authController = ASAuthorizationController(authorizationRequests: [ + accountCreationRequest + ]) + } else { + throw FastAccountCreationNotSupportedException() + } + + passkeyContext = context + + context.passkeyDelegate.performAuthForController(controller: authController) + }.runOnQueue(.main) + } - private func isAvailable() throws -> Bool { + private func ensureRequestCanStart() throws { + if passkeyContext != nil { + throw PendingPasskeyRequestException() + } + } + + private func ensureStandardPasskeysAvailable() throws { if #unavailable(iOS 15.0) { throw NotSupportedException() } - if passkeyContext != nil { - throw PendingPasskeyRequestException() - } + try ensureRequestCanStart() if LAContext().biometricType == .none { throw BiometricException() } + } - return true + private func ensureFastAccountCreationAvailable() throws { + if #unavailable(iOS 26.0) { + throw FastAccountCreationNotSupportedException() + } + + try ensureRequestCanStart() } - internal func onSuccess(_ data: PublicKeyCredentialJSON) { + internal func onSuccessRegistration(_ data: RegistrationResponseJSON) { guard let promise = passkeyContext?.promise else { log.error("Passkey context has been lost") return } passkeyContext = nil + promise.resolve(data) + } - if let registrationResult: RegistrationResponseJSON = data.get() { - promise.resolve(registrationResult) + internal func onSuccessAccountCreation(_ data: AccountCreationResponseJSON) { + guard let promise = passkeyContext?.promise else { + log.error("Passkey context has been lost") return } + passkeyContext = nil + promise.resolve(data) + } - if let assertionResult: AuthenticationResponseJSON = data.get() { - promise.resolve(assertionResult) + internal func onSuccessAuthentication(_ data: AuthenticationResponseJSON) { + guard let promise = passkeyContext?.promise else { + log.error("Passkey context has been lost") return } + passkeyContext = nil + promise.resolve(data) } internal func onFailure(_ error: Error) { @@ -431,13 +499,32 @@ private func preparePlatformAssertionRequest( } func handleASAuthorizationError(errorCode: Int, localizedDescription: String = "") -> Exception { + if let code = ASAuthorizationError.Code(rawValue: errorCode) { + switch code { + case .canceled: + return UserCancelledException( + name: "UserCancelledException", description: localizedDescription) + case .failed: + return PasskeyRequestFailedException( + name: "PasskeyRequestFailedException", description: localizedDescription) + default: + if #available(iOS 26.0, *) { + switch code { + case .deviceNotConfiguredForPasskeyCreation: + return DeviceNotConfiguredForPasskeyCreationException( + name: "DeviceNotConfiguredForPasskeyCreationException", + description: localizedDescription) + case .preferSignInWithApple: + return PreferSignInWithAppleException( + name: "PreferSignInWithAppleException", description: localizedDescription) + default: + break + } + } + } + } + switch errorCode { - case 1001: - return UserCancelledException( - name: "UserCancelledException", description: localizedDescription) - case 1004: - return PasskeyRequestFailedException( - name: "PasskeyRequestFailedException", description: localizedDescription) case 4004: return NotConfiguredException( name: "NotConfiguredException", description: localizedDescription) diff --git a/ios/Shared.swift b/ios/Shared.swift index 17d9ef5..23263f3 100644 --- a/ios/Shared.swift +++ b/ios/Shared.swift @@ -114,6 +114,21 @@ internal enum LargeBlobSupport: String, Enumerable { case required } +internal enum AccountCreationContactIdentifierType: String, Enumerable { + case email + case phoneNumber + + @available(iOS 26.0, *) + func appleise() -> ASContactIdentifierRequest { + switch self { + case .email: + return .email + case .phoneNumber: + return .phoneNumber + } + } +} + // - Structs /// Specification reference: https://w3c.github.io/webauthn/#dictionary-authenticatorSelection diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..7339be4 --- /dev/null +++ b/jest.config.js @@ -0,0 +1 @@ +module.exports = require("expo-module-scripts/jest-preset-scripts"); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2fc1529..d0429f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: expo: - specifier: '>=48.0.0' - version: 52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + specifier: '>=53.0.0' + version: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) react: specifier: '*' version: 19.1.0 @@ -48,14 +48,6 @@ importers: packages: - '@0no-co/graphql.web@1.1.2': - resolution: {integrity: sha512-N2NGsU5FLBhT8NZ+3l2YrzZSHITjNXNuDhC4iDiikv0IujaJ0Xc6xIxQZ/Ek3Cb+rgPjnLHYyJm11tInuJn+cw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - peerDependenciesMeta: - graphql: - optional: true - '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -86,6 +78,10 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.29.0': + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.26.8': resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} engines: {node: '>=6.9.0'} @@ -101,10 +97,18 @@ packages: resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.29.1': + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.27.0': resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} engines: {node: '>=6.9.0'} @@ -115,6 +119,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@7.28.6': + resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.27.0': resolution: {integrity: sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==} engines: {node: '>=6.9.0'} @@ -130,10 +140,18 @@ packages: resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} engines: {node: '>=6.9.0'} + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.25.9': resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.9': resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} @@ -148,10 +166,18 @@ packages: resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.26.5': resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.25.9': resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} engines: {node: '>=6.9.0'} @@ -164,18 +190,36 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.9': resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} @@ -197,6 +241,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} engines: {node: '>=6.9.0'} @@ -469,6 +518,12 @@ packages: peerDependencies: '@babel/core': ^7.12.0 + '@babel/plugin-transform-class-static-block@7.28.6': + resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + '@babel/plugin-transform-classes@7.25.9': resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} engines: {node: '>=6.9.0'} @@ -824,14 +879,26 @@ packages: resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} engines: {node: '>=6.9.0'} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.27.0': resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + engines: {node: '>=6.9.0'} + '@babel/types@7.27.0': resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -915,80 +982,154 @@ packages: resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@expo/bunyan@4.0.1': - resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==} - engines: {node: '>=0.10.0'} - - '@expo/cli@0.22.26': - resolution: {integrity: sha512-I689wc8Fn/AX7aUGiwrh3HnssiORMJtR2fpksX+JIe8Cj/EDleblYMSwRPd0025wrwOV9UN1KM/RuEt/QjCS3Q==} + '@expo/cli@55.0.24': + resolution: {integrity: sha512-Z6Xh0WNTg1LvoZQ77zO3snF2cFiv1xf0VguDlwTL1Ql87oMOp30f7mjl9jeaSHqoWkgiAbmxgCKKIGjVX/keiA==} hasBin: true + peerDependencies: + expo: '*' + expo-router: '*' + react-native: '*' + peerDependenciesMeta: + expo-router: + optional: true + react-native: + optional: true - '@expo/code-signing-certificates@0.0.5': - resolution: {integrity: sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==} + '@expo/code-signing-certificates@0.0.6': + resolution: {integrity: sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==} + + '@expo/config-plugins@55.0.8': + resolution: {integrity: sha512-8WfWTRntTCcowfOS+tHdB0z98gKetTwktg4G5TWkCkXVa8Jt1NUnvzaaU4UHk2vbR2U4N84RyZJFizSwfF6C9g==} '@expo/config-plugins@8.0.11': resolution: {integrity: sha512-oALE1HwnLFthrobAcC9ocnR9KXLzfWEjgIe4CPe+rDsfC6GDs8dGYCXfRFoCEzoLN4TGYs9RdZ8r0KoCcNrm2A==} - '@expo/config-plugins@9.0.17': - resolution: {integrity: sha512-m24F1COquwOm7PBl5wRbkT9P9DviCXe0D7S7nQsolfbhdCWuvMkfXeoWmgjtdhy7sDlOyIgBrAdnB6MfsWKqIg==} - '@expo/config-types@51.0.3': resolution: {integrity: sha512-hMfuq++b8VySb+m9uNNrlpbvGxYc8OcFCUX9yTmi9tlx6A4k8SDabWFBgmnr4ao3wEArvWrtUQIfQCVtPRdpKA==} - '@expo/config-types@52.0.5': - resolution: {integrity: sha512-AMDeuDLHXXqd8W+0zSjIt7f37vUd/BP8p43k68NHpyAvQO+z8mbQZm3cNQVAMySeayK2XoPigAFB1JF2NFajaA==} + '@expo/config-types@55.0.5': + resolution: {integrity: sha512-sCmSUZG4mZ/ySXvfyyBdhjivz8Q539X1NondwDdYG7s3SBsk+wsgPJzYsqgAG/P9+l0xWjUD2F+kQ1cAJ6NNLg==} - '@expo/config@10.0.11': - resolution: {integrity: sha512-nociJ4zr/NmbVfMNe9j/+zRlt7wz/siISu7PjdWE4WE+elEGxWWxsGzltdJG0llzrM+khx8qUiFK5aiVcdMBww==} + '@expo/config@55.0.15': + resolution: {integrity: sha512-lHc0ELIQ8126jYOMZpLv3WIuvordW98jFg5aT/J1/12n2ycuXu01XLZkJsdw0avO34cusUYb1It+MvY8JiMduA==} '@expo/config@9.0.4': resolution: {integrity: sha512-g5ns5u1JSKudHYhjo1zaSfkJ/iZIcWmUmIQptMJZ6ag1C0ShL2sj8qdfU8MmAMuKLOgcIfSaiWlQnm4X3VJVkg==} - '@expo/devcert@1.2.0': - resolution: {integrity: sha512-Uilcv3xGELD5t/b0eM4cxBFEKQRIivB3v7i+VhWLV/gL98aw810unLKKJbGAxAIhY6Ipyz8ChWibFsKFXYwstA==} + '@expo/devcert@1.2.1': + resolution: {integrity: sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA==} + + '@expo/devtools@55.0.2': + resolution: {integrity: sha512-4VsFn9MUriocyuhyA+ycJP3TJhUsOFHDc270l9h3LhNpXMf6wvIdGcA0QzXkZtORXmlDybWXRP2KT1k36HcQkA==} + peerDependencies: + react: '*' + react-native: '*' + peerDependenciesMeta: + react: + optional: true + react-native: + optional: true + + '@expo/dom-webview@55.0.5': + resolution: {integrity: sha512-lt3uxYOCk3wmWvtOOvsC35CKGbDAOx5C2EaY8SH1JVSfBzqmF8Cs0Xp1MPxncDPMyxpMiWx5SvvV/iLF1rJU4A==} + peerDependencies: + expo: '*' + react: '*' + react-native: '*' - '@expo/env@0.4.2': - resolution: {integrity: sha512-TgbCgvSk0Kq0e2fLoqHwEBL4M0ztFjnBEz0YCDm5boc1nvkV1VMuIMteVdeBwnTh8Z0oPJTwHCD49vhMEt1I6A==} + '@expo/env@2.1.1': + resolution: {integrity: sha512-rVvHC4I6xlPcg+mAO09ydUi2Wjv1ZytpLmHOSzvXzBAz9mMrJggqCe4s4dubjJvi/Ino/xQCLhbaLCnTtLpikg==} + engines: {node: '>=20.12.0'} - '@expo/fingerprint@0.11.11': - resolution: {integrity: sha512-gNyn1KnAOpEa8gSNsYqXMTcq0fSwqU/vit6fP5863vLSKxHm/dNt/gm/uZJxrRZxKq71KUJWF6I7d3z8qIfq5g==} + '@expo/fingerprint@0.16.6': + resolution: {integrity: sha512-nRITNbnu3RKSHPvKVehrSU4KG2VY9V8nvULOHBw98ukHCAU4bGrU5APvcblOkX3JAap+xEHsg/mZvqlvkLInmQ==} hasBin: true - '@expo/image-utils@0.6.5': - resolution: {integrity: sha512-RsS/1CwJYzccvlprYktD42KjyfWZECH6PPIEowvoSmXfGLfdViwcUEI4RvBfKX5Jli6P67H+6YmHvPTbGOboew==} + '@expo/image-utils@0.8.13': + resolution: {integrity: sha512-1I//yBQeTY6p0u1ihqGNDAr35EbSG8uFEupFrIF0jd++h9EWH33521yZJU1yE+mwGlzCb61g3ehu78siMhXBlA==} + + '@expo/json-file@10.0.13': + resolution: {integrity: sha512-pX/XjQn7tgNw6zuuV2ikmegmwe/S7uiwhrs2wXrANMkq7ozrA+JcZwgW9Q/8WZgciBzfAhNp5hnackHcrmapQA==} '@expo/json-file@8.3.3': resolution: {integrity: sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==} - '@expo/json-file@9.0.2': - resolution: {integrity: sha512-yAznIUrybOIWp3Uax7yRflB0xsEpvIwIEqIjao9SGi2Gaa+N0OamWfe0fnXBSWF+2zzF4VvqwT4W5zwelchfgw==} + '@expo/local-build-cache-provider@55.0.11': + resolution: {integrity: sha512-rJ4RTCrkeKaXaido/bVyhl90ZRtVTOEbj59F1PWVjIEIVgjdlfc1J3VD9v7hEsbf/+8Tbr/PgvWhT6Visi5sLQ==} + + '@expo/log-box@55.0.10': + resolution: {integrity: sha512-7jdikExgIrCIF5e3P1qMwcUZ2tcxrNdVqE9Y8kNMUHqZ+ipMlin+SiZwJKHM1+am4CYGjhdyrzbnIpvEcLDYcg==} + peerDependencies: + '@expo/dom-webview': ^55.0.5 + expo: '*' + react: '*' + react-native: '*' + + '@expo/metro-config@55.0.16': + resolution: {integrity: sha512-JaWDw0dmYZ5pOqA+3/Efvl8JzCVgWQVPogHFjTRC5azUgAsFV+T7moOaZTSgg4d+5TjFZjZbMZg4SUomE7LiGg==} + peerDependencies: + expo: '*' + peerDependenciesMeta: + expo: + optional: true - '@expo/metro-config@0.19.12': - resolution: {integrity: sha512-fhT3x1ikQWHpZgw7VrEghBdscFPz1laRYa8WcVRB18nTTqorF6S8qPYslkJu1faEziHZS7c2uyDzTYnrg/CKbg==} + '@expo/metro@55.0.0': + resolution: {integrity: sha512-wohGl+4y17rGHU+lq8UqC5neOXL/HOThorDYXTMbOcBL1jYwcK11MBc151gDMpjpgdVUzgHne0H5RfCIhIN4hA==} '@expo/npm-proofread@1.0.1': resolution: {integrity: sha512-yDyBlNIgg+rKoKCOVM9ZyAtgqRx6gHw+JtmZTrYYW4auAfwS6kE/iInmCpVXPqRy0OhJHgXj6q5PCgWELLVMeg==} hasBin: true - '@expo/osascript@2.1.6': - resolution: {integrity: sha512-SbMp4BUwDAKiFF4zZEJf32rRYMeNnLK9u4FaPo0lQRer60F+SKd20NTSys0wgssiVeQyQz2OhGLRx3cxYowAGw==} + '@expo/osascript@2.4.2': + resolution: {integrity: sha512-/XP7PSYF2hzOZzqfjgkoWtllyeTN8dW3aM4P6YgKcmmPikKL5FdoyQhti4eh6RK5a5VrUXJTOlTNIpIHsfB5Iw==} engines: {node: '>=12'} - '@expo/package-manager@1.7.2': - resolution: {integrity: sha512-wT/qh9ebNjl6xr00bYkSh93b6E/78J3JPlT6WzGbxbsnv5FIZKB/nr522oWqVe1E+ML7BpXs8WugErWDN9kOFg==} + '@expo/package-manager@1.10.4': + resolution: {integrity: sha512-y9Mr4Kmpk4abAVZrNNPCdzOZr8nLLyi18p1SXr0RCVA8IfzqZX/eY4H+50a0HTmXqIsPZrQdcdb4I3ekMS9GvQ==} '@expo/plist@0.1.3': resolution: {integrity: sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==} - '@expo/plist@0.2.2': - resolution: {integrity: sha512-ZZGvTO6vEWq02UAPs3LIdja+HRO18+LRI5QuDl6Hs3Ps7KX7xU6Y6kjahWKY37Rx2YjNpX07dGpBFzzC+vKa2g==} + '@expo/plist@0.5.2': + resolution: {integrity: sha512-o4xdVdBpe4aTl3sPMZ2u3fJH4iG1I768EIRk1xRZP+GaFI93MaR3JvoFibYqxeTmLQ1p1kNEVqylfUjezxx45g==} - '@expo/prebuild-config@8.2.0': - resolution: {integrity: sha512-CxiPpd980s0jyxi7eyN3i/7YKu3XL+8qPjBZUCYtc0+axpGweqIkq2CslyLSKHyqVyH/zlPkbVgWdyiYavFS5Q==} + '@expo/prebuild-config@55.0.15': + resolution: {integrity: sha512-UcCzVhVBE42UbY5U3t/q1Rk2fSFW/B50LJpB6oFpXhImJfvLKu7ayOFU9XcHd38K89i4GqSia/xXuxQvu4RUBg==} + peerDependencies: + expo: '*' - '@expo/rudder-sdk-node@1.1.1': - resolution: {integrity: sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==} - engines: {node: '>=12'} + '@expo/require-utils@55.0.4': + resolution: {integrity: sha512-JAANvXqV7MOysWeVWgaiDzikoyDjJWOV/ulOW60Zb3kXJfrx2oZOtGtDXDFKD1mXuahQgoM5QOjuZhF7gFRNjA==} + peerDependencies: + typescript: ^5.0.0 || ^5.0.0-0 + peerDependenciesMeta: + typescript: + optional: true + + '@expo/router-server@55.0.14': + resolution: {integrity: sha512-YJjbeLMLp+ZjCnajHI+jEppNzXY372K0u4I4fLKGnA/loFX14aouDsg4tqZVGlZx6NUpnN8Bb3Tmw2BLTXT5Qw==} + peerDependencies: + '@expo/metro-runtime': ^55.0.9 + expo: '*' + expo-constants: ^55.0.13 + expo-font: ^55.0.6 + expo-router: '*' + expo-server: ^55.0.7 + react: '*' + react-dom: '*' + react-server-dom-webpack: ~19.0.1 || ~19.1.2 || ~19.2.1 + peerDependenciesMeta: + '@expo/metro-runtime': + optional: true + expo-router: + optional: true + react-dom: + optional: true + react-server-dom-webpack: + optional: true + + '@expo/schema-utils@55.0.3': + resolution: {integrity: sha512-l9KHVjTo6MvoeyvwNr6AjckGJm8NIcqZ3QSAh51cWozXW9v2AUjyCyqYtFtyntLWRZ0x/ByYJishpQo4ZQq45Q==} '@expo/sdk-runtime-versions@1.0.0': resolution: {integrity: sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==} @@ -1000,18 +1141,18 @@ packages: '@expo/sudo-prompt@9.3.2': resolution: {integrity: sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==} - '@expo/vector-icons@14.1.0': - resolution: {integrity: sha512-7T09UE9h8QDTsUeMGymB4i+iqvtEeaO5VvUjryFB4tugDTG/bkzViWA74hm5pfjjDEhYMXWaX112mcvhccmIwQ==} + '@expo/vector-icons@15.1.1': + resolution: {integrity: sha512-Iu2VkcoI5vygbtYngm7jb4ifxElNVXQYdDrYkT7UCEIiKLeWnQY0wf2ZhHZ+Wro6Sc5TaumpKUOqDRpLi5rkvw==} peerDependencies: - expo-font: '*' + expo-font: '>=14.0.4' react: '*' react-native: '*' '@expo/ws-tunnel@1.0.6': resolution: {integrity: sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==} - '@expo/xcpretty@4.3.2': - resolution: {integrity: sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==} + '@expo/xcpretty@4.4.3': + resolution: {integrity: sha512-wC562eD3gS6vO2tWHToFhlFnmHKfKHgF1oyvojeSkLK/ZYop1bMU+7cOMiF9Sq70CzcsLy/EMRy/uRc76QmNRw==} hasBin: true '@humanwhocodes/config-array@0.13.0': @@ -1027,10 +1168,6 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - '@isaacs/ttlcache@1.4.1': resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} engines: {node: '>=12'} @@ -1117,6 +1254,9 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -1138,6 +1278,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@loaderkit/resolve@1.0.4': resolution: {integrity: sha512-rJzYKVcV4dxJv+vW6jlvagF8zvGxHJ2+HTr1e2qOejfmGhAApgJHl8Aog4mMszxceTRiKTTbnpgmTO1bEZHV/A==} @@ -1162,10 +1305,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@npmcli/fs@3.1.1': - resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@oxfmt/binding-android-arm-eabi@0.45.0': resolution: {integrity: sha512-A/UMxFob1fefCuMeGxQBulGfFE38g2Gm23ynr3u6b+b7fY7/ajGbNsa3ikMIkGMLJW/TRoQaMoP1kME7S+815w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1213,56 +1352,48 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] '@oxfmt/binding-linux-arm64-musl@0.45.0': resolution: {integrity: sha512-XQKXZIKYJC3GQJ8FnD3iMntpw69Wd9kDDK/Xt79p6xnFYlGGxSNv2vIBvRTDg5CKByWFWWZLCRDOXoP/m6YN4g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] '@oxfmt/binding-linux-ppc64-gnu@0.45.0': resolution: {integrity: sha512-+g5RiG+xOkdrCWkKodv407nTvMq4vYM18Uox2MhZBm/YoqFxxJpWKsloskFFG5NU13HGPw1wzYjjOVcyd9moCA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@oxfmt/binding-linux-riscv64-gnu@0.45.0': resolution: {integrity: sha512-V7dXKoSyEbWAkkSF4JJNtF+NJZDmJoSarSoP30WCsB3X636Rehd3CvxBj49FIJxEBFWhvcUjGSHVeU8Erck1bQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [glibc] '@oxfmt/binding-linux-riscv64-musl@0.45.0': resolution: {integrity: sha512-Vdelft1sAEYojVGgcODEFXSWYQYlIvoyIGWebKCuUibd1tvS1TjTx413xG2ZLuHpYj45CkN/ztMLMX6jrgqpgg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [musl] '@oxfmt/binding-linux-s390x-gnu@0.45.0': resolution: {integrity: sha512-RR7xKgNpqwENnK0aYCGYg0JycY2n93J0reNjHyes+I9Gq52dH95x+CBlnlAQHCPfz6FGnKA9HirgUl14WO6o7w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - libc: [glibc] '@oxfmt/binding-linux-x64-gnu@0.45.0': resolution: {integrity: sha512-U/QQ0+BQNSHxjuXR/utvXnQ50Vu5kUuqEomZvQ1/3mhgbBiMc2WU9q5kZ5WwLp3gnFIx9ibkveoRSe2EZubkqg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] '@oxfmt/binding-linux-x64-musl@0.45.0': resolution: {integrity: sha512-o5TLOUCF0RWQjsIS06yVC+kFgp092/yLe6qBGSUvtnmTVw9gxjpdQSXc3VN5Cnive4K11HNstEZF8ROKHfDFSw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] '@oxfmt/binding-openharmony-arm64@0.45.0': resolution: {integrity: sha512-RnGcV3HgPuOjsGx/k9oyRNKmOp+NBLGzZTdPDYbc19r7NGeYPplnUU/BfU35bX2Y/O4ejvHxcfkvW2WoYL/gsg==} @@ -1335,56 +1466,48 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] '@oxlint/binding-linux-arm64-musl@1.60.0': resolution: {integrity: sha512-eDYDXZGhQAXyn6GwtwiX/qcLS0HlOLPJ/+iiIY8RYr+3P8oKBmgKxADLlniL6FtWfE7pPk7IGN9/xvDEvDvFeg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] '@oxlint/binding-linux-ppc64-gnu@1.60.0': resolution: {integrity: sha512-nxehly5XYBHUWI9VJX1bqCf9j/B43DaK/aS/T1fcxCpX3PA4Rm9BB54nPD1CKayT8xg6REN1ao+01hSRNgy8OA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@oxlint/binding-linux-riscv64-gnu@1.60.0': resolution: {integrity: sha512-j1qf/NaUfOWQutjeoooNG1Q0zsK0XGmSu1uDLq3cctquRF3j7t9Hxqf/76ehCc5GEUAanth2W4Fa+XT1RFg/nw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [glibc] '@oxlint/binding-linux-riscv64-musl@1.60.0': resolution: {integrity: sha512-YELKPRefQ/q/h3RUmeRfPCUhh2wBvgV1RyZ/F9M9u8cDyXsQW2ojv1DeWQTt466yczDITjZnIOg/s05pk7Ve2A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [musl] '@oxlint/binding-linux-s390x-gnu@1.60.0': resolution: {integrity: sha512-JkO3C6Gki7Y6h/MiIkFKvHFOz98/YWvQ4WYbK9DLXACMP2rjULzkeGyAzorJE5S1dzLQGFgeqvN779kSFwoV1g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - libc: [glibc] '@oxlint/binding-linux-x64-gnu@1.60.0': resolution: {integrity: sha512-XjKHdFVCpZZZSWBCKyyqCq65s2AKXykMXkjLoKYODrD+f5toLhlwsMESscu8FbgnJQ4Y/dpR/zdazsahmgBJIA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] '@oxlint/binding-linux-x64-musl@1.60.0': resolution: {integrity: sha512-js29ZWIuPhNWzY8NC7KoffEMEeWG105vbmm+8EOJsC+T/jHBiKIJEUF78+F/IrgEWMMP9N0kRND4Pp75+xAhKg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] '@oxlint/binding-openharmony-arm64@1.60.0': resolution: {integrity: sha512-H+PUITKHk04stFpWj3x3Kg08Afp/bcXSBi0EhasR5a0Vw7StXHTzdl655PUI0fB4qdh2Wsu6Dsi+3ACxPoyQnA==} @@ -1410,10 +1533,6 @@ packages: cpu: [x64] os: [win32] - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - '@pkgr/core@0.2.4': resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -1426,9 +1545,9 @@ packages: resolution: {integrity: sha512-+vJYpMnENFrwtgvDfUj+CtVJRJuUnzAUYT0/Pb68Sq9RfcZ5xdcCuUgyf7JO+akW2VTBoJY427wkcxU30qrWWw==} engines: {node: '>=18'} - '@react-native/babel-plugin-codegen@0.76.9': - resolution: {integrity: sha512-vxL/vtDEIYHfWKm5oTaEmwcnNGsua/i9OjIxBDBFiJDu5i5RU3bpmDiXQm/bJxrJNPRp5lW0I0kpGihVhnMAIQ==} - engines: {node: '>=18'} + '@react-native/babel-plugin-codegen@0.83.4': + resolution: {integrity: sha512-UFsK+c1rvT84XZfzpmwKePsc5nTr5LK7hh18TI0DooNlVcztDbMDsQZpDnhO/gmk7aTbWEqO5AB3HJ7tvGp+Jg==} + engines: {node: '>= 20.19.4'} '@react-native/babel-preset@0.74.87': resolution: {integrity: sha512-hyKpfqzN2nxZmYYJ0tQIHG99FQO0OWXp/gVggAfEUgiT+yNKas1C60LuofUsK7cd+2o9jrpqgqW4WzEDZoBlTg==} @@ -1436,9 +1555,9 @@ packages: peerDependencies: '@babel/core': '*' - '@react-native/babel-preset@0.76.9': - resolution: {integrity: sha512-TbSeCplCM6WhL3hR2MjC/E1a9cRnMLz7i767T7mP90oWkklEjyPxWl+0GGoVGnJ8FC/jLUupg/HvREKjjif6lw==} - engines: {node: '>=18'} + '@react-native/babel-preset@0.83.4': + resolution: {integrity: sha512-SXPFn3Jp4gOzlBDnDOKPzMfxQPKJMYJs05EmEeFB/6km46xZ9l+2YKXwAwxfNhHnmwNf98U/bnVndU95I0TMCw==} + engines: {node: '>= 20.19.4'} peerDependencies: '@babel/core': '*' @@ -1448,18 +1567,18 @@ packages: peerDependencies: '@babel/preset-env': ^7.1.6 - '@react-native/codegen@0.76.9': - resolution: {integrity: sha512-AzlCHMTKrAVC2709V4ZGtBXmGVtWTpWm3Ruv5vXcd3/anH4mGucfJ4rjbWKdaYQJMpXa3ytGomQrsIsT/s8kgA==} - engines: {node: '>=18'} - peerDependencies: - '@babel/preset-env': ^7.1.6 - '@react-native/codegen@0.79.1': resolution: {integrity: sha512-cTVXfCICkmUU6UvUpnLP4BE82O14JRuVz42cg/A19oasTaZmzHl0+uIDzt2cZEbt/N2sJ/EZnZL61qqpwbNXWQ==} engines: {node: '>=18'} peerDependencies: '@babel/core': '*' + '@react-native/codegen@0.83.4': + resolution: {integrity: sha512-CJ7XutzIqJPz3Lp/5TOiRWlU/JAjTboMT1BHNLSXjYHXwTmgHM3iGEbpCOtBMjWvsojRTJyRO/G3ghInIIXEYg==} + engines: {node: '>= 20.19.4'} + peerDependencies: + '@babel/core': '*' + '@react-native/community-cli-plugin@0.79.1': resolution: {integrity: sha512-hqCMQrMRi19G7yxEsYwV9A0MHB6Hri7B5dytRD7kU5vtz0Lzg1fZYYvmS0x9OdWJWPntmHA8xiijwM+4cT8cpQ==} engines: {node: '>=18'} @@ -1469,22 +1588,26 @@ packages: '@react-native-community/cli': optional: true - '@react-native/debugger-frontend@0.76.9': - resolution: {integrity: sha512-0Ru72Bm066xmxFuOXhhvrryxvb57uI79yDSFf+hxRpktkC98NMuRenlJhslMrbJ6WjCu1vOe/9UjWNYyxXTRTA==} - engines: {node: '>=18'} - '@react-native/debugger-frontend@0.79.1': resolution: {integrity: sha512-IgbQM/djzBhkkjzIT/b36zwkc4UMxZLTKgRVJrSEjuwtOPmgfh/1F5m3OUitbMd4/e06VgN0vPLyBzToj1kiwA==} engines: {node: '>=18'} - '@react-native/dev-middleware@0.76.9': - resolution: {integrity: sha512-xkd3C3dRcmZLjFTEAOvC14q3apMLouIvJViCZY/p1EfCMrNND31dgE1dYrLTiI045WAWMt5bD15i6f7dE2/QWA==} - engines: {node: '>=18'} + '@react-native/debugger-frontend@0.83.4': + resolution: {integrity: sha512-mCE2s/S7SEjax3gZb6LFAraAI3x13gRVWJWqT0HIm71e4ITObENNTDuMw4mvZ/wr4Gz2wv4FcBH5/Nla9LXOcg==} + engines: {node: '>= 20.19.4'} + + '@react-native/debugger-shell@0.83.4': + resolution: {integrity: sha512-FtAnrvXqy1xeZ+onwilvxEeeBsvBlhtfrHVIC2R/BOJAK9TbKEtFfjio0wsn3DQIm+UZq48DSa+p9jJZ2aJUww==} + engines: {node: '>= 20.19.4'} '@react-native/dev-middleware@0.79.1': resolution: {integrity: sha512-xegUHwi6h8wOLIl/9ImZoIVVwzecE+ENGTELIrD2PsseBbtdRMKzZ8A1LTBjPPt3IjHPH6103JcSPwgepP6zFA==} engines: {node: '>=18'} + '@react-native/dev-middleware@0.83.4': + resolution: {integrity: sha512-3s9nXZc/kj986nI2RPqxiIJeTS3o7pvZDxbHu7GE9WVIGX9YucA1l/tEiXd7BAm3TBFOfefDOT08xD46wH+R3Q==} + engines: {node: '>= 20.19.4'} + '@react-native/gradle-plugin@0.79.1': resolution: {integrity: sha512-vfoNcOBig/+R7g3eqHkBSbSVkk0NMPzyXE5QY0V+/0flRa3kDZUHP2fr8ygoY/4rxbi05wPME2/dTEuoYcpnjg==} engines: {node: '>=18'} @@ -1493,12 +1616,12 @@ packages: resolution: {integrity: sha512-P8j11kdD+ehL5jqHSCM1BOl4SnJ+3rvGPpsagAqyngU6WSausISO7YFufltrWA7kdpHdnAL2HfJJ62szTRGShw==} engines: {node: '>=18'} - '@react-native/normalize-colors@0.76.9': - resolution: {integrity: sha512-TUdMG2JGk72M9d8DYbubdOlrzTYjw+YMe/xOnLU4viDgWRHsCbtRS9x0IAxRjs3amj/7zmK3Atm8jUPvdAc8qw==} - '@react-native/normalize-colors@0.79.1': resolution: {integrity: sha512-Fj12xKyihZhrFH45ruqECd2JVx9lyYe+dyxO7MYgkqY6UENsSS3JKcfzjSNBZLW7NXts6JkbaqLQPwaHmPF7QA==} + '@react-native/normalize-colors@0.83.4': + resolution: {integrity: sha512-9ezxaHjxqTkTOLg62SGg7YhFaE+fxa/jlrWP0nwf7eGFHlGOiTAaRR2KUfiN3K05e+EMbEhgcH/c7bgaXeGyJw==} + '@react-native/virtualized-lists@0.79.1': resolution: {integrity: sha512-v1KeqJeVJXjc2mewjKQYSay7D7+VSacxryejuuVXlPE9E9wVbzMPCfPjbIS8C9nMC7a4rsRFilX7RVKYkeZaGg==} engines: {node: '>=18'} @@ -1513,9 +1636,6 @@ packages: '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@segment/loosely-validate-event@2.0.0': - resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==} - '@simplewebauthn/typescript-types@8.3.4': resolution: {integrity: sha512-38xtca0OqfRVNloKBrFB5LEM6PN5vzFbJG6rAutPVrtGHFYxPdiV3btYWq0eAZAZmP+dqFPYJxJWeJrGfmYHng==} deprecated: This package has been renamed to @simplewebauthn/types. Please install @simplewebauthn/types instead to ensure you receive future updates. @@ -1592,9 +1712,6 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node-forge@1.3.11': - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} @@ -1694,22 +1811,15 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@urql/core@5.1.1': - resolution: {integrity: sha512-aGh024z5v2oINGD/In6rAtVKTm4VmQ2TxKQBAtk2ZSME5dunZFcjltw4p5ENQg+5CBhZ3FHMzl0Oa+rwqiWqlg==} - - '@urql/exchange-retry@1.3.1': - resolution: {integrity: sha512-EEmtFu8JTuwsInqMakhLq+U3qN8ZMd5V3pX44q0EqD2imqTDsa8ikZqJ1schVrN8HljOdN+C08cwZ1/r5uIgLw==} - peerDependencies: - '@urql/core': ^5.0.0 - '@xmldom/xmldom@0.7.13': resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} engines: {node: '>=10.0.0'} - deprecated: this version is no longer supported, please update to at least 0.8.* + deprecated: this version has critical issues, please update to the latest version '@xmldom/xmldom@0.8.10': resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} + deprecated: this version has critical issues, please update to the latest version abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} @@ -1723,6 +1833,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} @@ -1744,9 +1858,9 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -1794,10 +1908,6 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -1867,10 +1977,6 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -1915,12 +2021,24 @@ packages: babel-plugin-react-compiler@0.0.0-experimental-592953e-20240517: resolution: {integrity: sha512-OjG1SVaeQZaJrqkMFJatg8W/MTow8Ak5rx2SI0ETQBO1XvOk/XZGMbltNCPdFJLKghBYoBjC+Y3Ap/Xr7B01mA==} + babel-plugin-react-compiler@1.0.0: + resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==} + babel-plugin-react-native-web@0.19.13: resolution: {integrity: sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==} + babel-plugin-react-native-web@0.21.2: + resolution: {integrity: sha512-SPD0J6qjJn8231i0HZhlAGH6NORe+QvRSQM2mwQEzJ2Fb3E4ruWTiiicPlHjmeWShDXLcvoorOCXjeR7k/lyWA==} + babel-plugin-syntax-hermes-parser@0.25.1: resolution: {integrity: sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==} + babel-plugin-syntax-hermes-parser@0.32.0: + resolution: {integrity: sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==} + + babel-plugin-syntax-hermes-parser@0.32.1: + resolution: {integrity: sha512-HgErPZTghW76Rkq9uqn5ESeiD97FbqpZ1V170T1RG2RDp+7pJVQV2pQJs7y5YzN0/gcT6GM5ci9apRnIwuyPdQ==} + babel-plugin-transform-flow-enums@0.0.2: resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} @@ -1932,15 +2050,19 @@ packages: babel-preset-expo@11.0.15: resolution: {integrity: sha512-rgiMTYwqIPULaO7iZdqyL7aAff9QLOX6OWUtLZBlOrOTreGY1yHah/5+l8MvI6NVc/8Zj5LY4Y5uMSnJIuzTLw==} - babel-preset-expo@12.0.11: - resolution: {integrity: sha512-4m6D92nKEieg+7DXa8uSvpr0GjfuRfM/G0t0I/Q5hF8HleEv5ms3z4dJ+p52qXSJsm760tMqLdO93Ywuoi7cCQ==} + babel-preset-expo@55.0.17: + resolution: {integrity: sha512-voPAKycqeqOE+4g/nW6gGaNPMnj3MYCYbVEZlZDUlztGVxlKKkUD+xwlK0ZU/uy6HxAY+tjBEpvsabD5g6b2oQ==} peerDependencies: - babel-plugin-react-compiler: ^19.0.0-beta-9ee70a1-20241017 - react-compiler-runtime: ^19.0.0-beta-8a03594-20241020 + '@babel/runtime': ^7.20.0 + expo: '*' + expo-widgets: ^55.0.13 + react-refresh: '>=0.14.0 <1.0.0' peerDependenciesMeta: - babel-plugin-react-compiler: + '@babel/runtime': + optional: true + expo: optional: true - react-compiler-runtime: + expo-widgets: optional: true babel-preset-jest@29.6.3: @@ -1952,9 +2074,18 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.10.20: + resolution: {integrity: sha512-1AaXxEPfXT+GvTBJFuy4yXVHWJBXa4OdbIebGN/wX5DlsIkU0+wzGnd2lOzokSk51d5LUmqjgBLRLlypLUqInQ==} + engines: {node: '>=6.0.0'} + hasBin: true + better-opn@3.0.2: resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} engines: {node: '>=12.0.0'} @@ -1971,9 +2102,6 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bplist-creator@0.0.7: - resolution: {integrity: sha512-xp/tcaV3T5PCiaY04mXga7o/TE+t95gqeLmADeBI1CvZtdWTbgBt3uLpvh4UWtenKeBhCV6oVxGk38yZr2uYEA==} - bplist-creator@0.1.0: resolution: {integrity: sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==} @@ -1991,6 +2119,10 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -2000,6 +2132,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -2007,29 +2144,13 @@ packages: bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - buffer-alloc-unsafe@1.1.0: - resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} - - buffer-alloc@1.2.0: - resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} - - buffer-fill@1.0.0: - resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} - buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cacache@18.0.4: - resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} - engines: {node: ^16.14.0 || >=18.0.0} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -2069,6 +2190,9 @@ packages: caniuse-lite@1.0.30001715: resolution: {integrity: sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==} + caniuse-lite@1.0.30001788: + resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -2096,17 +2220,10 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - charenc@0.0.2: - resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - chrome-launcher@0.15.2: resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} engines: {node: '>=12.13.0'} @@ -2125,10 +2242,6 @@ packages: cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - cli-cursor@2.1.0: resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} engines: {node: '>=4'} @@ -2211,9 +2324,6 @@ packages: commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - component-type@1.2.2: - resolution: {integrity: sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==} - compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -2244,24 +2354,10 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true - cross-fetch@3.2.0: - resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} - - cross-spawn@6.0.6: - resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} - engines: {node: '>=4.8'} - cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - crypt@0.0.2: - resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} - - crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} @@ -2327,10 +2423,6 @@ packages: babel-plugin-macros: optional: true - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -2338,10 +2430,6 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - default-gateway@4.2.0: - resolution: {integrity: sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==} - engines: {node: '>=6'} - defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -2357,10 +2445,6 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - del@6.1.1: - resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} - engines: {node: '>=10'} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2377,10 +2461,9 @@ packages: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} - detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} @@ -2394,6 +2477,9 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dnssd-advertise@1.1.4: + resolution: {integrity: sha512-AmGyK9WpNf06WeP5TjHZq/wNzP76OuEeaiTlKr9E/EEelYLczywUKoqRz+DPRq/ErssjT4lU+/W7wzJW+7K/ZA==} + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -2407,27 +2493,19 @@ packages: engines: {node: '>=12'} deprecated: Use your platform's native DOMException instead - dotenv-expand@11.0.7: - resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} - engines: {node: '>=12'} - - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} - engines: {node: '>=12'} - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} electron-to-chromium@1.5.143: resolution: {integrity: sha512-QqklJMOFBMqe46k8iIOwA9l2hz57V2OKMmP5eSWcUvwx+mASAsbU+wkF1pHjn9ZVSBPrsYWr4/W/95y5SwYg2g==} + electron-to-chromium@1.5.340: + resolution: {integrity: sha512-908qahOGocRMinT2nM3ajCEM99H4iPdv84eagPP3FfZy/1ZGeOy2CZYzjhms81ckOPCXPlW7LkY4XpxD8r1DrA==} + emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} @@ -2435,9 +2513,6 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - emojilib@2.4.0: resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} @@ -2449,9 +2524,6 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -2460,10 +2532,6 @@ packages: resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} engines: {node: '>=0.12'} - env-editor@0.4.2: - resolution: {integrity: sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==} - engines: {node: '>=8'} - environment@1.1.0: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} @@ -2672,13 +2740,6 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - exec-async@2.2.0: - resolution: {integrity: sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==} - - execa@1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} - engines: {node: '>=6'} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2691,33 +2752,34 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - expo-asset@11.0.5: - resolution: {integrity: sha512-TL60LmMBGVzs3NQcO8ylWqBumMh4sx0lmeJsn7+9C88fylGDhyyVnKZ1PyTXo9CVDBkndutZx2JUEQWM9BaiXw==} + expo-asset@55.0.15: + resolution: {integrity: sha512-d3FIpHJ6ZngYXxRItYWBGT5H8Wkk7/l4fMe8Mmd2xDyKrO0/CM7c8r/J5M71D+BJr5P3My8wertGYZXHSiZYxQ==} peerDependencies: expo: '*' react: '*' react-native: '*' - expo-constants@17.0.8: - resolution: {integrity: sha512-XfWRyQAf1yUNgWZ1TnE8pFBMqGmFP5Gb+SFSgszxDdOoheB/NI5D4p7q86kI2fvGyfTrxAe+D+74nZkfsGvUlg==} + expo-constants@55.0.14: + resolution: {integrity: sha512-l23QVQCYBPKT5zbxxZdJeuhiunadvWdjcQ9+GC8h+02jCoLmWRk20064nCINnQTP3Hf+uLPteUiwYrJd0e446w==} peerDependencies: expo: '*' react-native: '*' - expo-file-system@18.0.12: - resolution: {integrity: sha512-HAkrd/mb8r+G3lJ9MzmGeuW2B+BxQR1joKfeCyY4deLl1zoZ48FrAWjgZjHK9aHUVhJ0ehzInu/NQtikKytaeg==} + expo-file-system@55.0.16: + resolution: {integrity: sha512-EetQ/zVFK07Vmz4Yke0fvoES4xVwScTdd0PMoLekuMX7puE4op75pNnEdh1M0AeWzkqLrBoZIaU2ynSrKN5VZg==} peerDependencies: expo: '*' react-native: '*' - expo-font@13.0.4: - resolution: {integrity: sha512-eAP5hyBgC8gafFtprsz0HMaB795qZfgJWqTmU0NfbSin1wUuVySFMEPMOrTkTgmazU73v4Cb4x7p86jY1XXYUw==} + expo-font@55.0.6: + resolution: {integrity: sha512-x9czUA3UQWjIwa0ZUEs/eWJNqB4mAue/m4ltESlNPLZhHL0nWWqIfsyHmklTLFH7mVfcHSJvew6k+pR2FE1zVw==} peerDependencies: expo: '*' react: '*' + react-native: '*' - expo-keep-awake@14.0.3: - resolution: {integrity: sha512-6Jh94G6NvTZfuLnm2vwIpKe3GdOiVBuISl7FI8GqN0/9UOg9E0WXXp5cDcfAG8bn80RfgLJS8P7EPUGTZyOvhg==} + expo-keep-awake@55.0.6: + resolution: {integrity: sha512-acJjeHqkNxMVckEcJhGQeIksqqsarscSHJtT559bNgyiM4r14dViQ66su7bb6qDVeBt0K7z3glXI1dHVck1Zgg==} peerDependencies: expo: '*' react: '*' @@ -2726,18 +2788,29 @@ packages: resolution: {integrity: sha512-grEDrWiUyB5X1F5slHu7lUEbU7sDj1CbokUmKezTt/Zbz34xQFwCuHQlmv4Tl2LPyjJVHZls3VnEytfJ+5yYUw==} hasBin: true - expo-modules-autolinking@2.0.8: - resolution: {integrity: sha512-DezgnEYFQYic8hKGhkbztBA3QUmSftjaNDIKNAtS2iGJmzCcNIkatjN2slFDSWjSTNo8gOvPQyMKfyHWFvLpOQ==} + expo-modules-autolinking@55.0.17: + resolution: {integrity: sha512-VhlEVGnP+xBjfSKDKNN7GAPKN2whIfV08jsZvNj7UGyJWpZYiO6Emx1FLP5xd1+JZVpIrt/kxR641kdcPo7Ehw==} hasBin: true expo-modules-core@1.12.26: resolution: {integrity: sha512-y8yDWjOi+rQRdO+HY+LnUlz8qzHerUaw/LUjKPU/mX8PRXP4UUPEEp5fjAwBU44xjNmYSHWZDwet4IBBE+yQUA==} - expo-modules-core@2.2.3: - resolution: {integrity: sha512-01QqZzpP/wWlxnNly4G06MsOBUTbMDj02DQigZoXfDh80vd/rk3/uVXqnZgOdLSggTs6DnvOgAUy0H2q30XdUg==} + expo-modules-core@55.0.22: + resolution: {integrity: sha512-NC5GyvCHvnOvi5MtgLv68oUSrRP/0UORGzU/MX+7BIA8ctgBPxKSjPXPSfhwk3gMzj7eHBhYwlu0HJsIEnVd9A==} + peerDependencies: + react: '*' + react-native: '*' + react-native-worklets: ^0.7.4 || ^0.8.0 + peerDependenciesMeta: + react-native-worklets: + optional: true + + expo-server@55.0.7: + resolution: {integrity: sha512-Cc1btFyPsD9P4DT2xd1pG/uR96TLVMx0W+dPm9Gjk1uDV9xuzvMcUsY7nf9bt4U5pGyWWkCXmPJcKwWfdl51Pw==} + engines: {node: '>=20.16.0'} - expo@52.0.46: - resolution: {integrity: sha512-JG89IVZLp7DWzgeiQb+0N43kWOF1DUm3esBvAS9cPFWZsM9x8nDXgbvtREcycDPA6E+yJsSC+086CigeUY6sVA==} + expo@55.0.15: + resolution: {integrity: sha512-sHIvqG477UU1jZHhaexXbUgsU7y+xnYZqDW1HrUkEBYiuEb5lobvWLmwea76EBVkityQx46UDtepFtarpUJQqQ==} hasBin: true peerDependencies: '@expo/dom-webview': '*' @@ -2782,20 +2855,16 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fb-dotslash@0.5.8: + resolution: {integrity: sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==} + engines: {node: '>=20'} + hasBin: true + fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fbemitter@3.0.0: - resolution: {integrity: sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==} - - fbjs-css-vars@1.0.2: - resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} - - fbjs@3.0.5: - resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} - - fetch-retry@4.1.1: - resolution: {integrity: sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==} + fetch-nodeshim@0.4.10: + resolution: {integrity: sha512-m6I8ALe4L4XpdETy7MJZWs6L1IVMbjs99bwbpIKphxX+0CTns4IKDWJY0LWfr4YsFjfg+z1TjzTMU8lKl8rG0w==} fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} @@ -2852,22 +2921,10 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} - - form-data@3.0.3: - resolution: {integrity: sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==} - engines: {node: '>= 6'} - form-data@4.0.2: resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} - freeport-async@2.0.0: - resolution: {integrity: sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==} - engines: {node: '>=8'} - fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -2880,22 +2937,6 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} - fs-extra@9.0.0: - resolution: {integrity: sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==} - engines: {node: '>=10'} - - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - fs-readdir-recursive@1.1.0: resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} @@ -2937,10 +2978,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -2953,6 +2990,10 @@ packages: resolution: {integrity: sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==} engines: {node: '>=6'} + getenv@2.0.0: + resolution: {integrity: sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==} + engines: {node: '>=6'} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2961,18 +3002,17 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -3034,21 +3074,33 @@ packages: hermes-estree@0.19.1: resolution: {integrity: sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g==} - hermes-estree@0.23.1: - resolution: {integrity: sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==} - hermes-estree@0.25.1: resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + hermes-estree@0.32.0: + resolution: {integrity: sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==} + + hermes-estree@0.32.1: + resolution: {integrity: sha512-ne5hkuDxheNBAikDjqvCZCwihnz0vVu9YsBzAEO1puiyFR4F1+PAz/SiPHSsNTuOveCYGRMX8Xbx4LOubeC0Qg==} + + hermes-estree@0.33.3: + resolution: {integrity: sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==} + hermes-parser@0.19.1: resolution: {integrity: sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==} - hermes-parser@0.23.1: - resolution: {integrity: sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==} - hermes-parser@0.25.1: resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + hermes-parser@0.32.0: + resolution: {integrity: sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==} + + hermes-parser@0.32.1: + resolution: {integrity: sha512-175dz634X/W5AiwrpLdoMl/MOb17poLHyIqgyExlE8D9zQ1OPnoORnGMB5ltRKnpvQzBjMYvT2rN/sHeIfZW5Q==} + + hermes-parser@0.33.3: + resolution: {integrity: sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==} + highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} @@ -3075,6 +3127,10 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + human-id@4.1.1: resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} hasBin: true @@ -3091,9 +3147,6 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -3120,10 +3173,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -3131,13 +3180,6 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - internal-ip@4.3.0: - resolution: {integrity: sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==} - engines: {node: '>=6'} - internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -3145,14 +3187,6 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ip-regex@2.1.0: - resolution: {integrity: sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==} - engines: {node: '>=4'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} @@ -3176,9 +3210,6 @@ packages: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} - is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -3240,10 +3271,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-cwd@2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -3267,10 +3294,6 @@ packages: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -3349,9 +3372,6 @@ packages: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3506,9 +3526,6 @@ packages: jimp-compact@0.16.1: resolution: {integrity: sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==} - join-component@1.1.0: - resolution: {integrity: sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3580,9 +3597,6 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -3598,6 +3612,10 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + lan-network@0.2.1: + resolution: {integrity: sha512-ONPnazC96VKDntab9j9JKwIWhZ4ZUceB4A9Epu4Ssg0hYFmtHZSeQ+n15nIwTFmcBUKtExOer8WTJ4GF9MO64A==} + hasBin: true + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -3609,72 +3627,74 @@ packages: lighthouse-logger@1.4.2: resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} - lightningcss-darwin-arm64@1.27.0: - resolution: {integrity: sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.27.0: - resolution: {integrity: sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==} + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.27.0: - resolution: {integrity: sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==} + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.27.0: - resolution: {integrity: sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==} + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.27.0: - resolution: {integrity: sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==} + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] - lightningcss-linux-arm64-musl@1.27.0: - resolution: {integrity: sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==} + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [musl] - lightningcss-linux-x64-gnu@1.27.0: - resolution: {integrity: sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==} + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [glibc] - lightningcss-linux-x64-musl@1.27.0: - resolution: {integrity: sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==} + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [musl] - lightningcss-win32-arm64-msvc@1.27.0: - resolution: {integrity: sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==} + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.27.0: - resolution: {integrity: sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==} + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.27.0: - resolution: {integrity: sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==} + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} lines-and-columns@1.2.4: @@ -3721,6 +3741,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.3.5: + resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3756,14 +3780,6 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - md5-file@3.2.3: - resolution: {integrity: sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==} - engines: {node: '>=0.10'} - hasBin: true - - md5@2.3.0: - resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} - memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} @@ -3778,60 +3794,118 @@ packages: resolution: {integrity: sha512-SuDMRdJKafSj9mzIijCNRxVXWrlJZdTnVE9iTGHO85UFTp/mWOLftqCjEtEjc78/0Wq3Y8IoYayx/VkYmKUf/g==} engines: {node: '>=18.18'} + metro-babel-transformer@0.83.5: + resolution: {integrity: sha512-d9FfmgUEVejTiSb7bkQeLRGl6aeno2UpuPm3bo3rCYwxewj03ymvOn8s8vnS4fBqAPQ+cE9iQM40wh7nGXR+eA==} + engines: {node: '>=20.19.4'} + metro-cache-key@0.82.1: resolution: {integrity: sha512-RoByg/cxJUewdO4yDx3udpxc6S59570Ub34Jm2gjvOcYQOkGxNepNgyhWFlZLM7P7aBF2UwdCqDB1hoTRtQqNw==} engines: {node: '>=18.18'} + metro-cache-key@0.83.5: + resolution: {integrity: sha512-Ycl8PBajB7bhbAI7Rt0xEyiF8oJ0RWX8EKkolV1KfCUlC++V/GStMSGpPLwnnBZXZWkCC5edBPzv1Hz1Yi0Euw==} + engines: {node: '>=20.19.4'} + metro-cache@0.82.1: resolution: {integrity: sha512-4ZK5EdgM8bTLLjpPCYOImirXUXVZpUU/I81BeAkScF8FFJfEHhV8yFyVp4/689bLbUBMwqz3rvYyxnrMi242lA==} engines: {node: '>=18.18'} + metro-cache@0.83.5: + resolution: {integrity: sha512-oH+s4U+IfZyg8J42bne2Skc90rcuESIYf86dYittcdWQtPfcaFXWpByPyTuWk3rR1Zz3Eh5HOrcVImfEhhJLng==} + engines: {node: '>=20.19.4'} + metro-config@0.82.1: resolution: {integrity: sha512-+w3280sUdZmEDpmEhk66vfeWs8xKhogiPim+JT6AIhrTUS4exki+yFgXDdnBXrjvAvhxUtCZcoIueFKCC/mbZw==} engines: {node: '>=18.18'} + metro-config@0.83.5: + resolution: {integrity: sha512-JQ/PAASXH7yczgV6OCUSRhZYME+NU8NYjI2RcaG5ga4QfQ3T/XdiLzpSb3awWZYlDCcQb36l4Vl7i0Zw7/Tf9w==} + engines: {node: '>=20.19.4'} + metro-core@0.82.1: resolution: {integrity: sha512-C1a8lPGJPs6axj9q+qLSdzK98TYjjXV6nsGnTvYuSwwXAm5sS03ewZCDimRfzu1s58oR0O28QddBgxNtYpDnJg==} engines: {node: '>=18.18'} + metro-core@0.83.5: + resolution: {integrity: sha512-YcVcLCrf0ed4mdLa82Qob0VxYqfhmlRxUS8+TO4gosZo/gLwSvtdeOjc/Vt0pe/lvMNrBap9LlmvZM8FIsMgJQ==} + engines: {node: '>=20.19.4'} + metro-file-map@0.82.1: resolution: {integrity: sha512-6RgYYrkswBCH4GwbLiK6QGzTjNnlCdU7BwwZlf+14ApjUlbr1oBkwmAa6lMfmqfZuh2H/ET8X950kJ8uZavJNA==} engines: {node: '>=18.18'} + metro-file-map@0.83.5: + resolution: {integrity: sha512-ZEt8s3a1cnYbn40nyCD+CsZdYSlwtFh2kFym4lo+uvfM+UMMH+r/BsrC6rbNClSrt+B7rU9T+Te/sh/NL8ZZKQ==} + engines: {node: '>=20.19.4'} + metro-minify-terser@0.82.1: resolution: {integrity: sha512-3P2PY+9L9sKrlxWWAOb1Bi6HXFCdnevym1R/6stkev/kl1+khkrDs1Z40139fLXFZbn8FrvXe89sTFRC3vB+Nw==} engines: {node: '>=18.18'} + metro-minify-terser@0.83.5: + resolution: {integrity: sha512-Toe4Md1wS1PBqbvB0cFxBzKEVyyuYTUb0sgifAZh/mSvLH84qA1NAWik9sISWatzvfWf3rOGoUoO5E3f193a3Q==} + engines: {node: '>=20.19.4'} + metro-resolver@0.82.1: resolution: {integrity: sha512-TnHK2FRTq/KMRZTqUKRXGJ4NGwJEHrPuo60UPGMUHzAS9diI22oCQ8y9888saGiXE+gi0Iplv/6AUTISxDgXqA==} engines: {node: '>=18.18'} + metro-resolver@0.83.5: + resolution: {integrity: sha512-7p3GtzVUpbAweJeCcUJihJeOQl1bDuimO5ueo1K0BUpUtR41q5EilbQ3klt16UTPPMpA+tISWBtsrqU556mY1A==} + engines: {node: '>=20.19.4'} + metro-runtime@0.82.1: resolution: {integrity: sha512-Xg7FccIHlNtI63RX0vKmIzXlM5eSq4mjMo0ALbxXpds/P4JVT0JeJW/BqwpncKabrpbZyvPmPguhd32TiMWHXg==} engines: {node: '>=18.18'} + metro-runtime@0.83.5: + resolution: {integrity: sha512-f+b3ue9AWTVlZe2Xrki6TAoFtKIqw30jwfk7GQ1rDUBQaE0ZQ+NkiMEtb9uwH7uAjJ87U7Tdx1Jg1OJqUfEVlA==} + engines: {node: '>=20.19.4'} + metro-source-map@0.82.1: resolution: {integrity: sha512-uCf60ybpmPvkkqQpVWtPZFCIMBS1D9uQ4r2isbqWvDQ1FFTi3xrhT1Z35Dyg30RQV6638XJ4wZY+Dwh8bU9W8A==} engines: {node: '>=18.18'} + metro-source-map@0.83.5: + resolution: {integrity: sha512-VT9bb2KO2/4tWY9Z2yeZqTUao7CicKAOps9LUg2aQzsz+04QyuXL3qgf1cLUVRjA/D6G5u1RJAlN1w9VNHtODQ==} + engines: {node: '>=20.19.4'} + metro-symbolicate@0.82.1: resolution: {integrity: sha512-UFofSe+y0tz+nQ5XOkgXOYu5xlbX/8jEvd2eSrd8SjAX7eAjbGwN0Kjji+87jSaMJIvRHkArVMWqwF6fZVq55g==} engines: {node: '>=18.18'} hasBin: true + metro-symbolicate@0.83.5: + resolution: {integrity: sha512-EMIkrjNRz/hF+p0RDdxoE60+dkaTLPN3vaaGkFmX5lvFdO6HPfHA/Ywznzkev+za0VhPQ5KSdz49/MALBRteHA==} + engines: {node: '>=20.19.4'} + hasBin: true + metro-transform-plugins@0.82.1: resolution: {integrity: sha512-AHFattUD9tUjG2MFV4RgZRgZZNfdRVQ7X6+ORK3cqwiItMcY2mK7psC6G2zI3WOtbydBcu/xWTilmjl7krC7FQ==} engines: {node: '>=18.18'} + metro-transform-plugins@0.83.5: + resolution: {integrity: sha512-KxYKzZL+lt3Os5H2nx7YkbkWVduLZL5kPrE/Yq+Prm/DE1VLhpfnO6HtPs8vimYFKOa58ncl60GpoX0h7Wm0Vw==} + engines: {node: '>=20.19.4'} + metro-transform-worker@0.82.1: resolution: {integrity: sha512-2vaadziCaYPfPMnl3tuYimjR7Gmj5CVOcQh/bJniOiXWZ0b1v4JGcw6jOAWzQKgNJdrOq8lMfzdT3xJ/cn/m7g==} engines: {node: '>=18.18'} + metro-transform-worker@0.83.5: + resolution: {integrity: sha512-8N4pjkNXc6ytlP9oAM6MwqkvUepNSW39LKYl9NjUMpRDazBQ7oBpQDc8Sz4aI8jnH6AGhF7s1m/ayxkN1t04yA==} + engines: {node: '>=20.19.4'} + metro@0.82.1: resolution: {integrity: sha512-/avNIHMlZhkDRl5ZMKNGuZSFZU56M3ABtt/JFQBJWEnitHtSD3Qidnfgjglq61yDbsWBv7aVrOFhdPRPTHN92A==} engines: {node: '>=18.18'} hasBin: true + metro@0.83.5: + resolution: {integrity: sha512-BgsXevY1MBac/3ZYv/RfNFf/4iuW9X7f4H8ZNkiH+r667HD9sVujxcmu4jvEzGCAm4/WyKdZCuyhAcyhTHOucQ==} + engines: {node: '>=20.19.4'} + hasBin: true + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -3848,6 +3922,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -3861,6 +3939,10 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -3868,41 +3950,13 @@ packages: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} - minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass-collect@2.0.1: - resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} - engines: {node: '>=16 || 14 >=14.17'} - - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -3922,6 +3976,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + multitars@0.2.5: + resolution: {integrity: sha512-T/i4uZOzd4j2VnS28eAOJS0MgeAbcsFIijRPeLRhVv54hP9OqsC/FjYK0JmMTWxGhF2fv34oH1mtR6XLBKkNlw==} + mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -3941,15 +3998,13 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - nested-error-stacks@2.0.1: - resolution: {integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==} - - nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - node-dir@0.1.17: resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} engines: {node: '>= 0.10.5'} @@ -3958,17 +4013,8 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + node-forge@1.4.0: + resolution: {integrity: sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==} engines: {node: '>= 6.13.0'} node-int64@0.4.0: @@ -3977,6 +4023,9 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.37: + resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -3985,10 +4034,6 @@ packages: resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==} engines: {node: ^16.14.0 || >=18.0.0} - npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} - npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -4003,6 +4048,10 @@ packages: resolution: {integrity: sha512-J4m1GAoMC0673H8LmVolj7ZERYEwJWRR4/A/M8ZB5iK9BiFLeAkjvny/VGk3XOYiMtnvq7TV6oc3MfDJ8uKpFw==} engines: {node: '>=18.18'} + ob1@0.83.5: + resolution: {integrity: sha512-vNKPYC8L5ycVANANpF/S+WZHpfnRWKx/F3AYP4QMn6ZJTh+l2HOrId0clNkEmua58NB9vmI9Qh7YOoV/4folYg==} + engines: {node: '>=20.19.4'} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -4104,10 +4153,6 @@ packages: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} - p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -4132,17 +4177,10 @@ packages: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - package-manager-detector@0.2.11: resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} @@ -4190,10 +4228,6 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -4201,9 +4235,9 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -4216,9 +4250,9 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@3.0.1: - resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} - engines: {node: '>=10'} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} @@ -4265,10 +4299,6 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - pretty-format@24.9.0: resolution: {integrity: sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==} engines: {node: '>= 6'} @@ -4285,9 +4315,6 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} - promise@7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} - promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} @@ -4301,9 +4328,6 @@ packages: psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4311,10 +4335,6 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - qrcode-terminal@0.11.0: - resolution: {integrity: sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==} - hasBin: true - quansync@0.2.10: resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} @@ -4331,10 +4351,6 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - react-devtools-core@6.1.1: resolution: {integrity: sha512-TFo1MEnkqE6hzAbaztnyR5uLTMoz6wnEWwWBsCUzNt+sVXJycuRJdDqvL078M4/h65BI/YO5XWTaxZDWVsW0fw==} @@ -4430,9 +4446,6 @@ packages: resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true - remove-trailing-slash@0.1.1: - resolution: {integrity: sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==} - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -4441,10 +4454,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - requireg@0.2.2: - resolution: {integrity: sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==} - engines: {node: '>= 4.0.0'} - requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -4476,9 +4485,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@1.7.1: - resolution: {integrity: sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==} - resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true @@ -4535,10 +4541,6 @@ packages: scheduler@0.25.0: resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -4580,9 +4582,6 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} - setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -4590,18 +4589,10 @@ packages: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} @@ -4684,16 +4675,9 @@ packages: spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} - split@1.0.1: - resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} - sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - ssri@10.0.6: - resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - stack-generator@2.0.10: resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} @@ -4738,10 +4722,6 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - string.prototype.matchall@4.0.12: resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} @@ -4781,18 +4761,10 @@ packages: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} - strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} - strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -4805,15 +4777,6 @@ packages: engines: {node: '>=8'} hasBin: true - sucrase@3.35.0: - resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - sudo-prompt@9.1.1: - resolution: {integrity: sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -4845,23 +4808,10 @@ packages: resolution: {integrity: sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==} engines: {node: ^14.18.0 || >=16.0.0} - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - - temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - temp@0.8.4: resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==} engines: {node: '>=6.0.0'} - tempy@0.7.1: - resolution: {integrity: sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==} - engines: {node: '>=10'} - term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -4892,9 +4842,6 @@ packages: throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - tinypool@2.1.0: resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} engines: {node: ^20.0.0 || >=22.0.0} @@ -4914,13 +4861,13 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + toqr@0.1.1: + resolution: {integrity: sha512-FWAPzCIHZHnrE/5/w9MPk0kK25hSQSH2IKhYh9PyjS3SG/+IEMvlwIHbhz+oF7xl54I+ueZlVnMjyzdSwLmAwA==} + tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@3.0.0: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} @@ -4973,10 +4920,6 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-fest@0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -5015,10 +4958,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - ua-parser-js@1.0.40: - resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==} - hasBin: true - unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -5026,10 +4965,6 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici@6.21.2: - resolution: {integrity: sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==} - engines: {node: '>=18.17'} - unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -5050,18 +4985,6 @@ packages: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} - unique-filename@3.0.0: - resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - unique-slug@4.0.0: - resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -5070,14 +4993,6 @@ packages: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} - universalify@1.0.0: - resolution: {integrity: sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==} - engines: {node: '>= 10.0.0'} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -5088,6 +5003,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -5102,10 +5023,6 @@ packages: resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==} hasBin: true - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - v8-to-istanbul@9.3.0: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} @@ -5131,17 +5048,6 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - webidl-conversions@5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -5149,6 +5055,7 @@ packages: whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-fetch@3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} @@ -5157,17 +5064,13 @@ packages: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} - whatwg-url-without-unicode@8.0.0-3: - resolution: {integrity: sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==} - engines: {node: '>=10'} + whatwg-url-minimum@0.1.1: + resolution: {integrity: sha512-u2FNVjFVFZhdjb502KzXy1gKn1mEisQRJssmSJT8CPhZdZa0AP6VCbWlXERKyGu0l09t0k50FiDiralpGhBxgA==} whatwg-url@11.0.0: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -5184,18 +5087,11 @@ packages: resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true - wonka@6.3.5: - resolution: {integrity: sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==} - word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -5204,10 +5100,6 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -5287,8 +5179,10 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + engines: {node: '>= 14.6'} + hasBin: true yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} @@ -5319,9 +5213,10 @@ packages: zod@3.24.3: resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==} -snapshots: + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - '@0no-co/graphql.web@1.1.2': {} +snapshots: '@ampproject/remapping@2.3.0': dependencies: @@ -5375,6 +5270,12 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.26.8': {} '@babel/core@7.26.10': @@ -5413,10 +5314,22 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 + '@babel/generator@7.29.1': + dependencies: + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.25.9': dependencies: '@babel/types': 7.27.0 + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.29.0 + '@babel/helper-compilation-targets@7.27.0': dependencies: '@babel/compat-data': 7.26.8 @@ -5438,6 +5351,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.26.10) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.29.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -5460,6 +5386,8 @@ snapshots: dependencies: '@babel/types': 7.27.0 + '@babel/helper-globals@7.28.0': {} + '@babel/helper-member-expression-to-functions@7.25.9': dependencies: '@babel/traverse': 7.27.0 @@ -5467,6 +5395,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.27.0 @@ -5487,8 +5422,14 @@ snapshots: dependencies: '@babel/types': 7.27.0 + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.29.0 + '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -5507,6 +5448,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-replace-supers@7.28.6(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: '@babel/traverse': 7.27.0 @@ -5514,10 +5464,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-option@7.25.9': {} '@babel/helper-wrap-function@7.25.9': @@ -5544,6 +5505,10 @@ snapshots: dependencies: '@babel/types': 7.27.0 + '@babel/parser@7.29.2': + dependencies: + '@babel/types': 7.29.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -5822,6 +5787,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 @@ -6291,6 +6264,12 @@ snapshots: '@babel/parser': 7.27.0 '@babel/types': 7.27.0 + '@babel/template@7.28.6': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + '@babel/traverse@7.27.0': dependencies: '@babel/code-frame': 7.26.2 @@ -6303,11 +6282,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.29.0': + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + '@babel/types@7.27.0': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@bcoe/v8-coverage@0.2.3': {} '@braidai/lang@1.1.1': {} @@ -6480,126 +6476,114 @@ snapshots: '@eslint/js@8.57.1': {} - '@expo/bunyan@4.0.1': - dependencies: - uuid: 8.3.2 - - '@expo/cli@0.22.26': - dependencies: - '@0no-co/graphql.web': 1.1.2 - '@babel/runtime': 7.27.0 - '@expo/code-signing-certificates': 0.0.5 - '@expo/config': 10.0.11 - '@expo/config-plugins': 9.0.17 - '@expo/devcert': 1.2.0 - '@expo/env': 0.4.2 - '@expo/image-utils': 0.6.5 - '@expo/json-file': 9.0.2 - '@expo/metro-config': 0.19.12 - '@expo/osascript': 2.1.6 - '@expo/package-manager': 1.7.2 - '@expo/plist': 0.2.2 - '@expo/prebuild-config': 8.2.0 - '@expo/rudder-sdk-node': 1.1.1 + '@expo/cli@55.0.24(@expo/dom-webview@55.0.5)(expo-constants@55.0.14(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(typescript@5.8.3))(expo-font@55.0.6(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + dependencies: + '@expo/code-signing-certificates': 0.0.6 + '@expo/config': 55.0.15(typescript@5.8.3) + '@expo/config-plugins': 55.0.8 + '@expo/devcert': 1.2.1 + '@expo/env': 2.1.1 + '@expo/image-utils': 0.8.13(typescript@5.8.3) + '@expo/json-file': 10.0.13 + '@expo/log-box': 55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + '@expo/metro': 55.0.0 + '@expo/metro-config': 55.0.16(expo@55.0.15)(typescript@5.8.3) + '@expo/osascript': 2.4.2 + '@expo/package-manager': 1.10.4 + '@expo/plist': 0.5.2 + '@expo/prebuild-config': 55.0.15(expo@55.0.15)(typescript@5.8.3) + '@expo/require-utils': 55.0.4(typescript@5.8.3) + '@expo/router-server': 55.0.14(expo-constants@55.0.14(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(typescript@5.8.3))(expo-font@55.0.6(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(expo-server@55.0.7)(expo@55.0.15)(react@19.1.0) + '@expo/schema-utils': 55.0.3 '@expo/spawn-async': 1.7.2 '@expo/ws-tunnel': 1.0.6 - '@expo/xcpretty': 4.3.2 - '@react-native/dev-middleware': 0.76.9 - '@urql/core': 5.1.1 - '@urql/exchange-retry': 1.3.1(@urql/core@5.1.1) + '@expo/xcpretty': 4.4.3 + '@react-native/dev-middleware': 0.83.4 accepts: 1.3.8 arg: 5.0.2 better-opn: 3.0.2 - bplist-creator: 0.0.7 + bplist-creator: 0.1.0 bplist-parser: 0.3.2 - cacache: 18.0.4 chalk: 4.1.2 ci-info: 3.9.0 compression: 1.8.0 connect: 3.7.0 debug: 4.4.0 - env-editor: 0.4.2 - fast-glob: 3.3.3 - form-data: 3.0.3 - freeport-async: 2.0.0 - fs-extra: 8.1.0 - getenv: 1.0.0 - glob: 10.4.5 - internal-ip: 4.3.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - lodash.debounce: 4.0.8 - minimatch: 3.1.2 - node-forge: 1.3.1 + dnssd-advertise: 1.1.4 + expo: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo-server: 55.0.7 + fetch-nodeshim: 0.4.10 + getenv: 2.0.0 + glob: 13.0.6 + lan-network: 0.2.1 + multitars: 0.2.5 + node-forge: 1.4.0 npm-package-arg: 11.0.3 ora: 3.4.0 - picomatch: 3.0.1 - pretty-bytes: 5.6.0 + picomatch: 4.0.4 pretty-format: 29.7.0 progress: 2.0.3 prompts: 2.4.2 - qrcode-terminal: 0.11.0 - require-from-string: 2.0.2 - requireg: 0.2.2 - resolve: 1.22.10 resolve-from: 5.0.0 - resolve.exports: 2.0.3 semver: 7.7.1 send: 0.19.1 slugify: 1.6.6 source-map-support: 0.5.21 stacktrace-parser: 0.1.11 structured-headers: 0.4.1 - tar: 6.2.1 - temp-dir: 2.0.0 - tempy: 0.7.1 terminal-link: 2.1.1 - undici: 6.21.2 - unique-string: 2.0.0 + toqr: 0.1.1 wrap-ansi: 7.0.0 ws: 8.18.1 + zod: 3.25.76 + optionalDependencies: + react-native: 0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0) transitivePeerDependencies: + - '@expo/dom-webview' + - '@expo/metro-runtime' - bufferutil - - encoding - - graphql + - expo-constants + - expo-font + - react + - react-dom + - react-server-dom-webpack - supports-color + - typescript - utf-8-validate - '@expo/code-signing-certificates@0.0.5': + '@expo/code-signing-certificates@0.0.6': dependencies: - node-forge: 1.3.1 - nullthrows: 1.1.1 + node-forge: 1.4.0 - '@expo/config-plugins@8.0.11': + '@expo/config-plugins@55.0.8': dependencies: - '@expo/config-types': 51.0.3 - '@expo/json-file': 8.3.3 - '@expo/plist': 0.1.3 + '@expo/config-types': 55.0.5 + '@expo/json-file': 10.0.13 + '@expo/plist': 0.5.2 '@expo/sdk-runtime-versions': 1.0.0 chalk: 4.1.2 debug: 4.4.0 - find-up: 5.0.0 - getenv: 1.0.0 - glob: 7.1.6 + getenv: 2.0.0 + glob: 13.0.6 resolve-from: 5.0.0 semver: 7.7.1 - slash: 3.0.0 slugify: 1.6.6 xcode: 3.0.1 xml2js: 0.6.0 transitivePeerDependencies: - supports-color - '@expo/config-plugins@9.0.17': + '@expo/config-plugins@8.0.11': dependencies: - '@expo/config-types': 52.0.5 - '@expo/json-file': 9.0.2 - '@expo/plist': 0.2.2 + '@expo/config-types': 51.0.3 + '@expo/json-file': 8.3.3 + '@expo/plist': 0.1.3 '@expo/sdk-runtime-versions': 1.0.0 chalk: 4.1.2 debug: 4.4.0 + find-up: 5.0.0 getenv: 1.0.0 - glob: 10.4.5 + glob: 7.1.6 resolve-from: 5.0.0 semver: 7.7.1 slash: 3.0.0 @@ -6611,25 +6595,23 @@ snapshots: '@expo/config-types@51.0.3': {} - '@expo/config-types@52.0.5': {} + '@expo/config-types@55.0.5': {} - '@expo/config@10.0.11': + '@expo/config@55.0.15(typescript@5.8.3)': dependencies: - '@babel/code-frame': 7.10.4 - '@expo/config-plugins': 9.0.17 - '@expo/config-types': 52.0.5 - '@expo/json-file': 9.0.2 + '@expo/config-plugins': 55.0.8 + '@expo/config-types': 55.0.5 + '@expo/json-file': 10.0.13 + '@expo/require-utils': 55.0.4(typescript@5.8.3) deepmerge: 4.3.1 - getenv: 1.0.0 - glob: 10.4.5 - require-from-string: 2.0.2 - resolve-from: 5.0.0 + getenv: 2.0.0 + glob: 13.0.6 resolve-workspace-root: 2.0.0 semver: 7.7.1 slugify: 1.6.6 - sucrase: 3.35.0 transitivePeerDependencies: - supports-color + - typescript '@expo/config@9.0.4': dependencies: @@ -6647,110 +6629,157 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/devcert@1.2.0': + '@expo/devcert@1.2.1': dependencies: '@expo/sudo-prompt': 9.3.2 debug: 3.2.7 - glob: 10.4.5 transitivePeerDependencies: - supports-color - '@expo/env@0.4.2': + '@expo/devtools@55.0.2(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)': + dependencies: + chalk: 4.1.2 + optionalDependencies: + react: 19.1.0 + react-native: 0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0) + + '@expo/dom-webview@55.0.5(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)': + dependencies: + expo: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + react: 19.1.0 + react-native: 0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0) + + '@expo/env@2.1.1': dependencies: chalk: 4.1.2 debug: 4.4.0 - dotenv: 16.4.7 - dotenv-expand: 11.0.7 - getenv: 1.0.0 + getenv: 2.0.0 transitivePeerDependencies: - supports-color - '@expo/fingerprint@0.11.11': + '@expo/fingerprint@0.16.6': dependencies: + '@expo/env': 2.1.1 '@expo/spawn-async': 1.7.2 arg: 5.0.2 chalk: 4.1.2 debug: 4.4.0 - find-up: 5.0.0 - getenv: 1.0.0 - minimatch: 3.1.2 - p-limit: 3.1.0 + getenv: 2.0.0 + glob: 13.0.6 + ignore: 5.3.2 + minimatch: 10.2.5 resolve-from: 5.0.0 semver: 7.7.1 transitivePeerDependencies: - supports-color - '@expo/image-utils@0.6.5': + '@expo/image-utils@0.8.13(typescript@5.8.3)': dependencies: + '@expo/require-utils': 55.0.4(typescript@5.8.3) '@expo/spawn-async': 1.7.2 chalk: 4.1.2 - fs-extra: 9.0.0 - getenv: 1.0.0 + getenv: 2.0.0 jimp-compact: 0.16.1 parse-png: 2.1.0 - resolve-from: 5.0.0 semver: 7.7.1 - temp-dir: 2.0.0 - unique-string: 2.0.0 + transitivePeerDependencies: + - supports-color + - typescript - '@expo/json-file@8.3.3': + '@expo/json-file@10.0.13': dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.26.2 json5: 2.2.3 - write-file-atomic: 2.4.3 - '@expo/json-file@9.0.2': + '@expo/json-file@8.3.3': dependencies: '@babel/code-frame': 7.10.4 json5: 2.2.3 write-file-atomic: 2.4.3 - '@expo/metro-config@0.19.12': + '@expo/local-build-cache-provider@55.0.11(typescript@5.8.3)': dependencies: - '@babel/core': 7.26.10 + '@expo/config': 55.0.15(typescript@5.8.3) + chalk: 4.1.2 + transitivePeerDependencies: + - supports-color + - typescript + + '@expo/log-box@55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)': + dependencies: + '@expo/dom-webview': 55.0.5(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + anser: 1.4.10 + expo: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + react: 19.1.0 + react-native: 0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0) + stacktrace-parser: 0.1.11 + + '@expo/metro-config@55.0.16(expo@55.0.15)(typescript@5.8.3)': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/core': 7.26.10 '@babel/generator': 7.27.0 - '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 - '@expo/config': 10.0.11 - '@expo/env': 0.4.2 - '@expo/json-file': 9.0.2 + '@expo/config': 55.0.15(typescript@5.8.3) + '@expo/env': 2.1.1 + '@expo/json-file': 10.0.13 + '@expo/metro': 55.0.0 '@expo/spawn-async': 1.7.2 + browserslist: 4.28.2 chalk: 4.1.2 debug: 4.4.0 - fs-extra: 9.1.0 - getenv: 1.0.0 - glob: 10.4.5 + getenv: 2.0.0 + glob: 13.0.6 + hermes-parser: 0.32.1 jsc-safe-url: 0.2.4 - lightningcss: 1.27.0 - minimatch: 3.1.2 + lightningcss: 1.32.0 + picomatch: 4.0.4 postcss: 8.4.49 resolve-from: 5.0.0 + optionalDependencies: + expo: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) transitivePeerDependencies: + - bufferutil - supports-color + - typescript + - utf-8-validate + + '@expo/metro@55.0.0': + dependencies: + metro: 0.83.5 + metro-babel-transformer: 0.83.5 + metro-cache: 0.83.5 + metro-cache-key: 0.83.5 + metro-config: 0.83.5 + metro-core: 0.83.5 + metro-file-map: 0.83.5 + metro-minify-terser: 0.83.5 + metro-resolver: 0.83.5 + metro-runtime: 0.83.5 + metro-source-map: 0.83.5 + metro-symbolicate: 0.83.5 + metro-transform-plugins: 0.83.5 + metro-transform-worker: 0.83.5 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate '@expo/npm-proofread@1.0.1': dependencies: semver: 5.7.2 - '@expo/osascript@2.1.6': + '@expo/osascript@2.4.2': dependencies: '@expo/spawn-async': 1.7.2 - exec-async: 2.2.0 - '@expo/package-manager@1.7.2': + '@expo/package-manager@1.10.4': dependencies: - '@expo/json-file': 9.0.2 + '@expo/json-file': 10.0.13 '@expo/spawn-async': 1.7.2 - ansi-regex: 5.0.1 chalk: 4.1.2 - find-up: 5.0.0 - js-yaml: 3.14.1 - micromatch: 4.0.8 npm-package-arg: 11.0.3 ora: 3.4.0 resolve-workspace-root: 2.0.0 - split: 1.0.1 - sudo-prompt: 9.1.1 '@expo/plist@0.1.3': dependencies: @@ -6758,39 +6787,51 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 14.0.0 - '@expo/plist@0.2.2': + '@expo/plist@0.5.2': dependencies: - '@xmldom/xmldom': 0.7.13 + '@xmldom/xmldom': 0.8.10 base64-js: 1.5.1 - xmlbuilder: 14.0.0 + xmlbuilder: 15.1.1 - '@expo/prebuild-config@8.2.0': + '@expo/prebuild-config@55.0.15(expo@55.0.15)(typescript@5.8.3)': dependencies: - '@expo/config': 10.0.11 - '@expo/config-plugins': 9.0.17 - '@expo/config-types': 52.0.5 - '@expo/image-utils': 0.6.5 - '@expo/json-file': 9.0.2 - '@react-native/normalize-colors': 0.76.9 + '@expo/config': 55.0.15(typescript@5.8.3) + '@expo/config-plugins': 55.0.8 + '@expo/config-types': 55.0.5 + '@expo/image-utils': 0.8.13(typescript@5.8.3) + '@expo/json-file': 10.0.13 + '@react-native/normalize-colors': 0.83.4 debug: 4.4.0 - fs-extra: 9.1.0 + expo: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) resolve-from: 5.0.0 semver: 7.7.1 xml2js: 0.6.0 transitivePeerDependencies: - supports-color + - typescript + + '@expo/require-utils@55.0.4(typescript@5.8.3)': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/core': 7.26.10 + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color - '@expo/rudder-sdk-node@1.1.1': + '@expo/router-server@55.0.14(expo-constants@55.0.14(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(typescript@5.8.3))(expo-font@55.0.6(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(expo-server@55.0.7)(expo@55.0.15)(react@19.1.0)': dependencies: - '@expo/bunyan': 4.0.1 - '@segment/loosely-validate-event': 2.0.0 - fetch-retry: 4.1.1 - md5: 2.3.0 - node-fetch: 2.7.0 - remove-trailing-slash: 0.1.1 - uuid: 8.3.2 + debug: 4.4.0 + expo: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo-constants: 55.0.14(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(typescript@5.8.3) + expo-font: 55.0.6(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + expo-server: 55.0.7 + react: 19.1.0 transitivePeerDependencies: - - encoding + - supports-color + + '@expo/schema-utils@55.0.3': {} '@expo/sdk-runtime-versions@1.0.0': {} @@ -6800,19 +6841,18 @@ snapshots: '@expo/sudo-prompt@9.3.2': {} - '@expo/vector-icons@14.1.0(expo-font@13.0.4(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react@19.1.0))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)': + '@expo/vector-icons@15.1.1(expo-font@55.0.6(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)': dependencies: - expo-font: 13.0.4(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react@19.1.0) + expo-font: 55.0.6(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) react: 19.1.0 react-native: 0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0) '@expo/ws-tunnel@1.0.6': {} - '@expo/xcpretty@4.3.2': + '@expo/xcpretty@4.4.3': dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.26.2 chalk: 4.1.2 - find-up: 5.0.0 js-yaml: 4.1.0 '@humanwhocodes/config-array@0.13.0': @@ -6827,15 +6867,6 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - '@isaacs/ttlcache@1.4.1': {} '@istanbuljs/load-nyc-config@1.1.0': @@ -6939,7 +6970,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 '@types/node': 22.15.2 chalk: 4.1.2 collect-v8-coverage: 1.0.2 @@ -6967,7 +6998,7 @@ snapshots: '@jest/source-map@29.6.3': dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 callsites: 3.1.0 graceful-fs: 4.2.11 @@ -7020,6 +7051,11 @@ snapshots: '@types/yargs': 17.0.33 chalk: 4.1.2 + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -7042,6 +7078,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + '@loaderkit/resolve@1.0.4': dependencies: '@braidai/lang': 1.1.1 @@ -7077,10 +7118,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@npmcli/fs@3.1.1': - dependencies: - semver: 7.7.1 - '@oxfmt/binding-android-arm-eabi@0.45.0': optional: true @@ -7195,9 +7232,6 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.60.0': optional: true - '@pkgjs/parseargs@0.11.0': - optional: true - '@pkgr/core@0.2.4': {} '@react-native/assets-registry@0.79.1': {} @@ -7209,11 +7243,12 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/babel-plugin-codegen@0.76.9(@babel/preset-env@7.26.9(@babel/core@7.26.10))': + '@react-native/babel-plugin-codegen@0.83.4(@babel/core@7.26.10)': dependencies: - '@react-native/codegen': 0.76.9(@babel/preset-env@7.26.9(@babel/core@7.26.10)) + '@babel/traverse': 7.27.0 + '@react-native/codegen': 0.83.4(@babel/core@7.26.10) transitivePeerDependencies: - - '@babel/preset-env' + - '@babel/core' - supports-color '@react-native/babel-preset@0.74.87(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))': @@ -7265,7 +7300,7 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/babel-preset@0.76.9(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))': + '@react-native/babel-preset@0.83.4(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.26.10) @@ -7308,12 +7343,11 @@ snapshots: '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.10) '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.10) '@babel/template': 7.27.0 - '@react-native/babel-plugin-codegen': 0.76.9(@babel/preset-env@7.26.9(@babel/core@7.26.10)) - babel-plugin-syntax-hermes-parser: 0.25.1 + '@react-native/babel-plugin-codegen': 0.83.4(@babel/core@7.26.10) + babel-plugin-syntax-hermes-parser: 0.32.0 babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.26.10) react-refresh: 0.14.2 transitivePeerDependencies: - - '@babel/preset-env' - supports-color '@react-native/codegen@0.74.87(@babel/preset-env@7.26.9(@babel/core@7.26.10))': @@ -7329,25 +7363,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@react-native/codegen@0.76.9(@babel/preset-env@7.26.9(@babel/core@7.26.10))': + '@react-native/codegen@0.79.1(@babel/core@7.26.10)': dependencies: - '@babel/parser': 7.27.0 - '@babel/preset-env': 7.26.9(@babel/core@7.26.10) + '@babel/core': 7.26.10 glob: 7.2.3 - hermes-parser: 0.23.1 + hermes-parser: 0.25.1 invariant: 2.2.4 - jscodeshift: 0.14.0(@babel/preset-env@7.26.9(@babel/core@7.26.10)) - mkdirp: 0.5.6 nullthrows: 1.1.1 yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - '@react-native/codegen@0.79.1(@babel/core@7.26.10)': + '@react-native/codegen@0.83.4(@babel/core@7.26.10)': dependencies: '@babel/core': 7.26.10 + '@babel/parser': 7.27.0 glob: 7.2.3 - hermes-parser: 0.25.1 + hermes-parser: 0.32.0 invariant: 2.2.4 nullthrows: 1.1.1 yargs: 17.7.2 @@ -7367,14 +7397,19 @@ snapshots: - supports-color - utf-8-validate - '@react-native/debugger-frontend@0.76.9': {} - '@react-native/debugger-frontend@0.79.1': {} - '@react-native/dev-middleware@0.76.9': + '@react-native/debugger-frontend@0.83.4': {} + + '@react-native/debugger-shell@0.83.4': + dependencies: + cross-spawn: 7.0.6 + fb-dotslash: 0.5.8 + + '@react-native/dev-middleware@0.79.1': dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.76.9 + '@react-native/debugger-frontend': 0.79.1 chrome-launcher: 0.15.2 chromium-edge-launcher: 0.2.0 connect: 3.7.0 @@ -7382,7 +7417,6 @@ snapshots: invariant: 2.2.4 nullthrows: 1.1.1 open: 7.4.2 - selfsigned: 2.4.1 serve-static: 1.16.2 ws: 6.2.3 transitivePeerDependencies: @@ -7390,19 +7424,20 @@ snapshots: - supports-color - utf-8-validate - '@react-native/dev-middleware@0.79.1': + '@react-native/dev-middleware@0.83.4': dependencies: '@isaacs/ttlcache': 1.4.1 - '@react-native/debugger-frontend': 0.79.1 + '@react-native/debugger-frontend': 0.83.4 + '@react-native/debugger-shell': 0.83.4 chrome-launcher: 0.15.2 chromium-edge-launcher: 0.2.0 connect: 3.7.0 - debug: 2.6.9 + debug: 4.4.0 invariant: 2.2.4 nullthrows: 1.1.1 open: 7.4.2 serve-static: 1.16.2 - ws: 6.2.3 + ws: 7.5.10 transitivePeerDependencies: - bufferutil - supports-color @@ -7412,10 +7447,10 @@ snapshots: '@react-native/js-polyfills@0.79.1': {} - '@react-native/normalize-colors@0.76.9': {} - '@react-native/normalize-colors@0.79.1': {} + '@react-native/normalize-colors@0.83.4': {} + '@react-native/virtualized-lists@0.79.1(@types/react@18.3.20)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)': dependencies: invariant: 2.2.4 @@ -7427,11 +7462,6 @@ snapshots: '@rtsao/scc@1.1.0': {} - '@segment/loosely-validate-event@2.0.0': - dependencies: - component-type: 1.2.2 - join-component: 1.1.0 - '@simplewebauthn/typescript-types@8.3.4': {} '@sinclair/typebox@0.27.8': {} @@ -7516,10 +7546,6 @@ snapshots: '@types/json5@0.0.29': {} - '@types/node-forge@1.3.11': - dependencies: - '@types/node': 22.15.2 - '@types/node@12.20.55': {} '@types/node@22.15.2': @@ -7645,18 +7671,6 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@urql/core@5.1.1': - dependencies: - '@0no-co/graphql.web': 1.1.2 - wonka: 6.3.5 - transitivePeerDependencies: - - graphql - - '@urql/exchange-retry@1.3.1(@urql/core@5.1.1)': - dependencies: - '@urql/core': 5.1.1 - wonka: 6.3.5 - '@xmldom/xmldom@0.7.13': {} '@xmldom/xmldom@0.8.10': {} @@ -7672,6 +7686,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.0.0 + acorn-globals@7.0.1: dependencies: acorn: 8.14.1 @@ -7693,10 +7712,7 @@ snapshots: transitivePeerDependencies: - supports-color - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 + agent-base@7.1.4: {} ajv@6.12.6: dependencies: @@ -7735,8 +7751,6 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} - any-promise@1.3.0: {} anymatch@3.1.3: @@ -7831,8 +7845,6 @@ snapshots: asynckit@0.4.0: {} - at-least-node@1.0.0: {} - available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -7909,12 +7921,26 @@ snapshots: zod: 3.24.3 zod-validation-error: 2.1.0(zod@3.24.3) + babel-plugin-react-compiler@1.0.0: + dependencies: + '@babel/types': 7.27.0 + babel-plugin-react-native-web@0.19.13: {} + babel-plugin-react-native-web@0.21.2: {} + babel-plugin-syntax-hermes-parser@0.25.1: dependencies: hermes-parser: 0.25.1 + babel-plugin-syntax-hermes-parser@0.32.0: + dependencies: + hermes-parser: 0.32.0 + + babel-plugin-syntax-hermes-parser@0.32.1: + dependencies: + hermes-parser: 0.32.1 + babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.26.10): dependencies: '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.10) @@ -7957,20 +7983,37 @@ snapshots: - '@babel/preset-env' - supports-color - babel-preset-expo@12.0.11(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10)): + babel-preset-expo@55.0.17(@babel/core@7.26.10)(@babel/runtime@7.27.0)(expo@55.0.15)(react-refresh@0.14.2): dependencies: + '@babel/generator': 7.27.0 + '@babel/helper-module-imports': 7.25.9 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-proposal-export-default-from': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-syntax-export-default-from': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.26.10) '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-flow-strip-types': 7.26.5(@babel/core@7.26.10) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-runtime': 7.26.10(@babel/core@7.26.10) '@babel/preset-react': 7.26.3(@babel/core@7.26.10) '@babel/preset-typescript': 7.27.0(@babel/core@7.26.10) - '@react-native/babel-preset': 0.76.9(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10)) - babel-plugin-react-native-web: 0.19.13 + '@react-native/babel-preset': 0.83.4(@babel/core@7.26.10) + babel-plugin-react-compiler: 1.0.0 + babel-plugin-react-native-web: 0.21.2 + babel-plugin-syntax-hermes-parser: 0.32.1 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.26.10) + debug: 4.4.0 react-refresh: 0.14.2 + resolve-from: 5.0.0 + optionalDependencies: + '@babel/runtime': 7.27.0 + expo: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) transitivePeerDependencies: - '@babel/core' - - '@babel/preset-env' - supports-color babel-preset-jest@29.6.3(@babel/core@7.26.10): @@ -7981,8 +8024,12 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base64-js@1.5.1: {} + baseline-browser-mapping@2.10.20: {} + better-opn@3.0.2: dependencies: open: 8.4.2 @@ -7996,10 +8043,6 @@ snapshots: binary-extensions@2.3.0: optional: true - bplist-creator@0.0.7: - dependencies: - stream-buffers: 2.2.0 - bplist-creator@0.1.0: dependencies: stream-buffers: 2.2.0 @@ -8021,6 +8064,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.5: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -8032,6 +8079,14 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.4) + browserslist@4.28.2: + dependencies: + baseline-browser-mapping: 2.10.20 + caniuse-lite: 1.0.30001788 + electron-to-chromium: 1.5.340 + node-releases: 2.0.37 + update-browserslist-db: 1.2.3(browserslist@4.28.2) + bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 @@ -8040,39 +8095,10 @@ snapshots: dependencies: node-int64: 0.4.0 - buffer-alloc-unsafe@1.1.0: {} - - buffer-alloc@1.2.0: - dependencies: - buffer-alloc-unsafe: 1.1.0 - buffer-fill: 1.0.0 - - buffer-fill@1.0.0: {} - buffer-from@1.1.2: {} - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - bytes@3.1.2: {} - cacache@18.0.4: - dependencies: - '@npmcli/fs': 3.1.1 - fs-minipass: 3.0.3 - glob: 10.4.5 - lru-cache: 10.4.3 - minipass: 7.1.2 - minipass-collect: 2.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 4.0.0 - ssri: 10.0.6 - tar: 6.2.1 - unique-filename: 3.0.0 - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -8108,6 +8134,8 @@ snapshots: caniuse-lite@1.0.30001715: {} + caniuse-lite@1.0.30001788: {} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -8132,8 +8160,6 @@ snapshots: chardet@0.7.0: {} - charenc@0.0.2: {} - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -8147,8 +8173,6 @@ snapshots: fsevents: 2.3.3 optional: true - chownr@2.0.0: {} - chrome-launcher@0.15.2: dependencies: '@types/node': 22.15.2 @@ -8175,8 +8199,6 @@ snapshots: cjs-module-lexer@1.4.3: {} - clean-stack@2.2.0: {} - cli-cursor@2.1.0: dependencies: restore-cursor: 2.0.0 @@ -8252,8 +8274,6 @@ snapshots: commondir@1.0.1: {} - component-type@1.2.2: {} - compressible@2.0.18: dependencies: mime-db: 1.54.0 @@ -8309,30 +8329,12 @@ snapshots: - supports-color - ts-node - cross-fetch@3.2.0: - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - - cross-spawn@6.0.6: - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.2 - shebang-command: 1.2.0 - which: 1.3.1 - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - crypt@0.0.2: {} - - crypto-random-string@2.0.0: {} - cssom@0.3.8: {} cssom@0.5.0: {} @@ -8383,17 +8385,10 @@ snapshots: dedent@1.5.3: {} - deep-extend@0.6.0: {} - deep-is@0.1.4: {} deepmerge@4.3.1: {} - default-gateway@4.2.0: - dependencies: - execa: 1.0.0 - ip-regex: 2.1.0 - defaults@1.0.4: dependencies: clone: 1.0.4 @@ -8412,17 +8407,6 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - del@6.1.1: - dependencies: - globby: 11.1.0 - graceful-fs: 4.2.11 - is-glob: 4.0.3 - is-path-cwd: 2.2.0 - is-path-inside: 3.0.3 - p-map: 4.0.0 - rimraf: 3.0.2 - slash: 3.0.0 - delayed-stream@1.0.0: {} depd@2.0.0: {} @@ -8431,7 +8415,7 @@ snapshots: detect-indent@6.1.0: {} - detect-libc@1.0.3: {} + detect-libc@2.1.2: {} detect-newline@3.1.0: {} @@ -8441,6 +8425,8 @@ snapshots: dependencies: path-type: 4.0.0 + dnssd-advertise@1.1.4: {} + doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -8453,40 +8439,28 @@ snapshots: dependencies: webidl-conversions: 7.0.0 - dotenv-expand@11.0.7: - dependencies: - dotenv: 16.4.7 - - dotenv@16.4.7: {} - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 - eastasianwidth@0.2.0: {} - ee-first@1.1.1: {} electron-to-chromium@1.5.143: {} + electron-to-chromium@1.5.340: {} + emittery@0.13.1: {} emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} - emojilib@2.4.0: {} encodeurl@1.0.2: {} encodeurl@2.0.0: {} - end-of-stream@1.4.4: - dependencies: - once: 1.4.0 - enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -8494,8 +8468,6 @@ snapshots: entities@6.0.0: {} - env-editor@0.4.2: {} - environment@1.1.0: {} error-ex@1.3.2: @@ -8824,18 +8796,6 @@ snapshots: event-target-shim@5.0.1: {} - exec-async@2.2.0: {} - - execa@1.0.0: - dependencies: - cross-spawn: 6.0.6 - get-stream: 4.1.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -8858,42 +8818,42 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 - expo-asset@11.0.5(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0): + expo-asset@55.0.15(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3): dependencies: - '@expo/image-utils': 0.6.5 - expo: 52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) - expo-constants: 17.0.8(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0)) - invariant: 2.2.4 - md5-file: 3.2.3 + '@expo/image-utils': 0.8.13(typescript@5.8.3) + expo: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo-constants: 55.0.14(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(typescript@5.8.3) react: 19.1.0 react-native: 0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0) transitivePeerDependencies: - supports-color + - typescript - expo-constants@17.0.8(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0)): + expo-constants@55.0.14(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(typescript@5.8.3): dependencies: - '@expo/config': 10.0.11 - '@expo/env': 0.4.2 - expo: 52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + '@expo/config': 55.0.15(typescript@5.8.3) + '@expo/env': 2.1.1 + expo: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) react-native: 0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0) transitivePeerDependencies: - supports-color + - typescript - expo-file-system@18.0.12(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0)): + expo-file-system@55.0.16(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0)): dependencies: - expo: 52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + expo: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) react-native: 0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0) - web-streams-polyfill: 3.3.3 - expo-font@13.0.4(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react@19.1.0): + expo-font@55.0.6(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0): dependencies: - expo: 52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + expo: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) fontfaceobserver: 2.3.0 react: 19.1.0 + react-native: 0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0) - expo-keep-awake@14.0.3(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react@19.1.0): + expo-keep-awake@55.0.6(expo@55.0.15)(react@19.1.0): dependencies: - expo: 52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + expo: 55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) react: 19.1.0 expo-module-scripts@3.5.4(@babel/core@7.26.10)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10))(eslint@8.57.1)(jest@29.7.0(@types/node@22.15.2))(prettier@2.8.8)(react-test-renderer@18.2.0(react@19.1.0))(react@19.1.0): @@ -8936,56 +8896,67 @@ snapshots: - supports-color - utf-8-validate - expo-modules-autolinking@2.0.8: + expo-modules-autolinking@55.0.17(typescript@5.8.3): dependencies: + '@expo/require-utils': 55.0.4(typescript@5.8.3) '@expo/spawn-async': 1.7.2 chalk: 4.1.2 commander: 7.2.0 - fast-glob: 3.3.3 - find-up: 5.0.0 - fs-extra: 9.1.0 - require-from-string: 2.0.2 - resolve-from: 5.0.0 + transitivePeerDependencies: + - supports-color + - typescript expo-modules-core@1.12.26: dependencies: invariant: 2.2.4 - expo-modules-core@2.2.3: + expo-modules-core@55.0.22(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0): dependencies: invariant: 2.2.4 + react: 19.1.0 + react-native: 0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0) - expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0): + expo-server@55.0.7: {} + + expo@55.0.15(@babel/core@7.26.10)(@expo/dom-webview@55.0.5)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3): dependencies: '@babel/runtime': 7.27.0 - '@expo/cli': 0.22.26 - '@expo/config': 10.0.11 - '@expo/config-plugins': 9.0.17 - '@expo/fingerprint': 0.11.11 - '@expo/metro-config': 0.19.12 - '@expo/vector-icons': 14.1.0(expo-font@13.0.4(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react@19.1.0))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) - babel-preset-expo: 12.0.11(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10)) - expo-asset: 11.0.5(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) - expo-constants: 17.0.8(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0)) - expo-file-system: 18.0.12(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0)) - expo-font: 13.0.4(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react@19.1.0) - expo-keep-awake: 14.0.3(expo@52.0.46(@babel/core@7.26.10)(@babel/preset-env@7.26.9(@babel/core@7.26.10))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react@19.1.0) - expo-modules-autolinking: 2.0.8 - expo-modules-core: 2.2.3 - fbemitter: 3.0.0 + '@expo/cli': 55.0.24(@expo/dom-webview@55.0.5)(expo-constants@55.0.14(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(typescript@5.8.3))(expo-font@55.0.6(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@expo/config': 55.0.15(typescript@5.8.3) + '@expo/config-plugins': 55.0.8 + '@expo/devtools': 55.0.2(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + '@expo/fingerprint': 0.16.6 + '@expo/local-build-cache-provider': 55.0.11(typescript@5.8.3) + '@expo/log-box': 55.0.10(@expo/dom-webview@55.0.5)(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + '@expo/metro': 55.0.0 + '@expo/metro-config': 55.0.16(expo@55.0.15)(typescript@5.8.3) + '@expo/vector-icons': 15.1.1(expo-font@55.0.6(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0))(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + '@ungap/structured-clone': 1.3.0 + babel-preset-expo: 55.0.17(@babel/core@7.26.10)(@babel/runtime@7.27.0)(expo@55.0.15)(react-refresh@0.14.2) + expo-asset: 55.0.15(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo-constants: 55.0.14(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(typescript@5.8.3) + expo-file-system: 55.0.16(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0)) + expo-font: 55.0.6(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + expo-keep-awake: 55.0.6(expo@55.0.15)(react@19.1.0) + expo-modules-autolinking: 55.0.17(typescript@5.8.3) + expo-modules-core: 55.0.22(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) + pretty-format: 29.7.0 react: 19.1.0 react-native: 0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0) - web-streams-polyfill: 3.3.3 - whatwg-url-without-unicode: 8.0.0-3 + react-refresh: 0.14.2 + whatwg-url-minimum: 0.1.1 + optionalDependencies: + '@expo/dom-webview': 55.0.5(expo@55.0.15)(react-native@0.79.1(@babel/core@7.26.10)(@types/react@18.3.20)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - '@babel/core' - - '@babel/preset-env' - - babel-plugin-react-compiler - bufferutil - - encoding - - graphql - - react-compiler-runtime + - expo-router + - expo-widgets + - react-dom + - react-native-worklets + - react-server-dom-webpack - supports-color + - typescript - utf-8-validate exponential-backoff@3.1.2: {} @@ -9018,31 +8989,13 @@ snapshots: dependencies: reusify: 1.1.0 + fb-dotslash@0.5.8: {} + fb-watchman@2.0.2: dependencies: bser: 2.1.1 - fbemitter@3.0.0: - dependencies: - fbjs: 3.0.5 - transitivePeerDependencies: - - encoding - - fbjs-css-vars@1.0.2: {} - - fbjs@3.0.5: - dependencies: - cross-fetch: 3.2.0 - fbjs-css-vars: 1.0.2 - loose-envify: 1.4.0 - object-assign: 4.1.1 - promise: 7.3.1 - setimmediate: 1.0.5 - ua-parser-js: 1.0.40 - transitivePeerDependencies: - - encoding - - fetch-retry@4.1.1: {} + fetch-nodeshim@0.4.10: {} fflate@0.8.2: {} @@ -9108,18 +9061,6 @@ snapshots: dependencies: is-callable: 1.2.7 - foreground-child@3.3.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - form-data@3.0.3: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - mime-types: 2.1.35 - form-data@4.0.2: dependencies: asynckit: 0.4.0 @@ -9127,8 +9068,6 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 - freeport-async@2.0.0: {} - fresh@0.5.2: {} fs-extra@7.0.1: @@ -9143,28 +9082,6 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 - fs-extra@9.0.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 1.0.0 - - fs-extra@9.1.0: - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - - fs-minipass@3.0.3: - dependencies: - minipass: 7.1.2 - fs-readdir-recursive@1.1.0: {} fs.realpath@1.0.0: {} @@ -9209,10 +9126,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stream@4.1.0: - dependencies: - pump: 3.0.2 - get-stream@6.0.1: {} get-symbol-description@1.1.0: @@ -9223,6 +9136,8 @@ snapshots: getenv@1.0.0: {} + getenv@2.0.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -9231,14 +9146,11 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.5: + glob@13.0.6: dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 + minimatch: 10.2.5 + minipass: 7.1.3 + path-scurry: 2.0.2 glob@7.1.6: dependencies: @@ -9310,22 +9222,34 @@ snapshots: hermes-estree@0.19.1: {} - hermes-estree@0.23.1: {} - hermes-estree@0.25.1: {} + hermes-estree@0.32.0: {} + + hermes-estree@0.32.1: {} + + hermes-estree@0.33.3: {} + hermes-parser@0.19.1: dependencies: hermes-estree: 0.19.1 - hermes-parser@0.23.1: - dependencies: - hermes-estree: 0.23.1 - hermes-parser@0.25.1: dependencies: hermes-estree: 0.25.1 + hermes-parser@0.32.0: + dependencies: + hermes-estree: 0.32.0 + + hermes-parser@0.32.1: + dependencies: + hermes-estree: 0.32.1 + + hermes-parser@0.33.3: + dependencies: + hermes-estree: 0.33.3 + highlight.js@10.7.3: {} hosted-git-info@7.0.2: @@ -9361,6 +9285,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + human-id@4.1.1: {} human-signals@2.1.0: {} @@ -9373,8 +9304,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - ieee754@1.2.1: {} - ignore@5.3.2: {} image-size@1.2.1: @@ -9398,8 +9327,6 @@ snapshots: imurmurhash@0.1.4: {} - indent-string@4.0.0: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -9407,13 +9334,6 @@ snapshots: inherits@2.0.4: {} - ini@1.3.8: {} - - internal-ip@4.3.0: - dependencies: - default-gateway: 4.2.0 - ipaddr.js: 1.9.1 - internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -9424,10 +9344,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - ip-regex@2.1.0: {} - - ipaddr.js@1.9.1: {} - is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 @@ -9458,8 +9374,6 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-buffer@1.1.6: {} - is-callable@1.2.7: {} is-core-module@2.16.1: @@ -9511,8 +9425,6 @@ snapshots: is-number@7.0.0: {} - is-path-cwd@2.2.0: {} - is-path-inside@3.0.3: {} is-plain-object@2.0.4: @@ -9534,8 +9446,6 @@ snapshots: dependencies: call-bound: 1.0.4 - is-stream@1.1.0: {} - is-stream@2.0.1: {} is-string@1.1.1: @@ -9595,7 +9505,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.26.10 - '@babel/parser': 7.27.0 + '@babel/parser': 7.29.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.1 @@ -9630,12 +9540,6 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jest-changed-files@29.7.0: dependencies: execa: 5.1.1 @@ -9912,10 +9816,10 @@ snapshots: jest-snapshot@29.7.0: dependencies: '@babel/core': 7.26.10 - '@babel/generator': 7.27.0 + '@babel/generator': 7.29.1 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) - '@babel/types': 7.27.0 + '@babel/types': 7.29.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -10001,8 +9905,6 @@ snapshots: jimp-compact@0.16.1: {} - join-component@1.1.0: {} - js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -10100,12 +10002,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -10121,6 +10017,8 @@ snapshots: kleur@3.0.3: {} + lan-network@0.2.1: {} + leven@3.1.0: {} levn@0.4.1: @@ -10135,50 +10033,54 @@ snapshots: transitivePeerDependencies: - supports-color - lightningcss-darwin-arm64@1.27.0: + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: optional: true - lightningcss-darwin-x64@1.27.0: + lightningcss-darwin-x64@1.32.0: optional: true - lightningcss-freebsd-x64@1.27.0: + lightningcss-freebsd-x64@1.32.0: optional: true - lightningcss-linux-arm-gnueabihf@1.27.0: + lightningcss-linux-arm-gnueabihf@1.32.0: optional: true - lightningcss-linux-arm64-gnu@1.27.0: + lightningcss-linux-arm64-gnu@1.32.0: optional: true - lightningcss-linux-arm64-musl@1.27.0: + lightningcss-linux-arm64-musl@1.32.0: optional: true - lightningcss-linux-x64-gnu@1.27.0: + lightningcss-linux-x64-gnu@1.32.0: optional: true - lightningcss-linux-x64-musl@1.27.0: + lightningcss-linux-x64-musl@1.32.0: optional: true - lightningcss-win32-arm64-msvc@1.27.0: + lightningcss-win32-arm64-msvc@1.32.0: optional: true - lightningcss-win32-x64-msvc@1.27.0: + lightningcss-win32-x64-msvc@1.32.0: optional: true - lightningcss@1.27.0: + lightningcss@1.32.0: dependencies: - detect-libc: 1.0.3 + detect-libc: 2.1.2 optionalDependencies: - lightningcss-darwin-arm64: 1.27.0 - lightningcss-darwin-x64: 1.27.0 - lightningcss-freebsd-x64: 1.27.0 - lightningcss-linux-arm-gnueabihf: 1.27.0 - lightningcss-linux-arm64-gnu: 1.27.0 - lightningcss-linux-arm64-musl: 1.27.0 - lightningcss-linux-x64-gnu: 1.27.0 - lightningcss-linux-x64-musl: 1.27.0 - lightningcss-win32-arm64-msvc: 1.27.0 - lightningcss-win32-x64-msvc: 1.27.0 + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 lines-and-columns@1.2.4: {} @@ -10217,6 +10119,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.3.5: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -10253,16 +10157,6 @@ snapshots: math-intrinsics@1.1.0: {} - md5-file@3.2.3: - dependencies: - buffer-alloc: 1.2.0 - - md5@2.3.0: - dependencies: - charenc: 0.0.2 - crypt: 0.0.2 - is-buffer: 1.1.6 - memoize-one@5.2.1: {} merge-stream@2.0.0: {} @@ -10278,16 +10172,38 @@ snapshots: transitivePeerDependencies: - supports-color + metro-babel-transformer@0.83.5: + dependencies: + '@babel/core': 7.26.10 + flow-enums-runtime: 0.0.6 + hermes-parser: 0.33.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-cache-key@0.82.1: dependencies: flow-enums-runtime: 0.0.6 + metro-cache-key@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + metro-cache@0.82.1: dependencies: exponential-backoff: 3.1.2 flow-enums-runtime: 0.0.6 metro-core: 0.82.1 + metro-cache@0.83.5: + dependencies: + exponential-backoff: 3.1.2 + flow-enums-runtime: 0.0.6 + https-proxy-agent: 7.0.6 + metro-core: 0.83.5 + transitivePeerDependencies: + - supports-color + metro-config@0.82.1: dependencies: connect: 3.7.0 @@ -10303,12 +10219,33 @@ snapshots: - supports-color - utf-8-validate + metro-config@0.83.5: + dependencies: + connect: 3.7.0 + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.83.5 + metro-cache: 0.83.5 + metro-core: 0.83.5 + metro-runtime: 0.83.5 + yaml: 2.8.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro-core@0.82.1: dependencies: flow-enums-runtime: 0.0.6 lodash.throttle: 4.1.1 metro-resolver: 0.82.1 + metro-core@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.83.5 + metro-file-map@0.82.1: dependencies: debug: 4.4.0 @@ -10323,24 +10260,52 @@ snapshots: transitivePeerDependencies: - supports-color + metro-file-map@0.83.5: + dependencies: + debug: 4.4.0 + fb-watchman: 2.0.2 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + invariant: 2.2.4 + jest-worker: 29.7.0 + micromatch: 4.0.8 + nullthrows: 1.1.1 + walker: 1.0.8 + transitivePeerDependencies: + - supports-color + metro-minify-terser@0.82.1: dependencies: flow-enums-runtime: 0.0.6 terser: 5.39.0 + metro-minify-terser@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + terser: 5.39.0 + metro-resolver@0.82.1: dependencies: flow-enums-runtime: 0.0.6 + metro-resolver@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + metro-runtime@0.82.1: dependencies: '@babel/runtime': 7.27.0 flow-enums-runtime: 0.0.6 + metro-runtime@0.83.5: + dependencies: + '@babel/runtime': 7.27.0 + flow-enums-runtime: 0.0.6 + metro-source-map@0.82.1: dependencies: '@babel/traverse': 7.27.0 - '@babel/traverse--for-generate-function-map': '@babel/traverse@7.27.0' + '@babel/traverse--for-generate-function-map': '@babel/traverse@7.29.0' '@babel/types': 7.27.0 flow-enums-runtime: 0.0.6 invariant: 2.2.4 @@ -10352,6 +10317,20 @@ snapshots: transitivePeerDependencies: - supports-color + metro-source-map@0.83.5: + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.83.5 + nullthrows: 1.1.1 + ob1: 0.83.5 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-symbolicate@0.82.1: dependencies: flow-enums-runtime: 0.0.6 @@ -10363,6 +10342,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-symbolicate@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-source-map: 0.83.5 + nullthrows: 1.1.1 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-transform-plugins@0.82.1: dependencies: '@babel/core': 7.26.10 @@ -10374,6 +10364,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-transform-plugins@0.83.5: + dependencies: + '@babel/core': 7.26.10 + '@babel/generator': 7.29.1 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-transform-worker@0.82.1: dependencies: '@babel/core': 7.26.10 @@ -10394,6 +10395,26 @@ snapshots: - supports-color - utf-8-validate + metro-transform-worker@0.83.5: + dependencies: + '@babel/core': 7.26.10 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 + flow-enums-runtime: 0.0.6 + metro: 0.83.5 + metro-babel-transformer: 0.83.5 + metro-cache: 0.83.5 + metro-cache-key: 0.83.5 + metro-minify-terser: 0.83.5 + metro-source-map: 0.83.5 + metro-transform-plugins: 0.83.5 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro@0.82.1: dependencies: '@babel/code-frame': 7.26.2 @@ -10441,6 +10462,53 @@ snapshots: - supports-color - utf-8-validate + metro@0.83.5: + dependencies: + '@babel/code-frame': 7.29.0 + '@babel/core': 7.26.10 + '@babel/generator': 7.29.1 + '@babel/parser': 7.29.2 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + accepts: 2.0.0 + chalk: 4.1.2 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 4.4.0 + error-stack-parser: 2.1.4 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + hermes-parser: 0.33.3 + image-size: 1.2.1 + invariant: 2.2.4 + jest-worker: 29.7.0 + jsc-safe-url: 0.2.4 + lodash.throttle: 4.1.1 + metro-babel-transformer: 0.83.5 + metro-cache: 0.83.5 + metro-cache-key: 0.83.5 + metro-config: 0.83.5 + metro-core: 0.83.5 + metro-file-map: 0.83.5 + metro-resolver: 0.83.5 + metro-runtime: 0.83.5 + metro-source-map: 0.83.5 + metro-symbolicate: 0.83.5 + metro-transform-plugins: 0.83.5 + metro-transform-worker: 0.83.5 + mime-types: 3.0.2 + nullthrows: 1.1.1 + serialize-error: 2.1.0 + source-map: 0.5.7 + throat: 5.0.0 + ws: 7.5.10 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -10454,12 +10522,20 @@ snapshots: dependencies: mime-db: 1.52.0 + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + mime@1.6.0: {} mimic-fn@1.2.0: {} mimic-fn@2.1.0: {} + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -10468,36 +10544,9 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.5: - dependencies: - brace-expansion: 2.0.1 - minimist@1.2.8: {} - minipass-collect@2.0.1: - dependencies: - minipass: 7.1.2 - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - - minipass@7.1.2: {} - - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 + minipass@7.1.3: {} mkdirp@0.5.6: dependencies: @@ -10511,6 +10560,8 @@ snapshots: ms@2.1.3: {} + multitars@0.2.5: {} + mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -10525,11 +10576,9 @@ snapshots: negotiator@0.6.4: {} - neo-async@2.6.2: {} - - nested-error-stacks@2.0.1: {} + negotiator@1.0.0: {} - nice-try@1.0.5: {} + neo-async@2.6.2: {} node-dir@0.1.17: dependencies: @@ -10542,16 +10591,14 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - - node-forge@1.3.1: {} + node-forge@1.4.0: {} node-int64@0.4.0: {} node-releases@2.0.19: {} + node-releases@2.0.37: {} + normalize-path@3.0.0: {} npm-package-arg@11.0.3: @@ -10561,10 +10608,6 @@ snapshots: semver: 7.7.1 validate-npm-package-name: 5.0.1 - npm-run-path@2.0.2: - dependencies: - path-key: 2.0.1 - npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -10577,6 +10620,10 @@ snapshots: dependencies: flow-enums-runtime: 0.0.6 + ob1@0.83.5: + dependencies: + flow-enums-runtime: 0.0.6 + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -10730,8 +10777,6 @@ snapshots: dependencies: p-map: 2.1.0 - p-finally@1.0.0: {} - p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -10754,14 +10799,8 @@ snapshots: p-map@2.1.0: {} - p-map@4.0.0: - dependencies: - aggregate-error: 3.1.0 - p-try@2.2.0: {} - package-json-from-dist@1.0.1: {} - package-manager-detector@0.2.11: dependencies: quansync: 0.2.10 @@ -10777,7 +10816,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.29.0 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -10806,16 +10845,14 @@ snapshots: path-is-absolute@1.0.1: {} - path-key@2.0.1: {} - path-key@3.1.1: {} path-parse@1.0.7: {} - path-scurry@1.11.1: + path-scurry@2.0.2: dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 + lru-cache: 11.3.5 + minipass: 7.1.3 path-type@4.0.0: {} @@ -10823,7 +10860,7 @@ snapshots: picomatch@2.3.1: {} - picomatch@3.0.1: {} + picomatch@4.0.4: {} pify@4.0.1: {} @@ -10861,8 +10898,6 @@ snapshots: prettier@2.8.8: {} - pretty-bytes@5.6.0: {} - pretty-format@24.9.0: dependencies: '@jest/types': 24.9.0 @@ -10880,10 +10915,6 @@ snapshots: progress@2.0.3: {} - promise@7.3.1: - dependencies: - asap: 2.0.6 - promise@8.3.0: dependencies: asap: 2.0.6 @@ -10903,17 +10934,10 @@ snapshots: dependencies: punycode: 2.3.1 - pump@3.0.2: - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - punycode@2.3.1: {} pure-rand@6.1.0: {} - qrcode-terminal@0.11.0: {} - quansync@0.2.10: {} querystringify@2.2.0: {} @@ -10926,13 +10950,6 @@ snapshots: range-parser@1.2.1: {} - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - react-devtools-core@6.1.1: dependencies: shell-quote: 1.8.2 @@ -11085,18 +11102,10 @@ snapshots: dependencies: jsesc: 3.0.2 - remove-trailing-slash@0.1.1: {} - require-directory@2.1.1: {} require-from-string@2.0.2: {} - requireg@0.2.2: - dependencies: - nested-error-stacks: 2.0.1 - rc: 1.2.8 - resolve: 1.7.1 - requires-port@1.0.0: {} resolve-cwd@3.0.0: @@ -11119,10 +11128,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@1.7.1: - dependencies: - path-parse: 1.0.7 - resolve@2.0.0-next.5: dependencies: is-core-module: 2.16.1 @@ -11183,11 +11188,6 @@ snapshots: scheduler@0.25.0: {} - selfsigned@2.4.1: - dependencies: - '@types/node-forge': 1.3.11 - node-forge: 1.3.1 - semver@5.7.2: {} semver@6.3.1: {} @@ -11263,24 +11263,16 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - setimmediate@1.0.5: {} - setprototypeof@1.2.0: {} shallow-clone@3.0.1: dependencies: kind-of: 6.0.3 - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - shebang-regex@1.0.0: {} - shebang-regex@3.0.0: {} shell-quote@1.8.2: {} @@ -11360,16 +11352,8 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - split@1.0.1: - dependencies: - through: 2.3.8 - sprintf-js@1.0.3: {} - ssri@10.0.6: - dependencies: - minipass: 7.1.2 - stack-generator@2.0.10: dependencies: stackframe: 1.3.4 @@ -11417,12 +11401,6 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.8 @@ -11483,12 +11461,8 @@ snapshots: strip-bom@4.0.0: {} - strip-eof@1.0.0: {} - strip-final-newline@2.0.0: {} - strip-json-comments@2.0.1: {} - strip-json-comments@3.1.1: {} structured-headers@0.4.1: {} @@ -11503,18 +11477,6 @@ snapshots: pirates: 4.0.7 ts-interface-checker: 0.1.13 - sucrase@3.35.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - commander: 4.1.1 - glob: 10.4.5 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - ts-interface-checker: 0.1.13 - - sudo-prompt@9.1.1: {} - supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -11546,29 +11508,10 @@ snapshots: '@pkgr/core': 0.2.4 tslib: 2.8.1 - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - - temp-dir@2.0.0: {} - temp@0.8.4: dependencies: rimraf: 2.6.3 - tempy@0.7.1: - dependencies: - del: 6.1.1 - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - term-size@2.2.1: {} terminal-link@2.1.1: @@ -11601,8 +11544,6 @@ snapshots: throat@5.0.0: {} - through@2.3.8: {} - tinypool@2.1.0: {} tmp@0.0.33: @@ -11617,6 +11558,8 @@ snapshots: toidentifier@1.0.1: {} + toqr@0.1.1: {} + tough-cookie@4.1.4: dependencies: psl: 1.15.0 @@ -11624,8 +11567,6 @@ snapshots: universalify: 0.2.0 url-parse: 1.5.10 - tr46@0.0.3: {} - tr46@3.0.0: dependencies: punycode: 2.3.1 @@ -11670,8 +11611,6 @@ snapshots: type-detect@4.0.8: {} - type-fest@0.16.0: {} - type-fest@0.20.2: {} type-fest@0.21.3: {} @@ -11715,8 +11654,6 @@ snapshots: typescript@5.8.3: {} - ua-parser-js@1.0.40: {} - unbox-primitive@1.1.0: dependencies: call-bound: 1.0.4 @@ -11726,8 +11663,6 @@ snapshots: undici-types@6.21.0: {} - undici@6.21.2: {} - unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-emoji-modifier-base@1.0.0: {} @@ -11741,26 +11676,10 @@ snapshots: unicode-property-aliases-ecmascript@2.1.0: {} - unique-filename@3.0.0: - dependencies: - unique-slug: 4.0.0 - - unique-slug@4.0.0: - dependencies: - imurmurhash: 0.1.4 - - unique-string@2.0.0: - dependencies: - crypto-random-string: 2.0.0 - universalify@0.1.2: {} universalify@0.2.0: {} - universalify@1.0.0: {} - - universalify@2.0.1: {} - unpipe@1.0.0: {} update-browserslist-db@1.1.3(browserslist@4.24.4): @@ -11769,6 +11688,12 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + update-browserslist-db@1.2.3(browserslist@4.28.2): + dependencies: + browserslist: 4.28.2 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -11782,11 +11707,9 @@ snapshots: uuid@7.0.3: {} - uuid@8.3.2: {} - v8-to-istanbul@9.3.0: dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 @@ -11808,12 +11731,6 @@ snapshots: dependencies: defaults: 1.0.4 - web-streams-polyfill@3.3.3: {} - - webidl-conversions@3.0.1: {} - - webidl-conversions@5.0.0: {} - webidl-conversions@7.0.0: {} whatwg-encoding@2.0.0: @@ -11824,22 +11741,13 @@ snapshots: whatwg-mimetype@3.0.0: {} - whatwg-url-without-unicode@8.0.0-3: - dependencies: - buffer: 5.7.1 - punycode: 2.3.1 - webidl-conversions: 5.0.0 + whatwg-url-minimum@0.1.1: {} whatwg-url@11.0.0: dependencies: tr46: 3.0.0 webidl-conversions: 7.0.0 - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -11881,16 +11789,10 @@ snapshots: gopd: 1.2.0 has-tostringtag: 1.0.2 - which@1.3.1: - dependencies: - isexe: 2.0.0 - which@2.0.2: dependencies: isexe: 2.0.0 - wonka@6.3.5: {} - word-wrap@1.2.5: {} wrap-ansi@7.0.0: @@ -11899,12 +11801,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - wrappy@1.0.2: {} write-file-atomic@2.4.3: @@ -11950,7 +11846,7 @@ snapshots: yallist@3.1.1: {} - yallist@4.0.0: {} + yaml@2.8.3: {} yargs-parser@20.2.9: {} @@ -11983,3 +11879,5 @@ snapshots: zod: 3.24.3 zod@3.24.3: {} + + zod@3.25.76: {} diff --git a/src/ReactNativePasskeys.types.ts b/src/ReactNativePasskeys.types.ts index 0a4d888..331d960 100644 --- a/src/ReactNativePasskeys.types.ts +++ b/src/ReactNativePasskeys.types.ts @@ -72,6 +72,35 @@ export interface PublicKeyCredentialRequestOptionsJSON { extensions?: AuthenticationExtensionsClientInputs; } +export type AccountCreationContactIdentifierType = "email" | "phoneNumber"; + +export interface FastAccountCreationOptions { + acceptedContactIdentifiers: AccountCreationContactIdentifierType[]; + challenge: Base64URLString; + rpId: string; + shouldRequestName?: boolean; + userId: Base64URLString; +} + +export interface PersonNameComponentsJSON { + namePrefix?: string; + givenName?: string; + middleName?: string; + familyName?: string; + nameSuffix?: string; + nickname?: string; +} + +export interface AccountCreationContactIdentifier { + type: AccountCreationContactIdentifierType; + value: string; +} + +export interface AccountCreationDetails { + contactIdentifier: AccountCreationContactIdentifier; + name?: PersonNameComponentsJSON; +} + /** * A slightly-modified RegistrationCredential to simplify working with ArrayBuffers that * are Base64URL-encoded so that they can be sent as JSON. @@ -255,3 +284,7 @@ export interface CreationResponse extends Omit { + account: AccountCreationDetails; +} diff --git a/src/ReactNativePasskeysModule.ts b/src/ReactNativePasskeysModule.ts index 22b8020..f0d2ca9 100644 --- a/src/ReactNativePasskeysModule.ts +++ b/src/ReactNativePasskeysModule.ts @@ -3,6 +3,8 @@ import { requireNativeModule } from "expo-modules-core"; import { NotSupportedError } from "./errors"; import type { + AccountCreationResponse, + FastAccountCreationOptions, PublicKeyCredentialCreationOptionsJSON, CreationResponse, } from "./ReactNativePasskeys.types"; @@ -28,4 +30,23 @@ export default { }, }; }, + + isAccountCreationSupported(): boolean { + return passkeys.isAccountCreationSupported?.() ?? false; + }, + + async createAccount(request: FastAccountCreationOptions): Promise { + if (!this.isAccountCreationSupported()) throw new NotSupportedError(); + + const credential = await passkeys.createAccount(request); + return { + ...credential, + response: { + ...credential.response, + getPublicKey() { + return credential.response?.publicKey; + }, + }, + }; + }, }; diff --git a/src/ReactNativePasskeysModule.web.ts b/src/ReactNativePasskeysModule.web.ts index 06cadfd..6863eb8 100644 --- a/src/ReactNativePasskeysModule.web.ts +++ b/src/ReactNativePasskeysModule.web.ts @@ -3,11 +3,13 @@ import { base64URLStringToBuffer, bufferToBase64URLString } from "./utils/base64 import { normalizePRFInputs } from "./utils/prf"; import type { + AccountCreationResponse, AuthenticationCredential, AuthenticationExtensionsClientInputs, AuthenticationExtensionsClientOutputs, AuthenticationExtensionsClientOutputsJSON, AuthenticationResponseJSON, + FastAccountCreationOptions, PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON, RegistrationCredential, @@ -29,6 +31,10 @@ export default { ); }, + isAccountCreationSupported() { + return false; + }, + async create({ signal, ...request @@ -182,6 +188,14 @@ export default { type: "public-key", }; }, + + async createAccount( + _request: FastAccountCreationOptions, + ): Promise { + throw new NotSupportedError( + "Fast account creation with passkeys is only available through the native iOS API.", + ); + }, }; /** diff --git a/src/__tests__/ReactNativePasskeysModule-test.ts b/src/__tests__/ReactNativePasskeysModule-test.ts new file mode 100644 index 0000000..f33f9b8 --- /dev/null +++ b/src/__tests__/ReactNativePasskeysModule-test.ts @@ -0,0 +1,77 @@ +const mockNativeModule = { + isSupported: jest.fn(() => true), + isAccountCreationSupported: jest.fn(() => true), + createAccount: jest.fn(), +}; + +jest.mock("expo-modules-core", () => ({ + requireNativeModule: jest.fn(() => mockNativeModule), +})); + +describe("ReactNativePasskeysModule.createAccount", () => { + beforeEach(() => { + jest.clearAllMocks(); + jest.resetModules(); + mockNativeModule.isSupported.mockReturnValue(true); + mockNativeModule.isAccountCreationSupported.mockReturnValue(true); + }); + + it("wraps the native account creation response with getPublicKey", async () => { + mockNativeModule.createAccount.mockResolvedValue({ + id: "credential-id", + rawId: "credential-id", + type: "public-key", + account: { + contactIdentifier: { + type: "email", + value: "andrew@example.com", + }, + }, + response: { + clientDataJSON: "client-data", + attestationObject: "attestation-object", + publicKey: "public-key", + }, + clientExtensionResults: {}, + }); + + const module = require("../ReactNativePasskeysModule").default; + const response = await module.createAccount({ + acceptedContactIdentifiers: ["email", "phoneNumber"], + challenge: "challenge", + rpId: "example.com", + shouldRequestName: true, + userId: "user-id", + }); + + expect(mockNativeModule.createAccount).toHaveBeenCalledWith({ + acceptedContactIdentifiers: ["email", "phoneNumber"], + challenge: "challenge", + rpId: "example.com", + shouldRequestName: true, + userId: "user-id", + }); + expect(response?.account.contactIdentifier).toEqual({ + type: "email", + value: "andrew@example.com", + }); + expect(response?.response.getPublicKey()).toBe("public-key"); + }); + + it("throws when account creation is not supported", async () => { + mockNativeModule.isAccountCreationSupported.mockReturnValue(false); + + const module = require("../ReactNativePasskeysModule").default; + + await expect( + module.createAccount({ + acceptedContactIdentifiers: ["email"], + challenge: "challenge", + rpId: "example.com", + userId: "user-id", + }), + ).rejects.toMatchObject({ + name: "NotSupportedError", + }); + }); +}); diff --git a/src/index.ts b/src/index.ts index 8713ab6..fafecb7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,9 +3,11 @@ import ReactNativePasskeysModule from "./ReactNativePasskeysModule"; import type { + AccountCreationResponse, AuthenticationExtensionsLargeBlobInputs, AuthenticationExtensionsPRFInputs, AuthenticationResponseJSON, + FastAccountCreationOptions, PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON, CreationResponse, @@ -19,6 +21,10 @@ export function isAutoFillAvalilable(): boolean { return ReactNativePasskeysModule.isAutoFillAvalilable(); } +export function isAccountCreationSupported(): boolean { + return ReactNativePasskeysModule.isAccountCreationSupported(); +} + export async function create( request: Omit & { // Platform support: @@ -50,3 +56,9 @@ export async function get( ): Promise { return await ReactNativePasskeysModule.get(request); } + +export async function createAccount( + request: FastAccountCreationOptions, +): Promise { + return await ReactNativePasskeysModule.createAccount(request); +} From a86529b2c23b187dfe5b524cf7e0444d26b3bf4b Mon Sep 17 00:00:00 2001 From: christopherwxyz Date: Fri, 24 Apr 2026 12:39:27 -0400 Subject: [PATCH 2/2] chore: publish as @officialunofficial/react-native-passkeys on npm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Makes this fork installable as a regular npm dep instead of a git-SHA tarball. Consumers (CF Workers Builds, EAS, dev laptops) no longer hit the pnpm-git-dep prepare path, which was fragile on minimal CI containers (rsync missing, corepack→yarn surprises). Changes: - Rename package to @officialunofficial/react-native-passkeys - Drop the `prepare` lifecycle script (upstream had it running `expo-module prepare` on every install; we ship `build/` pre- committed instead). - Commit `build/` and narrow `.gitignore` so Xcode's `ios/build/` stays ignored but the TS output is tracked. - Add `.github/workflows/publish.yml` — manual dispatch, builds with pnpm, publishes to npmjs.com with `--provenance`. - Tokenless OIDC via npm Trusted Publisher: `id-token: write` permission + `registry-url` set; no NPM_TOKEN secret in the workflow. Every publish ships a sigstore attestation tying the tarball to this exact workflow run. - Add `publishConfig.access: "public"` + `publishConfig.provenance: true`. - Drop `prepublishOnly: expo-module prepublishOnly` (broken upstream — invokes `npx proofread` which can't resolve). Our workflow handles build/lint/typecheck itself. Feature commit (fast account creation + targeted assertion support) stays separate on top of upstream so the fork's divergence is immediately legible: one feature + one publishing change. --- .github/workflows/publish.yml | 74 ++++++ .gitignore | 7 +- build/ReactNativePasskeys.types.d.ts | 214 ++++++++++++++++++ build/ReactNativePasskeys.types.d.ts.map | 1 + build/ReactNativePasskeys.types.js | 2 + build/ReactNativePasskeys.types.js.map | 1 + build/ReactNativePasskeysModule.d.ts | 3 + build/ReactNativePasskeysModule.d.ts.map | 1 + build/ReactNativePasskeysModule.js | 40 ++++ build/ReactNativePasskeysModule.js.map | 1 + build/ReactNativePasskeysModule.web.d.ts | 12 + build/ReactNativePasskeysModule.web.d.ts.map | 1 + build/ReactNativePasskeysModule.web.js | 167 ++++++++++++++ build/ReactNativePasskeysModule.web.js.map | 1 + build/errors.d.ts | 16 ++ build/errors.d.ts.map | 1 + build/errors.js | 19 ++ build/errors.js.map | 1 + build/index.d.ts | 19 ++ build/index.d.ts.map | 1 + build/index.js | 22 ++ build/index.js.map | 1 + build/utils/base64.d.ts | 16 ++ build/utils/base64.d.ts.map | 1 + build/utils/base64.js | 46 ++++ build/utils/base64.js.map | 1 + build/utils/prf.d.ts | 12 + build/utils/prf.d.ts.map | 1 + build/utils/prf.js | 41 ++++ build/utils/prf.js.map | 1 + ...n-user-of-missing-webauthn-extensions.d.ts | 6 + ...er-of-missing-webauthn-extensions.d.ts.map | 1 + ...arn-user-of-missing-webauthn-extensions.js | 13 ++ ...user-of-missing-webauthn-extensions.js.map | 1 + package.json | 21 +- 35 files changed, 756 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/publish.yml create mode 100644 build/ReactNativePasskeys.types.d.ts create mode 100644 build/ReactNativePasskeys.types.d.ts.map create mode 100644 build/ReactNativePasskeys.types.js create mode 100644 build/ReactNativePasskeys.types.js.map create mode 100644 build/ReactNativePasskeysModule.d.ts create mode 100644 build/ReactNativePasskeysModule.d.ts.map create mode 100644 build/ReactNativePasskeysModule.js create mode 100644 build/ReactNativePasskeysModule.js.map create mode 100644 build/ReactNativePasskeysModule.web.d.ts create mode 100644 build/ReactNativePasskeysModule.web.d.ts.map create mode 100644 build/ReactNativePasskeysModule.web.js create mode 100644 build/ReactNativePasskeysModule.web.js.map create mode 100644 build/errors.d.ts create mode 100644 build/errors.d.ts.map create mode 100644 build/errors.js create mode 100644 build/errors.js.map create mode 100644 build/index.d.ts create mode 100644 build/index.d.ts.map create mode 100644 build/index.js create mode 100644 build/index.js.map create mode 100644 build/utils/base64.d.ts create mode 100644 build/utils/base64.d.ts.map create mode 100644 build/utils/base64.js create mode 100644 build/utils/base64.js.map create mode 100644 build/utils/prf.d.ts create mode 100644 build/utils/prf.d.ts.map create mode 100644 build/utils/prf.js create mode 100644 build/utils/prf.js.map create mode 100644 build/utils/warn-user-of-missing-webauthn-extensions.d.ts create mode 100644 build/utils/warn-user-of-missing-webauthn-extensions.d.ts.map create mode 100644 build/utils/warn-user-of-missing-webauthn-extensions.js create mode 100644 build/utils/warn-user-of-missing-webauthn-extensions.js.map diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..4339354 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,74 @@ +name: Publish to npm + +# Manual-only for now. Flip to a tag-push or version-bump trigger once we have +# a release cadence we like. `workflow_dispatch` keeps the first publish (and +# any future one-offs) under human control. +on: + workflow_dispatch: + inputs: + dry_run: + description: 'Run npm publish with --dry-run (no registry write).' + required: false + default: false + type: boolean + +# Package-name-scoped concurrency: one publish at a time, never cancelled +# mid-flight (npm publishes aren't safely interruptable). +concurrency: + group: publish-npm + cancel-in-progress: false + +permissions: + contents: read + # OIDC: npm exchanges this token for a short-lived publish credential via + # the Trusted Publisher configured on `@officialunofficial/react-native-passkeys`. + # No NPM_TOKEN secret needed; every publish also gets a signed provenance + # attestation in sigstore's transparency log. + id-token: write + +jobs: + publish: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Set up pnpm + uses: pnpm/action-setup@v6 + with: + version: '10' + + - name: Set up Node + uses: actions/setup-node@v6 + with: + # Node 22 ships with npm 11, which has native Trusted Publisher + # OIDC support. On Node 20's npm 10, `npm publish` can't exchange + # the GH OIDC token for a publish credential and falls through to + # unauthenticated → 404. + node-version: '22' + cache: 'pnpm' + registry-url: 'https://registry.npmjs.org' + scope: '@officialunofficial' + + + - name: Install + run: pnpm install --frozen-lockfile + + - name: Build + run: pnpm run build + + - name: Check exports (types) + run: pnpm run check-exports + + # Trusted Publisher OIDC requires npm >= 11.5.1. Node 22 ships npm 10, + # so we run the latest npm ephemerally via `npx`. This avoids the + # `npm install -g npm@latest` self-upgrade bug (missing promise-retry + # in the reify path) while still getting OIDC support per publish. + - name: Publish + run: | + if [ "${{ inputs.dry_run }}" = "true" ]; then + npx -y npm@latest publish --provenance --access public --dry-run + else + npx -y npm@latest publish --provenance --access public + fi diff --git a/.gitignore b/.gitignore index d00ff2c..26f093e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,9 +6,12 @@ .vscode/ jsconfig.json -# Xcode +# Xcode — only ignore the iOS Xcode build dir, not the root `build/` (which is +# our TypeScript output; committed so consumers don't re-run `expo-module build` +# on install — avoids CF Workers Builds' yarn-via-corepack quirk). # -build/ +ios/build/ +example/ios/build/ *.pbxuser !default.pbxuser *.mode1v3 diff --git a/build/ReactNativePasskeys.types.d.ts b/build/ReactNativePasskeys.types.d.ts new file mode 100644 index 0000000..0a4a5a6 --- /dev/null +++ b/build/ReactNativePasskeys.types.d.ts @@ -0,0 +1,214 @@ +import type { AuthenticationExtensionsClientInputs as TypeScriptAuthenticationExtensionsClientInputs, Base64URLString, AuthenticatorTransportFuture, PublicKeyCredentialJSON, PublicKeyCredentialDescriptorJSON, PublicKeyCredentialUserEntityJSON, AuthenticatorAttestationResponseJSON } from "@simplewebauthn/typescript-types"; +export type { AttestationConveyancePreference, AuthenticationCredential, AuthenticatorAssertionResponse, AuthenticatorAttachment, AuthenticatorAttestationResponse, AuthenticatorSelectionCriteria, AuthenticatorTransport, COSEAlgorithmIdentifier, Crypto, PublicKeyCredentialCreationOptions, PublicKeyCredentialDescriptor, PublicKeyCredentialParameters, PublicKeyCredentialRequestOptions, PublicKeyCredentialRpEntity, PublicKeyCredentialType, PublicKeyCredentialUserEntity, RegistrationCredential, UserVerificationRequirement, } from "@simplewebauthn/typescript-types"; +export type { Base64URLString, PublicKeyCredentialJSON, AuthenticatorTransportFuture, PublicKeyCredentialDescriptorJSON, PublicKeyCredentialUserEntityJSON, AuthenticatorAttestationResponseJSON, }; +/** + * A variant of PublicKeyCredentialCreationOptions suitable for JSON transmission + * + * This should eventually get replaced with official TypeScript DOM types when WebAuthn L3 types + * eventually make it into the language: + * + * - Specification reference: https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson + */ +export interface PublicKeyCredentialCreationOptionsJSON { + rp: PublicKeyCredentialRpEntity; + user: PublicKeyCredentialUserEntityJSON; + challenge: Base64URLString; + pubKeyCredParams: PublicKeyCredentialParameters[]; + timeout?: number; + excludeCredentials?: PublicKeyCredentialDescriptorJSON[]; + authenticatorSelection?: AuthenticatorSelectionCriteria; + attestation?: AttestationConveyancePreference; + extensions?: AuthenticationExtensionsClientInputs; +} +/** + * A variant of PublicKeyCredentialRequestOptions suitable for JSON transmission + */ +export interface PublicKeyCredentialRequestOptionsJSON { + challenge: Base64URLString; + timeout?: number; + rpId?: string; + allowCredentials?: PublicKeyCredentialDescriptorJSON[]; + userVerification?: UserVerificationRequirement; + extensions?: AuthenticationExtensionsClientInputs; +} +export type AccountCreationContactIdentifierType = "email" | "phoneNumber"; +export interface FastAccountCreationOptions { + acceptedContactIdentifiers: AccountCreationContactIdentifierType[]; + challenge: Base64URLString; + rpId: string; + shouldRequestName?: boolean; + userId: Base64URLString; +} +export interface PersonNameComponentsJSON { + namePrefix?: string; + givenName?: string; + middleName?: string; + familyName?: string; + nameSuffix?: string; + nickname?: string; +} +export interface AccountCreationContactIdentifier { + type: AccountCreationContactIdentifierType; + value: string; +} +export interface AccountCreationDetails { + contactIdentifier: AccountCreationContactIdentifier; + name?: PersonNameComponentsJSON; +} +/** + * A slightly-modified RegistrationCredential to simplify working with ArrayBuffers that + * are Base64URL-encoded so that they can be sent as JSON. + * + * - Specification reference: https://w3c.github.io/webauthn/#dictdef-registrationresponsejson + */ +export interface RegistrationResponseJSON { + id: Base64URLString; + rawId: Base64URLString; + response: AuthenticatorAttestationResponseJSON; + authenticatorAttachment?: AuthenticatorAttachment; + clientExtensionResults: AuthenticationExtensionsClientOutputsJSON; + type: PublicKeyCredentialType; +} +/** + * A slightly-modified AuthenticationCredential to simplify working with ArrayBuffers that + * are Base64URL-encoded so that they can be sent as JSON. + * + * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationresponsejson + */ +export interface AuthenticationResponseJSON { + id: Base64URLString; + rawId: Base64URLString; + response: AuthenticatorAssertionResponseJSON; + authenticatorAttachment?: AuthenticatorAttachment; + clientExtensionResults: AuthenticationExtensionsClientOutputsJSON; + type: PublicKeyCredentialType; +} +/** + * A slightly-modified AuthenticatorAssertionResponse to simplify working with ArrayBuffers that + * are Base64URL-encoded so that they can be sent as JSON. + * + * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticatorassertionresponsejson + */ +export interface AuthenticatorAssertionResponseJSON { + clientDataJSON: Base64URLString; + authenticatorData: Base64URLString; + signature: Base64URLString; + userHandle?: string; +} +/** + * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationextensionsprfinputs + */ +export interface AuthenticationExtensionsPRFInputs { + /** + * A single set of PRF inputs to evaluate for the selected credential. + */ + eval?: { + first: Base64URLString; + second?: Base64URLString; + }; + /** + * A record mapping base64url-encoded credential IDs to PRF inputs. + * Only valid during authentication when allowCredentials is specified. + * Each credential can have different PRF inputs evaluated. + */ + evalByCredential?: Record; +} +/** + * TypeScript's types are behind the latest extensions spec, so we define them here. + * Should eventually be replaced by TypeScript's when TypeScript gets updated to + * know about it (sometime after 5.3) + * + * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationextensionsclientinputs + */ +export interface AuthenticationExtensionsClientInputs extends TypeScriptAuthenticationExtensionsClientInputs { + largeBlob?: AuthenticationExtensionsLargeBlobInputs; + prf?: AuthenticationExtensionsPRFInputs; +} +export type LargeBlobSupport = "preferred" | "required"; +/** + * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationextensionslargeblobinputs + */ +export interface AuthenticationExtensionsLargeBlobInputs { + support?: LargeBlobSupport; + read?: boolean; + write?: Base64URLString; +} +export interface AuthenticationExtensionsClientOutputs { + largeBlob?: Omit & { + blob?: ArrayBuffer; + }; + prf?: Omit & { + results: { + first: ArrayBuffer; + second?: ArrayBuffer; + }; + }; + credProps?: CredentialPropertiesOutput; +} +export interface AuthenticationExtensionsClientOutputsJSON { + largeBlob?: AuthenticationExtensionsLargeBlobOutputs; + prf?: AuthenticationExtensionsPRFOutputsJSON; + credProps?: CredentialPropertiesOutput; +} +/** + * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationextensionslargebloboutputs + */ +export interface AuthenticationExtensionsLargeBlobOutputs { + supported?: boolean; + blob?: Base64URLString; + written?: boolean; +} +/** + * - Specification reference: https://w3c.github.io/webauthn/#dictdef-credentialpropertiesoutput + */ +export interface CredentialPropertiesOutput { + /** + * This OPTIONAL property, known abstractly as the resident key credential property (i.e., client-side + * discoverable credential property), is a Boolean value indicating whether the PublicKeyCredential + * returned as a result of a registration ceremony is a client-side discoverable credential (passkey). + * + * If rk is true, the credential is a discoverable credential (resident key/passkey). + * If rk is false, the credential is a server-side credential. + * If rk is not present, it is not known whether the credential is a discoverable credential or not. + */ + rk?: boolean; +} +/** + * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationextensionsprfvalues + */ +export interface AuthenticationExtensionsPRFValuesJSON { + first: Base64URLString; + second?: Base64URLString; +} +/** + * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationextensionsprfoutputs + */ +export interface AuthenticationExtensionsPRFOutputsJSON { + enabled?: boolean; + results?: AuthenticationExtensionsPRFValuesJSON; +} +/** + * A library specific type that combines the JSON results of a registration operation with a method + * to get the public key of the new credential since these are not available directly from the native side + */ +export interface CreationResponse extends Omit { + response: RegistrationResponseJSON["response"] & { + /** + * This operation returns a Base64URLString containing the DER SubjectPublicKeyInfo of the new credential, or null if this is not available. + * + * **Note:** This deviates from the standard Web Authentication API, which returns `ArrayBuffer | null` on web browsers. + * For cross-platform consistency, this library converts the ArrayBuffer to Base64URLString on web platforms, + * matching the native iOS/Android behavior where binary data is transmitted as Base64URL-encoded strings. + * + * @see https://w3c.github.io/webauthn/#dom-authenticatorattestationresponse-getpublickey + */ + getPublicKey(): Base64URLString | null; + }; +} +export interface AccountCreationResponse extends Omit { + account: AccountCreationDetails; +} +//# sourceMappingURL=ReactNativePasskeys.types.d.ts.map \ No newline at end of file diff --git a/build/ReactNativePasskeys.types.d.ts.map b/build/ReactNativePasskeys.types.d.ts.map new file mode 100644 index 0000000..09ff819 --- /dev/null +++ b/build/ReactNativePasskeys.types.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ReactNativePasskeys.types.d.ts","sourceRoot":"","sources":["../src/ReactNativePasskeys.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEX,oCAAoC,IAAI,8CAA8C,EAEtF,eAAe,EACf,4BAA4B,EAC5B,uBAAuB,EACvB,iCAAiC,EACjC,iCAAiC,EACjC,oCAAoC,EACpC,MAAM,kCAAkC,CAAC;AAE1C,YAAY,EACX,+BAA+B,EAC/B,wBAAwB,EACxB,8BAA8B,EAC9B,uBAAuB,EACvB,gCAAgC,EAChC,8BAA8B,EAC9B,sBAAsB,EACtB,uBAAuB,EACvB,MAAM,EACN,kCAAkC,EAClC,6BAA6B,EAC7B,6BAA6B,EAC7B,iCAAiC,EACjC,2BAA2B,EAC3B,uBAAuB,EACvB,6BAA6B,EAC7B,sBAAsB,EACtB,2BAA2B,GAC3B,MAAM,kCAAkC,CAAC;AAE1C,YAAY,EACX,eAAe,EACf,uBAAuB,EACvB,4BAA4B,EAC5B,iCAAiC,EACjC,iCAAiC,EACjC,oCAAoC,GACpC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,WAAW,sCAAsC;IACtD,EAAE,EAAE,2BAA2B,CAAC;IAChC,IAAI,EAAE,iCAAiC,CAAC;IACxC,SAAS,EAAE,eAAe,CAAC;IAC3B,gBAAgB,EAAE,6BAA6B,EAAE,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,iCAAiC,EAAE,CAAC;IACzD,sBAAsB,CAAC,EAAE,8BAA8B,CAAC;IACxD,WAAW,CAAC,EAAE,+BAA+B,CAAC;IAC9C,UAAU,CAAC,EAAE,oCAAoC,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,qCAAqC;IACrD,SAAS,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,iCAAiC,EAAE,CAAC;IACvD,gBAAgB,CAAC,EAAE,2BAA2B,CAAC;IAC/C,UAAU,CAAC,EAAE,oCAAoC,CAAC;CAClD;AAED,MAAM,MAAM,oCAAoC,GAAG,OAAO,GAAG,aAAa,CAAC;AAE3E,MAAM,WAAW,0BAA0B;IAC1C,0BAA0B,EAAE,oCAAoC,EAAE,CAAC;IACnE,SAAS,EAAE,eAAe,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gCAAgC;IAChD,IAAI,EAAE,oCAAoC,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACtC,iBAAiB,EAAE,gCAAgC,CAAC;IACpD,IAAI,CAAC,EAAE,wBAAwB,CAAC;CAChC;AAED;;;;;GAKG;AACH,MAAM,WAAW,wBAAwB;IACxC,EAAE,EAAE,eAAe,CAAC;IACpB,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,oCAAoC,CAAC;IAC/C,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,sBAAsB,EAAE,yCAAyC,CAAC;IAClE,IAAI,EAAE,uBAAuB,CAAC;CAC9B;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IAC1C,EAAE,EAAE,eAAe,CAAC;IACpB,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,kCAAkC,CAAC;IAC7C,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAClD,sBAAsB,EAAE,yCAAyC,CAAC;IAClE,IAAI,EAAE,uBAAuB,CAAC;CAC9B;AAED;;;;;GAKG;AACH,MAAM,WAAW,kCAAkC;IAClD,cAAc,EAAE,eAAe,CAAC;IAChC,iBAAiB,EAAE,eAAe,CAAC;IACnC,SAAS,EAAE,eAAe,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iCAAiC;IACjD;;OAEG;IACH,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,MAAM,CAAC,EAAE,eAAe,CAAA;KAAE,CAAC;IAE5D;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,eAAe,EAAE;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,MAAM,CAAC,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;CACjG;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oCAAqC,SAAQ,8CAA8C;IAC3G,SAAS,CAAC,EAAE,uCAAuC,CAAC;IACpD,GAAG,CAAC,EAAE,iCAAiC,CAAC;CACxC;AAED,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,UAAU,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,uCAAuC;IAEvD,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAG3B,IAAI,CAAC,EAAE,OAAO,CAAC;IAIf,KAAK,CAAC,EAAE,eAAe,CAAC;CACxB;AAKD,MAAM,WAAW,qCAAqC;IACrD,SAAS,CAAC,EAAE,IAAI,CAAC,wCAAwC,EAAE,MAAM,CAAC,GAAG;QACpE,IAAI,CAAC,EAAE,WAAW,CAAC;KACnB,CAAC;IACF,GAAG,CAAC,EAAE,IAAI,CAAC,sCAAsC,EAAE,SAAS,CAAC,GAAG;QAE/D,OAAO,EAAE;YACR,KAAK,EAAE,WAAW,CAAC;YACnB,MAAM,CAAC,EAAE,WAAW,CAAC;SACrB,CAAC;KACF,CAAC;IACF,SAAS,CAAC,EAAE,0BAA0B,CAAC;CACvC;AAED,MAAM,WAAW,yCAAyC;IAEzD,SAAS,CAAC,EAAE,wCAAwC,CAAC;IAGrD,GAAG,CAAC,EAAE,sCAAsC,CAAC;IAG7C,SAAS,CAAC,EAAE,0BAA0B,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,wCAAwC;IAExD,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,IAAI,CAAC,EAAE,eAAe,CAAC;IAGvB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IAC1C;;;;;;;;OAQG;IACH,EAAE,CAAC,EAAE,OAAO,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,qCAAqC;IACrD,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,sCAAsC;IAEtD,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,OAAO,CAAC,EAAE,qCAAqC,CAAC;CAChD;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,wBAAwB,EAAE,UAAU,CAAC;IACnF,QAAQ,EAAE,wBAAwB,CAAC,UAAU,CAAC,GAAG;QAChD;;;;;;;;WAQG;QACH,YAAY,IAAI,eAAe,GAAG,IAAI,CAAC;KACvC,CAAC;CACF;AAED,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC;IACjF,OAAO,EAAE,sBAAsB,CAAC;CAChC"} \ No newline at end of file diff --git a/build/ReactNativePasskeys.types.js b/build/ReactNativePasskeys.types.js new file mode 100644 index 0000000..1f05ad0 --- /dev/null +++ b/build/ReactNativePasskeys.types.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=ReactNativePasskeys.types.js.map \ No newline at end of file diff --git a/build/ReactNativePasskeys.types.js.map b/build/ReactNativePasskeys.types.js.map new file mode 100644 index 0000000..b6416bf --- /dev/null +++ b/build/ReactNativePasskeys.types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ReactNativePasskeys.types.js","sourceRoot":"","sources":["../src/ReactNativePasskeys.types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\t// - for override\n\tAuthenticationExtensionsClientInputs as TypeScriptAuthenticationExtensionsClientInputs,\n\t// - for use & reexport\n\tBase64URLString,\n\tAuthenticatorTransportFuture,\n\tPublicKeyCredentialJSON,\n\tPublicKeyCredentialDescriptorJSON,\n\tPublicKeyCredentialUserEntityJSON,\n\tAuthenticatorAttestationResponseJSON,\n} from \"@simplewebauthn/typescript-types\";\n\nexport type {\n\tAttestationConveyancePreference,\n\tAuthenticationCredential,\n\tAuthenticatorAssertionResponse,\n\tAuthenticatorAttachment,\n\tAuthenticatorAttestationResponse,\n\tAuthenticatorSelectionCriteria,\n\tAuthenticatorTransport,\n\tCOSEAlgorithmIdentifier,\n\tCrypto,\n\tPublicKeyCredentialCreationOptions,\n\tPublicKeyCredentialDescriptor,\n\tPublicKeyCredentialParameters,\n\tPublicKeyCredentialRequestOptions,\n\tPublicKeyCredentialRpEntity,\n\tPublicKeyCredentialType,\n\tPublicKeyCredentialUserEntity,\n\tRegistrationCredential,\n\tUserVerificationRequirement,\n} from \"@simplewebauthn/typescript-types\";\n\nexport type {\n\tBase64URLString,\n\tPublicKeyCredentialJSON,\n\tAuthenticatorTransportFuture,\n\tPublicKeyCredentialDescriptorJSON,\n\tPublicKeyCredentialUserEntityJSON,\n\tAuthenticatorAttestationResponseJSON,\n};\n\n/**\n * A variant of PublicKeyCredentialCreationOptions suitable for JSON transmission\n *\n * This should eventually get replaced with official TypeScript DOM types when WebAuthn L3 types\n * eventually make it into the language:\n *\n * - Specification reference: https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptionsjson\n */\nexport interface PublicKeyCredentialCreationOptionsJSON {\n\trp: PublicKeyCredentialRpEntity;\n\tuser: PublicKeyCredentialUserEntityJSON;\n\tchallenge: Base64URLString;\n\tpubKeyCredParams: PublicKeyCredentialParameters[];\n\ttimeout?: number;\n\texcludeCredentials?: PublicKeyCredentialDescriptorJSON[];\n\tauthenticatorSelection?: AuthenticatorSelectionCriteria;\n\tattestation?: AttestationConveyancePreference;\n\textensions?: AuthenticationExtensionsClientInputs;\n}\n\n/**\n * A variant of PublicKeyCredentialRequestOptions suitable for JSON transmission\n */\nexport interface PublicKeyCredentialRequestOptionsJSON {\n\tchallenge: Base64URLString;\n\ttimeout?: number;\n\trpId?: string;\n\tallowCredentials?: PublicKeyCredentialDescriptorJSON[];\n\tuserVerification?: UserVerificationRequirement;\n\textensions?: AuthenticationExtensionsClientInputs;\n}\n\nexport type AccountCreationContactIdentifierType = \"email\" | \"phoneNumber\";\n\nexport interface FastAccountCreationOptions {\n\tacceptedContactIdentifiers: AccountCreationContactIdentifierType[];\n\tchallenge: Base64URLString;\n\trpId: string;\n\tshouldRequestName?: boolean;\n\tuserId: Base64URLString;\n}\n\nexport interface PersonNameComponentsJSON {\n\tnamePrefix?: string;\n\tgivenName?: string;\n\tmiddleName?: string;\n\tfamilyName?: string;\n\tnameSuffix?: string;\n\tnickname?: string;\n}\n\nexport interface AccountCreationContactIdentifier {\n\ttype: AccountCreationContactIdentifierType;\n\tvalue: string;\n}\n\nexport interface AccountCreationDetails {\n\tcontactIdentifier: AccountCreationContactIdentifier;\n\tname?: PersonNameComponentsJSON;\n}\n\n/**\n * A slightly-modified RegistrationCredential to simplify working with ArrayBuffers that\n * are Base64URL-encoded so that they can be sent as JSON.\n *\n * - Specification reference: https://w3c.github.io/webauthn/#dictdef-registrationresponsejson\n */\nexport interface RegistrationResponseJSON {\n\tid: Base64URLString;\n\trawId: Base64URLString;\n\tresponse: AuthenticatorAttestationResponseJSON;\n\tauthenticatorAttachment?: AuthenticatorAttachment;\n\tclientExtensionResults: AuthenticationExtensionsClientOutputsJSON;\n\ttype: PublicKeyCredentialType;\n}\n\n/**\n * A slightly-modified AuthenticationCredential to simplify working with ArrayBuffers that\n * are Base64URL-encoded so that they can be sent as JSON.\n *\n * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationresponsejson\n */\nexport interface AuthenticationResponseJSON {\n\tid: Base64URLString;\n\trawId: Base64URLString;\n\tresponse: AuthenticatorAssertionResponseJSON;\n\tauthenticatorAttachment?: AuthenticatorAttachment;\n\tclientExtensionResults: AuthenticationExtensionsClientOutputsJSON;\n\ttype: PublicKeyCredentialType;\n}\n\n/**\n * A slightly-modified AuthenticatorAssertionResponse to simplify working with ArrayBuffers that\n * are Base64URL-encoded so that they can be sent as JSON.\n *\n * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticatorassertionresponsejson\n */\nexport interface AuthenticatorAssertionResponseJSON {\n\tclientDataJSON: Base64URLString;\n\tauthenticatorData: Base64URLString;\n\tsignature: Base64URLString;\n\tuserHandle?: string;\n}\n\n/**\n * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationextensionsprfinputs\n */\nexport interface AuthenticationExtensionsPRFInputs {\n\t/**\n\t * A single set of PRF inputs to evaluate for the selected credential.\n\t */\n\teval?: { first: Base64URLString; second?: Base64URLString };\n\n\t/**\n\t * A record mapping base64url-encoded credential IDs to PRF inputs.\n\t * Only valid during authentication when allowCredentials is specified.\n\t * Each credential can have different PRF inputs evaluated.\n\t */\n\tevalByCredential?: Record;\n}\n\n/**\n * TypeScript's types are behind the latest extensions spec, so we define them here.\n * Should eventually be replaced by TypeScript's when TypeScript gets updated to\n * know about it (sometime after 5.3)\n *\n * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationextensionsclientinputs\n */\nexport interface AuthenticationExtensionsClientInputs extends TypeScriptAuthenticationExtensionsClientInputs {\n\tlargeBlob?: AuthenticationExtensionsLargeBlobInputs;\n\tprf?: AuthenticationExtensionsPRFInputs;\n}\n\nexport type LargeBlobSupport = \"preferred\" | \"required\";\n\n/**\n * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationextensionslargeblobinputs\n */\nexport interface AuthenticationExtensionsLargeBlobInputs {\n\t// - Only valid during registration.\n\tsupport?: LargeBlobSupport;\n\n\t// - A boolean that indicates that the Relying Party would like to fetch the previously-written blob associated with the asserted credential. Only valid during authentication.\n\tread?: boolean;\n\n\t// - An opaque byte string that the Relying Party wishes to store with the existing credential. Only valid during authentication.\n\t// - We impose that the data is passed as base64-url encoding to make better align the passing of data from RN to native code\n\twrite?: Base64URLString;\n}\n\n// - largeBlob extension: https://w3c.github.io/webauthn/#sctn-large-blob-extension\n// - prf extension: https://w3c.github.io/webauthn/#prf-extension\n// - credProps extension: https://w3c.github.io/webauthn/#sctn-authenticator-credential-properties-extension\nexport interface AuthenticationExtensionsClientOutputs {\n\tlargeBlob?: Omit & {\n\t\tblob?: ArrayBuffer;\n\t};\n\tprf?: Omit & {\n\t\t// ArrayBuffer representation for internal use to match web behavior; JSON variant uses Base64URLString\n\t\tresults: {\n\t\t\tfirst: ArrayBuffer;\n\t\t\tsecond?: ArrayBuffer;\n\t\t};\n\t};\n\tcredProps?: CredentialPropertiesOutput;\n}\n\nexport interface AuthenticationExtensionsClientOutputsJSON {\n\t// - largeBlob extension: https://w3c.github.io/webauthn/#sctn-large-blob-extension\n\tlargeBlob?: AuthenticationExtensionsLargeBlobOutputs;\n\n\t// - prf extension: https://w3c.github.io/webauthn/#prf-extension\n\tprf?: AuthenticationExtensionsPRFOutputsJSON;\n\n\t// - credProps extension: https://w3c.github.io/webauthn/#sctn-authenticator-credential-properties-extension\n\tcredProps?: CredentialPropertiesOutput;\n}\n\n/**\n * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationextensionslargebloboutputs\n */\nexport interface AuthenticationExtensionsLargeBlobOutputs {\n\t// - true if, and only if, the created credential supports storing large blobs. Only present in registration outputs.\n\tsupported?: boolean;\n\n\t// - The opaque byte string that was associated with the credential identified by rawId. Only valid if read was true.\n\tblob?: Base64URLString;\n\n\t// - A boolean that indicates that the contents of write were successfully stored on the authenticator, associated with the specified credential.\n\twritten?: boolean;\n}\n\n/**\n * - Specification reference: https://w3c.github.io/webauthn/#dictdef-credentialpropertiesoutput\n */\nexport interface CredentialPropertiesOutput {\n\t/**\n\t * This OPTIONAL property, known abstractly as the resident key credential property (i.e., client-side\n\t * discoverable credential property), is a Boolean value indicating whether the PublicKeyCredential\n\t * returned as a result of a registration ceremony is a client-side discoverable credential (passkey).\n\t *\n\t * If rk is true, the credential is a discoverable credential (resident key/passkey).\n\t * If rk is false, the credential is a server-side credential.\n\t * If rk is not present, it is not known whether the credential is a discoverable credential or not.\n\t */\n\trk?: boolean;\n}\n\n/**\n * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationextensionsprfvalues\n */\nexport interface AuthenticationExtensionsPRFValuesJSON {\n\tfirst: Base64URLString;\n\tsecond?: Base64URLString;\n}\n\n/**\n * - Specification reference: https://w3c.github.io/webauthn/#dictdef-authenticationextensionsprfoutputs\n */\nexport interface AuthenticationExtensionsPRFOutputsJSON {\n\t// - true if, and only if, the PRF is available for use with the created credential. This is only reported during registration and is not present in the case of authentication.\n\tenabled?: boolean;\n\n\tresults?: AuthenticationExtensionsPRFValuesJSON;\n}\n\n/**\n * A library specific type that combines the JSON results of a registration operation with a method\n * to get the public key of the new credential since these are not available directly from the native side\n */\nexport interface CreationResponse extends Omit {\n\tresponse: RegistrationResponseJSON[\"response\"] & {\n\t\t/**\n\t\t * This operation returns a Base64URLString containing the DER SubjectPublicKeyInfo of the new credential, or null if this is not available.\n\t\t *\n\t\t * **Note:** This deviates from the standard Web Authentication API, which returns `ArrayBuffer | null` on web browsers.\n\t\t * For cross-platform consistency, this library converts the ArrayBuffer to Base64URLString on web platforms,\n\t\t * matching the native iOS/Android behavior where binary data is transmitted as Base64URL-encoded strings.\n\t\t *\n\t\t * @see https://w3c.github.io/webauthn/#dom-authenticatorattestationresponse-getpublickey\n\t\t */\n\t\tgetPublicKey(): Base64URLString | null;\n\t};\n}\n\nexport interface AccountCreationResponse extends Omit {\n\taccount: AccountCreationDetails;\n}\n"]} \ No newline at end of file diff --git a/build/ReactNativePasskeysModule.d.ts b/build/ReactNativePasskeysModule.d.ts new file mode 100644 index 0000000..7e938cc --- /dev/null +++ b/build/ReactNativePasskeysModule.d.ts @@ -0,0 +1,3 @@ +declare const _default: any; +export default _default; +//# sourceMappingURL=ReactNativePasskeysModule.d.ts.map \ No newline at end of file diff --git a/build/ReactNativePasskeysModule.d.ts.map b/build/ReactNativePasskeysModule.d.ts.map new file mode 100644 index 0000000..e77d575 --- /dev/null +++ b/build/ReactNativePasskeysModule.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ReactNativePasskeysModule.d.ts","sourceRoot":"","sources":["../src/ReactNativePasskeysModule.ts"],"names":[],"mappings":";AAeA,wBAoCE"} \ No newline at end of file diff --git a/build/ReactNativePasskeysModule.js b/build/ReactNativePasskeysModule.js new file mode 100644 index 0000000..6713165 --- /dev/null +++ b/build/ReactNativePasskeysModule.js @@ -0,0 +1,40 @@ +import { requireNativeModule } from "expo-modules-core"; +import { NotSupportedError } from "./errors"; +// It loads the native module object from the JSI or falls back to +// the bridge module (from NativeModulesProxy) if the remote debugger is on. +const passkeys = requireNativeModule("ReactNativePasskeys"); +export default { + ...passkeys, + async create(request) { + if (!this.isSupported) + throw new NotSupportedError(); + const credential = await passkeys.create(request); + return { + ...credential, + response: { + ...credential.response, + getPublicKey() { + return credential.response?.publicKey; + }, + }, + }; + }, + isAccountCreationSupported() { + return passkeys.isAccountCreationSupported?.() ?? false; + }, + async createAccount(request) { + if (!this.isAccountCreationSupported()) + throw new NotSupportedError(); + const credential = await passkeys.createAccount(request); + return { + ...credential, + response: { + ...credential.response, + getPublicKey() { + return credential.response?.publicKey; + }, + }, + }; + }, +}; +//# sourceMappingURL=ReactNativePasskeysModule.js.map \ No newline at end of file diff --git a/build/ReactNativePasskeysModule.js.map b/build/ReactNativePasskeysModule.js.map new file mode 100644 index 0000000..ed03e3a --- /dev/null +++ b/build/ReactNativePasskeysModule.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ReactNativePasskeysModule.js","sourceRoot":"","sources":["../src/ReactNativePasskeysModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAS7C,kEAAkE;AAClE,4EAA4E;AAC5E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,CAAC;AAE5D,eAAe;IACd,GAAG,QAAQ;IAEX,KAAK,CAAC,MAAM,CAAC,OAA+C;QAC3D,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,iBAAiB,EAAE,CAAC;QAErD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO;YACN,GAAG,UAAU;YACb,QAAQ,EAAE;gBACT,GAAG,UAAU,CAAC,QAAQ;gBACtB,YAAY;oBACX,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC;gBACvC,CAAC;aACD;SACD,CAAC;IACH,CAAC;IAED,0BAA0B;QACzB,OAAO,QAAQ,CAAC,0BAA0B,EAAE,EAAE,IAAI,KAAK,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAmC;QACtD,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE;YAAE,MAAM,IAAI,iBAAiB,EAAE,CAAC;QAEtE,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACzD,OAAO;YACN,GAAG,UAAU;YACb,QAAQ,EAAE;gBACT,GAAG,UAAU,CAAC,QAAQ;gBACtB,YAAY;oBACX,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC;gBACvC,CAAC;aACD;SACD,CAAC;IACH,CAAC;CACD,CAAC","sourcesContent":["import { requireNativeModule } from \"expo-modules-core\";\n\nimport { NotSupportedError } from \"./errors\";\n\nimport type {\n\tAccountCreationResponse,\n\tFastAccountCreationOptions,\n\tPublicKeyCredentialCreationOptionsJSON,\n\tCreationResponse,\n} from \"./ReactNativePasskeys.types\";\n\n// It loads the native module object from the JSI or falls back to\n// the bridge module (from NativeModulesProxy) if the remote debugger is on.\nconst passkeys = requireNativeModule(\"ReactNativePasskeys\");\n\nexport default {\n\t...passkeys,\n\n\tasync create(request: PublicKeyCredentialCreationOptionsJSON): Promise {\n\t\tif (!this.isSupported) throw new NotSupportedError();\n\n\t\tconst credential = await passkeys.create(request);\n\t\treturn {\n\t\t\t...credential,\n\t\t\tresponse: {\n\t\t\t\t...credential.response,\n\t\t\t\tgetPublicKey() {\n\t\t\t\t\treturn credential.response?.publicKey;\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t},\n\n\tisAccountCreationSupported(): boolean {\n\t\treturn passkeys.isAccountCreationSupported?.() ?? false;\n\t},\n\n\tasync createAccount(request: FastAccountCreationOptions): Promise {\n\t\tif (!this.isAccountCreationSupported()) throw new NotSupportedError();\n\n\t\tconst credential = await passkeys.createAccount(request);\n\t\treturn {\n\t\t\t...credential,\n\t\t\tresponse: {\n\t\t\t\t...credential.response,\n\t\t\t\tgetPublicKey() {\n\t\t\t\t\treturn credential.response?.publicKey;\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t},\n};\n"]} \ No newline at end of file diff --git a/build/ReactNativePasskeysModule.web.d.ts b/build/ReactNativePasskeysModule.web.d.ts new file mode 100644 index 0000000..30c56ab --- /dev/null +++ b/build/ReactNativePasskeysModule.web.d.ts @@ -0,0 +1,12 @@ +import type { AccountCreationResponse, AuthenticationResponseJSON, FastAccountCreationOptions, PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON, CreationResponse } from "./ReactNativePasskeys.types"; +declare const _default: { + readonly name: string; + isAutoFillAvalilable(): Promise; + isSupported(): boolean; + isAccountCreationSupported(): boolean; + create({ signal, ...request }: PublicKeyCredentialCreationOptionsJSON & Pick): Promise; + get({ mediation, signal, ...request }: PublicKeyCredentialRequestOptionsJSON & Pick): Promise; + createAccount(_request: FastAccountCreationOptions): Promise; +}; +export default _default; +//# sourceMappingURL=ReactNativePasskeysModule.web.d.ts.map \ No newline at end of file diff --git a/build/ReactNativePasskeysModule.web.d.ts.map b/build/ReactNativePasskeysModule.web.d.ts.map new file mode 100644 index 0000000..2435d3e --- /dev/null +++ b/build/ReactNativePasskeysModule.web.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ReactNativePasskeysModule.web.d.ts","sourceRoot":"","sources":["../src/ReactNativePasskeysModule.web.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACX,uBAAuB,EAKvB,0BAA0B,EAC1B,0BAA0B,EAC1B,sCAAsC,EACtC,qCAAqC,EAErC,gBAAgB,EAChB,MAAM,6BAA6B,CAAC;;mBAGxB,MAAM;4BAIM,OAAO,CAAC,OAAO,CAAC;;;mCAiBrC,sCAAsC,GACxC,IAAI,CAAC,yBAAyB,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;2CAuE1E,qCAAqC,GACvC,IAAI,CACH,wBAAwB,EACxB,WAAW,GAAG,QAAQ,CACtB,GAAG,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC;4BA4EpC,0BAA0B,GAClC,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;;AA/K3C,wBAoLE"} \ No newline at end of file diff --git a/build/ReactNativePasskeysModule.web.js b/build/ReactNativePasskeysModule.web.js new file mode 100644 index 0000000..0b8f3e3 --- /dev/null +++ b/build/ReactNativePasskeysModule.web.js @@ -0,0 +1,167 @@ +import { NotSupportedError } from "./errors"; +import { base64URLStringToBuffer, bufferToBase64URLString } from "./utils/base64"; +import { normalizePRFInputs } from "./utils/prf"; +export default { + get name() { + return "ReactNativePasskeys"; + }, + isAutoFillAvalilable() { + return window.PublicKeyCredential.isConditionalMediationAvailable?.() ?? Promise.resolve(false); + }, + isSupported() { + return (window?.PublicKeyCredential !== undefined && typeof window.PublicKeyCredential === "function"); + }, + isAccountCreationSupported() { + return false; + }, + async create({ signal, ...request }) { + if (!this.isSupported()) + throw new NotSupportedError(); + const credential = (await navigator.credentials.create({ + signal, + publicKey: { + ...request, + challenge: base64URLStringToBuffer(request.challenge), + user: { ...request.user, id: base64URLStringToBuffer(request.user.id) }, + excludeCredentials: request.excludeCredentials?.map((cred) => ({ + ...cred, + id: base64URLStringToBuffer(cred.id), + // TODO: remove the override when typescript has updated webauthn types + transports: (cred.transports ?? undefined), + })), + extensions: { + ...request.extensions, + prf: normalizePRFInputs(request), + }, + }, + })); + // TODO: remove the override when typescript has updated webauthn types + const extensions = credential?.getClientExtensionResults(); + warnUserOfMissingWebauthnExtensions(request.extensions, extensions); + const { largeBlob, prf, credProps, ...clientExtensionResults } = extensions; + if (!credential) + return null; + return { + id: credential.id, + rawId: credential.id, + response: { + clientDataJSON: bufferToBase64URLString(credential.response.clientDataJSON), + attestationObject: bufferToBase64URLString(credential.response.attestationObject), + getPublicKey() { + // Note: The standard web API returns ArrayBuffer | null, but we convert to Base64URLString + // for cross-platform consistency with iOS/Android implementations + const publicKey = credential.response.getPublicKey(); + return publicKey ? bufferToBase64URLString(publicKey) : null; + }, + }, + authenticatorAttachment: undefined, + type: "public-key", + clientExtensionResults: { + ...clientExtensionResults, + ...(largeBlob && { + largeBlob: { + ...largeBlob, + blob: largeBlob?.blob ? bufferToBase64URLString(largeBlob.blob) : undefined, + }, + }), + ...(prf?.results && { + prf: { + enabled: prf.enabled, + results: { + first: bufferToBase64URLString(prf.results.first), + second: prf.results.second ? bufferToBase64URLString(prf.results.second) : undefined, + }, + }, + }), + ...(credProps && { credProps }), + }, + }; + }, + async get({ mediation, signal, ...request }) { + const credential = (await navigator.credentials.get({ + mediation, + signal, + publicKey: { + ...request, + extensions: { + ...request.extensions, + prf: normalizePRFInputs(request), + /** + * the navigator interface doesn't have a largeBlob property + * as it may not be supported by all browsers + * + * browsers that do not support the extension will just ignore the property so it's safe to include it + * + * @ts-expect-error:*/ + largeBlob: request.extensions?.largeBlob?.write + ? { + ...request.extensions?.largeBlob, + write: base64URLStringToBuffer(request.extensions.largeBlob.write), + } + : request.extensions?.largeBlob, + }, + challenge: base64URLStringToBuffer(request.challenge), + allowCredentials: request.allowCredentials?.map((cred) => ({ + ...cred, + id: base64URLStringToBuffer(cred.id), + // TODO: remove the override when typescript has updated webauthn types + transports: (cred.transports ?? undefined), + })), + }, + })); + // TODO: remove the override when typescript has updated webauthn types + const extensions = credential?.getClientExtensionResults(); + warnUserOfMissingWebauthnExtensions(request.extensions, extensions); + const { largeBlob, prf, credProps, ...clientExtensionResults } = extensions; + if (!credential) + return null; + return { + id: credential.id, + rawId: credential.id, + response: { + clientDataJSON: bufferToBase64URLString(credential.response.clientDataJSON), + authenticatorData: bufferToBase64URLString(credential.response.authenticatorData), + signature: bufferToBase64URLString(credential.response.signature), + userHandle: credential.response.userHandle + ? bufferToBase64URLString(credential.response.userHandle) + : undefined, + }, + authenticatorAttachment: undefined, + clientExtensionResults: { + ...clientExtensionResults, + ...(largeBlob && { + largeBlob: { + ...largeBlob, + blob: largeBlob?.blob ? bufferToBase64URLString(largeBlob.blob) : undefined, + }, + }), + ...(prf?.results && { + prf: { + results: { + first: bufferToBase64URLString(prf.results.first), + second: prf.results.second ? bufferToBase64URLString(prf.results.second) : undefined, + }, + }, + }), + ...(credProps && { credProps }), + }, + type: "public-key", + }; + }, + async createAccount(_request) { + throw new NotSupportedError("Fast account creation with passkeys is only available through the native iOS API."); + }, +}; +/** + * warn the user about extensions that they tried to use that are not supported + */ +const warnUserOfMissingWebauthnExtensions = (requestedExtensions, clientExtensionResults) => { + if (clientExtensionResults) { + for (const key in requestedExtensions) { + if (typeof clientExtensionResults[key] === "undefined") { + alert(`Webauthn extension ${key} is undefined -- your browser probably doesn't know about it`); + } + } + } +}; +//# sourceMappingURL=ReactNativePasskeysModule.web.js.map \ No newline at end of file diff --git a/build/ReactNativePasskeysModule.web.js.map b/build/ReactNativePasskeysModule.web.js.map new file mode 100644 index 0000000..2b8b921 --- /dev/null +++ b/build/ReactNativePasskeysModule.web.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ReactNativePasskeysModule.web.js","sourceRoot":"","sources":["../src/ReactNativePasskeysModule.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAgBjD,eAAe;IACd,IAAI,IAAI;QACP,OAAO,qBAAqB,CAAC;IAC9B,CAAC;IAED,oBAAoB;QACnB,OAAO,MAAM,CAAC,mBAAmB,CAAC,+BAA+B,EAAE,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACjG,CAAC;IAED,WAAW;QACV,OAAO,CACN,MAAM,EAAE,mBAAmB,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,mBAAmB,KAAK,UAAU,CAC7F,CAAC;IACH,CAAC;IAED,0BAA0B;QACzB,OAAO,KAAK,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EACZ,MAAM,EACN,GAAG,OAAO,EAE+B;QACzC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,MAAM,IAAI,iBAAiB,EAAE,CAAC;QAEvD,MAAM,UAAU,GAAG,CAAC,MAAM,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;YACtD,MAAM;YACN,SAAS,EAAE;gBACV,GAAG,OAAO;gBACV,SAAS,EAAE,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC;gBACrD,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACvE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC9D,GAAG,IAAI;oBACP,EAAE,EAAE,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,uEAAuE;oBACvE,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAAyC;iBAClF,CAAC,CAAC;gBACH,UAAU,EAAE;oBACX,GAAG,OAAO,CAAC,UAAU;oBACrB,GAAG,EAAE,kBAAkB,CAAC,OAAO,CAAC;iBAChC;aACD;SACD,CAAC,CAA2B,CAAC;QAE9B,uEAAuE;QACvE,MAAM,UAAU,GACf,UAAU,EAAE,yBAAyB,EAA2C,CAAC;QAClF,mCAAmC,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACpE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,sBAAsB,EAAE,GAAG,UAAU,CAAC;QAE5E,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,OAAO;YACN,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,KAAK,EAAE,UAAU,CAAC,EAAE;YACpB,QAAQ,EAAE;gBACT,cAAc,EAAE,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC3E,iBAAiB,EAAE,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBACjF,YAAY;oBACX,2FAA2F;oBAC3F,kEAAkE;oBAClE,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;oBACrD,OAAO,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC9D,CAAC;aACD;YACD,uBAAuB,EAAE,SAAS;YAClC,IAAI,EAAE,YAAY;YAClB,sBAAsB,EAAE;gBACvB,GAAG,sBAAsB;gBACzB,GAAG,CAAC,SAAS,IAAI;oBAChB,SAAS,EAAE;wBACV,GAAG,SAAS;wBACZ,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;qBAC3E;iBACD,CAAC;gBACF,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI;oBACnB,GAAG,EAAE;wBACJ,OAAO,EAAE,GAAG,CAAC,OAAO;wBACpB,OAAO,EAAE;4BACR,KAAK,EAAE,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;4BACjD,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;yBACpF;qBACD;iBACD,CAAC;gBACF,GAAG,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;aACqB;SACrD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EACT,SAAS,EACT,MAAM,EACN,GAAG,OAAO,EAKT;QACD,MAAM,UAAU,GAAG,CAAC,MAAM,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC;YACnD,SAAS;YACT,MAAM;YACN,SAAS,EAAE;gBACV,GAAG,OAAO;gBACV,UAAU,EAAE;oBACX,GAAG,OAAO,CAAC,UAAU;oBACrB,GAAG,EAAE,kBAAkB,CAAC,OAAO,CAAC;oBAChC;;;;;;0CAMsB;oBACtB,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK;wBAC9C,CAAC,CAAC;4BACA,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS;4BAChC,KAAK,EAAE,uBAAuB,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;yBAClE;wBACF,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS;iBAChC;gBACD,SAAS,EAAE,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC;gBACrD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC1D,GAAG,IAAI;oBACP,EAAE,EAAE,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpC,uEAAuE;oBACvE,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAAyC;iBAClF,CAAC,CAAC;aACH;SACD,CAAC,CAA6B,CAAC;QAEhC,uEAAuE;QACvE,MAAM,UAAU,GACf,UAAU,EAAE,yBAAyB,EAA2C,CAAC;QAClF,mCAAmC,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACpE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,sBAAsB,EAAE,GAAG,UAAU,CAAC;QAE5E,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,OAAO;YACN,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,KAAK,EAAE,UAAU,CAAC,EAAE;YACpB,QAAQ,EAAE;gBACT,cAAc,EAAE,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAC3E,iBAAiB,EAAE,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBACjF,SAAS,EAAE,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACjE,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,UAAU;oBACzC,CAAC,CAAC,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;oBACzD,CAAC,CAAC,SAAS;aACZ;YACD,uBAAuB,EAAE,SAAS;YAClC,sBAAsB,EAAE;gBACvB,GAAG,sBAAsB;gBACzB,GAAG,CAAC,SAAS,IAAI;oBAChB,SAAS,EAAE;wBACV,GAAG,SAAS;wBACZ,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;qBAC3E;iBACD,CAAC;gBACF,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI;oBACnB,GAAG,EAAE;wBACJ,OAAO,EAAE;4BACR,KAAK,EAAE,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;4BACjD,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;yBACpF;qBACD;iBACD,CAAC;gBACF,GAAG,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;aACqB;YACrD,IAAI,EAAE,YAAY;SAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAClB,QAAoC;QAEpC,MAAM,IAAI,iBAAiB,CAC1B,mFAAmF,CACnF,CAAC;IACH,CAAC;CACD,CAAC;AAEF;;GAEG;AACH,MAAM,mCAAmC,GAAG,CAC3C,mBAAqE,EACrE,sBAAyE,EACxE,EAAE;IACH,IAAI,sBAAsB,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACvC,IAAI,OAAO,sBAAsB,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC;gBACxD,KAAK,CACJ,sBAAsB,GAAG,8DAA8D,CACvF,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC,CAAC","sourcesContent":["import { NotSupportedError } from \"./errors\";\nimport { base64URLStringToBuffer, bufferToBase64URLString } from \"./utils/base64\";\nimport { normalizePRFInputs } from \"./utils/prf\";\n\nimport type {\n\tAccountCreationResponse,\n\tAuthenticationCredential,\n\tAuthenticationExtensionsClientInputs,\n\tAuthenticationExtensionsClientOutputs,\n\tAuthenticationExtensionsClientOutputsJSON,\n\tAuthenticationResponseJSON,\n\tFastAccountCreationOptions,\n\tPublicKeyCredentialCreationOptionsJSON,\n\tPublicKeyCredentialRequestOptionsJSON,\n\tRegistrationCredential,\n\tCreationResponse,\n} from \"./ReactNativePasskeys.types\";\n\nexport default {\n\tget name(): string {\n\t\treturn \"ReactNativePasskeys\";\n\t},\n\n\tisAutoFillAvalilable(): Promise {\n\t\treturn window.PublicKeyCredential.isConditionalMediationAvailable?.() ?? Promise.resolve(false);\n\t},\n\n\tisSupported() {\n\t\treturn (\n\t\t\twindow?.PublicKeyCredential !== undefined && typeof window.PublicKeyCredential === \"function\"\n\t\t);\n\t},\n\n\tisAccountCreationSupported() {\n\t\treturn false;\n\t},\n\n\tasync create({\n\t\tsignal,\n\t\t...request\n\t}: PublicKeyCredentialCreationOptionsJSON &\n\t\tPick): Promise {\n\t\tif (!this.isSupported()) throw new NotSupportedError();\n\n\t\tconst credential = (await navigator.credentials.create({\n\t\t\tsignal,\n\t\t\tpublicKey: {\n\t\t\t\t...request,\n\t\t\t\tchallenge: base64URLStringToBuffer(request.challenge),\n\t\t\t\tuser: { ...request.user, id: base64URLStringToBuffer(request.user.id) },\n\t\t\t\texcludeCredentials: request.excludeCredentials?.map((cred) => ({\n\t\t\t\t\t...cred,\n\t\t\t\t\tid: base64URLStringToBuffer(cred.id),\n\t\t\t\t\t// TODO: remove the override when typescript has updated webauthn types\n\t\t\t\t\ttransports: (cred.transports ?? undefined) as AuthenticatorTransport[] | undefined,\n\t\t\t\t})),\n\t\t\t\textensions: {\n\t\t\t\t\t...request.extensions,\n\t\t\t\t\tprf: normalizePRFInputs(request),\n\t\t\t\t},\n\t\t\t},\n\t\t})) as RegistrationCredential;\n\n\t\t// TODO: remove the override when typescript has updated webauthn types\n\t\tconst extensions =\n\t\t\tcredential?.getClientExtensionResults() as AuthenticationExtensionsClientOutputs;\n\t\twarnUserOfMissingWebauthnExtensions(request.extensions, extensions);\n\t\tconst { largeBlob, prf, credProps, ...clientExtensionResults } = extensions;\n\n\t\tif (!credential) return null;\n\n\t\treturn {\n\t\t\tid: credential.id,\n\t\t\trawId: credential.id,\n\t\t\tresponse: {\n\t\t\t\tclientDataJSON: bufferToBase64URLString(credential.response.clientDataJSON),\n\t\t\t\tattestationObject: bufferToBase64URLString(credential.response.attestationObject),\n\t\t\t\tgetPublicKey() {\n\t\t\t\t\t// Note: The standard web API returns ArrayBuffer | null, but we convert to Base64URLString\n\t\t\t\t\t// for cross-platform consistency with iOS/Android implementations\n\t\t\t\t\tconst publicKey = credential.response.getPublicKey();\n\t\t\t\t\treturn publicKey ? bufferToBase64URLString(publicKey) : null;\n\t\t\t\t},\n\t\t\t},\n\t\t\tauthenticatorAttachment: undefined,\n\t\t\ttype: \"public-key\",\n\t\t\tclientExtensionResults: {\n\t\t\t\t...clientExtensionResults,\n\t\t\t\t...(largeBlob && {\n\t\t\t\t\tlargeBlob: {\n\t\t\t\t\t\t...largeBlob,\n\t\t\t\t\t\tblob: largeBlob?.blob ? bufferToBase64URLString(largeBlob.blob) : undefined,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\t...(prf?.results && {\n\t\t\t\t\tprf: {\n\t\t\t\t\t\tenabled: prf.enabled,\n\t\t\t\t\t\tresults: {\n\t\t\t\t\t\t\tfirst: bufferToBase64URLString(prf.results.first),\n\t\t\t\t\t\t\tsecond: prf.results.second ? bufferToBase64URLString(prf.results.second) : undefined,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\t...(credProps && { credProps }),\n\t\t\t} satisfies AuthenticationExtensionsClientOutputsJSON,\n\t\t};\n\t},\n\n\tasync get({\n\t\tmediation,\n\t\tsignal,\n\t\t...request\n\t}: PublicKeyCredentialRequestOptionsJSON &\n\t\tPick<\n\t\t\tCredentialRequestOptions,\n\t\t\t\"mediation\" | \"signal\"\n\t\t>): Promise {\n\t\tconst credential = (await navigator.credentials.get({\n\t\t\tmediation,\n\t\t\tsignal,\n\t\t\tpublicKey: {\n\t\t\t\t...request,\n\t\t\t\textensions: {\n\t\t\t\t\t...request.extensions,\n\t\t\t\t\tprf: normalizePRFInputs(request),\n\t\t\t\t\t/**\n\t\t\t\t\t * the navigator interface doesn't have a largeBlob property\n\t\t\t\t\t * as it may not be supported by all browsers\n\t\t\t\t\t *\n\t\t\t\t\t * browsers that do not support the extension will just ignore the property so it's safe to include it\n\t\t\t\t\t *\n\t\t\t\t\t * @ts-expect-error:*/\n\t\t\t\t\tlargeBlob: request.extensions?.largeBlob?.write\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...request.extensions?.largeBlob,\n\t\t\t\t\t\t\t\twrite: base64URLStringToBuffer(request.extensions.largeBlob.write),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: request.extensions?.largeBlob,\n\t\t\t\t},\n\t\t\t\tchallenge: base64URLStringToBuffer(request.challenge),\n\t\t\t\tallowCredentials: request.allowCredentials?.map((cred) => ({\n\t\t\t\t\t...cred,\n\t\t\t\t\tid: base64URLStringToBuffer(cred.id),\n\t\t\t\t\t// TODO: remove the override when typescript has updated webauthn types\n\t\t\t\t\ttransports: (cred.transports ?? undefined) as AuthenticatorTransport[] | undefined,\n\t\t\t\t})),\n\t\t\t},\n\t\t})) as AuthenticationCredential;\n\n\t\t// TODO: remove the override when typescript has updated webauthn types\n\t\tconst extensions =\n\t\t\tcredential?.getClientExtensionResults() as AuthenticationExtensionsClientOutputs;\n\t\twarnUserOfMissingWebauthnExtensions(request.extensions, extensions);\n\t\tconst { largeBlob, prf, credProps, ...clientExtensionResults } = extensions;\n\n\t\tif (!credential) return null;\n\n\t\treturn {\n\t\t\tid: credential.id,\n\t\t\trawId: credential.id,\n\t\t\tresponse: {\n\t\t\t\tclientDataJSON: bufferToBase64URLString(credential.response.clientDataJSON),\n\t\t\t\tauthenticatorData: bufferToBase64URLString(credential.response.authenticatorData),\n\t\t\t\tsignature: bufferToBase64URLString(credential.response.signature),\n\t\t\t\tuserHandle: credential.response.userHandle\n\t\t\t\t\t? bufferToBase64URLString(credential.response.userHandle)\n\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t\tauthenticatorAttachment: undefined,\n\t\t\tclientExtensionResults: {\n\t\t\t\t...clientExtensionResults,\n\t\t\t\t...(largeBlob && {\n\t\t\t\t\tlargeBlob: {\n\t\t\t\t\t\t...largeBlob,\n\t\t\t\t\t\tblob: largeBlob?.blob ? bufferToBase64URLString(largeBlob.blob) : undefined,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\t...(prf?.results && {\n\t\t\t\t\tprf: {\n\t\t\t\t\t\tresults: {\n\t\t\t\t\t\t\tfirst: bufferToBase64URLString(prf.results.first),\n\t\t\t\t\t\t\tsecond: prf.results.second ? bufferToBase64URLString(prf.results.second) : undefined,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\t...(credProps && { credProps }),\n\t\t\t} satisfies AuthenticationExtensionsClientOutputsJSON,\n\t\t\ttype: \"public-key\",\n\t\t};\n\t},\n\n\tasync createAccount(\n\t\t_request: FastAccountCreationOptions,\n\t): Promise {\n\t\tthrow new NotSupportedError(\n\t\t\t\"Fast account creation with passkeys is only available through the native iOS API.\",\n\t\t);\n\t},\n};\n\n/**\n * warn the user about extensions that they tried to use that are not supported\n */\nconst warnUserOfMissingWebauthnExtensions = (\n\trequestedExtensions: AuthenticationExtensionsClientInputs | undefined,\n\tclientExtensionResults: AuthenticationExtensionsClientOutputs | undefined,\n) => {\n\tif (clientExtensionResults) {\n\t\tfor (const key in requestedExtensions) {\n\t\t\tif (typeof clientExtensionResults[key] === \"undefined\") {\n\t\t\t\talert(\n\t\t\t\t\t`Webauthn extension ${key} is undefined -- your browser probably doesn't know about it`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n};\n"]} \ No newline at end of file diff --git a/build/errors.d.ts b/build/errors.d.ts new file mode 100644 index 0000000..91b71ca --- /dev/null +++ b/build/errors.d.ts @@ -0,0 +1,16 @@ +export declare class PasskeyError extends Error { + name: T; + message: string; + cause?: unknown; + constructor({ name, message, cause }: { + name: T; + message: string; + cause?: unknown; + }); +} +export declare class UnknownError extends PasskeyError<"UnknownError"> { +} +export declare class NotSupportedError extends PasskeyError<"NotSupportedError"> { + constructor(message?: string); +} +//# sourceMappingURL=errors.d.ts.map \ No newline at end of file diff --git a/build/errors.d.ts.map b/build/errors.d.ts.map new file mode 100644 index 0000000..34c4937 --- /dev/null +++ b/build/errors.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,KAAK;IACxD,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEJ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAMnF;AAED,qBAAa,YAAa,SAAQ,YAAY,CAAC,cAAc,CAAC;CAAG;AAEjE,qBAAa,iBAAkB,SAAQ,YAAY,CAAC,mBAAmB,CAAC;gBAC3D,OAAO,SAA8B;CAGjD"} \ No newline at end of file diff --git a/build/errors.js b/build/errors.js new file mode 100644 index 0000000..9336abb --- /dev/null +++ b/build/errors.js @@ -0,0 +1,19 @@ +export class PasskeyError extends Error { + name; + message; + cause; + constructor({ name, message, cause }) { + super(); + this.name = name; + this.message = message; + this.cause = cause; + } +} +export class UnknownError extends PasskeyError { +} +export class NotSupportedError extends PasskeyError { + constructor(message = "Passkey are not supported") { + super({ name: "NotSupportedError", message }); + } +} +//# sourceMappingURL=errors.js.map \ No newline at end of file diff --git a/build/errors.js.map b/build/errors.js.map new file mode 100644 index 0000000..b3a44a1 --- /dev/null +++ b/build/errors.js.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAA+B,SAAQ,KAAK;IACxD,IAAI,CAAI;IACR,OAAO,CAAS;IAChB,KAAK,CAAW;IAEhB,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAiD;QAClF,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;CACD;AAED,MAAM,OAAO,YAAa,SAAQ,YAA4B;CAAG;AAEjE,MAAM,OAAO,iBAAkB,SAAQ,YAAiC;IACvE,YAAY,OAAO,GAAG,2BAA2B;QAChD,KAAK,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;CACD","sourcesContent":["export class PasskeyError extends Error {\n\tname: T;\n\tmessage: string;\n\tcause?: unknown;\n\n\tconstructor({ name, message, cause }: { name: T; message: string; cause?: unknown }) {\n\t\tsuper();\n\t\tthis.name = name;\n\t\tthis.message = message;\n\t\tthis.cause = cause;\n\t}\n}\n\nexport class UnknownError extends PasskeyError<\"UnknownError\"> {}\n\nexport class NotSupportedError extends PasskeyError<\"NotSupportedError\"> {\n\tconstructor(message = \"Passkey are not supported\") {\n\t\tsuper({ name: \"NotSupportedError\", message });\n\t}\n}\n"]} \ No newline at end of file diff --git a/build/index.d.ts b/build/index.d.ts new file mode 100644 index 0000000..d2d8310 --- /dev/null +++ b/build/index.d.ts @@ -0,0 +1,19 @@ +import type { AccountCreationResponse, AuthenticationExtensionsLargeBlobInputs, AuthenticationExtensionsPRFInputs, AuthenticationResponseJSON, FastAccountCreationOptions, PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON, CreationResponse } from "./ReactNativePasskeys.types"; +export declare function isSupported(): boolean; +export declare function isAutoFillAvalilable(): boolean; +export declare function isAccountCreationSupported(): boolean; +export declare function create(request: Omit & { + extensions?: { + largeBlob?: AuthenticationExtensionsLargeBlobInputs; + prf?: AuthenticationExtensionsPRFInputs; + credProps?: boolean; + }; +} & Pick): Promise; +export declare function get(request: Omit & { + extensions?: { + largeBlob?: AuthenticationExtensionsLargeBlobInputs; + prf?: AuthenticationExtensionsPRFInputs; + }; +}): Promise; +export declare function createAccount(request: FastAccountCreationOptions): Promise; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/build/index.d.ts.map b/build/index.d.ts.map new file mode 100644 index 0000000..d4cf5f9 --- /dev/null +++ b/build/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACX,uBAAuB,EACvB,uCAAuC,EACvC,iCAAiC,EACjC,0BAA0B,EAC1B,0BAA0B,EAC1B,sCAAsC,EACtC,qCAAqC,EACrC,gBAAgB,EAChB,MAAM,6BAA6B,CAAC;AAErC,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAED,wBAAsB,MAAM,CAC3B,OAAO,EAAE,IAAI,CAAC,sCAAsC,EAAE,YAAY,CAAC,GAAG;IAKrE,UAAU,CAAC,EAAE;QACZ,SAAS,CAAC,EAAE,uCAAuC,CAAC;QACpD,GAAG,CAAC,EAAE,iCAAiC,CAAC;QAExC,SAAS,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACF,GAAG,IAAI,CAAC,yBAAyB,EAAE,QAAQ,CAAC,GAC3C,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAElC;AAED,wBAAsB,GAAG,CACxB,OAAO,EAAE,IAAI,CAAC,qCAAqC,EAAE,YAAY,CAAC,GAAG;IAKpE,UAAU,CAAC,EAAE;QACZ,SAAS,CAAC,EAAE,uCAAuC,CAAC;QACpD,GAAG,CAAC,EAAE,iCAAiC,CAAC;KACxC,CAAC;CACF,GACC,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAE5C;AAED,wBAAsB,aAAa,CAClC,OAAO,EAAE,0BAA0B,GACjC,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAEzC"} \ No newline at end of file diff --git a/build/index.js b/build/index.js new file mode 100644 index 0000000..53d907d --- /dev/null +++ b/build/index.js @@ -0,0 +1,22 @@ +// Import the native module. On web, it will be resolved to ReactNativePasskeys.web.ts +// and on native platforms to ReactNativePasskeys.ts +import ReactNativePasskeysModule from "./ReactNativePasskeysModule"; +export function isSupported() { + return ReactNativePasskeysModule.isSupported(); +} +export function isAutoFillAvalilable() { + return ReactNativePasskeysModule.isAutoFillAvalilable(); +} +export function isAccountCreationSupported() { + return ReactNativePasskeysModule.isAccountCreationSupported(); +} +export async function create(request) { + return await ReactNativePasskeysModule.create(request); +} +export async function get(request) { + return await ReactNativePasskeysModule.get(request); +} +export async function createAccount(request) { + return await ReactNativePasskeysModule.createAccount(request); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/build/index.js.map b/build/index.js.map new file mode 100644 index 0000000..27c6334 --- /dev/null +++ b/build/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,oDAAoD;AACpD,OAAO,yBAAyB,MAAM,6BAA6B,CAAC;AAapE,MAAM,UAAU,WAAW;IAC1B,OAAO,yBAAyB,CAAC,WAAW,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,oBAAoB;IACnC,OAAO,yBAAyB,CAAC,oBAAoB,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,0BAA0B;IACzC,OAAO,yBAAyB,CAAC,0BAA0B,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAC3B,OAW6C;IAE7C,OAAO,MAAM,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CACxB,OASC;IAED,OAAO,MAAM,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,OAAmC;IAEnC,OAAO,MAAM,yBAAyB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC/D,CAAC","sourcesContent":["// Import the native module. On web, it will be resolved to ReactNativePasskeys.web.ts\n// and on native platforms to ReactNativePasskeys.ts\nimport ReactNativePasskeysModule from \"./ReactNativePasskeysModule\";\n\nimport type {\n\tAccountCreationResponse,\n\tAuthenticationExtensionsLargeBlobInputs,\n\tAuthenticationExtensionsPRFInputs,\n\tAuthenticationResponseJSON,\n\tFastAccountCreationOptions,\n\tPublicKeyCredentialCreationOptionsJSON,\n\tPublicKeyCredentialRequestOptionsJSON,\n\tCreationResponse,\n} from \"./ReactNativePasskeys.types\";\n\nexport function isSupported(): boolean {\n\treturn ReactNativePasskeysModule.isSupported();\n}\n\nexport function isAutoFillAvalilable(): boolean {\n\treturn ReactNativePasskeysModule.isAutoFillAvalilable();\n}\n\nexport function isAccountCreationSupported(): boolean {\n\treturn ReactNativePasskeysModule.isAccountCreationSupported();\n}\n\nexport async function create(\n\trequest: Omit & {\n\t\t// Platform support:\n\t\t// - iOS: largeBlob (iOS 17+), prf (iOS 18+)\n\t\t// - Android: prf\n\t\t// - Web: largeBlob, prf\n\t\textensions?: {\n\t\t\tlargeBlob?: AuthenticationExtensionsLargeBlobInputs;\n\t\t\tprf?: AuthenticationExtensionsPRFInputs;\n\t\t\t// Request credProps on registration to learn discoverability.\n\t\t\tcredProps?: boolean;\n\t\t};\n\t} & Pick,\n): Promise {\n\treturn await ReactNativePasskeysModule.create(request);\n}\n\nexport async function get(\n\trequest: Omit & {\n\t\t// Platform support:\n\t\t// - iOS: largeBlob (iOS 17+), prf (iOS 18+)\n\t\t// - Android: prf\n\t\t// - Web: largeBlob, prf\n\t\textensions?: {\n\t\t\tlargeBlob?: AuthenticationExtensionsLargeBlobInputs;\n\t\t\tprf?: AuthenticationExtensionsPRFInputs;\n\t\t};\n\t},\n): Promise {\n\treturn await ReactNativePasskeysModule.get(request);\n}\n\nexport async function createAccount(\n\trequest: FastAccountCreationOptions,\n): Promise {\n\treturn await ReactNativePasskeysModule.createAccount(request);\n}\n"]} \ No newline at end of file diff --git a/build/utils/base64.d.ts b/build/utils/base64.d.ts new file mode 100644 index 0000000..26569ee --- /dev/null +++ b/build/utils/base64.d.ts @@ -0,0 +1,16 @@ +/** + * Convert from a Base64URL-encoded string to an Array Buffer. Best used when converting a + * credential ID from a JSON string to an ArrayBuffer, like in allowCredentials or + * excludeCredentials + * + * Helper method to compliment `bufferToBase64URLString` + */ +export declare function base64URLStringToBuffer(base64URLString: string): ArrayBuffer; +/** + * Convert the given array buffer into a Base64URL-encoded string. Ideal for converting various + * credential response ArrayBuffers to string for sending back to the server as JSON. + * + * Helper method to compliment `base64URLStringToBuffer` + */ +export declare function bufferToBase64URLString(buffer: ArrayBuffer): string; +//# sourceMappingURL=base64.d.ts.map \ No newline at end of file diff --git a/build/utils/base64.d.ts.map b/build/utils/base64.d.ts.map new file mode 100644 index 0000000..8e5f4ef --- /dev/null +++ b/build/utils/base64.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../src/utils/base64.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,MAAM,GAAG,WAAW,CAyB5E;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAWnE"} \ No newline at end of file diff --git a/build/utils/base64.js b/build/utils/base64.js new file mode 100644 index 0000000..f75d7a4 --- /dev/null +++ b/build/utils/base64.js @@ -0,0 +1,46 @@ +// ! taken from https://github.com/MasterKale/SimpleWebAuthn/blob/e02dce6f2f83d8923f3a549f84e0b7b3d44fa3da/packages/browser/src/helpers/base64URLStringToBuffer.ts +/** + * Convert from a Base64URL-encoded string to an Array Buffer. Best used when converting a + * credential ID from a JSON string to an ArrayBuffer, like in allowCredentials or + * excludeCredentials + * + * Helper method to compliment `bufferToBase64URLString` + */ +export function base64URLStringToBuffer(base64URLString) { + // Convert from Base64URL to Base64 + const base64 = base64URLString.replace(/-/g, "+").replace(/_/g, "/"); + /** + * Pad with '=' until it's a multiple of four + * (4 - (85 % 4 = 1) = 3) % 4 = 3 padding + * (4 - (86 % 4 = 2) = 2) % 4 = 2 padding + * (4 - (87 % 4 = 3) = 1) % 4 = 1 padding + * (4 - (88 % 4 = 0) = 4) % 4 = 0 padding + */ + const padLength = (4 - (base64.length % 4)) % 4; + const padded = base64.padEnd(base64.length + padLength, "="); + // Convert to a binary string + const binary = atob(padded); + // Convert binary string to buffer + const buffer = new ArrayBuffer(binary.length); + const bytes = new Uint8Array(buffer); + for (let i = 0; i < binary.length; i++) { + bytes[i] = binary.charCodeAt(i); + } + return buffer; +} +/** + * Convert the given array buffer into a Base64URL-encoded string. Ideal for converting various + * credential response ArrayBuffers to string for sending back to the server as JSON. + * + * Helper method to compliment `base64URLStringToBuffer` + */ +export function bufferToBase64URLString(buffer) { + const bytes = new Uint8Array(buffer); + let str = ""; + for (const charCode of bytes) { + str += String.fromCharCode(charCode); + } + const base64String = btoa(str); + return base64String.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ""); +} +//# sourceMappingURL=base64.js.map \ No newline at end of file diff --git a/build/utils/base64.js.map b/build/utils/base64.js.map new file mode 100644 index 0000000..b48b9ae --- /dev/null +++ b/build/utils/base64.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/utils/base64.ts"],"names":[],"mappings":"AAAA,kKAAkK;AAClK;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,eAAuB;IAC9D,mCAAmC;IACnC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACrE;;;;;;OAMG;IACH,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC;IAE7D,6BAA6B;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAE5B,kCAAkC;IAClC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAmB;IAC1D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,GAAG,GAAG,EAAE,CAAC;IAEb,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC9B,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAE/B,OAAO,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/E,CAAC","sourcesContent":["// ! taken from https://github.com/MasterKale/SimpleWebAuthn/blob/e02dce6f2f83d8923f3a549f84e0b7b3d44fa3da/packages/browser/src/helpers/base64URLStringToBuffer.ts\n/**\n * Convert from a Base64URL-encoded string to an Array Buffer. Best used when converting a\n * credential ID from a JSON string to an ArrayBuffer, like in allowCredentials or\n * excludeCredentials\n *\n * Helper method to compliment `bufferToBase64URLString`\n */\nexport function base64URLStringToBuffer(base64URLString: string): ArrayBuffer {\n\t// Convert from Base64URL to Base64\n\tconst base64 = base64URLString.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\t/**\n\t * Pad with '=' until it's a multiple of four\n\t * (4 - (85 % 4 = 1) = 3) % 4 = 3 padding\n\t * (4 - (86 % 4 = 2) = 2) % 4 = 2 padding\n\t * (4 - (87 % 4 = 3) = 1) % 4 = 1 padding\n\t * (4 - (88 % 4 = 0) = 4) % 4 = 0 padding\n\t */\n\tconst padLength = (4 - (base64.length % 4)) % 4;\n\tconst padded = base64.padEnd(base64.length + padLength, \"=\");\n\n\t// Convert to a binary string\n\tconst binary = atob(padded);\n\n\t// Convert binary string to buffer\n\tconst buffer = new ArrayBuffer(binary.length);\n\tconst bytes = new Uint8Array(buffer);\n\n\tfor (let i = 0; i < binary.length; i++) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\n\treturn buffer;\n}\n\n/**\n * Convert the given array buffer into a Base64URL-encoded string. Ideal for converting various\n * credential response ArrayBuffers to string for sending back to the server as JSON.\n *\n * Helper method to compliment `base64URLStringToBuffer`\n */\nexport function bufferToBase64URLString(buffer: ArrayBuffer): string {\n\tconst bytes = new Uint8Array(buffer);\n\tlet str = \"\";\n\n\tfor (const charCode of bytes) {\n\t\tstr += String.fromCharCode(charCode);\n\t}\n\n\tconst base64String = btoa(str);\n\n\treturn base64String.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\n"]} \ No newline at end of file diff --git a/build/utils/prf.d.ts b/build/utils/prf.d.ts new file mode 100644 index 0000000..6201d3d --- /dev/null +++ b/build/utils/prf.d.ts @@ -0,0 +1,12 @@ +import type { PublicKeyCredentialCreationOptionsJSON, PublicKeyCredentialRequestOptionsJSON } from "../ReactNativePasskeys.types"; +export declare function normalizePRFInputs(request: PublicKeyCredentialCreationOptionsJSON | PublicKeyCredentialRequestOptionsJSON): { + eval?: { + first: ArrayBuffer; + second?: ArrayBuffer; + }; + evalByCredential?: Record; +} | undefined; +//# sourceMappingURL=prf.d.ts.map \ No newline at end of file diff --git a/build/utils/prf.d.ts.map b/build/utils/prf.d.ts.map new file mode 100644 index 0000000..533ffb5 --- /dev/null +++ b/build/utils/prf.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"prf.d.ts","sourceRoot":"","sources":["../../src/utils/prf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,sCAAsC,EACtC,qCAAqC,EACrC,MAAM,8BAA8B,CAAC;AAEtC,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,sCAAsC,GAAG,qCAAqC;WAS/E;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE;uBAChC,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,CAAC;cA0ChF"} \ No newline at end of file diff --git a/build/utils/prf.js b/build/utils/prf.js new file mode 100644 index 0000000..b5c026a --- /dev/null +++ b/build/utils/prf.js @@ -0,0 +1,41 @@ +import { base64URLStringToBuffer } from "./base64"; +export function normalizePRFInputs(request) { + const { prf } = request.extensions ?? {}; + if (!prf) { + return; + } + const result = {}; + // Handle eval (single input) + if (prf.eval) { + result.eval = { + first: base64URLStringToBuffer(prf.eval.first), + second: prf.eval.second ? base64URLStringToBuffer(prf.eval.second) : undefined, + }; + } + // Handle evalByCredential (different inputs per credential) + if (prf.evalByCredential) { + // Validate that allowCredentials is specified per WebAuthn spec + const allowCredentials = "allowCredentials" in request ? request.allowCredentials : undefined; + if (!allowCredentials || allowCredentials.length === 0) { + throw new Error("evalByCredential requires allowCredentials to be specified"); + } + // Per WebAuthn spec: validate that all keys in evalByCredential match allowCredentials + const allowedCredentialIds = new Set(allowCredentials.map((c) => c.id)); + result.evalByCredential = {}; + for (const [credentialId, prfValues] of Object.entries(prf.evalByCredential)) { + // Validate: key must not be empty string and must equal id of some element of allowCredentials + if (credentialId === "") { + throw new Error("evalByCredential key cannot be empty string"); + } + if (!allowedCredentialIds.has(credentialId)) { + throw new Error(`evalByCredential key "${credentialId}" does not match any allowCredentials`); + } + result.evalByCredential[credentialId] = { + first: base64URLStringToBuffer(prfValues.first), + second: prfValues.second ? base64URLStringToBuffer(prfValues.second) : undefined, + }; + } + } + return Object.keys(result).length > 0 ? result : undefined; +} +//# sourceMappingURL=prf.js.map \ No newline at end of file diff --git a/build/utils/prf.js.map b/build/utils/prf.js.map new file mode 100644 index 0000000..19309b4 --- /dev/null +++ b/build/utils/prf.js.map @@ -0,0 +1 @@ +{"version":3,"file":"prf.js","sourceRoot":"","sources":["../../src/utils/prf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAOnD,MAAM,UAAU,kBAAkB,CACjC,OAAuF;IAEvF,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IAEzC,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,OAAO;IACR,CAAC;IAED,MAAM,MAAM,GAGR,EAAE,CAAC;IAEP,6BAA6B;IAC7B,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,GAAG;YACb,KAAK,EAAE,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAC9C,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9E,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC1B,gEAAgE;QAChE,MAAM,gBAAgB,GAAG,kBAAkB,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9F,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAC/E,CAAC;QAED,uFAAuF;QACvF,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAExE,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9E,+FAA+F;YAC/F,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CACd,yBAAyB,YAAY,uCAAuC,CAC5E,CAAC;YACH,CAAC;YAED,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,GAAG;gBACvC,KAAK,EAAE,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC/C,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;aAChF,CAAC;QACH,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC","sourcesContent":["import { base64URLStringToBuffer } from \"./base64\";\n\nimport type {\n\tPublicKeyCredentialCreationOptionsJSON,\n\tPublicKeyCredentialRequestOptionsJSON,\n} from \"../ReactNativePasskeys.types\";\n\nexport function normalizePRFInputs(\n\trequest: PublicKeyCredentialCreationOptionsJSON | PublicKeyCredentialRequestOptionsJSON,\n) {\n\tconst { prf } = request.extensions ?? {};\n\n\tif (!prf) {\n\t\treturn;\n\t}\n\n\tconst result: {\n\t\teval?: { first: ArrayBuffer; second?: ArrayBuffer };\n\t\tevalByCredential?: Record;\n\t} = {};\n\n\t// Handle eval (single input)\n\tif (prf.eval) {\n\t\tresult.eval = {\n\t\t\tfirst: base64URLStringToBuffer(prf.eval.first),\n\t\t\tsecond: prf.eval.second ? base64URLStringToBuffer(prf.eval.second) : undefined,\n\t\t};\n\t}\n\n\t// Handle evalByCredential (different inputs per credential)\n\tif (prf.evalByCredential) {\n\t\t// Validate that allowCredentials is specified per WebAuthn spec\n\t\tconst allowCredentials = \"allowCredentials\" in request ? request.allowCredentials : undefined;\n\t\tif (!allowCredentials || allowCredentials.length === 0) {\n\t\t\tthrow new Error(\"evalByCredential requires allowCredentials to be specified\");\n\t\t}\n\n\t\t// Per WebAuthn spec: validate that all keys in evalByCredential match allowCredentials\n\t\tconst allowedCredentialIds = new Set(allowCredentials.map((c) => c.id));\n\n\t\tresult.evalByCredential = {};\n\t\tfor (const [credentialId, prfValues] of Object.entries(prf.evalByCredential)) {\n\t\t\t// Validate: key must not be empty string and must equal id of some element of allowCredentials\n\t\t\tif (credentialId === \"\") {\n\t\t\t\tthrow new Error(\"evalByCredential key cannot be empty string\");\n\t\t\t}\n\t\t\tif (!allowedCredentialIds.has(credentialId)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`evalByCredential key \"${credentialId}\" does not match any allowCredentials`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tresult.evalByCredential[credentialId] = {\n\t\t\t\tfirst: base64URLStringToBuffer(prfValues.first),\n\t\t\t\tsecond: prfValues.second ? base64URLStringToBuffer(prfValues.second) : undefined,\n\t\t\t};\n\t\t}\n\t}\n\n\treturn Object.keys(result).length > 0 ? result : undefined;\n}\n"]} \ No newline at end of file diff --git a/build/utils/warn-user-of-missing-webauthn-extensions.d.ts b/build/utils/warn-user-of-missing-webauthn-extensions.d.ts new file mode 100644 index 0000000..10d6b49 --- /dev/null +++ b/build/utils/warn-user-of-missing-webauthn-extensions.d.ts @@ -0,0 +1,6 @@ +import type { AuthenticationExtensionsClientInputs, AuthenticationExtensionsClientOutputs } from "../ReactNativePasskeys.types"; +/** + * warn the user about extensions that they tried to use that are not supported + */ +export declare const warnUserOfMissingWebauthnExtensions: (requestedExtensions: AuthenticationExtensionsClientInputs | undefined, clientExtensionResults: AuthenticationExtensionsClientOutputs | undefined) => void; +//# sourceMappingURL=warn-user-of-missing-webauthn-extensions.d.ts.map \ No newline at end of file diff --git a/build/utils/warn-user-of-missing-webauthn-extensions.d.ts.map b/build/utils/warn-user-of-missing-webauthn-extensions.d.ts.map new file mode 100644 index 0000000..c477647 --- /dev/null +++ b/build/utils/warn-user-of-missing-webauthn-extensions.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"warn-user-of-missing-webauthn-extensions.d.ts","sourceRoot":"","sources":["../../src/utils/warn-user-of-missing-webauthn-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,oCAAoC,EACpC,qCAAqC,EACrC,MAAM,8BAA8B,CAAC;AAEtC;;GAEG;AACH,eAAO,MAAM,mCAAmC,GAC/C,qBAAqB,oCAAoC,GAAG,SAAS,EACrE,wBAAwB,qCAAqC,GAAG,SAAS,SAWzE,CAAC"} \ No newline at end of file diff --git a/build/utils/warn-user-of-missing-webauthn-extensions.js b/build/utils/warn-user-of-missing-webauthn-extensions.js new file mode 100644 index 0000000..1c5c5cb --- /dev/null +++ b/build/utils/warn-user-of-missing-webauthn-extensions.js @@ -0,0 +1,13 @@ +/** + * warn the user about extensions that they tried to use that are not supported + */ +export const warnUserOfMissingWebauthnExtensions = (requestedExtensions, clientExtensionResults) => { + if (clientExtensionResults) { + for (const key in requestedExtensions) { + if (typeof clientExtensionResults[key] === "undefined") { + alert(`Webauthn extension ${key} is undefined -- your browser probably doesn't know about it`); + } + } + } +}; +//# sourceMappingURL=warn-user-of-missing-webauthn-extensions.js.map \ No newline at end of file diff --git a/build/utils/warn-user-of-missing-webauthn-extensions.js.map b/build/utils/warn-user-of-missing-webauthn-extensions.js.map new file mode 100644 index 0000000..ef02e40 --- /dev/null +++ b/build/utils/warn-user-of-missing-webauthn-extensions.js.map @@ -0,0 +1 @@ +{"version":3,"file":"warn-user-of-missing-webauthn-extensions.js","sourceRoot":"","sources":["../../src/utils/warn-user-of-missing-webauthn-extensions.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAClD,mBAAqE,EACrE,sBAAyE,EACxE,EAAE;IACH,IAAI,sBAAsB,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACvC,IAAI,OAAO,sBAAsB,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC;gBACxD,KAAK,CACJ,sBAAsB,GAAG,8DAA8D,CACvF,CAAC;YACH,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC,CAAC","sourcesContent":["import type {\n\tAuthenticationExtensionsClientInputs,\n\tAuthenticationExtensionsClientOutputs,\n} from \"../ReactNativePasskeys.types\";\n\n/**\n * warn the user about extensions that they tried to use that are not supported\n */\nexport const warnUserOfMissingWebauthnExtensions = (\n\trequestedExtensions: AuthenticationExtensionsClientInputs | undefined,\n\tclientExtensionResults: AuthenticationExtensionsClientOutputs | undefined,\n) => {\n\tif (clientExtensionResults) {\n\t\tfor (const key in requestedExtensions) {\n\t\t\tif (typeof clientExtensionResults[key] === \"undefined\") {\n\t\t\t\talert(\n\t\t\t\t\t`Webauthn extension ${key} is undefined -- your browser probably doesn't know about it`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n};\n"]} \ No newline at end of file diff --git a/package.json b/package.json index 3debd4c..c3f598d 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { - "name": "react-native-passkeys", - "version": "0.4.1", + "name": "@officialunofficial/react-native-passkeys", + "version": "0.4.2", "description": "A library for using (webauthn) passkeys on iOS, Android & web with a single api", "main": "build/index.js", "types": "build/index.d.ts", "scripts": { "build": "expo-module build", "check-exports": "attw --pack .", - "ci": "pnpm run lint && pnpm run format:check && pnpm run prepare && pnpm run check-exports", + "ci": "pnpm run lint && pnpm run format:check && pnpm run build && pnpm run check-exports", "clean": "expo-module clean", "expo-module": "expo-module", "format": "oxfmt --write ./src", @@ -16,8 +16,6 @@ "lint:fix": "oxlint --fix ./src", "open:ios": "open -a \"Xcode\" example/ios", "open:android": "open -a \"Android Studio\" example/android", - "prepare": "expo-module prepare", - "prepublishOnly": "expo-module prepublishOnly", "test": "expo-module test" }, "keywords": [ @@ -32,14 +30,21 @@ ], "repository": { "type": "git", - "url": "git+https://github.com/peterferguson/react-native-passkeys.git" + "url": "git+https://github.com/officialunofficial/react-native-passkeys.git" }, "bugs": { - "url": "https://github.com/peterferguson/react-native-passkeys/issues" + "url": "https://github.com/officialunofficial/react-native-passkeys/issues" }, "author": "Peter Ferguson (https://github.com/peterferguson)", + "contributors": [ + "officialunofficial " + ], "license": "MIT", - "homepage": "https://github.com/peterferguson/react-native-passkeys#readme", + "homepage": "https://github.com/officialunofficial/react-native-passkeys#readme", + "publishConfig": { + "access": "public", + "provenance": true + }, "files": [ "build", "src",