/** * pop user update-profile — profile metadata edits + username changes. * * Two independent writes on the UniversalAccountRegistry (verified against * contracts origin/main src/UniversalAccountRegistry.sol): * * changeUsername(newUsername) — DESTRUCTIVE tier: the old username is * released for anyone to claim the moment the tx lands. Reverts * AccountUnknown without an existing registration and UsernameTaken when * the new name is held — both pre-flighted here (exit 4 before gas). * * setProfileMetadata(metadataHash) — standard tier: bio/avatar/links are * read-then-merged from the subgraph so single-flag edits preserve the * other fields, then re-pinned to IPFS. * * When both are requested, the username tx runs first; finishWrite exits on * failure so the metadata tx never runs after a failed rename. * * Reads: the registry address, the caller's current username and their * existing profile metadata all come from ONE subgraph round-trip. They used * to be three separate trips — two subgraph queries plus a standalone * getUsername eth_call that was not even folded into the pre-flight batch * against the same contract. The eth_call survives as a fallback for the one * case the indexer cannot answer honestly: no indexed account, or a * tombstoned one. There the chain, not the indexer, decides whether * changeUsername would revert AccountUnknown. */ import type { Argv, ArgumentsCamelCase } from 'yargs'; interface UpdateProfileArgs { org?: string; username?: string; bio?: string; avatar?: string; github?: string; twitter?: string; website?: string; chain?: number; rpc?: string; 'private-key'?: string; 'dry-run'?: boolean; yes?: boolean; preflight?: boolean; } export declare const updateProfileHandler: { builder: (yargs: Argv) => Argv<{ username: string | undefined; } & { bio: string | undefined; } & { avatar: string | undefined; } & { github: string | undefined; } & { twitter: string | undefined; } & { website: string | undefined; }>; handler: (argv: ArgumentsCamelCase) => Promise; }; export {};