From e530e591b815b30105f40b4223bc7f8cbf6931b7 Mon Sep 17 00:00:00 2001 From: Nicolas Burtey Date: Tue, 19 Sep 2023 21:49:39 +0100 Subject: [PATCH] chore: moving to apollo client --- apps/boltcard/app/api/callback/route.ts | 39 +- .../api/card/id/[id]/transactions/route.ts | 16 + apps/boltcard/app/api/ln/route.ts | 75 +- apps/boltcard/app/api/new/route.ts | 3 +- apps/boltcard/bats/e2e-test.bats | 2 +- apps/boltcard/bun.lockb | Bin 160904 -> 298285 bytes apps/boltcard/codegen.yml | 60 + apps/boltcard/package.json | 14 +- apps/boltcard/services/core/generated.ts | 2046 +++++++++++++++++ apps/boltcard/services/core/index.ts | 30 +- 10 files changed, 2202 insertions(+), 83 deletions(-) create mode 100644 apps/boltcard/app/api/card/id/[id]/transactions/route.ts create mode 100644 apps/boltcard/codegen.yml create mode 100644 apps/boltcard/services/core/generated.ts diff --git a/apps/boltcard/app/api/callback/route.ts b/apps/boltcard/app/api/callback/route.ts index 998e6d78bf6..4d4e78e02b7 100644 --- a/apps/boltcard/app/api/callback/route.ts +++ b/apps/boltcard/app/api/callback/route.ts @@ -1,23 +1,16 @@ -import { getCoreClient } from "@/services/core" -import { fetchByCardId } from "@/services/db/card" -import { fetchByK1 } from "@/services/db/payment" -import { gql } from "graphql-request" - import { NextRequest, NextResponse } from "next/server" -type LnInvoicePaymentSendMutation = { - readonly __typename: "Mutation" - readonly lnInvoicePaymentSend: { - readonly __typename: "PaymentSendPayload" - readonly status?: string | null - readonly errors: ReadonlyArray<{ - readonly __typename: "GraphQLApplicationError" - readonly message: string - }> - } -} +import { FetchResult, gql } from "@apollo/client" + +import { fetchByCardId } from "@/services/db/card" +import { fetchByK1 } from "@/services/db/payment" +import { apollo } from "@/services/core" +import { + LnInvoicePaymentSendDocument, + LnInvoicePaymentSendMutation, +} from "@/services/core/generated" -const lnInvoicePaymentSendMutation = gql` +gql` mutation lnInvoicePaymentSend($input: LnInvoicePaymentInput!) { lnInvoicePaymentSend(input: $input) { errors { @@ -52,13 +45,13 @@ export async function GET(req: NextRequest) { const card = await fetchByCardId(cardId) - const client = getCoreClient(card.token) + const client = apollo(card.token).getClient() const { walletId } = card - let result: LnInvoicePaymentSendMutation + let result: FetchResult try { - result = await client.request({ - document: lnInvoicePaymentSendMutation, + result = await client.mutate({ + mutation: LnInvoicePaymentSendDocument, variables: { input: { walletId, paymentRequest: pr } }, }) } catch (error) { @@ -69,13 +62,13 @@ export async function GET(req: NextRequest) { ) } - if (result.lnInvoicePaymentSend.status === "SUCCESS") { + if (result.data?.lnInvoicePaymentSend.status === "SUCCESS") { return NextResponse.json({ status: "OK" }) } else { return NextResponse.json( { status: "ERROR", - reason: `payment failed: ${result.lnInvoicePaymentSend.errors[0].message}`, + reason: `payment failed: ${result.data?.lnInvoicePaymentSend.errors[0].message}`, }, { status: 400 }, ) diff --git a/apps/boltcard/app/api/card/id/[id]/transactions/route.ts b/apps/boltcard/app/api/card/id/[id]/transactions/route.ts new file mode 100644 index 00000000000..427fba6bf85 --- /dev/null +++ b/apps/boltcard/app/api/card/id/[id]/transactions/route.ts @@ -0,0 +1,16 @@ +import { NextRequest, NextResponse } from "next/server" + +import { fetchByCardId } from "@/services/db/card" + +export async function GET(req: NextRequest, { params }: { params: { id: string } }) { + const id = params.id + const card = await fetchByCardId(id) + if (!card) { + return NextResponse.json( + { status: "ERROR", reason: "card not found" }, + { status: 400 }, + ) + } + + return NextResponse.json(card) +} diff --git a/apps/boltcard/app/api/ln/route.ts b/apps/boltcard/app/api/ln/route.ts index 8d53310177a..51888955bf0 100644 --- a/apps/boltcard/app/api/ln/route.ts +++ b/apps/boltcard/app/api/ln/route.ts @@ -2,8 +2,9 @@ import { randomBytes } from "crypto" import { NextRequest, NextResponse } from "next/server" +import { ApolloQueryResult, gql } from "@apollo/client" + import { aesDecryptKey, serverUrl } from "@/services/config" -import { getCoreClient } from "@/services/core" import { aesDecrypt, checkSignature } from "@/services/crypto/aes" import { decodePToUidCtr } from "@/services/crypto/decoder" import { createCard, fetchByUid } from "@/services/db/card" @@ -13,9 +14,15 @@ import { markCardInitAsUsed, } from "@/services/db/card-init" import { insertPayment } from "@/services/db/payment" -import { gql } from "graphql-request" +import { apollo } from "@/services/core" +import { + GetUsdWalletIdDocument, + GetUsdWalletIdQuery, + OnChainAddressCurrentDocument, + OnChainAddressCurrentMutation, +} from "@/services/core/generated" -function generateReadableCode(numDigits: number): string { +function generateReadableCode(numDigits: number, separator: number = 4): string { const allowedNumbers = ["3", "4", "6", "7", "9"] const allowedLetters = [ "A", @@ -43,6 +50,9 @@ function generateReadableCode(numDigits: number): string { const allowedChars = [...allowedNumbers, ...allowedLetters] let code = "" for (let i = 0; i < numDigits; i++) { + if (i > 0 && i % separator === 0) { + code += "-" + } const randomIndex = Math.floor(Math.random() * allowedChars.length) code += allowedChars[randomIndex] } @@ -88,28 +98,7 @@ const maybeSetupCard = async ({ return null } -type GetUsdWalletIdQuery = { - readonly me?: { - readonly defaultAccount: { - readonly id: string - readonly defaultWalletId: string - readonly wallets: ReadonlyArray< - | { - readonly id: string - readonly walletCurrency: string - readonly balance: number - } - | { - readonly id: string - readonly walletCurrency: string - readonly balance: number - } - > - } - } | null -} - -const getUsdWalletIdQuery = gql` +gql` query getUsdWalletId { me { defaultAccount { @@ -123,21 +112,7 @@ const getUsdWalletIdQuery = gql` } } } -` - -type OnChainAddressCurrentMutation = { - readonly __typename: "Mutation" - readonly onChainAddressCurrent: { - readonly __typename: "OnChainAddressPayload" - readonly address?: string | null - readonly errors: ReadonlyArray<{ - readonly __typename: "GraphQLApplicationError" - readonly message: string - }> - } -} -const onChainAddressCurrent = gql` mutation onChainAddressCurrent($input: OnChainAddressCurrentInput!) { onChainAddressCurrent(input: $input) { errors { @@ -189,11 +164,13 @@ export async function GET(req: NextRequest) { if (result) { const { k0AuthKey, k2CmacKey, k3, k4, token } = result - const client = getCoreClient(token) + const client = apollo(token).getClient() - let data: GetUsdWalletIdQuery + let data: ApolloQueryResult try { - data = await client.request(getUsdWalletIdQuery) + data = await client.query({ + query: GetUsdWalletIdDocument, + }) } catch (error) { console.error(error) return NextResponse.json( @@ -202,7 +179,7 @@ export async function GET(req: NextRequest) { ) } - const accountId = data?.me?.defaultAccount?.id + const accountId = data.data?.me?.defaultAccount?.id if (!accountId) { return NextResponse.json( { status: "ERROR", reason: "no accountId found" }, @@ -210,7 +187,7 @@ export async function GET(req: NextRequest) { ) } - const wallets = data.me?.defaultAccount.wallets + const wallets = data.data?.me?.defaultAccount.wallets if (!wallets) { return NextResponse.json( @@ -231,20 +208,20 @@ export async function GET(req: NextRequest) { ) } - const dataOnchain = await client.request({ - document: onChainAddressCurrent, + const dataOnchain = await client.mutate({ + mutation: OnChainAddressCurrentDocument, variables: { input: { walletId } }, }) - const onchainAddress = dataOnchain?.onChainAddressCurrent?.address + const onchainAddress = dataOnchain.data?.onChainAddressCurrent?.address if (!onchainAddress) { - console.log(dataOnchain.onChainAddressCurrent, "dataOnchain") + console.log(dataOnchain.data?.onChainAddressCurrent, "dataOnchain") return NextResponse.json( { status: "ERROR", reason: `onchain address not found` }, { status: 400 }, ) } - const id = generateReadableCode(16) + const id = generateReadableCode(12) console.log({ id, onchainAddress }, "new card id") await markCardInitAsUsed(k2CmacKey) diff --git a/apps/boltcard/app/api/new/route.ts b/apps/boltcard/app/api/new/route.ts index c4d954c94ce..ce619b697e8 100644 --- a/apps/boltcard/app/api/new/route.ts +++ b/apps/boltcard/app/api/new/route.ts @@ -1,6 +1,7 @@ +import { NextRequest, NextResponse } from "next/server" + import { aesDecryptKey, serverUrl } from "@/services/config" import { fetchByOneTimeCode } from "@/services/db/card-init" -import { NextRequest, NextResponse } from "next/server" interface NewCardResponse { protocol_name: string diff --git a/apps/boltcard/bats/e2e-test.bats b/apps/boltcard/bats/e2e-test.bats index 3ffee7133f4..455b62fbe14 100644 --- a/apps/boltcard/bats/e2e-test.bats +++ b/apps/boltcard/bats/e2e-test.bats @@ -59,7 +59,7 @@ load "../../../test/bats/helpers/ln" bitcoin_cli -generate 2 # retry 30 1 check_for_onchain_initiated_settled "$token_name" "$address" - sleep 1 + sleep 2 } @test "callback" { diff --git a/apps/boltcard/bun.lockb b/apps/boltcard/bun.lockb index 9476d1eb8f7d4359d32fc73062bb514944584403..960489c7199d545a9ecba3be05cb0847fc94ddff 100755 GIT binary patch literal 298285 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 diff --git a/apps/boltcard/codegen.yml b/apps/boltcard/codegen.yml new file mode 100644 index 00000000000..1c7f65c418b --- /dev/null +++ b/apps/boltcard/codegen.yml @@ -0,0 +1,60 @@ +overwrite: true +schema: + - "https://raw.githubusercontent.com/GaloyMoney/galoy/main/src/graphql/public/schema.graphql" + - "https://raw.githubusercontent.com/GaloyMoney/galoy/main/src/graphql/admin/schema.graphql" +documents: + - "**/*.{ts,tsx}" +generates: + services/core/generated.ts: + plugins: + - typescript + - typescript-operations + - typescript-react-apollo + - add: + content: "// this file is autogenerated by codegen" + - add: + content: "\/* eslint-disable *\/" + config: + # typesPrefix: GQL + enumsAsConst: true + immutableTypes: true + strictScalars: true + nonOptionalTypename: true + scalars: + AccountApiKeyLabel: "string" + AuthToken: "string" + CentAmount: "number" + ContactAlias: "string" + Hex32Bytes: "string" + Language: "string" + LnPaymentPreImage: "string" + LnPaymentRequest: "string" + LnPaymentSecret: "string" + Memo: "string" + OnChainAddress: "string" + OnChainTxHash: "string" + OneTimeAuthCode: "string" + PaymentHash: "string" + Phone: "string" + SafeInt: "number" + SatAmount: "number" + SignedAmount: "number" + TargetConfirmations: "number" + Timestamp: "number" + Username: "string" + WalletId: "string" + Seconds: "number" + DisplayCurrency: "string" + SignedDisplayMajorAmount: "string" + CountryCode: "string" + EmailRegistrationId: "string" + TotpRegistrationId: "string" + EmailAddress: "string" + TotpSecret: "string" + TotpCode: "string" + Feedback: "string" + Minutes: "string" + LnPubkey: "string" + EndpointId: "string" + EndpointUrl: "string" + Object: "string" diff --git a/apps/boltcard/package.json b/apps/boltcard/package.json index f3a2f02c464..3eccde4c6c8 100644 --- a/apps/boltcard/package.json +++ b/apps/boltcard/package.json @@ -6,9 +6,12 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "codegen": "graphql-codegen --config codegen.yml" }, "dependencies": { + "@apollo/client": "latest", + "@apollo/experimental-nextjs-app-support": "^0.4.2", "@types/node": "20.6.2", "@types/react": "18.2.21", "@types/react-dom": "18.2.7", @@ -18,7 +21,6 @@ "eslint": "8.49.0", "eslint-config-next": "13.4.19", "graphql": "^16.8.0", - "graphql-request": "^6.1.0", "knex": "^2.5.1", "next": "13.4.19", "node-aes-cmac": "^0.1.1", @@ -31,6 +33,12 @@ }, "devDependencies": { "@types/pg": "^8.10.2", - "encoding": "^0.1.13" + "encoding": "^0.1.13", + "@graphql-codegen/add": "^5.0.0", + "@graphql-codegen/cli": "^5.0.0", + "@graphql-codegen/client-preset": "^4.1.0", + "@graphql-codegen/typescript": "^4.0.1", + "@graphql-codegen/typescript-operations": "^4.0.1", + "@graphql-codegen/typescript-react-apollo": "^3.3.7" } } diff --git a/apps/boltcard/services/core/generated.ts b/apps/boltcard/services/core/generated.ts new file mode 100644 index 00000000000..248b35274a3 --- /dev/null +++ b/apps/boltcard/services/core/generated.ts @@ -0,0 +1,2046 @@ +// this file is autogenerated by codegen +/* eslint-disable */ +import { gql } from '@apollo/client'; +import * as Apollo from '@apollo/client'; +export type Maybe = T | null; +export type InputMaybe = Maybe; +export type Exact = { [K in keyof T]: T[K] }; +export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; +export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; +export type MakeEmpty = { [_ in K]?: never }; +export type Incremental = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never }; +const defaultOptions = {} as const; +/** All built-in and custom scalars, mapped to their actual values */ +export type Scalars = { + ID: { input: string; output: string; } + String: { input: string; output: string; } + Boolean: { input: boolean; output: boolean; } + Int: { input: number; output: number; } + Float: { input: number; output: number; } + /** An Opaque Bearer token */ + AuthToken: { input: string; output: string; } + /** (Positive) Cent amount (1/100 of a dollar) */ + CentAmount: { input: number; output: number; } + /** An alias name that a user can set for a wallet (with which they have transactions) */ + ContactAlias: { input: string; output: string; } + /** A CCA2 country code (ex US, FR, etc) */ + CountryCode: { input: string; output: string; } + /** Display currency of an account */ + DisplayCurrency: { input: string; output: string; } + /** Email address */ + EmailAddress: { input: string; output: string; } + /** An id to be passed between registrationInitiate and registrationValidate for confirming email */ + EmailRegistrationId: { input: string; output: string; } + EndpointId: { input: string; output: string; } + /** Url that will be fetched on events for the account */ + EndpointUrl: { input: string; output: string; } + /** Feedback shared with our user */ + Feedback: { input: string; output: string; } + /** Hex-encoded string of 32 bytes */ + Hex32Bytes: { input: string; output: string; } + Language: { input: string; output: string; } + LnPaymentPreImage: { input: string; output: string; } + /** BOLT11 lightning invoice payment request with the amount included */ + LnPaymentRequest: { input: string; output: string; } + LnPaymentSecret: { input: string; output: string; } + LnPubkey: { input: string; output: string; } + /** Text field in a lightning payment transaction */ + Memo: { input: string; output: string; } + /** (Positive) amount of minutes */ + Minutes: { input: string; output: string; } + Object: { input: string; output: string; } + /** An address for an on-chain bitcoin destination */ + OnChainAddress: { input: string; output: string; } + OnChainTxHash: { input: string; output: string; } + /** An authentication code valid for a single use */ + OneTimeAuthCode: { input: string; output: string; } + PaymentHash: { input: string; output: string; } + /** Phone number which includes country code */ + Phone: { input: string; output: string; } + /** Non-fractional signed whole numeric value between -(2^53) + 1 and 2^53 - 1 */ + SafeInt: { input: number; output: number; } + /** (Positive) Satoshi amount */ + SatAmount: { input: number; output: number; } + /** (Positive) amount of seconds */ + Seconds: { input: number; output: number; } + /** An amount (of a currency) that can be negative (e.g. in a transaction) */ + SignedAmount: { input: number; output: number; } + /** A string amount (of a currency) that can be negative (e.g. in a transaction) */ + SignedDisplayMajorAmount: { input: string; output: string; } + /** Timestamp field, serialized as Unix time (the number of seconds since the Unix epoch) */ + Timestamp: { input: number; output: number; } + /** A time-based one-time password */ + TotpCode: { input: string; output: string; } + /** An id to be passed between set and verify for confirming totp */ + TotpRegistrationId: { input: string; output: string; } + /** A secret to generate time-based one-time password */ + TotpSecret: { input: string; output: string; } + /** Unique identifier of a user */ + Username: { input: string; output: string; } + /** Unique identifier of a wallet */ + WalletId: { input: string; output: string; } +}; + +export type Account = { + readonly callbackEndpoints: ReadonlyArray; + readonly csvTransactions: Scalars['String']['output']; + readonly defaultWalletId: Scalars['WalletId']['output']; + readonly displayCurrency: Scalars['DisplayCurrency']['output']; + readonly id: Scalars['ID']['output']; + readonly level: AccountLevel; + readonly limits: AccountLimits; + readonly realtimePrice: RealtimePrice; + readonly transactions?: Maybe; + readonly wallets: ReadonlyArray; +}; + + +export type AccountCsvTransactionsArgs = { + walletIds: ReadonlyArray; +}; + + +export type AccountTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + walletIds?: InputMaybe>>; +}; + +export type AccountDeletePayload = { + readonly __typename: 'AccountDeletePayload'; + readonly errors: ReadonlyArray; + readonly success: Scalars['Boolean']['output']; +}; + +export type AccountDetailPayload = { + readonly __typename: 'AccountDetailPayload'; + readonly accountDetails?: Maybe; + readonly errors: ReadonlyArray; +}; + +export const AccountLevel = { + One: 'ONE', + Two: 'TWO', + Zero: 'ZERO' +} as const; + +export type AccountLevel = typeof AccountLevel[keyof typeof AccountLevel]; +export type AccountLimit = { + /** The rolling time interval in seconds that the limits would apply for. */ + readonly interval?: Maybe; + /** The amount of cents remaining below the limit for the current 24 hour period. */ + readonly remainingLimit?: Maybe; + /** The current maximum limit for a given 24 hour period. */ + readonly totalLimit: Scalars['CentAmount']['output']; +}; + +export type AccountLimits = { + readonly __typename: 'AccountLimits'; + /** Limits for converting between currencies among a account's own wallets. */ + readonly convert: ReadonlyArray; + /** Limits for sending to other internal accounts. */ + readonly internalSend: ReadonlyArray; + /** Limits for withdrawing to external onchain or lightning destinations. */ + readonly withdrawal: ReadonlyArray; +}; + +export const AccountStatus = { + Active: 'ACTIVE', + Closed: 'CLOSED', + Locked: 'LOCKED', + New: 'NEW', + Pending: 'PENDING' +} as const; + +export type AccountStatus = typeof AccountStatus[keyof typeof AccountStatus]; +export type AccountUpdateDefaultWalletIdInput = { + readonly walletId: Scalars['WalletId']['input']; +}; + +export type AccountUpdateDefaultWalletIdPayload = { + readonly __typename: 'AccountUpdateDefaultWalletIdPayload'; + readonly account?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type AccountUpdateDisplayCurrencyInput = { + readonly currency: Scalars['DisplayCurrency']['input']; +}; + +export type AccountUpdateDisplayCurrencyPayload = { + readonly __typename: 'AccountUpdateDisplayCurrencyPayload'; + readonly account?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type AccountUpdateLevelInput = { + readonly level: AccountLevel; + readonly uid: Scalars['ID']['input']; +}; + +export type AccountUpdateStatusInput = { + readonly comment?: InputMaybe; + readonly status: AccountStatus; + readonly uid: Scalars['ID']['input']; +}; + +export type AdminPushNotificationSendInput = { + readonly accountId?: InputMaybe; + readonly body?: InputMaybe; + readonly data?: InputMaybe; + readonly title?: InputMaybe; +}; + +export type AdminPushNotificationSendPayload = { + readonly __typename: 'AdminPushNotificationSendPayload'; + readonly errors: ReadonlyArray; + readonly success?: Maybe; +}; + +/** Accounts are core to the Galoy architecture. they have users, and own wallets */ +export type AuditedAccount = { + readonly __typename: 'AuditedAccount'; + /** GPS coordinates for the account that can be used to place the related business on a map */ + readonly coordinates?: Maybe; + readonly createdAt: Scalars['Timestamp']['output']; + readonly id: Scalars['ID']['output']; + readonly level: AccountLevel; + readonly owner: AuditedUser; + readonly status: AccountStatus; + readonly title?: Maybe; + readonly username?: Maybe; + readonly uuid: Scalars['String']['output']; + readonly wallets: ReadonlyArray; +}; + +export type AuditedUser = { + readonly __typename: 'AuditedUser'; + readonly createdAt: Scalars['Timestamp']['output']; + /** Email address */ + readonly email?: Maybe; + readonly id: Scalars['ID']['output']; + readonly language: Scalars['Language']['output']; + readonly phone?: Maybe; +}; + +export type AuthTokenPayload = { + readonly __typename: 'AuthTokenPayload'; + readonly authToken?: Maybe; + readonly errors: ReadonlyArray; + readonly totpRequired?: Maybe; +}; + +/** A wallet belonging to an account which contains a BTC balance and a list of transactions. */ +export type BtcWallet = Wallet & { + readonly __typename: 'BTCWallet'; + readonly accountId: Scalars['ID']['output']; + /** A balance stored in BTC. */ + readonly balance: Scalars['SignedAmount']['output']; + readonly id: Scalars['ID']['output']; + /** An unconfirmed incoming onchain balance. */ + readonly pendingIncomingBalance: Scalars['SignedAmount']['output']; + /** A list of BTC transactions associated with this wallet. */ + readonly transactions?: Maybe; + readonly transactionsByAddress?: Maybe; + readonly walletCurrency: WalletCurrency; +}; + + +/** A wallet belonging to an account which contains a BTC balance and a list of transactions. */ +export type BtcWalletTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A wallet belonging to an account which contains a BTC balance and a list of transactions. */ +export type BtcWalletTransactionsByAddressArgs = { + address: Scalars['OnChainAddress']['input']; + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + +export type BuildInformation = { + readonly __typename: 'BuildInformation'; + readonly commitHash?: Maybe; + readonly helmRevision?: Maybe; +}; + +export type BusinessDeleteMapInfoInput = { + readonly username: Scalars['Username']['input']; +}; + +export type BusinessUpdateMapInfoInput = { + readonly latitude: Scalars['Float']['input']; + readonly longitude: Scalars['Float']['input']; + readonly title: Scalars['String']['input']; + readonly username: Scalars['Username']['input']; +}; + +export type CallbackEndpoint = { + readonly __typename: 'CallbackEndpoint'; + readonly id: Scalars['EndpointId']['output']; + readonly url: Scalars['EndpointUrl']['output']; +}; + +export type CallbackEndpointAddInput = { + /** callback endpoint to be called */ + readonly url: Scalars['EndpointUrl']['input']; +}; + +export type CallbackEndpointAddPayload = { + readonly __typename: 'CallbackEndpointAddPayload'; + readonly errors: ReadonlyArray; + readonly id?: Maybe; +}; + +export type CallbackEndpointDeleteInput = { + readonly id: Scalars['EndpointId']['input']; +}; + +export type CaptchaCreateChallengePayload = { + readonly __typename: 'CaptchaCreateChallengePayload'; + readonly errors: ReadonlyArray; + readonly result?: Maybe; +}; + +export type CaptchaCreateChallengeResult = { + readonly __typename: 'CaptchaCreateChallengeResult'; + readonly challengeCode: Scalars['String']['output']; + readonly failbackMode: Scalars['Boolean']['output']; + readonly id: Scalars['String']['output']; + readonly newCaptcha: Scalars['Boolean']['output']; +}; + +export type CaptchaRequestAuthCodeInput = { + readonly challengeCode: Scalars['String']['input']; + readonly channel?: InputMaybe; + readonly phone: Scalars['Phone']['input']; + readonly secCode: Scalars['String']['input']; + readonly validationCode: Scalars['String']['input']; +}; + +export type CentAmountPayload = { + readonly __typename: 'CentAmountPayload'; + readonly amount?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type ConsumerAccount = Account & { + readonly __typename: 'ConsumerAccount'; + readonly callbackEndpoints: ReadonlyArray; + /** return CSV stream, base64 encoded, of the list of transactions in the wallet */ + readonly csvTransactions: Scalars['String']['output']; + readonly defaultWalletId: Scalars['WalletId']['output']; + readonly displayCurrency: Scalars['DisplayCurrency']['output']; + readonly id: Scalars['ID']['output']; + readonly level: AccountLevel; + readonly limits: AccountLimits; + /** List the quiz questions of the consumer account */ + readonly quiz: ReadonlyArray; + readonly realtimePrice: RealtimePrice; + /** A list of all transactions associated with walletIds optionally passed. */ + readonly transactions?: Maybe; + readonly wallets: ReadonlyArray; +}; + + +export type ConsumerAccountCsvTransactionsArgs = { + walletIds: ReadonlyArray; +}; + + +export type ConsumerAccountTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + walletIds?: InputMaybe>>; +}; + +export type Coordinates = { + readonly __typename: 'Coordinates'; + readonly latitude: Scalars['Float']['output']; + readonly longitude: Scalars['Float']['output']; +}; + +export type Country = { + readonly __typename: 'Country'; + readonly id: Scalars['CountryCode']['output']; + readonly supportedAuthChannels: ReadonlyArray; +}; + +export type Currency = { + readonly __typename: 'Currency'; + readonly flag: Scalars['String']['output']; + readonly fractionDigits: Scalars['Int']['output']; + readonly id: Scalars['ID']['output']; + readonly name: Scalars['String']['output']; + readonly symbol: Scalars['String']['output']; +}; + +export type DepositFeesInformation = { + readonly __typename: 'DepositFeesInformation'; + readonly minBankFee: Scalars['String']['output']; + /** below this amount minBankFee will be charged */ + readonly minBankFeeThreshold: Scalars['String']['output']; + /** ratio to charge as basis points above minBankFeeThreshold amount */ + readonly ratio: Scalars['String']['output']; +}; + +export type DeviceNotificationTokenCreateInput = { + readonly deviceToken: Scalars['String']['input']; +}; + +export type Email = { + readonly __typename: 'Email'; + readonly address?: Maybe; + readonly verified?: Maybe; +}; + +export type Error = { + readonly code?: Maybe; + readonly message: Scalars['String']['output']; + readonly path?: Maybe>>; +}; + +export const ExchangeCurrencyUnit = { + Btcsat: 'BTCSAT', + Usdcent: 'USDCENT' +} as const; + +export type ExchangeCurrencyUnit = typeof ExchangeCurrencyUnit[keyof typeof ExchangeCurrencyUnit]; +export type FeedbackSubmitInput = { + readonly feedback: Scalars['Feedback']['input']; +}; + +export type FeesInformation = { + readonly __typename: 'FeesInformation'; + readonly deposit: DepositFeesInformation; +}; + +/** Provides global settings for the application which might have an impact for the user. */ +export type Globals = { + readonly __typename: 'Globals'; + readonly buildInformation: BuildInformation; + readonly feesInformation: FeesInformation; + /** The domain name for lightning addresses accepted by this Galoy instance */ + readonly lightningAddressDomain: Scalars['String']['output']; + readonly lightningAddressDomainAliases: ReadonlyArray; + /** Which network (mainnet, testnet, regtest, signet) this instance is running on. */ + readonly network: Network; + /** + * A list of public keys for the running lightning nodes. + * This can be used to know if an invoice belongs to one of our nodes. + */ + readonly nodesIds: ReadonlyArray; + /** A list of countries and their supported auth channels */ + readonly supportedCountries: ReadonlyArray; +}; + +export type GraphQlApplicationError = Error & { + readonly __typename: 'GraphQLApplicationError'; + readonly code?: Maybe; + readonly message: Scalars['String']['output']; + readonly path?: Maybe>>; +}; + +export type InitiationVia = InitiationViaIntraLedger | InitiationViaLn | InitiationViaOnChain; + +export type InitiationViaIntraLedger = { + readonly __typename: 'InitiationViaIntraLedger'; + readonly counterPartyUsername?: Maybe; + readonly counterPartyWalletId?: Maybe; +}; + +export type InitiationViaLn = { + readonly __typename: 'InitiationViaLn'; + readonly paymentHash: Scalars['PaymentHash']['output']; +}; + +export type InitiationViaOnChain = { + readonly __typename: 'InitiationViaOnChain'; + readonly address: Scalars['OnChainAddress']['output']; +}; + +export type IntraLedgerPaymentSendInput = { + /** Amount in satoshis. */ + readonly amount: Scalars['SatAmount']['input']; + /** Optional memo to be attached to the payment. */ + readonly memo?: InputMaybe; + readonly recipientWalletId: Scalars['WalletId']['input']; + /** The wallet ID of the sender. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type IntraLedgerUpdate = { + readonly __typename: 'IntraLedgerUpdate'; + readonly amount: Scalars['SatAmount']['output']; + readonly displayCurrencyPerSat: Scalars['Float']['output']; + readonly txNotificationType: TxNotificationType; + /** @deprecated updated over displayCurrencyPerSat */ + readonly usdPerSat: Scalars['Float']['output']; + readonly walletId: Scalars['WalletId']['output']; +}; + +export type IntraLedgerUsdPaymentSendInput = { + /** Amount in cents. */ + readonly amount: Scalars['CentAmount']['input']; + /** Optional memo to be attached to the payment. */ + readonly memo?: InputMaybe; + readonly recipientWalletId: Scalars['WalletId']['input']; + /** The wallet ID of the sender. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export const InvoicePaymentStatus = { + Expired: 'EXPIRED', + Paid: 'PAID', + Pending: 'PENDING' +} as const; + +export type InvoicePaymentStatus = typeof InvoicePaymentStatus[keyof typeof InvoicePaymentStatus]; +export type LightningInvoice = { + readonly __typename: 'LightningInvoice'; + readonly confirmedAt?: Maybe; + readonly createdAt: Scalars['Timestamp']['output']; + readonly description: Scalars['String']['output']; + readonly expiresAt?: Maybe; + readonly isSettled: Scalars['Boolean']['output']; + readonly received: Scalars['SatAmount']['output']; + readonly request?: Maybe; + readonly secretPreImage: Scalars['LnPaymentPreImage']['output']; +}; + +export type LightningPayment = { + readonly __typename: 'LightningPayment'; + readonly amount?: Maybe; + readonly confirmedAt?: Maybe; + readonly createdAt?: Maybe; + readonly destination?: Maybe; + readonly request?: Maybe; + readonly revealedPreImage?: Maybe; + readonly roundedUpFee?: Maybe; + readonly status?: Maybe; +}; + +export type LnInvoice = { + readonly __typename: 'LnInvoice'; + readonly paymentHash: Scalars['PaymentHash']['output']; + readonly paymentRequest: Scalars['LnPaymentRequest']['output']; + readonly paymentSecret: Scalars['LnPaymentSecret']['output']; + readonly satoshis?: Maybe; +}; + +export type LnInvoiceCreateInput = { + /** Amount in satoshis. */ + readonly amount: Scalars['SatAmount']['input']; + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. */ + readonly memo?: InputMaybe; + /** Wallet ID for a BTC wallet belonging to the current account. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnInvoiceCreateOnBehalfOfRecipientInput = { + /** Amount in satoshis. */ + readonly amount: Scalars['SatAmount']['input']; + readonly descriptionHash?: InputMaybe; + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. */ + readonly memo?: InputMaybe; + /** Wallet ID for a BTC wallet which belongs to any account. */ + readonly recipientWalletId: Scalars['WalletId']['input']; +}; + +export type LnInvoiceFeeProbeInput = { + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnInvoicePayload = { + readonly __typename: 'LnInvoicePayload'; + readonly errors: ReadonlyArray; + readonly invoice?: Maybe; +}; + +export type LnInvoicePaymentInput = { + /** Optional memo to associate with the lightning invoice. */ + readonly memo?: InputMaybe; + /** Payment request representing the invoice which is being paid. */ + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + /** Wallet ID with sufficient balance to cover amount of invoice. Must belong to the account of the current user. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnInvoicePaymentStatusInput = { + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; +}; + +export type LnInvoicePaymentStatusPayload = { + readonly __typename: 'LnInvoicePaymentStatusPayload'; + readonly errors: ReadonlyArray; + readonly status?: Maybe; +}; + +export type LnNoAmountInvoice = { + readonly __typename: 'LnNoAmountInvoice'; + readonly paymentHash: Scalars['PaymentHash']['output']; + readonly paymentRequest: Scalars['LnPaymentRequest']['output']; + readonly paymentSecret: Scalars['LnPaymentSecret']['output']; +}; + +export type LnNoAmountInvoiceCreateInput = { + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. */ + readonly memo?: InputMaybe; + /** ID for either a USD or BTC wallet belonging to the account of the current user. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnNoAmountInvoiceCreateOnBehalfOfRecipientInput = { + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. */ + readonly memo?: InputMaybe; + /** ID for either a USD or BTC wallet which belongs to the account of any user. */ + readonly recipientWalletId: Scalars['WalletId']['input']; +}; + +export type LnNoAmountInvoiceFeeProbeInput = { + readonly amount: Scalars['SatAmount']['input']; + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnNoAmountInvoicePayload = { + readonly __typename: 'LnNoAmountInvoicePayload'; + readonly errors: ReadonlyArray; + readonly invoice?: Maybe; +}; + +export type LnNoAmountInvoicePaymentInput = { + /** Amount to pay in satoshis. */ + readonly amount: Scalars['SatAmount']['input']; + /** Optional memo to associate with the lightning invoice. */ + readonly memo?: InputMaybe; + /** Payment request representing the invoice which is being paid. */ + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + /** Wallet ID with sufficient balance to cover amount defined in mutation request. Must belong to the account of the current user. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnNoAmountUsdInvoiceFeeProbeInput = { + readonly amount: Scalars['CentAmount']['input']; + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnNoAmountUsdInvoicePaymentInput = { + /** Amount to pay in USD cents. */ + readonly amount: Scalars['CentAmount']['input']; + /** Optional memo to associate with the lightning invoice. */ + readonly memo?: InputMaybe; + /** Payment request representing the invoice which is being paid. */ + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + /** Wallet ID with sufficient balance to cover amount defined in mutation request. Must belong to the account of the current user. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export const LnPaymentStatus = { + Failed: 'FAILED', + Pending: 'PENDING', + Settled: 'SETTLED' +} as const; + +export type LnPaymentStatus = typeof LnPaymentStatus[keyof typeof LnPaymentStatus]; +export type LnUpdate = { + readonly __typename: 'LnUpdate'; + readonly paymentHash: Scalars['PaymentHash']['output']; + readonly status: InvoicePaymentStatus; + readonly walletId: Scalars['WalletId']['output']; +}; + +export type LnUsdInvoiceCreateInput = { + /** Amount in USD cents. */ + readonly amount: Scalars['CentAmount']['input']; + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. */ + readonly memo?: InputMaybe; + /** Wallet ID for a USD wallet belonging to the current user. */ + readonly walletId: Scalars['WalletId']['input']; +}; + +export type LnUsdInvoiceCreateOnBehalfOfRecipientInput = { + /** Amount in USD cents. */ + readonly amount: Scalars['CentAmount']['input']; + readonly descriptionHash?: InputMaybe; + /** Optional invoice expiration time in minutes. */ + readonly expiresIn?: InputMaybe; + /** Optional memo for the lightning invoice. Acts as a note to the recipient. */ + readonly memo?: InputMaybe; + /** Wallet ID for a USD wallet which belongs to the account of any user. */ + readonly recipientWalletId: Scalars['WalletId']['input']; +}; + +export type LnUsdInvoiceFeeProbeInput = { + readonly paymentRequest: Scalars['LnPaymentRequest']['input']; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type MapInfo = { + readonly __typename: 'MapInfo'; + readonly coordinates: Coordinates; + readonly title: Scalars['String']['output']; +}; + +export type MapMarker = { + readonly __typename: 'MapMarker'; + readonly mapInfo: MapInfo; + readonly username?: Maybe; +}; + +export type MobileVersions = { + readonly __typename: 'MobileVersions'; + readonly currentSupported: Scalars['Int']['output']; + readonly minSupported: Scalars['Int']['output']; + readonly platform: Scalars['String']['output']; +}; + +export type Mutation = { + readonly __typename: 'Mutation'; + readonly accountDelete: AccountDeletePayload; + readonly accountUpdateDefaultWalletId: AccountUpdateDefaultWalletIdPayload; + readonly accountUpdateDisplayCurrency: AccountUpdateDisplayCurrencyPayload; + readonly accountUpdateLevel: AccountDetailPayload; + readonly accountUpdateStatus: AccountDetailPayload; + readonly adminPushNotificationSend: AdminPushNotificationSendPayload; + readonly businessDeleteMapInfo: AccountDetailPayload; + readonly businessUpdateMapInfo: AccountDetailPayload; + readonly callbackEndpointAdd: CallbackEndpointAddPayload; + readonly callbackEndpointDelete: SuccessPayload; + readonly captchaCreateChallenge: CaptchaCreateChallengePayload; + readonly captchaRequestAuthCode: SuccessPayload; + readonly deviceNotificationTokenCreate: SuccessPayload; + readonly feedbackSubmit: SuccessPayload; + /** + * Actions a payment which is internal to the ledger e.g. it does + * not use onchain/lightning. Returns payment status (success, + * failed, pending, already_paid). + */ + readonly intraLedgerPaymentSend: PaymentSendPayload; + /** + * Actions a payment which is internal to the ledger e.g. it does + * not use onchain/lightning. Returns payment status (success, + * failed, pending, already_paid). + */ + readonly intraLedgerUsdPaymentSend: PaymentSendPayload; + /** + * Returns a lightning invoice for an associated wallet. + * When invoice is paid the value will be credited to a BTC wallet. + * Expires after 'expiresIn' or 24 hours. + */ + readonly lnInvoiceCreate: LnInvoicePayload; + /** + * Returns a lightning invoice for an associated wallet. + * When invoice is paid the value will be credited to a BTC wallet. + * Expires after 'expiresIn' or 24 hours. + */ + readonly lnInvoiceCreateOnBehalfOfRecipient: LnInvoicePayload; + readonly lnInvoiceFeeProbe: SatAmountPayload; + /** + * Pay a lightning invoice using a balance from a wallet which is owned by the account of the current user. + * Provided wallet can be USD or BTC and must have sufficient balance to cover amount in lightning invoice. + * Returns payment status (success, failed, pending, already_paid). + */ + readonly lnInvoicePaymentSend: PaymentSendPayload; + /** + * Returns a lightning invoice for an associated wallet. + * Can be used to receive any supported currency value (currently USD or BTC). + * Expires after 'expiresIn' or 24 hours for BTC invoices or 5 minutes for USD invoices. + */ + readonly lnNoAmountInvoiceCreate: LnNoAmountInvoicePayload; + /** + * Returns a lightning invoice for an associated wallet. + * Can be used to receive any supported currency value (currently USD or BTC). + * Expires after 'expiresIn' or 24 hours for BTC invoices or 5 minutes for USD invoices. + */ + readonly lnNoAmountInvoiceCreateOnBehalfOfRecipient: LnNoAmountInvoicePayload; + readonly lnNoAmountInvoiceFeeProbe: SatAmountPayload; + /** + * Pay a lightning invoice using a balance from a wallet which is owned by the account of the current user. + * Provided wallet must be BTC and must have sufficient balance to cover amount specified in mutation request. + * Returns payment status (success, failed, pending, already_paid). + */ + readonly lnNoAmountInvoicePaymentSend: PaymentSendPayload; + readonly lnNoAmountUsdInvoiceFeeProbe: CentAmountPayload; + /** + * Pay a lightning invoice using a balance from a wallet which is owned by the account of the current user. + * Provided wallet must be USD and have sufficient balance to cover amount specified in mutation request. + * Returns payment status (success, failed, pending, already_paid). + */ + readonly lnNoAmountUsdInvoicePaymentSend: PaymentSendPayload; + /** + * Returns a lightning invoice denominated in satoshis for an associated wallet. + * When invoice is paid the equivalent value at invoice creation will be credited to a USD wallet. + * Expires after 'expiresIn' or 5 minutes (short expiry time because there is a USD/BTC exchange rate + * associated with the amount). + */ + readonly lnUsdInvoiceCreate: LnInvoicePayload; + /** + * Returns a lightning invoice denominated in satoshis for an associated wallet. + * When invoice is paid the equivalent value at invoice creation will be credited to a USD wallet. + * Expires after 'expiresIn' or 5 minutes (short expiry time because there is a USD/BTC exchange rate + * associated with the amount). + */ + readonly lnUsdInvoiceCreateOnBehalfOfRecipient: LnInvoicePayload; + readonly lnUsdInvoiceFeeProbe: SatAmountPayload; + readonly onChainAddressCreate: OnChainAddressPayload; + readonly onChainAddressCurrent: OnChainAddressPayload; + readonly onChainPaymentSend: PaymentSendPayload; + readonly onChainPaymentSendAll: PaymentSendPayload; + readonly onChainUsdPaymentSend: PaymentSendPayload; + readonly onChainUsdPaymentSendAsBtcDenominated: PaymentSendPayload; + readonly quizCompleted: QuizCompletedPayload; + /** @deprecated will be moved to AccountContact */ + readonly userContactUpdateAlias: UserContactUpdateAliasPayload; + readonly userEmailDelete: UserEmailDeletePayload; + readonly userEmailRegistrationInitiate: UserEmailRegistrationInitiatePayload; + readonly userEmailRegistrationValidate: UserEmailRegistrationValidatePayload; + readonly userLogin: AuthTokenPayload; + readonly userLoginUpgrade: UpgradePayload; + readonly userLogout: SuccessPayload; + readonly userPhoneDelete: UserPhoneDeletePayload; + readonly userPhoneRegistrationInitiate: SuccessPayload; + readonly userPhoneRegistrationValidate: UserPhoneRegistrationValidatePayload; + /** @deprecated Use QuizCompletedMutation instead */ + readonly userQuizQuestionUpdateCompleted: UserQuizQuestionUpdateCompletedPayload; + readonly userTotpDelete: UserTotpDeletePayload; + readonly userTotpRegistrationInitiate: UserTotpRegistrationInitiatePayload; + readonly userTotpRegistrationValidate: UserTotpRegistrationValidatePayload; + readonly userUpdateLanguage: UserUpdateLanguagePayload; + readonly userUpdatePhone: AccountDetailPayload; + /** @deprecated Username will be moved to @Handle in Accounts. Also SetUsername naming should be used instead of UpdateUsername to reflect the idempotency of Handles */ + readonly userUpdateUsername: UserUpdateUsernamePayload; +}; + + +export type MutationAccountUpdateDefaultWalletIdArgs = { + input: AccountUpdateDefaultWalletIdInput; +}; + + +export type MutationAccountUpdateDisplayCurrencyArgs = { + input: AccountUpdateDisplayCurrencyInput; +}; + + +export type MutationAccountUpdateLevelArgs = { + input: AccountUpdateLevelInput; +}; + + +export type MutationAccountUpdateStatusArgs = { + input: AccountUpdateStatusInput; +}; + + +export type MutationAdminPushNotificationSendArgs = { + input: AdminPushNotificationSendInput; +}; + + +export type MutationBusinessDeleteMapInfoArgs = { + input: BusinessDeleteMapInfoInput; +}; + + +export type MutationBusinessUpdateMapInfoArgs = { + input: BusinessUpdateMapInfoInput; +}; + + +export type MutationCallbackEndpointAddArgs = { + input: CallbackEndpointAddInput; +}; + + +export type MutationCallbackEndpointDeleteArgs = { + input: CallbackEndpointDeleteInput; +}; + + +export type MutationCaptchaRequestAuthCodeArgs = { + input: CaptchaRequestAuthCodeInput; +}; + + +export type MutationDeviceNotificationTokenCreateArgs = { + input: DeviceNotificationTokenCreateInput; +}; + + +export type MutationFeedbackSubmitArgs = { + input: FeedbackSubmitInput; +}; + + +export type MutationIntraLedgerPaymentSendArgs = { + input: IntraLedgerPaymentSendInput; +}; + + +export type MutationIntraLedgerUsdPaymentSendArgs = { + input: IntraLedgerUsdPaymentSendInput; +}; + + +export type MutationLnInvoiceCreateArgs = { + input: LnInvoiceCreateInput; +}; + + +export type MutationLnInvoiceCreateOnBehalfOfRecipientArgs = { + input: LnInvoiceCreateOnBehalfOfRecipientInput; +}; + + +export type MutationLnInvoiceFeeProbeArgs = { + input: LnInvoiceFeeProbeInput; +}; + + +export type MutationLnInvoicePaymentSendArgs = { + input: LnInvoicePaymentInput; +}; + + +export type MutationLnNoAmountInvoiceCreateArgs = { + input: LnNoAmountInvoiceCreateInput; +}; + + +export type MutationLnNoAmountInvoiceCreateOnBehalfOfRecipientArgs = { + input: LnNoAmountInvoiceCreateOnBehalfOfRecipientInput; +}; + + +export type MutationLnNoAmountInvoiceFeeProbeArgs = { + input: LnNoAmountInvoiceFeeProbeInput; +}; + + +export type MutationLnNoAmountInvoicePaymentSendArgs = { + input: LnNoAmountInvoicePaymentInput; +}; + + +export type MutationLnNoAmountUsdInvoiceFeeProbeArgs = { + input: LnNoAmountUsdInvoiceFeeProbeInput; +}; + + +export type MutationLnNoAmountUsdInvoicePaymentSendArgs = { + input: LnNoAmountUsdInvoicePaymentInput; +}; + + +export type MutationLnUsdInvoiceCreateArgs = { + input: LnUsdInvoiceCreateInput; +}; + + +export type MutationLnUsdInvoiceCreateOnBehalfOfRecipientArgs = { + input: LnUsdInvoiceCreateOnBehalfOfRecipientInput; +}; + + +export type MutationLnUsdInvoiceFeeProbeArgs = { + input: LnUsdInvoiceFeeProbeInput; +}; + + +export type MutationOnChainAddressCreateArgs = { + input: OnChainAddressCreateInput; +}; + + +export type MutationOnChainAddressCurrentArgs = { + input: OnChainAddressCurrentInput; +}; + + +export type MutationOnChainPaymentSendArgs = { + input: OnChainPaymentSendInput; +}; + + +export type MutationOnChainPaymentSendAllArgs = { + input: OnChainPaymentSendAllInput; +}; + + +export type MutationOnChainUsdPaymentSendArgs = { + input: OnChainUsdPaymentSendInput; +}; + + +export type MutationOnChainUsdPaymentSendAsBtcDenominatedArgs = { + input: OnChainUsdPaymentSendAsBtcDenominatedInput; +}; + + +export type MutationQuizCompletedArgs = { + input: QuizCompletedInput; +}; + + +export type MutationUserContactUpdateAliasArgs = { + input: UserContactUpdateAliasInput; +}; + + +export type MutationUserEmailRegistrationInitiateArgs = { + input: UserEmailRegistrationInitiateInput; +}; + + +export type MutationUserEmailRegistrationValidateArgs = { + input: UserEmailRegistrationValidateInput; +}; + + +export type MutationUserLoginArgs = { + input: UserLoginInput; +}; + + +export type MutationUserLoginUpgradeArgs = { + input: UserLoginUpgradeInput; +}; + + +export type MutationUserLogoutArgs = { + input?: InputMaybe; +}; + + +export type MutationUserPhoneRegistrationInitiateArgs = { + input: UserPhoneRegistrationInitiateInput; +}; + + +export type MutationUserPhoneRegistrationValidateArgs = { + input: UserPhoneRegistrationValidateInput; +}; + + +export type MutationUserQuizQuestionUpdateCompletedArgs = { + input: UserQuizQuestionUpdateCompletedInput; +}; + + +export type MutationUserTotpDeleteArgs = { + input: UserTotpDeleteInput; +}; + + +export type MutationUserTotpRegistrationInitiateArgs = { + input: UserTotpRegistrationInitiateInput; +}; + + +export type MutationUserTotpRegistrationValidateArgs = { + input: UserTotpRegistrationValidateInput; +}; + + +export type MutationUserUpdateLanguageArgs = { + input: UserUpdateLanguageInput; +}; + + +export type MutationUserUpdatePhoneArgs = { + input: UserUpdatePhoneInput; +}; + + +export type MutationUserUpdateUsernameArgs = { + input: UserUpdateUsernameInput; +}; + +export type MyUpdatesPayload = { + readonly __typename: 'MyUpdatesPayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; + readonly update?: Maybe; +}; + +export const Network = { + Mainnet: 'mainnet', + Regtest: 'regtest', + Signet: 'signet', + Testnet: 'testnet' +} as const; + +export type Network = typeof Network[keyof typeof Network]; +export type OnChainAddressCreateInput = { + readonly walletId: Scalars['WalletId']['input']; +}; + +export type OnChainAddressCurrentInput = { + readonly walletId: Scalars['WalletId']['input']; +}; + +export type OnChainAddressPayload = { + readonly __typename: 'OnChainAddressPayload'; + readonly address?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type OnChainPaymentSendAllInput = { + readonly address: Scalars['OnChainAddress']['input']; + readonly memo?: InputMaybe; + readonly speed?: InputMaybe; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type OnChainPaymentSendInput = { + readonly address: Scalars['OnChainAddress']['input']; + readonly amount: Scalars['SatAmount']['input']; + readonly memo?: InputMaybe; + readonly speed?: InputMaybe; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type OnChainTxFee = { + readonly __typename: 'OnChainTxFee'; + readonly amount: Scalars['SatAmount']['output']; +}; + +export type OnChainUpdate = { + readonly __typename: 'OnChainUpdate'; + readonly amount: Scalars['SatAmount']['output']; + readonly displayCurrencyPerSat: Scalars['Float']['output']; + readonly txHash: Scalars['OnChainTxHash']['output']; + readonly txNotificationType: TxNotificationType; + /** @deprecated updated over displayCurrencyPerSat */ + readonly usdPerSat: Scalars['Float']['output']; + readonly walletId: Scalars['WalletId']['output']; +}; + +export type OnChainUsdPaymentSendAsBtcDenominatedInput = { + readonly address: Scalars['OnChainAddress']['input']; + readonly amount: Scalars['SatAmount']['input']; + readonly memo?: InputMaybe; + readonly speed?: InputMaybe; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type OnChainUsdPaymentSendInput = { + readonly address: Scalars['OnChainAddress']['input']; + readonly amount: Scalars['CentAmount']['input']; + readonly memo?: InputMaybe; + readonly speed?: InputMaybe; + readonly walletId: Scalars['WalletId']['input']; +}; + +export type OnChainUsdTxFee = { + readonly __typename: 'OnChainUsdTxFee'; + readonly amount: Scalars['CentAmount']['output']; +}; + +export type OneDayAccountLimit = AccountLimit & { + readonly __typename: 'OneDayAccountLimit'; + /** The rolling time interval value in seconds for the current 24 hour period. */ + readonly interval?: Maybe; + /** The amount of cents remaining below the limit for the current 24 hour period. */ + readonly remainingLimit?: Maybe; + /** The current maximum limit for a given 24 hour period. */ + readonly totalLimit: Scalars['CentAmount']['output']; +}; + +/** Information about pagination in a connection. */ +export type PageInfo = { + readonly __typename: 'PageInfo'; + /** When paginating forwards, the cursor to continue. */ + readonly endCursor?: Maybe; + /** When paginating forwards, are there more items? */ + readonly hasNextPage: Scalars['Boolean']['output']; + /** When paginating backwards, are there more items? */ + readonly hasPreviousPage: Scalars['Boolean']['output']; + /** When paginating backwards, the cursor to continue. */ + readonly startCursor?: Maybe; +}; + +export type PaymentSendPayload = { + readonly __typename: 'PaymentSendPayload'; + readonly errors: ReadonlyArray; + readonly status?: Maybe; +}; + +export const PaymentSendResult = { + AlreadyPaid: 'ALREADY_PAID', + Failure: 'FAILURE', + Pending: 'PENDING', + Success: 'SUCCESS' +} as const; + +export type PaymentSendResult = typeof PaymentSendResult[keyof typeof PaymentSendResult]; +export const PayoutSpeed = { + Fast: 'FAST' +} as const; + +export type PayoutSpeed = typeof PayoutSpeed[keyof typeof PayoutSpeed]; +export const PhoneCodeChannelType = { + Sms: 'SMS', + Whatsapp: 'WHATSAPP' +} as const; + +export type PhoneCodeChannelType = typeof PhoneCodeChannelType[keyof typeof PhoneCodeChannelType]; +/** Price amount expressed in base/offset. To calculate, use: `base / 10^offset` */ +export type Price = { + readonly __typename: 'Price'; + readonly base: Scalars['SafeInt']['output']; + readonly currencyUnit: Scalars['String']['output']; + readonly formattedAmount: Scalars['String']['output']; + readonly offset: Scalars['Int']['output']; +}; + +/** The range for the X axis in the BTC price graph */ +export const PriceGraphRange = { + FiveYears: 'FIVE_YEARS', + OneDay: 'ONE_DAY', + OneMonth: 'ONE_MONTH', + OneWeek: 'ONE_WEEK', + OneYear: 'ONE_YEAR' +} as const; + +export type PriceGraphRange = typeof PriceGraphRange[keyof typeof PriceGraphRange]; +export type PriceInput = { + readonly amount: Scalars['SatAmount']['input']; + readonly amountCurrencyUnit: ExchangeCurrencyUnit; + readonly priceCurrencyUnit: ExchangeCurrencyUnit; +}; + +export type PriceInterface = { + readonly base: Scalars['SafeInt']['output']; + /** @deprecated Deprecated due to type renaming */ + readonly currencyUnit: Scalars['String']['output']; + readonly offset: Scalars['Int']['output']; +}; + +/** Price of 1 sat in base/offset. To calculate, use: `base / 10^offset` */ +export type PriceOfOneSatInMinorUnit = PriceInterface & { + readonly __typename: 'PriceOfOneSatInMinorUnit'; + readonly base: Scalars['SafeInt']['output']; + /** @deprecated Deprecated due to type renaming */ + readonly currencyUnit: Scalars['String']['output']; + readonly offset: Scalars['Int']['output']; +}; + +/** Price of 1 sat or 1 usd cent in base/offset. To calculate, use: `base / 10^offset` */ +export type PriceOfOneSettlementMinorUnitInDisplayMinorUnit = PriceInterface & { + readonly __typename: 'PriceOfOneSettlementMinorUnitInDisplayMinorUnit'; + readonly base: Scalars['SafeInt']['output']; + /** @deprecated Deprecated due to type renaming */ + readonly currencyUnit: Scalars['String']['output']; + /** @deprecated Deprecated please use `base / 10^offset` */ + readonly formattedAmount: Scalars['String']['output']; + readonly offset: Scalars['Int']['output']; +}; + +/** Price of 1 usd cent in base/offset. To calculate, use: `base / 10^offset` */ +export type PriceOfOneUsdCentInMinorUnit = PriceInterface & { + readonly __typename: 'PriceOfOneUsdCentInMinorUnit'; + readonly base: Scalars['SafeInt']['output']; + /** @deprecated Deprecated due to type renaming */ + readonly currencyUnit: Scalars['String']['output']; + readonly offset: Scalars['Int']['output']; +}; + +export type PricePayload = { + readonly __typename: 'PricePayload'; + readonly errors: ReadonlyArray; + readonly price?: Maybe; +}; + +export type PricePoint = { + readonly __typename: 'PricePoint'; + readonly price: Price; + /** Unix timestamp (number of seconds elapsed since January 1, 1970 00:00:00 UTC) */ + readonly timestamp: Scalars['Timestamp']['output']; +}; + +/** A public view of a generic wallet which stores value in one of our supported currencies. */ +export type PublicWallet = { + readonly __typename: 'PublicWallet'; + readonly id: Scalars['ID']['output']; + readonly walletCurrency: WalletCurrency; +}; + +export type Query = { + readonly __typename: 'Query'; + readonly accountDefaultWallet: PublicWallet; + readonly accountDetailsByAccountId: AuditedAccount; + readonly accountDetailsByEmail: AuditedAccount; + readonly accountDetailsByUserPhone: AuditedAccount; + readonly accountDetailsByUsername: AuditedAccount; + readonly allLevels: ReadonlyArray; + /** @deprecated Deprecated in favor of realtimePrice */ + readonly btcPrice?: Maybe; + readonly btcPriceList?: Maybe>>; + readonly businessMapMarkers?: Maybe>>; + readonly currencyList: ReadonlyArray; + readonly globals?: Maybe; + readonly lightningInvoice: LightningInvoice; + readonly lightningPayment: LightningPayment; + readonly listWalletIds: ReadonlyArray; + readonly lnInvoicePaymentStatus: LnInvoicePaymentStatusPayload; + readonly me?: Maybe; + readonly mobileVersions?: Maybe>>; + readonly onChainTxFee: OnChainTxFee; + readonly onChainUsdTxFee: OnChainUsdTxFee; + readonly onChainUsdTxFeeAsBtcDenominated: OnChainUsdTxFee; + /** @deprecated TODO: remove. we don't need a non authenticated version of this query. the users can only do the query while authenticated */ + readonly quizQuestions?: Maybe>>; + /** Returns 1 Sat and 1 Usd Cent price for the given currency */ + readonly realtimePrice: RealtimePrice; + readonly transactionById?: Maybe; + readonly transactionsByHash?: Maybe>>; + /** @deprecated will be migrated to AccountDefaultWalletId */ + readonly userDefaultWalletId: Scalars['WalletId']['output']; + readonly usernameAvailable?: Maybe; + readonly wallet: Wallet; +}; + + +export type QueryAccountDefaultWalletArgs = { + username: Scalars['Username']['input']; + walletCurrency?: InputMaybe; +}; + + +export type QueryAccountDetailsByAccountIdArgs = { + accountId: Scalars['ID']['input']; +}; + + +export type QueryAccountDetailsByEmailArgs = { + email: Scalars['EmailAddress']['input']; +}; + + +export type QueryAccountDetailsByUserPhoneArgs = { + phone: Scalars['Phone']['input']; +}; + + +export type QueryAccountDetailsByUsernameArgs = { + username: Scalars['Username']['input']; +}; + + +export type QueryBtcPriceArgs = { + currency?: Scalars['DisplayCurrency']['input']; +}; + + +export type QueryBtcPriceListArgs = { + range: PriceGraphRange; +}; + + +export type QueryLightningInvoiceArgs = { + hash: Scalars['PaymentHash']['input']; +}; + + +export type QueryLightningPaymentArgs = { + hash: Scalars['PaymentHash']['input']; +}; + + +export type QueryListWalletIdsArgs = { + walletCurrency: WalletCurrency; +}; + + +export type QueryLnInvoicePaymentStatusArgs = { + input: LnInvoicePaymentStatusInput; +}; + + +export type QueryOnChainTxFeeArgs = { + address: Scalars['OnChainAddress']['input']; + amount: Scalars['SatAmount']['input']; + speed?: InputMaybe; + walletId: Scalars['WalletId']['input']; +}; + + +export type QueryOnChainUsdTxFeeArgs = { + address: Scalars['OnChainAddress']['input']; + amount: Scalars['CentAmount']['input']; + speed?: InputMaybe; + walletId: Scalars['WalletId']['input']; +}; + + +export type QueryOnChainUsdTxFeeAsBtcDenominatedArgs = { + address: Scalars['OnChainAddress']['input']; + amount: Scalars['SatAmount']['input']; + speed?: InputMaybe; + walletId: Scalars['WalletId']['input']; +}; + + +export type QueryRealtimePriceArgs = { + currency?: InputMaybe; +}; + + +export type QueryTransactionByIdArgs = { + id: Scalars['ID']['input']; +}; + + +export type QueryTransactionsByHashArgs = { + hash: Scalars['PaymentHash']['input']; +}; + + +export type QueryUserDefaultWalletIdArgs = { + username: Scalars['Username']['input']; +}; + + +export type QueryUsernameAvailableArgs = { + username: Scalars['Username']['input']; +}; + + +export type QueryWalletArgs = { + walletId: Scalars['WalletId']['input']; +}; + +export type Quiz = { + readonly __typename: 'Quiz'; + /** The reward in Satoshis for the quiz question */ + readonly amount: Scalars['SatAmount']['output']; + readonly completed: Scalars['Boolean']['output']; + readonly id: Scalars['ID']['output']; +}; + +export type QuizCompletedInput = { + readonly id: Scalars['ID']['input']; +}; + +export type QuizCompletedPayload = { + readonly __typename: 'QuizCompletedPayload'; + readonly errors: ReadonlyArray; + readonly quiz?: Maybe; +}; + +export type QuizQuestion = { + readonly __typename: 'QuizQuestion'; + /** The earn reward in Satoshis for the quiz question */ + readonly earnAmount: Scalars['SatAmount']['output']; + readonly id: Scalars['ID']['output']; +}; + +export type RealtimePrice = { + readonly __typename: 'RealtimePrice'; + readonly btcSatPrice: PriceOfOneSatInMinorUnit; + readonly denominatorCurrency: Scalars['DisplayCurrency']['output']; + readonly id: Scalars['ID']['output']; + /** Unix timestamp (number of seconds elapsed since January 1, 1970 00:00:00 UTC) */ + readonly timestamp: Scalars['Timestamp']['output']; + readonly usdCentPrice: PriceOfOneUsdCentInMinorUnit; +}; + +export type RealtimePriceInput = { + readonly currency?: InputMaybe; +}; + +export type RealtimePricePayload = { + readonly __typename: 'RealtimePricePayload'; + readonly errors: ReadonlyArray; + readonly realtimePrice?: Maybe; +}; + +export type SatAmountPayload = { + readonly __typename: 'SatAmountPayload'; + readonly amount?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type SettlementVia = SettlementViaIntraLedger | SettlementViaLn | SettlementViaOnChain; + +export type SettlementViaIntraLedger = { + readonly __typename: 'SettlementViaIntraLedger'; + /** Settlement destination: Could be null if the payee does not have a username */ + readonly counterPartyUsername?: Maybe; + readonly counterPartyWalletId?: Maybe; +}; + +export type SettlementViaLn = { + readonly __typename: 'SettlementViaLn'; + /** @deprecated Shifting property to 'preImage' to improve granularity of the LnPaymentSecret type */ + readonly paymentSecret?: Maybe; + readonly preImage?: Maybe; +}; + +export type SettlementViaOnChain = { + readonly __typename: 'SettlementViaOnChain'; + readonly transactionHash?: Maybe; + readonly vout?: Maybe; +}; + +export type Subscription = { + readonly __typename: 'Subscription'; + readonly lnInvoicePaymentStatus: LnInvoicePaymentStatusPayload; + readonly myUpdates: MyUpdatesPayload; + readonly price: PricePayload; + /** Returns the price of 1 satoshi */ + readonly realtimePrice: RealtimePricePayload; +}; + + +export type SubscriptionLnInvoicePaymentStatusArgs = { + input: LnInvoicePaymentStatusInput; +}; + + +export type SubscriptionPriceArgs = { + input: PriceInput; +}; + + +export type SubscriptionRealtimePriceArgs = { + input: RealtimePriceInput; +}; + +export type SuccessPayload = { + readonly __typename: 'SuccessPayload'; + readonly errors: ReadonlyArray; + readonly success?: Maybe; +}; + +/** + * Give details about an individual transaction. + * Galoy have a smart routing system which is automatically + * settling intraledger when both the payer and payee use the same wallet + * therefore it's possible the transactions is being initiated onchain + * or with lightning but settled intraledger. + */ +export type Transaction = { + readonly __typename: 'Transaction'; + readonly createdAt: Scalars['Timestamp']['output']; + readonly direction: TxDirection; + readonly id: Scalars['ID']['output']; + /** From which protocol the payment has been initiated. */ + readonly initiationVia: InitiationVia; + readonly memo?: Maybe; + /** Amount of the settlement currency sent or received. */ + readonly settlementAmount: Scalars['SignedAmount']['output']; + /** Wallet currency for transaction. */ + readonly settlementCurrency: WalletCurrency; + readonly settlementDisplayAmount: Scalars['SignedDisplayMajorAmount']['output']; + readonly settlementDisplayCurrency: Scalars['DisplayCurrency']['output']; + readonly settlementDisplayFee: Scalars['SignedDisplayMajorAmount']['output']; + readonly settlementFee: Scalars['SignedAmount']['output']; + /** Price in WALLETCURRENCY/SETTLEMENTUNIT at time of settlement. */ + readonly settlementPrice: PriceOfOneSettlementMinorUnitInDisplayMinorUnit; + /** To which protocol the payment has settled on. */ + readonly settlementVia: SettlementVia; + readonly status: TxStatus; +}; + +/** A connection to a list of items. */ +export type TransactionConnection = { + readonly __typename: 'TransactionConnection'; + /** A list of edges. */ + readonly edges?: Maybe>; + /** Information to aid in pagination. */ + readonly pageInfo: PageInfo; +}; + +/** An edge in a connection. */ +export type TransactionEdge = { + readonly __typename: 'TransactionEdge'; + /** A cursor for use in pagination */ + readonly cursor: Scalars['String']['output']; + /** The item at the end of the edge */ + readonly node: Transaction; +}; + +export const TxDirection = { + Receive: 'RECEIVE', + Send: 'SEND' +} as const; + +export type TxDirection = typeof TxDirection[keyof typeof TxDirection]; +export const TxNotificationType = { + IntraLedgerPayment: 'IntraLedgerPayment', + IntraLedgerReceipt: 'IntraLedgerReceipt', + LnInvoicePaid: 'LnInvoicePaid', + OnchainPayment: 'OnchainPayment', + OnchainReceipt: 'OnchainReceipt', + OnchainReceiptPending: 'OnchainReceiptPending' +} as const; + +export type TxNotificationType = typeof TxNotificationType[keyof typeof TxNotificationType]; +export const TxStatus = { + Failure: 'FAILURE', + Pending: 'PENDING', + Success: 'SUCCESS' +} as const; + +export type TxStatus = typeof TxStatus[keyof typeof TxStatus]; +export type UpgradePayload = { + readonly __typename: 'UpgradePayload'; + readonly authToken?: Maybe; + readonly errors: ReadonlyArray; + readonly success: Scalars['Boolean']['output']; +}; + +/** A wallet belonging to an account which contains a USD balance and a list of transactions. */ +export type UsdWallet = Wallet & { + readonly __typename: 'UsdWallet'; + readonly accountId: Scalars['ID']['output']; + readonly balance: Scalars['SignedAmount']['output']; + readonly id: Scalars['ID']['output']; + /** An unconfirmed incoming onchain balance. */ + readonly pendingIncomingBalance: Scalars['SignedAmount']['output']; + readonly transactions?: Maybe; + readonly transactionsByAddress?: Maybe; + readonly walletCurrency: WalletCurrency; +}; + + +/** A wallet belonging to an account which contains a USD balance and a list of transactions. */ +export type UsdWalletTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A wallet belonging to an account which contains a USD balance and a list of transactions. */ +export type UsdWalletTransactionsByAddressArgs = { + address: Scalars['OnChainAddress']['input']; + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + +export type User = { + readonly __typename: 'User'; + /** + * Get single contact details. + * Can include the transactions associated with the contact. + * @deprecated will be moved to Accounts + */ + readonly contactByUsername: UserContact; + /** + * Get full list of contacts. + * Can include the transactions associated with each contact. + * @deprecated will be moved to account + */ + readonly contacts: ReadonlyArray; + readonly createdAt: Scalars['Timestamp']['output']; + readonly defaultAccount: Account; + /** Email address */ + readonly email?: Maybe; + readonly id: Scalars['ID']['output']; + /** + * Preferred language for user. + * When value is 'default' the intent is to use preferred language from OS settings. + */ + readonly language: Scalars['Language']['output']; + /** Phone number with international calling code. */ + readonly phone?: Maybe; + /** + * List the quiz questions the user may have completed. + * @deprecated use Quiz from Account instead + */ + readonly quizQuestions: ReadonlyArray; + /** Whether TOTP is enabled for this user. */ + readonly totpEnabled: Scalars['Boolean']['output']; + /** + * Optional immutable user friendly identifier. + * @deprecated will be moved to @Handle in Account and Wallet + */ + readonly username?: Maybe; +}; + + +export type UserContactByUsernameArgs = { + username: Scalars['Username']['input']; +}; + +export type UserContact = { + readonly __typename: 'UserContact'; + /** + * Alias the user can set for this contact. + * Only the user can see the alias attached to their contact. + */ + readonly alias?: Maybe; + readonly id: Scalars['Username']['output']; + /** Paginated list of transactions sent to/from this contact. */ + readonly transactions?: Maybe; + readonly transactionsCount: Scalars['Int']['output']; + /** Actual identifier of the contact. */ + readonly username: Scalars['Username']['output']; +}; + + +export type UserContactTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + +export type UserContactUpdateAliasInput = { + readonly alias: Scalars['ContactAlias']['input']; + readonly username: Scalars['Username']['input']; +}; + +export type UserContactUpdateAliasPayload = { + readonly __typename: 'UserContactUpdateAliasPayload'; + readonly contact?: Maybe; + readonly errors: ReadonlyArray; +}; + +export type UserEmailDeletePayload = { + readonly __typename: 'UserEmailDeletePayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserEmailRegistrationInitiateInput = { + readonly email: Scalars['EmailAddress']['input']; +}; + +export type UserEmailRegistrationInitiatePayload = { + readonly __typename: 'UserEmailRegistrationInitiatePayload'; + readonly emailRegistrationId?: Maybe; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserEmailRegistrationValidateInput = { + readonly code: Scalars['OneTimeAuthCode']['input']; + readonly emailRegistrationId: Scalars['EmailRegistrationId']['input']; +}; + +export type UserEmailRegistrationValidatePayload = { + readonly __typename: 'UserEmailRegistrationValidatePayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserLoginInput = { + readonly code: Scalars['OneTimeAuthCode']['input']; + readonly phone: Scalars['Phone']['input']; +}; + +export type UserLoginUpgradeInput = { + readonly code: Scalars['OneTimeAuthCode']['input']; + readonly phone: Scalars['Phone']['input']; +}; + +export type UserLogoutInput = { + readonly deviceToken: Scalars['String']['input']; +}; + +export type UserPhoneDeletePayload = { + readonly __typename: 'UserPhoneDeletePayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserPhoneRegistrationInitiateInput = { + readonly channel?: InputMaybe; + readonly phone: Scalars['Phone']['input']; +}; + +export type UserPhoneRegistrationValidateInput = { + readonly code: Scalars['OneTimeAuthCode']['input']; + readonly phone: Scalars['Phone']['input']; +}; + +export type UserPhoneRegistrationValidatePayload = { + readonly __typename: 'UserPhoneRegistrationValidatePayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserQuizQuestion = { + readonly __typename: 'UserQuizQuestion'; + readonly completed: Scalars['Boolean']['output']; + readonly question: QuizQuestion; +}; + +export type UserQuizQuestionUpdateCompletedInput = { + readonly id: Scalars['ID']['input']; +}; + +export type UserQuizQuestionUpdateCompletedPayload = { + readonly __typename: 'UserQuizQuestionUpdateCompletedPayload'; + readonly errors: ReadonlyArray; + readonly userQuizQuestion?: Maybe; +}; + +export type UserTotpDeleteInput = { + readonly authToken: Scalars['AuthToken']['input']; +}; + +export type UserTotpDeletePayload = { + readonly __typename: 'UserTotpDeletePayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserTotpRegistrationInitiateInput = { + readonly authToken: Scalars['AuthToken']['input']; +}; + +export type UserTotpRegistrationInitiatePayload = { + readonly __typename: 'UserTotpRegistrationInitiatePayload'; + readonly errors: ReadonlyArray; + readonly totpRegistrationId?: Maybe; + readonly totpSecret?: Maybe; +}; + +export type UserTotpRegistrationValidateInput = { + readonly authToken: Scalars['AuthToken']['input']; + readonly totpCode: Scalars['TotpCode']['input']; + readonly totpRegistrationId: Scalars['TotpRegistrationId']['input']; +}; + +export type UserTotpRegistrationValidatePayload = { + readonly __typename: 'UserTotpRegistrationValidatePayload'; + readonly errors: ReadonlyArray; + readonly me?: Maybe; +}; + +export type UserUpdate = IntraLedgerUpdate | LnUpdate | OnChainUpdate | Price | RealtimePrice; + +export type UserUpdateLanguageInput = { + readonly language: Scalars['Language']['input']; +}; + +export type UserUpdateLanguagePayload = { + readonly __typename: 'UserUpdateLanguagePayload'; + readonly errors: ReadonlyArray; + readonly user?: Maybe; +}; + +export type UserUpdatePhoneInput = { + readonly accountUuid: Scalars['ID']['input']; + readonly phone: Scalars['Phone']['input']; +}; + +export type UserUpdateUsernameInput = { + readonly username: Scalars['Username']['input']; +}; + +export type UserUpdateUsernamePayload = { + readonly __typename: 'UserUpdateUsernamePayload'; + readonly errors: ReadonlyArray; + readonly user?: Maybe; +}; + +/** A generic wallet which stores value in one of our supported currencies. */ +export type Wallet = { + readonly accountId: Scalars['ID']['output']; + readonly balance: Scalars['SignedAmount']['output']; + readonly id: Scalars['ID']['output']; + readonly pendingIncomingBalance: Scalars['SignedAmount']['output']; + /** + * Transactions are ordered anti-chronologically, + * ie: the newest transaction will be first + */ + readonly transactions?: Maybe; + /** + * Transactions are ordered anti-chronologically, + * ie: the newest transaction will be first + */ + readonly transactionsByAddress?: Maybe; + readonly walletCurrency: WalletCurrency; +}; + + +/** A generic wallet which stores value in one of our supported currencies. */ +export type WalletTransactionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + + +/** A generic wallet which stores value in one of our supported currencies. */ +export type WalletTransactionsByAddressArgs = { + address: Scalars['OnChainAddress']['input']; + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; +}; + +export const WalletCurrency = { + Btc: 'BTC', + Usd: 'USD' +} as const; + +export type WalletCurrency = typeof WalletCurrency[keyof typeof WalletCurrency]; +export type LnInvoicePaymentSendMutationVariables = Exact<{ + input: LnInvoicePaymentInput; +}>; + + +export type LnInvoicePaymentSendMutation = { readonly __typename: 'Mutation', readonly lnInvoicePaymentSend: { readonly __typename: 'PaymentSendPayload', readonly status?: PaymentSendResult | null, readonly errors: ReadonlyArray<{ readonly __typename: 'GraphQLApplicationError', readonly message: string }> } }; + +export type GetUsdWalletIdQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetUsdWalletIdQuery = { readonly __typename: 'Query', readonly me?: { readonly __typename: 'User', readonly defaultAccount: { readonly __typename: 'ConsumerAccount', readonly id: string, readonly defaultWalletId: string, readonly wallets: ReadonlyArray<{ readonly __typename: 'BTCWallet', readonly id: string, readonly walletCurrency: WalletCurrency, readonly balance: number } | { readonly __typename: 'UsdWallet', readonly id: string, readonly walletCurrency: WalletCurrency, readonly balance: number }> } } | null }; + +export type OnChainAddressCurrentMutationVariables = Exact<{ + input: OnChainAddressCurrentInput; +}>; + + +export type OnChainAddressCurrentMutation = { readonly __typename: 'Mutation', readonly onChainAddressCurrent: { readonly __typename: 'OnChainAddressPayload', readonly address?: string | null, readonly errors: ReadonlyArray<{ readonly __typename: 'GraphQLApplicationError', readonly message: string }> } }; + + +export const LnInvoicePaymentSendDocument = gql` + mutation lnInvoicePaymentSend($input: LnInvoicePaymentInput!) { + lnInvoicePaymentSend(input: $input) { + errors { + message + } + status + } +} + `; +export type LnInvoicePaymentSendMutationFn = Apollo.MutationFunction; + +/** + * __useLnInvoicePaymentSendMutation__ + * + * To run a mutation, you first call `useLnInvoicePaymentSendMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useLnInvoicePaymentSendMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [lnInvoicePaymentSendMutation, { data, loading, error }] = useLnInvoicePaymentSendMutation({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function useLnInvoicePaymentSendMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(LnInvoicePaymentSendDocument, options); + } +export type LnInvoicePaymentSendMutationHookResult = ReturnType; +export type LnInvoicePaymentSendMutationResult = Apollo.MutationResult; +export type LnInvoicePaymentSendMutationOptions = Apollo.BaseMutationOptions; +export const GetUsdWalletIdDocument = gql` + query getUsdWalletId { + me { + defaultAccount { + id + defaultWalletId + wallets { + id + walletCurrency + balance + } + } + } +} + `; + +/** + * __useGetUsdWalletIdQuery__ + * + * To run a query within a React component, call `useGetUsdWalletIdQuery` and pass it any options that fit your needs. + * When your component renders, `useGetUsdWalletIdQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useGetUsdWalletIdQuery({ + * variables: { + * }, + * }); + */ +export function useGetUsdWalletIdQuery(baseOptions?: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(GetUsdWalletIdDocument, options); + } +export function useGetUsdWalletIdLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(GetUsdWalletIdDocument, options); + } +export type GetUsdWalletIdQueryHookResult = ReturnType; +export type GetUsdWalletIdLazyQueryHookResult = ReturnType; +export type GetUsdWalletIdQueryResult = Apollo.QueryResult; +export const OnChainAddressCurrentDocument = gql` + mutation onChainAddressCurrent($input: OnChainAddressCurrentInput!) { + onChainAddressCurrent(input: $input) { + errors { + message + } + address + } +} + `; +export type OnChainAddressCurrentMutationFn = Apollo.MutationFunction; + +/** + * __useOnChainAddressCurrentMutation__ + * + * To run a mutation, you first call `useOnChainAddressCurrentMutation` within a React component and pass it any options that fit your needs. + * When your component renders, `useOnChainAddressCurrentMutation` returns a tuple that includes: + * - A mutate function that you can call at any time to execute the mutation + * - An object with fields that represent the current status of the mutation's execution + * + * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; + * + * @example + * const [onChainAddressCurrentMutation, { data, loading, error }] = useOnChainAddressCurrentMutation({ + * variables: { + * input: // value for 'input' + * }, + * }); + */ +export function useOnChainAddressCurrentMutation(baseOptions?: Apollo.MutationHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useMutation(OnChainAddressCurrentDocument, options); + } +export type OnChainAddressCurrentMutationHookResult = ReturnType; +export type OnChainAddressCurrentMutationResult = Apollo.MutationResult; +export type OnChainAddressCurrentMutationOptions = Apollo.BaseMutationOptions; \ No newline at end of file diff --git a/apps/boltcard/services/core/index.ts b/apps/boltcard/services/core/index.ts index a09a567fd1f..a0ee99d176d 100644 --- a/apps/boltcard/services/core/index.ts +++ b/apps/boltcard/services/core/index.ts @@ -1,8 +1,26 @@ -import { gql, GraphQLClient } from "graphql-request" +import { ApolloClient, HttpLink, InMemoryCache } from "@apollo/client" +import { registerApolloClient } from "@apollo/experimental-nextjs-app-support/rsc" + +import { loadDevMessages, loadErrorMessages } from "@apollo/client/dev" + import { coreUrl } from "../config" -export const getCoreClient = (auth:string) => new GraphQLClient(coreUrl, { - headers: { - authorization: `Bearer ${auth}`, - }, -}) +export const apollo = (token: string) => + registerApolloClient(() => { + return new ApolloClient({ + cache: new InMemoryCache(), + link: new HttpLink({ + headers: { + authorization: `Bearer ${token}`, + }, + uri: coreUrl, + // you can disable result caching here if you want to + // (this does not work if you are rendering your page with `export const dynamic = "force-static"`) + fetchOptions: { cache: "no-store" }, + }), + }) + }) + +// Adds messages only in a dev environment +loadDevMessages() +loadErrorMessages()