@revibase/lite 0.7.4 → 0.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/consts.ts","../src/utils/errors.ts","../src/provider/utils.ts","../src/provider/main.ts","../src/utils/internal.ts","../src/utils/retry.ts","../src/utils/message/fetchSIgnatureFromTransactionManager.ts","../src/utils/message/index.ts","../src/client/signIn.ts","../src/utils/transactions/solana-send.ts","../src/utils/transactions/utils.ts","../src/utils/transactions/processBundledTransaction.ts","../src/utils/transactions/processSyncTransaction.ts","../src/utils/transactions/processTokenTransfer.ts","../src/utils/transactions/pollTransactionConfirmation.ts","../src/utils/transactions/sendTransaction.ts","../src/client/transactions.ts","../src/client/transfer.ts","../src/server/startRequest.ts","../../../node_modules/.pnpm/@noble+curves@2.0.1/node_modules/@noble/curves/src/utils.ts","../src/server/verifyMessage.ts","../src/server/verifyTransaction.ts","../src/server/processClientAuthCallback.ts","../src/server/processEstimateJitoTipsCallback.ts","../src/server/processSendJitoBundleCallback.ts"],"names":["REVIBASE_AUTH_URL","REVIBASE_RP_ID","REVIBASE_API_ENDPOINT","REVIBASE_LOOKUP_TABLE_ADDRESS","DEFAULT_JITO_BLOCK_ENGINE_SEND_BUNDLE_URL","DEFAULT_JITO_TIPS_URL","RevibaseError","_RevibaseError","message","code","RevibasePopupBlockedError","_RevibasePopupBlockedError","RevibasePopupClosedError","_RevibasePopupClosedError","RevibaseTimeoutError","_RevibaseTimeoutError","RevibaseFlowInProgressError","_RevibaseFlowInProgressError","RevibaseAbortedError","_RevibaseAbortedError","RevibasePopupNotOpenError","_RevibasePopupNotOpenError","RevibaseAuthError","_RevibaseAuthError","RevibaseApiError","_RevibaseApiError","RevibaseEnvironmentError","_RevibaseEnvironmentError","DEFAULT_TIMEOUT","HEARTBEAT_INTERVAL","CONNECT_TIMEOUT","defaultSendJitoBundleCallback","request","res","data","defaultEstimateJitoTipsCallback","defaultClientAuthorizationCallback","createPopUp","url","availW","availH","isMobile","width","height","top","left","screenLeft","screenTop","viewportW","viewportH","features","createProviderFrame","signal","onDismiss","scrollY","previousBodyStyles","lockScroll","unlockScroll","host","shadow","overlay","frameWrapper","iframe","closeBtn","keyHandler","e","dismiss","closed","close","abortHandler","RevibaseProvider","options","rpId","rpcEndpoint","providerOrigin","ui","onClientAuthorizationCallback","onSendJitoBundleCallback","onEstimateJitoTipsCallback","initialize","onConnectedCallback","onSuccessCallback","rid","getBase64Decoder","clientOrigin","popupUrl","detachForwardAbort","flowAbortController","forwardAbort","originalSignal","resolve","reject","params","fail","port","finished","heartbeatInterval","connectTimeoutId","requestTimeoutId","cleanup","onConnect","err","succeed","value","result","event","channel","lastPong","ev","msg","timeoutDuration","createSignInMessageText","input","fields","isNetworkError","withRetry","fn","maxAttempts","initialDelay","maxDelay","lastError","attempt","error","delay","fetchSignatureFromTransactionManager","wsUrl","toWebSocketUrl","pendingApprovalsCallback","signatures","ws","openWebSocket","readWebSocketJsonEvents","httpUrl","u","onAbort","onEvent","settled","onMessage","onError","onClose","finish","parsed","send2FARequestIfNeeded","startRequest","transactionManager","fetchSettings","getSolanaRpc","getSettingsFromIndex","x","UserRole","publicKey","convertMemberKeyToString","userAccountData","fetchUser","getUserAddress","address","signature","signIn","provider","payload","validTill","signAndSendTransaction","instructions","payer","addressesByLookupTableAddress","unitsConsumed","latestBlockHash","tx","pipe","createTransactionMessage","appendTransactionMessageInstructions","setTransactionMessageFeePayerSigner","setTransactionMessageLifetimeUsingBlockhash","compressTransactionMessageUsingAddressLookupTables","priorityFees","getMedianPriorityFees","computeUnits","prependTransactionMessageInstructions","getSetComputeUnitLimitInstruction","getSetComputeUnitPriceInstruction","signTransactionMessageWithSigners","getBase64EncodedWireTransaction","getSignatureFromTransaction","signAndSendBundledTransactions","bundle","encodedBundle","createEncodedBundle","connection","accounts","fees","AccountRole","f","a","b","mid","payerCache","getRandomPayer","cached","response","randomPayer","createTransactionSigner","transactions","getTransactionEncoder","signResponse","sig","getBase58Encoder","getTransactionManagerSigner","args","transactionManagerAddress","transactionMessageBytes","authResponses","onPendingApprovalsCallback","onPendingApprovalsSuccess","abortControllerArg","abortSignal","abortController","ac","txManagerUrl","createTransactionManagerSigner","fetchAdditionalLoopUpTableIfNecessary","fetchAddressesForLookupTables","fetched","fetchMaybeAddressLookupTable","processBundledTransaction","authResponse","settings","additionalSigners","additionalVoters","transactionActionType","signedSigner","getSignedSecp256r1Key","transactionManagerSigner","jitoBundlesTipAmount","getBase64Encoder","prepareTransactionBundle","bundlesWithLookupTables","index","processSyncTransaction","signers","prepareTransactionSync","processTokenTransfer","transactionAddress","amount","getU64Decoder","destination","getAddressDecoder","mint","SYSTEM_PROGRAM_ADDRESS","tokenTransferIntent","nativeTransferIntent","pollTransactionConfirmation","txSig","maxRetries","delayMs","i","confirmation","sendTransaction","confirmTransaction","executeTransaction","signer","settingsIndexWithAddress","prepareTransactionMessage","settingsArgs","transactionPayload","SignedSecp256r1Key","KeyType","transferTokens","tokenProgram","TOKEN_PROGRAM_ADDRESS","getU64Encoder","getAddressEncoder","allowedClientOrigins","privateKey","pKey","convertBase64StringToJWK","CompactSign","createClientAuthorizationStartRequestChallenge","equalBytes","diff","verifyMessage","expectedClientJwk","requireTwoFactorAuthentication","key","importJWK","compactVerify","getDeviceMessageHash","expectedChallenge","createMessageChallenge","verified","verifyAuthenticationResponse","bufferToBase64URLString","convertPubkeyCompressedToCose","delegateTo","fetchUserAccountByFilters","getDomainConfigAddress","verifySignature","getPublicKeyFromAddress","signatureBytes","verifyTransaction","createTransactionChallenge","createClientAuthorizationCompleteRequestChallenge","initialized","ensureInitialize","processClientAuthCallback","processEstimateJitoTipsCallback","priority","processSendJitoBundleCallback","serializedTransactions","jitoUUID","body","backoffMs","sleep","ms","r"],"mappings":"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","file":"index.cjs","sourcesContent":["export const REVIBASE_AUTH_URL = \"https://auth.revibase.com\";\n\nexport const REVIBASE_RP_ID = \"revibase.com\";\n\nexport const REVIBASE_API_ENDPOINT = \"https://api.revibase.com\";\n\nexport const REVIBASE_LOOKUP_TABLE_ADDRESS =\n \"2c1LgZfCun82niPCgfg2cTMZmAiahraTjY4KNb1BSU4Z\";\n\nexport const DEFAULT_JITO_BLOCK_ENGINE_SEND_BUNDLE_URL =\n \"https://mainnet.block-engine.jito.wtf/api/v1/bundles\";\n\nexport const DEFAULT_JITO_TIPS_URL =\n \"https://bundles.jito.wtf/api/v1/bundles/tip_floor\";\n","/** Base error. Use instanceof or .code for handling. */\nexport class RevibaseError extends Error {\n readonly code: string;\n\n constructor(message: string, code: string) {\n super(message);\n this.name = \"RevibaseError\";\n this.code = code;\n Object.setPrototypeOf(this, RevibaseError.prototype);\n }\n}\n\n/** Auth popup blocked. */\nexport class RevibasePopupBlockedError extends RevibaseError {\n constructor(message = \"Popup blocked. Please enable popups.\") {\n super(message, \"POPUP_BLOCKED\");\n this.name = \"RevibasePopupBlockedError\";\n Object.setPrototypeOf(this, RevibasePopupBlockedError.prototype);\n }\n}\n\n/** User closed popup before auth. */\nexport class RevibasePopupClosedError extends RevibaseError {\n constructor(message = \"Popup was closed by the user\") {\n super(message, \"POPUP_CLOSED\");\n this.name = \"RevibasePopupClosedError\";\n Object.setPrototypeOf(this, RevibasePopupClosedError.prototype);\n }\n}\n\n/** Authorization flow timed out. */\nexport class RevibaseTimeoutError extends RevibaseError {\n constructor(message = \"Authentication timed out\") {\n super(message, \"TIMEOUT\");\n this.name = \"RevibaseTimeoutError\";\n Object.setPrototypeOf(this, RevibaseTimeoutError.prototype);\n }\n}\n\n/** Flow already in progress. */\nexport class RevibaseFlowInProgressError extends RevibaseError {\n constructor(message = \"An authorization flow is already in progress\") {\n super(message, \"FLOW_IN_PROGRESS\");\n this.name = \"RevibaseFlowInProgressError\";\n Object.setPrototypeOf(this, RevibaseFlowInProgressError.prototype);\n }\n}\n\n/** Flow aborted (e.g. AbortSignal). */\nexport class RevibaseAbortedError extends RevibaseError {\n constructor(message = \"Aborted\") {\n super(message, \"ABORTED\");\n this.name = \"RevibaseAbortedError\";\n Object.setPrototypeOf(this, RevibaseAbortedError.prototype);\n }\n}\n\n/** Popup not open. */\nexport class RevibasePopupNotOpenError extends RevibaseError {\n constructor(message = \"Popup is not open. Call startRequest first.\") {\n super(message, \"POPUP_NOT_OPEN\");\n this.name = \"RevibasePopupNotOpenError\";\n Object.setPrototypeOf(this, RevibasePopupNotOpenError.prototype);\n }\n}\n\n/** Backend authorization failed. */\nexport class RevibaseAuthError extends RevibaseError {\n constructor(message: string) {\n super(message, \"AUTH_FAILED\");\n this.name = \"RevibaseAuthError\";\n Object.setPrototypeOf(this, RevibaseAuthError.prototype);\n }\n}\n\n/** Backend authorization failed. */\nexport class RevibaseApiError extends RevibaseError {\n constructor(message: string) {\n super(message, \"API_FAILED\");\n this.name = \"RevibaseApiError\";\n Object.setPrototypeOf(this, RevibaseApiError.prototype);\n }\n}\n\n/** Used outside browser. */\nexport class RevibaseEnvironmentError extends RevibaseError {\n constructor(message = \"Provider can only be used in a browser environment\") {\n super(message, \"ENVIRONMENT\");\n this.name = \"RevibaseEnvironmentError\";\n Object.setPrototypeOf(this, RevibaseEnvironmentError.prototype);\n }\n}\n","import type {\n CompleteMessageRequest,\n CompleteTransactionRequest,\n UserInfo,\n} from \"@revibase/core\";\nimport {\n RevibaseApiError,\n RevibaseAuthError,\n type ClientAuthorizationCallback,\n type OnConnectedCallback,\n type OnSuccessCallback,\n} from \"../utils\";\n\nexport const DEFAULT_TIMEOUT = 3 * 60 * 1000;\nexport const HEARTBEAT_INTERVAL = 2000;\nexport const CONNECT_TIMEOUT = 20000;\n\nexport type PopupPortMessage =\n | { type: \"pong\" }\n | {\n type: \"popup-complete\";\n payload: CompleteTransactionRequest | CompleteMessageRequest;\n }\n | { type: \"popup-rejected\"; rid: string }\n | { type: \"popup-error\"; error: string }\n | { type: \"popup-closed\" };\n\nexport type PopupConnectMessage = {\n type: \"popup-connect\";\n rid: string;\n};\n\nexport type Pending = {\n rid: string;\n clientOrigin: string;\n onConnectedCallback: OnConnectedCallback;\n onSuccessCallback: OnSuccessCallback;\n signal?: AbortSignal;\n resolve: (v: { user: UserInfo } | { user: UserInfo; txSig: string }) => void;\n reject: (e: Error) => void;\n};\n\n/** RevibaseProvider options. rpcEndpoint required for executeTransaction. */\nexport type RevibaseProviderOptions = {\n rpcEndpoint: string;\n providerOrigin?: string;\n rpId?: string;\n /** UI mode for same-device authorization. Default: \"iframe\". */\n ui?: {\n mode?: \"popup\" | \"iframe\";\n /**\n * Optional advanced hook to fully control how the provider UI is rendered.\n * Return a target window (popup or iframe.contentWindow) for postMessage transport,\n * and a close() function for cleanup. If you can, also provide isClosed() so the\n * SDK can detect user-dismissal.\n */\n render?: (url: string) => {\n targetWindow: Window;\n close: () => void;\n isClosed?: () => boolean;\n };\n };\n onClientAuthorizationCallback?: ClientAuthorizationCallback;\n onEstimateJitoTipsCallback?: () => Promise<number>;\n onSendJitoBundleCallback?: (request: string[]) => Promise<string>;\n};\n\nexport const defaultSendJitoBundleCallback: (\n serializedTransactions: string[],\n) => Promise<string> = async (request) => {\n const res = await fetch(\"/api/sendJitoBundle\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(request),\n });\n\n const data = await res.json();\n if (!res.ok) {\n throw new RevibaseApiError(\n (data as { error?: string }).error ?? \"Send jito bundle failed\",\n );\n }\n\n return data;\n};\n\nexport const defaultEstimateJitoTipsCallback: () => Promise<number> =\n async () => {\n const res = await fetch(\"/api/estimateJitoTips\");\n\n const data = await res.json();\n if (!res.ok) {\n throw new RevibaseApiError(\n (data as { error?: string }).error ?? \"Estimate jito tips failed\",\n );\n }\n\n return data;\n };\n\nexport const defaultClientAuthorizationCallback: ClientAuthorizationCallback =\n async (request) => {\n const res = await fetch(\"/api/clientAuthorization\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(request),\n });\n\n const data = await res.json();\n if (!res.ok) {\n throw new RevibaseAuthError(\n (data as { error?: string }).error ?? \"Authorization failed\",\n );\n }\n\n return data;\n };\n\nexport function createPopUp(url: string): Window | null {\n if (typeof window === \"undefined\") {\n throw new Error(\"Function can only be called in a browser environment\");\n }\n\n const availW = window.innerWidth || window.screen.availWidth;\n const availH = window.innerHeight || window.screen.availHeight;\n const isMobile = availW <= 768;\n\n let width: number;\n let height: number;\n let top: number;\n let left: number;\n\n if (isMobile) {\n width = availW;\n height = availH;\n top = 0;\n left = 0;\n } else {\n const screenLeft = window.screenLeft ?? window.screenX ?? 0;\n const screenTop = window.screenTop ?? window.screenY ?? 0;\n\n const viewportW =\n window.innerWidth ??\n document.documentElement.clientWidth ??\n window.screen.width;\n\n const viewportH =\n window.innerHeight ??\n document.documentElement.clientHeight ??\n window.screen.height;\n\n width = 500;\n height = 600;\n left = Math.round(screenLeft + (viewportW - width) / 2);\n top = Math.round(screenTop + (viewportH - height) / 2);\n }\n\n const features = [\n \"popup=yes\",\n `width=${width}`,\n `height=${height}`,\n `top=${top}`,\n `left=${left}`,\n \"toolbar=no\",\n \"location=no\",\n \"status=no\",\n \"menubar=no\",\n \"scrollbars=yes\",\n \"resizable=yes\",\n ].join(\",\");\n\n return window.open(url, \"_blank\", features);\n}\nexport interface ProviderFrame {\n iframe: HTMLIFrameElement;\n close: () => void;\n}\n\nexport function createProviderFrame(\n url: string,\n signal?: AbortSignal,\n onDismiss?: () => void,\n): ProviderFrame {\n if (typeof window === \"undefined\") {\n throw new Error(\"Function can only be called in a browser environment\");\n }\n\n const isMobile = window.matchMedia(\"(max-width: 768px)\").matches;\n\n // ----------------------------------------\n // Scroll lock (iOS-safe)\n // ----------------------------------------\n\n const scrollY = window.scrollY;\n\n const previousBodyStyles = {\n overflow: document.body.style.overflow,\n position: document.body.style.position,\n top: document.body.style.top,\n left: document.body.style.left,\n right: document.body.style.right,\n width: document.body.style.width,\n };\n\n const lockScroll = () => {\n document.body.style.overflow = \"hidden\";\n document.body.style.position = \"fixed\";\n document.body.style.top = `-${scrollY}px`;\n document.body.style.left = \"0\";\n document.body.style.right = \"0\";\n document.body.style.width = \"100%\";\n };\n\n const unlockScroll = () => {\n document.body.style.overflow = previousBodyStyles.overflow;\n document.body.style.position = previousBodyStyles.position;\n document.body.style.top = previousBodyStyles.top;\n document.body.style.left = previousBodyStyles.left;\n document.body.style.right = previousBodyStyles.right;\n document.body.style.width = previousBodyStyles.width;\n\n window.scrollTo(0, scrollY);\n };\n\n lockScroll();\n\n // ----------------------------------------\n // Shadow DOM host\n // ----------------------------------------\n\n const host = document.createElement(\"div\");\n\n host.setAttribute(\"data-provider-frame-root\", \"true\");\n\n Object.assign(host.style, {\n position: \"fixed\",\n inset: \"0\",\n zIndex: \"2147483647\",\n pointerEvents: \"none\",\n contain: \"layout style paint\",\n });\n\n document.body.appendChild(host);\n\n const shadow = host.attachShadow({ mode: \"closed\" });\n\n // ----------------------------------------\n // Overlay\n // ----------------------------------------\n\n const overlay = document.createElement(\"div\");\n\n Object.assign(overlay.style, {\n all: \"initial\",\n\n position: \"fixed\",\n inset: \"0\",\n\n display: \"flex\",\n alignItems: isMobile ? \"flex-end\" : \"center\",\n justifyContent: \"center\",\n\n background: \"rgba(0,0,0,0.45)\",\n\n zIndex: \"2147483647\",\n\n pointerEvents: \"auto\",\n\n overscrollBehavior: \"contain\",\n touchAction: \"none\",\n\n WebkitTapHighlightColor: \"transparent\",\n\n paddingBottom: \"env(safe-area-inset-bottom)\",\n\n fontFamily:\n 'Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n });\n\n shadow.appendChild(overlay);\n\n // ----------------------------------------\n // Frame wrapper\n // ----------------------------------------\n\n const frameWrapper = document.createElement(\"div\");\n\n Object.assign(frameWrapper.style, {\n all: \"initial\",\n\n position: \"relative\",\n\n display: \"flex\",\n\n width: isMobile ? \"100%\" : \"500px\",\n\n height: isMobile ? \"90dvh\" : \"600px\",\n\n maxWidth: \"100vw\",\n maxHeight: \"100dvh\",\n\n borderRadius: isMobile ? \"16px 16px 0 0\" : \"16px\",\n\n overflow: \"hidden\",\n\n boxShadow: \"0 24px 80px rgba(0,0,0,0.35)\",\n\n background: \"#fff\",\n\n pointerEvents: \"auto\",\n });\n\n overlay.appendChild(frameWrapper);\n\n // ----------------------------------------\n // iframe\n // ----------------------------------------\n\n const iframe = document.createElement(\"iframe\");\n\n iframe.src = url;\n\n iframe.title = \"Authorization\";\n\n iframe.setAttribute(\"tabindex\", \"0\");\n\n iframe.allow = [`publickey-credentials-get ${new URL(url).origin}`].join(\n \"; \",\n );\n\n iframe.sandbox = [\"allow-scripts\", \"allow-same-origin\"].join(\" \");\n\n Object.assign(iframe.style, {\n width: \"100%\",\n height: \"100%\",\n\n border: \"0\",\n\n background: \"#fff\",\n\n display: \"block\",\n });\n\n frameWrapper.appendChild(iframe);\n\n // ----------------------------------------\n // Close button\n // ----------------------------------------\n\n const closeBtn = document.createElement(\"button\");\n\n closeBtn.type = \"button\";\n\n closeBtn.setAttribute(\"aria-label\", \"Close\");\n\n closeBtn.innerHTML = \"&times;\";\n\n Object.assign(closeBtn.style, {\n all: \"initial\",\n\n position: \"absolute\",\n\n top: isMobile ? \"12px\" : \"14px\",\n right: isMobile ? \"12px\" : \"14px\",\n\n width: \"44px\",\n height: \"44px\",\n\n display: \"grid\",\n placeItems: \"center\",\n\n borderRadius: \"9999px\",\n\n background: \"rgba(255,255,255,0.96)\",\n\n color: \"#111\",\n\n fontSize: \"28px\",\n\n lineHeight: \"1\",\n\n cursor: \"pointer\",\n\n boxShadow: \"0 8px 24px rgba(0,0,0,0.25)\",\n\n zIndex: \"2\",\n\n userSelect: \"none\",\n WebkitUserSelect: \"none\",\n });\n\n frameWrapper.appendChild(closeBtn);\n\n // ----------------------------------------\n // Focus iframe\n // ----------------------------------------\n\n requestAnimationFrame(() => {\n try {\n iframe.focus();\n } catch {}\n });\n\n // ----------------------------------------\n // Escape key\n // ----------------------------------------\n\n const keyHandler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n dismiss();\n }\n };\n\n document.addEventListener(\"keydown\", keyHandler);\n\n // ----------------------------------------\n // Close logic\n // ----------------------------------------\n\n let closed = false;\n\n const close = () => {\n if (closed) return;\n\n closed = true;\n\n try {\n signal?.removeEventListener(\"abort\", abortHandler);\n } catch {}\n\n try {\n document.removeEventListener(\"keydown\", keyHandler);\n } catch {}\n\n try {\n iframe.src = \"about:blank\";\n iframe.removeAttribute(\"src\");\n } catch {}\n\n try {\n host.remove();\n } catch {}\n\n unlockScroll();\n };\n\n // ----------------------------------------\n // Dismiss\n // ----------------------------------------\n\n const dismiss = () => {\n onDismiss?.();\n close();\n };\n\n closeBtn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n dismiss();\n });\n\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) {\n dismiss();\n }\n });\n\n // ----------------------------------------\n // Abort signal\n // ----------------------------------------\n\n const abortHandler = () => {\n dismiss();\n };\n\n if (signal) {\n if (signal.aborted) {\n abortHandler();\n } else {\n signal.addEventListener(\"abort\", abortHandler, {\n once: true,\n });\n }\n }\n\n return {\n iframe,\n close,\n };\n}\n","import type {\n CompleteMessageRequest,\n CompleteTransactionRequest,\n UserInfo,\n} from \"@revibase/core\";\nimport { initialize } from \"@revibase/core\";\nimport { getBase64Decoder } from \"@solana/kit\";\nimport type {\n ClientAuthorizationCallback,\n OnConnectedCallback,\n OnSuccessCallback,\n} from \"../utils\";\nimport { REVIBASE_AUTH_URL, REVIBASE_RP_ID } from \"../utils/consts\";\nimport {\n RevibaseAbortedError,\n RevibaseAuthError,\n RevibaseEnvironmentError,\n RevibaseFlowInProgressError,\n RevibasePopupBlockedError,\n RevibasePopupClosedError,\n RevibaseTimeoutError,\n} from \"../utils/errors\";\nimport {\n CONNECT_TIMEOUT,\n createPopUp,\n createProviderFrame,\n defaultClientAuthorizationCallback,\n defaultEstimateJitoTipsCallback,\n defaultSendJitoBundleCallback,\n HEARTBEAT_INTERVAL,\n type Pending,\n type PopupConnectMessage,\n type PopupPortMessage,\n type RevibaseProviderOptions,\n} from \"./utils\";\n\n/** Provider: popup or channel auth. Default callback: POST /api/clientAuthorization. */\nexport class RevibaseProvider {\n public onClientAuthorizationCallback: ClientAuthorizationCallback;\n public onSendJitoBundleCallback: (request: string[]) => Promise<string>;\n public onEstimateJitoTipsCallback: () => Promise<number>;\n public providerOrigin: string;\n public rpId: string;\n private uiMode: \"popup\" | \"iframe\";\n private render?: NonNullable<RevibaseProviderOptions[\"ui\"]>[\"render\"];\n private popUp: Window | null = null;\n private frame: ReturnType<typeof createProviderFrame> | null = null;\n private rendered: {\n targetWindow: Window;\n close: () => void;\n isClosed?: () => boolean;\n } | null = null;\n\n constructor(options: RevibaseProviderOptions) {\n const {\n rpId,\n rpcEndpoint,\n providerOrigin,\n ui,\n onClientAuthorizationCallback,\n onSendJitoBundleCallback,\n onEstimateJitoTipsCallback,\n } = options;\n\n initialize({ rpcEndpoint });\n this.onClientAuthorizationCallback =\n onClientAuthorizationCallback ?? defaultClientAuthorizationCallback;\n this.onSendJitoBundleCallback =\n onSendJitoBundleCallback ?? defaultSendJitoBundleCallback;\n this.onEstimateJitoTipsCallback =\n onEstimateJitoTipsCallback ?? defaultEstimateJitoTipsCallback;\n this.providerOrigin = providerOrigin ?? REVIBASE_AUTH_URL;\n this.rpId = rpId ?? REVIBASE_RP_ID;\n this.uiMode = ui?.mode ?? \"iframe\";\n this.render = ui?.render;\n }\n\n async sendRequestToPopupProvider({\n onConnectedCallback,\n onSuccessCallback,\n signal,\n }: {\n onConnectedCallback: OnConnectedCallback;\n onSuccessCallback: OnSuccessCallback;\n signal?: AbortSignal;\n }) {\n if (typeof window === \"undefined\") {\n throw new RevibaseEnvironmentError();\n }\n\n if (this.popUp || this.frame || this.rendered) {\n throw new RevibaseFlowInProgressError();\n }\n\n const rid = getBase64Decoder().decode(\n crypto.getRandomValues(new Uint8Array(16)),\n );\n const clientOrigin = window.location.origin;\n const popupUrl = `${this.providerOrigin}?clientOrigin=${encodeURIComponent(clientOrigin)}&rid=${encodeURIComponent(rid)}`;\n\n let detachForwardAbort: (() => void) | undefined;\n\n if (this.render) {\n this.rendered = this.render(popupUrl);\n } else if (this.uiMode === \"iframe\") {\n // We need a controller here so backdrop-dismiss can \"abort\" the flow.\n const flowAbortController = new AbortController();\n const forwardAbort = () => flowAbortController.abort();\n const originalSignal = signal;\n if (originalSignal) {\n if (originalSignal.aborted) {\n flowAbortController.abort();\n } else {\n originalSignal.addEventListener(\"abort\", forwardAbort, {\n once: true,\n });\n detachForwardAbort = () =>\n originalSignal.removeEventListener(\"abort\", forwardAbort);\n }\n }\n\n this.frame = createProviderFrame(\n popupUrl,\n flowAbortController.signal,\n () => flowAbortController.abort(),\n );\n\n // Replace the provided signal so transport + cleanup treat backdrop-dismiss as abort.\n signal = flowAbortController.signal;\n } else {\n this.popUp = createPopUp(popupUrl);\n if (!this.popUp) {\n throw new RevibasePopupBlockedError();\n }\n }\n\n return new Promise<{ user: UserInfo } | { txSig: string; user: UserInfo }>(\n (resolve, reject) => {\n setTimeout(() => {\n this.attachTransport({\n rid,\n clientOrigin,\n onConnectedCallback,\n onSuccessCallback,\n signal,\n resolve,\n reject,\n });\n }, 0);\n },\n ).finally(() => {\n try {\n detachForwardAbort?.();\n } catch {\n // ignore\n }\n });\n }\n\n private attachTransport(params: Pending) {\n const {\n rid,\n clientOrigin,\n onConnectedCallback,\n onSuccessCallback,\n signal,\n reject,\n resolve,\n } = params;\n\n const abortHandler = () => {\n fail(new RevibaseAbortedError());\n };\n signal?.addEventListener(\"abort\", abortHandler, { once: true });\n\n let port: MessagePort | null = null;\n let finished = false;\n\n let heartbeatInterval: ReturnType<typeof setInterval> | null = null;\n let connectTimeoutId: ReturnType<typeof setTimeout> | null = null;\n let requestTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = (): void => {\n // Remove all event listeners\n window.removeEventListener(\"message\", onConnect);\n signal?.removeEventListener(\"abort\", abortHandler);\n\n // Clear all timers\n if (heartbeatInterval) {\n clearInterval(heartbeatInterval);\n heartbeatInterval = null;\n }\n if (connectTimeoutId) {\n clearTimeout(connectTimeoutId);\n connectTimeoutId = null;\n }\n if (requestTimeoutId) {\n clearTimeout(requestTimeoutId);\n requestTimeoutId = null;\n }\n\n // Close message port\n try {\n port?.close();\n } catch (err) {\n // Ignore close errors\n }\n port = null;\n\n // Close UI\n try {\n if (this.popUp && !this.popUp.closed) {\n this.popUp.close();\n }\n } catch (err) {\n // Ignore close errors\n }\n\n try {\n this.frame?.close();\n } catch (err) {\n // Ignore close errors\n }\n\n try {\n this.rendered?.close();\n } catch (err) {\n // Ignore close errors\n }\n\n this.popUp = null;\n this.frame = null;\n this.rendered = null;\n };\n\n const fail = (err: Error): void => {\n if (finished) return;\n finished = true;\n cleanup();\n reject(err);\n };\n\n const succeed = (\n value: CompleteMessageRequest | CompleteTransactionRequest,\n ): void => {\n if (finished) return;\n finished = true;\n cleanup();\n onSuccessCallback(value as any)\n .then((result) => {\n resolve(result);\n })\n .catch((err) => {\n reject(err);\n });\n };\n\n // Connection timeout - handles popup closed before connection\n connectTimeoutId = setTimeout(() => {\n fail(new RevibaseTimeoutError(\"Popup connection timed out after 20s\"));\n }, CONNECT_TIMEOUT);\n\n const onConnect = (event: MessageEvent) => {\n // Prevent race condition - only process once\n if (finished || port) return;\n\n // Validate message origin\n if (event.origin !== this.providerOrigin) return;\n\n const data = event.data as PopupConnectMessage;\n\n // Validate message structure\n if (!data || data.type !== \"popup-connect\") return;\n if (data.rid !== rid) return;\n\n // Clear connection timeout\n if (connectTimeoutId) {\n clearTimeout(connectTimeoutId);\n connectTimeoutId = null;\n }\n\n // Create MessageChannel for bidirectional communication\n const channel = new MessageChannel();\n port = channel.port1;\n port.start();\n\n let lastPong = Date.now();\n\n // Start heartbeat ONLY AFTER connection established\n heartbeatInterval = setInterval(() => {\n if (finished) {\n if (heartbeatInterval) {\n clearInterval(heartbeatInterval);\n heartbeatInterval = null;\n }\n return;\n }\n\n if (this.rendered?.isClosed) {\n if (this.rendered.isClosed()) {\n fail(new RevibasePopupClosedError(\"Provider UI was closed\"));\n return;\n }\n } else if (this.rendered) {\n // If consumer didn't provide isClosed, we can't reliably detect.\n } else if (this.uiMode === \"iframe\") {\n // If the iframe is removed, treat as closed\n if (!this.frame?.iframe.isConnected) {\n fail(new RevibasePopupClosedError(\"Provider iframe was closed\"));\n return;\n }\n } else {\n if (this.popUp?.closed) {\n fail(new RevibasePopupClosedError(\"Popup was closed\"));\n return;\n }\n }\n\n // Check if port is still available\n if (!port) {\n fail(new RevibasePopupClosedError(\"Message channel lost\"));\n return;\n }\n\n const now = Date.now();\n\n // Check if we've lost connection (no pong in 2x heartbeat interval)\n if (now - lastPong > HEARTBEAT_INTERVAL * 2) {\n fail(\n new RevibasePopupClosedError(\n \"Lost connection to popup (heartbeat timeout)\",\n ),\n );\n return;\n }\n\n // Send ping\n try {\n port.postMessage({ type: \"ping\" });\n } catch (err) {\n fail(new RevibasePopupClosedError(\"Failed to send heartbeat\"));\n }\n }, HEARTBEAT_INTERVAL);\n\n // Handle messages from popup\n port.onmessage = (ev: MessageEvent<PopupPortMessage>): void => {\n if (finished) return;\n const msg = ev.data;\n\n switch (msg.type) {\n case \"pong\":\n lastPong = Date.now();\n break;\n\n case \"popup-complete\":\n if (msg.payload) {\n succeed(msg.payload);\n } else {\n fail(new RevibaseAuthError(\"Invalid completion payload\"));\n }\n break;\n\n case \"popup-rejected\":\n fail(new RevibaseAuthError(\"User rejected the operation\"));\n break;\n\n case \"popup-error\":\n fail(new RevibaseAuthError(msg.error || \"Unknown popup error\"));\n break;\n\n case \"popup-closed\":\n fail(new RevibasePopupClosedError(\"User closed popup\"));\n break;\n\n default:\n console.warn(\"Unknown message type from popup:\", msg);\n }\n };\n\n // Handle port errors\n port.onmessageerror = () => {\n fail(new RevibaseAuthError(\"Message deserialization error\"));\n };\n\n // Send init message to popup with port2\n try {\n if (this.rendered) {\n this.rendered.targetWindow.postMessage(\n {\n type: \"popup-init\",\n rid,\n },\n this.providerOrigin,\n [channel.port2],\n );\n } else if (this.uiMode === \"iframe\") {\n this.frame?.iframe.contentWindow?.postMessage(\n {\n type: \"popup-init\",\n rid,\n },\n this.providerOrigin,\n [channel.port2],\n );\n } else {\n this.popUp?.postMessage(\n {\n type: \"popup-init\",\n rid,\n },\n this.providerOrigin,\n [channel.port2],\n );\n }\n } catch (err) {\n fail(new RevibaseAuthError(`Failed to initialize popup: ${err}`));\n return;\n }\n\n // Call the callback to get the request\n onConnectedCallback(rid, clientOrigin)\n .then((result) => {\n // Verify we're still active\n if (finished || !port) {\n return;\n }\n if (this.rendered?.isClosed) {\n if (this.rendered.isClosed()) return;\n } else if (this.uiMode === \"iframe\") {\n if (!this.frame?.iframe.isConnected) return;\n } else {\n if (this.popUp?.closed) return;\n }\n\n // Send the request to popup\n try {\n port.postMessage({\n type: \"popup-start\",\n payload: result,\n });\n } catch (err) {\n fail(\n new RevibaseAuthError(`Failed to send request to popup: ${err}`),\n );\n return;\n }\n\n // Clear any existing request timeout\n if (requestTimeoutId) {\n clearTimeout(requestTimeoutId);\n requestTimeoutId = null;\n }\n\n // Calculate TTL and set new timeout\n const timeoutDuration = Math.max(\n 0,\n result.request.validTill - Date.now(),\n );\n\n requestTimeoutId = setTimeout(() => {\n fail(new RevibaseTimeoutError(\"Request expired\"));\n }, timeoutDuration);\n })\n .catch((err) => {\n fail(err);\n });\n };\n\n // Attach connect listener\n window.addEventListener(\"message\", onConnect);\n }\n}\n","/** Sign-in message text (domain + nonce). */\nexport function createSignInMessageText(input: {\n domain?: string;\n nonce: string;\n}): string {\n const message = input.domain\n ? `${input.domain} wants you to sign in with your account.`\n : \"Sign in with your account.\";\n\n const fields: string[] = [];\n\n if (input.nonce) {\n fields.push(`Nonce: ${input.nonce}`);\n }\n\n return fields.length > 0 ? `${message}\\n\\n${fields.join(\"\\n\")}` : message;\n}\n","/**\n * Checks if an error is network-related (e.g., load failed, network errors)\n */\nfunction isNetworkError(err: Error): boolean {\n const msg = err?.message || \"\";\n return (\n msg === \"Failed to fetch\" ||\n msg.includes(\"Load failed\") ||\n msg.includes(\"NetworkError\") ||\n msg.includes(\"ERR_NETWORK\")\n );\n}\n\n/**\n * Retries a function with exponential backoff on network errors only.\n * @param fn - The async function to retry\n * @param maxAttempts - Maximum number of attempts (default: 3)\n * @param initialDelay - Initial delay in ms (default: 100)\n * @param maxDelay - Maximum delay in ms (default: 5000)\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n maxAttempts = 3,\n initialDelay = 500,\n maxDelay = 5000,\n): Promise<T> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Only retry on network errors\n if (!isNetworkError(lastError)) {\n throw lastError;\n }\n\n // Don't retry on the last attempt\n if (attempt === maxAttempts - 1) {\n break;\n }\n\n // Calculate exponential backoff delay\n const delay = Math.min(initialDelay * Math.pow(2, attempt), maxDelay);\n\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n","import type { CompleteMessageRequest } from \"@revibase/core\";\nimport type { SignInAuthorizationFlowOptions } from \"../types\";\n\nexport async function fetchSignatureFromTransactionManager({\n data,\n url,\n options,\n}: {\n data: {\n publicKey: string;\n payload: CompleteMessageRequest;\n };\n url: string;\n options?: SignInAuthorizationFlowOptions;\n}) {\n const maxAttempts = 10;\n const retryDelayMs = 400;\n const wsUrl = toWebSocketUrl(url);\n const { pendingApprovalsCallback, signal } = options ?? {};\n\n for (let i = 0; i < maxAttempts; i++) {\n if (signal?.aborted) throw Error(\"Aborted\");\n let signatures: string[] | undefined;\n let ws: WebSocket | undefined;\n try {\n ws = await openWebSocket(wsUrl, signal);\n ws.send(JSON.stringify({ type: \"message\", data }));\n await readWebSocketJsonEvents(\n ws,\n (event, data) => {\n if (event === \"error\") {\n const err =\n data &&\n typeof data === \"object\" &&\n typeof (data as { error?: string }).error === \"string\"\n ? (data as { error: string }).error\n : \"Unknown error\";\n const e = new Error(err) as Error & { noRetry: true };\n e.noRetry = true;\n throw e;\n }\n if (event === \"signatures\") {\n signatures = (data as { signatures?: string[] }).signatures;\n return true;\n }\n if (event === \"pending_transaction_approval\") {\n pendingApprovalsCallback?.onPendingApprovalsCallback?.(\n (data as { validTill: number }).validTill,\n );\n } else if (event === \"transaction_approved\") {\n pendingApprovalsCallback?.onPendingApprovalsSuccess?.();\n }\n return false;\n },\n signal,\n );\n } catch (e: unknown) {\n if (e && typeof e === \"object\" && (e as { noRetry?: true }).noRetry) {\n throw new Error(`${(e as Error).message}`);\n }\n if (\n e &&\n typeof e === \"object\" &&\n (e as { name?: string }).name === \"AbortError\"\n )\n throw e;\n } finally {\n try {\n ws?.close();\n } catch {\n /* ignore */\n }\n }\n if (signatures?.length) {\n return signatures[0];\n }\n if (i < maxAttempts - 1)\n await new Promise((resolve) => setTimeout(resolve, retryDelayMs));\n }\n throw new Error(\"Transaction manager: missing signatures\");\n}\n\nfunction toWebSocketUrl(httpUrl: string): string {\n const u = new URL(httpUrl);\n if (u.protocol === \"https:\") u.protocol = \"wss:\";\n else if (u.protocol === \"http:\") u.protocol = \"ws:\";\n return u.toString();\n}\n\nfunction openWebSocket(url: string, signal?: AbortSignal): Promise<WebSocket> {\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(url);\n\n const onAbort = () => {\n try {\n ws.close();\n } catch {\n /* ignore */\n }\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n ws.onopen = () => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve(ws);\n };\n ws.onerror = () => {\n signal?.removeEventListener(\"abort\", onAbort);\n reject(new Error(\"WebSocket connection failed\"));\n };\n });\n}\n\nasync function readWebSocketJsonEvents(\n ws: WebSocket,\n onEvent: (event: string, data: any) => boolean,\n signal?: AbortSignal,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n let settled = false;\n\n const cleanup = () => {\n signal?.removeEventListener(\"abort\", onAbort);\n ws.removeEventListener(\"message\", onMessage);\n ws.removeEventListener(\"error\", onError);\n ws.removeEventListener(\"close\", onClose);\n };\n\n const finish = (fn: () => void) => {\n if (settled) return;\n settled = true;\n cleanup();\n fn();\n };\n\n const onAbort = () => {\n try {\n ws.close();\n } catch {\n /* ignore */\n }\n };\n signal?.addEventListener(\"abort\", onAbort);\n\n const onMessage = (ev: MessageEvent) => {\n if (typeof ev.data !== \"string\") return;\n let parsed: { event?: string; data?: unknown };\n try {\n parsed = JSON.parse(ev.data);\n } catch {\n return;\n }\n const event = typeof parsed.event === \"string\" ? parsed.event : \"message\";\n const data = parsed.data;\n try {\n if (onEvent(event, data)) {\n finish(() => resolve());\n }\n } catch (e) {\n finish(() => reject(e));\n }\n };\n\n const onError = () => {\n finish(() => reject(new Error(\"Transaction manager request failed\")));\n };\n\n const onClose = () => {\n finish(() => resolve());\n };\n\n ws.addEventListener(\"message\", onMessage);\n ws.addEventListener(\"error\", onError);\n ws.addEventListener(\"close\", onClose);\n });\n}\n","import {\n convertMemberKeyToString,\n fetchSettings,\n fetchUser,\n getSettingsFromIndex,\n getSolanaRpc,\n getUserAddress,\n UserRole,\n type CompleteMessageRequest,\n} from \"@revibase/core\";\nimport { address } from \"@solana/kit\";\nimport { withRetry } from \"../retry\";\nimport type { SignInAuthorizationFlowOptions } from \"../types\";\nimport { fetchSignatureFromTransactionManager } from \"./fetchSIgnatureFromTransactionManager\";\n\nexport async function send2FARequestIfNeeded(\n request: CompleteMessageRequest,\n options?: SignInAuthorizationFlowOptions,\n): Promise<{ publicKey: string; signature: string } | null> {\n const { startRequest } = request.data.payload;\n\n if (!startRequest.data.requireTwoFactorAuthentication) {\n return null;\n }\n\n const settingsData = (\n await withRetry(async () =>\n fetchSettings(\n getSolanaRpc(),\n await getSettingsFromIndex(\n request.data.payload.user.settingsIndexWithAddress.index,\n ),\n ),\n )\n ).data;\n const transactionManager = settingsData.members.find(\n (x) => x.role === UserRole.TransactionManager,\n );\n if (!transactionManager) {\n throw new Error(\"No transaction manager found.\");\n }\n const publicKey = convertMemberKeyToString(transactionManager.pubkey);\n const userAccountData = (\n await withRetry(async () =>\n fetchUser(getSolanaRpc(), await getUserAddress(address(publicKey))),\n )\n ).data;\n if (userAccountData.transactionManagerUrl.__option === \"None\") {\n throw new Error(\"No transaction manager url found.\");\n }\n const signature = await fetchSignatureFromTransactionManager({\n data: {\n publicKey,\n payload: request,\n },\n url: userAccountData.transactionManagerUrl.value,\n options,\n });\n\n return { publicKey, signature };\n}\n","import { type CompleteMessageRequest, type UserInfo } from \"@revibase/core\";\nimport { getBase64Decoder } from \"@solana/kit\";\nimport { RevibaseProvider } from \"../provider/main\";\nimport { createSignInMessageText } from \"../utils/internal\";\nimport { send2FARequestIfNeeded } from \"../utils/message\";\nimport { withRetry } from \"../utils/retry\";\nimport type { SignInAuthorizationFlowOptions } from \"../utils/types\";\n\nexport async function signIn(\n provider: RevibaseProvider,\n options?: SignInAuthorizationFlowOptions,\n): Promise<{ user: UserInfo }> {\n const onConnectedCallback = async (rid: string, clientOrigin: string) => {\n const payload = {\n phase: \"start\" as const,\n rid,\n providerOrigin: provider.providerOrigin,\n rpId: provider.rpId,\n data: {\n type: \"message\" as const,\n payload: createSignInMessageText({\n domain: clientOrigin,\n nonce: getBase64Decoder().decode(\n crypto.getRandomValues(new Uint8Array(16)),\n ),\n }),\n requireTwoFactorAuthentication:\n options?.requireTwoFactorAuthentication ?? false,\n },\n clientOrigin,\n };\n\n const { signature, validTill } = await withRetry(() =>\n provider.onClientAuthorizationCallback(payload),\n );\n return { request: { ...payload, rid, validTill }, signature };\n };\n\n const onSuccessCallback = async (\n result: CompleteMessageRequest,\n ): Promise<{ user: UserInfo }> => {\n const transactionManager = await send2FARequestIfNeeded(result, options);\n await provider.onClientAuthorizationCallback(\n !transactionManager\n ? result\n : {\n ...result,\n data: {\n ...result.data,\n payload: { ...result.data.payload, transactionManager },\n },\n },\n );\n return { user: result.data.payload.user };\n };\n\n return provider.sendRequestToPopupProvider({\n onConnectedCallback,\n onSuccessCallback,\n signal: options?.signal,\n });\n}\n","import { getSolanaRpc, type TransactionDetails } from \"@revibase/core\";\nimport {\n getSetComputeUnitLimitInstruction,\n getSetComputeUnitPriceInstruction,\n} from \"@solana-program/compute-budget\";\nimport {\n AccountRole,\n appendTransactionMessageInstructions,\n compressTransactionMessageUsingAddressLookupTables,\n createTransactionMessage,\n getBase64EncodedWireTransaction,\n getSignatureFromTransaction,\n pipe,\n prependTransactionMessageInstructions,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageLifetimeUsingBlockhash,\n signTransactionMessageWithSigners,\n type AccountMeta,\n type Rpc,\n type SolanaRpcApi,\n} from \"@solana/kit\";\nimport type { RevibaseProvider } from \"../../provider\";\nimport { withRetry } from \"../retry\";\n\nexport async function signAndSendTransaction({\n instructions,\n payer,\n addressesByLookupTableAddress,\n unitsConsumed,\n}: TransactionDetails): Promise<string> {\n const latestBlockHash = await withRetry(() =>\n getSolanaRpc().getLatestBlockhash().send(),\n );\n const tx = await pipe(\n createTransactionMessage({ version: 0 }),\n (tx) => appendTransactionMessageInstructions(instructions, tx),\n (tx) => setTransactionMessageFeePayerSigner(payer, tx),\n (tx) =>\n setTransactionMessageLifetimeUsingBlockhash(latestBlockHash.value, tx),\n (tx) =>\n addressesByLookupTableAddress\n ? compressTransactionMessageUsingAddressLookupTables(\n tx,\n addressesByLookupTableAddress,\n )\n : tx,\n async (tx) => {\n const priorityFees = await getMedianPriorityFees(\n getSolanaRpc(),\n tx.instructions.flatMap((x) => x.accounts ?? []),\n );\n\n const computeUnits = Math.ceil((Number(unitsConsumed) ?? 0) * 1.1);\n return prependTransactionMessageInstructions(\n [\n ...(computeUnits > 200_000\n ? [\n getSetComputeUnitLimitInstruction({\n units: computeUnits,\n }),\n ]\n : []),\n ...(priorityFees > 0\n ? [\n getSetComputeUnitPriceInstruction({\n microLamports: priorityFees,\n }),\n ]\n : []),\n ],\n tx,\n );\n },\n async (tx) =>\n await withRetry(async () => signTransactionMessageWithSigners(await tx)),\n );\n await withRetry(() =>\n getSolanaRpc()\n .sendTransaction(getBase64EncodedWireTransaction(tx), {\n skipPreflight: true,\n encoding: \"base64\",\n })\n .send(),\n );\n\n return getSignatureFromTransaction(tx);\n}\n\nexport async function signAndSendBundledTransactions(\n provider: RevibaseProvider,\n bundle: TransactionDetails[],\n): Promise<string> {\n const encodedBundle = await createEncodedBundle(bundle);\n await withRetry(() =>\n provider.onSendJitoBundleCallback(\n encodedBundle.map(getBase64EncodedWireTransaction),\n ),\n );\n return getSignatureFromTransaction(encodedBundle[encodedBundle.length - 1]);\n}\n\nasync function createEncodedBundle(bundle: TransactionDetails[]) {\n const latestBlockHash = (\n await withRetry(() => getSolanaRpc().getLatestBlockhash().send())\n ).value;\n return await Promise.all(\n bundle.map(async (x) => {\n const tx = await pipe(\n createTransactionMessage({ version: 0 }),\n (tx) => appendTransactionMessageInstructions(x.instructions, tx),\n (tx) => setTransactionMessageFeePayerSigner(x.payer, tx),\n (tx) =>\n setTransactionMessageLifetimeUsingBlockhash(latestBlockHash, tx),\n (tx) =>\n x.addressesByLookupTableAddress\n ? compressTransactionMessageUsingAddressLookupTables(\n tx,\n x.addressesByLookupTableAddress,\n )\n : tx,\n (tx) => {\n const computeUnits = Math.ceil(Number(x.unitsConsumed ?? 0) * 1.1);\n return computeUnits > 200_000\n ? prependTransactionMessageInstructions(\n [\n getSetComputeUnitLimitInstruction({\n units: computeUnits,\n }),\n ],\n tx,\n )\n : tx;\n },\n async (tx) =>\n await withRetry(() => signTransactionMessageWithSigners(tx)),\n );\n return tx;\n }),\n );\n}\n\nexport async function getMedianPriorityFees(\n connection: Rpc<SolanaRpcApi>,\n accounts: AccountMeta[],\n): Promise<number> {\n const recentFees = await withRetry(() =>\n connection\n .getRecentPrioritizationFees(\n accounts\n .filter(\n (x) =>\n x.role === AccountRole.WRITABLE ||\n x.role === AccountRole.WRITABLE_SIGNER,\n )\n .map((x) => x.address),\n )\n .send(),\n );\n const fees = recentFees.map((f) => Number(f.prioritizationFee));\n fees.sort((a, b) => a - b);\n const mid = Math.floor(fees.length / 2);\n\n if (fees.length % 2 === 0) {\n return Math.round((fees[mid - 1] + fees[mid]) / 2);\n } else {\n return fees[mid];\n }\n}\n","import {\n createTransactionManagerSigner,\n fetchUser,\n getSolanaRpc,\n getUserAddress,\n type TransactionAuthDetails,\n} from \"@revibase/core\";\nimport {\n address,\n fetchAddressesForLookupTables,\n getBase58Encoder,\n getBase64Decoder,\n getTransactionEncoder,\n type Address,\n type AddressesByLookupTableAddress,\n type ReadonlyUint8Array,\n type SignatureBytes,\n type TransactionSigner,\n} from \"@solana/kit\";\nimport { fetchMaybeAddressLookupTable } from \"@solana-program/address-lookup-table\";\nimport {\n REVIBASE_API_ENDPOINT,\n REVIBASE_LOOKUP_TABLE_ADDRESS,\n} from \"../consts\";\nimport { withRetry } from \"../retry\";\n\nconst payerCache = new Map<string, TransactionSigner>();\n\nexport async function getRandomPayer(): Promise<TransactionSigner> {\n const cached = payerCache.get(REVIBASE_API_ENDPOINT);\n if (cached) return cached;\n\n const response = await withRetry(() =>\n fetch(`${REVIBASE_API_ENDPOINT}/getRandomPayer`),\n );\n\n if (!response.ok) {\n throw new Error(`Failed to get random payer: ${response.statusText}`);\n }\n\n const { randomPayer } = (await response.json()) as { randomPayer: string };\n const payer = createTransactionSigner(\n address(randomPayer),\n `${REVIBASE_API_ENDPOINT}/sign`,\n );\n payerCache.set(REVIBASE_API_ENDPOINT, payer);\n return payer;\n}\n\nfunction createTransactionSigner(\n publicKey: Address,\n url: string,\n): TransactionSigner {\n const payer: TransactionSigner = {\n address: publicKey,\n async signTransactions(transactions) {\n const payload = {\n publicKey: publicKey,\n transactions: transactions.map((tx) =>\n getBase64Decoder().decode(getTransactionEncoder().encode(tx)),\n ),\n };\n\n const signResponse = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n if (!signResponse.ok) {\n throw new Error(\n `Failed to sign transactions: ${signResponse.statusText}`,\n );\n }\n\n const data = (await signResponse.json()) as\n | { signatures: string[] }\n | { error: string };\n\n if (\"error\" in data) {\n throw new Error(data.error);\n }\n\n return data.signatures.map((sig) => ({\n [publicKey]: getBase58Encoder().encode(sig) as SignatureBytes,\n }));\n },\n };\n\n return payer;\n}\n\nexport async function getTransactionManagerSigner(args: {\n transactionManagerAddress: Address | undefined;\n authResponses?: TransactionAuthDetails[];\n transactionMessageBytes?: ReadonlyUint8Array;\n onPendingApprovalsCallback?: (validTill: number) => void;\n onPendingApprovalsSuccess?: () => void;\n abortController?: AbortController;\n abortSignal?: AbortSignal;\n}) {\n const {\n transactionManagerAddress,\n transactionMessageBytes,\n authResponses,\n onPendingApprovalsCallback,\n onPendingApprovalsSuccess,\n abortController: abortControllerArg,\n abortSignal,\n } = args;\n\n let abortController = abortControllerArg;\n if (abortSignal && !abortController) {\n const ac = new AbortController();\n if (abortSignal.aborted) {\n ac.abort();\n } else {\n abortSignal.addEventListener(\"abort\", () => ac.abort(), { once: true });\n }\n abortController = ac;\n }\n let url;\n if (transactionManagerAddress) {\n const txManagerUrl = (\n await withRetry(async () =>\n fetchUser(\n getSolanaRpc(),\n await getUserAddress(transactionManagerAddress),\n ),\n )\n ).data.transactionManagerUrl;\n url = txManagerUrl.__option === \"Some\" ? txManagerUrl.value : null;\n }\n\n const transactionManagerSigner =\n transactionManagerAddress && url\n ? createTransactionManagerSigner({\n address: transactionManagerAddress,\n url,\n authResponses,\n transactionMessageBytes,\n onPendingApprovalsCallback,\n onPendingApprovalsSuccess,\n abortController,\n })\n : null;\n\n return transactionManagerSigner;\n}\n\nexport async function fetchAdditionalLoopUpTableIfNecessary(\n addressesByLookupTableAddress?: AddressesByLookupTableAddress,\n) {\n if (!addressesByLookupTableAddress) {\n return await withRetry(() =>\n fetchAddressesForLookupTables(\n [address(REVIBASE_LOOKUP_TABLE_ADDRESS)],\n getSolanaRpc(),\n ),\n );\n }\n\n if (REVIBASE_LOOKUP_TABLE_ADDRESS in addressesByLookupTableAddress) {\n return addressesByLookupTableAddress;\n }\n\n const fetched = await withRetry(() =>\n fetchMaybeAddressLookupTable(\n getSolanaRpc(),\n address(REVIBASE_LOOKUP_TABLE_ADDRESS),\n ),\n );\n\n if (fetched.exists) {\n return {\n ...addressesByLookupTableAddress,\n [fetched.address]: fetched.data.addresses,\n };\n }\n\n return addressesByLookupTableAddress;\n}\n","import {\n getSignedSecp256r1Key,\n prepareTransactionBundle,\n SignedSecp256r1Key,\n type TransactionAuthenticationResponse,\n} from \"@revibase/core\";\nimport {\n address,\n getBase64Encoder,\n type Address,\n type TransactionSigner,\n} from \"@solana/kit\";\nimport type { RevibaseProvider } from \"../../provider\";\nimport { withRetry } from \"../retry\";\nimport type { TransactionAuthorizationFlowOptions } from \"../types\";\nimport { signAndSendBundledTransactions } from \"./solana-send\";\nimport {\n fetchAdditionalLoopUpTableIfNecessary,\n getTransactionManagerSigner,\n} from \"./utils\";\n\nexport async function processBundledTransaction(\n provider: RevibaseProvider,\n params: {\n authResponse: TransactionAuthenticationResponse;\n settings: Address;\n payer: TransactionSigner;\n additionalVoters?: (TransactionSigner | SignedSecp256r1Key)[];\n additionalSigners?: TransactionSigner[];\n options?: TransactionAuthorizationFlowOptions;\n },\n): Promise<string> {\n const {\n authResponse,\n settings,\n additionalSigners,\n additionalVoters,\n options,\n payer,\n } = params;\n const { startRequest, transactionManagerAddress, unitsConsumed } =\n authResponse;\n if (startRequest.data.type !== \"transaction\")\n throw new Error(\"Invalid request type.\");\n\n const { transactionActionType, transactionMessageBytes } =\n startRequest.data.payload;\n\n if (\n transactionActionType !== \"execute\" &&\n transactionActionType !== \"create_with_preauthorized_execution\"\n ) {\n throw new Error(\n \"Transaction action type must be 'execute' or 'create_with_preauthorized_execution'\",\n );\n }\n\n const signedSigner = await getSignedSecp256r1Key(authResponse);\n\n const [transactionManagerSigner, jitoBundlesTipAmount] = await Promise.all([\n getTransactionManagerSigner({\n authResponses: [authResponse],\n transactionManagerAddress: transactionManagerAddress\n ? address(transactionManagerAddress)\n : undefined,\n transactionMessageBytes: getBase64Encoder().encode(\n transactionMessageBytes,\n ),\n onPendingApprovalsCallback:\n options?.pendingApprovalsCallback?.onPendingApprovalsCallback,\n onPendingApprovalsSuccess:\n options?.pendingApprovalsCallback?.onPendingApprovalsSuccess,\n abortSignal: options?.signal,\n }),\n withRetry(() => provider.onEstimateJitoTipsCallback()),\n ]);\n\n const bundle = await prepareTransactionBundle({\n settings,\n transactionMessageBytes: getBase64Encoder().encode(\n transactionMessageBytes,\n ) as Uint8Array<ArrayBuffer>,\n creator: transactionManagerSigner ?? signedSigner,\n executor: transactionManagerSigner ? signedSigner : undefined,\n jitoBundlesTipAmount,\n additionalVoters,\n additionalSigners,\n payer,\n });\n\n const bundlesWithLookupTables = await Promise.all(\n bundle.map(async (x, index) => ({\n ...x,\n addressesByLookupTableAddress:\n await fetchAdditionalLoopUpTableIfNecessary(\n x.addressesByLookupTableAddress,\n ),\n unitsConsumed: unitsConsumed?.[index],\n })),\n );\n\n return signAndSendBundledTransactions(provider, bundlesWithLookupTables);\n}\n","import {\n getSignedSecp256r1Key,\n prepareTransactionSync,\n SignedSecp256r1Key,\n type TransactionAuthenticationResponse,\n} from \"@revibase/core\";\nimport {\n address,\n getBase64Encoder,\n type Address,\n type TransactionSigner,\n} from \"@solana/kit\";\nimport type { TransactionAuthorizationFlowOptions } from \"../types\";\nimport { signAndSendTransaction } from \"./solana-send\";\nimport {\n fetchAdditionalLoopUpTableIfNecessary,\n getTransactionManagerSigner,\n} from \"./utils\";\n\nexport async function processSyncTransaction(params: {\n authResponse: TransactionAuthenticationResponse;\n settings: Address;\n payer: TransactionSigner;\n additionalVoters?: (TransactionSigner | SignedSecp256r1Key)[];\n additionalSigners?: TransactionSigner[];\n options?: TransactionAuthorizationFlowOptions;\n}): Promise<string> {\n const {\n authResponse,\n settings,\n payer,\n additionalSigners,\n additionalVoters,\n options,\n } = params;\n const { startRequest, transactionManagerAddress, unitsConsumed } =\n authResponse;\n if (startRequest.data.type !== \"transaction\")\n throw new Error(\"Invalid request type.\");\n\n const { transactionActionType, transactionMessageBytes } =\n startRequest.data.payload;\n\n if (transactionActionType !== \"sync\") {\n throw new Error(\"Transaction action type must be 'sync'\");\n }\n\n const signedSigner = await getSignedSecp256r1Key(authResponse);\n\n const transactionManagerSigner = await getTransactionManagerSigner({\n authResponses: [authResponse],\n transactionManagerAddress: transactionManagerAddress\n ? address(transactionManagerAddress)\n : undefined,\n transactionMessageBytes: getBase64Encoder().encode(transactionMessageBytes),\n onPendingApprovalsCallback:\n options?.pendingApprovalsCallback?.onPendingApprovalsCallback,\n onPendingApprovalsSuccess:\n options?.pendingApprovalsCallback?.onPendingApprovalsSuccess,\n abortSignal: options?.signal,\n });\n\n const signers = transactionManagerSigner\n ? [signedSigner, transactionManagerSigner, ...(additionalVoters ?? [])]\n : [signedSigner, ...(additionalVoters ?? [])];\n\n const { instructions, addressesByLookupTableAddress } =\n await prepareTransactionSync({\n signers,\n payer,\n transactionMessageBytes: getBase64Encoder().encode(\n transactionMessageBytes,\n ),\n settings,\n additionalSigners,\n });\n\n return signAndSendTransaction({\n instructions,\n payer,\n addressesByLookupTableAddress: await fetchAdditionalLoopUpTableIfNecessary(\n addressesByLookupTableAddress,\n ),\n unitsConsumed: unitsConsumed?.[0],\n });\n}\n","import {\n getSignedSecp256r1Key,\n nativeTransferIntent,\n SignedSecp256r1Key,\n tokenTransferIntent,\n type TransactionAuthenticationResponse,\n} from \"@revibase/core\";\nimport { SYSTEM_PROGRAM_ADDRESS } from \"@solana-program/system\";\nimport {\n address,\n getAddressDecoder,\n getBase64Encoder,\n getU64Decoder,\n type Address,\n type TransactionSigner,\n} from \"@solana/kit\";\nimport type { TransactionAuthorizationFlowOptions } from \"../types\";\nimport { signAndSendTransaction } from \"./solana-send\";\nimport {\n fetchAdditionalLoopUpTableIfNecessary,\n getTransactionManagerSigner,\n} from \"./utils\";\n\nexport async function processTokenTransfer(params: {\n authResponse: TransactionAuthenticationResponse;\n settings: Address;\n additionalVoters?: (TransactionSigner | SignedSecp256r1Key)[];\n payer: TransactionSigner;\n options?: TransactionAuthorizationFlowOptions;\n}): Promise<string> {\n const { authResponse, settings, options, payer, additionalVoters } = params;\n const { startRequest, transactionManagerAddress, unitsConsumed } =\n authResponse;\n if (startRequest.data.type !== \"transaction\")\n throw new Error(\"Invalid request type.\");\n\n const { transactionActionType, transactionAddress, transactionMessageBytes } =\n startRequest.data.payload;\n\n if (transactionActionType !== \"transfer_intent\") {\n throw new Error(\"Transaction action type must be 'transfer_intent'\");\n }\n\n const message = getBase64Encoder().encode(transactionMessageBytes);\n const amount = getU64Decoder().decode(message.slice(0, 8));\n const destination = getAddressDecoder().decode(message.slice(8, 40));\n const mint = getAddressDecoder().decode(message.slice(40, 72));\n\n const signedSigner = await getSignedSecp256r1Key(authResponse);\n\n const transactionManagerSigner = await getTransactionManagerSigner({\n authResponses: [authResponse],\n transactionManagerAddress: transactionManagerAddress\n ? address(transactionManagerAddress)\n : undefined,\n transactionMessageBytes: getBase64Encoder().encode(transactionMessageBytes),\n onPendingApprovalsCallback:\n options?.pendingApprovalsCallback?.onPendingApprovalsCallback,\n onPendingApprovalsSuccess:\n options?.pendingApprovalsCallback?.onPendingApprovalsSuccess,\n abortSignal: options?.signal,\n });\n\n const signers = transactionManagerSigner\n ? [signedSigner, transactionManagerSigner, ...(additionalVoters ?? [])]\n : [signedSigner, ...(additionalVoters ?? [])];\n\n const instructions =\n mint !== SYSTEM_PROGRAM_ADDRESS\n ? await tokenTransferIntent({\n payer,\n settings,\n amount,\n signers,\n destination,\n mint,\n tokenProgram: address(transactionAddress),\n })\n : await nativeTransferIntent({\n settings,\n amount,\n signers,\n destination,\n });\n\n return signAndSendTransaction({\n instructions,\n payer,\n addressesByLookupTableAddress:\n await fetchAdditionalLoopUpTableIfNecessary(undefined),\n unitsConsumed: unitsConsumed?.[0],\n });\n}\n","import { getSolanaRpc } from \"@revibase/core\";\nimport type { Signature } from \"@solana/kit\";\nimport { withRetry } from \"../retry\";\n\nexport async function pollTransactionConfirmation(\n txSig: string,\n maxRetries = 30,\n delayMs = 2000,\n): Promise<string> {\n for (let i = 0; i < maxRetries; i++) {\n const status = await withRetry(() =>\n getSolanaRpc()\n .getSignatureStatuses([txSig as Signature])\n .send(),\n );\n\n const confirmation = status.value[0];\n\n if (\n confirmation?.confirmationStatus === \"confirmed\" ||\n confirmation?.confirmationStatus === \"finalized\"\n ) {\n return txSig;\n }\n\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n\n throw new Error(\"Transaction confirmation timeout\");\n}\n","import type { SignedSecp256r1Key } from \"@revibase/core\";\nimport {\n getSettingsFromIndex,\n type CompleteTransactionRequest,\n} from \"@revibase/core\";\nimport { address, type TransactionSigner } from \"@solana/kit\";\nimport type { RevibaseProvider } from \"../../provider\";\nimport type { TransactionAuthorizationFlowOptions } from \"../../utils\";\nimport { processBundledTransaction } from \"../../utils/transactions/processBundledTransaction\";\nimport { processSyncTransaction } from \"../../utils/transactions/processSyncTransaction\";\nimport { processTokenTransfer } from \"../../utils/transactions/processTokenTransfer\";\nimport { pollTransactionConfirmation } from \"./pollTransactionConfirmation\";\n\nexport async function sendTransaction(\n provider: RevibaseProvider,\n params: {\n request: CompleteTransactionRequest;\n additionalVoters?: (TransactionSigner | SignedSecp256r1Key)[];\n additionalSigners?: TransactionSigner[];\n options?: TransactionAuthorizationFlowOptions;\n payer: TransactionSigner;\n },\n): Promise<string> {\n const { request, additionalSigners, options, payer, additionalVoters } =\n params;\n const { confirmTransaction = true } = options ?? {};\n\n const settings =\n request.data.type === \"transaction\" &&\n request.data.payload.startRequest.data.payload.transactionActionType !==\n \"transfer_intent\"\n ? request.data.payload.startRequest.data.payload.transactionAddress\n : request.data.payload.user.settingsIndexWithAddress?.index\n ? await getSettingsFromIndex(\n request.data.payload.user.settingsIndexWithAddress.index,\n )\n : null;\n\n if (!settings) {\n throw Error(\"User is not delegated to any wallet\");\n }\n let txSig: string;\n switch (\n request.data.payload.startRequest.data.payload.transactionActionType\n ) {\n case \"transfer_intent\":\n txSig = await processTokenTransfer({\n authResponse: request.data.payload,\n settings: address(settings),\n options,\n payer,\n additionalVoters,\n });\n break;\n case \"execute\":\n case \"create_with_preauthorized_execution\":\n txSig = await processBundledTransaction(provider, {\n authResponse: request.data.payload,\n settings: address(settings),\n additionalSigners,\n additionalVoters,\n options,\n payer,\n });\n break;\n case \"sync\":\n txSig = await processSyncTransaction({\n authResponse: request.data.payload,\n settings: address(settings),\n additionalSigners,\n additionalVoters,\n options,\n payer,\n });\n break;\n default:\n throw Error(\"Invalid Transaction Action Type for send tx payload.\");\n }\n\n if (confirmTransaction) {\n await pollTransactionConfirmation(txSig);\n }\n\n return txSig;\n}\n","import {\n convertMemberKeyToString,\n fetchSettings,\n getSettingsFromIndex,\n getSolanaRpc,\n KeyType,\n prepareTransactionMessage,\n SignedSecp256r1Key,\n UserRole,\n type CompleteTransactionRequest,\n type TransactionPayloadWithBase64MessageBytes,\n type UserInfo,\n} from \"@revibase/core\";\nimport {\n address,\n getBase64Decoder,\n type AddressesByLookupTableAddress,\n type Instruction,\n type TransactionSigner,\n} from \"@solana/kit\";\nimport type { RevibaseProvider } from \"../provider/main\";\nimport { withRetry } from \"../utils/retry\";\nimport { sendTransaction } from \"../utils/transactions\";\nimport { getRandomPayer } from \"../utils/transactions/utils\";\nimport type { TransactionAuthorizationFlowOptions } from \"../utils/types\";\n\n/** Custom transaction. Action from wallet settings (TransactionManager). Provider needs rpcEndpoint. Options: signal?, channelId?. */\nexport async function executeTransaction(\n provider: RevibaseProvider,\n args: {\n instructions: Instruction[];\n signer: UserInfo;\n payer?: TransactionSigner;\n settingsIndexWithAddress?: {\n index: number | bigint;\n };\n additionalSigners?: TransactionSigner[];\n additionalVoters?: (TransactionSigner | SignedSecp256r1Key)[];\n addressesByLookupTableAddress?: AddressesByLookupTableAddress;\n },\n options?: TransactionAuthorizationFlowOptions,\n): Promise<{ txSig?: string; user: UserInfo }> {\n const {\n instructions,\n signer,\n addressesByLookupTableAddress,\n settingsIndexWithAddress,\n additionalSigners,\n additionalVoters,\n payer,\n } = args;\n\n const onConnectedCallback = async (rid: string, clientOrigin: string) => {\n const transactionMessageBytes = prepareTransactionMessage({\n payer: address(signer.walletAddress),\n instructions,\n addressesByLookupTableAddress,\n });\n const settingsArgs =\n settingsIndexWithAddress ?? signer.settingsIndexWithAddress;\n const settings = await getSettingsFromIndex(settingsArgs.index);\n const settingsData = (\n await withRetry(() => fetchSettings(getSolanaRpc(), settings))\n ).data;\n const transactionManagerAddress = settingsData.members.find(\n (x) => x.role === UserRole.TransactionManager,\n )?.pubkey;\n const transactionPayload: TransactionPayloadWithBase64MessageBytes = {\n transactionMessageBytes: getBase64Decoder().decode(\n transactionMessageBytes,\n ),\n transactionAddress: settings,\n transactionActionType: transactionManagerAddress\n ? \"execute\"\n : \"create_with_preauthorized_execution\",\n };\n\n const payload = {\n phase: \"start\" as const,\n rid,\n providerOrigin: provider.providerOrigin,\n rpId: provider.rpId,\n data: {\n type: \"transaction\" as const,\n payload: transactionPayload,\n },\n clientOrigin,\n signer: signer.publicKey,\n };\n const { signature, validTill } = await withRetry(() =>\n provider.onClientAuthorizationCallback(payload),\n );\n return {\n request: { ...payload, rid, validTill },\n signature,\n transactionManagerAddress: transactionManagerAddress\n ? convertMemberKeyToString(transactionManagerAddress)\n : undefined,\n additionalSigners: additionalSigners?.map((x) => x.address.toString()),\n additionalVoters: additionalVoters?.map((x) =>\n x instanceof SignedSecp256r1Key\n ? { keyType: KeyType.Secp256r1, publicKey: x.toString() }\n : { keyType: KeyType.Ed25519, publicKey: x.address.toString() },\n ),\n payer: (payer ?? (await getRandomPayer())).address.toString(),\n };\n };\n\n const onSuccessCallback = async (\n result: CompleteTransactionRequest,\n ): Promise<{ txSig: string; user: UserInfo }> => {\n const { signature } = await provider.onClientAuthorizationCallback(result);\n\n const txSig = await sendTransaction(provider, {\n request: {\n ...result,\n data: {\n ...result.data,\n payload: {\n ...result.data.payload,\n client: { ...result.data.payload.client, jws: signature },\n },\n },\n },\n options,\n additionalSigners,\n additionalVoters,\n payer: payer ?? (await getRandomPayer()),\n });\n\n return { user: result.data.payload.user, txSig };\n };\n\n return provider.sendRequestToPopupProvider({\n onConnectedCallback,\n onSuccessCallback,\n signal: options?.signal,\n });\n}\n","import {\n KeyType,\n SignedSecp256r1Key,\n type CompleteTransactionRequest,\n type TransactionPayloadWithBase64MessageBytes,\n type UserInfo,\n} from \"@revibase/core\";\nimport { SYSTEM_PROGRAM_ADDRESS } from \"@solana-program/system\";\nimport { TOKEN_PROGRAM_ADDRESS } from \"@solana-program/token\";\nimport {\n address,\n getAddressEncoder,\n getBase64Decoder,\n getU64Encoder,\n type TransactionSigner,\n} from \"@solana/kit\";\nimport type { RevibaseProvider } from \"../provider/main\";\nimport { withRetry } from \"../utils/retry\";\nimport { sendTransaction } from \"../utils/transactions/sendTransaction\";\nimport { getRandomPayer } from \"../utils/transactions/utils\";\nimport type { TransactionAuthorizationFlowOptions } from \"../utils/types\";\n\n/** Transfers SOL or SPL (set mint for SPL). amount &gt; 0, destination required */\nexport async function transferTokens(\n provider: RevibaseProvider,\n args: {\n amount: number | bigint;\n destination: string;\n signer?: UserInfo;\n mint?: string;\n tokenProgram?: string;\n payer?: TransactionSigner;\n additionalVoters?: (TransactionSigner | SignedSecp256r1Key)[];\n },\n options?: TransactionAuthorizationFlowOptions,\n): Promise<{ txSig?: string; user: UserInfo }> {\n if (args.amount <= 0) {\n throw new Error(\"Transfer amount must be greater than 0\");\n }\n\n if (!args.destination || typeof args.destination !== \"string\") {\n throw new Error(\"Destination address is required\");\n }\n\n const {\n mint,\n tokenProgram = TOKEN_PROGRAM_ADDRESS,\n amount,\n destination,\n signer,\n payer,\n additionalVoters,\n } = args;\n\n const onConnectedCallback = async (rid: string, clientOrigin: string) => {\n const transactionPayload: TransactionPayloadWithBase64MessageBytes = {\n transactionActionType: \"transfer_intent\",\n transactionAddress: mint ? tokenProgram : SYSTEM_PROGRAM_ADDRESS,\n transactionMessageBytes: getBase64Decoder().decode(\n new Uint8Array([\n ...getU64Encoder().encode(amount),\n ...getAddressEncoder().encode(address(destination)),\n ...getAddressEncoder().encode(\n address(mint ?? SYSTEM_PROGRAM_ADDRESS),\n ),\n ]),\n ),\n };\n\n const payload = {\n phase: \"start\" as const,\n rid,\n providerOrigin: provider.providerOrigin,\n rpId: provider.rpId,\n data: {\n type: \"transaction\" as const,\n payload: transactionPayload,\n },\n clientOrigin,\n signer: signer?.publicKey,\n };\n const { signature, validTill } = await withRetry(() =>\n provider.onClientAuthorizationCallback(payload),\n );\n return {\n request: { ...payload, rid, validTill },\n signature,\n additionalVoters: additionalVoters?.map((x) =>\n x instanceof SignedSecp256r1Key\n ? { keyType: KeyType.Secp256r1, publicKey: x.toString() }\n : { keyType: KeyType.Ed25519, publicKey: x.address.toString() },\n ),\n payer: (payer ?? (await getRandomPayer())).address.toString(),\n };\n };\n\n const onSuccessCallback = async (\n result: CompleteTransactionRequest,\n ): Promise<{ txSig: string; user: UserInfo }> => {\n const { signature } = await provider.onClientAuthorizationCallback(result);\n const txSig = await sendTransaction(provider, {\n request: {\n ...result,\n data: {\n ...result.data,\n payload: {\n ...result.data.payload,\n client: { ...result.data.payload.client, jws: signature },\n },\n },\n },\n options,\n additionalVoters,\n payer: payer ?? (await getRandomPayer()),\n });\n\n return { txSig, user: result.data.payload.user };\n };\n\n return provider.sendRequestToPopupProvider({\n onConnectedCallback,\n onSuccessCallback,\n signal: options?.signal,\n });\n}\n","import {\n convertBase64StringToJWK,\n createClientAuthorizationStartRequestChallenge,\n type StartMessageRequest,\n type StartTransactionRequest,\n} from \"@revibase/core\";\nimport { CompactSign } from \"jose\";\nimport { DEFAULT_TIMEOUT } from \"../provider/utils\";\n\nexport async function startRequest(\n request:\n | Omit<StartMessageRequest, \"validTill\">\n | Omit<StartTransactionRequest, \"validTill\">,\n allowedClientOrigins: string[],\n privateKey: string,\n) {\n if (!allowedClientOrigins.includes(request.clientOrigin)) {\n throw new Error(\"Invalid client origin\");\n }\n const validTill = Date.now() + DEFAULT_TIMEOUT;\n const pKey = convertBase64StringToJWK(privateKey);\n if (!pKey.alg) throw new Error(\"Property alg in JWK is missing.\");\n const signature = await new CompactSign(\n createClientAuthorizationStartRequestChallenge({\n ...request,\n validTill,\n }),\n )\n .setProtectedHeader({\n alg: pKey.alg,\n })\n .sign(pKey);\n return { ok: true, signature, validTill };\n}\n","/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n abytes as abytes_,\n anumber,\n bytesToHex as bytesToHex_,\n concatBytes as concatBytes_,\n hexToBytes as hexToBytes_,\n} from '@noble/hashes/utils.js';\nexport {\n abytes,\n anumber,\n bytesToHex,\n concatBytes,\n hexToBytes,\n isBytes,\n randomBytes,\n} from '@noble/hashes/utils.js';\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\n\nexport type CHash = {\n (message: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array) => Uint8Array;\nexport function abool(value: boolean, title: string = ''): boolean {\n if (typeof value !== 'boolean') {\n const prefix = title && `\"${title}\" `;\n throw new Error(prefix + 'expected boolean, got type=' + typeof value);\n }\n return value;\n}\n\n// Used in weierstrass, der\nfunction abignumber(n: number | bigint) {\n if (typeof n === 'bigint') {\n if (!isPosBig(n)) throw new Error('positive bigint expected, got ' + n);\n } else anumber(n);\n return n;\n}\n\nexport function asafenumber(value: number, title: string = ''): void {\n if (!Number.isSafeInteger(value)) {\n const prefix = title && `\"${title}\" `;\n throw new Error(prefix + 'expected safe integer, got type=' + typeof value);\n }\n}\n\nexport function numberToHexUnpadded(num: number | bigint): string {\n const hex = abignumber(num).toString(16);\n return hex.length & 1 ? '0' + hex : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n return hexToNumber(bytesToHex_(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n return hexToNumber(bytesToHex_(copyBytes(abytes_(bytes)).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n anumber(len);\n n = abignumber(n);\n const res = hexToBytes_(n.toString(16).padStart(len * 2, '0'));\n if (res.length !== len) throw new Error('number too large');\n return res;\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n return hexToBytes_(numberToHexUnpadded(abignumber(n)));\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n return diff === 0;\n}\n\n/**\n * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer,\n * and Buffer#slice creates mutable copy. Never use Buffers!\n */\nexport function copyBytes(bytes: Uint8Array): Uint8Array {\n return Uint8Array.from(bytes);\n}\n\n/**\n * Decodes 7-bit ASCII string to Uint8Array, throws on non-ascii symbols\n * Should be safe to use for things expected to be ASCII.\n * Returns exact same result as `TextEncoder` for ASCII or throws.\n */\nexport function asciiToBytes(ascii: string): Uint8Array {\n return Uint8Array.from(ascii, (c, i) => {\n const charCode = c.charCodeAt(0);\n if (c.length !== 1 || charCode > 127) {\n throw new Error(\n `string contains non-ASCII character \"${ascii[i]}\" with code ${charCode} at position ${i}`\n );\n }\n return charCode;\n });\n}\n\n// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint): boolean {\n return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint): void {\n // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n // consider P=256n, min=0n, max=P\n // - a for min=0 would require -1: `inRange('x', x, -1n, P)`\n // - b would commonly require subtraction: `inRange('x', x, 0n, P - 1n)`\n // - our way is the cleanest: `inRange('x', x, 0n, P)\n if (!inRange(n, min, max))\n throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nexport function bitLen(n: bigint): number {\n let len;\n for (len = 0; n > _0n; n >>= _1n, len += 1);\n return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number): bigint {\n return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean): bigint {\n return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number): bigint => (_1n << BigInt(n)) - _1n;\n\n// DRBG\n\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n * const drbg = createHmacDRBG<Key>(32, 32, hmac);\n * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n hashLen: number,\n qByteLen: number,\n hmacFn: (key: Uint8Array, message: Uint8Array) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n anumber(hashLen, 'hashLen');\n anumber(qByteLen, 'qByteLen');\n if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n const u8n = (len: number): Uint8Array => new Uint8Array(len); // creates Uint8Array\n const NULL = Uint8Array.of();\n const byte0 = Uint8Array.of(0x00);\n const byte1 = Uint8Array.of(0x01);\n const _maxDrbgIters = 1000;\n\n // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n let i = 0; // Iterations counter, will throw when over 1000\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...msgs: Uint8Array[]) => hmacFn(k, concatBytes_(v, ...msgs)); // hmac(k)(v, ...values)\n const reseed = (seed: Uint8Array = NULL) => {\n // HMAC-DRBG reseed() function. Steps D-G\n k = h(byte0, seed); // k = hmac(k || v || 0x00 || seed)\n v = h(); // v = hmac(k || v)\n if (seed.length === 0) return;\n k = h(byte1, seed); // k = hmac(k || v || 0x01 || seed)\n v = h(); // v = hmac(k || v)\n };\n const gen = () => {\n // HMAC-DRBG generate() function\n if (i++ >= _maxDrbgIters) throw new Error('drbg: tried max amount of iterations');\n let len = 0;\n const out: Uint8Array[] = [];\n while (len < qByteLen) {\n v = h();\n const sl = v.slice();\n out.push(sl);\n len += v.length;\n }\n return concatBytes_(...out);\n };\n const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n reset();\n reseed(seed); // Steps D-G\n let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n while (!(res = pred(gen()))) reseed();\n reset();\n return res;\n };\n return genUntil;\n}\n\nexport function validateObject(\n object: Record<string, any>,\n fields: Record<string, string> = {},\n optFields: Record<string, string> = {}\n): void {\n if (!object || typeof object !== 'object') throw new Error('expected valid options object');\n type Item = keyof typeof object;\n function checkField(fieldName: Item, expectedType: string, isOpt: boolean) {\n const val = object[fieldName];\n if (isOpt && val === undefined) return;\n const current = typeof val;\n if (current !== expectedType || val === null)\n throw new Error(`param \"${fieldName}\" is invalid: expected ${expectedType}, got ${current}`);\n }\n const iter = (f: typeof fields, isOpt: boolean) =>\n Object.entries(f).forEach(([k, v]) => checkField(k, v, isOpt));\n iter(fields, false);\n iter(optFields, true);\n}\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = (): never => {\n throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized<T extends object, R, O extends any[]>(\n fn: (arg: T, ...args: O) => R\n): (arg: T, ...args: O) => R {\n const map = new WeakMap<T, R>();\n return (arg: T, ...args: O): R => {\n const val = map.get(arg);\n if (val !== undefined) return val;\n const computed = fn(arg, ...args);\n map.set(arg, computed);\n return computed;\n };\n}\n\nexport interface CryptoKeys {\n lengths: { seed?: number; public?: number; secret?: number };\n keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };\n getPublicKey: (secretKey: Uint8Array) => Uint8Array;\n}\n\n/** Generic interface for signatures. Has keygen, sign and verify. */\nexport interface Signer extends CryptoKeys {\n // Interfaces are fun. We cannot just add new fields without copying old ones.\n lengths: {\n seed?: number;\n public?: number;\n secret?: number;\n signRand?: number;\n signature?: number;\n };\n sign: (msg: Uint8Array, secretKey: Uint8Array) => Uint8Array;\n verify: (sig: Uint8Array, msg: Uint8Array, publicKey: Uint8Array) => boolean;\n}\n","import { equalBytes } from \"@noble/curves/utils.js\";\nimport type { CompleteMessageRequest } from \"@revibase/core\";\nimport {\n bufferToBase64URLString,\n convertBase64StringToJWK,\n convertMemberKeyToString,\n convertPubkeyCompressedToCose,\n createClientAuthorizationStartRequestChallenge,\n createMessageChallenge,\n fetchSettings,\n fetchUserAccountByFilters,\n getDeviceMessageHash,\n getDomainConfigAddress,\n getSettingsFromIndex,\n getSolanaRpc,\n UserRole,\n} from \"@revibase/core\";\nimport { verifyAuthenticationResponse } from \"@simplewebauthn/server\";\nimport {\n address,\n getBase58Encoder,\n getPublicKeyFromAddress,\n signatureBytes,\n verifySignature,\n} from \"@solana/kit\";\nimport { compactVerify, importJWK } from \"jose\";\n\n/** Verifies WebAuthn message, returns user. */\nexport async function verifyMessage(\n request: CompleteMessageRequest,\n expectedClientJwk: string,\n allowedClientOrigins: string[],\n requireTwoFactorAuthentication: boolean,\n) {\n const { payload } = request.data;\n if (payload.startRequest.data.type !== \"message\")\n throw new Error(\"Invalid request type.\");\n if (Date.now() > payload.startRequest.validTill) {\n throw new Error(\"Request expired.\");\n }\n if (\n !allowedClientOrigins.includes(payload.startRequest.clientOrigin) ||\n !allowedClientOrigins.includes(payload.client.clientOrigin) ||\n payload.startRequest.clientOrigin !== payload.client.clientOrigin\n ) {\n throw new Error(\"Invalid client origin\");\n }\n\n {\n const key = await importJWK(convertBase64StringToJWK(expectedClientJwk));\n const result = await compactVerify(request.data.payload.client.jws, key);\n if (\n !equalBytes(\n result.payload,\n createClientAuthorizationStartRequestChallenge(\n request.data.payload.startRequest,\n ),\n )\n ) {\n throw new Error(\"Invalid client signature\");\n }\n }\n\n {\n if (payload.device.jwk !== payload.device.deviceProfile.devicePublicKey) {\n throw new Error(\"Device publickey mismatch\");\n }\n const key = await importJWK(convertBase64StringToJWK(payload.device.jwk));\n const result = await compactVerify(payload.device.jws, key);\n if (\n !equalBytes(\n result.payload,\n getDeviceMessageHash(\n payload.authResponse,\n payload.device.deviceProfile,\n ),\n )\n ) {\n throw new Error(\"Invalid device signature\");\n }\n }\n\n const expectedChallenge = createMessageChallenge(\n payload.startRequest.data.payload,\n payload.startRequest.clientOrigin,\n payload.device.jwk,\n payload.startRequest.rid,\n );\n const { verified } = await verifyAuthenticationResponse({\n response: payload.authResponse,\n expectedChallenge: bufferToBase64URLString(expectedChallenge),\n expectedRPID: payload.startRequest.rpId,\n expectedOrigin: payload.startRequest.providerOrigin,\n requireUserVerification: false,\n credential: {\n counter: 0,\n id: payload.authResponse.id,\n publicKey: convertPubkeyCompressedToCose(payload.signer),\n },\n });\n\n if (!verified) {\n throw new Error(\"Invalid user siganture\");\n }\n\n if (requireTwoFactorAuthentication) {\n if (!payload.startRequest.data.requireTwoFactorAuthentication) {\n throw new Error(\"Two factor authentication is required.\");\n }\n if (!payload.transactionManager) {\n throw new Error(\"Missing signature from transaction manager.\");\n }\n\n const user = await fetchUserAccountByFilters(\n await getDomainConfigAddress({ rpId: payload.startRequest.rpId }),\n { credentialId: payload.authResponse.id },\n );\n const delegateTo = user?.wallets.find((x) => x.isDelegate);\n if (!delegateTo) {\n throw new Error(\"User does not have a delegated wallet\");\n }\n const settingsData = (\n await fetchSettings(\n getSolanaRpc(),\n await getSettingsFromIndex(delegateTo.index),\n )\n ).data;\n const transactionManager = settingsData.members.find(\n (x) => x.role === UserRole.TransactionManager,\n );\n if (!transactionManager) {\n throw new Error(\"No transaction manager found.\");\n }\n if (\n payload.transactionManager.publicKey !==\n convertMemberKeyToString(transactionManager.pubkey)\n ) {\n throw new Error(\"Transaction manager mismatch.\");\n }\n if (\n !(await verifySignature(\n await getPublicKeyFromAddress(\n address(payload.transactionManager.publicKey),\n ),\n signatureBytes(\n getBase58Encoder().encode(payload.transactionManager.signature),\n ),\n expectedChallenge,\n ))\n ) {\n throw new Error(\"Invalid transaction manager signature.\");\n }\n }\n\n return {\n ok: true,\n };\n}\n","import { equalBytes } from \"@noble/curves/utils.js\";\nimport type { CompleteTransactionRequest } from \"@revibase/core\";\nimport {\n bufferToBase64URLString,\n convertBase64StringToJWK,\n convertPubkeyCompressedToCose,\n createClientAuthorizationCompleteRequestChallenge,\n createClientAuthorizationStartRequestChallenge,\n createTransactionChallenge,\n getDeviceMessageHash,\n} from \"@revibase/core\";\nimport { verifyAuthenticationResponse } from \"@simplewebauthn/server\";\nimport { CompactSign, compactVerify, importJWK } from \"jose\";\n\n/** Verifies WebAuthn message, returns signature. */\nexport async function verifyTransaction(\n request: CompleteTransactionRequest,\n expectedClientJwk: string,\n allowedClientOrigins: string[],\n privateKey: string,\n) {\n const { payload } = request.data;\n if (payload.startRequest.data.type !== \"transaction\")\n throw new Error(\"Invalid request type.\");\n if (\n Date.now() >\n Math.min(payload.startRequest.validTill, payload.estimatedSlotHashExpiry)\n ) {\n throw new Error(\"Request expired.\");\n }\n if (\n !allowedClientOrigins.includes(payload.startRequest.clientOrigin) ||\n !allowedClientOrigins.includes(payload.client.clientOrigin) ||\n payload.startRequest.clientOrigin !== payload.client.clientOrigin\n ) {\n throw new Error(\"Invalid client origin\");\n }\n\n {\n const key = await importJWK(convertBase64StringToJWK(expectedClientJwk));\n const result = await compactVerify(request.data.payload.client.jws, key);\n if (\n !equalBytes(\n result.payload,\n createClientAuthorizationStartRequestChallenge(\n request.data.payload.startRequest,\n ),\n )\n ) {\n throw new Error(\"Invalid client signature\");\n }\n }\n\n {\n if (payload.device.jwk !== payload.device.deviceProfile.devicePublicKey) {\n throw new Error(\"Device publickey mismatch\");\n }\n const key = await importJWK(convertBase64StringToJWK(payload.device.jwk));\n const result = await compactVerify(payload.device.jws, key);\n if (\n !equalBytes(\n result.payload,\n getDeviceMessageHash(\n payload.authResponse,\n payload.device.deviceProfile,\n ),\n )\n ) {\n throw new Error(\"Invalid device signature\");\n }\n }\n {\n const { challenge: expectedChallenge } = await createTransactionChallenge(\n payload.startRequest.data.payload,\n payload.startRequest.clientOrigin,\n payload.device.jwk,\n payload.startRequest.rid,\n payload.slotHash,\n payload.slotNumber,\n payload.estimatedSlotHashExpiry,\n );\n const { verified } = await verifyAuthenticationResponse({\n response: payload.authResponse,\n expectedChallenge: bufferToBase64URLString(expectedChallenge),\n expectedRPID: payload.startRequest.rpId,\n expectedOrigin: payload.startRequest.providerOrigin,\n requireUserVerification: false,\n credential: {\n counter: 0,\n id: payload.authResponse.id,\n publicKey: convertPubkeyCompressedToCose(payload.signer),\n },\n });\n\n if (!verified) {\n throw new Error(\"Invalid user siganture\");\n }\n }\n\n const pKey = convertBase64StringToJWK(privateKey);\n if (!pKey.alg) throw new Error(\"Property alg in JWK is missing.\");\n const signature = await new CompactSign(\n createClientAuthorizationCompleteRequestChallenge(request),\n )\n .setProtectedHeader({\n alg: pKey.alg,\n })\n .sign(pKey);\n\n return { ok: true, signature };\n}\n","import {\n initialize,\n type CompleteMessageRequest,\n type CompleteTransactionRequest,\n type StartMessageRequest,\n type StartTransactionRequest,\n} from \"@revibase/core\";\nimport { startRequest } from \"./startRequest\";\nimport { verifyMessage } from \"./verifyMessage\";\nimport { verifyTransaction } from \"./verifyTransaction\";\n\nlet initialized = false;\nfunction ensureInitialize(rpcEndpoint?: string) {\n if (initialized) return;\n if (rpcEndpoint) {\n initialize({ rpcEndpoint });\n initialized = true;\n }\n}\n/** Validates start request, calls Revibase start + getResult, returns user or tx. Pass req.signal for cancel on disconnect. */\nexport async function processClientAuthCallback({\n request,\n publicKey,\n allowedClientOrigins,\n privateKey,\n requireTwoFactorAuthentication,\n}: {\n request:\n | Omit<StartMessageRequest, \"validTill\">\n | Omit<StartTransactionRequest, \"validTill\">\n | CompleteMessageRequest\n | CompleteTransactionRequest;\n allowedClientOrigins: string[];\n publicKey: string;\n privateKey: string;\n requireTwoFactorAuthentication?: {\n rpcEndpoint: string;\n };\n}) {\n ensureInitialize(requireTwoFactorAuthentication?.rpcEndpoint);\n\n if (request.phase === \"start\") {\n if (\n request.data.type === \"message\" &&\n !!requireTwoFactorAuthentication !==\n request.data.requireTwoFactorAuthentication\n ) {\n throw new Error(\"Require 2fa check mismatch\");\n }\n return await startRequest(request, allowedClientOrigins, privateKey);\n } else if (request.phase === \"complete\") {\n if (request.data.type === \"message\") {\n return await verifyMessage(\n request as CompleteMessageRequest,\n publicKey,\n allowedClientOrigins,\n !!requireTwoFactorAuthentication,\n );\n } else if (request.data.type === \"transaction\") {\n return await verifyTransaction(\n request as CompleteTransactionRequest,\n publicKey,\n allowedClientOrigins,\n privateKey,\n );\n } else {\n throw new Error(\"Invalid request type\");\n }\n } else {\n throw new Error(\"Invalid request phase\");\n }\n}\n","import { DEFAULT_JITO_TIPS_URL } from \"../utils/consts\";\n\nexport async function processEstimateJitoTipsCallback(\n priority = \"landed_tips_75th_percentile\",\n url = DEFAULT_JITO_TIPS_URL,\n) {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch Jito tips: ${response.status} ${response.statusText}`,\n );\n }\n\n const result = await response.json();\n if (\n !Array.isArray(result) ||\n !result[0] ||\n typeof result[0][priority] !== \"number\"\n ) {\n throw new Error(\"Invalid Jito tips response format\");\n }\n\n const LAMPORTS_PER_SOL = 1_000_000_000;\n return Math.round(result[0][priority] * LAMPORTS_PER_SOL);\n}\n","import { DEFAULT_JITO_BLOCK_ENGINE_SEND_BUNDLE_URL } from \"../utils/consts\";\n\nexport async function processSendJitoBundleCallback(\n serializedTransactions: string[],\n jitoUUID?: string,\n url = DEFAULT_JITO_BLOCK_ENGINE_SEND_BUNDLE_URL,\n): Promise<string> {\n const maxRetries = 5;\n const baseBackoffMs = 250;\n\n const body = JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"sendBundle\",\n params: [\n serializedTransactions,\n {\n encoding: \"base64\",\n },\n ],\n });\n\n let response: Response | null = null;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(jitoUUID ? { \"x-jito-auth\": jitoUUID } : {}),\n },\n body,\n });\n\n if (response.status !== 429) break;\n if (attempt === maxRetries) break;\n\n const backoffMs = Math.min(10_000, baseBackoffMs * 2 ** attempt);\n await sleep(backoffMs);\n }\n\n if (!response) {\n throw new Error(\"Failed to send bundles: no response\");\n }\n\n const data = (await response.json()) as { result?: string; error?: unknown };\n\n if (data.error) {\n throw new Error(\n `Error sending bundles: ${JSON.stringify(data.error, null, 2)}`,\n );\n }\n\n if (!data.result) {\n throw new Error(\"No bundle ID returned from Jito\");\n }\n\n return data.result;\n}\n\nconst sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n"]}
1
+ {"version":3,"sources":["../src/utils/consts.ts","../src/utils/errors.ts","../src/provider/utils.ts","../src/provider/main.ts","../src/utils/internal.ts","../src/utils/retry.ts","../src/utils/message/fetchSIgnatureFromTransactionManager.ts","../src/utils/message/index.ts","../src/client/signIn.ts","../src/utils/transactions/solana-send.ts","../src/utils/transactions/utils.ts","../src/utils/transactions/processBundledTransaction.ts","../src/utils/transactions/processSyncTransaction.ts","../src/utils/transactions/processTokenTransfer.ts","../src/utils/transactions/pollTransactionConfirmation.ts","../src/utils/transactions/sendTransaction.ts","../src/client/transactions.ts","../src/client/transfer.ts","../src/server/startRequest.ts","../../../node_modules/.pnpm/@noble+curves@2.0.1/node_modules/@noble/curves/src/utils.ts","../src/server/verifyMessage.ts","../src/server/verifyTransaction.ts","../src/server/processClientAuthCallback.ts","../src/server/processEstimateJitoTipsCallback.ts","../src/server/processSendJitoBundleCallback.ts"],"names":["REVIBASE_AUTH_URL","REVIBASE_RP_ID","REVIBASE_API_ENDPOINT","REVIBASE_LOOKUP_TABLE_ADDRESS","DEFAULT_JITO_BLOCK_ENGINE_SEND_BUNDLE_URL","DEFAULT_JITO_TIPS_URL","RevibaseError","_RevibaseError","message","code","RevibasePopupBlockedError","_RevibasePopupBlockedError","RevibasePopupClosedError","_RevibasePopupClosedError","RevibaseTimeoutError","_RevibaseTimeoutError","RevibaseFlowInProgressError","_RevibaseFlowInProgressError","RevibaseAbortedError","_RevibaseAbortedError","RevibasePopupNotOpenError","_RevibasePopupNotOpenError","RevibaseAuthError","_RevibaseAuthError","RevibaseApiError","_RevibaseApiError","RevibaseEnvironmentError","_RevibaseEnvironmentError","DEFAULT_TIMEOUT","HEARTBEAT_INTERVAL","CONNECT_TIMEOUT","defaultSendJitoBundleCallback","request","res","data","defaultEstimateJitoTipsCallback","defaultClientAuthorizationCallback","createPopUp","url","availW","availH","isMobile","width","height","top","left","screenLeft","screenTop","viewportW","viewportH","features","createProviderFrame","signal","onDismiss","scrollY","previousBodyStyles","lockScroll","unlockScroll","host","shadow","overlay","frameWrapper","iframe","closeBtn","keyHandler","e","dismiss","closed","close","abortHandler","RevibaseProvider","options","rpId","rpcEndpoint","providerOrigin","ui","onClientAuthorizationCallback","onSendJitoBundleCallback","onEstimateJitoTipsCallback","initialize","onConnectedCallback","onSuccessCallback","rid","getBase64Decoder","clientOrigin","popupUrl","detachForwardAbort","flowAbortController","forwardAbort","originalSignal","resolve","reject","params","fail","port","finished","heartbeatInterval","connectTimeoutId","requestTimeoutId","cleanup","onConnect","err","succeed","value","result","event","channel","lastPong","ev","msg","timeoutDuration","createSignInMessageText","input","fields","isNetworkError","withRetry","fn","maxAttempts","initialDelay","maxDelay","lastError","attempt","error","delay","fetchSignatureFromTransactionManager","wsUrl","toWebSocketUrl","pendingApprovalsCallback","i","signatures","ws","openWebSocket","readWebSocketJsonEvents","httpUrl","u","onAbort","onEvent","settled","onMessage","onError","onClose","finish","parsed","send2FARequestIfNeeded","startRequest","transactionManager","fetchSettings","getSolanaRpc","getSettingsFromIndex","x","UserRole","publicKey","convertMemberKeyToString","userAccountData","fetchUser","getUserAddress","address","signature","signIn","provider","payload","validTill","signAndSendTransaction","instructions","payer","addressesByLookupTableAddress","latestBlockHash","tx","pipe","createTransactionMessage","appendTransactionMessageInstructions","setTransactionMessageFeePayerSigner","setTransactionMessageLifetimeUsingBlockhash","compressTransactionMessageUsingAddressLookupTables","unitsConsumed","priorityFees","getComputeUnitsEstimate","getMedianPriorityFees","computeUnits","prependTransactionMessageInstructions","getSetComputeUnitLimitInstruction","getSetComputeUnitPriceInstruction","signTransactionMessageWithSigners","getBase64EncodedWireTransaction","getSignatureFromTransaction","signAndSendBundledTransactions","bundle","simulationBundle","createEncodedBundle","simulateBundle","getSolanaRpcEndpoint","encodedBundle","index","connectionUrl","TransactionFailure","programError","isSimulate","getBlockhashDecoder","compileTransaction","transactionMessage","transactionMessageWithComputeUnitAndPriorityFees","transaction","simulatedTransaction","errorMessage","connection","accounts","fees","AccountRole","f","a","b","mid","payerCache","getRandomPayer","cached","response","randomPayer","createTransactionSigner","transactions","getTransactionEncoder","signResponse","sig","getBase58Encoder","getTransactionManagerSigner","args","transactionManagerAddress","transactionMessageBytes","authResponses","onPendingApprovalsCallback","onPendingApprovalsSuccess","abortControllerArg","abortSignal","abortController","ac","txManagerUrl","createTransactionManagerSigner","fetchAdditionalLoopUpTableIfNecessary","fetchAddressesForLookupTables","fetched","fetchMaybeAddressLookupTable","processBundledTransaction","authResponse","settings","additionalSigners","additionalVoters","transactionActionType","signedSigner","getSignedSecp256r1Key","transactionManagerSigner","jitoBundlesTipAmount","getBase64Encoder","prepareTransactionBundle","bundlesWithLookupTables","processSyncTransaction","signers","prepareTransactionSync","processTokenTransfer","transactionAddress","amount","getU64Decoder","destination","getAddressDecoder","mint","SYSTEM_PROGRAM_ADDRESS","tokenTransferIntent","nativeTransferIntent","pollTransactionConfirmation","txSig","maxRetries","delayMs","confirmation","sendTransaction","confirmTransaction","executeTransaction","signer","settingsIndexWithAddress","prepareTransactionMessage","settingsArgs","transactionPayload","SignedSecp256r1Key","KeyType","transferTokens","tokenProgram","TOKEN_PROGRAM_ADDRESS","getU64Encoder","getAddressEncoder","allowedClientOrigins","privateKey","pKey","convertBase64StringToJWK","CompactSign","createClientAuthorizationStartRequestChallenge","equalBytes","diff","verifyMessage","expectedClientJwk","requireTwoFactorAuthentication","key","importJWK","compactVerify","getDeviceMessageHash","expectedChallenge","createMessageChallenge","verified","verifyAuthenticationResponse","bufferToBase64URLString","convertPubkeyCompressedToCose","delegateTo","fetchUserAccountByFilters","getDomainConfigAddress","verifySignature","getPublicKeyFromAddress","signatureBytes","verifyTransaction","createTransactionChallenge","createClientAuthorizationCompleteRequestChallenge","initialized","ensureInitialize","processClientAuthCallback","processEstimateJitoTipsCallback","priority","processSendJitoBundleCallback","serializedTransactions","jitoUUID","body","backoffMs","sleep","ms","r"],"mappings":"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","file":"index.cjs","sourcesContent":["export const REVIBASE_AUTH_URL = \"https://auth.revibase.com\";\n\nexport const REVIBASE_RP_ID = \"revibase.com\";\n\nexport const REVIBASE_API_ENDPOINT = \"https://api.revibase.com\";\n\nexport const REVIBASE_LOOKUP_TABLE_ADDRESS =\n \"2c1LgZfCun82niPCgfg2cTMZmAiahraTjY4KNb1BSU4Z\";\n\nexport const DEFAULT_JITO_BLOCK_ENGINE_SEND_BUNDLE_URL =\n \"https://mainnet.block-engine.jito.wtf/api/v1/bundles\";\n\nexport const DEFAULT_JITO_TIPS_URL =\n \"https://bundles.jito.wtf/api/v1/bundles/tip_floor\";\n","/** Base error. Use instanceof or .code for handling. */\nexport class RevibaseError extends Error {\n readonly code: string;\n\n constructor(message: string, code: string) {\n super(message);\n this.name = \"RevibaseError\";\n this.code = code;\n Object.setPrototypeOf(this, RevibaseError.prototype);\n }\n}\n\n/** Auth popup blocked. */\nexport class RevibasePopupBlockedError extends RevibaseError {\n constructor(message = \"Popup blocked. Please enable popups.\") {\n super(message, \"POPUP_BLOCKED\");\n this.name = \"RevibasePopupBlockedError\";\n Object.setPrototypeOf(this, RevibasePopupBlockedError.prototype);\n }\n}\n\n/** User closed popup before auth. */\nexport class RevibasePopupClosedError extends RevibaseError {\n constructor(message = \"Popup was closed by the user\") {\n super(message, \"POPUP_CLOSED\");\n this.name = \"RevibasePopupClosedError\";\n Object.setPrototypeOf(this, RevibasePopupClosedError.prototype);\n }\n}\n\n/** Authorization flow timed out. */\nexport class RevibaseTimeoutError extends RevibaseError {\n constructor(message = \"Authentication timed out\") {\n super(message, \"TIMEOUT\");\n this.name = \"RevibaseTimeoutError\";\n Object.setPrototypeOf(this, RevibaseTimeoutError.prototype);\n }\n}\n\n/** Flow already in progress. */\nexport class RevibaseFlowInProgressError extends RevibaseError {\n constructor(message = \"An authorization flow is already in progress\") {\n super(message, \"FLOW_IN_PROGRESS\");\n this.name = \"RevibaseFlowInProgressError\";\n Object.setPrototypeOf(this, RevibaseFlowInProgressError.prototype);\n }\n}\n\n/** Flow aborted (e.g. AbortSignal). */\nexport class RevibaseAbortedError extends RevibaseError {\n constructor(message = \"Aborted\") {\n super(message, \"ABORTED\");\n this.name = \"RevibaseAbortedError\";\n Object.setPrototypeOf(this, RevibaseAbortedError.prototype);\n }\n}\n\n/** Popup not open. */\nexport class RevibasePopupNotOpenError extends RevibaseError {\n constructor(message = \"Popup is not open. Call startRequest first.\") {\n super(message, \"POPUP_NOT_OPEN\");\n this.name = \"RevibasePopupNotOpenError\";\n Object.setPrototypeOf(this, RevibasePopupNotOpenError.prototype);\n }\n}\n\n/** Backend authorization failed. */\nexport class RevibaseAuthError extends RevibaseError {\n constructor(message: string) {\n super(message, \"AUTH_FAILED\");\n this.name = \"RevibaseAuthError\";\n Object.setPrototypeOf(this, RevibaseAuthError.prototype);\n }\n}\n\n/** Backend authorization failed. */\nexport class RevibaseApiError extends RevibaseError {\n constructor(message: string) {\n super(message, \"API_FAILED\");\n this.name = \"RevibaseApiError\";\n Object.setPrototypeOf(this, RevibaseApiError.prototype);\n }\n}\n\n/** Used outside browser. */\nexport class RevibaseEnvironmentError extends RevibaseError {\n constructor(message = \"Provider can only be used in a browser environment\") {\n super(message, \"ENVIRONMENT\");\n this.name = \"RevibaseEnvironmentError\";\n Object.setPrototypeOf(this, RevibaseEnvironmentError.prototype);\n }\n}\n","import type {\n CompleteMessageRequest,\n CompleteTransactionRequest,\n UserInfo,\n} from \"@revibase/core\";\nimport {\n RevibaseApiError,\n RevibaseAuthError,\n type ClientAuthorizationCallback,\n type OnConnectedCallback,\n type OnSuccessCallback,\n} from \"../utils\";\n\nexport const DEFAULT_TIMEOUT = 3 * 60 * 1000;\nexport const HEARTBEAT_INTERVAL = 2000;\nexport const CONNECT_TIMEOUT = 20000;\n\nexport type PopupPortMessage =\n | { type: \"pong\" }\n | {\n type: \"popup-complete\";\n payload: CompleteTransactionRequest | CompleteMessageRequest;\n }\n | { type: \"popup-rejected\"; rid: string }\n | { type: \"popup-error\"; error: string }\n | { type: \"popup-closed\" };\n\nexport type PopupConnectMessage = {\n type: \"popup-connect\";\n rid: string;\n};\n\nexport type Pending = {\n rid: string;\n clientOrigin: string;\n onConnectedCallback: OnConnectedCallback;\n onSuccessCallback: OnSuccessCallback;\n signal?: AbortSignal;\n resolve: (v: { user: UserInfo } | { user: UserInfo; txSig: string }) => void;\n reject: (e: Error) => void;\n};\n\n/** RevibaseProvider options. rpcEndpoint required for executeTransaction. */\nexport type RevibaseProviderOptions = {\n rpcEndpoint: string;\n providerOrigin?: string;\n rpId?: string;\n /** UI mode for same-device authorization. Default: \"iframe\". */\n ui?: {\n mode?: \"popup\" | \"iframe\";\n /**\n * Optional advanced hook to fully control how the provider UI is rendered.\n * Return a target window (popup or iframe.contentWindow) for postMessage transport,\n * and a close() function for cleanup. If you can, also provide isClosed() so the\n * SDK can detect user-dismissal.\n */\n render?: (url: string) => {\n targetWindow: Window;\n close: () => void;\n isClosed?: () => boolean;\n };\n };\n onClientAuthorizationCallback?: ClientAuthorizationCallback;\n onEstimateJitoTipsCallback?: () => Promise<number>;\n onSendJitoBundleCallback?: (request: string[]) => Promise<string>;\n};\n\nexport const defaultSendJitoBundleCallback: (\n serializedTransactions: string[],\n) => Promise<string> = async (request) => {\n const res = await fetch(\"/api/sendJitoBundle\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(request),\n });\n\n const data = await res.json();\n if (!res.ok) {\n throw new RevibaseApiError(\n (data as { error?: string }).error ?? \"Send jito bundle failed\",\n );\n }\n\n return data;\n};\n\nexport const defaultEstimateJitoTipsCallback: () => Promise<number> =\n async () => {\n const res = await fetch(\"/api/estimateJitoTips\");\n\n const data = await res.json();\n if (!res.ok) {\n throw new RevibaseApiError(\n (data as { error?: string }).error ?? \"Estimate jito tips failed\",\n );\n }\n\n return data;\n };\n\nexport const defaultClientAuthorizationCallback: ClientAuthorizationCallback =\n async (request) => {\n const res = await fetch(\"/api/clientAuthorization\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(request),\n });\n\n const data = await res.json();\n if (!res.ok) {\n throw new RevibaseAuthError(\n (data as { error?: string }).error ?? \"Authorization failed\",\n );\n }\n\n return data;\n };\n\nexport function createPopUp(url: string): Window | null {\n if (typeof window === \"undefined\") {\n throw new Error(\"Function can only be called in a browser environment\");\n }\n\n const availW = window.innerWidth || window.screen.availWidth;\n const availH = window.innerHeight || window.screen.availHeight;\n const isMobile = availW <= 768;\n\n let width: number;\n let height: number;\n let top: number;\n let left: number;\n\n if (isMobile) {\n width = availW;\n height = availH;\n top = 0;\n left = 0;\n } else {\n const screenLeft = window.screenLeft ?? window.screenX ?? 0;\n const screenTop = window.screenTop ?? window.screenY ?? 0;\n\n const viewportW =\n window.innerWidth ??\n document.documentElement.clientWidth ??\n window.screen.width;\n\n const viewportH =\n window.innerHeight ??\n document.documentElement.clientHeight ??\n window.screen.height;\n\n width = 500;\n height = 600;\n left = Math.round(screenLeft + (viewportW - width) / 2);\n top = Math.round(screenTop + (viewportH - height) / 2);\n }\n\n const features = [\n \"popup=yes\",\n `width=${width}`,\n `height=${height}`,\n `top=${top}`,\n `left=${left}`,\n \"toolbar=no\",\n \"location=no\",\n \"status=no\",\n \"menubar=no\",\n \"scrollbars=yes\",\n \"resizable=yes\",\n ].join(\",\");\n\n return window.open(url, \"_blank\", features);\n}\nexport interface ProviderFrame {\n iframe: HTMLIFrameElement;\n close: () => void;\n}\n\nexport function createProviderFrame(\n url: string,\n signal?: AbortSignal,\n onDismiss?: () => void,\n): ProviderFrame {\n if (typeof window === \"undefined\") {\n throw new Error(\"Function can only be called in a browser environment\");\n }\n\n const isMobile = window.matchMedia(\"(max-width: 768px)\").matches;\n\n // ----------------------------------------\n // Scroll lock (iOS-safe)\n // ----------------------------------------\n\n const scrollY = window.scrollY;\n\n const previousBodyStyles = {\n overflow: document.body.style.overflow,\n position: document.body.style.position,\n top: document.body.style.top,\n left: document.body.style.left,\n right: document.body.style.right,\n width: document.body.style.width,\n };\n\n const lockScroll = () => {\n document.body.style.overflow = \"hidden\";\n document.body.style.position = \"fixed\";\n document.body.style.top = `-${scrollY}px`;\n document.body.style.left = \"0\";\n document.body.style.right = \"0\";\n document.body.style.width = \"100%\";\n };\n\n const unlockScroll = () => {\n document.body.style.overflow = previousBodyStyles.overflow;\n document.body.style.position = previousBodyStyles.position;\n document.body.style.top = previousBodyStyles.top;\n document.body.style.left = previousBodyStyles.left;\n document.body.style.right = previousBodyStyles.right;\n document.body.style.width = previousBodyStyles.width;\n\n window.scrollTo(0, scrollY);\n };\n\n lockScroll();\n\n // ----------------------------------------\n // Shadow DOM host\n // ----------------------------------------\n\n const host = document.createElement(\"div\");\n\n host.setAttribute(\"data-provider-frame-root\", \"true\");\n\n Object.assign(host.style, {\n position: \"fixed\",\n inset: \"0\",\n zIndex: \"2147483647\",\n pointerEvents: \"none\",\n contain: \"layout style paint\",\n });\n\n document.body.appendChild(host);\n\n const shadow = host.attachShadow({ mode: \"closed\" });\n\n // ----------------------------------------\n // Overlay\n // ----------------------------------------\n\n const overlay = document.createElement(\"div\");\n\n Object.assign(overlay.style, {\n all: \"initial\",\n\n position: \"fixed\",\n inset: \"0\",\n\n display: \"flex\",\n alignItems: isMobile ? \"flex-end\" : \"center\",\n justifyContent: \"center\",\n\n background: \"rgba(0,0,0,0.45)\",\n\n zIndex: \"2147483647\",\n\n pointerEvents: \"auto\",\n\n overscrollBehavior: \"contain\",\n touchAction: \"none\",\n\n WebkitTapHighlightColor: \"transparent\",\n\n paddingBottom: \"env(safe-area-inset-bottom)\",\n\n fontFamily:\n 'Inter, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n });\n\n shadow.appendChild(overlay);\n\n // ----------------------------------------\n // Frame wrapper\n // ----------------------------------------\n\n const frameWrapper = document.createElement(\"div\");\n\n Object.assign(frameWrapper.style, {\n all: \"initial\",\n\n position: \"relative\",\n\n display: \"flex\",\n\n width: isMobile ? \"100%\" : \"500px\",\n\n height: isMobile ? \"90dvh\" : \"600px\",\n\n maxWidth: \"100vw\",\n maxHeight: \"100dvh\",\n\n borderRadius: isMobile ? \"16px 16px 0 0\" : \"16px\",\n\n overflow: \"hidden\",\n\n boxShadow: \"0 24px 80px rgba(0,0,0,0.35)\",\n\n background: \"#fff\",\n\n pointerEvents: \"auto\",\n });\n\n overlay.appendChild(frameWrapper);\n\n // ----------------------------------------\n // iframe\n // ----------------------------------------\n\n const iframe = document.createElement(\"iframe\");\n\n iframe.src = url;\n\n iframe.title = \"Authorization\";\n\n iframe.setAttribute(\"tabindex\", \"0\");\n\n iframe.allow = [`publickey-credentials-get ${new URL(url).origin}`].join(\n \"; \",\n );\n\n iframe.sandbox = [\"allow-scripts\", \"allow-same-origin\"].join(\" \");\n\n Object.assign(iframe.style, {\n width: \"100%\",\n height: \"100%\",\n\n border: \"0\",\n\n background: \"#fff\",\n\n display: \"block\",\n });\n\n frameWrapper.appendChild(iframe);\n\n // ----------------------------------------\n // Close button\n // ----------------------------------------\n\n const closeBtn = document.createElement(\"button\");\n\n closeBtn.type = \"button\";\n\n closeBtn.setAttribute(\"aria-label\", \"Close\");\n\n closeBtn.innerHTML = \"&times;\";\n\n Object.assign(closeBtn.style, {\n all: \"initial\",\n\n position: \"absolute\",\n\n top: isMobile ? \"12px\" : \"14px\",\n right: isMobile ? \"12px\" : \"14px\",\n\n width: \"44px\",\n height: \"44px\",\n\n display: \"grid\",\n placeItems: \"center\",\n\n borderRadius: \"9999px\",\n\n background: \"rgba(255,255,255,0.96)\",\n\n color: \"#111\",\n\n fontSize: \"28px\",\n\n lineHeight: \"1\",\n\n cursor: \"pointer\",\n\n boxShadow: \"0 8px 24px rgba(0,0,0,0.25)\",\n\n zIndex: \"2\",\n\n userSelect: \"none\",\n WebkitUserSelect: \"none\",\n });\n\n frameWrapper.appendChild(closeBtn);\n\n // ----------------------------------------\n // Focus iframe\n // ----------------------------------------\n\n requestAnimationFrame(() => {\n try {\n iframe.focus();\n } catch {}\n });\n\n // ----------------------------------------\n // Escape key\n // ----------------------------------------\n\n const keyHandler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n dismiss();\n }\n };\n\n document.addEventListener(\"keydown\", keyHandler);\n\n // ----------------------------------------\n // Close logic\n // ----------------------------------------\n\n let closed = false;\n\n const close = () => {\n if (closed) return;\n\n closed = true;\n\n try {\n signal?.removeEventListener(\"abort\", abortHandler);\n } catch {}\n\n try {\n document.removeEventListener(\"keydown\", keyHandler);\n } catch {}\n\n try {\n iframe.src = \"about:blank\";\n iframe.removeAttribute(\"src\");\n } catch {}\n\n try {\n host.remove();\n } catch {}\n\n unlockScroll();\n };\n\n // ----------------------------------------\n // Dismiss\n // ----------------------------------------\n\n const dismiss = () => {\n onDismiss?.();\n close();\n };\n\n closeBtn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n dismiss();\n });\n\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) {\n dismiss();\n }\n });\n\n // ----------------------------------------\n // Abort signal\n // ----------------------------------------\n\n const abortHandler = () => {\n dismiss();\n };\n\n if (signal) {\n if (signal.aborted) {\n abortHandler();\n } else {\n signal.addEventListener(\"abort\", abortHandler, {\n once: true,\n });\n }\n }\n\n return {\n iframe,\n close,\n };\n}\n","import type {\n CompleteMessageRequest,\n CompleteTransactionRequest,\n UserInfo,\n} from \"@revibase/core\";\nimport { initialize } from \"@revibase/core\";\nimport { getBase64Decoder } from \"@solana/kit\";\nimport type {\n ClientAuthorizationCallback,\n OnConnectedCallback,\n OnSuccessCallback,\n} from \"../utils\";\nimport { REVIBASE_AUTH_URL, REVIBASE_RP_ID } from \"../utils/consts\";\nimport {\n RevibaseAbortedError,\n RevibaseAuthError,\n RevibaseEnvironmentError,\n RevibaseFlowInProgressError,\n RevibasePopupBlockedError,\n RevibasePopupClosedError,\n RevibaseTimeoutError,\n} from \"../utils/errors\";\nimport {\n CONNECT_TIMEOUT,\n createPopUp,\n createProviderFrame,\n defaultClientAuthorizationCallback,\n defaultEstimateJitoTipsCallback,\n defaultSendJitoBundleCallback,\n HEARTBEAT_INTERVAL,\n type Pending,\n type PopupConnectMessage,\n type PopupPortMessage,\n type RevibaseProviderOptions,\n} from \"./utils\";\n\n/** Provider: popup or channel auth. Default callback: POST /api/clientAuthorization. */\nexport class RevibaseProvider {\n public onClientAuthorizationCallback: ClientAuthorizationCallback;\n public onSendJitoBundleCallback: (request: string[]) => Promise<string>;\n public onEstimateJitoTipsCallback: () => Promise<number>;\n public providerOrigin: string;\n public rpId: string;\n private uiMode: \"popup\" | \"iframe\";\n private render?: NonNullable<RevibaseProviderOptions[\"ui\"]>[\"render\"];\n private popUp: Window | null = null;\n private frame: ReturnType<typeof createProviderFrame> | null = null;\n private rendered: {\n targetWindow: Window;\n close: () => void;\n isClosed?: () => boolean;\n } | null = null;\n\n constructor(options: RevibaseProviderOptions) {\n const {\n rpId,\n rpcEndpoint,\n providerOrigin,\n ui,\n onClientAuthorizationCallback,\n onSendJitoBundleCallback,\n onEstimateJitoTipsCallback,\n } = options;\n\n initialize({ rpcEndpoint });\n this.onClientAuthorizationCallback =\n onClientAuthorizationCallback ?? defaultClientAuthorizationCallback;\n this.onSendJitoBundleCallback =\n onSendJitoBundleCallback ?? defaultSendJitoBundleCallback;\n this.onEstimateJitoTipsCallback =\n onEstimateJitoTipsCallback ?? defaultEstimateJitoTipsCallback;\n this.providerOrigin = providerOrigin ?? REVIBASE_AUTH_URL;\n this.rpId = rpId ?? REVIBASE_RP_ID;\n this.uiMode = ui?.mode ?? \"iframe\";\n this.render = ui?.render;\n }\n\n async sendRequestToPopupProvider({\n onConnectedCallback,\n onSuccessCallback,\n signal,\n }: {\n onConnectedCallback: OnConnectedCallback;\n onSuccessCallback: OnSuccessCallback;\n signal?: AbortSignal;\n }) {\n if (typeof window === \"undefined\") {\n throw new RevibaseEnvironmentError();\n }\n\n if (this.popUp || this.frame || this.rendered) {\n throw new RevibaseFlowInProgressError();\n }\n\n const rid = getBase64Decoder().decode(\n crypto.getRandomValues(new Uint8Array(16)),\n );\n const clientOrigin = window.location.origin;\n const popupUrl = `${this.providerOrigin}?clientOrigin=${encodeURIComponent(clientOrigin)}&rid=${encodeURIComponent(rid)}`;\n\n let detachForwardAbort: (() => void) | undefined;\n\n if (this.render) {\n this.rendered = this.render(popupUrl);\n } else if (this.uiMode === \"iframe\") {\n // We need a controller here so backdrop-dismiss can \"abort\" the flow.\n const flowAbortController = new AbortController();\n const forwardAbort = () => flowAbortController.abort();\n const originalSignal = signal;\n if (originalSignal) {\n if (originalSignal.aborted) {\n flowAbortController.abort();\n } else {\n originalSignal.addEventListener(\"abort\", forwardAbort, {\n once: true,\n });\n detachForwardAbort = () =>\n originalSignal.removeEventListener(\"abort\", forwardAbort);\n }\n }\n\n this.frame = createProviderFrame(\n popupUrl,\n flowAbortController.signal,\n () => flowAbortController.abort(),\n );\n\n // Replace the provided signal so transport + cleanup treat backdrop-dismiss as abort.\n signal = flowAbortController.signal;\n } else {\n this.popUp = createPopUp(popupUrl);\n if (!this.popUp) {\n throw new RevibasePopupBlockedError();\n }\n }\n\n return new Promise<{ user: UserInfo } | { txSig: string; user: UserInfo }>(\n (resolve, reject) => {\n setTimeout(() => {\n this.attachTransport({\n rid,\n clientOrigin,\n onConnectedCallback,\n onSuccessCallback,\n signal,\n resolve,\n reject,\n });\n }, 0);\n },\n ).finally(() => {\n try {\n detachForwardAbort?.();\n } catch {\n // ignore\n }\n });\n }\n\n private attachTransport(params: Pending) {\n const {\n rid,\n clientOrigin,\n onConnectedCallback,\n onSuccessCallback,\n signal,\n reject,\n resolve,\n } = params;\n\n const abortHandler = () => {\n fail(new RevibaseAbortedError());\n };\n signal?.addEventListener(\"abort\", abortHandler, { once: true });\n\n let port: MessagePort | null = null;\n let finished = false;\n\n let heartbeatInterval: ReturnType<typeof setInterval> | null = null;\n let connectTimeoutId: ReturnType<typeof setTimeout> | null = null;\n let requestTimeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = (): void => {\n // Remove all event listeners\n window.removeEventListener(\"message\", onConnect);\n signal?.removeEventListener(\"abort\", abortHandler);\n\n // Clear all timers\n if (heartbeatInterval) {\n clearInterval(heartbeatInterval);\n heartbeatInterval = null;\n }\n if (connectTimeoutId) {\n clearTimeout(connectTimeoutId);\n connectTimeoutId = null;\n }\n if (requestTimeoutId) {\n clearTimeout(requestTimeoutId);\n requestTimeoutId = null;\n }\n\n // Close message port\n try {\n port?.close();\n } catch (err) {\n // Ignore close errors\n }\n port = null;\n\n // Close UI\n try {\n if (this.popUp && !this.popUp.closed) {\n this.popUp.close();\n }\n } catch (err) {\n // Ignore close errors\n }\n\n try {\n this.frame?.close();\n } catch (err) {\n // Ignore close errors\n }\n\n try {\n this.rendered?.close();\n } catch (err) {\n // Ignore close errors\n }\n\n this.popUp = null;\n this.frame = null;\n this.rendered = null;\n };\n\n const fail = (err: Error): void => {\n if (finished) return;\n finished = true;\n cleanup();\n reject(err);\n };\n\n const succeed = (\n value: CompleteMessageRequest | CompleteTransactionRequest,\n ): void => {\n if (finished) return;\n finished = true;\n cleanup();\n onSuccessCallback(value as any)\n .then((result) => {\n resolve(result);\n })\n .catch((err) => {\n reject(err);\n });\n };\n\n // Connection timeout - handles popup closed before connection\n connectTimeoutId = setTimeout(() => {\n fail(new RevibaseTimeoutError(\"Popup connection timed out after 20s\"));\n }, CONNECT_TIMEOUT);\n\n const onConnect = (event: MessageEvent) => {\n // Prevent race condition - only process once\n if (finished || port) return;\n\n // Validate message origin\n if (event.origin !== this.providerOrigin) return;\n\n const data = event.data as PopupConnectMessage;\n\n // Validate message structure\n if (!data || data.type !== \"popup-connect\") return;\n if (data.rid !== rid) return;\n\n // Clear connection timeout\n if (connectTimeoutId) {\n clearTimeout(connectTimeoutId);\n connectTimeoutId = null;\n }\n\n // Create MessageChannel for bidirectional communication\n const channel = new MessageChannel();\n port = channel.port1;\n port.start();\n\n let lastPong = Date.now();\n\n // Start heartbeat ONLY AFTER connection established\n heartbeatInterval = setInterval(() => {\n if (finished) {\n if (heartbeatInterval) {\n clearInterval(heartbeatInterval);\n heartbeatInterval = null;\n }\n return;\n }\n\n if (this.rendered?.isClosed) {\n if (this.rendered.isClosed()) {\n fail(new RevibasePopupClosedError(\"Provider UI was closed\"));\n return;\n }\n } else if (this.rendered) {\n // If consumer didn't provide isClosed, we can't reliably detect.\n } else if (this.uiMode === \"iframe\") {\n // If the iframe is removed, treat as closed\n if (!this.frame?.iframe.isConnected) {\n fail(new RevibasePopupClosedError(\"Provider iframe was closed\"));\n return;\n }\n } else {\n if (this.popUp?.closed) {\n fail(new RevibasePopupClosedError(\"Popup was closed\"));\n return;\n }\n }\n\n // Check if port is still available\n if (!port) {\n fail(new RevibasePopupClosedError(\"Message channel lost\"));\n return;\n }\n\n const now = Date.now();\n\n // Check if we've lost connection (no pong in 2x heartbeat interval)\n if (now - lastPong > HEARTBEAT_INTERVAL * 2) {\n fail(\n new RevibasePopupClosedError(\n \"Lost connection to popup (heartbeat timeout)\",\n ),\n );\n return;\n }\n\n // Send ping\n try {\n port.postMessage({ type: \"ping\" });\n } catch (err) {\n fail(new RevibasePopupClosedError(\"Failed to send heartbeat\"));\n }\n }, HEARTBEAT_INTERVAL);\n\n // Handle messages from popup\n port.onmessage = (ev: MessageEvent<PopupPortMessage>): void => {\n if (finished) return;\n const msg = ev.data;\n\n switch (msg.type) {\n case \"pong\":\n lastPong = Date.now();\n break;\n\n case \"popup-complete\":\n if (msg.payload) {\n succeed(msg.payload);\n } else {\n fail(new RevibaseAuthError(\"Invalid completion payload\"));\n }\n break;\n\n case \"popup-rejected\":\n fail(new RevibaseAuthError(\"User rejected the operation\"));\n break;\n\n case \"popup-error\":\n fail(new RevibaseAuthError(msg.error || \"Unknown popup error\"));\n break;\n\n case \"popup-closed\":\n fail(new RevibasePopupClosedError(\"User closed popup\"));\n break;\n\n default:\n console.warn(\"Unknown message type from popup:\", msg);\n }\n };\n\n // Handle port errors\n port.onmessageerror = () => {\n fail(new RevibaseAuthError(\"Message deserialization error\"));\n };\n\n // Send init message to popup with port2\n try {\n if (this.rendered) {\n this.rendered.targetWindow.postMessage(\n {\n type: \"popup-init\",\n rid,\n },\n this.providerOrigin,\n [channel.port2],\n );\n } else if (this.uiMode === \"iframe\") {\n this.frame?.iframe.contentWindow?.postMessage(\n {\n type: \"popup-init\",\n rid,\n },\n this.providerOrigin,\n [channel.port2],\n );\n } else {\n this.popUp?.postMessage(\n {\n type: \"popup-init\",\n rid,\n },\n this.providerOrigin,\n [channel.port2],\n );\n }\n } catch (err) {\n fail(new RevibaseAuthError(`Failed to initialize popup: ${err}`));\n return;\n }\n\n // Call the callback to get the request\n onConnectedCallback(rid, clientOrigin)\n .then((result) => {\n // Verify we're still active\n if (finished || !port) {\n return;\n }\n if (this.rendered?.isClosed) {\n if (this.rendered.isClosed()) return;\n } else if (this.uiMode === \"iframe\") {\n if (!this.frame?.iframe.isConnected) return;\n } else {\n if (this.popUp?.closed) return;\n }\n\n // Send the request to popup\n try {\n port.postMessage({\n type: \"popup-start\",\n payload: result,\n });\n } catch (err) {\n fail(\n new RevibaseAuthError(`Failed to send request to popup: ${err}`),\n );\n return;\n }\n\n // Clear any existing request timeout\n if (requestTimeoutId) {\n clearTimeout(requestTimeoutId);\n requestTimeoutId = null;\n }\n\n // Calculate TTL and set new timeout\n const timeoutDuration = Math.max(\n 0,\n result.request.validTill - Date.now(),\n );\n\n requestTimeoutId = setTimeout(() => {\n fail(new RevibaseTimeoutError(\"Request expired\"));\n }, timeoutDuration);\n })\n .catch((err) => {\n fail(err);\n });\n };\n\n // Attach connect listener\n window.addEventListener(\"message\", onConnect);\n }\n}\n","/** Sign-in message text (domain + nonce). */\nexport function createSignInMessageText(input: {\n domain?: string;\n nonce: string;\n}): string {\n const message = input.domain\n ? `${input.domain} wants you to sign in with your account.`\n : \"Sign in with your account.\";\n\n const fields: string[] = [];\n\n if (input.nonce) {\n fields.push(`Nonce: ${input.nonce}`);\n }\n\n return fields.length > 0 ? `${message}\\n\\n${fields.join(\"\\n\")}` : message;\n}\n","/**\n * Checks if an error is network-related (e.g., load failed, network errors)\n */\nfunction isNetworkError(err: Error): boolean {\n const msg = err?.message || \"\";\n return (\n msg === \"Failed to fetch\" ||\n msg.includes(\"Load failed\") ||\n msg.includes(\"NetworkError\") ||\n msg.includes(\"ERR_NETWORK\")\n );\n}\n\n/**\n * Retries a function with exponential backoff on network errors only.\n * @param fn - The async function to retry\n * @param maxAttempts - Maximum number of attempts (default: 3)\n * @param initialDelay - Initial delay in ms (default: 100)\n * @param maxDelay - Maximum delay in ms (default: 5000)\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n maxAttempts = 3,\n initialDelay = 500,\n maxDelay = 5000,\n): Promise<T> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // Only retry on network errors\n if (!isNetworkError(lastError)) {\n throw lastError;\n }\n\n // Don't retry on the last attempt\n if (attempt === maxAttempts - 1) {\n break;\n }\n\n // Calculate exponential backoff delay\n const delay = Math.min(initialDelay * Math.pow(2, attempt), maxDelay);\n\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n","import type { CompleteMessageRequest } from \"@revibase/core\";\nimport type { SignInAuthorizationFlowOptions } from \"../types\";\n\nexport async function fetchSignatureFromTransactionManager({\n data,\n url,\n options,\n}: {\n data: {\n publicKey: string;\n payload: CompleteMessageRequest;\n };\n url: string;\n options?: SignInAuthorizationFlowOptions;\n}) {\n const maxAttempts = 10;\n const retryDelayMs = 400;\n const wsUrl = toWebSocketUrl(url);\n const { pendingApprovalsCallback, signal } = options ?? {};\n\n for (let i = 0; i < maxAttempts; i++) {\n if (signal?.aborted) throw Error(\"Aborted\");\n let signatures: string[] | undefined;\n let ws: WebSocket | undefined;\n try {\n ws = await openWebSocket(wsUrl, signal);\n ws.send(JSON.stringify({ type: \"message\", data }));\n await readWebSocketJsonEvents(\n ws,\n (event, data) => {\n if (event === \"error\") {\n const err =\n data &&\n typeof data === \"object\" &&\n typeof (data as { error?: string }).error === \"string\"\n ? (data as { error: string }).error\n : \"Unknown error\";\n const e = new Error(err) as Error & { noRetry: true };\n e.noRetry = true;\n throw e;\n }\n if (event === \"signatures\") {\n signatures = (data as { signatures?: string[] }).signatures;\n return true;\n }\n if (event === \"pending_transaction_approval\") {\n pendingApprovalsCallback?.onPendingApprovalsCallback?.(\n (data as { validTill: number }).validTill,\n );\n } else if (event === \"transaction_approved\") {\n pendingApprovalsCallback?.onPendingApprovalsSuccess?.();\n }\n return false;\n },\n signal,\n );\n } catch (e: unknown) {\n if (e && typeof e === \"object\" && (e as { noRetry?: true }).noRetry) {\n throw new Error(`${(e as Error).message}`);\n }\n if (\n e &&\n typeof e === \"object\" &&\n (e as { name?: string }).name === \"AbortError\"\n )\n throw e;\n } finally {\n try {\n ws?.close();\n } catch {\n /* ignore */\n }\n }\n if (signatures?.length) {\n return signatures[0];\n }\n if (i < maxAttempts - 1)\n await new Promise((resolve) => setTimeout(resolve, retryDelayMs));\n }\n throw new Error(\"Transaction manager: missing signatures\");\n}\n\nfunction toWebSocketUrl(httpUrl: string): string {\n const u = new URL(httpUrl);\n if (u.protocol === \"https:\") u.protocol = \"wss:\";\n else if (u.protocol === \"http:\") u.protocol = \"ws:\";\n return u.toString();\n}\n\nfunction openWebSocket(url: string, signal?: AbortSignal): Promise<WebSocket> {\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(url);\n\n const onAbort = () => {\n try {\n ws.close();\n } catch {\n /* ignore */\n }\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n ws.onopen = () => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve(ws);\n };\n ws.onerror = () => {\n signal?.removeEventListener(\"abort\", onAbort);\n reject(new Error(\"WebSocket connection failed\"));\n };\n });\n}\n\nasync function readWebSocketJsonEvents(\n ws: WebSocket,\n onEvent: (event: string, data: any) => boolean,\n signal?: AbortSignal,\n): Promise<void> {\n return new Promise((resolve, reject) => {\n let settled = false;\n\n const cleanup = () => {\n signal?.removeEventListener(\"abort\", onAbort);\n ws.removeEventListener(\"message\", onMessage);\n ws.removeEventListener(\"error\", onError);\n ws.removeEventListener(\"close\", onClose);\n };\n\n const finish = (fn: () => void) => {\n if (settled) return;\n settled = true;\n cleanup();\n fn();\n };\n\n const onAbort = () => {\n try {\n ws.close();\n } catch {\n /* ignore */\n }\n };\n signal?.addEventListener(\"abort\", onAbort);\n\n const onMessage = (ev: MessageEvent) => {\n if (typeof ev.data !== \"string\") return;\n let parsed: { event?: string; data?: unknown };\n try {\n parsed = JSON.parse(ev.data);\n } catch {\n return;\n }\n const event = typeof parsed.event === \"string\" ? parsed.event : \"message\";\n const data = parsed.data;\n try {\n if (onEvent(event, data)) {\n finish(() => resolve());\n }\n } catch (e) {\n finish(() => reject(e));\n }\n };\n\n const onError = () => {\n finish(() => reject(new Error(\"Transaction manager request failed\")));\n };\n\n const onClose = () => {\n finish(() => resolve());\n };\n\n ws.addEventListener(\"message\", onMessage);\n ws.addEventListener(\"error\", onError);\n ws.addEventListener(\"close\", onClose);\n });\n}\n","import {\n convertMemberKeyToString,\n fetchSettings,\n fetchUser,\n getSettingsFromIndex,\n getSolanaRpc,\n getUserAddress,\n UserRole,\n type CompleteMessageRequest,\n} from \"@revibase/core\";\nimport { address } from \"@solana/kit\";\nimport { withRetry } from \"../retry\";\nimport type { SignInAuthorizationFlowOptions } from \"../types\";\nimport { fetchSignatureFromTransactionManager } from \"./fetchSIgnatureFromTransactionManager\";\n\nexport async function send2FARequestIfNeeded(\n request: CompleteMessageRequest,\n options?: SignInAuthorizationFlowOptions,\n): Promise<{ publicKey: string; signature: string } | null> {\n const { startRequest } = request.data.payload;\n\n if (!startRequest.data.requireTwoFactorAuthentication) {\n return null;\n }\n\n const settingsData = (\n await withRetry(async () =>\n fetchSettings(\n getSolanaRpc(),\n await getSettingsFromIndex(\n request.data.payload.user.settingsIndexWithAddress.index,\n ),\n ),\n )\n ).data;\n const transactionManager = settingsData.members.find(\n (x) => x.role === UserRole.TransactionManager,\n );\n if (!transactionManager) {\n throw new Error(\"No transaction manager found.\");\n }\n const publicKey = convertMemberKeyToString(transactionManager.pubkey);\n const userAccountData = (\n await withRetry(async () =>\n fetchUser(getSolanaRpc(), await getUserAddress(address(publicKey))),\n )\n ).data;\n if (userAccountData.transactionManagerUrl.__option === \"None\") {\n throw new Error(\"No transaction manager url found.\");\n }\n const signature = await fetchSignatureFromTransactionManager({\n data: {\n publicKey,\n payload: request,\n },\n url: userAccountData.transactionManagerUrl.value,\n options,\n });\n\n return { publicKey, signature };\n}\n","import { type CompleteMessageRequest, type UserInfo } from \"@revibase/core\";\nimport { getBase64Decoder } from \"@solana/kit\";\nimport { RevibaseProvider } from \"../provider/main\";\nimport { createSignInMessageText } from \"../utils/internal\";\nimport { send2FARequestIfNeeded } from \"../utils/message\";\nimport { withRetry } from \"../utils/retry\";\nimport type { SignInAuthorizationFlowOptions } from \"../utils/types\";\n\nexport async function signIn(\n provider: RevibaseProvider,\n options?: SignInAuthorizationFlowOptions,\n): Promise<{ user: UserInfo }> {\n const onConnectedCallback = async (rid: string, clientOrigin: string) => {\n const payload = {\n phase: \"start\" as const,\n rid,\n providerOrigin: provider.providerOrigin,\n rpId: provider.rpId,\n data: {\n type: \"message\" as const,\n payload: createSignInMessageText({\n domain: clientOrigin,\n nonce: getBase64Decoder().decode(\n crypto.getRandomValues(new Uint8Array(16)),\n ),\n }),\n requireTwoFactorAuthentication:\n options?.requireTwoFactorAuthentication ?? false,\n },\n clientOrigin,\n };\n\n const { signature, validTill } = await withRetry(() =>\n provider.onClientAuthorizationCallback(payload),\n );\n return { request: { ...payload, rid, validTill }, signature };\n };\n\n const onSuccessCallback = async (\n result: CompleteMessageRequest,\n ): Promise<{ user: UserInfo }> => {\n const transactionManager = await send2FARequestIfNeeded(result, options);\n await provider.onClientAuthorizationCallback(\n !transactionManager\n ? result\n : {\n ...result,\n data: {\n ...result.data,\n payload: { ...result.data.payload, transactionManager },\n },\n },\n );\n return { user: result.data.payload.user };\n };\n\n return provider.sendRequestToPopupProvider({\n onConnectedCallback,\n onSuccessCallback,\n signal: options?.signal,\n });\n}\n","import {\n getSolanaRpc,\n getSolanaRpcEndpoint,\n type TransactionDetails,\n} from \"@revibase/core\";\nimport {\n getSetComputeUnitLimitInstruction,\n getSetComputeUnitPriceInstruction,\n} from \"@solana-program/compute-budget\";\nimport {\n AccountRole,\n appendTransactionMessageInstructions,\n compileTransaction,\n compressTransactionMessageUsingAddressLookupTables,\n createTransactionMessage,\n getBase64EncodedWireTransaction,\n getBlockhashDecoder,\n getSignatureFromTransaction,\n pipe,\n prependTransactionMessageInstructions,\n setTransactionMessageFeePayerSigner,\n setTransactionMessageLifetimeUsingBlockhash,\n signTransactionMessageWithSigners,\n type AccountMeta,\n type Rpc,\n type SolanaRpcApi,\n} from \"@solana/kit\";\nimport type { RevibaseProvider } from \"../../provider\";\nimport { withRetry } from \"../retry\";\n\nexport async function signAndSendTransaction({\n instructions,\n payer,\n addressesByLookupTableAddress,\n}: TransactionDetails): Promise<string> {\n const latestBlockHash = await withRetry(() =>\n getSolanaRpc().getLatestBlockhash().send(),\n );\n const tx = await pipe(\n createTransactionMessage({ version: 0 }),\n (tx) => appendTransactionMessageInstructions(instructions, tx),\n (tx) => setTransactionMessageFeePayerSigner(payer, tx),\n (tx) =>\n setTransactionMessageLifetimeUsingBlockhash(latestBlockHash.value, tx),\n (tx) =>\n addressesByLookupTableAddress\n ? compressTransactionMessageUsingAddressLookupTables(\n tx,\n addressesByLookupTableAddress,\n )\n : tx,\n async (tx) => {\n const [unitsConsumed, priorityFees] = await Promise.all([\n getComputeUnitsEstimate(tx),\n getMedianPriorityFees(\n getSolanaRpc(),\n tx.instructions.flatMap((x) => x.accounts ?? []),\n ),\n ]);\n const computeUnits = Math.ceil((Number(unitsConsumed) ?? 0) * 1.1);\n return prependTransactionMessageInstructions(\n [\n ...(computeUnits > 200_000\n ? [\n getSetComputeUnitLimitInstruction({\n units: computeUnits,\n }),\n ]\n : []),\n ...(priorityFees > 0\n ? [\n getSetComputeUnitPriceInstruction({\n microLamports: priorityFees,\n }),\n ]\n : []),\n ],\n tx,\n );\n },\n async (tx) =>\n await withRetry(async () => signTransactionMessageWithSigners(await tx)),\n );\n await withRetry(() =>\n getSolanaRpc()\n .sendTransaction(getBase64EncodedWireTransaction(tx), {\n skipPreflight: true,\n encoding: \"base64\",\n })\n .send(),\n );\n\n return getSignatureFromTransaction(tx);\n}\n\nexport async function signAndSendBundledTransactions(\n provider: RevibaseProvider,\n bundle: TransactionDetails[],\n): Promise<string> {\n const simulationBundle = await createEncodedBundle(bundle, true);\n const computeUnits = await simulateBundle(\n simulationBundle.map(getBase64EncodedWireTransaction),\n getSolanaRpcEndpoint(),\n );\n const encodedBundle = await createEncodedBundle(\n bundle.map((x, index) => ({\n ...x,\n unitsConsumed: computeUnits[index],\n })),\n );\n await withRetry(() =>\n provider.onSendJitoBundleCallback(\n encodedBundle.map(getBase64EncodedWireTransaction),\n ),\n );\n return getSignatureFromTransaction(encodedBundle[encodedBundle.length - 1]);\n}\n\nexport async function simulateBundle(\n bundle: string[],\n connectionUrl: string,\n): Promise<number[]> {\n const response = await withRetry(() =>\n fetch(connectionUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: \"2\",\n method: \"simulateBundle\",\n params: [\n {\n encodedTransactions: bundle,\n },\n {\n skipSigVerify: true,\n replaceRecentBlockhash: true,\n preExecutionAccountsConfigs: bundle.map(() => ({\n encoding: \"base64\",\n addresses: [],\n })),\n postExecutionAccountsConfigs: bundle.map(() => ({\n encoding: \"base64\",\n addresses: [],\n })),\n },\n ],\n }),\n }),\n );\n\n const data = (await response.json()) as {\n result?: {\n value: {\n transactionResults: { unitsConsumed: number }[];\n summary:\n | string\n | {\n failed?: {\n error: {\n TransactionFailure: [unknown, string];\n };\n };\n };\n };\n };\n error?: unknown;\n };\n\n if (!data.result || data.error) {\n throw new Error(\n `Unable to simulate bundle: ${JSON.stringify(data.error ?? data.result)}`,\n );\n }\n\n if (\n typeof data.result.value.summary !== \"string\" &&\n data.result.value.summary.failed\n ) {\n const { TransactionFailure } = data.result.value.summary.failed.error;\n const [, programError] = TransactionFailure;\n throw new Error(`Simulation failed: ${programError}`);\n }\n\n return data.result.value.transactionResults.map((x) => x.unitsConsumed);\n}\n\nasync function createEncodedBundle(\n bundle: (TransactionDetails & { unitsConsumed?: number })[],\n isSimulate = false,\n) {\n const latestBlockHash = isSimulate\n ? {\n blockhash: getBlockhashDecoder().decode(\n crypto.getRandomValues(new Uint8Array(32)),\n ),\n lastValidBlockHeight: BigInt(Number.MAX_SAFE_INTEGER),\n }\n : (await withRetry(() => getSolanaRpc().getLatestBlockhash().send())).value;\n return await Promise.all(\n bundle.map(async (x) => {\n const tx = await pipe(\n createTransactionMessage({ version: 0 }),\n (tx) => appendTransactionMessageInstructions(x.instructions, tx),\n (tx) => setTransactionMessageFeePayerSigner(x.payer, tx),\n (tx) =>\n setTransactionMessageLifetimeUsingBlockhash(latestBlockHash, tx),\n (tx) =>\n x.addressesByLookupTableAddress\n ? compressTransactionMessageUsingAddressLookupTables(\n tx,\n x.addressesByLookupTableAddress,\n )\n : tx,\n (tx) => {\n const computeUnits = Math.ceil((x.unitsConsumed ?? 0) * 1.1);\n return computeUnits > 200_000\n ? prependTransactionMessageInstructions(\n [\n getSetComputeUnitLimitInstruction({\n units: computeUnits,\n }),\n ],\n tx,\n )\n : tx;\n },\n async (tx) =>\n isSimulate\n ? compileTransaction(tx)\n : await withRetry(() => signTransactionMessageWithSigners(tx)),\n );\n return tx;\n }),\n );\n}\n\nasync function getComputeUnitsEstimate(\n transactionMessage: Parameters<typeof compileTransaction>[0],\n) {\n const transactionMessageWithComputeUnitAndPriorityFees =\n prependTransactionMessageInstructions(\n [\n getSetComputeUnitLimitInstruction({ units: 800_000 }),\n getSetComputeUnitPriceInstruction({ microLamports: 10_000 }),\n ],\n transactionMessage,\n );\n const transaction = compileTransaction(\n transactionMessageWithComputeUnitAndPriorityFees,\n );\n const simulatedTransaction = await withRetry(() =>\n getSolanaRpc()\n .simulateTransaction(getBase64EncodedWireTransaction(transaction), {\n encoding: \"base64\",\n })\n .send(),\n );\n if (simulatedTransaction.value.err) {\n if (simulatedTransaction.value.logs) {\n const errorMessage = [\n \"Transaction simulation failed:\",\n \"\",\n ...simulatedTransaction.value.logs,\n ].join(\"\\n\");\n throw new Error(errorMessage);\n }\n const errorMessage = [\n \"Transaction simulation failed:\",\n \"\",\n simulatedTransaction.value.err.toString(),\n ].join(\"\\n\");\n throw new Error(errorMessage);\n }\n return simulatedTransaction.value.unitsConsumed;\n}\n\nexport async function getMedianPriorityFees(\n connection: Rpc<SolanaRpcApi>,\n accounts: AccountMeta[],\n): Promise<number> {\n const recentFees = await withRetry(() =>\n connection\n .getRecentPrioritizationFees(\n accounts\n .filter(\n (x) =>\n x.role === AccountRole.WRITABLE ||\n x.role === AccountRole.WRITABLE_SIGNER,\n )\n .map((x) => x.address),\n )\n .send(),\n );\n const fees = recentFees.map((f) => Number(f.prioritizationFee));\n fees.sort((a, b) => a - b);\n const mid = Math.floor(fees.length / 2);\n\n if (fees.length % 2 === 0) {\n return Math.round((fees[mid - 1] + fees[mid]) / 2);\n } else {\n return fees[mid];\n }\n}\n","import {\n createTransactionManagerSigner,\n fetchUser,\n getSolanaRpc,\n getUserAddress,\n type TransactionAuthDetails,\n} from \"@revibase/core\";\nimport {\n address,\n fetchAddressesForLookupTables,\n getBase58Encoder,\n getBase64Decoder,\n getTransactionEncoder,\n type Address,\n type AddressesByLookupTableAddress,\n type ReadonlyUint8Array,\n type SignatureBytes,\n type TransactionSigner,\n} from \"@solana/kit\";\nimport { fetchMaybeAddressLookupTable } from \"@solana-program/address-lookup-table\";\nimport {\n REVIBASE_API_ENDPOINT,\n REVIBASE_LOOKUP_TABLE_ADDRESS,\n} from \"../consts\";\nimport { withRetry } from \"../retry\";\n\nconst payerCache = new Map<string, TransactionSigner>();\n\nexport async function getRandomPayer(): Promise<TransactionSigner> {\n const cached = payerCache.get(REVIBASE_API_ENDPOINT);\n if (cached) return cached;\n\n const response = await withRetry(() =>\n fetch(`${REVIBASE_API_ENDPOINT}/getRandomPayer`),\n );\n\n if (!response.ok) {\n throw new Error(`Failed to get random payer: ${response.statusText}`);\n }\n\n const { randomPayer } = (await response.json()) as { randomPayer: string };\n const payer = createTransactionSigner(\n address(randomPayer),\n `${REVIBASE_API_ENDPOINT}/sign`,\n );\n payerCache.set(REVIBASE_API_ENDPOINT, payer);\n return payer;\n}\n\nfunction createTransactionSigner(\n publicKey: Address,\n url: string,\n): TransactionSigner {\n const payer: TransactionSigner = {\n address: publicKey,\n async signTransactions(transactions) {\n const payload = {\n publicKey: publicKey,\n transactions: transactions.map((tx) =>\n getBase64Decoder().decode(getTransactionEncoder().encode(tx)),\n ),\n };\n\n const signResponse = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n if (!signResponse.ok) {\n throw new Error(\n `Failed to sign transactions: ${signResponse.statusText}`,\n );\n }\n\n const data = (await signResponse.json()) as\n | { signatures: string[] }\n | { error: string };\n\n if (\"error\" in data) {\n throw new Error(data.error);\n }\n\n return data.signatures.map((sig) => ({\n [publicKey]: getBase58Encoder().encode(sig) as SignatureBytes,\n }));\n },\n };\n\n return payer;\n}\n\nexport async function getTransactionManagerSigner(args: {\n transactionManagerAddress: Address | undefined;\n authResponses?: TransactionAuthDetails[];\n transactionMessageBytes?: ReadonlyUint8Array;\n onPendingApprovalsCallback?: (validTill: number) => void;\n onPendingApprovalsSuccess?: () => void;\n abortController?: AbortController;\n abortSignal?: AbortSignal;\n}) {\n const {\n transactionManagerAddress,\n transactionMessageBytes,\n authResponses,\n onPendingApprovalsCallback,\n onPendingApprovalsSuccess,\n abortController: abortControllerArg,\n abortSignal,\n } = args;\n\n let abortController = abortControllerArg;\n if (abortSignal && !abortController) {\n const ac = new AbortController();\n if (abortSignal.aborted) {\n ac.abort();\n } else {\n abortSignal.addEventListener(\"abort\", () => ac.abort(), { once: true });\n }\n abortController = ac;\n }\n let url;\n if (transactionManagerAddress) {\n const txManagerUrl = (\n await withRetry(async () =>\n fetchUser(\n getSolanaRpc(),\n await getUserAddress(transactionManagerAddress),\n ),\n )\n ).data.transactionManagerUrl;\n url = txManagerUrl.__option === \"Some\" ? txManagerUrl.value : null;\n }\n\n const transactionManagerSigner =\n transactionManagerAddress && url\n ? createTransactionManagerSigner({\n address: transactionManagerAddress,\n url,\n authResponses,\n transactionMessageBytes,\n onPendingApprovalsCallback,\n onPendingApprovalsSuccess,\n abortController,\n })\n : null;\n\n return transactionManagerSigner;\n}\n\nexport async function fetchAdditionalLoopUpTableIfNecessary(\n addressesByLookupTableAddress?: AddressesByLookupTableAddress,\n) {\n if (!addressesByLookupTableAddress) {\n return await withRetry(() =>\n fetchAddressesForLookupTables(\n [address(REVIBASE_LOOKUP_TABLE_ADDRESS)],\n getSolanaRpc(),\n ),\n );\n }\n\n if (REVIBASE_LOOKUP_TABLE_ADDRESS in addressesByLookupTableAddress) {\n return addressesByLookupTableAddress;\n }\n\n const fetched = await withRetry(() =>\n fetchMaybeAddressLookupTable(\n getSolanaRpc(),\n address(REVIBASE_LOOKUP_TABLE_ADDRESS),\n ),\n );\n\n if (fetched.exists) {\n return {\n ...addressesByLookupTableAddress,\n [fetched.address]: fetched.data.addresses,\n };\n }\n\n return addressesByLookupTableAddress;\n}\n","import {\n getSignedSecp256r1Key,\n prepareTransactionBundle,\n SignedSecp256r1Key,\n type TransactionAuthenticationResponse,\n} from \"@revibase/core\";\nimport {\n address,\n getBase64Encoder,\n type Address,\n type TransactionSigner,\n} from \"@solana/kit\";\nimport type { RevibaseProvider } from \"../../provider\";\nimport { withRetry } from \"../retry\";\nimport type { TransactionAuthorizationFlowOptions } from \"../types\";\nimport { signAndSendBundledTransactions } from \"./solana-send\";\nimport {\n fetchAdditionalLoopUpTableIfNecessary,\n getTransactionManagerSigner,\n} from \"./utils\";\n\nexport async function processBundledTransaction(\n provider: RevibaseProvider,\n params: {\n authResponse: TransactionAuthenticationResponse;\n settings: Address;\n payer: TransactionSigner;\n additionalVoters?: (TransactionSigner | SignedSecp256r1Key)[];\n additionalSigners?: TransactionSigner[];\n options?: TransactionAuthorizationFlowOptions;\n },\n): Promise<string> {\n const {\n authResponse,\n settings,\n additionalSigners,\n additionalVoters,\n options,\n payer,\n } = params;\n const { startRequest, transactionManagerAddress } = authResponse;\n if (startRequest.data.type !== \"transaction\")\n throw new Error(\"Invalid request type.\");\n\n const { transactionActionType, transactionMessageBytes } =\n startRequest.data.payload;\n\n if (\n transactionActionType !== \"execute\" &&\n transactionActionType !== \"create_with_preauthorized_execution\"\n ) {\n throw new Error(\n \"Transaction action type must be 'execute' or 'create_with_preauthorized_execution'\",\n );\n }\n\n const signedSigner = await getSignedSecp256r1Key(authResponse);\n\n const [transactionManagerSigner, jitoBundlesTipAmount] = await Promise.all([\n getTransactionManagerSigner({\n authResponses: [authResponse],\n transactionManagerAddress: transactionManagerAddress\n ? address(transactionManagerAddress)\n : undefined,\n transactionMessageBytes: getBase64Encoder().encode(\n transactionMessageBytes,\n ),\n onPendingApprovalsCallback:\n options?.pendingApprovalsCallback?.onPendingApprovalsCallback,\n onPendingApprovalsSuccess:\n options?.pendingApprovalsCallback?.onPendingApprovalsSuccess,\n abortSignal: options?.signal,\n }),\n withRetry(() => provider.onEstimateJitoTipsCallback()),\n ]);\n\n const bundle = await prepareTransactionBundle({\n settings,\n transactionMessageBytes: getBase64Encoder().encode(\n transactionMessageBytes,\n ) as Uint8Array<ArrayBuffer>,\n creator: transactionManagerSigner ?? signedSigner,\n executor: transactionManagerSigner ? signedSigner : undefined,\n jitoBundlesTipAmount,\n additionalVoters,\n additionalSigners,\n payer,\n });\n\n const bundlesWithLookupTables = await Promise.all(\n bundle.map(async (x) => ({\n ...x,\n addressesByLookupTableAddress:\n await fetchAdditionalLoopUpTableIfNecessary(\n x.addressesByLookupTableAddress,\n ),\n })),\n );\n\n return signAndSendBundledTransactions(provider, bundlesWithLookupTables);\n}\n","import {\n getSignedSecp256r1Key,\n prepareTransactionSync,\n SignedSecp256r1Key,\n type TransactionAuthenticationResponse,\n} from \"@revibase/core\";\nimport {\n address,\n getBase64Encoder,\n type Address,\n type TransactionSigner,\n} from \"@solana/kit\";\nimport type { TransactionAuthorizationFlowOptions } from \"../types\";\nimport { signAndSendTransaction } from \"./solana-send\";\nimport {\n fetchAdditionalLoopUpTableIfNecessary,\n getTransactionManagerSigner,\n} from \"./utils\";\n\nexport async function processSyncTransaction(params: {\n authResponse: TransactionAuthenticationResponse;\n settings: Address;\n payer: TransactionSigner;\n additionalVoters?: (TransactionSigner | SignedSecp256r1Key)[];\n additionalSigners?: TransactionSigner[];\n options?: TransactionAuthorizationFlowOptions;\n}): Promise<string> {\n const {\n authResponse,\n settings,\n payer,\n additionalSigners,\n additionalVoters,\n options,\n } = params;\n const { startRequest, transactionManagerAddress } = authResponse;\n if (startRequest.data.type !== \"transaction\")\n throw new Error(\"Invalid request type.\");\n\n const { transactionActionType, transactionMessageBytes } =\n startRequest.data.payload;\n\n if (transactionActionType !== \"sync\") {\n throw new Error(\"Transaction action type must be 'sync'\");\n }\n\n const signedSigner = await getSignedSecp256r1Key(authResponse);\n\n const transactionManagerSigner = await getTransactionManagerSigner({\n authResponses: [authResponse],\n transactionManagerAddress: transactionManagerAddress\n ? address(transactionManagerAddress)\n : undefined,\n transactionMessageBytes: getBase64Encoder().encode(transactionMessageBytes),\n onPendingApprovalsCallback:\n options?.pendingApprovalsCallback?.onPendingApprovalsCallback,\n onPendingApprovalsSuccess:\n options?.pendingApprovalsCallback?.onPendingApprovalsSuccess,\n abortSignal: options?.signal,\n });\n\n const signers = transactionManagerSigner\n ? [signedSigner, transactionManagerSigner, ...(additionalVoters ?? [])]\n : [signedSigner, ...(additionalVoters ?? [])];\n\n const { instructions, addressesByLookupTableAddress } =\n await prepareTransactionSync({\n signers,\n payer,\n transactionMessageBytes: getBase64Encoder().encode(\n transactionMessageBytes,\n ),\n settings,\n additionalSigners,\n });\n\n return signAndSendTransaction({\n instructions,\n payer,\n addressesByLookupTableAddress: await fetchAdditionalLoopUpTableIfNecessary(\n addressesByLookupTableAddress,\n ),\n });\n}\n","import {\n getSignedSecp256r1Key,\n nativeTransferIntent,\n SignedSecp256r1Key,\n tokenTransferIntent,\n type TransactionAuthenticationResponse,\n} from \"@revibase/core\";\nimport { SYSTEM_PROGRAM_ADDRESS } from \"@solana-program/system\";\nimport {\n address,\n getAddressDecoder,\n getBase64Encoder,\n getU64Decoder,\n type Address,\n type TransactionSigner,\n} from \"@solana/kit\";\nimport type { TransactionAuthorizationFlowOptions } from \"../types\";\nimport { signAndSendTransaction } from \"./solana-send\";\nimport {\n fetchAdditionalLoopUpTableIfNecessary,\n getTransactionManagerSigner,\n} from \"./utils\";\n\nexport async function processTokenTransfer(params: {\n authResponse: TransactionAuthenticationResponse;\n settings: Address;\n additionalVoters?: (TransactionSigner | SignedSecp256r1Key)[];\n payer: TransactionSigner;\n options?: TransactionAuthorizationFlowOptions;\n}): Promise<string> {\n const { authResponse, settings, options, payer, additionalVoters } = params;\n const { startRequest, transactionManagerAddress } = authResponse;\n if (startRequest.data.type !== \"transaction\")\n throw new Error(\"Invalid request type.\");\n\n const { transactionActionType, transactionAddress, transactionMessageBytes } =\n startRequest.data.payload;\n\n if (transactionActionType !== \"transfer_intent\") {\n throw new Error(\"Transaction action type must be 'transfer_intent'\");\n }\n\n const message = getBase64Encoder().encode(transactionMessageBytes);\n const amount = getU64Decoder().decode(message.slice(0, 8));\n const destination = getAddressDecoder().decode(message.slice(8, 40));\n const mint = getAddressDecoder().decode(message.slice(40, 72));\n\n const signedSigner = await getSignedSecp256r1Key(authResponse);\n\n const transactionManagerSigner = await getTransactionManagerSigner({\n authResponses: [authResponse],\n transactionManagerAddress: transactionManagerAddress\n ? address(transactionManagerAddress)\n : undefined,\n transactionMessageBytes: getBase64Encoder().encode(transactionMessageBytes),\n onPendingApprovalsCallback:\n options?.pendingApprovalsCallback?.onPendingApprovalsCallback,\n onPendingApprovalsSuccess:\n options?.pendingApprovalsCallback?.onPendingApprovalsSuccess,\n abortSignal: options?.signal,\n });\n\n const signers = transactionManagerSigner\n ? [signedSigner, transactionManagerSigner, ...(additionalVoters ?? [])]\n : [signedSigner, ...(additionalVoters ?? [])];\n\n const instructions =\n mint !== SYSTEM_PROGRAM_ADDRESS\n ? await tokenTransferIntent({\n payer,\n settings,\n amount,\n signers,\n destination,\n mint,\n tokenProgram: address(transactionAddress),\n })\n : await nativeTransferIntent({\n settings,\n amount,\n signers,\n destination,\n });\n\n return signAndSendTransaction({\n instructions,\n payer,\n addressesByLookupTableAddress:\n await fetchAdditionalLoopUpTableIfNecessary(undefined),\n });\n}\n","import { getSolanaRpc } from \"@revibase/core\";\nimport type { Signature } from \"@solana/kit\";\nimport { withRetry } from \"../retry\";\n\nexport async function pollTransactionConfirmation(\n txSig: string,\n maxRetries = 30,\n delayMs = 2000,\n): Promise<string> {\n for (let i = 0; i < maxRetries; i++) {\n const status = await withRetry(() =>\n getSolanaRpc()\n .getSignatureStatuses([txSig as Signature])\n .send(),\n );\n\n const confirmation = status.value[0];\n\n if (\n confirmation?.confirmationStatus === \"confirmed\" ||\n confirmation?.confirmationStatus === \"finalized\"\n ) {\n return txSig;\n }\n\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n\n throw new Error(\"Transaction confirmation timeout\");\n}\n","import type { SignedSecp256r1Key } from \"@revibase/core\";\nimport {\n getSettingsFromIndex,\n type CompleteTransactionRequest,\n} from \"@revibase/core\";\nimport { address, type TransactionSigner } from \"@solana/kit\";\nimport type { RevibaseProvider } from \"../../provider\";\nimport type { TransactionAuthorizationFlowOptions } from \"../../utils\";\nimport { processBundledTransaction } from \"../../utils/transactions/processBundledTransaction\";\nimport { processSyncTransaction } from \"../../utils/transactions/processSyncTransaction\";\nimport { processTokenTransfer } from \"../../utils/transactions/processTokenTransfer\";\nimport { pollTransactionConfirmation } from \"./pollTransactionConfirmation\";\n\nexport async function sendTransaction(\n provider: RevibaseProvider,\n params: {\n request: CompleteTransactionRequest;\n additionalVoters?: (TransactionSigner | SignedSecp256r1Key)[];\n additionalSigners?: TransactionSigner[];\n options?: TransactionAuthorizationFlowOptions;\n payer: TransactionSigner;\n },\n): Promise<string> {\n const { request, additionalSigners, options, payer, additionalVoters } =\n params;\n const { confirmTransaction = true } = options ?? {};\n\n const settings =\n request.data.type === \"transaction\" &&\n request.data.payload.startRequest.data.payload.transactionActionType !==\n \"transfer_intent\"\n ? request.data.payload.startRequest.data.payload.transactionAddress\n : request.data.payload.user.settingsIndexWithAddress?.index\n ? await getSettingsFromIndex(\n request.data.payload.user.settingsIndexWithAddress.index,\n )\n : null;\n\n if (!settings) {\n throw Error(\"User is not delegated to any wallet\");\n }\n let txSig: string;\n switch (\n request.data.payload.startRequest.data.payload.transactionActionType\n ) {\n case \"transfer_intent\":\n txSig = await processTokenTransfer({\n authResponse: request.data.payload,\n settings: address(settings),\n options,\n payer,\n additionalVoters,\n });\n break;\n case \"execute\":\n case \"create_with_preauthorized_execution\":\n txSig = await processBundledTransaction(provider, {\n authResponse: request.data.payload,\n settings: address(settings),\n additionalSigners,\n additionalVoters,\n options,\n payer,\n });\n break;\n case \"sync\":\n txSig = await processSyncTransaction({\n authResponse: request.data.payload,\n settings: address(settings),\n additionalSigners,\n additionalVoters,\n options,\n payer,\n });\n break;\n default:\n throw Error(\"Invalid Transaction Action Type for send tx payload.\");\n }\n\n if (confirmTransaction) {\n await pollTransactionConfirmation(txSig);\n }\n\n return txSig;\n}\n","import {\n convertMemberKeyToString,\n fetchSettings,\n getSettingsFromIndex,\n getSolanaRpc,\n KeyType,\n prepareTransactionMessage,\n SignedSecp256r1Key,\n UserRole,\n type CompleteTransactionRequest,\n type TransactionPayloadWithBase64MessageBytes,\n type UserInfo,\n} from \"@revibase/core\";\nimport {\n address,\n getBase64Decoder,\n type AddressesByLookupTableAddress,\n type Instruction,\n type TransactionSigner,\n} from \"@solana/kit\";\nimport type { RevibaseProvider } from \"../provider/main\";\nimport { withRetry } from \"../utils/retry\";\nimport { sendTransaction } from \"../utils/transactions\";\nimport { getRandomPayer } from \"../utils/transactions/utils\";\nimport type { TransactionAuthorizationFlowOptions } from \"../utils/types\";\n\n/** Custom transaction. Action from wallet settings (TransactionManager). Provider needs rpcEndpoint. Options: signal?, channelId?. */\nexport async function executeTransaction(\n provider: RevibaseProvider,\n args: {\n instructions: Instruction[];\n signer: UserInfo;\n payer?: TransactionSigner;\n settingsIndexWithAddress?: {\n index: number | bigint;\n };\n additionalSigners?: TransactionSigner[];\n additionalVoters?: (TransactionSigner | SignedSecp256r1Key)[];\n addressesByLookupTableAddress?: AddressesByLookupTableAddress;\n },\n options?: TransactionAuthorizationFlowOptions,\n): Promise<{ txSig?: string; user: UserInfo }> {\n const {\n instructions,\n signer,\n addressesByLookupTableAddress,\n settingsIndexWithAddress,\n additionalSigners,\n additionalVoters,\n payer,\n } = args;\n\n const onConnectedCallback = async (rid: string, clientOrigin: string) => {\n const transactionMessageBytes = prepareTransactionMessage({\n payer: address(signer.walletAddress),\n instructions,\n addressesByLookupTableAddress,\n });\n const settingsArgs =\n settingsIndexWithAddress ?? signer.settingsIndexWithAddress;\n const settings = await getSettingsFromIndex(settingsArgs.index);\n const settingsData = (\n await withRetry(() => fetchSettings(getSolanaRpc(), settings))\n ).data;\n const transactionManagerAddress = settingsData.members.find(\n (x) => x.role === UserRole.TransactionManager,\n )?.pubkey;\n const transactionPayload: TransactionPayloadWithBase64MessageBytes = {\n transactionMessageBytes: getBase64Decoder().decode(\n transactionMessageBytes,\n ),\n transactionAddress: settings,\n transactionActionType: transactionManagerAddress\n ? \"execute\"\n : \"create_with_preauthorized_execution\",\n };\n\n const payload = {\n phase: \"start\" as const,\n rid,\n providerOrigin: provider.providerOrigin,\n rpId: provider.rpId,\n data: {\n type: \"transaction\" as const,\n payload: transactionPayload,\n },\n clientOrigin,\n signer: signer.publicKey,\n };\n const { signature, validTill } = await withRetry(() =>\n provider.onClientAuthorizationCallback(payload),\n );\n return {\n request: { ...payload, rid, validTill },\n signature,\n transactionManagerAddress: transactionManagerAddress\n ? convertMemberKeyToString(transactionManagerAddress)\n : undefined,\n additionalSigners: additionalSigners?.map((x) => x.address.toString()),\n additionalVoters: additionalVoters?.map((x) =>\n x instanceof SignedSecp256r1Key\n ? { keyType: KeyType.Secp256r1, publicKey: x.toString() }\n : { keyType: KeyType.Ed25519, publicKey: x.address.toString() },\n ),\n payer: (payer ?? (await getRandomPayer())).address.toString(),\n };\n };\n\n const onSuccessCallback = async (\n result: CompleteTransactionRequest,\n ): Promise<{ txSig: string; user: UserInfo }> => {\n const { signature } = await provider.onClientAuthorizationCallback(result);\n\n const txSig = await sendTransaction(provider, {\n request: {\n ...result,\n data: {\n ...result.data,\n payload: {\n ...result.data.payload,\n client: { ...result.data.payload.client, jws: signature },\n },\n },\n },\n options,\n additionalSigners,\n additionalVoters,\n payer: payer ?? (await getRandomPayer()),\n });\n\n return { user: result.data.payload.user, txSig };\n };\n\n return provider.sendRequestToPopupProvider({\n onConnectedCallback,\n onSuccessCallback,\n signal: options?.signal,\n });\n}\n","import {\n KeyType,\n SignedSecp256r1Key,\n type CompleteTransactionRequest,\n type TransactionPayloadWithBase64MessageBytes,\n type UserInfo,\n} from \"@revibase/core\";\nimport { SYSTEM_PROGRAM_ADDRESS } from \"@solana-program/system\";\nimport { TOKEN_PROGRAM_ADDRESS } from \"@solana-program/token\";\nimport {\n address,\n getAddressEncoder,\n getBase64Decoder,\n getU64Encoder,\n type TransactionSigner,\n} from \"@solana/kit\";\nimport type { RevibaseProvider } from \"../provider/main\";\nimport { withRetry } from \"../utils/retry\";\nimport { sendTransaction } from \"../utils/transactions/sendTransaction\";\nimport { getRandomPayer } from \"../utils/transactions/utils\";\nimport type { TransactionAuthorizationFlowOptions } from \"../utils/types\";\n\n/** Transfers SOL or SPL (set mint for SPL). amount &gt; 0, destination required */\nexport async function transferTokens(\n provider: RevibaseProvider,\n args: {\n amount: number | bigint;\n destination: string;\n signer?: UserInfo;\n mint?: string;\n tokenProgram?: string;\n payer?: TransactionSigner;\n additionalVoters?: (TransactionSigner | SignedSecp256r1Key)[];\n },\n options?: TransactionAuthorizationFlowOptions,\n): Promise<{ txSig?: string; user: UserInfo }> {\n if (args.amount <= 0) {\n throw new Error(\"Transfer amount must be greater than 0\");\n }\n\n if (!args.destination || typeof args.destination !== \"string\") {\n throw new Error(\"Destination address is required\");\n }\n\n const {\n mint,\n tokenProgram = TOKEN_PROGRAM_ADDRESS,\n amount,\n destination,\n signer,\n payer,\n additionalVoters,\n } = args;\n\n const onConnectedCallback = async (rid: string, clientOrigin: string) => {\n const transactionPayload: TransactionPayloadWithBase64MessageBytes = {\n transactionActionType: \"transfer_intent\",\n transactionAddress: mint ? tokenProgram : SYSTEM_PROGRAM_ADDRESS,\n transactionMessageBytes: getBase64Decoder().decode(\n new Uint8Array([\n ...getU64Encoder().encode(amount),\n ...getAddressEncoder().encode(address(destination)),\n ...getAddressEncoder().encode(\n address(mint ?? SYSTEM_PROGRAM_ADDRESS),\n ),\n ]),\n ),\n };\n\n const payload = {\n phase: \"start\" as const,\n rid,\n providerOrigin: provider.providerOrigin,\n rpId: provider.rpId,\n data: {\n type: \"transaction\" as const,\n payload: transactionPayload,\n },\n clientOrigin,\n signer: signer?.publicKey,\n };\n const { signature, validTill } = await withRetry(() =>\n provider.onClientAuthorizationCallback(payload),\n );\n return {\n request: { ...payload, rid, validTill },\n signature,\n additionalVoters: additionalVoters?.map((x) =>\n x instanceof SignedSecp256r1Key\n ? { keyType: KeyType.Secp256r1, publicKey: x.toString() }\n : { keyType: KeyType.Ed25519, publicKey: x.address.toString() },\n ),\n payer: (payer ?? (await getRandomPayer())).address.toString(),\n };\n };\n\n const onSuccessCallback = async (\n result: CompleteTransactionRequest,\n ): Promise<{ txSig: string; user: UserInfo }> => {\n const { signature } = await provider.onClientAuthorizationCallback(result);\n const txSig = await sendTransaction(provider, {\n request: {\n ...result,\n data: {\n ...result.data,\n payload: {\n ...result.data.payload,\n client: { ...result.data.payload.client, jws: signature },\n },\n },\n },\n options,\n additionalVoters,\n payer: payer ?? (await getRandomPayer()),\n });\n\n return { txSig, user: result.data.payload.user };\n };\n\n return provider.sendRequestToPopupProvider({\n onConnectedCallback,\n onSuccessCallback,\n signal: options?.signal,\n });\n}\n","import {\n convertBase64StringToJWK,\n createClientAuthorizationStartRequestChallenge,\n type StartMessageRequest,\n type StartTransactionRequest,\n} from \"@revibase/core\";\nimport { CompactSign } from \"jose\";\nimport { DEFAULT_TIMEOUT } from \"../provider/utils\";\n\nexport async function startRequest(\n request:\n | Omit<StartMessageRequest, \"validTill\">\n | Omit<StartTransactionRequest, \"validTill\">,\n allowedClientOrigins: string[],\n privateKey: string,\n) {\n if (!allowedClientOrigins.includes(request.clientOrigin)) {\n throw new Error(\"Invalid client origin\");\n }\n const validTill = Date.now() + DEFAULT_TIMEOUT;\n const pKey = convertBase64StringToJWK(privateKey);\n if (!pKey.alg) throw new Error(\"Property alg in JWK is missing.\");\n const signature = await new CompactSign(\n createClientAuthorizationStartRequestChallenge({\n ...request,\n validTill,\n }),\n )\n .setProtectedHeader({\n alg: pKey.alg,\n })\n .sign(pKey);\n return { ok: true, signature, validTill };\n}\n","/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n abytes as abytes_,\n anumber,\n bytesToHex as bytesToHex_,\n concatBytes as concatBytes_,\n hexToBytes as hexToBytes_,\n} from '@noble/hashes/utils.js';\nexport {\n abytes,\n anumber,\n bytesToHex,\n concatBytes,\n hexToBytes,\n isBytes,\n randomBytes,\n} from '@noble/hashes/utils.js';\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\n\nexport type CHash = {\n (message: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array) => Uint8Array;\nexport function abool(value: boolean, title: string = ''): boolean {\n if (typeof value !== 'boolean') {\n const prefix = title && `\"${title}\" `;\n throw new Error(prefix + 'expected boolean, got type=' + typeof value);\n }\n return value;\n}\n\n// Used in weierstrass, der\nfunction abignumber(n: number | bigint) {\n if (typeof n === 'bigint') {\n if (!isPosBig(n)) throw new Error('positive bigint expected, got ' + n);\n } else anumber(n);\n return n;\n}\n\nexport function asafenumber(value: number, title: string = ''): void {\n if (!Number.isSafeInteger(value)) {\n const prefix = title && `\"${title}\" `;\n throw new Error(prefix + 'expected safe integer, got type=' + typeof value);\n }\n}\n\nexport function numberToHexUnpadded(num: number | bigint): string {\n const hex = abignumber(num).toString(16);\n return hex.length & 1 ? '0' + hex : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n return hexToNumber(bytesToHex_(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n return hexToNumber(bytesToHex_(copyBytes(abytes_(bytes)).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n anumber(len);\n n = abignumber(n);\n const res = hexToBytes_(n.toString(16).padStart(len * 2, '0'));\n if (res.length !== len) throw new Error('number too large');\n return res;\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n return hexToBytes_(numberToHexUnpadded(abignumber(n)));\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n return diff === 0;\n}\n\n/**\n * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer,\n * and Buffer#slice creates mutable copy. Never use Buffers!\n */\nexport function copyBytes(bytes: Uint8Array): Uint8Array {\n return Uint8Array.from(bytes);\n}\n\n/**\n * Decodes 7-bit ASCII string to Uint8Array, throws on non-ascii symbols\n * Should be safe to use for things expected to be ASCII.\n * Returns exact same result as `TextEncoder` for ASCII or throws.\n */\nexport function asciiToBytes(ascii: string): Uint8Array {\n return Uint8Array.from(ascii, (c, i) => {\n const charCode = c.charCodeAt(0);\n if (c.length !== 1 || charCode > 127) {\n throw new Error(\n `string contains non-ASCII character \"${ascii[i]}\" with code ${charCode} at position ${i}`\n );\n }\n return charCode;\n });\n}\n\n// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint): boolean {\n return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint): void {\n // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n // consider P=256n, min=0n, max=P\n // - a for min=0 would require -1: `inRange('x', x, -1n, P)`\n // - b would commonly require subtraction: `inRange('x', x, 0n, P - 1n)`\n // - our way is the cleanest: `inRange('x', x, 0n, P)\n if (!inRange(n, min, max))\n throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nexport function bitLen(n: bigint): number {\n let len;\n for (len = 0; n > _0n; n >>= _1n, len += 1);\n return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number): bigint {\n return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean): bigint {\n return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number): bigint => (_1n << BigInt(n)) - _1n;\n\n// DRBG\n\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n * const drbg = createHmacDRBG<Key>(32, 32, hmac);\n * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n hashLen: number,\n qByteLen: number,\n hmacFn: (key: Uint8Array, message: Uint8Array) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n anumber(hashLen, 'hashLen');\n anumber(qByteLen, 'qByteLen');\n if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n const u8n = (len: number): Uint8Array => new Uint8Array(len); // creates Uint8Array\n const NULL = Uint8Array.of();\n const byte0 = Uint8Array.of(0x00);\n const byte1 = Uint8Array.of(0x01);\n const _maxDrbgIters = 1000;\n\n // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n let i = 0; // Iterations counter, will throw when over 1000\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...msgs: Uint8Array[]) => hmacFn(k, concatBytes_(v, ...msgs)); // hmac(k)(v, ...values)\n const reseed = (seed: Uint8Array = NULL) => {\n // HMAC-DRBG reseed() function. Steps D-G\n k = h(byte0, seed); // k = hmac(k || v || 0x00 || seed)\n v = h(); // v = hmac(k || v)\n if (seed.length === 0) return;\n k = h(byte1, seed); // k = hmac(k || v || 0x01 || seed)\n v = h(); // v = hmac(k || v)\n };\n const gen = () => {\n // HMAC-DRBG generate() function\n if (i++ >= _maxDrbgIters) throw new Error('drbg: tried max amount of iterations');\n let len = 0;\n const out: Uint8Array[] = [];\n while (len < qByteLen) {\n v = h();\n const sl = v.slice();\n out.push(sl);\n len += v.length;\n }\n return concatBytes_(...out);\n };\n const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n reset();\n reseed(seed); // Steps D-G\n let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n while (!(res = pred(gen()))) reseed();\n reset();\n return res;\n };\n return genUntil;\n}\n\nexport function validateObject(\n object: Record<string, any>,\n fields: Record<string, string> = {},\n optFields: Record<string, string> = {}\n): void {\n if (!object || typeof object !== 'object') throw new Error('expected valid options object');\n type Item = keyof typeof object;\n function checkField(fieldName: Item, expectedType: string, isOpt: boolean) {\n const val = object[fieldName];\n if (isOpt && val === undefined) return;\n const current = typeof val;\n if (current !== expectedType || val === null)\n throw new Error(`param \"${fieldName}\" is invalid: expected ${expectedType}, got ${current}`);\n }\n const iter = (f: typeof fields, isOpt: boolean) =>\n Object.entries(f).forEach(([k, v]) => checkField(k, v, isOpt));\n iter(fields, false);\n iter(optFields, true);\n}\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = (): never => {\n throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized<T extends object, R, O extends any[]>(\n fn: (arg: T, ...args: O) => R\n): (arg: T, ...args: O) => R {\n const map = new WeakMap<T, R>();\n return (arg: T, ...args: O): R => {\n const val = map.get(arg);\n if (val !== undefined) return val;\n const computed = fn(arg, ...args);\n map.set(arg, computed);\n return computed;\n };\n}\n\nexport interface CryptoKeys {\n lengths: { seed?: number; public?: number; secret?: number };\n keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };\n getPublicKey: (secretKey: Uint8Array) => Uint8Array;\n}\n\n/** Generic interface for signatures. Has keygen, sign and verify. */\nexport interface Signer extends CryptoKeys {\n // Interfaces are fun. We cannot just add new fields without copying old ones.\n lengths: {\n seed?: number;\n public?: number;\n secret?: number;\n signRand?: number;\n signature?: number;\n };\n sign: (msg: Uint8Array, secretKey: Uint8Array) => Uint8Array;\n verify: (sig: Uint8Array, msg: Uint8Array, publicKey: Uint8Array) => boolean;\n}\n","import { equalBytes } from \"@noble/curves/utils.js\";\nimport type { CompleteMessageRequest } from \"@revibase/core\";\nimport {\n bufferToBase64URLString,\n convertBase64StringToJWK,\n convertMemberKeyToString,\n convertPubkeyCompressedToCose,\n createClientAuthorizationStartRequestChallenge,\n createMessageChallenge,\n fetchSettings,\n fetchUserAccountByFilters,\n getDeviceMessageHash,\n getDomainConfigAddress,\n getSettingsFromIndex,\n getSolanaRpc,\n UserRole,\n} from \"@revibase/core\";\nimport { verifyAuthenticationResponse } from \"@simplewebauthn/server\";\nimport {\n address,\n getBase58Encoder,\n getPublicKeyFromAddress,\n signatureBytes,\n verifySignature,\n} from \"@solana/kit\";\nimport { compactVerify, importJWK } from \"jose\";\n\n/** Verifies WebAuthn message, returns user. */\nexport async function verifyMessage(\n request: CompleteMessageRequest,\n expectedClientJwk: string,\n allowedClientOrigins: string[],\n requireTwoFactorAuthentication: boolean,\n) {\n const { payload } = request.data;\n if (payload.startRequest.data.type !== \"message\")\n throw new Error(\"Invalid request type.\");\n if (Date.now() > payload.startRequest.validTill) {\n throw new Error(\"Request expired.\");\n }\n if (\n !allowedClientOrigins.includes(payload.startRequest.clientOrigin) ||\n !allowedClientOrigins.includes(payload.client.clientOrigin) ||\n payload.startRequest.clientOrigin !== payload.client.clientOrigin\n ) {\n throw new Error(\"Invalid client origin\");\n }\n\n {\n const key = await importJWK(convertBase64StringToJWK(expectedClientJwk));\n const result = await compactVerify(request.data.payload.client.jws, key);\n if (\n !equalBytes(\n result.payload,\n createClientAuthorizationStartRequestChallenge(\n request.data.payload.startRequest,\n ),\n )\n ) {\n throw new Error(\"Invalid client signature\");\n }\n }\n\n {\n if (payload.device.jwk !== payload.device.deviceProfile.devicePublicKey) {\n throw new Error(\"Device publickey mismatch\");\n }\n const key = await importJWK(convertBase64StringToJWK(payload.device.jwk));\n const result = await compactVerify(payload.device.jws, key);\n if (\n !equalBytes(\n result.payload,\n getDeviceMessageHash(\n payload.authResponse,\n payload.device.deviceProfile,\n ),\n )\n ) {\n throw new Error(\"Invalid device signature\");\n }\n }\n\n const expectedChallenge = createMessageChallenge(\n payload.startRequest.data.payload,\n payload.startRequest.clientOrigin,\n payload.device.jwk,\n payload.startRequest.rid,\n );\n const { verified } = await verifyAuthenticationResponse({\n response: payload.authResponse,\n expectedChallenge: bufferToBase64URLString(expectedChallenge),\n expectedRPID: payload.startRequest.rpId,\n expectedOrigin: payload.startRequest.providerOrigin,\n requireUserVerification: false,\n credential: {\n counter: 0,\n id: payload.authResponse.id,\n publicKey: convertPubkeyCompressedToCose(payload.signer),\n },\n });\n\n if (!verified) {\n throw new Error(\"Invalid user siganture\");\n }\n\n if (requireTwoFactorAuthentication) {\n if (!payload.startRequest.data.requireTwoFactorAuthentication) {\n throw new Error(\"Two factor authentication is required.\");\n }\n if (!payload.transactionManager) {\n throw new Error(\"Missing signature from transaction manager.\");\n }\n\n const user = await fetchUserAccountByFilters(\n await getDomainConfigAddress({ rpId: payload.startRequest.rpId }),\n { credentialId: payload.authResponse.id },\n );\n const delegateTo = user?.wallets.find((x) => x.isDelegate);\n if (!delegateTo) {\n throw new Error(\"User does not have a delegated wallet\");\n }\n const settingsData = (\n await fetchSettings(\n getSolanaRpc(),\n await getSettingsFromIndex(delegateTo.index),\n )\n ).data;\n const transactionManager = settingsData.members.find(\n (x) => x.role === UserRole.TransactionManager,\n );\n if (!transactionManager) {\n throw new Error(\"No transaction manager found.\");\n }\n if (\n payload.transactionManager.publicKey !==\n convertMemberKeyToString(transactionManager.pubkey)\n ) {\n throw new Error(\"Transaction manager mismatch.\");\n }\n if (\n !(await verifySignature(\n await getPublicKeyFromAddress(\n address(payload.transactionManager.publicKey),\n ),\n signatureBytes(\n getBase58Encoder().encode(payload.transactionManager.signature),\n ),\n expectedChallenge,\n ))\n ) {\n throw new Error(\"Invalid transaction manager signature.\");\n }\n }\n\n return {\n ok: true,\n };\n}\n","import { equalBytes } from \"@noble/curves/utils.js\";\nimport type { CompleteTransactionRequest } from \"@revibase/core\";\nimport {\n bufferToBase64URLString,\n convertBase64StringToJWK,\n convertPubkeyCompressedToCose,\n createClientAuthorizationCompleteRequestChallenge,\n createClientAuthorizationStartRequestChallenge,\n createTransactionChallenge,\n getDeviceMessageHash,\n} from \"@revibase/core\";\nimport { verifyAuthenticationResponse } from \"@simplewebauthn/server\";\nimport { CompactSign, compactVerify, importJWK } from \"jose\";\n\n/** Verifies WebAuthn message, returns signature. */\nexport async function verifyTransaction(\n request: CompleteTransactionRequest,\n expectedClientJwk: string,\n allowedClientOrigins: string[],\n privateKey: string,\n) {\n const { payload } = request.data;\n if (payload.startRequest.data.type !== \"transaction\")\n throw new Error(\"Invalid request type.\");\n if (\n Date.now() >\n Math.min(payload.startRequest.validTill, payload.estimatedSlotHashExpiry)\n ) {\n throw new Error(\"Request expired.\");\n }\n if (\n !allowedClientOrigins.includes(payload.startRequest.clientOrigin) ||\n !allowedClientOrigins.includes(payload.client.clientOrigin) ||\n payload.startRequest.clientOrigin !== payload.client.clientOrigin\n ) {\n throw new Error(\"Invalid client origin\");\n }\n\n {\n const key = await importJWK(convertBase64StringToJWK(expectedClientJwk));\n const result = await compactVerify(request.data.payload.client.jws, key);\n if (\n !equalBytes(\n result.payload,\n createClientAuthorizationStartRequestChallenge(\n request.data.payload.startRequest,\n ),\n )\n ) {\n throw new Error(\"Invalid client signature\");\n }\n }\n\n {\n if (payload.device.jwk !== payload.device.deviceProfile.devicePublicKey) {\n throw new Error(\"Device publickey mismatch\");\n }\n const key = await importJWK(convertBase64StringToJWK(payload.device.jwk));\n const result = await compactVerify(payload.device.jws, key);\n if (\n !equalBytes(\n result.payload,\n getDeviceMessageHash(\n payload.authResponse,\n payload.device.deviceProfile,\n ),\n )\n ) {\n throw new Error(\"Invalid device signature\");\n }\n }\n {\n const { challenge: expectedChallenge } = await createTransactionChallenge(\n payload.startRequest.data.payload,\n payload.startRequest.clientOrigin,\n payload.device.jwk,\n payload.startRequest.rid,\n payload.slotHash,\n payload.slotNumber,\n payload.estimatedSlotHashExpiry,\n );\n const { verified } = await verifyAuthenticationResponse({\n response: payload.authResponse,\n expectedChallenge: bufferToBase64URLString(expectedChallenge),\n expectedRPID: payload.startRequest.rpId,\n expectedOrigin: payload.startRequest.providerOrigin,\n requireUserVerification: false,\n credential: {\n counter: 0,\n id: payload.authResponse.id,\n publicKey: convertPubkeyCompressedToCose(payload.signer),\n },\n });\n\n if (!verified) {\n throw new Error(\"Invalid user siganture\");\n }\n }\n\n const pKey = convertBase64StringToJWK(privateKey);\n if (!pKey.alg) throw new Error(\"Property alg in JWK is missing.\");\n const signature = await new CompactSign(\n createClientAuthorizationCompleteRequestChallenge(request),\n )\n .setProtectedHeader({\n alg: pKey.alg,\n })\n .sign(pKey);\n\n return { ok: true, signature };\n}\n","import {\n initialize,\n type CompleteMessageRequest,\n type CompleteTransactionRequest,\n type StartMessageRequest,\n type StartTransactionRequest,\n} from \"@revibase/core\";\nimport { startRequest } from \"./startRequest\";\nimport { verifyMessage } from \"./verifyMessage\";\nimport { verifyTransaction } from \"./verifyTransaction\";\n\nlet initialized = false;\nfunction ensureInitialize(rpcEndpoint?: string) {\n if (initialized) return;\n if (rpcEndpoint) {\n initialize({ rpcEndpoint });\n initialized = true;\n }\n}\n/** Validates start request, calls Revibase start + getResult, returns user or tx. Pass req.signal for cancel on disconnect. */\nexport async function processClientAuthCallback({\n request,\n publicKey,\n allowedClientOrigins,\n privateKey,\n requireTwoFactorAuthentication,\n}: {\n request:\n | Omit<StartMessageRequest, \"validTill\">\n | Omit<StartTransactionRequest, \"validTill\">\n | CompleteMessageRequest\n | CompleteTransactionRequest;\n allowedClientOrigins: string[];\n publicKey: string;\n privateKey: string;\n requireTwoFactorAuthentication?: {\n rpcEndpoint: string;\n };\n}) {\n ensureInitialize(requireTwoFactorAuthentication?.rpcEndpoint);\n\n if (request.phase === \"start\") {\n if (\n request.data.type === \"message\" &&\n !!requireTwoFactorAuthentication !==\n request.data.requireTwoFactorAuthentication\n ) {\n throw new Error(\"Require 2fa check mismatch\");\n }\n return await startRequest(request, allowedClientOrigins, privateKey);\n } else if (request.phase === \"complete\") {\n if (request.data.type === \"message\") {\n return await verifyMessage(\n request as CompleteMessageRequest,\n publicKey,\n allowedClientOrigins,\n !!requireTwoFactorAuthentication,\n );\n } else if (request.data.type === \"transaction\") {\n return await verifyTransaction(\n request as CompleteTransactionRequest,\n publicKey,\n allowedClientOrigins,\n privateKey,\n );\n } else {\n throw new Error(\"Invalid request type\");\n }\n } else {\n throw new Error(\"Invalid request phase\");\n }\n}\n","import { DEFAULT_JITO_TIPS_URL } from \"../utils/consts\";\n\nexport async function processEstimateJitoTipsCallback(\n priority = \"landed_tips_75th_percentile\",\n url = DEFAULT_JITO_TIPS_URL,\n) {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch Jito tips: ${response.status} ${response.statusText}`,\n );\n }\n\n const result = await response.json();\n if (\n !Array.isArray(result) ||\n !result[0] ||\n typeof result[0][priority] !== \"number\"\n ) {\n throw new Error(\"Invalid Jito tips response format\");\n }\n\n const LAMPORTS_PER_SOL = 1_000_000_000;\n return Math.round(result[0][priority] * LAMPORTS_PER_SOL);\n}\n","import { DEFAULT_JITO_BLOCK_ENGINE_SEND_BUNDLE_URL } from \"../utils/consts\";\n\nexport async function processSendJitoBundleCallback(\n serializedTransactions: string[],\n jitoUUID?: string,\n url = DEFAULT_JITO_BLOCK_ENGINE_SEND_BUNDLE_URL,\n): Promise<string> {\n const maxRetries = 5;\n const baseBackoffMs = 250;\n\n const body = JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"sendBundle\",\n params: [\n serializedTransactions,\n {\n encoding: \"base64\",\n },\n ],\n });\n\n let response: Response | null = null;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(jitoUUID ? { \"x-jito-auth\": jitoUUID } : {}),\n },\n body,\n });\n\n if (response.status !== 429) break;\n if (attempt === maxRetries) break;\n\n const backoffMs = Math.min(10_000, baseBackoffMs * 2 ** attempt);\n await sleep(backoffMs);\n }\n\n if (!response) {\n throw new Error(\"Failed to send bundles: no response\");\n }\n\n const data = (await response.json()) as { result?: string; error?: unknown };\n\n if (data.error) {\n throw new Error(\n `Error sending bundles: ${JSON.stringify(data.error, null, 2)}`,\n );\n }\n\n if (!data.result) {\n throw new Error(\"No bundle ID returned from Jito\");\n }\n\n return data.result;\n}\n\nconst sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n"]}