diff --git a/packages/keychain/src/hooks/account.ts b/packages/keychain/src/hooks/account.ts index fe1c474436..4f7ebc625b 100644 --- a/packages/keychain/src/hooks/account.ts +++ b/packages/keychain/src/hooks/account.ts @@ -38,9 +38,15 @@ const createCredentials = async ( ) => { if (!beginRegistration.publicKey) return; if (beginRegistration.publicKey?.authenticatorSelection) { + const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent); if (!hasPlatformAuthenticator || navigator.userAgent.indexOf("Win") != -1) beginRegistration.publicKey.authenticatorSelection.authenticatorAttachment = "cross-platform"; + else if (isIOS) + // Explicitly set "platform" on iOS so Chrome iOS (Google Password Manager) + // shows "Create Passkey" instead of a "Sign in" dialog + beginRegistration.publicKey.authenticatorSelection.authenticatorAttachment = + "platform"; else beginRegistration.publicKey.authenticatorSelection.authenticatorAttachment = undefined; diff --git a/packages/keychain/src/utils/api/generated.ts b/packages/keychain/src/utils/api/generated.ts index f8e3e1b7cf..f81b764050 100644 --- a/packages/keychain/src/utils/api/generated.ts +++ b/packages/keychain/src/utils/api/generated.ts @@ -2982,6 +2982,11 @@ export type Mutation = { finalizeLogin: Scalars["String"]; finalizeRegistration: Account; increaseBudget: Paymaster; + /** + * Perform Prove Identity Verify v2. + * Submits consumer PII for verification. + */ + proveVerify: ProveVerifyResponse; register: Account; removeAllPolicies: Scalars["Boolean"]; removeFromTeam: Scalars["Boolean"]; @@ -3175,6 +3180,10 @@ export type MutationIncreaseBudgetArgs = { unit: FeeUnit; }; +export type MutationProveVerifyArgs = { + input: ProveVerifyInput; +}; + export type MutationRegisterArgs = { chainId: Scalars["String"]; owner: SignerInput; @@ -4331,6 +4340,77 @@ export type Project = { project: Scalars["String"]; }; +export type ProveAddressResult = { + __typename?: "ProveAddressResult"; + addressScore: Scalars["Int"]; + city: Scalars["Boolean"]; + distance: Scalars["Float"]; + postalCode: Scalars["Boolean"]; + region: Scalars["Boolean"]; + street: Scalars["Boolean"]; + streetNumber: Scalars["Int"]; +}; + +export type ProveEmailResult = { + __typename?: "ProveEmailResult"; + emailAddress: Scalars["Boolean"]; +}; + +export type ProveIdentifiersResult = { + __typename?: "ProveIdentifiersResult"; + dob: Scalars["Boolean"]; + driversLicenseNumber: Scalars["Boolean"]; + driversLicenseState: Scalars["Boolean"]; + last4: Scalars["Boolean"]; + ssn: Scalars["Boolean"]; +}; + +export type ProveNameResult = { + __typename?: "ProveNameResult"; + firstName: Scalars["Int"]; + lastName: Scalars["Int"]; + nameScore: Scalars["Int"]; +}; + +export type ProveVerifyInput = { + address?: InputMaybe; + city?: InputMaybe; + dob?: InputMaybe; + emailAddress?: InputMaybe; + extendedAddress?: InputMaybe; + /** Use the UAT sandbox environment instead of production. */ + firstName?: InputMaybe; + last4?: InputMaybe; + lastName?: InputMaybe; + phoneNumber?: InputMaybe; + postalCode?: InputMaybe; + region?: InputMaybe; + ssn?: InputMaybe; +}; + +export type ProveVerifyResponse = { + __typename?: "ProveVerifyResponse"; + address?: Maybe; + carrier?: Maybe; + cipConfidence?: Maybe; + countryCode?: Maybe; + description: Scalars["String"]; + email?: Maybe; + enrollStatus?: Maybe; + identifiers?: Maybe; + lineType?: Maybe; + multiCipConfidence?: Maybe; + multiVerified?: Maybe; + name?: Maybe; + payfoneAlias?: Maybe; + phoneNumber?: Maybe; + reasonCodes?: Maybe>; + status: Scalars["Int"]; + success: Scalars["Boolean"]; + transactionId?: Maybe; + verified?: Maybe; +}; + export enum PurchaseType { Credits = "CREDITS", /** @deprecated Starterpack purchases are now handled client-side */ @@ -5385,6 +5465,7 @@ export type Session = Node & { /** Whether the session has been revoked */ isRevoked: Scalars["Boolean"]; metadata?: Maybe; + sessionKeyGUID?: Maybe; signer?: Maybe; updatedAt: Scalars["Time"]; }; @@ -5524,6 +5605,22 @@ export type SessionWhereInput = { isRevokedNEQ?: InputMaybe; not?: InputMaybe; or?: InputMaybe>; + /** session_key_guid field predicates */ + sessionKeyGUID?: InputMaybe; + sessionKeyGUIDContains?: InputMaybe; + sessionKeyGUIDContainsFold?: InputMaybe; + sessionKeyGUIDEqualFold?: InputMaybe; + sessionKeyGUIDGT?: InputMaybe; + sessionKeyGUIDGTE?: InputMaybe; + sessionKeyGUIDHasPrefix?: InputMaybe; + sessionKeyGUIDHasSuffix?: InputMaybe; + sessionKeyGUIDIn?: InputMaybe>; + sessionKeyGUIDIsNil?: InputMaybe; + sessionKeyGUIDLT?: InputMaybe; + sessionKeyGUIDLTE?: InputMaybe; + sessionKeyGUIDNEQ?: InputMaybe; + sessionKeyGUIDNotIn?: InputMaybe>; + sessionKeyGUIDNotNil?: InputMaybe; /** updated_at field predicates */ updatedAt?: InputMaybe; updatedAtGT?: InputMaybe;