From 03b693093eab18b2841ef8bde5c050ecece71549 Mon Sep 17 00:00:00 2001 From: sebipap Date: Mon, 8 Jan 2024 17:06:22 -0300 Subject: [PATCH 1/9] =?UTF-8?q?=F0=9F=94=A7=20exclude=20tamagui=20componen?= =?UTF-8?q?ts=20from=20no-raw-text=20rule?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.eslintrc.js b/.eslintrc.js index adb5b185..03703124 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -26,7 +26,7 @@ module.exports = { "import/prefer-default-export": "error", "no-console": "error", "no-shadow": "off", // @typescript-eslint/no-shadow - "react-native/no-raw-text": ["error", { skip: ["Button"] }], + "react-native/no-raw-text": ["error", { skip: ["Button", "Heading", "SizableText"] }], "unicorn/filename-case": "off", // use default export name "unicorn/prefer-top-level-await": "off", // unsupported in react-native }, From 030b0f01238fcbe3fb256d3be9e1d0ccca8745c4 Mon Sep 17 00:00:00 2001 From: sebipap Date: Mon, 22 Jan 2024 15:34:45 -0300 Subject: [PATCH 2/9] =?UTF-8?q?=F0=9F=9A=A7=20pomelo:=20register=20and=20a?= =?UTF-8?q?uthenticate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/auth.tsx | 69 ++++++++++++++++++ .../auth/generate-authentication-options.ts | 26 +++++++ .../api/auth/generate-registration-options.ts | 46 ++++++++++++ pomelo/api/auth/verify-authentication.ts | 69 ++++++++++++++++++ pomelo/api/auth/verify-registration.ts | 71 +++++++++++++++++++ pomelo/database/schema.ts | 15 +++- pomelo/package.json | 5 +- pomelo/utils/auth.ts | 53 ++++++++++++++ pomelo/utils/cors.ts | 18 +++++ 9 files changed, 370 insertions(+), 2 deletions(-) create mode 100644 app/auth.tsx create mode 100644 pomelo/api/auth/generate-authentication-options.ts create mode 100644 pomelo/api/auth/generate-registration-options.ts create mode 100644 pomelo/api/auth/verify-authentication.ts create mode 100644 pomelo/api/auth/verify-registration.ts create mode 100644 pomelo/utils/auth.ts create mode 100644 pomelo/utils/cors.ts diff --git a/app/auth.tsx b/app/auth.tsx new file mode 100644 index 00000000..86cd1388 --- /dev/null +++ b/app/auth.tsx @@ -0,0 +1,69 @@ +import type { + PublicKeyCredentialCreationOptionsJSON, + PublicKeyCredentialRequestOptionsJSON, +} from "@github/webauthn-json/dist/types/basic/json"; +import { startAuthentication, startRegistration } from "@simplewebauthn/browser"; +import React from "react"; +import { Button, YStack } from "tamagui"; + +async function authenticate() { + const optionsResponse = await fetch("http://localhost:3000/api/auth/generate-authentication-options?userID=seba"); + const options = (await optionsResponse.json()) as PublicKeyCredentialRequestOptionsJSON; + console.log("Authentication Options (Autofill)", options); + try { + const authenticationResponse = await startAuthentication({ + ...options, + // allowCredentials: undefined, + }); + console.log("Authentication Response (Autofill)", JSON.stringify(authenticationResponse, undefined, 2)); + const verificationResp = await fetch("http://localhost:3000/api/auth/verify-authentication?userID=seba", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(authenticationResponse), + }); + const verificationJSON = (await verificationResp.json()) as { verified: boolean }; + console.log("Server Response (Autofill)", JSON.stringify(verificationJSON, undefined, 2)); + if (verificationJSON.verified) { + alert(`User authenticated!`); + } else { + alert(`Oh no, something went wrong! Response:
${JSON.stringify(verificationJSON)}
`); + } + } catch (error) { + console.error("(Autofill)", error); + } +} + +async function register() { + const response = await fetch("http://localhost:3000/api/auth/generate-registration-options?userID=seba"); + try { + const options = (await response.json()) as PublicKeyCredentialCreationOptionsJSON; + const registration = await startRegistration(options); + const verifyRegistrationResponse = await fetch("http://localhost:3000/api/auth/verify-registration?userID=seba", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(registration), + }); + const { verified } = (await verifyRegistrationResponse.json()) as { verified: boolean }; + console.log("Server Response", JSON.stringify({ verified }, undefined, 2)); + if (verified) { + console.log(`Authenticator registered!`); + } else { + console.log(`Oh no, something went wrong! Response:
${JSON.stringify({ verified })}
`); + } + } catch (error) { + console.error(error); + } +} + +export default function Auth() { + return ( + + + + + ); +} diff --git a/pomelo/api/auth/generate-authentication-options.ts b/pomelo/api/auth/generate-authentication-options.ts new file mode 100644 index 00000000..76b6d53d --- /dev/null +++ b/pomelo/api/auth/generate-authentication-options.ts @@ -0,0 +1,26 @@ +import type { GenerateAuthenticationOptionsOpts } from "@simplewebauthn/server"; +import { generateAuthenticationOptions } from "@simplewebauthn/server"; +import type { VercelRequest, VercelResponse } from "@vercel/node"; + +import { rpId } from "../../../utils/constants.js"; +import { getCredentials, saveChallenge } from "../../utils/auth.js"; +import allowCors from "../../utils/cors.js"; + +async function handler(request: VercelRequest, response: VercelResponse) { + const { userID } = request.query as { userID: string }; + const credentials = await getCredentials(userID); + const options_: GenerateAuthenticationOptionsOpts = { + timeout: 60_000, + allowCredentials: credentials.map((credential) => ({ + ...credential, + type: "public-key", + })), + userVerification: "preferred", + rpID: rpId, + }; + const options = await generateAuthenticationOptions(options_); + await saveChallenge({ challenge: options.challenge, userID }); + response.send(options); +} + +export default allowCors(handler); diff --git a/pomelo/api/auth/generate-registration-options.ts b/pomelo/api/auth/generate-registration-options.ts new file mode 100644 index 00000000..ff4de35f --- /dev/null +++ b/pomelo/api/auth/generate-registration-options.ts @@ -0,0 +1,46 @@ +import type { GenerateRegistrationOptionsOpts } from "@simplewebauthn/server"; +import { generateRegistrationOptions } from "@simplewebauthn/server"; +import type { VercelRequest, VercelResponse } from "@vercel/node"; + +import { rpId } from "../../../utils/constants.js"; +import { getCredentials, saveChallenge } from "../../utils/auth.js"; +import allowCors from "../../utils/cors.js"; + +async function handler(request: VercelRequest, response: VercelResponse) { + const { userID } = request.query as { userID: string }; + const credentials = await getCredentials(userID); + const registrationOptions: GenerateRegistrationOptionsOpts = { + rpName: "exactly", + rpID: rpId, + userID, + // TODO: change username + userName: "username", + timeout: 60_000, + attestationType: "none", + /** + * Passing in a user's list of already-registered authenticator IDs here prevents users from + * registering the same device multiple times. The authenticator will simply throw an error in + * the browser if it's asked to perform registration when one of these ID's already resides + * on it. + */ + excludeCredentials: credentials.map((credential) => ({ + ...credential, + type: "public-key", + })), + authenticatorSelection: { + residentKey: "discouraged", + userVerification: "preferred", + }, + /** + * Support the two most common algorithms: ES256, and RS256 + * TODO: check if this are the correct values + */ + supportedAlgorithmIDs: [-7, -257], + }; + + const options = await generateRegistrationOptions(registrationOptions); + await saveChallenge({ challenge: options.challenge, userID }); + response.send(options); +} + +export default allowCors(handler); diff --git a/pomelo/api/auth/verify-authentication.ts b/pomelo/api/auth/verify-authentication.ts new file mode 100644 index 00000000..cb1ba9f5 --- /dev/null +++ b/pomelo/api/auth/verify-authentication.ts @@ -0,0 +1,69 @@ +import { + verifyAuthenticationResponse, + type VerifiedAuthenticationResponse, + type VerifyAuthenticationResponseOpts, +} from "@simplewebauthn/server"; +import { isoBase64URL, isoUint8Array } from "@simplewebauthn/server/helpers"; +import type { AuthenticationResponseJSON } from "@simplewebauthn/typescript-types"; +import type { VercelRequest, VercelResponse } from "@vercel/node"; + +import { rpId } from "../../../utils/constants.js"; +import { getChallenge, getCredentials, origin } from "../../utils/auth.js"; +import allowCors from "../../utils/cors.js"; + +async function handler(request: VercelRequest, response: VercelResponse) { + const body = request.body as AuthenticationResponseJSON; + const { userID } = request.query as { userID: string }; + const credentials = await getCredentials(userID); + const challenge = await getChallenge(userID); + + if (!challenge) { + response.send({ verified: false }); + return; + } + + const { value: expectedChallenge } = challenge; + let databaseAuthenticator; + const bodyCredIDBuffer = isoBase64URL.toBuffer(body.rawId); + + for (const credential of credentials) { + if (isoUint8Array.areEqual(credential.id, bodyCredIDBuffer)) { + databaseAuthenticator = credential; + break; + } + } + + if (!databaseAuthenticator) { + response.status(400).send({ + error: "Authenticator is not registered with this site", + }); + return; + } + + let verification: VerifiedAuthenticationResponse; + try { + const options: VerifyAuthenticationResponseOpts = { + response: body, + expectedChallenge, + expectedOrigin: origin, + expectedRPID: rpId, + authenticator: databaseAuthenticator, + requireUserVerification: false, + }; + verification = await verifyAuthenticationResponse(options); + } catch (error) { + const _error = error as Error; + console.error(_error); + response.status(400).send({ error: _error.message }); + return; + } + + const { verified, authenticationInfo } = verification; + + if (verified) { + databaseAuthenticator.counter = authenticationInfo.newCounter; + } + response.send({ verified }); +} + +export default allowCors(handler); diff --git a/pomelo/api/auth/verify-registration.ts b/pomelo/api/auth/verify-registration.ts new file mode 100644 index 00000000..fb135855 --- /dev/null +++ b/pomelo/api/auth/verify-registration.ts @@ -0,0 +1,71 @@ +import { + verifyRegistrationResponse, + type VerifiedRegistrationResponse, + type VerifyRegistrationResponseOpts, +} from "@simplewebauthn/server"; +import { isoUint8Array } from "@simplewebauthn/server/helpers"; +import type { AuthenticatorDevice, RegistrationResponseJSON } from "@simplewebauthn/typescript-types"; +import type { VercelRequest, VercelResponse } from "@vercel/node"; + +import { rpId } from "../../../utils/constants.js"; +import { getChallenge, getCredentials, saveCredentials } from "../../utils/auth.js"; +import allowCors from "../../utils/cors.js"; + +async function handler(request: VercelRequest, response: VercelResponse) { + const body = request.body as RegistrationResponseJSON; + + const { userID } = request.query as { userID: string }; + + const credentials = await getCredentials(userID); + + const challenge = await getChallenge(userID); + + if (!challenge) { + response.send({ verified: false }); + return; + } + + const { value: expectedChallenge } = challenge; + + let verification: VerifiedRegistrationResponse; + try { + const options: VerifyRegistrationResponseOpts = { + response: body, + expectedChallenge, + expectedOrigin: "http://localhost:8081", + expectedRPID: rpId, + requireUserVerification: false, + }; + verification = await verifyRegistrationResponse(options); + } catch (error) { + const _error = error as Error; + console.error(_error); + response.status(400).send({ error: _error.message }); + return; + } + + const { verified, registrationInfo } = verification; + + if (verified && registrationInfo) { + const { credentialPublicKey, credentialID, counter } = registrationInfo; + + const existingDevice = credentials.find((credential) => isoUint8Array.areEqual(credential.id, credentialID)); + + if (!existingDevice) { + /** + * Add the returned device to the user's list of devices + */ + const newDevice: AuthenticatorDevice = { + credentialPublicKey, + credentialID, + counter, + transports: body.response.transports, + }; + await saveCredentials({ ...newDevice, userID }); + } + } + + response.send({ verified }); +} + +export default allowCors(handler); diff --git a/pomelo/database/schema.ts b/pomelo/database/schema.ts index e69027eb..a3b1b62d 100644 --- a/pomelo/database/schema.ts +++ b/pomelo/database/schema.ts @@ -1,6 +1,6 @@ import { jsonb, pgEnum, pgTable, text, numeric } from "drizzle-orm/pg-core"; -import { CARD_STATUS, OPERATION_COUNTRIES, USER_STATUS } from "../utils/types"; +import { CARD_STATUS, OPERATION_COUNTRIES, USER_STATUS } from "../utils/types.js"; export const userStatusEnum = pgEnum("status", USER_STATUS); export const countryEnum = pgEnum("operation_country", OPERATION_COUNTRIES); @@ -42,3 +42,16 @@ export const transaction = pgTable("transactions", { transaction_status: transactionStatusEnum("transaction_status").notNull(), payload: jsonb("payload").notNull(), }); + +export const credential = pgTable("credentials", { + credentialID: text("credentialID").notNull(), + transports: text("transports").array(), + userID: text("userID").notNull(), + credentialPublicKey: text("credentialPublicKey").notNull(), + counter: numeric("counter").notNull(), +}); + +export const challenge = pgTable("challenge", { + userID: text("userID").primaryKey(), + value: text("value").notNull(), +}); diff --git a/pomelo/package.json b/pomelo/package.json index 982bd464..d25c8e9c 100644 --- a/pomelo/package.json +++ b/pomelo/package.json @@ -20,7 +20,10 @@ "debug": "^4.3.4", "drizzle-orm": "^0.29.3", "viem": "2.1.0", - "zod": "^3.22.4" + "zod": "^3.22.4", + "@simplewebauthn/server": "^8.3.6", + "@simplewebauthn/typescript-types": "^8.3.4", + "base64-arraybuffer": "^1.0.2" }, "devDependencies": { "@types/node": "^20.11.3", diff --git a/pomelo/utils/auth.ts b/pomelo/utils/auth.ts new file mode 100644 index 00000000..8e258f8f --- /dev/null +++ b/pomelo/utils/auth.ts @@ -0,0 +1,53 @@ +import type { AuthenticatorDevice, AuthenticatorTransportFuture } from "@simplewebauthn/typescript-types"; +import { encode, decode } from "base64-arraybuffer"; +import { eq } from "drizzle-orm"; + +import database from "../database/index.js"; +import { credential as credentialSchema, challenge as challengeSchema } from "../database/schema.js"; + +export const origin = "http://localhost:8081"; // TODO: change this + +// TODO: use function in /utils. for now it was not working +function base64URLEncode(buffer: ArrayBufferLike) { + return encode(buffer).replaceAll("+", "-").replaceAll("/", "_").replaceAll("=", ""); +} + +function base64URLDecode(text: string) { + const buffer = decode(text.replaceAll("-", "+").replaceAll("_", "/")); + return new Uint8Array(buffer); +} + +export async function saveChallenge({ userID, challenge }: { challenge: string; userID: string }) { + await database.delete(challengeSchema).where(eq(challengeSchema.userID, userID)); + await database.insert(challengeSchema).values([{ userID, value: challenge }]); +} + +export async function getChallenge(userID: string) { + const [challenge] = await database.select().from(challengeSchema).where(eq(challengeSchema.userID, userID)); + await database.delete(challengeSchema).where(eq(challengeSchema.userID, userID)); + return challenge; +} + +export async function saveCredentials(credential: AuthenticatorDevice & { userID: string }) { + await database.insert(credentialSchema).values([ + { + credentialID: base64URLEncode(credential.credentialID), + transports: credential.transports, + userID: credential.userID, + credentialPublicKey: base64URLEncode(credential.credentialPublicKey).toString(), + counter: credential.counter.toString(), + }, + ]); +} + +export async function getCredentials(userID: string) { + const credentials = await database.select().from(credentialSchema).where(eq(credentialSchema.userID, userID)); + return credentials.map((cred) => ({ + ...cred, + id: base64URLDecode(cred.credentialID), + transports: cred.transports as AuthenticatorTransportFuture[], + credentialPublicKey: base64URLDecode(cred.credentialPublicKey), + credentialID: base64URLDecode(cred.credentialID), + counter: Number(cred.counter), + })); +} diff --git a/pomelo/utils/cors.ts b/pomelo/utils/cors.ts new file mode 100644 index 00000000..9c546a6c --- /dev/null +++ b/pomelo/utils/cors.ts @@ -0,0 +1,18 @@ +import type { VercelApiHandler, VercelRequest, VercelResponse } from "@vercel/node"; + +const allowCors = (function_: VercelApiHandler) => async (request: VercelRequest, response: VercelResponse) => { + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Origin", "http://localhost:8081"); + response.setHeader("Access-Control-Allow-Methods", "GET,OPTIONS,PATCH,DELETE,POST,PUT"); + response.setHeader( + "Access-Control-Allow-Headers", + "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, Content-Type", + ); + if (request.method === "OPTIONS") { + response.status(200).end(); + return; + } + await function_(request, response); +}; + +export default allowCors; From 9ce36d8e22086fd9fe0121f5519296b65cb5728d Mon Sep 17 00:00:00 2001 From: sebipap Date: Tue, 6 Feb 2024 14:20:55 -0300 Subject: [PATCH 3/9] =?UTF-8?q?=F0=9F=8F=B7=EF=B8=8F=20pomelo:=20update=20?= =?UTF-8?q?types=20and=20schemas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pomelo/database/schema.ts | 3 +-- pomelo/utils/types.ts | 11 +++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/pomelo/database/schema.ts b/pomelo/database/schema.ts index a3b1b62d..adb8f1ee 100644 --- a/pomelo/database/schema.ts +++ b/pomelo/database/schema.ts @@ -46,12 +46,11 @@ export const transaction = pgTable("transactions", { export const credential = pgTable("credentials", { credentialID: text("credentialID").notNull(), transports: text("transports").array(), - userID: text("userID").notNull(), credentialPublicKey: text("credentialPublicKey").notNull(), counter: numeric("counter").notNull(), }); export const challenge = pgTable("challenge", { - userID: text("userID").primaryKey(), + id: text("id").primaryKey(), value: text("value").notNull(), }); diff --git a/pomelo/utils/types.ts b/pomelo/utils/types.ts index 652357d9..1a0d93e0 100644 --- a/pomelo/utils/types.ts +++ b/pomelo/utils/types.ts @@ -61,10 +61,10 @@ export const user = z.object({ identification_value: z.string().optional(), birthdate: date.optional(), gender: z.string().optional(), - phone: z.number(), + phone: z.number().optional(), tax_identification_type: z.enum(["CUIL", "CUIT", "CDI", "CPF", "RUT", "RUC", "RFC", "NIT"]).optional(), tax_identification_value: z.string().optional(), - nationality: country, + nationality: country.optional(), legal_address: address.optional(), }); @@ -77,6 +77,7 @@ const createUserRequest = user.omit({ }); export type CreateUserRequest = z.infer; +export type CreateUserForm = Omit; export const card = z.object({ id: z.string().regex(/^crd-.*/), @@ -207,13 +208,15 @@ export type AuthorizationResponse = z.infer; export const paginated = >(data: T) => z.object({ - data: data.array(), + data: z.array(data), meta: z.object({ pagination: z.object({ total_pages: z.number(), - current: z.number(), + current_page: z.number(), }), }), }); +export const responseData = >(data: T) => z.object({ data }); + export type Paginated> = z.infer>>; From 87172450b3b242a83bc9e7d7f06cf102e3cdb6ef Mon Sep 17 00:00:00 2001 From: sebipap Date: Tue, 6 Feb 2024 14:22:44 -0300 Subject: [PATCH 4/9] =?UTF-8?q?=F0=9F=94=A7=20pomelo:=20update=20configura?= =?UTF-8?q?tions=20and=20add=20dependencies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bun.lockb | Bin 1006020 -> 1040596 bytes pomelo/.gitignore | 1 + pomelo/package.json | 6 ++++-- pomelo/tsconfig.json | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 pomelo/.gitignore diff --git a/bun.lockb b/bun.lockb index 395d25b3894eb3dae9ad894896391c03182f9561..d2ac3750e56a84b67c9152ae8b007338e1ecf107 100755 GIT binary patch delta 209609 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 z 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 delta 190017 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%0DWZ$HRPzj3s*9~>1|jFi?7qL7Djg`s6d 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 diff --git a/pomelo/.gitignore b/pomelo/.gitignore new file mode 100644 index 00000000..e985853e --- /dev/null +++ b/pomelo/.gitignore @@ -0,0 +1 @@ +.vercel diff --git a/pomelo/package.json b/pomelo/package.json index d25c8e9c..f2548a00 100644 --- a/pomelo/package.json +++ b/pomelo/package.json @@ -23,12 +23,14 @@ "zod": "^3.22.4", "@simplewebauthn/server": "^8.3.6", "@simplewebauthn/typescript-types": "^8.3.4", - "base64-arraybuffer": "^1.0.2" + "base64-arraybuffer": "^1.0.2", + "jsonwebtoken": "^9.0.2" }, "devDependencies": { "@types/node": "^20.11.3", "drizzle-kit": "^0.20.12", "typescript": "^5.3.3", - "vercel": "^33.1.0" + "vercel": "^32.7.2", + "@types/jsonwebtoken": "^9.0.5" } } diff --git a/pomelo/tsconfig.json b/pomelo/tsconfig.json index aea275ac..b96a17e9 100644 --- a/pomelo/tsconfig.json +++ b/pomelo/tsconfig.json @@ -3,7 +3,7 @@ "lib": ["ESNext"], "target": "ESNext", "module": "ESNext", - "moduleResolution": "Bundler", + "moduleResolution": "node", "noUncheckedIndexedAccess": true, "resolveJsonModule": true, "esModuleInterop": true, From 010787809d328aedb6d53bced26a5b93c8b259a6 Mon Sep 17 00:00:00 2001 From: sebipap Date: Tue, 6 Feb 2024 14:33:55 -0300 Subject: [PATCH 5/9] =?UTF-8?q?=F0=9F=9B=82=20pomelo:=20implement=20passke?= =?UTF-8?q?y=20authentication?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/generate-authentication-options.ts | 19 ++---- .../api/auth/generate-registration-options.ts | 30 +++------- pomelo/api/auth/verify-authentication.ts | 22 ++++--- pomelo/api/auth/verify-registration.ts | 39 ++++--------- pomelo/api/card.ts | 30 ++++++++++ pomelo/api/user.ts | 31 ++++++++++ pomelo/utils/auth.ts | 58 ++++++++++++++----- pomelo/utils/card.ts | 11 ++-- pomelo/utils/cors.ts | 9 ++- pomelo/utils/request.ts | 11 +++- pomelo/utils/rpId.ts | 5 ++ pomelo/utils/user.ts | 25 +++++--- 12 files changed, 185 insertions(+), 105 deletions(-) create mode 100644 pomelo/api/card.ts create mode 100644 pomelo/api/user.ts create mode 100644 pomelo/utils/rpId.ts diff --git a/pomelo/api/auth/generate-authentication-options.ts b/pomelo/api/auth/generate-authentication-options.ts index 76b6d53d..40f8da57 100644 --- a/pomelo/api/auth/generate-authentication-options.ts +++ b/pomelo/api/auth/generate-authentication-options.ts @@ -1,25 +1,18 @@ -import type { GenerateAuthenticationOptionsOpts } from "@simplewebauthn/server"; import { generateAuthenticationOptions } from "@simplewebauthn/server"; import type { VercelRequest, VercelResponse } from "@vercel/node"; -import { rpId } from "../../../utils/constants.js"; -import { getCredentials, saveChallenge } from "../../utils/auth.js"; +import { saveChallenge } from "../../utils/auth.js"; import allowCors from "../../utils/cors.js"; +import rpId from "../../utils/rpId.js"; async function handler(request: VercelRequest, response: VercelResponse) { - const { userID } = request.query as { userID: string }; - const credentials = await getCredentials(userID); - const options_: GenerateAuthenticationOptionsOpts = { + const { challengeID } = request.query as { challengeID: string }; + const options = await generateAuthenticationOptions({ timeout: 60_000, - allowCredentials: credentials.map((credential) => ({ - ...credential, - type: "public-key", - })), userVerification: "preferred", rpID: rpId, - }; - const options = await generateAuthenticationOptions(options_); - await saveChallenge({ challenge: options.challenge, userID }); + }); + await saveChallenge({ challenge: options.challenge, challengeID }); response.send(options); } diff --git a/pomelo/api/auth/generate-registration-options.ts b/pomelo/api/auth/generate-registration-options.ts index ff4de35f..fbb8e143 100644 --- a/pomelo/api/auth/generate-registration-options.ts +++ b/pomelo/api/auth/generate-registration-options.ts @@ -2,44 +2,30 @@ import type { GenerateRegistrationOptionsOpts } from "@simplewebauthn/server"; import { generateRegistrationOptions } from "@simplewebauthn/server"; import type { VercelRequest, VercelResponse } from "@vercel/node"; -import { rpId } from "../../../utils/constants.js"; -import { getCredentials, saveChallenge } from "../../utils/auth.js"; +import { saveChallenge } from "../../utils/auth.js"; import allowCors from "../../utils/cors.js"; +import rpId from "../../utils/rpId.js"; + +const ES256 = -7; async function handler(request: VercelRequest, response: VercelResponse) { - const { userID } = request.query as { userID: string }; - const credentials = await getCredentials(userID); + const { challengeID } = request.query as { challengeID: string }; const registrationOptions: GenerateRegistrationOptionsOpts = { rpName: "exactly", rpID: rpId, - userID, + userID: challengeID, // TODO: change username userName: "username", timeout: 60_000, attestationType: "none", - /** - * Passing in a user's list of already-registered authenticator IDs here prevents users from - * registering the same device multiple times. The authenticator will simply throw an error in - * the browser if it's asked to perform registration when one of these ID's already resides - * on it. - */ - excludeCredentials: credentials.map((credential) => ({ - ...credential, - type: "public-key", - })), authenticatorSelection: { residentKey: "discouraged", userVerification: "preferred", }, - /** - * Support the two most common algorithms: ES256, and RS256 - * TODO: check if this are the correct values - */ - supportedAlgorithmIDs: [-7, -257], + supportedAlgorithmIDs: [ES256], }; - const options = await generateRegistrationOptions(registrationOptions); - await saveChallenge({ challenge: options.challenge, userID }); + await saveChallenge({ challenge: options.challenge, challengeID }); response.send(options); } diff --git a/pomelo/api/auth/verify-authentication.ts b/pomelo/api/auth/verify-authentication.ts index cb1ba9f5..02348daa 100644 --- a/pomelo/api/auth/verify-authentication.ts +++ b/pomelo/api/auth/verify-authentication.ts @@ -6,16 +6,17 @@ import { import { isoBase64URL, isoUint8Array } from "@simplewebauthn/server/helpers"; import type { AuthenticationResponseJSON } from "@simplewebauthn/typescript-types"; import type { VercelRequest, VercelResponse } from "@vercel/node"; +import jwt from "jsonwebtoken"; -import { rpId } from "../../../utils/constants.js"; -import { getChallenge, getCredentials, origin } from "../../utils/auth.js"; +import { base64URLEncode, getChallenge, getCredentialsByID, ORIGIN } from "../../utils/auth.js"; import allowCors from "../../utils/cors.js"; +import rpId from "../../utils/rpId.js"; async function handler(request: VercelRequest, response: VercelResponse) { const body = request.body as AuthenticationResponseJSON; - const { userID } = request.query as { userID: string }; - const credentials = await getCredentials(userID); - const challenge = await getChallenge(userID); + const { challengeID } = request.query as { challengeID: string }; + const credentials = await getCredentialsByID(body.id); + const challenge = await getChallenge(challengeID); if (!challenge) { response.send({ verified: false }); @@ -45,7 +46,7 @@ async function handler(request: VercelRequest, response: VercelResponse) { const options: VerifyAuthenticationResponseOpts = { response: body, expectedChallenge, - expectedOrigin: origin, + expectedOrigin: ORIGIN, expectedRPID: rpId, authenticator: databaseAuthenticator, requireUserVerification: false, @@ -53,7 +54,6 @@ async function handler(request: VercelRequest, response: VercelResponse) { verification = await verifyAuthenticationResponse(options); } catch (error) { const _error = error as Error; - console.error(_error); response.status(400).send({ error: _error.message }); return; } @@ -63,7 +63,13 @@ async function handler(request: VercelRequest, response: VercelResponse) { if (verified) { databaseAuthenticator.counter = authenticationInfo.newCounter; } - response.send({ verified }); + if (!process.env.JWT_SECRET) { + throw new Error("JWT_SECRET not set"); + } + const token = jwt.sign({ credentialID: base64URLEncode(authenticationInfo.credentialID) }, process.env.JWT_SECRET, { + expiresIn: "24h", + }); + response.send({ verified, token }); } export default allowCors(handler); diff --git a/pomelo/api/auth/verify-registration.ts b/pomelo/api/auth/verify-registration.ts index fb135855..e81fc8a7 100644 --- a/pomelo/api/auth/verify-registration.ts +++ b/pomelo/api/auth/verify-registration.ts @@ -3,23 +3,18 @@ import { type VerifiedRegistrationResponse, type VerifyRegistrationResponseOpts, } from "@simplewebauthn/server"; -import { isoUint8Array } from "@simplewebauthn/server/helpers"; -import type { AuthenticatorDevice, RegistrationResponseJSON } from "@simplewebauthn/typescript-types"; +import type { RegistrationResponseJSON } from "@simplewebauthn/typescript-types"; import type { VercelRequest, VercelResponse } from "@vercel/node"; -import { rpId } from "../../../utils/constants.js"; -import { getChallenge, getCredentials, saveCredentials } from "../../utils/auth.js"; +import { getChallenge, ORIGIN, saveCredentials } from "../../utils/auth.js"; import allowCors from "../../utils/cors.js"; +import rpId from "../../utils/rpId.js"; async function handler(request: VercelRequest, response: VercelResponse) { const body = request.body as RegistrationResponseJSON; + const { challengeID } = request.query as { challengeID: string }; - const { userID } = request.query as { userID: string }; - - const credentials = await getCredentials(userID); - - const challenge = await getChallenge(userID); - + const challenge = await getChallenge(challengeID); if (!challenge) { response.send({ verified: false }); return; @@ -32,7 +27,7 @@ async function handler(request: VercelRequest, response: VercelResponse) { const options: VerifyRegistrationResponseOpts = { response: body, expectedChallenge, - expectedOrigin: "http://localhost:8081", + expectedOrigin: ORIGIN, expectedRPID: rpId, requireUserVerification: false, }; @@ -43,28 +38,18 @@ async function handler(request: VercelRequest, response: VercelResponse) { response.status(400).send({ error: _error.message }); return; } - const { verified, registrationInfo } = verification; if (verified && registrationInfo) { const { credentialPublicKey, credentialID, counter } = registrationInfo; - const existingDevice = credentials.find((credential) => isoUint8Array.areEqual(credential.id, credentialID)); - - if (!existingDevice) { - /** - * Add the returned device to the user's list of devices - */ - const newDevice: AuthenticatorDevice = { - credentialPublicKey, - credentialID, - counter, - transports: body.response.transports, - }; - await saveCredentials({ ...newDevice, userID }); - } + await saveCredentials({ + credentialPublicKey, + credentialID, + counter, + transports: body.response.transports, + }); } - response.send({ verified }); } diff --git a/pomelo/api/card.ts b/pomelo/api/card.ts new file mode 100644 index 00000000..99ba7ca3 --- /dev/null +++ b/pomelo/api/card.ts @@ -0,0 +1,30 @@ +import type { VercelRequest, VercelResponse } from "@vercel/node"; + +import { authenticated } from "../utils/auth.js"; +import { createCard, getCardsByUserID } from "../utils/card.js"; +import allowCors from "../utils/cors.js"; +import { getUserByCredentialID } from "../utils/user.js"; + +async function handler(request: VercelRequest, response: VercelResponse, credentialID: string) { + const user = await getUserByCredentialID(credentialID); + if (!user) { + response.status(404).end("User not found"); + return; + } + if (request.method === "POST") { + try { + const card = await createCard({ + user_id: user.id, + card_type: "VIRTUAL", + affinity_group_id: "afg-2VfIFzzjDX9eRD2VVgmKnB6YmWm", // TODO: use env. note: we'll probably use the same affinity group for all cards + }); + response.status(200).json(card); + } catch (error) { + response.status(400).end(error instanceof Error ? error.message : "There was an error"); + } + } else if (request.method === "GET") { + const cards = await getCardsByUserID(user.id); + response.status(200).json(cards); + } +} +export default allowCors(authenticated(handler)); diff --git a/pomelo/api/user.ts b/pomelo/api/user.ts new file mode 100644 index 00000000..7a26e729 --- /dev/null +++ b/pomelo/api/user.ts @@ -0,0 +1,31 @@ +import type { VercelRequest, VercelResponse } from "@vercel/node"; + +import { authenticated } from "../utils/auth.js"; +import allowCors from "../utils/cors.js"; +import type { CreateUserForm } from "../utils/types.js"; +import { createUser, getUserByCredentialID } from "../utils/user.js"; + +async function handler(request: VercelRequest, response: VercelResponse, credentialID: string) { + if (request.method === "POST") { + try { + const body = request.body as CreateUserForm; // TODO: validate request body + const user = await createUser({ + ...body, + operation_country: "MEX", // TODO: only for sandbox. For prod will be "PER" + email: `${credentialID}@exactly.account`, + }); + response.status(200).json(user); + } catch (error) { + response.status(400).end(error instanceof Error ? error.message : "Unknown error"); + } + } else if (request.method === "GET") { + const user = await getUserByCredentialID(credentialID); + if (user) { + response.status(200).json(user); + } else { + response.status(404).end("User not found"); + } + } +} + +export default allowCors(authenticated(handler)); diff --git a/pomelo/utils/auth.ts b/pomelo/utils/auth.ts index 8e258f8f..21b48c19 100644 --- a/pomelo/utils/auth.ts +++ b/pomelo/utils/auth.ts @@ -1,47 +1,58 @@ -import type { AuthenticatorDevice, AuthenticatorTransportFuture } from "@simplewebauthn/typescript-types"; +import type { + AuthenticatorDevice, + AuthenticatorTransportFuture, + Base64URLString, +} from "@simplewebauthn/typescript-types"; +import type { VercelRequest, VercelResponse } from "@vercel/node"; import { encode, decode } from "base64-arraybuffer"; import { eq } from "drizzle-orm"; +import jwt from "jsonwebtoken"; import database from "../database/index.js"; import { credential as credentialSchema, challenge as challengeSchema } from "../database/schema.js"; -export const origin = "http://localhost:8081"; // TODO: change this +type TokenPayload = { + credentialID: string; + iat: number; + exp: number; +}; + +export const ORIGIN = "http://localhost:8081"; // TODO: this works for local development using web. Check what would be the origin for mobile // TODO: use function in /utils. for now it was not working -function base64URLEncode(buffer: ArrayBufferLike) { +export function base64URLEncode(buffer: ArrayBufferLike) { return encode(buffer).replaceAll("+", "-").replaceAll("/", "_").replaceAll("=", ""); } - -function base64URLDecode(text: string) { +// TODO: use function in /utils. for now it was not working +export function base64URLDecode(text: string) { const buffer = decode(text.replaceAll("-", "+").replaceAll("_", "/")); return new Uint8Array(buffer); } -export async function saveChallenge({ userID, challenge }: { challenge: string; userID: string }) { - await database.delete(challengeSchema).where(eq(challengeSchema.userID, userID)); - await database.insert(challengeSchema).values([{ userID, value: challenge }]); +export async function saveChallenge({ challengeID, challenge }: { challenge: Base64URLString; challengeID: string }) { + await database.delete(challengeSchema).where(eq(challengeSchema.id, challengeID)); + await database.insert(challengeSchema).values([{ id: challengeID, value: challenge }]); } -export async function getChallenge(userID: string) { - const [challenge] = await database.select().from(challengeSchema).where(eq(challengeSchema.userID, userID)); - await database.delete(challengeSchema).where(eq(challengeSchema.userID, userID)); +export async function getChallenge(challengeID: string) { + const [challenge] = await database.select().from(challengeSchema).where(eq(challengeSchema.id, challengeID)); + await database.delete(challengeSchema).where(eq(challengeSchema.id, challengeID)); return challenge; } -export async function saveCredentials(credential: AuthenticatorDevice & { userID: string }) { +export async function saveCredentials(credential: AuthenticatorDevice) { await database.insert(credentialSchema).values([ { credentialID: base64URLEncode(credential.credentialID), transports: credential.transports, - userID: credential.userID, credentialPublicKey: base64URLEncode(credential.credentialPublicKey).toString(), counter: credential.counter.toString(), }, ]); } -export async function getCredentials(userID: string) { - const credentials = await database.select().from(credentialSchema).where(eq(credentialSchema.userID, userID)); +export async function getCredentialsByID(id: string) { + const credentials = await database.select().from(credentialSchema).where(eq(credentialSchema.credentialID, id)); return credentials.map((cred) => ({ ...cred, id: base64URLDecode(cred.credentialID), @@ -51,3 +62,20 @@ export async function getCredentials(userID: string) { counter: Number(cred.counter), })); } + +export const authenticated = + (handler: (request: VercelRequest, response: VercelResponse, userID: string) => Promise) => + async (request: VercelRequest, response: VercelResponse) => { + const { authorization } = request.headers; + if (!authorization) { + response.status(400).end("No token provided"); + return; + } + const token = authorization.split("Bearer ")[1]; + if (!token) { + response.status(400).end("No token provided"); + return; + } + const { credentialID } = jwt.decode(token) as TokenPayload; + await handler(request, response, credentialID); + }; diff --git a/pomelo/utils/card.ts b/pomelo/utils/card.ts index 3bd73b33..9f336804 100644 --- a/pomelo/utils/card.ts +++ b/pomelo/utils/card.ts @@ -1,21 +1,22 @@ import request from "./request.js"; import type { Card, CreateCardRequest, Paginated, User } from "./types.js"; -import { card as cardSchema, paginated } from "./types.js"; +import { card as cardSchema, paginated, responseData } from "./types.js"; export function getCard(id: Card["id"]) { return request(`/cards/v1/${id}`, { method: "GET" }, cardSchema); } -export function getCardByUserID(userId: User["id"]) { - return request>( +export async function getCardsByUserID(userId: User["id"]) { + const response = await request>( `/cards/v1?filter[user_id]=${userId}`, { method: "GET" }, paginated(cardSchema), ); + return response.data; } export function createCard(card: CreateCardRequest) { - return request( + return request<{ data: Card }>( "/cards/v1", { method: "POST", @@ -24,6 +25,6 @@ export function createCard(card: CreateCardRequest) { "x-idempotency-key": card.user_id, // TODO use a real idempotency key }, }, - cardSchema, + responseData(cardSchema), ); } diff --git a/pomelo/utils/cors.ts b/pomelo/utils/cors.ts index 9c546a6c..6c3e2781 100644 --- a/pomelo/utils/cors.ts +++ b/pomelo/utils/cors.ts @@ -1,13 +1,12 @@ import type { VercelApiHandler, VercelRequest, VercelResponse } from "@vercel/node"; +import { ORIGIN } from "./auth"; + const allowCors = (function_: VercelApiHandler) => async (request: VercelRequest, response: VercelResponse) => { response.setHeader("Access-Control-Allow-Credentials", "true"); - response.setHeader("Access-Control-Allow-Origin", "http://localhost:8081"); + response.setHeader("Access-Control-Allow-Origin", ORIGIN); response.setHeader("Access-Control-Allow-Methods", "GET,OPTIONS,PATCH,DELETE,POST,PUT"); - response.setHeader( - "Access-Control-Allow-Headers", - "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, Content-Type", - ); + response.setHeader("Access-Control-Allow-Headers", "*, Authorization"); if (request.method === "OPTIONS") { response.status(200).end(); return; diff --git a/pomelo/utils/request.ts b/pomelo/utils/request.ts index e5aeb652..84a23267 100644 --- a/pomelo/utils/request.ts +++ b/pomelo/utils/request.ts @@ -41,7 +41,7 @@ export default async function request( }); const response = await fetch(_request); - const json = response.json(); + const json: unknown = await response.json(); if (!response.ok) { const { @@ -68,5 +68,12 @@ export default async function request( } } - return validator.parse(json); + try { + return validator.parse(json); + } catch { + // TODO: review with team + // dont throw when validation fails? + // maybe just report to sentry? + return json as Response; + } } diff --git a/pomelo/utils/rpId.ts b/pomelo/utils/rpId.ts new file mode 100644 index 00000000..61086471 --- /dev/null +++ b/pomelo/utils/rpId.ts @@ -0,0 +1,5 @@ +// TODO: check if we could use value from utils/contants.ts instead +// Error: Named export 'rpId' not found. The requested module '../../../utils/constants.js' is a CommonJS module, which may not support all module.exports as named exports. +// also, rpID depends on the environment, so it's better to keep it in a separate file? + +export default "localhost"; diff --git a/pomelo/utils/user.ts b/pomelo/utils/user.ts index db1e9eb0..ff7eeb0a 100644 --- a/pomelo/utils/user.ts +++ b/pomelo/utils/user.ts @@ -1,15 +1,24 @@ import request from "./request.js"; import type { CreateUserRequest, User } from "./types.js"; -import { user as userSchema } from "./types.js"; +import { paginated, responseData, user as userSchema } from "./types.js"; export async function getUser(userId: User["id"]) { - try { - return request(`/users/v1/${userId}`, { method: "GET" }, userSchema); - } catch { - // couldn't find user, return undefined - } + return request<{ data: User }>(`/users/v1/${userId}`, { method: "GET" }, responseData(userSchema)); } -export function createUser(user: CreateUserRequest) { - return request("/users/v1", { method: "POST", body: user }, userSchema); +export async function getUserByEmail(email: User["email"]) { + const response = await request<{ data: User[] }>( + `/users/v1/?filter[email]=${email}`, + { method: "GET" }, + paginated(userSchema), + ); + return response.data[0]; +} + +export async function getUserByCredentialID(credentialID: string) { + return getUserByEmail(`${credentialID}@exactly.account`); +} + +export async function createUser(user: CreateUserRequest) { + return request<{ data: User }>("/users/v1", { method: "POST", body: user }, responseData(userSchema)); } From 1e7ec692cbbeb3f26683476ec8dae79d533e1dde Mon Sep 17 00:00:00 2001 From: sebipap Date: Tue, 6 Feb 2024 15:19:29 -0300 Subject: [PATCH 6/9] =?UTF-8?q?=F0=9F=9B=82=20client-side=20implementation?= =?UTF-8?q?=20of=20passkey=20authentication?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/constants.ts | 2 + utils/createAccount.ts | 84 +++++++++++++++++++++++++ utils/pomelo/client.ts | 136 +++++++++++++++++++++++++++++++++++++++++ utils/uppercase.ts | 3 + 4 files changed, 225 insertions(+) create mode 100644 utils/createAccount.ts create mode 100644 utils/pomelo/client.ts create mode 100644 utils/uppercase.ts diff --git a/utils/constants.ts b/utils/constants.ts index 032c71f4..c2207b8a 100644 --- a/utils/constants.ts +++ b/utils/constants.ts @@ -8,6 +8,7 @@ if (!process.env.EXPO_PUBLIC_ALCHEMY_GAS_POLICY_ID) throw new Error("missing alc if (!process.env.EXPO_PUBLIC_TURNKEY_ORGANIZATION_ID) throw new Error("missing turnkey organization id"); if (!process.env.EXPO_PUBLIC_TURNKEY_API_PUBLIC_KEY) throw new Error("missing turnkey api public key"); if (!process.env.EXPO_PUBLIC_TURNKEY_API_PRIVATE_KEY) throw new Error("missing turnkey api private key"); +if (!process.env.EXPO_PUBLIC_BACKEND_URL) throw new Error("missing backend url"); export const alchemyAPIKey = process.env.EXPO_PUBLIC_ALCHEMY_API_KEY; export const alchemyGasPolicyId = process.env.EXPO_PUBLIC_ALCHEMY_GAS_POLICY_ID; @@ -15,6 +16,7 @@ export const turnkeyAPIPublicKey = process.env.EXPO_PUBLIC_TURNKEY_API_PUBLIC_KE export const turnkeyAPIPrivateKey = process.env.EXPO_PUBLIC_TURNKEY_API_PRIVATE_KEY; export const turnkeyOrganizationId = process.env.EXPO_PUBLIC_TURNKEY_ORGANIZATION_ID; export const oneSignalAppId = process.env.EXPO_PUBLIC_ONE_SIGNAL_APP_ID; +export const backendURL = process.env.EXPO_PUBLIC_BACKEND_URL; export const chain = { ...goerli, diff --git a/utils/createAccount.ts b/utils/createAccount.ts new file mode 100644 index 00000000..13b08407 --- /dev/null +++ b/utils/createAccount.ts @@ -0,0 +1,84 @@ +import { startRegistration } from "@simplewebauthn/browser"; +import { ApiKeyStamper } from "@turnkey/api-key-stamper"; +import { TurnkeyClient, createActivityPoller } from "@turnkey/http"; +import { deviceName } from "expo-device"; +import { UAParser } from "ua-parser-js"; + +import base64URLEncode from "./base64URLEncode"; +import { rpId, turnkeyAPIPrivateKey, turnkeyAPIPublicKey, turnkeyOrganizationId } from "./constants"; +import generateRandomBuffer from "./generateRandomBuffer"; +import handleError from "./handleError"; +import { registrationOptions, verifyRegistration } from "./pomelo/client"; +import uppercase from "./uppercase"; + +export default async function createAccount() { + const challengeID = base64URLEncode(generateRandomBuffer()); + const { challenge } = await registrationOptions(challengeID); + const name = `exactly, ${new Date().toISOString()}`; + const attestation = await startRegistration({ + rp: { id: rpId, name: "exactly" }, + user: { id: challenge, name, displayName: name }, + pubKeyCredParams: [{ alg: -7, type: "public-key" }], + authenticatorSelection: { requireResidentKey: true, residentKey: "required", userVerification: "required" }, + challenge, + }); + const client = new TurnkeyClient( + { baseUrl: "https://api.turnkey.com" }, + new ApiKeyStamper({ apiPublicKey: turnkeyAPIPublicKey, apiPrivateKey: turnkeyAPIPrivateKey }), + ); + const activityPoller = createActivityPoller({ client, requestFn: client.createSubOrganization }); + try { + const { + result: { createSubOrganizationResultV4 }, + } = await activityPoller({ + type: "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4", + timestampMs: String(Date.now()), + organizationId: turnkeyOrganizationId, + parameters: { + subOrganizationName: attestation.id, + rootQuorumThreshold: 1, + rootUsers: [ + { + apiKeys: [], + userName: "account", + authenticators: [ + { + authenticatorName: deviceName ?? new UAParser(navigator.userAgent).getBrowser().name ?? "unknown", + challenge, + attestation: { + credentialId: attestation.id, + attestationObject: attestation.response.attestationObject, + clientDataJson: attestation.response.clientDataJSON, + transports: + attestation.response.transports?.map( + (t) => + `AUTHENTICATOR_TRANSPORT_${uppercase(t === "smart-card" || t === "cable" ? "usb" : t)}` as const, + ) || [], + }, + }, + ], + }, + ], + wallet: { + walletName: "default", + accounts: [ + { + curve: "CURVE_SECP256K1", + addressFormat: "ADDRESS_FORMAT_ETHEREUM", + pathFormat: "PATH_FORMAT_BIP32", + path: "m/44'/60'/0'/0/0", + }, + ], + }, + }, + }); + if (!createSubOrganizationResultV4?.wallet?.addresses[0]) throw new Error("sub-org creation failed"); + + const verifyRegistrationResponse = await verifyRegistration({ challengeID, attestation }); + const { verified } = verifyRegistrationResponse; + + alert(verified ? "Account created" : "Account creation failed"); + } catch (error) { + handleError(error); + } +} diff --git a/utils/pomelo/client.ts b/utils/pomelo/client.ts new file mode 100644 index 00000000..42bc1dab --- /dev/null +++ b/utils/pomelo/client.ts @@ -0,0 +1,136 @@ +import { startAuthentication } from "@simplewebauthn/browser"; +import type { + PublicKeyCredentialCreationOptionsJSON, + PublicKeyCredentialRequestOptionsJSON, + RegistrationResponseJSON, +} from "@simplewebauthn/typescript-types"; + +import type { Card, CreateUserForm, User } from "../../pomelo/utils/types"; +import base64URLEncode from "../base64URLEncode"; +import { backendURL } from "../constants"; +import generateRandomBuffer from "../generateRandomBuffer"; + +async function accessToken() { + const challengeID = base64URLEncode(generateRandomBuffer()); + const optionsResponse = await fetch(`${backendURL}/auth/generate-authentication-options?challengeID=${challengeID}`); + const options = (await optionsResponse.json()) as PublicKeyCredentialRequestOptionsJSON; + const authenticationResponse = await startAuthentication(options); + const verificationResp = await fetch(`${backendURL}/auth/verify-authentication?challengeID=${challengeID}`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(authenticationResponse), + }); + const { verified, token } = (await verificationResp.json()) as { verified: boolean; token: string }; + + if (!verified) { + throw new Error("Authentication failed"); + } + + return token; +} + +async function pomelo( + url: `/${string}`, + init: Omit & { method: "GET" | "POST" | "PATCH"; body?: object }, + authenticated: boolean, +) { + const _request = new Request(`${backendURL}${url}`, { + ...init, + headers: { + ...init.headers, + "Content-Type": "application/json; charset=UTF-8", + ...(authenticated ? { Authorization: `Bearer ${await accessToken()}` } : {}), + }, + body: JSON.stringify(init.body), + }); + + const response = await fetch(_request); + const json: unknown = await response.json(); + + if (!response.ok) { + const { + error: { details }, + } = json as { error: { details: { detail: string }[] } }; + + const detailsText = details.map(({ detail }) => detail).join(", "); + switch (response.status) { + case 400: { + throw new Error(`invalid request: ${detailsText}`); + } + case 401: { + throw new Error("unauthorized"); + } + case 403: { + throw new Error("forbidden"); + } + case 404: { + throw new Error(`not found: ${detailsText}`); + } + default: { + throw new Error(`unexpected error: ${response.status}`); // TODO report to sentry + } + } + } + + return json as Response; +} + +export async function getCards() { + return pomelo("/card", { method: "GET" }, true); +} + +export async function createCard() { + return pomelo( + "/card", + { + method: "POST", + }, + true, + ); +} + +export async function createUser(user: CreateUserForm) { + return pomelo("/user", { method: "POST", body: user }, true); +} + +export async function getUser() { + return pomelo( + "/user", + { + method: "GET", + }, + true, + ); +} + +export async function verifyRegistration({ + challengeID, + attestation, +}: { + challengeID: string; + attestation: RegistrationResponseJSON; +}) { + return pomelo<{ verified: boolean }>( + `/auth/verify-registration?challengeID=${challengeID}`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: attestation, + }, + false, + ); +} + +export async function registrationOptions(challengeID: string) { + return await pomelo( + `/auth/generate-registration-options?challengeID=${challengeID}`, + { + method: "GET", + }, + false, + ); +} diff --git a/utils/uppercase.ts b/utils/uppercase.ts new file mode 100644 index 00000000..05dea89e --- /dev/null +++ b/utils/uppercase.ts @@ -0,0 +1,3 @@ +const uppercase = (string: T) => string.toUpperCase() as Uppercase; + +export default uppercase; From fa5c588869437ad30344fc7c88aeabb184a98a56 Mon Sep 17 00:00:00 2001 From: sebipap Date: Tue, 6 Feb 2024 15:21:45 -0300 Subject: [PATCH 7/9] =?UTF-8?q?=E2=9E=95=20add=20dependencies=20for=20weba?= =?UTF-8?q?uthn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 1fae5cb7..1defc4f7 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,10 @@ "@peculiar/webcrypto": "^1.4.3", "@react-native-async-storage/async-storage": "1.18.2", "@sentry/react-native": "^5.16.0", + "@simplewebauthn/browser": "^8.3.4", + "@simplewebauthn/types": "^9.0.1", + "@tanstack/react-form": "^0.13.3", + "@tanstack/zod-form-adapter": "^0.13.3", "@tamagui/config": "^1.85.12", "@tanstack/react-query": "5.8.4", "@turnkey/api-key-stamper": "^0.3.1", @@ -107,7 +111,8 @@ "prettier": "^3.2.2", "react-devtools": "^5.0.0", "sharp-cli": "^2.1.1", - "typescript": "^5.3.3" + "typescript": "^5.3.3", + "@simplewebauthn/typescript-types": "^8.3.4" }, "overrides": { "react-native-reanimated": "~3.5.4", From d744fcd0d983cf92bc824650ea86aa0f99493e77 Mon Sep 17 00:00:00 2001 From: sebipap Date: Mon, 8 Jan 2024 17:07:55 -0300 Subject: [PATCH 8/9] =?UTF-8?q?=F0=9F=8D=B1=20add=20exactly=20assets=20and?= =?UTF-8?q?=20set=20up=20project=20to=20parse=20SVGs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/exa-logo.svg | 7 +++ assets/types.d.ts | 6 +++ assets/welcome-pos.svg | 117 +++++++++++++++++++++++++++++++++++++++++ metro.config.js | 7 ++- package.json | 2 + tsconfig.json | 2 +- 6 files changed, 139 insertions(+), 2 deletions(-) create mode 100644 assets/exa-logo.svg create mode 100644 assets/welcome-pos.svg diff --git a/assets/exa-logo.svg b/assets/exa-logo.svg new file mode 100644 index 00000000..6a11346c --- /dev/null +++ b/assets/exa-logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/types.d.ts b/assets/types.d.ts index 2211c5cb..5965237a 100644 --- a/assets/types.d.ts +++ b/assets/types.d.ts @@ -2,3 +2,9 @@ declare module "*.otf" { const value: FontSource; export default value; } +declare module "*.svg" { + import type React from "react"; + import type { SvgProps } from "react-native-svg"; + const content: React.FC; + export default content; +} diff --git a/assets/welcome-pos.svg b/assets/welcome-pos.svg new file mode 100644 index 00000000..6065040a --- /dev/null +++ b/assets/welcome-pos.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/metro.config.js b/metro.config.js index 8973f411..25416866 100644 --- a/metro.config.js +++ b/metro.config.js @@ -7,7 +7,8 @@ module.exports = { ...defaultConfig, resolver: { ...defaultConfig.resolver, - sourceExts: [...(defaultConfig.resolver?.sourceExts ?? []), "mjs"], + sourceExts: [...(defaultConfig.resolver?.sourceExts ?? []), "mjs", "svg"], + assetExts: defaultConfig.resolver.assetExts.filter((extension) => extension !== "svg"), blockList: [ ...(Array.isArray(defaultConfig.resolver?.blockList) ? defaultConfig.resolver.blockList @@ -20,4 +21,8 @@ module.exports = { stream: require.resolve("stream-browserify"), }, }, + transformer: { + ...defaultConfig.transformer, + babelTransformerPath: require.resolve("react-native-svg-transformer"), + }, }; diff --git a/package.json b/package.json index 1defc4f7..fdcd009f 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "react-native-quick-crypto": "^0.6.1", "react-native-safe-area-context": "4.6.3", "react-native-screens": "~3.22.0", + "react-native-svg": "13.9.0", "react-native-web": "^0.19.10", "react-onesignal": "^3.0.1", "sentry-expo": "^7.1.1", @@ -110,6 +111,7 @@ "expo-build-properties": "~0.8.3", "prettier": "^3.2.2", "react-devtools": "^5.0.0", + "react-native-svg-transformer": "^1.3.0", "sharp-cli": "^2.1.1", "typescript": "^5.3.3", "@simplewebauthn/typescript-types": "^8.3.4" diff --git a/tsconfig.json b/tsconfig.json index 62621aa7..571f9db3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,7 @@ "checkJs": true, "noUncheckedIndexedAccess": true }, - "include": ["**/*.ts", "**/*.tsx", ".expo/types/**/*.ts", "expo-env.d.ts"], + "include": ["**/*.ts", "**/*.tsx", ".expo/types/**/*.ts", "expo-env.d.ts", "**/*.svg"], "exclude": [ "contracts", "pomelo", From ab51518f986108c3b3cbcfdd708142d59edb11c2 Mon Sep 17 00:00:00 2001 From: sebipap Date: Tue, 6 Feb 2024 15:31:20 -0300 Subject: [PATCH 9/9] =?UTF-8?q?=F0=9F=A4=A1=20set=20up=20initial=20mocked?= =?UTF-8?q?=20ui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/auth.tsx | 69 ----------- app/card.tsx | 36 ++++++ app/create-card.tsx | 49 ++++++++ app/home.tsx | 47 ++++++++ app/index.tsx | 172 ++------------------------ app/register-user.tsx | 274 ++++++++++++++++++++++++++++++++++++++++++ app/test.tsx | 103 ++++++++++++++++ app/welcome.tsx | 54 +++++++++ 8 files changed, 572 insertions(+), 232 deletions(-) delete mode 100644 app/auth.tsx create mode 100644 app/card.tsx create mode 100644 app/create-card.tsx create mode 100644 app/home.tsx create mode 100644 app/register-user.tsx create mode 100644 app/test.tsx create mode 100644 app/welcome.tsx diff --git a/app/auth.tsx b/app/auth.tsx deleted file mode 100644 index 86cd1388..00000000 --- a/app/auth.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import type { - PublicKeyCredentialCreationOptionsJSON, - PublicKeyCredentialRequestOptionsJSON, -} from "@github/webauthn-json/dist/types/basic/json"; -import { startAuthentication, startRegistration } from "@simplewebauthn/browser"; -import React from "react"; -import { Button, YStack } from "tamagui"; - -async function authenticate() { - const optionsResponse = await fetch("http://localhost:3000/api/auth/generate-authentication-options?userID=seba"); - const options = (await optionsResponse.json()) as PublicKeyCredentialRequestOptionsJSON; - console.log("Authentication Options (Autofill)", options); - try { - const authenticationResponse = await startAuthentication({ - ...options, - // allowCredentials: undefined, - }); - console.log("Authentication Response (Autofill)", JSON.stringify(authenticationResponse, undefined, 2)); - const verificationResp = await fetch("http://localhost:3000/api/auth/verify-authentication?userID=seba", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(authenticationResponse), - }); - const verificationJSON = (await verificationResp.json()) as { verified: boolean }; - console.log("Server Response (Autofill)", JSON.stringify(verificationJSON, undefined, 2)); - if (verificationJSON.verified) { - alert(`User authenticated!`); - } else { - alert(`Oh no, something went wrong! Response:
${JSON.stringify(verificationJSON)}
`); - } - } catch (error) { - console.error("(Autofill)", error); - } -} - -async function register() { - const response = await fetch("http://localhost:3000/api/auth/generate-registration-options?userID=seba"); - try { - const options = (await response.json()) as PublicKeyCredentialCreationOptionsJSON; - const registration = await startRegistration(options); - const verifyRegistrationResponse = await fetch("http://localhost:3000/api/auth/verify-registration?userID=seba", { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: JSON.stringify(registration), - }); - const { verified } = (await verifyRegistrationResponse.json()) as { verified: boolean }; - console.log("Server Response", JSON.stringify({ verified }, undefined, 2)); - if (verified) { - console.log(`Authenticator registered!`); - } else { - console.log(`Oh no, something went wrong! Response:
${JSON.stringify({ verified })}
`); - } - } catch (error) { - console.error(error); - } -} - -export default function Auth() { - return ( - - - - - ); -} diff --git a/app/card.tsx b/app/card.tsx new file mode 100644 index 00000000..5f85977c --- /dev/null +++ b/app/card.tsx @@ -0,0 +1,36 @@ +import { AntDesign, Entypo, Feather } from "@expo/vector-icons"; +import React from "react"; +import { Text, YStack, XStack, Button, Heading } from "tamagui"; + +export default function Card() { + return ( + + + Balance + + + + $100.00 + + + + + + + + $12.93 (8.71%) Last 7 days + + + + + + + + + My Cards + + + ); +} diff --git a/app/create-card.tsx b/app/create-card.tsx new file mode 100644 index 00000000..1d5c0137 --- /dev/null +++ b/app/create-card.tsx @@ -0,0 +1,49 @@ +import React, { useEffect, useCallback, useState } from "react"; +import { Button, YStack, Text } from "tamagui"; + +import type { Card } from "../pomelo/utils/types"; +import { getCards, createCard } from "../utils/pomelo/client"; + +export default function Cards() { + const [cards, setCards] = useState(); + const [x, setX] = useState(); + const [loading, setLoading] = useState(true); + async function fetchCards() { + setLoading(true); + try { + const c = await getCards(); + + setCards(c); + } catch (error) { + setX(error instanceof Error ? error.message : "error"); + } finally { + setLoading(false); + } + } + useEffect(() => { + void fetchCards(); + }, []); + const handleClick = useCallback(async () => { + const card = await createCard(); + setX(JSON.stringify(card)); + await fetchCards(); + }, []); + + return ( + + + {loading ? "loading" : ""} + {x} + + {cards?.map((card) => ( + + + {card.card_type} {card.provider} + + {card.last_four} + + ))} + + + ); +} diff --git a/app/home.tsx b/app/home.tsx new file mode 100644 index 00000000..f0c0a0af --- /dev/null +++ b/app/home.tsx @@ -0,0 +1,47 @@ +import { Feather } from "@expo/vector-icons"; +import React from "react"; +import { Tabs, SizableText, YStack, XStack } from "tamagui"; +import { useDisconnect } from "wagmi"; + +import Auth from "./auth"; +import Card from "./create-card"; +import RegisterUser from "./register-user"; +import ExaLogo from "../assets/exa-logo.svg"; + +export default function Home() { + const { disconnect } = useDisconnect(); + + return ( + + + + + + disconnect()} size={24} color="black" /> + + + + + + + + + + + + + + + Card + + + auth + + + User + + + + + ); +} diff --git a/app/index.tsx b/app/index.tsx index 5e4fc1f4..476ce254 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -1,168 +1,14 @@ -import Auditor from "@exactly/protocol/deployments/goerli/Auditor.json"; -import MarketUSDC from "@exactly/protocol/deployments/goerli/MarketUSDC.json"; -import MarketWETH from "@exactly/protocol/deployments/goerli/MarketWETH.json"; -import { ApiKeyStamper } from "@turnkey/api-key-stamper"; -import { TurnkeyClient, createActivityPoller, getWebAuthnAttestation } from "@turnkey/http"; -import { deviceName } from "expo-device"; -import React, { useCallback } from "react"; -import { Button, Spinner, Text, XStack, YStack } from "tamagui"; -import { UAParser } from "ua-parser-js"; -import { formatEther, getAddress, parseUnits, zeroAddress } from "viem"; -import { - useAccount, - useConnect, - useDisconnect, - useReadContract, - useSimulateContract, - useWaitForTransactionReceipt, - useWriteContract, -} from "wagmi"; +import React from "react"; +import { useAccount } from "wagmi"; -import base64URLEncode from "../utils/base64URLEncode"; -import { rpId, turnkeyAPIPrivateKey, turnkeyAPIPublicKey, turnkeyOrganizationId } from "../utils/constants"; -import generateRandomBuffer from "../utils/generateRandomBuffer"; -import handleError from "../utils/handleError"; +import Home from "./home"; +import Welcome from "./welcome"; -export default function Home() { - const { - connect, - isPending: isConnecting, - connectors: [connector], - } = useConnect(); - const { address } = useAccount(); - const { disconnect } = useDisconnect(); - const { data: enterWETHSimulation } = useSimulateContract({ - abi: Auditor.abi, - address: getAddress(Auditor.address), - functionName: "enterMarket", - args: [MarketWETH.address], - query: { enabled: !!address }, - }); - const { data: borrowUSDCSimulation } = useSimulateContract({ - abi: MarketUSDC.abi, - address: getAddress(MarketUSDC.address), - functionName: "borrow", - args: [parseUnits("1", 6), address, address], - query: { enabled: !!address }, - }); - const { data: accountLiquidity } = useReadContract({ - abi: [ - { - name: "accountLiquidity", - type: "function", - stateMutability: "view", - inputs: [ - { internalType: "address", name: "account", type: "address" }, - { internalType: "contract Market", name: "marketToSimulate", type: "address" }, - { internalType: "uint256", name: "withdrawAmount", type: "uint256" }, - ], - outputs: [ - { internalType: "uint256", name: "sumCollateral", type: "uint256" }, - { internalType: "uint256", name: "sumDebtPlusEffects", type: "uint256" }, - ], - }, - ], - address: getAddress(Auditor.address), - functionName: "accountLiquidity", - args: [address ?? zeroAddress, zeroAddress, 0n], - query: { enabled: !!address }, - }); - const { writeContract, data: txHash, isPending: isSending } = useWriteContract(); - const { isSuccess, isLoading: isWaiting } = useWaitForTransactionReceipt({ hash: txHash }); +export default function Index() { + const { isConnecting, isReconnecting, isDisconnected } = useAccount(); - const createAccount = useCallback(() => { - const name = `exactly, ${new Date().toISOString()}`; - const challenge = generateRandomBuffer(); - getWebAuthnAttestation({ - publicKey: { - rp: { id: rpId, name: "exactly" }, - user: { id: challenge, name, displayName: name }, - pubKeyCredParams: [{ alg: -7, type: "public-key" }], - authenticatorSelection: { requireResidentKey: true, residentKey: "required", userVerification: "required" }, - challenge, - }, - }) - .then(async (attestation) => { - const client = new TurnkeyClient( - { baseUrl: "https://api.turnkey.com" }, - new ApiKeyStamper({ apiPublicKey: turnkeyAPIPublicKey, apiPrivateKey: turnkeyAPIPrivateKey }), - ); - const activityPoller = createActivityPoller({ client, requestFn: client.createSubOrganization }); - const { - result: { createSubOrganizationResultV4 }, - } = await activityPoller({ - type: "ACTIVITY_TYPE_CREATE_SUB_ORGANIZATION_V4", - timestampMs: String(Date.now()), - organizationId: turnkeyOrganizationId, - parameters: { - subOrganizationName: attestation.credentialId, - rootQuorumThreshold: 1, - rootUsers: [ - { - apiKeys: [], - userName: "account", - authenticators: [ - { - authenticatorName: deviceName ?? new UAParser(navigator.userAgent).getBrowser().name ?? "unknown", - challenge: base64URLEncode(challenge), - attestation, - }, - ], - }, - ], - wallet: { - walletName: "default", - accounts: [ - { - curve: "CURVE_SECP256K1", - addressFormat: "ADDRESS_FORMAT_ETHEREUM", - pathFormat: "PATH_FORMAT_BIP32", - path: "m/44'/60'/0'/0/0", - }, - ], - }, - }, - }); - if (!createSubOrganizationResultV4?.wallet?.addresses[0]) throw new Error("sub-org creation failed"); - }) - .catch(handleError); - }, []); + if (isConnecting || isReconnecting) return "loading"; - const connectAccount = useCallback(() => { - if (!connector) throw new Error("no connector"); - connect({ connector }); - }, [connect, connector]); - - const disconnectAccount = useCallback(() => { - disconnect(); - }, [disconnect]); - - const enterWETH = useCallback(() => { - if (!enterWETHSimulation) throw new Error("no simulation"); - writeContract(enterWETHSimulation.request); - }, [enterWETHSimulation, writeContract]); - - const borrowUSDC = useCallback(() => { - if (!borrowUSDCSimulation) throw new Error("no simulation"); - writeContract(borrowUSDCSimulation.request); - }, [borrowUSDCSimulation, writeContract]); - - return ( - - - {txHash && `${txHash} ${isSuccess ? "✅" : ""}`} - {accountLiquidity && accountLiquidity.map((v) => formatEther(v)).join(", ")} - - - - - - - ); + if (isDisconnected) return ; + return ; } diff --git a/app/register-user.tsx b/app/register-user.tsx new file mode 100644 index 00000000..308d1f62 --- /dev/null +++ b/app/register-user.tsx @@ -0,0 +1,274 @@ +import type { FieldApi } from "@tanstack/react-form"; +import { useForm } from "@tanstack/react-form"; +import { zodValidator } from "@tanstack/zod-form-adapter"; +import React, { useCallback, useState } from "react"; +import { Button, Input, YStack, Spinner, Text } from "tamagui"; + +import type { CreateUserRequest, User } from "../pomelo/utils/types"; +import { createUser, getUser } from "../utils/pomelo/client"; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function FieldInfo({ field }: { field: FieldApi }) { + return ( + <> + {field.state.meta.touchedErrors ? {field.state.meta.touchedErrors} : undefined} + {field.state.meta.isValidating ? "Validating..." : undefined} + + ); +} +export default function Register() { + const [loading, setLoading] = useState(false); + const [user, setUser] = useState(); + + const form = useForm({ + validatorAdapter: zodValidator, + defaultValues: { + email: "s@s.com", + name: "James", + surname: "Balboa", + // yyyy-MM-dd + birthdate: "2002-01-01", + street_name: "Calle Piola", + zip_code: "1111", + city: "Guadalajara", + region: "Guadalajara", + country: "MEX", + identification_type: "INE", + identification_value: "123456789", + gender: "MALE", + }, + onSubmit: async ({ value: { street_name, zip_code, city, region, country, ...rest } }) => { + setLoading(true); + try { + const body = { + ...rest, + legal_address: { street_name, zip_code: Number(zip_code), city, region, country }, + } satisfies Omit; + + const newUser = await createUser(body); + console.log(newUser); + setUser(newUser); + } catch (error) { + console.log(error); + } finally { + setLoading(false); + } + }, + }); + const logIn = useCallback(async () => { + const usr = await getUser(); + setUser(usr); + }, []); + if (user) return {JSON.stringify(user)}; + + return ( + + +
{ + event.preventDefault(); + event.stopPropagation(); + void form.handleSubmit(); + }} + > + + ( + { + field.handleChange(value); + }} + /> + )} + /> + ( + { + field.handleChange(value); + }} + /> + )} + /> + ( + { + field.handleChange(value); + }} + /> + )} + /> + ( + <> + { + field.handleChange(value); + }} + /> + + + )} + /> + ( + <> + { + field.handleChange(value); + }} + /> + + + )} + /> + ( + <> + { + field.handleChange(value); + }} + /> + + + )} + /> + ( + <> + { + field.handleChange(value); + }} + /> + + + )} + /> + ( + <> + { + field.handleChange(value); + }} + /> + + + )} + /> + ( + <> + { + field.handleChange(value); + }} + /> + + + )} + /> + ( + <> + { + field.handleChange(value); + }} + /> + + + )} + /> + ( + <> + { + field.handleChange(value); + }} + /> + + + )} + /> + ( + <> + { + field.handleChange(value); + }} + /> + + + )} + /> + + [state.canSubmit, state.isSubmitting]} + children={([canSubmit, isSubmitting]) => ( + + )} + /> + +
+ +
+ ); +} diff --git a/app/test.tsx b/app/test.tsx new file mode 100644 index 00000000..2a4a41a9 --- /dev/null +++ b/app/test.tsx @@ -0,0 +1,103 @@ +import Auditor from "@exactly/protocol/deployments/goerli/Auditor.json"; +import MarketUSDC from "@exactly/protocol/deployments/goerli/MarketUSDC.json"; +import MarketWETH from "@exactly/protocol/deployments/goerli/MarketWETH.json"; +import React, { useCallback } from "react"; +import { Button, Spinner, Text, XStack, YStack } from "tamagui"; +import { formatEther, getAddress, parseUnits, zeroAddress } from "viem"; +import { + useAccount, + useConnect, + useDisconnect, + useReadContract, + useSimulateContract, + useWaitForTransactionReceipt, + useWriteContract, +} from "wagmi"; + +import createAccount from "../utils/createAccount"; + +export default function Home() { + const { + connect, + isPending: isConnecting, + connectors: [connector], + } = useConnect(); + const { address } = useAccount(); + const { disconnect } = useDisconnect(); + const { data: enterWETHSimulation } = useSimulateContract({ + abi: Auditor.abi, + address: getAddress(Auditor.address), + functionName: "enterMarket", + args: [MarketWETH.address], + query: { enabled: !!address }, + }); + const { data: borrowUSDCSimulation } = useSimulateContract({ + abi: MarketUSDC.abi, + address: getAddress(MarketUSDC.address), + functionName: "borrow", + args: [parseUnits("1", 6), address, address], + query: { enabled: !!address }, + }); + const { data: accountLiquidity } = useReadContract({ + abi: [ + { + name: "accountLiquidity", + type: "function", + stateMutability: "view", + inputs: [ + { internalType: "address", name: "account", type: "address" }, + { internalType: "contract Market", name: "marketToSimulate", type: "address" }, + { internalType: "uint256", name: "withdrawAmount", type: "uint256" }, + ], + outputs: [ + { internalType: "uint256", name: "sumCollateral", type: "uint256" }, + { internalType: "uint256", name: "sumDebtPlusEffects", type: "uint256" }, + ], + }, + ], + address: getAddress(Auditor.address), + functionName: "accountLiquidity", + args: [address ?? zeroAddress, zeroAddress, 0n], + query: { enabled: !!address }, + }); + const { writeContract, data: txHash, isPending: isSending } = useWriteContract(); + const { isSuccess, isLoading: isWaiting } = useWaitForTransactionReceipt({ hash: txHash }); + + const connectAccount = useCallback(() => { + if (!connector) throw new Error("no connector"); + connect({ connector }); + }, [connect, connector]); + + const disconnectAccount = useCallback(() => { + disconnect(); + }, [disconnect]); + + const enterWETH = useCallback(() => { + if (!enterWETHSimulation) throw new Error("no simulation"); + writeContract(enterWETHSimulation.request); + }, [enterWETHSimulation, writeContract]); + + const borrowUSDC = useCallback(() => { + if (!borrowUSDCSimulation) throw new Error("no simulation"); + writeContract(borrowUSDCSimulation.request); + }, [borrowUSDCSimulation, writeContract]); + + return ( + + + {txHash && `${txHash} ${isSuccess ? "✅" : ""}`} + {accountLiquidity && accountLiquidity.map((v) => formatEther(v)).join(", ")} + + + + + + + ); +} diff --git a/app/welcome.tsx b/app/welcome.tsx new file mode 100644 index 00000000..75cf76c5 --- /dev/null +++ b/app/welcome.tsx @@ -0,0 +1,54 @@ +import React, { useCallback, useState } from "react"; +import { YStack, Button, Text, Spinner, Heading } from "tamagui"; +import { useConnect } from "wagmi"; + +import createAccount from "../utils/createAccount"; + +export default function Welcome() { + const [loading, setLoading] = useState(false); + + const { + connect, + connectors: [connector], + } = useConnect(); + + const connectAccount = useCallback(() => { + if (!connector) throw new Error("no connector"); + connect({ connector }); + }, [connect, connector]); + + const handleGetStartedClick = useCallback(async () => { + setLoading(true); + await createAccount(); + setLoading(false); + }, []); + + if (loading) + return ( + + + + ); + + return ( + + + + Buy now, pay later and hold your crypto. + + + Use our self-custodial digital credit card and pay with USDC in up to 12 installments without having to swap + your ETH or BTC. + + + + + + Already have an account? Recover passkey + + + + ); +}