@sentio/sdk-bundle 2.41.1 → 2.41.2

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.
Files changed (47) hide show
  1. package/lib/aptos/builtin/0x1.d.ts +47 -0
  2. package/lib/aptos/builtin/0x1.d.ts.map +1 -1
  3. package/lib/aptos/builtin/0x1.js +1 -1
  4. package/lib/aptos/builtin/0x3.js +1 -1
  5. package/lib/aptos/builtin/index.js +1 -1
  6. package/lib/aptos/codegen/index.js +1 -1
  7. package/lib/aptos/codegen/index.js.map +1 -1
  8. package/lib/aptos/ext/index.js +1 -1
  9. package/lib/aptos/index.js +1 -1
  10. package/lib/chunk-4BXAHA3X.js +6 -0
  11. package/lib/chunk-4BXAHA3X.js.map +1 -0
  12. package/lib/{chunk-OBRJRXIU.js → chunk-6GBBRUCQ.js} +2 -2
  13. package/lib/{chunk-BJV226SY.js → chunk-7C7JTEPD.js} +2 -2
  14. package/lib/{chunk-BJV226SY.js.map → chunk-7C7JTEPD.js.map} +1 -1
  15. package/lib/{chunk-QDD4GOGS.js → chunk-E5HXKQGH.js} +2 -2
  16. package/lib/{chunk-RDRQUUED.js → chunk-FIYTXSME.js} +2 -2
  17. package/lib/{chunk-RDRQUUED.js.map → chunk-FIYTXSME.js.map} +1 -1
  18. package/lib/{chunk-OD4OZRJP.js → chunk-FN65HFOF.js} +2 -2
  19. package/lib/{chunk-TOIWKQ7V.js → chunk-FQ65UWWO.js} +2 -2
  20. package/lib/{chunk-TOIWKQ7V.js.map → chunk-FQ65UWWO.js.map} +1 -1
  21. package/lib/{chunk-LHCTFLPI.js → chunk-LJHDU2VC.js} +2 -2
  22. package/lib/{chunk-MFBM2O66.js → chunk-OJBUITSA.js} +2 -2
  23. package/lib/{chunk-F3YPXS5A.js → chunk-RTIGRFG6.js} +1 -1
  24. package/lib/{chunk-F3YPXS5A.js.map → chunk-RTIGRFG6.js.map} +1 -1
  25. package/lib/{chunk-AZ3ASLNE.js → chunk-XRETVDPO.js} +2 -2
  26. package/lib/eth/codegen/index.js +1 -1
  27. package/lib/move/index.js +1 -1
  28. package/lib/sui/builtin/0x1.js +1 -1
  29. package/lib/sui/builtin/0x2.js +1 -1
  30. package/lib/sui/builtin/0x3.js +1 -1
  31. package/lib/sui/builtin/index.js +1 -1
  32. package/lib/sui/codegen/index.js +1 -1
  33. package/lib/sui/codegen/index.js.map +1 -1
  34. package/lib/sui/ext/index.js +1 -1
  35. package/lib/sui/index.js +1 -1
  36. package/lib/testing/index.js +1 -1
  37. package/package.json +2 -2
  38. package/src/aptos/abis/0x1.json +210 -8
  39. package/src/aptos/builtin/0x1.ts +111 -1
  40. package/lib/chunk-UWNTLPFS.js +0 -6
  41. package/lib/chunk-UWNTLPFS.js.map +0 -1
  42. /package/lib/{chunk-OBRJRXIU.js.map → chunk-6GBBRUCQ.js.map} +0 -0
  43. /package/lib/{chunk-QDD4GOGS.js.map → chunk-E5HXKQGH.js.map} +0 -0
  44. /package/lib/{chunk-OD4OZRJP.js.map → chunk-FN65HFOF.js.map} +0 -0
  45. /package/lib/{chunk-LHCTFLPI.js.map → chunk-LJHDU2VC.js.map} +0 -0
  46. /package/lib/{chunk-MFBM2O66.js.map → chunk-OJBUITSA.js.map} +0 -0
  47. /package/lib/{chunk-AZ3ASLNE.js.map → chunk-XRETVDPO.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sui/sui-processor.ts","../../../node_modules/.pnpm/@typemove+sui@1.6.2_svelte@4.2.18_typescript@5.5.2/node_modules/@typemove/sui/src/move-coder.ts","../src/sui/move-coder.ts","../src/sui/context.ts","../src/sui/utils.ts","../src/sui/sui-object-processor.ts","../src/sui/sui-object-processor-template.ts","../src/sui/sui-plugin.ts"],"sourcesContent":["import { Data_SuiCall, Data_SuiEvent, Data_SuiObjectChange, MoveFetchConfig } from '@sentio/protos'\nimport { ListStateStorage, mergeProcessResults } from '@sentio/runtime'\nimport { SuiNetwork } from './network.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { SuiContext, SuiObjectChangeContext } from './context.js'\nimport { MoveCallSuiTransaction, SuiEvent, SuiTransactionBlockResponse, SuiObjectChange } from '@mysten/sui.js/client'\nimport {\n accountAddressString,\n CallHandler,\n EventFilter,\n EventHandler,\n FunctionNameAndCallFilter,\n ObjectChangeHandler,\n parseMoveType,\n SPLITTER,\n TransactionFilter\n} from '../move/index.js'\nimport { getMoveCalls } from './utils.js'\nimport { defaultMoveCoder, MoveCoder } from './index.js'\nimport { Labels } from '../core/index.js'\nimport { Required } from 'utility-types'\n\nexport const DEFAULT_FETCH_CONFIG: MoveFetchConfig = {\n resourceChanges: false,\n allEvents: false,\n inputs: false\n}\n\nexport type IndexConfigure = Required<SuiBindOptions, 'startCheckpoint' | 'network'>\n\nexport function configure(options: SuiBindOptions): IndexConfigure {\n return {\n startCheckpoint: options.startCheckpoint || 0n,\n address: options.address === '*' ? '*' : accountAddressString(options.address),\n network: options.network || SuiNetwork.MAIN_NET,\n baseLabels: options.baseLabels\n }\n}\n\nexport interface SuiBindOptions {\n address: string\n network?: SuiNetwork\n startCheckpoint?: bigint\n baseLabels?: Labels\n}\n\nexport class SuiProcessorState extends ListStateStorage<SuiBaseProcessor> {\n static INSTANCE = new SuiProcessorState()\n}\n\nexport class SuiBaseProcessor {\n readonly moduleName: string\n config: IndexConfigure\n\n eventHandlers: EventHandler<Data_SuiEvent>[] = []\n callHandlers: CallHandler<Data_SuiCall>[] = []\n objectChangeHandlers: ObjectChangeHandler<Data_SuiObjectChange>[] = []\n\n coder: MoveCoder\n\n constructor(name: string, options: SuiBindOptions) {\n this.moduleName = name\n this.config = configure(options)\n SuiProcessorState.INSTANCE.addValue(this)\n this.coder = defaultMoveCoder(this.config.network)\n }\n\n getChainId(): string {\n return this.config.network\n }\n\n protected onMoveEvent(\n handler: (event: SuiEvent, ctx: SuiContext) => void,\n filter: EventFilter | EventFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): SuiBaseProcessor {\n let _filters: EventFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n\n const processor = this\n const allEventType = new Set(_filters.map((f) => f.type))\n\n this.eventHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'event is null')\n }\n const txn = data.transaction as SuiTransactionBlockResponse\n if (!txn.events || !txn.events.length) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'no event in the transactions')\n }\n\n const processResults = []\n for (const evt of txn.events) {\n const idx = Number(evt.id.eventSeq) || 0\n const [_, module, type] = parseMoveType(evt.type).qname.split(SPLITTER)\n if (!allEventType.has([module, type].join(SPLITTER))) {\n continue\n }\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n txn,\n idx,\n processor.config.baseLabels\n )\n\n // const parts = typeQname.split(SPLITTER)\n // if (evt.packageId && parts[0] != evt.packageId) {\n // evt.type = evt.type.replace(parts[0], evt.packageId)\n // }\n const decoded = await processor.coder.decodeEvent<any>(evt)\n await handler(decoded || evt, ctx)\n processResults.push(ctx.stopAndGetResult())\n }\n\n return mergeProcessResults(processResults)\n },\n filters: _filters,\n fetchConfig: _fetchConfig\n })\n return this\n }\n\n protected onEntryFunctionCall(\n handler: (call: MoveCallSuiTransaction, ctx: SuiContext) => void,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): SuiBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n const processor = this\n const allFunctionType = new Set(_filters.map((f) => f.function))\n\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const tx = data.transaction as SuiTransactionBlockResponse\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n tx,\n 0,\n processor.config.baseLabels\n )\n if (tx) {\n const calls: MoveCallSuiTransaction[] = getMoveCalls(tx)\n const txKind = tx.transaction?.data?.transaction\n if (!txKind) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected getTransactionKind get empty')\n }\n\n // getProgrammableTransaction(txKind)\n const programmableTx = txKind.kind === 'ProgrammableTransaction' ? txKind : undefined\n\n // TODO potential pass index\n for (const call of calls) {\n const functionType = [call.module, call.function].join(SPLITTER)\n if (!allFunctionType.has(functionType)) {\n continue\n }\n\n // TODO maybe do in parallel\n const decoded = await processor.coder.decodeFunctionPayload(call, programmableTx?.inputs || [])\n await handler(decoded, ctx)\n }\n }\n return ctx.stopAndGetResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig\n })\n return this\n }\n\n onEvent(handler: (event: SuiEvent, ctx: SuiContext) => void, fetchConfig?: Partial<MoveFetchConfig>): this {\n this.onMoveEvent(handler, { type: '' }, fetchConfig)\n return this\n }\n\n onTransactionBlock(\n handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => void,\n filter?: TransactionFilter,\n fetchConfig?: Partial<MoveFetchConfig>\n ): this {\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n\n const processor = this\n\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is null')\n }\n const tx = data.transaction as SuiTransactionBlockResponse\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n tx,\n 0,\n processor.config.baseLabels\n )\n if (tx) {\n await handler(tx, ctx)\n }\n return ctx.stopAndGetResult()\n },\n filters: [{ ...filter, function: '' }],\n fetchConfig: _fetchConfig\n })\n return this\n }\n\n protected onObjectChange(\n handler: (changes: SuiObjectChange[], ctx: SuiObjectChangeContext) => void,\n type: string\n ): this {\n if (this.config.network === SuiNetwork.TEST_NET) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'object change not supported in testnet')\n }\n const processor = this\n this.objectChangeHandlers.push({\n handler: async function (data: Data_SuiObjectChange) {\n const ctx = new SuiObjectChangeContext(\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n data.txDigest,\n processor.config.baseLabels\n )\n await handler(data.changes as SuiObjectChange[], ctx)\n return ctx.stopAndGetResult()\n },\n type\n })\n\n return this\n }\n}\n\nexport class SuiModulesProcessor extends SuiBaseProcessor {\n static bind(options: SuiBindOptions): SuiModulesProcessor {\n return new SuiModulesProcessor('*', options)\n }\n}\n\nexport class SuiGlobalProcessor extends SuiBaseProcessor {\n static bind(options: Omit<SuiBindOptions, 'address'>): SuiGlobalProcessor {\n return new SuiGlobalProcessor('*', { ...options, address: '*' })\n }\n onTransactionBlock(\n handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => void,\n filter: TransactionFilter,\n fetchConfig?: Partial<MoveFetchConfig>\n ): this {\n // TODO enable more strict check\n // if (!filter.publicKeyPrefix || filter.publicKeyPrefix.length < 2) {\n // throw new ServerError(Status.INVALID_ARGUMENT, 'restriction too low for global processor')\n // }\n return super.onTransactionBlock(handler, filter, fetchConfig)\n }\n\n public onObjectChange(\n handler: (changes: SuiObjectChange[], ctx: SuiObjectChangeContext) => void,\n type: string\n ): this {\n return super.onObjectChange(handler, type)\n }\n}\n","import { TypedDevInspectResults, TypedEventInstance, TypedFunctionPayload } from './models.js'\nimport {\n AbstractMoveCoder,\n ANY_TYPE,\n DecodedStruct,\n parseMoveType,\n SPLITTER,\n TypeDescriptor,\n InternalMoveModule\n} from '@typemove/move'\nimport {\n MoveCallSuiTransaction,\n SuiCallArg,\n SuiEvent,\n SuiMoveNormalizedModule,\n SuiMoveObject,\n DevInspectResults,\n SuiClient\n} from '@mysten/sui.js/client'\nimport { toInternalModule } from './to-internal.js'\nimport { SuiChainAdapter } from './sui-chain-adapter.js'\nimport { dynamic_field } from './builtin/0x2.js'\nimport { BCS, getSuiMoveConfig, StructTypeDefinition } from '@mysten/bcs'\n\n// import { Encoding } from '@mysten/bcs/types', this doesn't get exported correctly\nexport type Encoding = 'base58' | 'base64' | 'hex'\n\nimport { normalizeSuiObjectId, normalizeSuiAddress } from '@mysten/sui.js/utils'\n\nexport class MoveCoder extends AbstractMoveCoder<\n // SuiNetwork,\n SuiMoveNormalizedModule,\n SuiEvent | SuiMoveObject\n> {\n bcs = new BCS(getSuiMoveConfig())\n\n constructor(client: SuiClient) {\n super(new SuiChainAdapter(client))\n }\n\n load(module: SuiMoveNormalizedModule, address: string): InternalMoveModule {\n let m = this.moduleMapping.get(module.address + '::' + module.name)\n const mDeclared = this.moduleMapping.get(address + '::' + module.name)\n if (m && mDeclared) {\n return m\n }\n m = toInternalModule(module)\n this.loadInternal(m, address)\n return m\n }\n\n protected async decode(data: any, type: TypeDescriptor): Promise<any> {\n switch (type.qname) {\n case '0x1::ascii::Char':\n if (data !== undefined && typeof data !== 'string') {\n // bcs\n const byte = (await super.decode(data, type)).byte as number\n return String.fromCharCode(byte)\n }\n case '0x1::ascii::String':\n if (data !== undefined && typeof data !== 'string') {\n // bcs verified\n const bytes = (await super.decode(data, type)).bytes as number[]\n return new TextDecoder().decode(new Uint8Array(bytes))\n }\n case '0x2::object::ID':\n if (data !== undefined && typeof data !== 'string') {\n // bcs verified\n const bytes = (await super.decode(data, type)).bytes as string\n return normalizeSuiObjectId(bytes)\n }\n case '0x2::url::Url':\n if (data !== undefined && typeof data !== 'string') {\n // bcs\n return (await super.decode(data, type)).url\n }\n case '0x2::coin::Coin':\n if (data !== undefined && typeof data !== 'string') {\n // bcs\n const bytes = (await super.decode(data, type)).id.id.bytes as number[]\n return new TextDecoder().decode(new Uint8Array(bytes))\n }\n return data\n case '0x2::balance::Balance':\n if (data.value) {\n // bcs verfied\n const balance = await super.decode(data, type)\n return balance.value\n }\n return BigInt(data)\n case '0x1::option::Option':\n if (data === null) {\n return data\n }\n if (data.vec) {\n // bcs verifed\n let vec = await super.decode(data, type)\n vec = vec.vec\n if (vec.length === 0) {\n return null\n }\n return vec[0]\n }\n return this.decode(data, type.typeArgs[0])\n case 'Address':\n const str = data as string\n return normalizeSuiAddress(str)\n case '0x1::string::String':\n if (typeof data !== 'string') {\n // bcs\n return new TextDecoder().decode(new Uint8Array(data.bytes))\n }\n default:\n return super.decode(data, type)\n }\n }\n\n decodeEvent<T>(event: SuiEvent): Promise<TypedEventInstance<T> | undefined> {\n return this.decodedStruct(event)\n }\n filterAndDecodeEvents<T>(type: TypeDescriptor<T> | string, resources: SuiEvent[]): Promise<TypedEventInstance<T>[]> {\n if (typeof type === 'string') {\n type = parseMoveType(type)\n }\n return this.filterAndDecodeStruct(type, resources)\n }\n\n async getDynamicFields<T1, T2>(\n objects: SuiMoveObject[],\n keyType: TypeDescriptor<T1> = ANY_TYPE,\n valueType: TypeDescriptor<T2> = ANY_TYPE\n ): Promise<dynamic_field.Field<T1, T2>[]> {\n // const type = dynamic_field.Field.TYPE\n // Not using the code above to avoid cycle initialize failed\n const type = new TypeDescriptor<dynamic_field.Field<T1, T2>>('0x2::dynamic_field::Field')\n type.typeArgs = [keyType, valueType]\n const res = await this.filterAndDecodeObjects(type, objects)\n return res.map((o) => o.data_decoded)\n }\n\n filterAndDecodeObjects<T>(\n type: TypeDescriptor<T>,\n objects: SuiMoveObject[]\n ): Promise<DecodedStruct<SuiMoveObject, T>[]> {\n return this.filterAndDecodeStruct(type, objects)\n }\n\n async decodeFunctionPayload(payload: MoveCallSuiTransaction, inputs: SuiCallArg[]): Promise<MoveCallSuiTransaction> {\n const functionType = [payload.package, payload.module, payload.function].join(SPLITTER)\n const func = await this.getMoveFunction(functionType)\n const params = this.adapter.getMeaningfulFunctionParams(func.params)\n const args = []\n for (const value of payload.arguments || []) {\n const argValue = value as any\n if ('Input' in (argValue as any)) {\n const idx = argValue.Input\n const arg = inputs[idx]\n if (arg.type === 'pure') {\n args.push(arg.value)\n } else if (arg.type === 'object') {\n // object is not there\n args.push(undefined)\n } else {\n console.error('unexpected function arg value')\n args.push(undefined)\n }\n // args.push(arg) // TODO check why ts not work using arg.push(arg)\n } else {\n args.push(undefined)\n }\n }\n\n const argumentsTyped = await this.decodeArray(args, params, false)\n return {\n ...payload,\n arguments_decoded: argumentsTyped\n } as TypedFunctionPayload<any>\n }\n\n private async _registerBCSType(qname: string): Promise<void> {\n if (this.bcs.hasType(qname)) {\n return\n }\n const moveStruct = await this.getMoveStruct(qname)\n const structDef: StructTypeDefinition = {}\n\n for (const field of moveStruct.fields) {\n structDef[field.name] = field.type.getNormalizedSignature()\n }\n let typeName = qname\n const generics = moveStruct.typeParams.map((p, idx) => 'T' + idx).join(', ')\n if (generics) {\n typeName = typeName + '<' + generics + '>'\n }\n\n this.bcs.registerStructType(typeName, structDef)\n\n for (const field of moveStruct.fields) {\n await this.registerBCSTypes(field.type)\n }\n }\n\n private bcsRegistered = new Set<string>()\n\n async registerBCSTypes(type: TypeDescriptor): Promise<void> {\n const sig = type.getNormalizedSignature()\n if (this.bcsRegistered.has(sig)) {\n return\n }\n this.bcsRegistered.add(sig)\n\n await this._registerBCSType('0x1::string::String')\n\n for (const typeArg of type.dependedTypes()) {\n await this._registerBCSType(typeArg)\n }\n }\n\n async decodeBCS(type: TypeDescriptor, data: Uint8Array | string, encoding?: Encoding): Promise<any> {\n await this.registerBCSTypes(type)\n return this.bcs.de(type.getNormalizedSignature(), data, encoding)\n }\n\n async decodeDevInspectResult<T extends any[]>(inspectRes: DevInspectResults): Promise<TypedDevInspectResults<T>> {\n const returnValues = []\n if (inspectRes.results != null) {\n for (const r of inspectRes.results) {\n if (r.returnValues) {\n for (const returnValue of r.returnValues) {\n const type = parseMoveType(returnValue[1])\n const bcsDecoded = await this.decodeBCS(type, new Uint8Array(returnValue[0]))\n const decoded = await this.decodedType(bcsDecoded, type)\n returnValues.push(decoded)\n }\n } else {\n returnValues.push(null)\n }\n }\n }\n return { ...inspectRes, results_decoded: returnValues as any }\n }\n}\n\nconst DEFAULT_ENDPOINT = 'https://fullnode.mainnet.sui.io/'\nconst CODER_MAP = new Map<string, MoveCoder>()\nconst CHAIN_ID_CODER_MAP = new Map<string, MoveCoder>()\n\nexport function defaultMoveCoder(endpoint: string = DEFAULT_ENDPOINT): MoveCoder {\n let coder = CODER_MAP.get(endpoint)\n if (!coder) {\n coder = new MoveCoder(new SuiClient({ url: endpoint }))\n CODER_MAP.set(endpoint, coder)\n }\n return coder\n}\n\nconst PROVIDER_CODER_MAP = new Map<SuiClient, MoveCoder>()\n\nlet DEFAULT_CHAIN_ID: string | undefined\n\nexport async function getMoveCoder(client: SuiClient): Promise<MoveCoder> {\n let coder = PROVIDER_CODER_MAP.get(client)\n if (!coder) {\n coder = new MoveCoder(client)\n // TODO how to dedup\n const id = await client.getChainIdentifier()\n const defaultCoder = defaultMoveCoder()\n if (!DEFAULT_CHAIN_ID) {\n DEFAULT_CHAIN_ID = await defaultCoder.adapter.getChainId()\n }\n if (id === DEFAULT_CHAIN_ID) {\n coder = defaultCoder\n }\n\n PROVIDER_CODER_MAP.set(client, coder)\n }\n return coder\n}\n","import { MoveCoder } from '@typemove/sui'\n\nimport { getClient, SuiNetwork } from './network.js'\n\nconst CODERS = new Map<SuiNetwork, MoveCoder>()\n\nexport function defaultMoveCoder(network: SuiNetwork = SuiNetwork.MAIN_NET): MoveCoder {\n let coder = CODERS.get(network)\n if (!coder) {\n coder = new MoveCoder(getClient(network))\n CODERS.set(network, coder)\n }\n\n return coder\n}\n","import { RecordMetaData } from '@sentio/protos'\nimport { type Labels, normalizeLabels } from '../index.js'\nimport { getClient, SuiNetwork } from './network.js'\nimport {\n SuiTransactionBlockResponse,\n SuiEvent,\n SuiMoveNormalizedModule,\n SuiMoveObject,\n SuiClient\n} from '@mysten/sui.js/client'\nimport { MoveCoder } from './index.js'\nimport { defaultMoveCoder } from './move-coder.js'\nimport { MoveAccountContext, MoveContext } from '../move/index.js'\n\nexport class SuiContext extends MoveContext<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {\n moduleName: string\n timestamp: Date\n checkpoint: bigint\n transaction: SuiTransactionBlockResponse\n eventIndex: number\n coder: MoveCoder\n\n constructor(\n moduleName: string,\n network: SuiNetwork,\n address: string,\n timestamp: Date,\n checkpoint: bigint,\n transaction: SuiTransactionBlockResponse,\n eventIndex: number,\n baseLabels: Labels | undefined\n ) {\n super(baseLabels)\n this.address = address.toLowerCase()\n this.network = network\n this.moduleName = moduleName\n this.timestamp = timestamp\n this.checkpoint = checkpoint\n this.eventIndex = eventIndex\n this.coder = defaultMoveCoder(network)\n if (transaction) {\n this.transaction = transaction\n }\n }\n\n getChainId() {\n return this.network\n }\n\n getTimestamp(): number {\n return this.timestamp.getDate()\n }\n\n getMetaDataInternal(name: string, labels: Labels): RecordMetaData {\n return {\n address: this.address,\n contractName: this.moduleName,\n blockNumber: this.checkpoint,\n transactionIndex: 0,\n transactionHash: this.transaction?.digest || '', // TODO\n logIndex: this.eventIndex,\n chainId: this.getChainId(),\n name: name,\n labels: normalizeLabels(labels)\n }\n }\n\n get client(): SuiClient {\n return getClient(this.network)\n }\n}\n\nexport class SuiObjectChangeContext extends MoveContext<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {\n timestamp: Date\n checkpoint: bigint\n coder: MoveCoder\n txDigest: string\n\n constructor(\n network: SuiNetwork,\n address: string,\n timestamp: Date,\n checkpoint: bigint,\n txDigest: string,\n baseLabels: Labels | undefined\n ) {\n super(baseLabels)\n this.address = address\n this.network = network\n this.timestamp = timestamp\n this.checkpoint = checkpoint\n this.txDigest = txDigest\n this.coder = defaultMoveCoder(network)\n }\n\n getChainId() {\n return this.network\n }\n\n getTimestamp(): number {\n return this.timestamp.getDate()\n }\n\n getMetaDataInternal(name: string, labels: Labels): RecordMetaData {\n return {\n address: this.address,\n contractName: '*',\n blockNumber: this.checkpoint,\n transactionIndex: -1,\n transactionHash: this.txDigest,\n logIndex: 0,\n chainId: this.getChainId(),\n name: name,\n labels: normalizeLabels(labels)\n }\n }\n\n get client(): SuiClient {\n return getClient(this.network)\n }\n}\n\n// TODO address handler should use this context\nexport class SuiAddressContext extends MoveAccountContext<\n SuiNetwork,\n SuiMoveNormalizedModule,\n SuiEvent | SuiMoveObject\n> {\n address: string\n network: SuiNetwork\n checkpoint: bigint\n timestamp: Date\n coder: MoveCoder\n\n protected contractName = 'address'\n\n constructor(\n network: SuiNetwork,\n address: string,\n checkpoint: bigint,\n timestamp: Date,\n baseLabels: Labels | undefined\n ) {\n super(baseLabels)\n this.address = address\n this.network = network\n this.checkpoint = checkpoint\n this.timestamp = timestamp\n this.coder = defaultMoveCoder(network)\n }\n\n getChainId() {\n return this.network\n }\n\n getMetaDataInternal(name: string, labels: Labels): RecordMetaData {\n return {\n address: this.address,\n contractName: this.contractName,\n blockNumber: this.checkpoint,\n transactionIndex: 0,\n transactionHash: '',\n logIndex: 0,\n chainId: this.getChainId(),\n name: name,\n labels: normalizeLabels(labels)\n }\n }\n\n get client(): SuiClient {\n return getClient(this.network)\n }\n\n getTimestamp(): number {\n return this.timestamp.getDate()\n }\n}\n\nexport class SuiObjectContext extends SuiAddressContext {\n contractName = 'object'\n objectId: string\n\n constructor(\n network: SuiNetwork,\n objectId: string,\n checkpoint: bigint,\n timestamp: Date,\n baseLabels: Labels | undefined\n ) {\n super(network, objectId, checkpoint, timestamp, baseLabels)\n this.objectId = objectId\n }\n}\n","import {\n SuiTransactionBlockResponse,\n MoveCallSuiTransaction,\n ProgrammableTransaction,\n SuiTransaction\n} from '@mysten/sui.js/client'\nimport { accountTypeString } from '@typemove/move'\n\nexport function getMoveCalls(txBlock: SuiTransactionBlockResponse) {\n const txKind = txBlock.transaction?.data.transaction\n if (!txKind) {\n return []\n }\n const programmableTx: ProgrammableTransaction | undefined =\n txKind.kind === 'ProgrammableTransaction' ? txKind : undefined\n if (!programmableTx) {\n return []\n }\n\n return programmableTx.transactions.flatMap((tx: SuiTransaction) => {\n if ('MoveCall' in tx) {\n const call = tx.MoveCall as MoveCallSuiTransaction\n call.package = accountTypeString(call.package)\n\n return [call]\n }\n return []\n })\n}\n\n// function isHex(value: string): boolean {\n// return /^(0x|0X)?[a-fA-F0-9]+$/.test(value)\n// }\n//\n// function getHexByteLength(value: string): number {\n// return /^(0x|0X)/.test(value) ? (value.length - 2) / 2 : value.length / 2\n// }\n//\n// export function isValidSuiAddress(value: string): value is SuiAddress {\n// return isHex(value) && getHexByteLength(value) <= SUI_ADDRESS_LENGTH\n// }\n\n// export function validateAndNormalizeAddress(address: string): string {\n// // if (isFrameworkAccount(address)) {\n// // const n = parseInt(address, 16)\n// // return `0x${n.toString(16)}`\n// // }\n// if (!isValidSuiAddress(address)) {\n// throw Error('Not valid Address')\n// }\n// return normalizeSuiAddress(address)\n// }\n","import {\n Data_SuiCall,\n Data_SuiObject,\n HandleInterval,\n MoveAccountFetchConfig,\n MoveFetchConfig,\n MoveOwnerType,\n ProcessResult\n} from '@sentio/protos'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { SuiNetwork } from './network.js'\nimport { SuiAddressContext, SuiContext, SuiObjectContext } from './context.js'\nimport { SuiMoveObject, SuiTransactionBlockResponse } from '@mysten/sui.js/client'\nimport { PromiseOrVoid } from '../core/index.js'\nimport { configure, DEFAULT_FETCH_CONFIG, IndexConfigure, SuiBindOptions } from './sui-processor.js'\nimport { CallHandler, TransactionFilter } from '../move/index.js'\nimport { ServerError, Status } from 'nice-grpc'\n\nexport interface SuiObjectBindOptions {\n objectId: string\n network?: SuiNetwork\n startCheckpoint?: bigint\n baseLabels?: { [key: string]: string }\n}\n\ninterface ObjectHandler {\n type?: string\n checkPointInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n fetchConfig: MoveAccountFetchConfig\n handler: (resource: Data_SuiObject) => Promise<ProcessResult>\n}\n\nexport const DEFAULT_ACCOUNT_FETCH_CONFIG: MoveAccountFetchConfig = {\n owned: false\n}\n\nexport class SuiAccountProcessorState extends ListStateStorage<SuiBaseObjectOrAddressProcessor<any>> {\n static INSTANCE = new SuiAccountProcessorState()\n}\n\nexport interface SuiInternalObjectsBindOptions extends SuiBindOptions {\n ownerType: MoveOwnerType\n}\n\nexport abstract class SuiBaseObjectOrAddressProcessor<HandlerType> {\n config: IndexConfigure\n ownerType: MoveOwnerType\n\n objectHandlers: ObjectHandler[] = []\n\n // static bind(options: SuiObjectsBindOptions): SuiBaseObjectsProcessor<any> {\n // return new SuiBaseObjectsProcessor(options)\n // }\n\n protected constructor(options: SuiInternalObjectsBindOptions) {\n this.config = configure(options)\n this.ownerType = options.ownerType\n SuiAccountProcessorState.INSTANCE.addValue(this)\n }\n\n getChainId(): string {\n return this.config.network\n }\n\n // protected abstract transformObjects(objects: SuiMoveObject[]): SuiMoveObject[]\n\n protected abstract doHandle(handler: HandlerType, data: Data_SuiObject, ctx: SuiObjectContext): PromiseOrVoid\n\n public onInterval(\n handler: HandlerType, //(resources: SuiMoveObject[], ctx: SuiObjectsContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n checkpointInterval: HandleInterval | undefined,\n type: string | undefined,\n fetchConfig: Partial<MoveAccountFetchConfig> | undefined\n ): this {\n const processor = this\n this.objectHandlers.push({\n handler: async function (data) {\n const ctx = new SuiObjectContext(\n processor.config.network,\n processor.config.address,\n data.slot,\n data.timestamp || new Date(0),\n processor.config.baseLabels\n )\n await processor.doHandle(handler, data, ctx)\n return ctx.stopAndGetResult()\n },\n timeIntervalInMinutes: timeInterval,\n checkPointInterval: checkpointInterval,\n type,\n fetchConfig: { ...DEFAULT_ACCOUNT_FETCH_CONFIG, ...fetchConfig }\n })\n return this\n }\n\n public onTimeInterval(\n handler: HandlerType,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n type?: string,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes\n },\n undefined,\n type,\n fetchConfig\n )\n }\n\n public onCheckpointInterval(\n handler: HandlerType,\n checkpointInterval = 100000,\n backfillCheckpointInterval = 400000,\n type?: string,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: checkpointInterval, backfillInterval: backfillCheckpointInterval },\n type,\n fetchConfig\n )\n }\n}\n\nexport class SuiAddressProcessor extends SuiBaseObjectOrAddressProcessor<\n (objects: SuiMoveObject[], ctx: SuiAddressContext) => PromiseOrVoid\n> {\n callHandlers: CallHandler<Data_SuiCall>[] = []\n\n static bind(options: SuiBindOptions): SuiAddressProcessor {\n return new SuiAddressProcessor({ ...options, ownerType: MoveOwnerType.ADDRESS })\n }\n\n protected doHandle(\n handler: (objects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ): PromiseOrVoid {\n return handler(data.objects as SuiMoveObject[], ctx)\n }\n\n onTransactionBlock(\n handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => void,\n filter?: TransactionFilter,\n fetchConfig?: Partial<MoveFetchConfig>\n ) {\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n const _filter: TransactionFilter = {\n fromAndToAddress: {\n from: '',\n to: this.config.address\n },\n ...filter\n }\n\n const processor = this\n\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is null')\n }\n const tx = data.transaction as SuiTransactionBlockResponse\n\n const ctx = new SuiContext(\n 'object',\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n tx,\n 0,\n processor.config.baseLabels\n )\n if (tx) {\n await handler(tx, ctx)\n }\n return ctx.stopAndGetResult()\n },\n filters: [{ ..._filter, function: '' }],\n fetchConfig: _fetchConfig\n })\n return this\n }\n}\n\nexport class SuiObjectProcessor extends SuiBaseObjectOrAddressProcessor<\n (self: SuiMoveObject, dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid\n> {\n static bind(options: SuiObjectBindOptions): SuiObjectProcessor {\n return new SuiObjectProcessor({\n address: options.objectId,\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n ownerType: MoveOwnerType.OBJECT,\n baseLabels: options.baseLabels\n })\n }\n\n protected doHandle(\n handler: (self: SuiMoveObject, dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ): PromiseOrVoid {\n if (!data.self) {\n console.log(`Sui object not existed in ${ctx.checkpoint}, please specific a start time`)\n return\n }\n return handler(data.self as SuiMoveObject, data.objects as SuiMoveObject[], ctx)\n }\n}\n\nexport class SuiWrappedObjectProcessor extends SuiBaseObjectOrAddressProcessor<\n (dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid\n> {\n static bind(options: SuiObjectBindOptions): SuiWrappedObjectProcessor {\n return new SuiWrappedObjectProcessor({\n address: options.objectId,\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n ownerType: MoveOwnerType.WRAPPED_OBJECT,\n baseLabels: options.baseLabels\n })\n }\n\n protected doHandle(\n handler: (dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ): PromiseOrVoid {\n return handler(data.objects as SuiMoveObject[], ctx)\n }\n}\n","import { HandleInterval, MoveAccountFetchConfig, MoveFetchConfig } from '@sentio/protos'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { SuiAddressContext, SuiContext, SuiObjectContext } from './context.js'\nimport { SuiMoveObject, SuiTransactionBlockResponse } from '@mysten/sui.js/client'\nimport { PromiseOrVoid } from '../core/index.js'\nimport {\n DEFAULT_ACCOUNT_FETCH_CONFIG,\n SuiAddressProcessor,\n SuiBaseObjectOrAddressProcessor,\n SuiObjectBindOptions,\n SuiObjectProcessor,\n SuiWrappedObjectProcessor\n} from './sui-object-processor.js'\nimport { TemplateInstanceState } from '../core/template.js'\nimport { SuiBindOptions } from './sui-processor.js'\nimport { TransactionFilter } from '../move/index.js'\n\nclass ObjectHandler<HandlerType> {\n type?: string\n checkpointInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: HandlerType\n fetchConfig: MoveAccountFetchConfig\n}\n\nexport class SuiAccountProcessorTemplateState extends ListStateStorage<\n SuiObjectOrAddressProcessorTemplate<any, any, any>\n> {\n static INSTANCE = new SuiAccountProcessorTemplateState()\n}\n\nexport abstract class SuiObjectOrAddressProcessorTemplate<\n HandlerType,\n OptionType extends SuiObjectBindOptions | SuiBindOptions,\n ProcessorType extends SuiBaseObjectOrAddressProcessor<HandlerType>\n> {\n id: number\n objectHandlers: ObjectHandler<HandlerType>[] = []\n binds = new Set<string>()\n\n constructor() {\n this.id = SuiAccountProcessorTemplateState.INSTANCE.getValues().length\n SuiAccountProcessorTemplateState.INSTANCE.addValue(this)\n }\n\n protected abstract createProcessor(options: SuiObjectBindOptions | SuiBindOptions): ProcessorType\n\n bind(options: OptionType, ctx: SuiContext): void {\n options.network = options.network || ctx.network\n options.startCheckpoint = options.startCheckpoint || ctx.checkpoint\n const id = (options as SuiObjectBindOptions).objectId || (options as SuiBindOptions).address\n\n const sig = [options.network, id].join('_')\n if (this.binds.has(sig)) {\n console.log(`Same object id can be bind to one template only once, ignore duplicate bind: ${sig}`)\n return\n }\n this.binds.add(sig)\n\n const processor = this.createProcessor(options)\n for (const h of this.objectHandlers) {\n processor.onInterval(h.handler, h.timeIntervalInMinutes, h.checkpointInterval, h.type, h.fetchConfig)\n }\n const config = processor.config\n\n ctx.update({\n states: {\n configUpdated: true\n }\n })\n TemplateInstanceState.INSTANCE.addValue({\n templateId: this.id,\n contract: {\n name: '',\n chainId: config.network,\n address: config.address,\n abi: ''\n },\n startBlock: config.startCheckpoint,\n endBlock: 0n,\n baseLabels: config.baseLabels\n })\n }\n\n protected onInterval(\n handler: HandlerType,\n timeInterval: HandleInterval | undefined,\n checkpointInterval: HandleInterval | undefined,\n type: string | undefined,\n fetchConfig: Partial<MoveAccountFetchConfig> | undefined\n ): this {\n this.objectHandlers.push({\n handler: handler,\n timeIntervalInMinutes: timeInterval,\n checkpointInterval: checkpointInterval,\n type,\n fetchConfig: { ...DEFAULT_ACCOUNT_FETCH_CONFIG, ...fetchConfig }\n })\n return this\n }\n\n public onTimeInterval(\n handler: HandlerType,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n type?: string,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes\n },\n undefined,\n type,\n fetchConfig\n )\n }\n\n public onCheckpointInterval(\n handler: HandlerType,\n checkpointInterval = 100000,\n backfillCheckpointInterval = 400000,\n type?: string,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: checkpointInterval, backfillInterval: backfillCheckpointInterval },\n type,\n fetchConfig\n )\n }\n}\n\nclass AddressTransactionHandler {\n handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => void\n filter?: TransactionFilter\n fetchConfig?: Partial<MoveFetchConfig>\n}\n\nexport class SuiAddressProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<\n (objects: SuiMoveObject[], ctx: SuiAddressContext) => PromiseOrVoid,\n SuiBindOptions,\n SuiAddressProcessor\n> {\n private handlers: AddressTransactionHandler[] = []\n\n createProcessor(options: SuiBindOptions): SuiAddressProcessor {\n const p = SuiAddressProcessor.bind(options)\n for (const handler of this.handlers) {\n p.onTransactionBlock(handler.handler, handler.filter, handler.fetchConfig)\n }\n return p\n }\n\n onTransactionBlock(\n handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => void,\n filter?: TransactionFilter,\n fetchConfig?: Partial<MoveFetchConfig>\n ): this {\n this.handlers.push({\n handler,\n filter,\n fetchConfig\n })\n return this\n }\n}\n\nexport class SuiObjectProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<\n (self: SuiMoveObject, dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid,\n SuiObjectBindOptions,\n SuiObjectProcessor\n> {\n createProcessor(options: SuiObjectBindOptions): SuiObjectProcessor {\n return SuiObjectProcessor.bind(options)\n }\n}\n\nexport class SuiWrappedObjectProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<\n (dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid,\n SuiObjectBindOptions,\n SuiWrappedObjectProcessor\n> {\n createProcessor(options: SuiObjectBindOptions): SuiWrappedObjectProcessor {\n return SuiWrappedObjectProcessor.bind(options)\n }\n}\n","import { errorString, mergeProcessResults, Plugin, PluginManager, USER_PROCESSOR } from '@sentio/runtime'\nimport {\n AccountConfig,\n ContractConfig,\n Data_SuiCall,\n Data_SuiEvent,\n Data_SuiObject,\n Data_SuiObjectChange,\n DataBinding,\n HandlerType,\n MoveCallHandlerConfig,\n MoveEventHandlerConfig,\n MoveResourceChangeConfig,\n ProcessConfigResponse,\n ProcessResult,\n StartRequest\n} from '@sentio/protos'\n\nimport { ServerError, Status } from 'nice-grpc'\n\nimport { SuiProcessorState } from './sui-processor.js'\nimport { SuiAccountProcessorState, SuiAddressProcessor } from './sui-object-processor.js'\nimport { initCoinList } from './ext/coin.js'\nimport { SuiChainId } from '@sentio/chain'\nimport {\n SuiAccountProcessorTemplateState,\n SuiObjectOrAddressProcessorTemplate\n} from './sui-object-processor-template.js'\nimport { SuiNetwork } from './network.js'\nimport { SuiContext } from './context.js'\n\ninterface Handlers {\n suiEventHandlers: ((event: Data_SuiEvent) => Promise<ProcessResult>)[]\n suiCallHandlers: ((func: Data_SuiCall) => Promise<ProcessResult>)[]\n suiObjectHandlers: ((object: Data_SuiObject) => Promise<ProcessResult>)[]\n suiObjectChangeHandlers: ((object: Data_SuiObjectChange) => Promise<ProcessResult>)[]\n}\n\nexport class SuiPlugin extends Plugin {\n name: string = 'SuiPlugin'\n handlers: Handlers = {\n suiCallHandlers: [],\n suiEventHandlers: [],\n suiObjectHandlers: [],\n suiObjectChangeHandlers: []\n }\n async start(request: StartRequest): Promise<void> {\n await initCoinList()\n\n console.log('total instances:', request.templateInstances.length)\n const allowedChainIds = new Set<string>(Object.values(SuiChainId))\n for (const instance of request.templateInstances) {\n if (!allowedChainIds.has(instance.contract?.chainId || '')) {\n continue\n }\n\n console.log('start template instance', instance.templateId)\n const template: SuiObjectOrAddressProcessorTemplate<any, any, any> =\n SuiAccountProcessorTemplateState.INSTANCE.getValues()[instance.templateId]\n\n template.bind(\n {\n address: instance.contract?.address || '',\n objectId: instance.contract?.address || '',\n network: <SuiNetwork>instance.contract?.chainId || SuiNetwork.MAIN_NET,\n startCheckpoint: instance.startBlock || 0n,\n baseLabels: instance.baseLabels\n },\n NoopContext\n )\n }\n }\n\n async configure(config: ProcessConfigResponse) {\n const handlers: Handlers = {\n suiCallHandlers: [],\n suiEventHandlers: [],\n suiObjectHandlers: [],\n suiObjectChangeHandlers: []\n }\n for (const suiProcessor of SuiProcessorState.INSTANCE.getValues()) {\n const contractConfig = ContractConfig.fromPartial({\n transactionConfig: [],\n processorType: USER_PROCESSOR,\n contract: {\n name: suiProcessor.moduleName,\n chainId: suiProcessor.config.network,\n address: suiProcessor.config.address,\n abi: ''\n },\n startBlock: suiProcessor.config.startCheckpoint\n })\n for (const handler of suiProcessor.eventHandlers) {\n const handlerId = handlers.suiEventHandlers.push(handler.handler) - 1\n const eventHandlerConfig: MoveEventHandlerConfig = {\n filters: handler.filters.map((f) => {\n return {\n type: f.type,\n account: f.account || ''\n }\n }),\n fetchConfig: handler.fetchConfig,\n handlerId\n }\n contractConfig.moveEventConfigs.push(eventHandlerConfig)\n }\n for (const handler of suiProcessor.callHandlers) {\n const handlerId = handlers.suiCallHandlers.push(handler.handler) - 1\n const functionHandlerConfig: MoveCallHandlerConfig = {\n filters: handler.filters.map((filter) => {\n return {\n function: filter.function,\n typeArguments: filter.typeArguments || [],\n withTypeArguments: !!filter.typeArguments,\n includeFailed: filter.includeFailed || false,\n publicKeyPrefix: filter.publicKeyPrefix || '',\n fromAndToAddress: filter.fromAndToAddress\n }\n }),\n fetchConfig: handler.fetchConfig,\n handlerId\n }\n contractConfig.moveCallConfigs.push(functionHandlerConfig)\n }\n for (const handler of suiProcessor.objectChangeHandlers) {\n const handlerId = handlers.suiObjectChangeHandlers.push(handler.handler) - 1\n const objectChangeHandler: MoveResourceChangeConfig = {\n type: handler.type,\n handlerId\n }\n contractConfig.moveResourceChangeConfigs.push(objectChangeHandler)\n }\n config.contractConfigs.push(contractConfig)\n }\n\n for (const processor of SuiAccountProcessorState.INSTANCE.getValues()) {\n const accountConfig = AccountConfig.fromPartial({\n address: processor.config.address,\n chainId: processor.getChainId(),\n startBlock: processor.config.startCheckpoint // TODO maybe use another field\n })\n for (const handler of processor.objectHandlers) {\n const handlerId = handlers.suiObjectHandlers.push(handler.handler) - 1\n accountConfig.moveIntervalConfigs.push({\n intervalConfig: {\n handlerId: handlerId,\n minutes: 0,\n minutesInterval: handler.timeIntervalInMinutes,\n slot: 0,\n slotInterval: handler.checkPointInterval,\n fetchConfig: undefined\n },\n type: handler.type || '',\n ownerType: processor.ownerType,\n fetchConfig: handler.fetchConfig\n })\n }\n\n if (processor instanceof SuiAddressProcessor) {\n for (const handler of processor.callHandlers) {\n const handlerId = handlers.suiCallHandlers.push(handler.handler) - 1\n const functionHandlerConfig: MoveCallHandlerConfig = {\n filters: handler.filters.map((filter) => {\n return {\n function: filter.function,\n typeArguments: filter.typeArguments || [],\n withTypeArguments: !!filter.typeArguments,\n includeFailed: filter.includeFailed || false,\n publicKeyPrefix: filter.publicKeyPrefix || '',\n fromAndToAddress: filter.fromAndToAddress\n }\n }),\n fetchConfig: handler.fetchConfig,\n handlerId\n }\n accountConfig.moveCallConfigs.push(functionHandlerConfig)\n }\n }\n\n config.accountConfigs.push(accountConfig)\n }\n this.handlers = handlers\n }\n\n async processSuiEvent(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.suiEvent) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Event can't be empty\")\n }\n const promises: Promise<ProcessResult>[] = []\n const event = binding.data.suiEvent\n\n for (const handlerId of binding.handlerIds) {\n promises.push(\n this.handlers.suiEventHandlers[handlerId](event).catch((e) => {\n throw new ServerError(\n Status.INTERNAL,\n 'error processing event: ' + JSON.stringify(event) + '\\n' + errorString(e)\n )\n })\n )\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n\n async processSuiFunctionCall(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.suiCall) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Call can't be empty\")\n }\n const call = binding.data.suiCall\n\n const promises: Promise<ProcessResult>[] = []\n for (const handlerId of binding.handlerIds) {\n const promise = this.handlers.suiCallHandlers[handlerId](call).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing call: ' + JSON.stringify(call) + '\\n' + errorString(e))\n })\n promises.push(promise)\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n\n async processSuiObject(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.suiObject) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Object can't be empty\")\n }\n const object = binding.data.suiObject\n\n const promises: Promise<ProcessResult>[] = []\n for (const handlerId of binding.handlerIds) {\n promises.push(\n this.handlers.suiObjectHandlers[handlerId](object).catch((e) => {\n throw new ServerError(\n Status.INTERNAL,\n 'error processing object: ' + JSON.stringify(object) + '\\n' + errorString(e)\n )\n })\n )\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n\n async processSuiObjectChange(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.suiObjectChange) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Object change can't be empty\")\n }\n const objectChange = binding.data.suiObjectChange\n\n const promises: Promise<ProcessResult>[] = []\n for (const handlerId of binding.handlerIds) {\n promises.push(\n this.handlers.suiObjectChangeHandlers[handlerId](objectChange).catch((e) => {\n throw new ServerError(\n Status.INTERNAL,\n 'error processing object change: ' + JSON.stringify(objectChange) + '\\n' + errorString(e)\n )\n })\n )\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n\n supportedHandlers = [\n HandlerType.SUI_EVENT,\n HandlerType.SUI_CALL,\n HandlerType.SUI_OBJECT,\n HandlerType.SUI_OBJECT_CHANGE\n ]\n\n processBinding(request: DataBinding): Promise<ProcessResult> {\n switch (request.handlerType) {\n case HandlerType.SUI_EVENT:\n return this.processSuiEvent(request)\n case HandlerType.SUI_CALL:\n return this.processSuiFunctionCall(request)\n case HandlerType.SUI_OBJECT:\n return this.processSuiObject(request)\n case HandlerType.SUI_OBJECT_CHANGE:\n return this.processSuiObjectChange(request)\n default:\n throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)\n }\n }\n}\n\nPluginManager.INSTANCE.register(new SuiPlugin())\n\nconst NoopContext = new SuiContext('', SuiChainId.SUI_MAINNET, '', new Date(), 0n, {} as any, 0, {})\n"],"mappings":"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","names":["ListStateStorage","mergeProcessResults","import_nice_grpc","MoveCoder","AbstractMoveCoder","BCS","getSuiMoveConfig","client","SuiChainAdapter","module","address","m","mDeclared","toInternalModule","data","type","byte","bytes","normalizeSuiObjectId","vec","normalizeSuiAddress","event","resources","parseMoveType","objects","keyType","ANY_TYPE","valueType","TypeDescriptor","o","payload","inputs","functionType","SPLITTER","func","params","args","value","argValue","idx","arg","argumentsTyped","qname","moveStruct","structDef","field","typeName","generics","p","sig","typeArg","encoding","inspectRes","returnValues","r","returnValue","bcsDecoded","decoded","CODERS","defaultMoveCoder","network","SuiNetwork","coder","MoveCoder","getClient","SuiContext","MoveContext","moduleName","network","address","timestamp","checkpoint","transaction","eventIndex","baseLabels","defaultMoveCoder","name","labels","normalizeLabels","getClient","SuiObjectChangeContext","txDigest","SuiAddressContext","MoveAccountContext","SuiObjectContext","objectId","getMoveCalls","txBlock","txKind","programmableTx","tx","call","accountTypeString","DEFAULT_FETCH_CONFIG","configure","options","accountAddressString","SuiNetwork","_SuiProcessorState","ListStateStorage","SuiProcessorState","__publicField","SuiBaseProcessor","name","defaultMoveCoder","handler","filter","fetchConfig","_filters","_fetchConfig","MoveFetchConfig","processor","allEventType","f","data","txn","processResults","evt","idx","_","module","type","parseMoveType","SPLITTER","ctx","SuiContext","decoded","mergeProcessResults","allFunctionType","tx","calls","getMoveCalls","txKind","programmableTx","call","functionType","SuiObjectChangeContext","SuiModulesProcessor","SuiGlobalProcessor","ListStateStorage","import_nice_grpc","DEFAULT_ACCOUNT_FETCH_CONFIG","_SuiAccountProcessorState","ListStateStorage","SuiAccountProcessorState","__publicField","SuiBaseObjectOrAddressProcessor","options","configure","handler","timeInterval","checkpointInterval","type","fetchConfig","processor","data","ctx","SuiObjectContext","timeIntervalInMinutes","backfillTimeIntervalInMinutes","backfillCheckpointInterval","SuiAddressProcessor","MoveOwnerType","filter","_fetchConfig","MoveFetchConfig","DEFAULT_FETCH_CONFIG","_filter","tx","SuiContext","SuiObjectProcessor","SuiWrappedObjectProcessor","ListStateStorage","_SuiAccountProcessorTemplateState","ListStateStorage","SuiAccountProcessorTemplateState","__publicField","SuiObjectOrAddressProcessorTemplate","options","ctx","id","sig","processor","h","config","TemplateInstanceState","handler","timeInterval","checkpointInterval","type","fetchConfig","DEFAULT_ACCOUNT_FETCH_CONFIG","timeIntervalInMinutes","backfillTimeIntervalInMinutes","backfillCheckpointInterval","SuiAddressProcessorTemplate","SuiObjectOrAddressProcessorTemplate","options","p","SuiAddressProcessor","handler","filter","fetchConfig","SuiObjectProcessorTemplate","SuiObjectProcessor","SuiWrappedObjectProcessorTemplate","SuiWrappedObjectProcessor","errorString","mergeProcessResults","Plugin","PluginManager","USER_PROCESSOR","import_nice_grpc","import_chain","SuiPlugin","Plugin","request","initCoinList","allowedChainIds","instance","SuiAccountProcessorTemplateState","SuiNetwork","NoopContext","config","handlers","suiProcessor","SuiProcessorState","contractConfig","ContractConfig","USER_PROCESSOR","handler","handlerId","eventHandlerConfig","f","functionHandlerConfig","filter","objectChangeHandler","processor","SuiAccountProcessorState","accountConfig","AccountConfig","SuiAddressProcessor","binding","promises","event","e","errorString","mergeProcessResults","call","promise","object","objectChange","HandlerType","PluginManager","SuiContext"]}
1
+ {"version":3,"sources":["../src/sui/sui-processor.ts","../../../node_modules/.pnpm/@typemove+sui@1.6.3_svelte@4.2.18_typescript@5.5.2/node_modules/@typemove/sui/src/move-coder.ts","../src/sui/move-coder.ts","../src/sui/context.ts","../src/sui/utils.ts","../src/sui/sui-object-processor.ts","../src/sui/sui-object-processor-template.ts","../src/sui/sui-plugin.ts"],"sourcesContent":["import { Data_SuiCall, Data_SuiEvent, Data_SuiObjectChange, MoveFetchConfig } from '@sentio/protos'\nimport { ListStateStorage, mergeProcessResults } from '@sentio/runtime'\nimport { SuiNetwork } from './network.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { SuiContext, SuiObjectChangeContext } from './context.js'\nimport { MoveCallSuiTransaction, SuiEvent, SuiTransactionBlockResponse, SuiObjectChange } from '@mysten/sui.js/client'\nimport {\n accountAddressString,\n CallHandler,\n EventFilter,\n EventHandler,\n FunctionNameAndCallFilter,\n ObjectChangeHandler,\n parseMoveType,\n SPLITTER,\n TransactionFilter\n} from '../move/index.js'\nimport { getMoveCalls } from './utils.js'\nimport { defaultMoveCoder, MoveCoder } from './index.js'\nimport { Labels } from '../core/index.js'\nimport { Required } from 'utility-types'\n\nexport const DEFAULT_FETCH_CONFIG: MoveFetchConfig = {\n resourceChanges: false,\n allEvents: false,\n inputs: false\n}\n\nexport type IndexConfigure = Required<SuiBindOptions, 'startCheckpoint' | 'network'>\n\nexport function configure(options: SuiBindOptions): IndexConfigure {\n return {\n startCheckpoint: options.startCheckpoint || 0n,\n address: options.address === '*' ? '*' : accountAddressString(options.address),\n network: options.network || SuiNetwork.MAIN_NET,\n baseLabels: options.baseLabels\n }\n}\n\nexport interface SuiBindOptions {\n address: string\n network?: SuiNetwork\n startCheckpoint?: bigint\n baseLabels?: Labels\n}\n\nexport class SuiProcessorState extends ListStateStorage<SuiBaseProcessor> {\n static INSTANCE = new SuiProcessorState()\n}\n\nexport class SuiBaseProcessor {\n readonly moduleName: string\n config: IndexConfigure\n\n eventHandlers: EventHandler<Data_SuiEvent>[] = []\n callHandlers: CallHandler<Data_SuiCall>[] = []\n objectChangeHandlers: ObjectChangeHandler<Data_SuiObjectChange>[] = []\n\n coder: MoveCoder\n\n constructor(name: string, options: SuiBindOptions) {\n this.moduleName = name\n this.config = configure(options)\n SuiProcessorState.INSTANCE.addValue(this)\n this.coder = defaultMoveCoder(this.config.network)\n }\n\n getChainId(): string {\n return this.config.network\n }\n\n protected onMoveEvent(\n handler: (event: SuiEvent, ctx: SuiContext) => void,\n filter: EventFilter | EventFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): SuiBaseProcessor {\n let _filters: EventFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n\n const processor = this\n const allEventType = new Set(_filters.map((f) => f.type))\n\n this.eventHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'event is null')\n }\n const txn = data.transaction as SuiTransactionBlockResponse\n if (!txn.events || !txn.events.length) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'no event in the transactions')\n }\n\n const processResults = []\n for (const evt of txn.events) {\n const idx = Number(evt.id.eventSeq) || 0\n const [_, module, type] = parseMoveType(evt.type).qname.split(SPLITTER)\n if (!allEventType.has([module, type].join(SPLITTER))) {\n continue\n }\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n txn,\n idx,\n processor.config.baseLabels\n )\n\n // const parts = typeQname.split(SPLITTER)\n // if (evt.packageId && parts[0] != evt.packageId) {\n // evt.type = evt.type.replace(parts[0], evt.packageId)\n // }\n const decoded = await processor.coder.decodeEvent<any>(evt)\n await handler(decoded || evt, ctx)\n processResults.push(ctx.stopAndGetResult())\n }\n\n return mergeProcessResults(processResults)\n },\n filters: _filters,\n fetchConfig: _fetchConfig\n })\n return this\n }\n\n protected onEntryFunctionCall(\n handler: (call: MoveCallSuiTransaction, ctx: SuiContext) => void,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): SuiBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n const processor = this\n const allFunctionType = new Set(_filters.map((f) => f.function))\n\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const tx = data.transaction as SuiTransactionBlockResponse\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n tx,\n 0,\n processor.config.baseLabels\n )\n if (tx) {\n const calls: MoveCallSuiTransaction[] = getMoveCalls(tx)\n const txKind = tx.transaction?.data?.transaction\n if (!txKind) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected getTransactionKind get empty')\n }\n\n // getProgrammableTransaction(txKind)\n const programmableTx = txKind.kind === 'ProgrammableTransaction' ? txKind : undefined\n\n // TODO potential pass index\n for (const call of calls) {\n const functionType = [call.module, call.function].join(SPLITTER)\n if (!allFunctionType.has(functionType)) {\n continue\n }\n\n // TODO maybe do in parallel\n const decoded = await processor.coder.decodeFunctionPayload(call, programmableTx?.inputs || [])\n await handler(decoded, ctx)\n }\n }\n return ctx.stopAndGetResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig\n })\n return this\n }\n\n onEvent(handler: (event: SuiEvent, ctx: SuiContext) => void, fetchConfig?: Partial<MoveFetchConfig>): this {\n this.onMoveEvent(handler, { type: '' }, fetchConfig)\n return this\n }\n\n onTransactionBlock(\n handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => void,\n filter?: TransactionFilter,\n fetchConfig?: Partial<MoveFetchConfig>\n ): this {\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n\n const processor = this\n\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is null')\n }\n const tx = data.transaction as SuiTransactionBlockResponse\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n tx,\n 0,\n processor.config.baseLabels\n )\n if (tx) {\n await handler(tx, ctx)\n }\n return ctx.stopAndGetResult()\n },\n filters: [{ ...filter, function: '' }],\n fetchConfig: _fetchConfig\n })\n return this\n }\n\n protected onObjectChange(\n handler: (changes: SuiObjectChange[], ctx: SuiObjectChangeContext) => void,\n type: string\n ): this {\n if (this.config.network === SuiNetwork.TEST_NET) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'object change not supported in testnet')\n }\n const processor = this\n this.objectChangeHandlers.push({\n handler: async function (data: Data_SuiObjectChange) {\n const ctx = new SuiObjectChangeContext(\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n data.txDigest,\n processor.config.baseLabels\n )\n await handler(data.changes as SuiObjectChange[], ctx)\n return ctx.stopAndGetResult()\n },\n type\n })\n\n return this\n }\n}\n\nexport class SuiModulesProcessor extends SuiBaseProcessor {\n static bind(options: SuiBindOptions): SuiModulesProcessor {\n return new SuiModulesProcessor('*', options)\n }\n}\n\nexport class SuiGlobalProcessor extends SuiBaseProcessor {\n static bind(options: Omit<SuiBindOptions, 'address'>): SuiGlobalProcessor {\n return new SuiGlobalProcessor('*', { ...options, address: '*' })\n }\n onTransactionBlock(\n handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => void,\n filter: TransactionFilter,\n fetchConfig?: Partial<MoveFetchConfig>\n ): this {\n // TODO enable more strict check\n // if (!filter.publicKeyPrefix || filter.publicKeyPrefix.length < 2) {\n // throw new ServerError(Status.INVALID_ARGUMENT, 'restriction too low for global processor')\n // }\n return super.onTransactionBlock(handler, filter, fetchConfig)\n }\n\n public onObjectChange(\n handler: (changes: SuiObjectChange[], ctx: SuiObjectChangeContext) => void,\n type: string\n ): this {\n return super.onObjectChange(handler, type)\n }\n}\n","import { TypedDevInspectResults, TypedEventInstance, TypedFunctionPayload } from './models.js'\nimport {\n AbstractMoveCoder,\n ANY_TYPE,\n DecodedStruct,\n parseMoveType,\n SPLITTER,\n TypeDescriptor,\n InternalMoveModule\n} from '@typemove/move'\nimport {\n MoveCallSuiTransaction,\n SuiCallArg,\n SuiEvent,\n SuiMoveNormalizedModule,\n SuiMoveObject,\n DevInspectResults,\n SuiClient\n} from '@mysten/sui.js/client'\nimport { toInternalModule } from './to-internal.js'\nimport { SuiChainAdapter } from './sui-chain-adapter.js'\nimport { dynamic_field } from './builtin/0x2.js'\nimport { BCS, getSuiMoveConfig, StructTypeDefinition } from '@mysten/bcs'\n\n// import { Encoding } from '@mysten/bcs/types', this doesn't get exported correctly\nexport type Encoding = 'base58' | 'base64' | 'hex'\n\nimport { normalizeSuiObjectId, normalizeSuiAddress } from '@mysten/sui.js/utils'\n\nexport class MoveCoder extends AbstractMoveCoder<\n // SuiNetwork,\n SuiMoveNormalizedModule,\n SuiEvent | SuiMoveObject\n> {\n bcs = new BCS(getSuiMoveConfig())\n\n constructor(client: SuiClient) {\n super(new SuiChainAdapter(client))\n }\n\n load(module: SuiMoveNormalizedModule, address: string): InternalMoveModule {\n let m = this.moduleMapping.get(module.address + '::' + module.name)\n const mDeclared = this.moduleMapping.get(address + '::' + module.name)\n if (m && mDeclared) {\n return m\n }\n m = toInternalModule(module)\n this.loadInternal(m, address)\n return m\n }\n\n protected async decode(data: any, type: TypeDescriptor): Promise<any> {\n switch (type.qname) {\n case '0x1::ascii::Char':\n if (data !== undefined && typeof data !== 'string') {\n // bcs\n const byte = (await super.decode(data, type)).byte as number\n return String.fromCharCode(byte)\n }\n case '0x1::ascii::String':\n if (data !== undefined && typeof data !== 'string') {\n // bcs verified\n const bytes = (await super.decode(data, type)).bytes as number[]\n return new TextDecoder().decode(new Uint8Array(bytes))\n }\n case '0x2::object::ID':\n if (data !== undefined && typeof data !== 'string') {\n // bcs verified\n const bytes = (await super.decode(data, type)).bytes as string\n return normalizeSuiObjectId(bytes)\n }\n case '0x2::url::Url':\n if (data !== undefined && typeof data !== 'string') {\n // bcs\n return (await super.decode(data, type)).url\n }\n case '0x2::coin::Coin':\n if (data !== undefined && typeof data !== 'string') {\n // bcs\n const bytes = (await super.decode(data, type)).id.id.bytes as number[]\n return new TextDecoder().decode(new Uint8Array(bytes))\n }\n return data\n case '0x2::balance::Balance':\n if (data.value) {\n // bcs verfied\n const balance = await super.decode(data, type)\n return balance.value\n }\n return BigInt(data)\n case '0x1::option::Option':\n if (data === null) {\n return data\n }\n if (data.vec) {\n // bcs verifed\n let vec = await super.decode(data, type)\n vec = vec.vec\n if (vec.length === 0) {\n return null\n }\n return vec[0]\n }\n return this.decode(data, type.typeArgs[0])\n case 'Address':\n const str = data as string\n return normalizeSuiAddress(str)\n case '0x1::string::String':\n if (typeof data !== 'string') {\n // bcs\n return new TextDecoder().decode(new Uint8Array(data.bytes))\n }\n default:\n return super.decode(data, type)\n }\n }\n\n decodeEvent<T>(event: SuiEvent): Promise<TypedEventInstance<T> | undefined> {\n return this.decodedStruct(event)\n }\n filterAndDecodeEvents<T>(type: TypeDescriptor<T> | string, resources: SuiEvent[]): Promise<TypedEventInstance<T>[]> {\n if (typeof type === 'string') {\n type = parseMoveType(type)\n }\n return this.filterAndDecodeStruct(type, resources)\n }\n\n async getDynamicFields<T1, T2>(\n objects: SuiMoveObject[],\n keyType: TypeDescriptor<T1> = ANY_TYPE,\n valueType: TypeDescriptor<T2> = ANY_TYPE\n ): Promise<dynamic_field.Field<T1, T2>[]> {\n // const type = dynamic_field.Field.TYPE\n // Not using the code above to avoid cycle initialize failed\n const type = new TypeDescriptor<dynamic_field.Field<T1, T2>>('0x2::dynamic_field::Field')\n type.typeArgs = [keyType, valueType]\n const res = await this.filterAndDecodeObjects(type, objects)\n return res.map((o) => o.data_decoded)\n }\n\n filterAndDecodeObjects<T>(\n type: TypeDescriptor<T>,\n objects: SuiMoveObject[]\n ): Promise<DecodedStruct<SuiMoveObject, T>[]> {\n return this.filterAndDecodeStruct(type, objects)\n }\n\n async decodeFunctionPayload(payload: MoveCallSuiTransaction, inputs: SuiCallArg[]): Promise<MoveCallSuiTransaction> {\n const functionType = [payload.package, payload.module, payload.function].join(SPLITTER)\n const func = await this.getMoveFunction(functionType)\n const params = this.adapter.getMeaningfulFunctionParams(func.params)\n const args = []\n for (const value of payload.arguments || []) {\n const argValue = value as any\n if ('Input' in (argValue as any)) {\n const idx = argValue.Input\n const arg = inputs[idx]\n if (arg.type === 'pure') {\n args.push(arg.value)\n } else if (arg.type === 'object') {\n // object is not there\n args.push(undefined)\n } else {\n console.error('unexpected function arg value')\n args.push(undefined)\n }\n // args.push(arg) // TODO check why ts not work using arg.push(arg)\n } else {\n args.push(undefined)\n }\n }\n\n const argumentsTyped = await this.decodeArray(args, params, false)\n return {\n ...payload,\n arguments_decoded: argumentsTyped\n } as TypedFunctionPayload<any>\n }\n\n private async _registerBCSType(qname: string): Promise<void> {\n if (this.bcs.hasType(qname)) {\n return\n }\n const moveStruct = await this.getMoveStruct(qname)\n const structDef: StructTypeDefinition = {}\n\n for (const field of moveStruct.fields) {\n structDef[field.name] = field.type.getNormalizedSignature()\n }\n let typeName = qname\n const generics = moveStruct.typeParams.map((p, idx) => 'T' + idx).join(', ')\n if (generics) {\n typeName = typeName + '<' + generics + '>'\n }\n\n this.bcs.registerStructType(typeName, structDef)\n\n for (const field of moveStruct.fields) {\n await this.registerBCSTypes(field.type)\n }\n }\n\n private bcsRegistered = new Set<string>()\n\n async registerBCSTypes(type: TypeDescriptor): Promise<void> {\n const sig = type.getNormalizedSignature()\n if (this.bcsRegistered.has(sig)) {\n return\n }\n this.bcsRegistered.add(sig)\n\n await this._registerBCSType('0x1::string::String')\n\n for (const typeArg of type.dependedTypes()) {\n await this._registerBCSType(typeArg)\n }\n }\n\n async decodeBCS(type: TypeDescriptor, data: Uint8Array | string, encoding?: Encoding): Promise<any> {\n await this.registerBCSTypes(type)\n return this.bcs.de(type.getNormalizedSignature(), data, encoding)\n }\n\n async decodeDevInspectResult<T extends any[]>(inspectRes: DevInspectResults): Promise<TypedDevInspectResults<T>> {\n const returnValues = []\n if (inspectRes.results != null) {\n for (const r of inspectRes.results) {\n if (r.returnValues) {\n for (const returnValue of r.returnValues) {\n const type = parseMoveType(returnValue[1])\n const bcsDecoded = await this.decodeBCS(type, new Uint8Array(returnValue[0]))\n const decoded = await this.decodedType(bcsDecoded, type)\n returnValues.push(decoded)\n }\n } else {\n returnValues.push(null)\n }\n }\n }\n return { ...inspectRes, results_decoded: returnValues as any }\n }\n}\n\nconst DEFAULT_ENDPOINT = 'https://fullnode.mainnet.sui.io/'\nconst CODER_MAP = new Map<string, MoveCoder>()\nconst CHAIN_ID_CODER_MAP = new Map<string, MoveCoder>()\n\nexport function defaultMoveCoder(endpoint: string = DEFAULT_ENDPOINT): MoveCoder {\n let coder = CODER_MAP.get(endpoint)\n if (!coder) {\n coder = new MoveCoder(new SuiClient({ url: endpoint }))\n CODER_MAP.set(endpoint, coder)\n }\n return coder\n}\n\nconst PROVIDER_CODER_MAP = new Map<SuiClient, MoveCoder>()\n\nlet DEFAULT_CHAIN_ID: string | undefined\n\nexport async function getMoveCoder(client: SuiClient): Promise<MoveCoder> {\n let coder = PROVIDER_CODER_MAP.get(client)\n if (!coder) {\n coder = new MoveCoder(client)\n // TODO how to dedup\n const id = await client.getChainIdentifier()\n const defaultCoder = defaultMoveCoder()\n if (!DEFAULT_CHAIN_ID) {\n DEFAULT_CHAIN_ID = await defaultCoder.adapter.getChainId()\n }\n if (id === DEFAULT_CHAIN_ID) {\n coder = defaultCoder\n }\n\n PROVIDER_CODER_MAP.set(client, coder)\n }\n return coder\n}\n","import { MoveCoder } from '@typemove/sui'\n\nimport { getClient, SuiNetwork } from './network.js'\n\nconst CODERS = new Map<SuiNetwork, MoveCoder>()\n\nexport function defaultMoveCoder(network: SuiNetwork = SuiNetwork.MAIN_NET): MoveCoder {\n let coder = CODERS.get(network)\n if (!coder) {\n coder = new MoveCoder(getClient(network))\n CODERS.set(network, coder)\n }\n\n return coder\n}\n","import { RecordMetaData } from '@sentio/protos'\nimport { type Labels, normalizeLabels } from '../index.js'\nimport { getClient, SuiNetwork } from './network.js'\nimport {\n SuiTransactionBlockResponse,\n SuiEvent,\n SuiMoveNormalizedModule,\n SuiMoveObject,\n SuiClient\n} from '@mysten/sui.js/client'\nimport { MoveCoder } from './index.js'\nimport { defaultMoveCoder } from './move-coder.js'\nimport { MoveAccountContext, MoveContext } from '../move/index.js'\n\nexport class SuiContext extends MoveContext<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {\n moduleName: string\n timestamp: Date\n checkpoint: bigint\n transaction: SuiTransactionBlockResponse\n eventIndex: number\n coder: MoveCoder\n\n constructor(\n moduleName: string,\n network: SuiNetwork,\n address: string,\n timestamp: Date,\n checkpoint: bigint,\n transaction: SuiTransactionBlockResponse,\n eventIndex: number,\n baseLabels: Labels | undefined\n ) {\n super(baseLabels)\n this.address = address.toLowerCase()\n this.network = network\n this.moduleName = moduleName\n this.timestamp = timestamp\n this.checkpoint = checkpoint\n this.eventIndex = eventIndex\n this.coder = defaultMoveCoder(network)\n if (transaction) {\n this.transaction = transaction\n }\n }\n\n getChainId() {\n return this.network\n }\n\n getTimestamp(): number {\n return this.timestamp.getDate()\n }\n\n getMetaDataInternal(name: string, labels: Labels): RecordMetaData {\n return {\n address: this.address,\n contractName: this.moduleName,\n blockNumber: this.checkpoint,\n transactionIndex: 0,\n transactionHash: this.transaction?.digest || '', // TODO\n logIndex: this.eventIndex,\n chainId: this.getChainId(),\n name: name,\n labels: normalizeLabels(labels)\n }\n }\n\n get client(): SuiClient {\n return getClient(this.network)\n }\n}\n\nexport class SuiObjectChangeContext extends MoveContext<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {\n timestamp: Date\n checkpoint: bigint\n coder: MoveCoder\n txDigest: string\n\n constructor(\n network: SuiNetwork,\n address: string,\n timestamp: Date,\n checkpoint: bigint,\n txDigest: string,\n baseLabels: Labels | undefined\n ) {\n super(baseLabels)\n this.address = address\n this.network = network\n this.timestamp = timestamp\n this.checkpoint = checkpoint\n this.txDigest = txDigest\n this.coder = defaultMoveCoder(network)\n }\n\n getChainId() {\n return this.network\n }\n\n getTimestamp(): number {\n return this.timestamp.getDate()\n }\n\n getMetaDataInternal(name: string, labels: Labels): RecordMetaData {\n return {\n address: this.address,\n contractName: '*',\n blockNumber: this.checkpoint,\n transactionIndex: -1,\n transactionHash: this.txDigest,\n logIndex: 0,\n chainId: this.getChainId(),\n name: name,\n labels: normalizeLabels(labels)\n }\n }\n\n get client(): SuiClient {\n return getClient(this.network)\n }\n}\n\n// TODO address handler should use this context\nexport class SuiAddressContext extends MoveAccountContext<\n SuiNetwork,\n SuiMoveNormalizedModule,\n SuiEvent | SuiMoveObject\n> {\n address: string\n network: SuiNetwork\n checkpoint: bigint\n timestamp: Date\n coder: MoveCoder\n\n protected contractName = 'address'\n\n constructor(\n network: SuiNetwork,\n address: string,\n checkpoint: bigint,\n timestamp: Date,\n baseLabels: Labels | undefined\n ) {\n super(baseLabels)\n this.address = address\n this.network = network\n this.checkpoint = checkpoint\n this.timestamp = timestamp\n this.coder = defaultMoveCoder(network)\n }\n\n getChainId() {\n return this.network\n }\n\n getMetaDataInternal(name: string, labels: Labels): RecordMetaData {\n return {\n address: this.address,\n contractName: this.contractName,\n blockNumber: this.checkpoint,\n transactionIndex: 0,\n transactionHash: '',\n logIndex: 0,\n chainId: this.getChainId(),\n name: name,\n labels: normalizeLabels(labels)\n }\n }\n\n get client(): SuiClient {\n return getClient(this.network)\n }\n\n getTimestamp(): number {\n return this.timestamp.getDate()\n }\n}\n\nexport class SuiObjectContext extends SuiAddressContext {\n contractName = 'object'\n objectId: string\n\n constructor(\n network: SuiNetwork,\n objectId: string,\n checkpoint: bigint,\n timestamp: Date,\n baseLabels: Labels | undefined\n ) {\n super(network, objectId, checkpoint, timestamp, baseLabels)\n this.objectId = objectId\n }\n}\n","import {\n SuiTransactionBlockResponse,\n MoveCallSuiTransaction,\n ProgrammableTransaction,\n SuiTransaction\n} from '@mysten/sui.js/client'\nimport { accountTypeString } from '@typemove/move'\n\nexport function getMoveCalls(txBlock: SuiTransactionBlockResponse) {\n const txKind = txBlock.transaction?.data.transaction\n if (!txKind) {\n return []\n }\n const programmableTx: ProgrammableTransaction | undefined =\n txKind.kind === 'ProgrammableTransaction' ? txKind : undefined\n if (!programmableTx) {\n return []\n }\n\n return programmableTx.transactions.flatMap((tx: SuiTransaction) => {\n if ('MoveCall' in tx) {\n const call = tx.MoveCall as MoveCallSuiTransaction\n call.package = accountTypeString(call.package)\n\n return [call]\n }\n return []\n })\n}\n\n// function isHex(value: string): boolean {\n// return /^(0x|0X)?[a-fA-F0-9]+$/.test(value)\n// }\n//\n// function getHexByteLength(value: string): number {\n// return /^(0x|0X)/.test(value) ? (value.length - 2) / 2 : value.length / 2\n// }\n//\n// export function isValidSuiAddress(value: string): value is SuiAddress {\n// return isHex(value) && getHexByteLength(value) <= SUI_ADDRESS_LENGTH\n// }\n\n// export function validateAndNormalizeAddress(address: string): string {\n// // if (isFrameworkAccount(address)) {\n// // const n = parseInt(address, 16)\n// // return `0x${n.toString(16)}`\n// // }\n// if (!isValidSuiAddress(address)) {\n// throw Error('Not valid Address')\n// }\n// return normalizeSuiAddress(address)\n// }\n","import {\n Data_SuiCall,\n Data_SuiObject,\n HandleInterval,\n MoveAccountFetchConfig,\n MoveFetchConfig,\n MoveOwnerType,\n ProcessResult\n} from '@sentio/protos'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { SuiNetwork } from './network.js'\nimport { SuiAddressContext, SuiContext, SuiObjectContext } from './context.js'\nimport { SuiMoveObject, SuiTransactionBlockResponse } from '@mysten/sui.js/client'\nimport { PromiseOrVoid } from '../core/index.js'\nimport { configure, DEFAULT_FETCH_CONFIG, IndexConfigure, SuiBindOptions } from './sui-processor.js'\nimport { CallHandler, TransactionFilter } from '../move/index.js'\nimport { ServerError, Status } from 'nice-grpc'\n\nexport interface SuiObjectBindOptions {\n objectId: string\n network?: SuiNetwork\n startCheckpoint?: bigint\n baseLabels?: { [key: string]: string }\n}\n\ninterface ObjectHandler {\n type?: string\n checkPointInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n fetchConfig: MoveAccountFetchConfig\n handler: (resource: Data_SuiObject) => Promise<ProcessResult>\n}\n\nexport const DEFAULT_ACCOUNT_FETCH_CONFIG: MoveAccountFetchConfig = {\n owned: false\n}\n\nexport class SuiAccountProcessorState extends ListStateStorage<SuiBaseObjectOrAddressProcessor<any>> {\n static INSTANCE = new SuiAccountProcessorState()\n}\n\nexport interface SuiInternalObjectsBindOptions extends SuiBindOptions {\n ownerType: MoveOwnerType\n}\n\nexport abstract class SuiBaseObjectOrAddressProcessor<HandlerType> {\n config: IndexConfigure\n ownerType: MoveOwnerType\n\n objectHandlers: ObjectHandler[] = []\n\n // static bind(options: SuiObjectsBindOptions): SuiBaseObjectsProcessor<any> {\n // return new SuiBaseObjectsProcessor(options)\n // }\n\n protected constructor(options: SuiInternalObjectsBindOptions) {\n this.config = configure(options)\n this.ownerType = options.ownerType\n SuiAccountProcessorState.INSTANCE.addValue(this)\n }\n\n getChainId(): string {\n return this.config.network\n }\n\n // protected abstract transformObjects(objects: SuiMoveObject[]): SuiMoveObject[]\n\n protected abstract doHandle(handler: HandlerType, data: Data_SuiObject, ctx: SuiObjectContext): PromiseOrVoid\n\n public onInterval(\n handler: HandlerType, //(resources: SuiMoveObject[], ctx: SuiObjectsContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n checkpointInterval: HandleInterval | undefined,\n type: string | undefined,\n fetchConfig: Partial<MoveAccountFetchConfig> | undefined\n ): this {\n const processor = this\n this.objectHandlers.push({\n handler: async function (data) {\n const ctx = new SuiObjectContext(\n processor.config.network,\n processor.config.address,\n data.slot,\n data.timestamp || new Date(0),\n processor.config.baseLabels\n )\n await processor.doHandle(handler, data, ctx)\n return ctx.stopAndGetResult()\n },\n timeIntervalInMinutes: timeInterval,\n checkPointInterval: checkpointInterval,\n type,\n fetchConfig: { ...DEFAULT_ACCOUNT_FETCH_CONFIG, ...fetchConfig }\n })\n return this\n }\n\n public onTimeInterval(\n handler: HandlerType,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n type?: string,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes\n },\n undefined,\n type,\n fetchConfig\n )\n }\n\n public onCheckpointInterval(\n handler: HandlerType,\n checkpointInterval = 100000,\n backfillCheckpointInterval = 400000,\n type?: string,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: checkpointInterval, backfillInterval: backfillCheckpointInterval },\n type,\n fetchConfig\n )\n }\n}\n\nexport class SuiAddressProcessor extends SuiBaseObjectOrAddressProcessor<\n (objects: SuiMoveObject[], ctx: SuiAddressContext) => PromiseOrVoid\n> {\n callHandlers: CallHandler<Data_SuiCall>[] = []\n\n static bind(options: SuiBindOptions): SuiAddressProcessor {\n return new SuiAddressProcessor({ ...options, ownerType: MoveOwnerType.ADDRESS })\n }\n\n protected doHandle(\n handler: (objects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ): PromiseOrVoid {\n return handler(data.objects as SuiMoveObject[], ctx)\n }\n\n onTransactionBlock(\n handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => void,\n filter?: TransactionFilter,\n fetchConfig?: Partial<MoveFetchConfig>\n ) {\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n const _filter: TransactionFilter = {\n fromAndToAddress: {\n from: '',\n to: this.config.address\n },\n ...filter\n }\n\n const processor = this\n\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is null')\n }\n const tx = data.transaction as SuiTransactionBlockResponse\n\n const ctx = new SuiContext(\n 'object',\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n tx,\n 0,\n processor.config.baseLabels\n )\n if (tx) {\n await handler(tx, ctx)\n }\n return ctx.stopAndGetResult()\n },\n filters: [{ ..._filter, function: '' }],\n fetchConfig: _fetchConfig\n })\n return this\n }\n}\n\nexport class SuiObjectProcessor extends SuiBaseObjectOrAddressProcessor<\n (self: SuiMoveObject, dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid\n> {\n static bind(options: SuiObjectBindOptions): SuiObjectProcessor {\n return new SuiObjectProcessor({\n address: options.objectId,\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n ownerType: MoveOwnerType.OBJECT,\n baseLabels: options.baseLabels\n })\n }\n\n protected doHandle(\n handler: (self: SuiMoveObject, dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ): PromiseOrVoid {\n if (!data.self) {\n console.log(`Sui object not existed in ${ctx.checkpoint}, please specific a start time`)\n return\n }\n return handler(data.self as SuiMoveObject, data.objects as SuiMoveObject[], ctx)\n }\n}\n\nexport class SuiWrappedObjectProcessor extends SuiBaseObjectOrAddressProcessor<\n (dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid\n> {\n static bind(options: SuiObjectBindOptions): SuiWrappedObjectProcessor {\n return new SuiWrappedObjectProcessor({\n address: options.objectId,\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n ownerType: MoveOwnerType.WRAPPED_OBJECT,\n baseLabels: options.baseLabels\n })\n }\n\n protected doHandle(\n handler: (dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ): PromiseOrVoid {\n return handler(data.objects as SuiMoveObject[], ctx)\n }\n}\n","import { HandleInterval, MoveAccountFetchConfig, MoveFetchConfig } from '@sentio/protos'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { SuiAddressContext, SuiContext, SuiObjectContext } from './context.js'\nimport { SuiMoveObject, SuiTransactionBlockResponse } from '@mysten/sui.js/client'\nimport { PromiseOrVoid } from '../core/index.js'\nimport {\n DEFAULT_ACCOUNT_FETCH_CONFIG,\n SuiAddressProcessor,\n SuiBaseObjectOrAddressProcessor,\n SuiObjectBindOptions,\n SuiObjectProcessor,\n SuiWrappedObjectProcessor\n} from './sui-object-processor.js'\nimport { TemplateInstanceState } from '../core/template.js'\nimport { SuiBindOptions } from './sui-processor.js'\nimport { TransactionFilter } from '../move/index.js'\n\nclass ObjectHandler<HandlerType> {\n type?: string\n checkpointInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: HandlerType\n fetchConfig: MoveAccountFetchConfig\n}\n\nexport class SuiAccountProcessorTemplateState extends ListStateStorage<\n SuiObjectOrAddressProcessorTemplate<any, any, any>\n> {\n static INSTANCE = new SuiAccountProcessorTemplateState()\n}\n\nexport abstract class SuiObjectOrAddressProcessorTemplate<\n HandlerType,\n OptionType extends SuiObjectBindOptions | SuiBindOptions,\n ProcessorType extends SuiBaseObjectOrAddressProcessor<HandlerType>\n> {\n id: number\n objectHandlers: ObjectHandler<HandlerType>[] = []\n binds = new Set<string>()\n\n constructor() {\n this.id = SuiAccountProcessorTemplateState.INSTANCE.getValues().length\n SuiAccountProcessorTemplateState.INSTANCE.addValue(this)\n }\n\n protected abstract createProcessor(options: SuiObjectBindOptions | SuiBindOptions): ProcessorType\n\n bind(options: OptionType, ctx: SuiContext): void {\n options.network = options.network || ctx.network\n options.startCheckpoint = options.startCheckpoint || ctx.checkpoint\n const id = (options as SuiObjectBindOptions).objectId || (options as SuiBindOptions).address\n\n const sig = [options.network, id].join('_')\n if (this.binds.has(sig)) {\n console.log(`Same object id can be bind to one template only once, ignore duplicate bind: ${sig}`)\n return\n }\n this.binds.add(sig)\n\n const processor = this.createProcessor(options)\n for (const h of this.objectHandlers) {\n processor.onInterval(h.handler, h.timeIntervalInMinutes, h.checkpointInterval, h.type, h.fetchConfig)\n }\n const config = processor.config\n\n ctx.update({\n states: {\n configUpdated: true\n }\n })\n TemplateInstanceState.INSTANCE.addValue({\n templateId: this.id,\n contract: {\n name: '',\n chainId: config.network,\n address: config.address,\n abi: ''\n },\n startBlock: config.startCheckpoint,\n endBlock: 0n,\n baseLabels: config.baseLabels\n })\n }\n\n protected onInterval(\n handler: HandlerType,\n timeInterval: HandleInterval | undefined,\n checkpointInterval: HandleInterval | undefined,\n type: string | undefined,\n fetchConfig: Partial<MoveAccountFetchConfig> | undefined\n ): this {\n this.objectHandlers.push({\n handler: handler,\n timeIntervalInMinutes: timeInterval,\n checkpointInterval: checkpointInterval,\n type,\n fetchConfig: { ...DEFAULT_ACCOUNT_FETCH_CONFIG, ...fetchConfig }\n })\n return this\n }\n\n public onTimeInterval(\n handler: HandlerType,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n type?: string,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes\n },\n undefined,\n type,\n fetchConfig\n )\n }\n\n public onCheckpointInterval(\n handler: HandlerType,\n checkpointInterval = 100000,\n backfillCheckpointInterval = 400000,\n type?: string,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: checkpointInterval, backfillInterval: backfillCheckpointInterval },\n type,\n fetchConfig\n )\n }\n}\n\nclass AddressTransactionHandler {\n handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => void\n filter?: TransactionFilter\n fetchConfig?: Partial<MoveFetchConfig>\n}\n\nexport class SuiAddressProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<\n (objects: SuiMoveObject[], ctx: SuiAddressContext) => PromiseOrVoid,\n SuiBindOptions,\n SuiAddressProcessor\n> {\n private handlers: AddressTransactionHandler[] = []\n\n createProcessor(options: SuiBindOptions): SuiAddressProcessor {\n const p = SuiAddressProcessor.bind(options)\n for (const handler of this.handlers) {\n p.onTransactionBlock(handler.handler, handler.filter, handler.fetchConfig)\n }\n return p\n }\n\n onTransactionBlock(\n handler: (transaction: SuiTransactionBlockResponse, ctx: SuiContext) => void,\n filter?: TransactionFilter,\n fetchConfig?: Partial<MoveFetchConfig>\n ): this {\n this.handlers.push({\n handler,\n filter,\n fetchConfig\n })\n return this\n }\n}\n\nexport class SuiObjectProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<\n (self: SuiMoveObject, dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid,\n SuiObjectBindOptions,\n SuiObjectProcessor\n> {\n createProcessor(options: SuiObjectBindOptions): SuiObjectProcessor {\n return SuiObjectProcessor.bind(options)\n }\n}\n\nexport class SuiWrappedObjectProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<\n (dynamicFieldObjects: SuiMoveObject[], ctx: SuiObjectContext) => PromiseOrVoid,\n SuiObjectBindOptions,\n SuiWrappedObjectProcessor\n> {\n createProcessor(options: SuiObjectBindOptions): SuiWrappedObjectProcessor {\n return SuiWrappedObjectProcessor.bind(options)\n }\n}\n","import { errorString, mergeProcessResults, Plugin, PluginManager, USER_PROCESSOR } from '@sentio/runtime'\nimport {\n AccountConfig,\n ContractConfig,\n Data_SuiCall,\n Data_SuiEvent,\n Data_SuiObject,\n Data_SuiObjectChange,\n DataBinding,\n HandlerType,\n MoveCallHandlerConfig,\n MoveEventHandlerConfig,\n MoveResourceChangeConfig,\n ProcessConfigResponse,\n ProcessResult,\n StartRequest\n} from '@sentio/protos'\n\nimport { ServerError, Status } from 'nice-grpc'\n\nimport { SuiProcessorState } from './sui-processor.js'\nimport { SuiAccountProcessorState, SuiAddressProcessor } from './sui-object-processor.js'\nimport { initCoinList } from './ext/coin.js'\nimport { SuiChainId } from '@sentio/chain'\nimport {\n SuiAccountProcessorTemplateState,\n SuiObjectOrAddressProcessorTemplate\n} from './sui-object-processor-template.js'\nimport { SuiNetwork } from './network.js'\nimport { SuiContext } from './context.js'\n\ninterface Handlers {\n suiEventHandlers: ((event: Data_SuiEvent) => Promise<ProcessResult>)[]\n suiCallHandlers: ((func: Data_SuiCall) => Promise<ProcessResult>)[]\n suiObjectHandlers: ((object: Data_SuiObject) => Promise<ProcessResult>)[]\n suiObjectChangeHandlers: ((object: Data_SuiObjectChange) => Promise<ProcessResult>)[]\n}\n\nexport class SuiPlugin extends Plugin {\n name: string = 'SuiPlugin'\n handlers: Handlers = {\n suiCallHandlers: [],\n suiEventHandlers: [],\n suiObjectHandlers: [],\n suiObjectChangeHandlers: []\n }\n async start(request: StartRequest): Promise<void> {\n await initCoinList()\n\n console.log('total instances:', request.templateInstances.length)\n const allowedChainIds = new Set<string>(Object.values(SuiChainId))\n for (const instance of request.templateInstances) {\n if (!allowedChainIds.has(instance.contract?.chainId || '')) {\n continue\n }\n\n console.log('start template instance', instance.templateId)\n const template: SuiObjectOrAddressProcessorTemplate<any, any, any> =\n SuiAccountProcessorTemplateState.INSTANCE.getValues()[instance.templateId]\n\n template.bind(\n {\n address: instance.contract?.address || '',\n objectId: instance.contract?.address || '',\n network: <SuiNetwork>instance.contract?.chainId || SuiNetwork.MAIN_NET,\n startCheckpoint: instance.startBlock || 0n,\n baseLabels: instance.baseLabels\n },\n NoopContext\n )\n }\n }\n\n async configure(config: ProcessConfigResponse) {\n const handlers: Handlers = {\n suiCallHandlers: [],\n suiEventHandlers: [],\n suiObjectHandlers: [],\n suiObjectChangeHandlers: []\n }\n for (const suiProcessor of SuiProcessorState.INSTANCE.getValues()) {\n const contractConfig = ContractConfig.fromPartial({\n transactionConfig: [],\n processorType: USER_PROCESSOR,\n contract: {\n name: suiProcessor.moduleName,\n chainId: suiProcessor.config.network,\n address: suiProcessor.config.address,\n abi: ''\n },\n startBlock: suiProcessor.config.startCheckpoint\n })\n for (const handler of suiProcessor.eventHandlers) {\n const handlerId = handlers.suiEventHandlers.push(handler.handler) - 1\n const eventHandlerConfig: MoveEventHandlerConfig = {\n filters: handler.filters.map((f) => {\n return {\n type: f.type,\n account: f.account || ''\n }\n }),\n fetchConfig: handler.fetchConfig,\n handlerId\n }\n contractConfig.moveEventConfigs.push(eventHandlerConfig)\n }\n for (const handler of suiProcessor.callHandlers) {\n const handlerId = handlers.suiCallHandlers.push(handler.handler) - 1\n const functionHandlerConfig: MoveCallHandlerConfig = {\n filters: handler.filters.map((filter) => {\n return {\n function: filter.function,\n typeArguments: filter.typeArguments || [],\n withTypeArguments: !!filter.typeArguments,\n includeFailed: filter.includeFailed || false,\n publicKeyPrefix: filter.publicKeyPrefix || '',\n fromAndToAddress: filter.fromAndToAddress\n }\n }),\n fetchConfig: handler.fetchConfig,\n handlerId\n }\n contractConfig.moveCallConfigs.push(functionHandlerConfig)\n }\n for (const handler of suiProcessor.objectChangeHandlers) {\n const handlerId = handlers.suiObjectChangeHandlers.push(handler.handler) - 1\n const objectChangeHandler: MoveResourceChangeConfig = {\n type: handler.type,\n handlerId\n }\n contractConfig.moveResourceChangeConfigs.push(objectChangeHandler)\n }\n config.contractConfigs.push(contractConfig)\n }\n\n for (const processor of SuiAccountProcessorState.INSTANCE.getValues()) {\n const accountConfig = AccountConfig.fromPartial({\n address: processor.config.address,\n chainId: processor.getChainId(),\n startBlock: processor.config.startCheckpoint // TODO maybe use another field\n })\n for (const handler of processor.objectHandlers) {\n const handlerId = handlers.suiObjectHandlers.push(handler.handler) - 1\n accountConfig.moveIntervalConfigs.push({\n intervalConfig: {\n handlerId: handlerId,\n minutes: 0,\n minutesInterval: handler.timeIntervalInMinutes,\n slot: 0,\n slotInterval: handler.checkPointInterval,\n fetchConfig: undefined\n },\n type: handler.type || '',\n ownerType: processor.ownerType,\n fetchConfig: handler.fetchConfig\n })\n }\n\n if (processor instanceof SuiAddressProcessor) {\n for (const handler of processor.callHandlers) {\n const handlerId = handlers.suiCallHandlers.push(handler.handler) - 1\n const functionHandlerConfig: MoveCallHandlerConfig = {\n filters: handler.filters.map((filter) => {\n return {\n function: filter.function,\n typeArguments: filter.typeArguments || [],\n withTypeArguments: !!filter.typeArguments,\n includeFailed: filter.includeFailed || false,\n publicKeyPrefix: filter.publicKeyPrefix || '',\n fromAndToAddress: filter.fromAndToAddress\n }\n }),\n fetchConfig: handler.fetchConfig,\n handlerId\n }\n accountConfig.moveCallConfigs.push(functionHandlerConfig)\n }\n }\n\n config.accountConfigs.push(accountConfig)\n }\n this.handlers = handlers\n }\n\n async processSuiEvent(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.suiEvent) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Event can't be empty\")\n }\n const promises: Promise<ProcessResult>[] = []\n const event = binding.data.suiEvent\n\n for (const handlerId of binding.handlerIds) {\n promises.push(\n this.handlers.suiEventHandlers[handlerId](event).catch((e) => {\n throw new ServerError(\n Status.INTERNAL,\n 'error processing event: ' + JSON.stringify(event) + '\\n' + errorString(e)\n )\n })\n )\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n\n async processSuiFunctionCall(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.suiCall) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Call can't be empty\")\n }\n const call = binding.data.suiCall\n\n const promises: Promise<ProcessResult>[] = []\n for (const handlerId of binding.handlerIds) {\n const promise = this.handlers.suiCallHandlers[handlerId](call).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing call: ' + JSON.stringify(call) + '\\n' + errorString(e))\n })\n promises.push(promise)\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n\n async processSuiObject(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.suiObject) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Object can't be empty\")\n }\n const object = binding.data.suiObject\n\n const promises: Promise<ProcessResult>[] = []\n for (const handlerId of binding.handlerIds) {\n promises.push(\n this.handlers.suiObjectHandlers[handlerId](object).catch((e) => {\n throw new ServerError(\n Status.INTERNAL,\n 'error processing object: ' + JSON.stringify(object) + '\\n' + errorString(e)\n )\n })\n )\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n\n async processSuiObjectChange(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data?.suiObjectChange) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Object change can't be empty\")\n }\n const objectChange = binding.data.suiObjectChange\n\n const promises: Promise<ProcessResult>[] = []\n for (const handlerId of binding.handlerIds) {\n promises.push(\n this.handlers.suiObjectChangeHandlers[handlerId](objectChange).catch((e) => {\n throw new ServerError(\n Status.INTERNAL,\n 'error processing object change: ' + JSON.stringify(objectChange) + '\\n' + errorString(e)\n )\n })\n )\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n\n supportedHandlers = [\n HandlerType.SUI_EVENT,\n HandlerType.SUI_CALL,\n HandlerType.SUI_OBJECT,\n HandlerType.SUI_OBJECT_CHANGE\n ]\n\n processBinding(request: DataBinding): Promise<ProcessResult> {\n switch (request.handlerType) {\n case HandlerType.SUI_EVENT:\n return this.processSuiEvent(request)\n case HandlerType.SUI_CALL:\n return this.processSuiFunctionCall(request)\n case HandlerType.SUI_OBJECT:\n return this.processSuiObject(request)\n case HandlerType.SUI_OBJECT_CHANGE:\n return this.processSuiObjectChange(request)\n default:\n throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)\n }\n }\n}\n\nPluginManager.INSTANCE.register(new SuiPlugin())\n\nconst NoopContext = new SuiContext('', SuiChainId.SUI_MAINNET, '', new Date(), 0n, {} as any, 0, {})\n"],"mappings":"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","names":["ListStateStorage","mergeProcessResults","import_nice_grpc","MoveCoder","AbstractMoveCoder","BCS","getSuiMoveConfig","client","SuiChainAdapter","module","address","m","mDeclared","toInternalModule","data","type","byte","bytes","normalizeSuiObjectId","vec","normalizeSuiAddress","event","resources","parseMoveType","objects","keyType","ANY_TYPE","valueType","TypeDescriptor","o","payload","inputs","functionType","SPLITTER","func","params","args","value","argValue","idx","arg","argumentsTyped","qname","moveStruct","structDef","field","typeName","generics","p","sig","typeArg","encoding","inspectRes","returnValues","r","returnValue","bcsDecoded","decoded","CODERS","defaultMoveCoder","network","SuiNetwork","coder","MoveCoder","getClient","SuiContext","MoveContext","moduleName","network","address","timestamp","checkpoint","transaction","eventIndex","baseLabels","defaultMoveCoder","name","labels","normalizeLabels","getClient","SuiObjectChangeContext","txDigest","SuiAddressContext","MoveAccountContext","SuiObjectContext","objectId","getMoveCalls","txBlock","txKind","programmableTx","tx","call","accountTypeString","DEFAULT_FETCH_CONFIG","configure","options","accountAddressString","SuiNetwork","_SuiProcessorState","ListStateStorage","SuiProcessorState","__publicField","SuiBaseProcessor","name","defaultMoveCoder","handler","filter","fetchConfig","_filters","_fetchConfig","MoveFetchConfig","processor","allEventType","f","data","txn","processResults","evt","idx","_","module","type","parseMoveType","SPLITTER","ctx","SuiContext","decoded","mergeProcessResults","allFunctionType","tx","calls","getMoveCalls","txKind","programmableTx","call","functionType","SuiObjectChangeContext","SuiModulesProcessor","SuiGlobalProcessor","ListStateStorage","import_nice_grpc","DEFAULT_ACCOUNT_FETCH_CONFIG","_SuiAccountProcessorState","ListStateStorage","SuiAccountProcessorState","__publicField","SuiBaseObjectOrAddressProcessor","options","configure","handler","timeInterval","checkpointInterval","type","fetchConfig","processor","data","ctx","SuiObjectContext","timeIntervalInMinutes","backfillTimeIntervalInMinutes","backfillCheckpointInterval","SuiAddressProcessor","MoveOwnerType","filter","_fetchConfig","MoveFetchConfig","DEFAULT_FETCH_CONFIG","_filter","tx","SuiContext","SuiObjectProcessor","SuiWrappedObjectProcessor","ListStateStorage","_SuiAccountProcessorTemplateState","ListStateStorage","SuiAccountProcessorTemplateState","__publicField","SuiObjectOrAddressProcessorTemplate","options","ctx","id","sig","processor","h","config","TemplateInstanceState","handler","timeInterval","checkpointInterval","type","fetchConfig","DEFAULT_ACCOUNT_FETCH_CONFIG","timeIntervalInMinutes","backfillTimeIntervalInMinutes","backfillCheckpointInterval","SuiAddressProcessorTemplate","SuiObjectOrAddressProcessorTemplate","options","p","SuiAddressProcessor","handler","filter","fetchConfig","SuiObjectProcessorTemplate","SuiObjectProcessor","SuiWrappedObjectProcessorTemplate","SuiWrappedObjectProcessor","errorString","mergeProcessResults","Plugin","PluginManager","USER_PROCESSOR","import_nice_grpc","import_chain","SuiPlugin","Plugin","request","initCoinList","allowedChainIds","instance","SuiAccountProcessorTemplateState","SuiNetwork","NoopContext","config","handlers","suiProcessor","SuiProcessorState","contractConfig","ContractConfig","USER_PROCESSOR","handler","handlerId","eventHandlerConfig","f","functionHandlerConfig","filter","objectChangeHandler","processor","SuiAccountProcessorState","accountConfig","AccountConfig","SuiAddressProcessor","binding","promises","event","e","errorString","mergeProcessResults","call","promise","object","objectChange","HandlerType","PluginManager","SuiContext"]}