{"version":3,"file":"GpaBuilder.cjs","sources":["../../../src/utils/GpaBuilder.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport {\n  Commitment,\n  GetProgramAccountsConfig,\n  GetProgramAccountsFilter,\n  ProgramAccountChangeCallback,\n  PublicKey,\n} from '@solana/web3.js';\nimport base58 from 'bs58';\nimport BN from 'bn.js';\nimport { GmaBuilder, GmaBuilderOptions } from './GmaBuilder';\nimport { Convergence } from '@/Convergence';\nimport { UnparsedAccount } from '@/types';\n\nexport type GpaSortCallback = (\n  a: UnparsedAccount,\n  b: UnparsedAccount\n) => number;\n\nexport class GpaBuilder {\n  /** The connection instance to use when fetching accounts. */\n  protected readonly convergence: Convergence;\n\n  /** The public key of the program we want to retrieve accounts from. */\n  protected readonly programId: PublicKey;\n\n  /** The configs to use when fetching program accounts. */\n  protected config: GetProgramAccountsConfig = {};\n\n  /** When provided, reorder accounts using this callback. */\n  protected sortCallback?: GpaSortCallback;\n\n  constructor(convergence: Convergence, programId: PublicKey) {\n    this.convergence = convergence;\n    this.programId = programId;\n  }\n\n  getFilters() {\n    return this.config.filters;\n  }\n\n  /**\n   * Subscribes to changes within the program account \n   * based on the specified commitment, defaults to 'confirmed'.\n   * \n   * Returns a subscription id used to unsubscribe\n   */\n  subscribe(callback: ProgramAccountChangeCallback, commitment?: Commitment) {\n    return this.convergence.connection.onProgramAccountChange(\n      this.programId,\n      callback,\n      commitment ?? 'confirmed',\n      this.config.filters\n    );\n  }\n\n  unsubscribe(subscriptionId: number) {\n    return this.convergence.connection.removeProgramAccountChangeListener(\n      subscriptionId\n    );\n  }\n\n  mergeConfig(config: GetProgramAccountsConfig) {\n    this.config = { ...this.config, ...config };\n    return this;\n  }\n\n  slice(offset: number, length: number) {\n    this.config.dataSlice = { offset, length };\n    return this;\n  }\n\n  withoutData() {\n    return this.slice(0, 0);\n  }\n\n  addFilter(...filters: GetProgramAccountsFilter[]) {\n    if (!this.config.filters) {\n      this.config.filters = [];\n    }\n\n    this.config.filters.push(...filters);\n\n    return this;\n  }\n\n  where(offset: number, bytes: string | Buffer | PublicKey | BN | number) {\n    if (Buffer.isBuffer(bytes)) {\n      bytes = base58.encode(bytes);\n    } else if (typeof bytes === 'object' && 'toBase58' in bytes) {\n      bytes = bytes.toBase58();\n    } else if (BN.isBN(bytes)) {\n      bytes = base58.encode(bytes.toArray());\n    } else if (typeof bytes !== 'string') {\n      bytes = base58.encode(new BN(bytes, 'le').toArray());\n    }\n\n    return this.addFilter({ memcmp: { offset, bytes } });\n  }\n\n  whereSize(dataSize: number) {\n    return this.addFilter({ dataSize });\n  }\n\n  sortUsing(callback: GpaSortCallback) {\n    this.sortCallback = callback;\n    return this;\n  }\n\n  async get(): Promise<UnparsedAccount[]> {\n    const accounts = await this.convergence\n      .rpc()\n      .getProgramAccounts(this.programId, this.config);\n\n    if (this.sortCallback) {\n      accounts.sort(this.sortCallback);\n    }\n\n    return accounts;\n  }\n\n  async getAndMap<T>(callback: (account: UnparsedAccount) => T): Promise<T[]> {\n    return (await this.get()).map(callback);\n  }\n\n  async getPublicKeys(): Promise<PublicKey[]> {\n    return this.getAndMap((account) => account.publicKey);\n  }\n\n  async getDataAsPublicKeys(): Promise<PublicKey[]> {\n    // TODO: Throw a custom ConvergenceRfq error if the data is not a public key.\n    return this.getAndMap((account) => new PublicKey(account.data));\n  }\n\n  async getMultipleAccounts(\n    callback?: (account: UnparsedAccount) => PublicKey,\n    options?: GmaBuilderOptions\n  ): Promise<GmaBuilder> {\n    // TODO(loris): Throw a custom Convergence error if the data is not a public key.\n    const cb = callback ?? ((account) => new PublicKey(account.data));\n\n    return new GmaBuilder(this.convergence, await this.getAndMap(cb), options);\n  }\n}\n"],"names":["GpaBuilder","convergence","programId","_classCallCheck","_defineProperty","_createClass","key","value","getFilters","config","filters","subscribe","callback","commitment","connection","onProgramAccountChange","unsubscribe","subscriptionId","removeProgramAccountChangeListener","mergeConfig","_objectSpread","slice","offset","length","dataSlice","withoutData","addFilter","_this$config$filters","push","apply","arguments","where","bytes","Buffer","isBuffer","base58","encode","_typeof","toBase58","BN","isBN","toArray","memcmp","whereSize","dataSize","sortUsing","sortCallback","_get","_asyncToGenerator","_regeneratorRuntime","mark","_callee","accounts","wrap","_callee$","_context","prev","next","rpc","getProgramAccounts","sent","sort","abrupt","stop","get","_getAndMap","_callee2","_callee2$","_context2","map","getAndMap","_x","_getPublicKeys","_callee3","_callee3$","_context3","account","publicKey","getPublicKeys","_getDataAsPublicKeys","_callee4","_callee4$","_context4","PublicKey","data","getDataAsPublicKeys","_getMultipleAccounts","_callee5","options","cb","_callee5$","_context5","t0","GmaBuilder","t1","t2","t3","getMultipleAccounts","_x2","_x3"],"mappings":"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"}