@sentio/sdk-bundle 3.9.0-rc.12 → 3.9.0-rc.13
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.
- package/lib/aptos/builtin/0x1.js +6 -6
- package/lib/aptos/builtin/0x3.js +7 -7
- package/lib/aptos/builtin/0x4.js +7 -7
- package/lib/aptos/builtin/index.js +8 -8
- package/lib/aptos/ext/index.js +6 -6
- package/lib/aptos/index.js +6 -6
- package/lib/{chunk-GKWJC2YI.js → chunk-26S7KJIT.js} +2 -2
- package/lib/{chunk-JI4FP5EO.js → chunk-3SVRU4MS.js} +3 -3
- package/lib/{chunk-FEBQKFS4.js → chunk-6R2NQ3VR.js} +9 -9
- package/lib/{chunk-FEBQKFS4.js.map → chunk-6R2NQ3VR.js.map} +1 -1
- package/lib/{chunk-OL6YRPTK.js → chunk-BVCEJCB2.js} +4 -4
- package/lib/{chunk-LZDSL5QC.js → chunk-BZ6EYE2I.js} +3 -3
- package/lib/{chunk-4OSIPFLU.js → chunk-COOUCU37.js} +4 -4
- package/lib/{chunk-J55WJILR.js → chunk-CVGW37OQ.js} +2 -2
- package/lib/{chunk-YNXKKBWD.js → chunk-DK6LECDX.js} +3 -3
- package/lib/{chunk-OWQDH3DV.js → chunk-F2EOILX4.js} +3 -3
- package/lib/{chunk-A475EZ6I.js → chunk-IK26N3OU.js} +3 -3
- package/lib/{chunk-U2M7H3L4.js → chunk-K47QREBW.js} +4 -4
- package/lib/{chunk-OJCNTHPM.js → chunk-L4FFB2H3.js} +16 -16
- package/lib/{chunk-OJCNTHPM.js.map → chunk-L4FFB2H3.js.map} +1 -1
- package/lib/{chunk-CKQ6AYH4.js → chunk-MOM77KQ5.js} +11771 -8910
- package/lib/{chunk-CKQ6AYH4.js.map → chunk-MOM77KQ5.js.map} +1 -1
- package/lib/{chunk-QGM4U77D.js → chunk-N4IJSN3I.js} +6 -6
- package/lib/{chunk-BJ5XZJ35.js → chunk-U5ELBG4P.js} +2 -2
- package/lib/{chunk-FDUL3YZM.js → chunk-UIAUNTW3.js} +5 -5
- package/lib/{chunk-RJARVYPW.js → chunk-VUKYZFM7.js} +31 -32
- package/lib/chunk-VUKYZFM7.js.map +1 -0
- package/lib/{chunk-N7WG7KOR.js → chunk-XDGHFKM4.js} +3 -3
- package/lib/{chunk-CYPAA6MD.js → chunk-XPVA66OB.js} +9 -16
- package/lib/chunk-XPVA66OB.js.map +1 -0
- package/lib/{chunk-GSHARKR6.js → chunk-Z4Z4NDFW.js} +5 -5
- package/lib/{chunk-QAYXSXRO.js → chunk-ZU52PSDM.js} +6 -6
- package/lib/core/index.js +1 -1
- package/lib/eth/abi-decoder/decode-worker.js +2 -2
- package/lib/eth/builtin/eacaggregatorproxy.js +4 -4
- package/lib/eth/builtin/erc1155.js +5 -5
- package/lib/eth/builtin/erc20.js +4 -4
- package/lib/eth/builtin/erc721.js +4 -4
- package/lib/eth/builtin/index.js +6 -6
- package/lib/eth/builtin/weth9.js +5 -5
- package/lib/eth/index.js +4 -4
- package/lib/fuel/index.js +3 -3
- package/lib/index.js +1 -1
- package/lib/iota/builtin/0x1.js +9 -9
- package/lib/iota/builtin/0x2.js +10 -10
- package/lib/iota/builtin/0x3.js +11 -11
- package/lib/iota/builtin/index.js +11 -11
- package/lib/iota/ext/index.js +6 -6
- package/lib/iota/index.js +8 -8
- package/lib/move/index.js +2 -2
- package/lib/solana/builtin/index.js +2 -2
- package/lib/solana/index.js +2 -2
- package/lib/store/index.js +1 -1
- package/lib/sui/builtin/0x1.js +9 -9
- package/lib/sui/builtin/0x2.js +10 -10
- package/lib/sui/builtin/0x3.js +11 -11
- package/lib/sui/builtin/index.js +11 -11
- package/lib/sui/ext/index.js +6 -6
- package/lib/sui/index.js +8 -8
- package/lib/testing/index.js +10 -10
- package/lib/utils/index.js +4 -4
- package/package.json +2 -2
- package/lib/chunk-CYPAA6MD.js.map +0 -1
- package/lib/chunk-RJARVYPW.js.map +0 -1
- /package/lib/{chunk-GKWJC2YI.js.map → chunk-26S7KJIT.js.map} +0 -0
- /package/lib/{chunk-JI4FP5EO.js.map → chunk-3SVRU4MS.js.map} +0 -0
- /package/lib/{chunk-OL6YRPTK.js.map → chunk-BVCEJCB2.js.map} +0 -0
- /package/lib/{chunk-LZDSL5QC.js.map → chunk-BZ6EYE2I.js.map} +0 -0
- /package/lib/{chunk-4OSIPFLU.js.map → chunk-COOUCU37.js.map} +0 -0
- /package/lib/{chunk-J55WJILR.js.map → chunk-CVGW37OQ.js.map} +0 -0
- /package/lib/{chunk-YNXKKBWD.js.map → chunk-DK6LECDX.js.map} +0 -0
- /package/lib/{chunk-OWQDH3DV.js.map → chunk-F2EOILX4.js.map} +0 -0
- /package/lib/{chunk-A475EZ6I.js.map → chunk-IK26N3OU.js.map} +0 -0
- /package/lib/{chunk-U2M7H3L4.js.map → chunk-K47QREBW.js.map} +0 -0
- /package/lib/{chunk-QGM4U77D.js.map → chunk-N4IJSN3I.js.map} +0 -0
- /package/lib/{chunk-BJ5XZJ35.js.map → chunk-U5ELBG4P.js.map} +0 -0
- /package/lib/{chunk-FDUL3YZM.js.map → chunk-UIAUNTW3.js.map} +0 -0
- /package/lib/{chunk-N7WG7KOR.js.map → chunk-XDGHFKM4.js.map} +0 -0
- /package/lib/{chunk-GSHARKR6.js.map → chunk-Z4Z4NDFW.js.map} +0 -0
- /package/lib/{chunk-QAYXSXRO.js.map → chunk-ZU52PSDM.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sui/sui-processor.ts","../../../node_modules/.pnpm/@typemove+sui@2.0.2_typescript@6.0.3/node_modules/@typemove/sui/src/models.ts","../../../node_modules/.pnpm/@typemove+sui@2.0.2_typescript@6.0.3/node_modules/@typemove/sui/src/transaction.ts","../../../node_modules/.pnpm/@typemove+sui@2.0.2_typescript@6.0.3/node_modules/@typemove/sui/src/to-internal.ts","../../../node_modules/.pnpm/@typemove+sui@2.0.2_typescript@6.0.3/node_modules/@typemove/sui/src/sui-chain-adapter.ts","../../../node_modules/.pnpm/@typemove+sui@2.0.2_typescript@6.0.3/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/models.ts","../src/sui/sui-plugin.ts","../src/sui/sui-plugin-part.ts","../src/iota/iota-plugin-part.ts","../src/iota/iota-processor.ts","../../../node_modules/.pnpm/@typemove+iota@2.0.2_typescript@6.0.3/node_modules/@typemove/iota/src/models.ts","../../../node_modules/.pnpm/@typemove+iota@2.0.2_typescript@6.0.3/node_modules/@typemove/iota/src/transaction.ts","../../../node_modules/.pnpm/@typemove+iota@2.0.2_typescript@6.0.3/node_modules/@typemove/iota/src/to-internal.ts","../../../node_modules/.pnpm/@typemove+iota@2.0.2_typescript@6.0.3/node_modules/@typemove/iota/src/sui-chain-adapter.ts","../../../node_modules/.pnpm/@typemove+iota@2.0.2_typescript@6.0.3/node_modules/@typemove/iota/src/move-coder.ts","../src/iota/move-coder.ts","../src/iota/context.ts","../src/iota/utils.ts","../src/iota/iota-object-processor.ts","../src/iota/iota-object-processor-template.ts","../src/iota/models.ts","../src/iota/iota-plugin.ts","../src/iota/index.ts","../src/sui/index.ts"],"sourcesContent":["import { Data_SuiCall, Data_SuiEvent, Data_SuiObjectChange, MoveFetchConfig } from '@sentio/protos'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { SuiNetwork } from './network.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { SuiContext, SuiObjectChangeContext } from './context.js'\nimport type { SuiObjectChange } from '@mysten/sui/jsonRpc'\nimport type { GrpcTypes } from '@mysten/sui/grpc'\nimport type { SuiEventInput } from '@typemove/sui'\nimport {\n accountAddressString,\n CallHandler,\n EventFilter,\n EventHandler,\n FunctionNameAndCallFilter,\n ObjectChangeHandler,\n SPLITTER,\n TransactionFilter\n} from '../move/index.js'\nimport { getMoveCalls, getProgrammableTransaction } from './utils.js'\nimport { defaultMoveCoder, MoveCoder } from './index.js'\nimport { ALL_ADDRESS, Labels, PromiseOrVoid } from '../core/index.js'\nimport { Required } from 'utility-types'\nimport { getHandlerName, proxyProcessor } from '../utils/metrics.js'\nimport { HandlerOptions } from './models.js'\n\nexport const DEFAULT_FETCH_CONFIG: MoveFetchConfig = {\n resourceChanges: false,\n allEvents: true,\n inputs: true\n}\n\nexport type IndexConfigure = Required<SuiBindOptions, 'startCheckpoint' | 'network'>\n\nexport function configure(options: SuiBindOptions): IndexConfigure {\n return {\n startCheckpoint: options.startCheckpoint || 0n,\n endCheckpoint: options.endCheckpoint,\n address: options.address === ALL_ADDRESS ? ALL_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 endCheckpoint?: 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 return proxyProcessor(this)\n }\n\n getChainId(): string {\n return this.config.network\n }\n\n protected onMoveEvent<T extends SuiEventInput = SuiEventInput>(\n handler: (event: T, ctx: SuiContext) => PromiseOrVoid,\n filter: EventFilter | EventFilter[],\n handlerOptions?: HandlerOptions<MoveFetchConfig, T>\n ): SuiBaseProcessor {\n let _filters: EventFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...handlerOptions })\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\n this.eventHandlers.push({\n handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'event is null')\n }\n const txn = JSON.parse(data.rawTransaction) as GrpcTypes.ExecutedTransaction\n\n const evt = JSON.parse(data.rawEvent) as SuiEventInput\n // gRPC events carry no sequence; index is resolved by the runtime.\n const idx = 0\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 decoded = await processor.coder.decodeEvent<T>(evt)\n await handler((decoded || evt) as T, ctx)\n\n return ctx.stopAndGetResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n partitionHandler: async (data: Data_SuiEvent): Promise<string | undefined> => {\n const p = handlerOptions?.partitionKey\n if (!p) return undefined\n if (typeof p === 'function') {\n const evt = JSON.parse(data.rawEvent) as SuiEventInput\n const decoded = await processor.coder.decodeEvent<any>(evt)\n return p((decoded || evt) as T)\n }\n return p\n }\n })\n return this\n }\n\n protected onEntryFunctionCall<T extends GrpcTypes.MoveCall = GrpcTypes.MoveCall>(\n handler: (call: T, ctx: SuiContext) => PromiseOrVoid,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n handlerOptions?: HandlerOptions<MoveFetchConfig, T>\n ): SuiBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...handlerOptions })\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 handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const tx = JSON.parse(data.rawTransaction) as GrpcTypes.ExecutedTransaction\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 = getMoveCalls(tx)\n const programmableTx = getProgrammableTransaction(tx)\n if (!programmableTx) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected getTransactionKind get empty')\n }\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 partitionHandler: async (data: Data_SuiCall): Promise<string | undefined> => {\n const p = handlerOptions?.partitionKey\n if (!p) return undefined\n if (typeof p === 'function') {\n const tx = JSON.parse(data.rawTransaction) as GrpcTypes.ExecutedTransaction\n const calls = getMoveCalls(tx)\n // For simplicity, use the first call for partitioning\n if (calls.length > 0) {\n return p(calls[0] as T)\n }\n return undefined\n }\n return p\n }\n })\n return this\n }\n\n onEvent(\n handler: (event: SuiEventInput, ctx: SuiContext) => void,\n handlerOptions?: HandlerOptions<MoveFetchConfig, SuiEventInput>\n ): this {\n this.onMoveEvent(handler, { type: '' }, handlerOptions)\n return this\n }\n\n onTransactionBlock(\n handler: (transaction: GrpcTypes.ExecutedTransaction, ctx: SuiContext) => PromiseOrVoid,\n filter?: TransactionFilter,\n handlerOptions?: HandlerOptions<MoveFetchConfig, GrpcTypes.ExecutedTransaction>\n ): this {\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...handlerOptions })\n\n const processor = this\n\n this.callHandlers.push({\n handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is null')\n }\n const tx = JSON.parse(data.rawTransaction) as GrpcTypes.ExecutedTransaction\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 partitionHandler: async (data: Data_SuiCall): Promise<string | undefined> => {\n const p = handlerOptions?.partitionKey\n if (!p) return undefined\n if (typeof p === 'function') {\n const tx = JSON.parse(data.rawTransaction) as GrpcTypes.ExecutedTransaction\n return p(tx)\n }\n return p\n }\n })\n return this\n }\n\n protected onObjectChange(\n handler: (changes: SuiObjectChange[], ctx: SuiObjectChangeContext) => PromiseOrVoid,\n type: string | 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 handlerName: getHandlerName(),\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.rawChanges.map((r) => JSON.parse(r)) 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(ALL_ADDRESS, options)\n }\n}\n\nexport class SuiGlobalProcessor extends SuiBaseProcessor {\n static bind(options: Omit<SuiBindOptions, 'address'>): SuiGlobalProcessor {\n return new SuiGlobalProcessor(ALL_ADDRESS, { ...options, address: ALL_ADDRESS })\n }\n onTransactionBlock(\n handler: (transaction: GrpcTypes.ExecutedTransaction, 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 // deprecated,, use object type processor\n public onObjectChange(\n handler: (changes: SuiObjectChange[], ctx: SuiObjectChangeContext) => void,\n type: string | string[]\n ): this {\n return super.onObjectChange(handler, type)\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import type { SuiClientTypes } from '@mysten/sui/client'\nimport type { GrpcTypes } from '@mysten/sui/grpc'\nimport { DecodedStruct } from '@typemove/move'\n\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\n// Decoder input/output types are now keyed on @mysten/sui/client's unified\n// SuiClientTypes shapes (which both jsonRpc and gRPC clients implement) plus\n// gRPC proto types for the transaction-side shapes that don't have a\n// transport-agnostic equivalent. No `@mysten/sui/jsonRpc` import remains.\nexport type TypedEventInstance<T> = DecodedStruct<SuiClientTypes.Event, T>\nexport type TypedSuiMoveObject<T> = DecodedStruct<SuiClientTypes.Object<{ json: true }>, T>\n\nexport type TypedFunctionPayload<T extends Array<any>> = GrpcTypes.MoveCall & {\n /**\n * decoded argument data using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n arguments_decoded: T\n}\n\n// Result wrapper for SuiGrpcClient.simulateTransaction return values. Replaces\n// the old TypedDevInspectResults that was tied to JSON-RPC's DevInspectResults.\n// The raw simulate response shape is intentionally widened to `any` here\n// because the underlying SDK types are heavily generic and we only need the\n// `commandResults` slice; we pass the original result through unchanged plus a\n// `results_decoded` field populated by `MoveCoder.decodeSimulateResult`.\nexport type TypedSimulateResults<T extends Array<any>> = {\n /**\n * Decoded return values using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n results_decoded?: T\n} & Record<string, any>\n","import { Transaction, TransactionArgument, TransactionObjectInput } from '@mysten/sui/transactions'\n\nexport function isTransactionArgument(value: any): boolean {\n if (typeof value !== 'object') return false\n if (value === null || value === undefined) return false\n\n return (\n value.$kind === 'GasCoin' || value.$kind === 'Result' || value.$kind === 'NestedResult' || value.$kind === 'Input'\n )\n}\n\nexport function transactionArgumentOrObject(\n value: TransactionObjectInput,\n transactionBlock: Transaction\n): TransactionArgument {\n // if (isTransactionArgument(value)) {\n // return value as TransactionArgument\n // }\n return transactionBlock.object(value)\n}\n\nexport function transactionArgumentOrPure(value: any, transactionBlock: Transaction): any {\n if (isTransactionArgument(value)) {\n return value\n }\n return typeof value == 'string' ? transactionBlock.pure.string(value) : transactionBlock.pure.u64(value)\n}\n\nexport function transactionArgumentOrPureString(\n value: TransactionArgument | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.string(value as string)\n}\n\nexport function transactionArgumentOrPureAddress(\n value: TransactionArgument | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.address(value as string)\n}\n\nexport function transactionArgumentOrPureU8(\n value: TransactionArgument | number,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u8(value as number)\n}\n\nexport function transactionArgumentOrPureU16(\n value: TransactionArgument | number,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u16(value as number)\n}\n\nexport function transactionArgumentOrPureU32(\n value: TransactionArgument | number,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u32(value as number)\n}\n\nexport function transactionArgumentOrPureU64(\n value: TransactionArgument | bigint | number | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u64(value as number)\n}\n\nexport function transactionArgumentOrPureU128(\n value: TransactionArgument | bigint | number | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u128(value as number)\n}\n\nexport function transactionArgumentOrPureU256(\n value: TransactionArgument | bigint | number | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u256(value as number)\n}\n\nexport function transactionArgumentOrPureBool(\n value: TransactionArgument | boolean,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.bool(value as boolean)\n}\n\n// TODO vector might be nested\nexport function transactionArgumentOrVec(value: any, transactionBlock: Transaction): any {\n if (isTransactionArgument(value)) {\n return value\n }\n return transactionBlock.makeMoveVec({\n elements: value.map((a: any) => transactionBlock.object(a))\n })\n}\n","import type { GrpcTypes } from '@mysten/sui/grpc'\nimport {\n accountTypeString,\n InternalMoveEnum,\n InternalMoveFunction,\n InternalMoveFunctionVisibility,\n InternalMoveModule,\n InternalMoveStruct,\n InternalMoveStructField,\n SPLITTER,\n TypeDescriptor\n} from '@typemove/move'\n\n// Re-exports for convenience: callers used to import named types from\n// '@mysten/sui/jsonRpc'; now they come from the gRPC proto namespace.\ntype Module = GrpcTypes.Module\ntype DatatypeDescriptor = GrpcTypes.DatatypeDescriptor\ntype FieldDescriptor = GrpcTypes.FieldDescriptor\ntype FunctionDescriptor = GrpcTypes.FunctionDescriptor\ntype OpenSignature = GrpcTypes.OpenSignature\ntype OpenSignatureBody = GrpcTypes.OpenSignatureBody\n\n// Proto enum constants kept as literals so we can compare against\n// the ordinals returned in the wire-decoded shape without importing\n// the namespaced enum at runtime.\nconst DATATYPE_KIND_STRUCT = 1\nconst DATATYPE_KIND_ENUM = 2\n\nconst VISIBILITY_PRIVATE = 1\nconst VISIBILITY_PUBLIC = 2\nconst VISIBILITY_FRIEND = 3\n\n// OpenSignatureBody.Type\nconst TYPE_ADDRESS = 1\nconst TYPE_BOOL = 2\nconst TYPE_U8 = 3\nconst TYPE_U16 = 4\nconst TYPE_U32 = 5\nconst TYPE_U64 = 6\nconst TYPE_U128 = 7\nconst TYPE_U256 = 8\nconst TYPE_VECTOR = 9\nconst TYPE_DATATYPE = 10\nconst TYPE_TYPE_PARAMETER = 11\n\nconst ABILITY_NAMES: Record<number, string> = {\n 1: 'Copy',\n 2: 'Drop',\n 3: 'Store',\n 4: 'Key'\n}\n\n// Convert a proto Module (from movePackageService.getPackage().package.modules[i])\n// into typemove's InternalMoveModule. `packageAddress` is needed because the\n// proto Module doesn't repeat the package id on every module entry.\nexport function toInternalModule(module: Module, packageAddress: string): InternalMoveModule {\n packageAddress = accountTypeString(packageAddress)\n const datatypes = module.datatypes ?? []\n const functions = module.functions ?? []\n\n const structs: InternalMoveStruct[] = datatypes.filter((d) => d.kind === DATATYPE_KIND_STRUCT).map(toInternalStruct)\n\n const enums: InternalMoveEnum[] = datatypes.filter((d) => d.kind === DATATYPE_KIND_ENUM).map(toInternalEnum)\n\n return {\n address: packageAddress,\n name: module.name ?? '',\n exposedFunctions: functions.map(toInternalFunction),\n structs,\n enums\n }\n}\n\nfunction toInternalFunction(func: FunctionDescriptor): InternalMoveFunction {\n let visibility: InternalMoveFunctionVisibility\n switch (func.visibility) {\n case VISIBILITY_PRIVATE:\n visibility = InternalMoveFunctionVisibility.PRIVATE\n break\n case VISIBILITY_PUBLIC:\n visibility = InternalMoveFunctionVisibility.PUBLIC\n break\n case VISIBILITY_FRIEND:\n visibility = InternalMoveFunctionVisibility.FRIEND\n break\n default:\n throw Error(`No visibility for function ${func.name}`)\n }\n return {\n typeParams: (func.typeParameters ?? []).map((p) => ({\n constraints: (p.constraints ?? []).map(abilityName)\n })),\n isEntry: func.isEntry ?? false,\n name: func.name ?? '',\n params: (func.parameters ?? []).map(toTypeDescriptorFromSignature),\n return: (func.returns ?? []).map(toTypeDescriptorFromSignature),\n visibility\n }\n}\n\nfunction toInternalStruct(d: DatatypeDescriptor): InternalMoveStruct {\n return {\n abilities: (d.abilities ?? []).map(abilityName),\n fields: (d.fields ?? []).map(toInternalField),\n typeParams: (d.typeParameters ?? []).map((p) => ({\n constraints: (p.constraints ?? []).map(abilityName)\n })),\n isNative: false,\n isEvent: false,\n name: d.name ?? ''\n }\n}\n\nfunction toInternalEnum(d: DatatypeDescriptor): InternalMoveEnum {\n const variants: { [key: string]: InternalMoveStructField[] } = {}\n for (const v of d.variants ?? []) {\n variants[v.name ?? ''] = (v.fields ?? []).map(toInternalField)\n }\n return {\n name: d.name ?? '',\n abilities: (d.abilities ?? []).map(abilityName),\n typeParams: (d.typeParameters ?? []).map((p) => ({\n constraints: (p.constraints ?? []).map(abilityName)\n })),\n variants\n }\n}\n\nfunction toInternalField(f: FieldDescriptor): InternalMoveStructField {\n if (!f.type) {\n throw Error(`Field ${f.name} has no type`)\n }\n return {\n name: f.name ?? '',\n type: toTypeDescriptorFromBody(f.type)\n }\n}\n\n// OpenSignature wraps an OpenSignatureBody with an optional reference marker.\n// Used for function params and returns.\nfunction toTypeDescriptorFromSignature(sig: OpenSignature): TypeDescriptor {\n if (!sig.body) {\n throw Error('OpenSignature has no body')\n }\n const desc = toTypeDescriptorFromBody(sig.body)\n // Reference.IMMUTABLE=1, MUTABLE=2\n if (sig.reference === 1) {\n desc.reference = true\n } else if (sig.reference === 2) {\n desc.reference = true\n desc.mutable = true\n }\n return desc\n}\n\nfunction toTypeDescriptorFromBody(body: OpenSignatureBody): TypeDescriptor {\n switch (body.type) {\n case TYPE_ADDRESS:\n return new TypeDescriptor('Address')\n case TYPE_BOOL:\n return new TypeDescriptor('Bool')\n case TYPE_U8:\n return new TypeDescriptor('U8')\n case TYPE_U16:\n return new TypeDescriptor('U16')\n case TYPE_U32:\n return new TypeDescriptor('U32')\n case TYPE_U64:\n return new TypeDescriptor('U64')\n case TYPE_U128:\n return new TypeDescriptor('U128')\n case TYPE_U256:\n return new TypeDescriptor('U256')\n case TYPE_VECTOR: {\n const inner = body.typeParameterInstantiation?.[0]\n if (!inner) throw Error('Vector OpenSignatureBody missing type parameter')\n return new TypeDescriptor('Vector', [toTypeDescriptorFromBody(inner)])\n }\n case TYPE_DATATYPE: {\n // gRPC emits typeName as `<defining_id>::<module>::<name>` with the\n // address in canonical long form (0x0000...0002). Normalize to the\n // short form (0x2) so module-lookup keys match what's loaded into\n // MoveCoder by short-form aware code paths.\n const raw = body.typeName ?? ''\n const parts = raw.split(SPLITTER)\n const qname = parts.length === 3 ? [accountTypeString(parts[0]), parts[1], parts[2]].join(SPLITTER) : raw\n const args = (body.typeParameterInstantiation ?? []).map(toTypeDescriptorFromBody)\n return new TypeDescriptor(qname, args)\n }\n case TYPE_TYPE_PARAMETER:\n return new TypeDescriptor('T' + (body.typeParameter ?? 0))\n default:\n throw new Error(`Unexpected OpenSignatureBody type: ${body.type}`)\n }\n}\n\nfunction abilityName(a: number): string {\n const n = ABILITY_NAMES[a]\n if (!n) throw Error(`Unknown Ability value: ${a}`)\n return n\n}\n","import { toInternalModule } from './to-internal.js'\nimport {\n InternalMoveModule,\n InternalMoveStruct,\n ChainAdapter,\n moduleQname,\n SPLITTER,\n TypeDescriptor\n} from '@typemove/move'\n\nimport type { GrpcTypes } from '@mysten/sui/grpc'\nimport { SuiGrpcClient } from '@mysten/sui/grpc'\nimport type { SuiClientTypes } from '@mysten/sui/client'\n\n// Decoder-input types now use @mysten/sui/client's unified SuiClientTypes —\n// the same shapes returned by SuiGrpcClient (and that the GraphQL/JSON-RPC\n// clients implement). Per the SDK's own warnings, the `.json` field's exact\n// field names may vary between transports for some payloads; downstream code\n// reading `getData` should treat it as opaque object data.\nexport type SuiEventInput = SuiClientTypes.Event\nexport type SuiMoveObjectInput = SuiClientTypes.Object<{ json: true }>\n\n// Adapter ModuleType is the proto Module plus the package address (which the\n// proto doesn't carry per-entry — only the wrapping Package has storageId).\nexport interface ModuleWithAddress {\n address: string\n module: GrpcTypes.Module\n}\n\nexport class SuiChainAdapter extends ChainAdapter<ModuleWithAddress, SuiEventInput | SuiMoveObjectInput> {\n client: SuiGrpcClient\n\n constructor(client: SuiGrpcClient) {\n super()\n this.client = client\n }\n\n async getChainId(): Promise<string> {\n const { chainIdentifier } = await this.client.core.getChainIdentifier()\n return chainIdentifier ?? ''\n }\n\n async fetchModule(account: string, module: string): Promise<ModuleWithAddress> {\n // gRPC has no single-module-fetch RPC; pull the whole package and filter.\n const modules = await this.fetchModules(account)\n const m = modules.find((x) => x.module.name === module)\n if (!m) {\n throw Error(`Module ${module} not found in package ${account}`)\n }\n return m\n }\n\n async fetchModules(account: string): Promise<ModuleWithAddress[]> {\n const { response } = await this.client.movePackageService.getPackage({ packageId: account })\n const pkg = response.package\n if (!pkg) {\n throw Error(`No package returned for ${account}`)\n }\n // gRPC returns the canonical long-form storage id (0x0000...0002); the rest\n // of typemove keys system packages by their short form (0x2). Preserve the\n // caller-supplied address so framework lookups and short-form import paths\n // (`@typemove/sui/builtin/0x2`) keep working.\n return (pkg.modules ?? []).map((module) => ({ address: account, module }))\n }\n\n getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[] {\n return params\n }\n\n toInternalModules(modules: ModuleWithAddress[]): InternalMoveModule[] {\n return modules.map(({ address, module }) => toInternalModule(module, address))\n }\n\n getAllEventStructs(modules: InternalMoveModule[]): Map<string, InternalMoveStruct> {\n const eventMap = new Map<string, InternalMoveStruct>()\n for (const module of modules) {\n const qname = moduleQname(module)\n for (const struct of module.structs) {\n const abilities = new Set(struct.abilities)\n if (abilities.has('Drop') && abilities.has('Copy')) {\n eventMap.set(qname + SPLITTER + struct.name, struct)\n }\n }\n }\n return eventMap\n }\n\n getType(base: SuiEventInput | SuiMoveObjectInput): string {\n // Unified SuiClientTypes: Event has `eventType`, Object has `type`.\n const v = base as any\n return v.eventType ?? v.type ?? ''\n }\n\n getData(val: SuiEventInput | SuiMoveObjectInput) {\n if (val === undefined) {\n throw Error('val is undefined')\n }\n // Pass through primitives (e.g. a UID flattened to a bare string) — the\n // decoder's per-type case handlers know how to interpret them.\n if (val === null || typeof val !== 'object') {\n return val as any\n }\n const v = val as any\n // Unified SuiClientTypes shapes: Event.json / Object<{json:true}>.json\n // carries the decoded Move struct content. Anything else (a nested\n // already-flat struct value passed in during recursion) is its own data.\n if (v.json != null) {\n return v.json as any\n }\n return val as any\n }\n}\n\nexport function inferNetworkFromUrl(url: string): string {\n if (url.includes('mainnet')) return 'mainnet'\n if (url.includes('testnet')) return 'testnet'\n if (url.includes('devnet')) return 'devnet'\n if (url.includes('localnet') || url.includes('127.0.0.1') || url.includes('localhost')) return 'localnet'\n return 'custom'\n}\n\n// gRPC counterpart of @mysten/sui/jsonRpc's `getJsonRpcFullnodeUrl`. The SDK\n// doesn't ship one under /grpc — Sui's gRPC-Web endpoint is exposed on the\n// same host as JSON-RPC over standard HTTPS, so we mirror the JSON-RPC list\n// (sans the explicit :443 since the transport speaks HTTPS by default).\nexport function getGrpcFullnodeUrl(network: 'mainnet' | 'testnet' | 'devnet' | 'localnet'): string {\n switch (network) {\n case 'mainnet':\n return 'https://fullnode.mainnet.sui.io'\n case 'testnet':\n return 'https://fullnode.testnet.sui.io'\n case 'devnet':\n return 'https://fullnode.devnet.sui.io'\n case 'localnet':\n return 'http://127.0.0.1:9000'\n }\n}\n\nexport function getGrpcClient(endpoint: string): SuiGrpcClient {\n const network = inferNetworkFromUrl(endpoint) as any\n return new SuiGrpcClient({ network, baseUrl: endpoint })\n}\n","import { TypedSimulateResults, TypedEventInstance, TypedFunctionPayload } from './models.js'\nimport {\n AbstractMoveCoder,\n ANY_TYPE,\n DecodedStruct,\n accountTypeString,\n parseMoveType,\n SPLITTER,\n TypeDescriptor,\n InternalMoveModule\n} from '@typemove/move'\nimport { SuiGrpcClient } from '@mysten/sui/grpc'\nimport type { GrpcTypes } from '@mysten/sui/grpc'\nimport {\n SuiChainAdapter,\n ModuleWithAddress,\n getGrpcClient,\n getGrpcFullnodeUrl,\n SuiEventInput,\n SuiMoveObjectInput\n} from './sui-chain-adapter.js'\nimport { toInternalModule } from './to-internal.js'\nimport { dynamic_field } from './builtin/0x2.js'\nimport { BcsType, bcs } from '@mysten/sui/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/utils'\n\nexport class MoveCoder extends AbstractMoveCoder<ModuleWithAddress, SuiEventInput | SuiMoveObjectInput> {\n constructor(client: SuiGrpcClient) {\n super(new SuiChainAdapter(client))\n }\n\n load(entry: ModuleWithAddress, address: string): InternalMoveModule {\n address = accountTypeString(address)\n const { address: moduleAddress, module } = entry\n let m = this.moduleMapping.get(moduleAddress + '::' + module.name)\n const mDeclared = this.moduleMapping.get(address + '::' + module.name)\n if (m && mDeclared) {\n return m\n }\n this.accounts.add(moduleAddress)\n m = toInternalModule(module, moduleAddress)\n this.loadInternal(m, address)\n return m\n }\n\n protected async decode(data: any, type: TypeDescriptor): Promise<any> {\n // UID handled before the switch to avoid the existing fall-through chain\n // (case '0x2::url::Url' / '0x2::coin::Coin' bodies fire on non-string\n // inputs and corrupt UID output). gRPC's unified Object.json flattens UID\n // to a bare address string — re-wrap to `{ id: '0x<32-byte>' }` so\n // downstream `.id.id`-style accessors keep working. The BCS-shaped path\n // (`{ id: { bytes: Uint8Array(32) } }`) is delegated to super.decode,\n // which then hits the inner ID case.\n if (type.qname === '0x2::object::UID') {\n if (typeof data === 'string') {\n return { id: normalizeSuiObjectId(data) } as any\n }\n return super.decode(data, type)\n }\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: SuiEventInput): Promise<TypedEventInstance<T> | undefined> {\n return this.decodedStruct(event)\n }\n filterAndDecodeEvents<T>(\n type: TypeDescriptor<T> | string,\n resources: SuiEventInput[]\n ): 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: SuiMoveObjectInput[],\n keyType: TypeDescriptor<T1> = ANY_TYPE,\n valueType: TypeDescriptor<T2> = ANY_TYPE\n ): Promise<dynamic_field.Field<T1, T2>[]> {\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: SuiMoveObjectInput[]\n ): Promise<DecodedStruct<SuiMoveObjectInput, T>[]> {\n return this.filterAndDecodeStruct(type, objects)\n }\n\n // Decodes a parsed Move call payload against the loaded module ABI.\n // Inputs are gRPC `Input[]`: kind=PURE carries a Uint8Array of BCS bytes\n // that we decode using the corresponding parameter's Move type;\n // object inputs (IMMUTABLE_OR_OWNED / SHARED / receiving) are surfaced as\n // undefined since their on-chain values aren't part of the payload.\n async decodeFunctionPayload(payload: GrpcTypes.MoveCall, inputs: GrpcTypes.Input[]): Promise<any> {\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: any[] = []\n for (const value of payload.arguments ?? []) {\n const av = value as any\n const idx: number | undefined = av?.input\n if (idx == null || idx < 0 || idx >= inputs.length) {\n args.push(undefined)\n continue\n }\n const arg = inputs[idx]\n if (arg?.pure) {\n const paramType: TypeDescriptor | undefined = params[args.length]\n try {\n const bytes = arg.pure instanceof Uint8Array ? arg.pure : new Uint8Array(arg.pure)\n const decoded: any = paramType ? await this.decodeBCS(paramType, bytes) : bytes\n args.push(decoded)\n } catch {\n args.push(undefined)\n }\n } else {\n // Object inputs (and unknown kinds) — value isn't carried in the payload.\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 bcsRegistered = new Set<string>()\n private bcsRegistry = new Map<string, BcsType<any>>()\n\n private async getBCSTypeWithArgs(type: TypeDescriptor, args: BcsType<any>[] = []): Promise<BcsType<any>> {\n const qname = type.qname\n const sig = type.getNormalizedSignature()\n const cached = this.bcsRegistry.get(sig)\n if (cached) {\n return cached\n }\n const lowerQname = qname.toLowerCase()\n switch (lowerQname) {\n case 'u8':\n case 'u16':\n case 'u32':\n case 'u64':\n case 'u128':\n case 'u256':\n case 'bool':\n return bcs[lowerQname]()\n case 'address':\n return bcs.Address\n case 'vector':\n return bcs.vector(args[0])\n default:\n if (!qname.includes('::')) {\n throw `Unimplemented builtin type ${qname}`\n }\n }\n let moveStruct\n try {\n moveStruct = await this.getMoveStruct(qname)\n } catch (e) {\n console.error('Invalid move address', qname)\n throw e\n }\n const structDef: Record<string, any> = {}\n for (const field of moveStruct.fields) {\n if (field.type.qname.startsWith('T') && args.length) {\n const index = +field.type.qname.slice(1)\n structDef[field.name] = args[index]\n } else if (field.type.typeArgs.length && args.length) {\n structDef[field.name] = await this.getBCSTypeWithArgs(field.type, args)\n } else {\n structDef[field.name] = await this.getBCSType(field.type)\n }\n }\n return bcs.struct(qname, structDef)\n }\n\n async getBCSType(type: TypeDescriptor): Promise<BcsType<any>> {\n const args = await Promise.all(type.typeArgs.map((x) => this.getBCSType(x)))\n const bcsType = await this.getBCSTypeWithArgs(type, args)\n this.bcsRegistry.set(type.getNormalizedSignature(), bcsType)\n return bcsType\n }\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 const bcsType = await this.getBCSType(type)\n this.bcsRegistry.set(type.getNormalizedSignature(), bcsType)\n }\n\n async decodeBCS(type: TypeDescriptor, data: Uint8Array | string, encoding?: Encoding): Promise<any> {\n await this.registerBCSTypes(type)\n if (typeof data == 'string') {\n const buf = Buffer.from(data, encoding as any)\n data = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n }\n const bcsType = this.bcsRegistry.get(type.getNormalizedSignature())\n return bcsType?.parse(data)\n }\n\n // Replaces decodeDevInspectResult. gRPC simulateTransaction returns\n // `commandResults: CommandResult[]` where each CommandResult.returnValues is\n // `CommandOutput[]` of raw `{ bcs: Uint8Array }` — there is no per-return\n // type string the way devInspect carried one. The caller must therefore pass\n // the Move return-type signatures explicitly (codegen emits them next to\n // each generated view helper).\n async decodeSimulateResult<T extends any[]>(\n simulateRes: any,\n returnTypeSignatures: string[],\n typeArguments?: (string | TypeDescriptor)[]\n ): Promise<TypedSimulateResults<T>> {\n // Generic view helpers embed return signatures like \"T0\" / \"vector<T1>\"\n // at codegen time, but the caller supplies concrete type arguments only\n // at runtime. Substitute them in before BCS decoding — otherwise the BCS\n // type registry sees the bare type-parameter qname and rejects it as an\n // unimplemented builtin.\n const ctx = new Map<string, TypeDescriptor>()\n if (typeArguments && typeArguments.length > 0) {\n typeArguments.forEach((t, i) => {\n ctx.set('T' + i, typeof t === 'string' ? parseMoveType(t) : t)\n })\n }\n\n const returnValues: any[] = []\n const commandResults = simulateRes?.commandResults\n if (Array.isArray(commandResults)) {\n let typeIdx = 0\n for (const r of commandResults) {\n const rvs = r?.returnValues\n if (Array.isArray(rvs) && rvs.length > 0) {\n for (const rv of rvs) {\n const sig = returnTypeSignatures[typeIdx++]\n if (!sig) {\n returnValues.push(null)\n continue\n }\n let type = parseMoveType(sig)\n if (ctx.size > 0) {\n type = type.applyTypeArgs(ctx)\n }\n const bcsBytes = rv?.bcs instanceof Uint8Array ? rv.bcs : new Uint8Array(rv?.bcs ?? [])\n const bcsDecoded = await this.decodeBCS(type, bcsBytes)\n const decoded = await this.decodeType(bcsDecoded, type)\n returnValues.push(decoded)\n }\n } else {\n returnValues.push(null)\n }\n }\n }\n return { ...simulateRes, results_decoded: returnValues as any }\n }\n}\n\nconst DEFAULT_ENDPOINT = getGrpcFullnodeUrl('mainnet')\nconst 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(getGrpcClient(endpoint))\n CODER_MAP.set(endpoint, coder)\n }\n return coder\n}\n\nconst PROVIDER_CODER_MAP = new Map<SuiGrpcClient, MoveCoder>()\n\nlet DEFAULT_CHAIN_ID: string | undefined\n\nexport async function getMoveCoder(client: SuiGrpcClient): Promise<MoveCoder> {\n let coder = PROVIDER_CODER_MAP.get(client)\n if (!coder) {\n coder = new MoveCoder(client)\n const { chainIdentifier } = await client.core.getChainIdentifier()\n const defaultCoder = defaultMoveCoder()\n if (!DEFAULT_CHAIN_ID) {\n DEFAULT_CHAIN_ID = await defaultCoder.adapter.getChainId()\n }\n if (chainIdentifier === 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 // @typemove/sui v2 MoveCoder is gRPC-backed.\n coder = new MoveCoder(getClient(network))\n CODERS.set(network, coder)\n }\n\n return coder\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { RecordMetaData } from '@sentio/protos'\nimport { type Labels, normalizeLabels } from '../index.js'\nimport { getClient, SuiNetwork } from './network.js'\nimport type { GrpcTypes, SuiGrpcClient } from '@mysten/sui/grpc'\nimport type { ModuleWithAddress, SuiEventInput, SuiMoveObjectInput } from '@typemove/sui'\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, ModuleWithAddress, SuiEventInput | SuiMoveObjectInput> {\n moduleName: string\n timestamp: Date\n checkpoint: bigint\n transaction: GrpcTypes.ExecutedTransaction\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: GrpcTypes.ExecutedTransaction,\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(): SuiGrpcClient {\n return getClient(this.network)\n }\n}\n\nexport class SuiObjectChangeContext extends MoveContext<\n SuiNetwork,\n ModuleWithAddress,\n SuiEventInput | SuiMoveObjectInput\n> {\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(): SuiGrpcClient {\n return getClient(this.network)\n }\n}\n\n// TODO address handler should use this context\nexport class SuiAddressContext extends MoveAccountContext<\n SuiNetwork,\n ModuleWithAddress,\n SuiEventInput | SuiMoveObjectInput\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(): SuiGrpcClient {\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 objectVersion: bigint\n\n constructor(\n network: SuiNetwork,\n objectId: string,\n objectVersion: bigint,\n checkpoint: bigint,\n timestamp: Date,\n baseLabels: Labels | undefined\n ) {\n super(network, objectId, checkpoint, timestamp, baseLabels)\n this.objectId = objectId\n this.objectVersion = objectVersion\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import type { GrpcTypes } from '@mysten/sui/grpc'\nimport { accountTypeString } from '@typemove/move'\n\nexport function getProgrammableTransaction(\n txBlock: GrpcTypes.ExecutedTransaction\n): GrpcTypes.ProgrammableTransaction | undefined {\n const data = txBlock.transaction?.kind?.data\n return data?.oneofKind === 'programmableTransaction' ? data.programmableTransaction : undefined\n}\n\nexport function getMoveCalls(txBlock: GrpcTypes.ExecutedTransaction): GrpcTypes.MoveCall[] {\n const programmableTx = getProgrammableTransaction(txBlock)\n if (!programmableTx) {\n return []\n }\n\n return programmableTx.commands.flatMap((cmd) => {\n if (cmd.command.oneofKind === 'moveCall') {\n const call = cmd.command.moveCall\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(\"node:process\").then((p) => p.stdout.write(\"\"));","import {\n Data_SuiCall,\n Data_SuiObject,\n Data_SuiObjectChange,\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, SuiObjectChangeContext, SuiObjectContext } from './context.js'\nimport type { SuiObjectChange } from '@mysten/sui/jsonRpc'\nimport type { GrpcTypes } from '@mysten/sui/grpc'\nimport type { SuiMoveObjectInput } from '@typemove/sui'\nimport { ALL_ADDRESS, PromiseOrVoid } from '../core/index.js'\nimport { configure, DEFAULT_FETCH_CONFIG, IndexConfigure, SuiBindOptions } from './sui-processor.js'\nimport { CallHandler, TransactionFilter, accountTypeString, ObjectChangeHandler } from '../move/index.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { TypeDescriptor } from '@typemove/move'\nimport { TypedSuiMoveObject } from './models.js'\nimport { getHandlerName, proxyProcessor } from '../utils/metrics.js'\n\nexport interface SuiObjectBindOptions {\n objectId: string\n network?: SuiNetwork\n startCheckpoint?: bigint\n endCheckpoint?: bigint\n baseLabels?: { [key: string]: string }\n}\n\nexport interface SuiObjectTypeBindOptions<T> {\n objectType: TypeDescriptor<T>\n network?: SuiNetwork\n startCheckpoint?: bigint\n endCheckpoint?: 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 handlerName: string\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 templateId: number | undefined\n\n objectHandlers: ObjectHandler[] = []\n objectChangeHandlers: ObjectChangeHandler<Data_SuiObjectChange>[] = []\n\n // static bind(options: SuiObjectsBindOptions): SuiBaseObjectsProcessor<any> {\n // return new SuiBaseObjectsProcessor(options)\n // }\n\n protected constructor(options: SuiInternalObjectsBindOptions) {\n if (options.ownerType === MoveOwnerType.TYPE) {\n this.config = {\n startCheckpoint: options.startCheckpoint || 0n,\n endCheckpoint: options.endCheckpoint,\n address: options.address === '*' ? '*' : accountTypeString(options.address),\n network: options.network || SuiNetwork.MAIN_NET,\n baseLabels: options.baseLabels\n }\n } else {\n this.config = configure(options)\n }\n this.ownerType = options.ownerType\n SuiAccountProcessorState.INSTANCE.addValue(this)\n\n return proxyProcessor(this)\n }\n\n getChainId(): string {\n return this.config.network\n }\n\n // protected abstract transformObjects(objects: SuiMoveObjectInput[]): SuiMoveObjectInput[]\n\n protected abstract doHandle(handler: HandlerType, data: Data_SuiObject, ctx: SuiObjectContext): Promise<any>\n\n public onInterval(\n handler: HandlerType, //(resources: SuiMoveObjectInput[], ctx: SuiObjectsContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n checkpointInterval: HandleInterval | undefined,\n type: string | undefined,\n fetchConfig: Partial<MoveAccountFetchConfig> | undefined,\n handlerName = getHandlerName()\n ): this {\n const processor = this\n this.objectHandlers.push({\n handlerName,\n handler: async function (data) {\n const ctx = new SuiObjectContext(\n processor.config.network,\n data.objectId,\n data.objectVersion,\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\nabstract class SuiBaseObjectOrAddressProcessorInternal<\n HandlerType\n> extends SuiBaseObjectOrAddressProcessor<HandlerType> {\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 SuiBaseObjectOrAddressProcessorInternal<\n (objects: SuiMoveObjectInput[], 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 async doHandle(\n handler: (objects: SuiMoveObjectInput[], ctx: SuiObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ) {\n return handler(data.rawObjects.map((o) => JSON.parse(o)) as SuiMoveObjectInput[], ctx)\n }\n\n onTransactionBlock(\n handler: (transaction: GrpcTypes.ExecutedTransaction, ctx: SuiContext) => PromiseOrVoid,\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 handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is null')\n }\n const tx = JSON.parse(data.rawTransaction) as GrpcTypes.ExecutedTransaction\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 SuiBaseObjectOrAddressProcessorInternal<\n (self: SuiMoveObjectInput, dynamicFieldObjects: SuiMoveObjectInput[], 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 endCheckpoint: options.endCheckpoint,\n ownerType: MoveOwnerType.OBJECT,\n baseLabels: options.baseLabels\n })\n }\n\n protected async doHandle(\n handler: (\n self: SuiMoveObjectInput,\n dynamicFieldObjects: SuiMoveObjectInput[],\n ctx: SuiObjectContext\n ) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ) {\n if (!data.rawSelf) {\n console.log(`Sui object not existed in ${ctx.checkpoint}, please specific a start time`)\n return\n }\n return handler(\n JSON.parse(data.rawSelf) as SuiMoveObjectInput,\n data.rawObjects.map((o) => JSON.parse(o)) as SuiMoveObjectInput[],\n ctx\n )\n }\n}\n\nexport class SuiObjectTypeProcessor<T> extends SuiBaseObjectOrAddressProcessor<\n (self: TypedSuiMoveObject<T>, dynamicFieldObjects: SuiMoveObjectInput[], ctx: SuiObjectContext) => PromiseOrVoid\n> {\n objectType: TypeDescriptor<T>\n\n static bind<T>(options: SuiObjectTypeBindOptions<T>): SuiObjectTypeProcessor<T> {\n const processor = new SuiObjectTypeProcessor<T>({\n address: ALL_ADDRESS, // current only support on all address\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n endCheckpoint: options.endCheckpoint,\n ownerType: MoveOwnerType.TYPE,\n baseLabels: options.baseLabels\n })\n processor.objectType = options.objectType\n return processor\n }\n\n protected async doHandle(\n handler: (\n self: TypedSuiMoveObject<T>,\n dynamicFieldObjects: SuiMoveObjectInput[],\n ctx: SuiObjectContext\n ) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ) {\n if (!data.rawSelf) {\n console.log(`Sui object not existed in ${ctx.checkpoint}, please specific a start time`)\n return\n }\n const object = await ctx.coder.filterAndDecodeObjects(this.objectType, [\n JSON.parse(data.rawSelf) as SuiMoveObjectInput\n ])\n return handler(object[0], data.rawObjects.map((o) => JSON.parse(o)) as SuiMoveObjectInput[], ctx)\n }\n\n public onObjectChange(handler: (changes: SuiObjectChange[], ctx: SuiObjectChangeContext) => PromiseOrVoid): 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 handlerName: getHandlerName(),\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.rawChanges.map((r) => JSON.parse(r)) as SuiObjectChange[], ctx)\n return ctx.stopAndGetResult()\n },\n type: [this.objectType.getSignature()]\n })\n\n return this\n }\n\n public onTimeInterval(\n handler: (\n self: TypedSuiMoveObject<T>,\n dynamicFieldObjects: SuiMoveObjectInput[],\n ctx: SuiObjectContext\n ) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes\n },\n undefined,\n this.objectType.getSignature(),\n fetchConfig\n )\n }\n\n public onCheckpointInterval(\n handler: (\n self: TypedSuiMoveObject<T>,\n dynamicFieldObjects: SuiMoveObjectInput[],\n ctx: SuiObjectContext\n ) => PromiseOrVoid,\n checkpointInterval = 100000,\n backfillCheckpointInterval = 400000,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: checkpointInterval, backfillInterval: backfillCheckpointInterval },\n this.objectType.qname,\n fetchConfig\n )\n }\n}\n\nexport class SuiWrappedObjectProcessor extends SuiBaseObjectOrAddressProcessorInternal<\n (dynamicFieldObjects: SuiMoveObjectInput[], 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 endCheckpoint: options.endCheckpoint,\n ownerType: MoveOwnerType.WRAPPED_OBJECT,\n baseLabels: options.baseLabels\n })\n }\n\n protected async doHandle(\n handler: (dynamicFieldObjects: SuiMoveObjectInput[], ctx: SuiObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ) {\n return handler(data.rawObjects.map((o) => JSON.parse(o)) as SuiMoveObjectInput[], ctx)\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { HandleInterval, MoveAccountFetchConfig, MoveFetchConfig, TemplateInstance } from '@sentio/protos'\nimport { ListStateStorage, processMetrics } from '@sentio/runtime'\nimport { SuiAddressContext, SuiContext, SuiObjectContext } from './context.js'\nimport type { GrpcTypes } from '@mysten/sui/grpc'\nimport type { SuiMoveObjectInput } from '@typemove/sui'\nimport { PromiseOrVoid } from '../core/index.js'\nimport {\n DEFAULT_ACCOUNT_FETCH_CONFIG,\n SuiAccountProcessorState,\n SuiAddressProcessor,\n SuiBaseObjectOrAddressProcessor,\n SuiObjectBindOptions,\n SuiObjectProcessor,\n SuiWrappedObjectProcessor\n} from './sui-object-processor.js'\nimport { SuiBindOptions } from './sui-processor.js'\nimport { accountAddressString, TransactionFilter } from '../move/index.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { getHandlerName, proxyProcessor } from '../utils/metrics.js'\n\nclass ObjectHandler<HandlerType> {\n type?: string\n checkpointInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handlerName: string\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 instances = new Set<string>()\n\n constructor() {\n this.id = SuiAccountProcessorTemplateState.INSTANCE.getValues().length\n SuiAccountProcessorTemplateState.INSTANCE.addValue(this)\n return proxyProcessor(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 let id = (options as SuiObjectBindOptions).objectId || (options as SuiBindOptions).address\n\n if (id === '*') {\n throw new ServerError(Status.INVALID_ARGUMENT, \"can't bind template instance with *\")\n }\n id = accountAddressString(id)\n\n const instance: TemplateInstance = {\n templateId: this.id,\n contract: {\n name: '',\n chainId: options.network,\n address: id,\n abi: ''\n },\n startBlock: options.startCheckpoint || 0n,\n endBlock: options.endCheckpoint || 0n,\n baseLabels: options.baseLabels\n }\n\n ctx.sendTemplateInstance(instance)\n\n ctx.update({\n states: {\n configUpdated: true\n }\n })\n\n processMetrics.processor_template_instance_count.add(1, {\n chain_id: options.network,\n template: this.constructor.name\n })\n }\n\n startInstance(options: OptionType, ctx: SuiContext): void {\n options.network = options.network || ctx.network\n options.startCheckpoint = options.startCheckpoint || ctx.checkpoint\n let id = (options as SuiObjectBindOptions).objectId || (options as SuiBindOptions).address\n\n if (id === '*') {\n throw new ServerError(Status.INVALID_ARGUMENT, \"can't bind template instance with *\")\n }\n id = accountAddressString(id)\n\n const sig = [options.network, id].join('_')\n if (this.instances.has(sig)) {\n console.debug(`Same object id can be bind to one template only once, ignore duplicate bind: ${sig}`)\n return\n }\n this.instances.add(sig)\n\n const processor = this.createProcessor(options)\n for (const h of this.objectHandlers) {\n processor.onInterval(\n h.handler,\n h.timeIntervalInMinutes,\n h.checkpointInterval,\n h.type,\n h.fetchConfig,\n h.handlerName\n )\n }\n console.log(`successfully bind template ${sig}`)\n }\n\n unbind(options: OptionType, ctx: SuiContext): void {\n options.network = options.network || ctx.network\n options.startCheckpoint = options.startCheckpoint || ctx.checkpoint\n let id = (options as SuiObjectBindOptions).objectId || (options as SuiBindOptions).address\n\n if (id === '*') {\n throw new ServerError(Status.INVALID_ARGUMENT, \"can't delete template instance bind with *\")\n }\n id = accountAddressString(id)\n\n const sig = [options.network, id].join('_')\n if (!this.instances.has(sig)) {\n console.log(`the template instance ${sig} not existed or already unbind`)\n return\n }\n this.instances.delete(sig)\n\n const oldProcessors = SuiAccountProcessorState.INSTANCE.unregister()\n let deleted = 0\n for (const processor of oldProcessors) {\n if (processor.templateId === this.id) {\n if (processor.config.network == options.network && processor.config.address === id) {\n deleted++\n continue\n }\n }\n SuiAccountProcessorState.INSTANCE.addValue(processor)\n }\n\n if (deleted !== 1) {\n throw new ServerError(\n Status.INVALID_ARGUMENT,\n `Failed to delete processor for template ${this.id}, ${sig}. deleted ${deleted} times`\n )\n }\n\n console.log(`successfully unbind template ${sig}`)\n\n ctx.update({\n states: {\n configUpdated: true\n }\n })\n\n ctx.sendTemplateInstance(\n {\n templateId: this.id,\n contract: {\n name: '',\n chainId: options.network,\n address: id,\n abi: ''\n },\n startBlock: options.startCheckpoint || 0n,\n endBlock: options.endCheckpoint || 0n,\n baseLabels: options.baseLabels\n },\n true\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 handlerName: getHandlerName(),\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: GrpcTypes.ExecutedTransaction, ctx: SuiContext) => void\n filter?: TransactionFilter\n fetchConfig?: Partial<MoveFetchConfig>\n}\n\nexport class SuiAddressProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<\n (objects: SuiMoveObjectInput[], 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 p.templateId = this.id\n return p\n }\n\n onTransactionBlock(\n handler: (transaction: GrpcTypes.ExecutedTransaction, 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: SuiMoveObjectInput, dynamicFieldObjects: SuiMoveObjectInput[], ctx: SuiObjectContext) => PromiseOrVoid,\n SuiObjectBindOptions,\n SuiObjectProcessor\n> {\n createProcessor(options: SuiObjectBindOptions): SuiObjectProcessor {\n const p = SuiObjectProcessor.bind(options)\n p.templateId = this.id\n return p\n }\n}\n\nexport class SuiWrappedObjectProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<\n (dynamicFieldObjects: SuiMoveObjectInput[], ctx: SuiObjectContext) => PromiseOrVoid,\n SuiObjectBindOptions,\n SuiWrappedObjectProcessor\n> {\n createProcessor(options: SuiObjectBindOptions): SuiWrappedObjectProcessor {\n const p = SuiWrappedObjectProcessor.bind(options)\n p.templateId = this.id\n return p\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import type { GrpcTypes } from '@mysten/sui/grpc'\nimport type { SuiEventInput, SuiMoveObjectInput } from '@typemove/sui'\nimport { DecodedStruct } from '@typemove/move'\n\nexport type TypedEventInstance<T> = DecodedStruct<SuiEventInput, T>\nexport type TypedSuiMoveObject<T> = DecodedStruct<SuiMoveObjectInput, T>\n\nexport type TypedFunctionPayload<T extends Array<any>> = GrpcTypes.MoveCall & {\n /**\n * decoded argument data using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n arguments_decoded: T\n}\n\nexport type { PartitionHandler, HandlerOptions } from '../core/index.js'\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { errorString, mergeProcessResults, Plugin, PluginManager } from '@sentio/runtime'\nimport {\n DataBinding,\n HandlerType,\n InitResponse,\n ProcessConfigResponse,\n ProcessResult,\n ProcessStreamResponse_Partitions,\n StartRequest\n} from '@sentio/protos'\n\nimport { ServerError, Status } from 'nice-grpc'\nimport { PartitionHandlerManager } from '../core/index.js'\nimport { HandlerRegister } from '../core/handler-register.js'\n\nimport { SuiChainId } from '@sentio/chain'\nimport { SuiContext } from './context.js'\nimport { SuiPluginPart } from './sui-plugin-part.js'\nimport { IotaPluginPart } from '../iota/iota-plugin-part.js'\n\nexport class SuiPlugin extends Plugin {\n name: string = 'SuiPlugin'\n handlerRegister = new HandlerRegister()\n partitionManager = new PartitionHandlerManager()\n\n suiPart = new SuiPluginPart(this.handlerRegister, this.partitionManager)\n iotaPart = new IotaPluginPart(this.handlerRegister, this.partitionManager)\n\n async start(request: StartRequest): Promise<void> {\n await this.suiPart.start(request)\n await this.iotaPart.start(request)\n }\n\n async init(config: InitResponse) {\n await this.suiPart.init(config)\n await this.iotaPart.init(config)\n }\n\n async configure(config: ProcessConfigResponse, forChainId?: string) {\n this.handlerRegister.clear(forChainId as any)\n await this.suiPart.configure(config)\n await this.iotaPart.configure(config)\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 async partition(request: DataBinding): Promise<ProcessStreamResponse_Partitions> {\n let data: any\n switch (request.handlerType) {\n case HandlerType.SUI_EVENT:\n if (!request.data?.suiEvent) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"suiEvent can't be empty\")\n }\n data = request.data.suiEvent\n break\n case HandlerType.SUI_CALL:\n if (!request.data?.suiCall) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"suiCall can't be empty\")\n }\n data = request.data.suiCall\n break\n case HandlerType.SUI_OBJECT:\n if (!request.data?.suiObject) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"suiObject can't be empty\")\n }\n data = request.data.suiObject\n break\n case HandlerType.SUI_OBJECT_CHANGE:\n if (!request.data?.suiObjectChange) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"suiObjectChange can't be empty\")\n }\n data = request.data.suiObjectChange\n break\n default:\n throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)\n }\n const partitions = await this.partitionManager.processPartitionForHandlerType(\n request.handlerType,\n request.handlerIds,\n data\n )\n return {\n partitions\n }\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.handlerRegister\n .getHandlerById(\n binding.chainId,\n handlerId\n )(event)\n .catch((e: any) => {\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.handlerRegister\n .getHandlerById(\n binding.chainId,\n handlerId\n )(call)\n .catch((e: any) => {\n throw new ServerError(\n Status.INTERNAL,\n 'error processing call: ' + JSON.stringify(call) + '\\n' + errorString(e)\n )\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.handlerRegister\n .getHandlerById(\n binding.chainId,\n handlerId\n )(object)\n .catch((e: any) => {\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.handlerRegister\n .getHandlerById(\n binding.chainId,\n handlerId\n )(objectChange)\n .catch((e: any) => {\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\nPluginManager.INSTANCE.register(new SuiPlugin())\n\nconst NoopContext = new SuiContext('', SuiChainId.SUI_MAINNET, '', new Date(), 0n, {} as any, 0, {})\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { USER_PROCESSOR } from '@sentio/runtime'\nimport {\n AccountConfig,\n ContractConfig,\n HandlerType,\n InitResponse,\n MoveCallHandlerConfig,\n MoveEventHandlerConfig,\n MoveResourceChangeConfig,\n ProcessConfigResponse,\n StartRequest\n} from '@sentio/protos'\n\nimport { PartitionHandlerManager } from '../core/index.js'\nimport { HandlerRegister } from '../core/handler-register.js'\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\nexport class SuiPluginPart {\n constructor(\n private handlerRegister: HandlerRegister,\n private partitionManager: PartitionHandlerManager\n ) {}\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>([SuiChainId.SUI_MAINNET, SuiChainId.SUI_TESTNET])\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.startInstance(\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 endCheckpoint: instance.endBlock || 0n,\n baseLabels: instance.baseLabels\n },\n NoopContext\n )\n }\n }\n\n async init(config: InitResponse) {\n for (const state of [SuiProcessorState.INSTANCE, SuiAccountProcessorState.INSTANCE]) {\n for (const suiProcessor of state.getValues()) {\n config.chainIds.push(suiProcessor.config.network)\n }\n }\n }\n\n async configure(config: ProcessConfigResponse, forChainId?: string) {\n // this.handlerRegister.clear(forChainId as any)\n\n for (const suiProcessor of SuiProcessorState.INSTANCE.getValues()) {\n const chainId = suiProcessor.config.network\n if (forChainId !== undefined && forChainId !== chainId.toString()) {\n continue\n }\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 endBlock: suiProcessor.config.endCheckpoint\n })\n for (const handler of suiProcessor.eventHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n this.partitionManager.registerPartitionHandler(HandlerType.SUI_EVENT, handlerId, handler.partitionHandler)\n const eventHandlerConfig: MoveEventHandlerConfig = {\n filters: handler.filters.map((f) => {\n return {\n type: f.type,\n account: f.account || '',\n eventAccount: f.eventAccount || ''\n }\n }),\n fetchConfig: handler.fetchConfig,\n handlerId,\n handlerName: handler.handlerName\n }\n contractConfig.moveEventConfigs.push(eventHandlerConfig)\n }\n for (const handler of suiProcessor.callHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n this.partitionManager.registerPartitionHandler(HandlerType.SUI_CALL, handlerId, handler.partitionHandler)\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 handlerName: handler.handlerName\n }\n contractConfig.moveCallConfigs.push(functionHandlerConfig)\n }\n // deprecated, use objectType processor instead\n for (const handler of suiProcessor.objectChangeHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n const objectChangeHandler: MoveResourceChangeConfig = {\n types: typeof handler.type === 'string' ? [handler.type] : handler.type,\n handlerId,\n handlerName: handler.handlerName,\n includeDeleted: false\n }\n contractConfig.moveResourceChangeConfigs.push(objectChangeHandler)\n }\n config.contractConfigs.push(contractConfig)\n }\n\n for (const processor of SuiAccountProcessorState.INSTANCE.getValues()) {\n const chainId = processor.getChainId()\n if (forChainId !== undefined && forChainId !== chainId.toString()) {\n continue\n }\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 endBlock: processor.config.endCheckpoint\n })\n\n for (const handler of processor.objectChangeHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n const objectChangeHandler: MoveResourceChangeConfig = {\n types: typeof handler.type === 'string' ? [handler.type] : handler.type,\n handlerId,\n handlerName: handler.handlerName,\n includeDeleted: false\n }\n accountConfig.moveResourceChangeConfigs.push(objectChangeHandler)\n }\n\n for (const handler of processor.objectHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n\n accountConfig.moveIntervalConfigs.push({\n intervalConfig: {\n handlerId: handlerId,\n handlerName: handler.handlerName,\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 resourceFetchConfig: handler.fetchConfig,\n fetchConfig: undefined\n })\n }\n\n if (processor instanceof SuiAddressProcessor) {\n for (const handler of processor.callHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\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 handlerName: handler.handlerName\n }\n accountConfig.moveCallConfigs.push(functionHandlerConfig)\n }\n }\n\n config.accountConfigs.push(accountConfig)\n }\n }\n}\n\nconst NoopContext = new SuiContext('', SuiChainId.SUI_MAINNET, '', new Date(), 0n, {} as any, 0, {})\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { USER_PROCESSOR } from '@sentio/runtime'\nimport {\n AccountConfig,\n ContractConfig,\n HandlerType,\n InitResponse,\n MoveCallHandlerConfig,\n MoveEventHandlerConfig,\n MoveResourceChangeConfig,\n ProcessConfigResponse,\n StartRequest\n} from '@sentio/protos'\n\nimport { PartitionHandlerManager } from '../core/index.js'\nimport { HandlerRegister } from '../core/handler-register.js'\n\nimport { IotaProcessorState } from './iota-processor.js'\nimport { IotaAccountProcessorState, IotaAddressProcessor } from './iota-object-processor.js'\nimport { initCoinList } from './ext/coin.js'\nimport { SuiChainId } from '@sentio/chain'\nimport {\n IotaAccountProcessorTemplateState,\n IotaObjectOrAddressProcessorTemplate\n} from './iota-object-processor-template.js'\nimport { IotaNetwork } from './network.js'\nimport { IotaContext } from './context.js'\n\nexport class IotaPluginPart {\n constructor(\n private handlerRegister: HandlerRegister,\n private partitionManager: PartitionHandlerManager\n ) {}\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>([SuiChainId.IOTA_MAINNET, SuiChainId.IOTA_TESTNET])\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: IotaObjectOrAddressProcessorTemplate<any, any, any> =\n IotaAccountProcessorTemplateState.INSTANCE.getValues()[instance.templateId]\n\n template.startInstance(\n {\n address: instance.contract?.address || '',\n objectId: instance.contract?.address || '',\n network: <IotaNetwork>instance.contract?.chainId || IotaNetwork.MAIN_NET,\n startCheckpoint: instance.startBlock || 0n,\n endCheckpoint: instance.endBlock || 0n,\n baseLabels: instance.baseLabels\n },\n NoopContext\n )\n }\n }\n\n async init(config: InitResponse) {\n for (const state of [IotaProcessorState.INSTANCE, IotaAccountProcessorState.INSTANCE]) {\n for (const suiProcessor of state.getValues()) {\n config.chainIds.push(suiProcessor.config.network)\n }\n }\n }\n\n async configure(config: ProcessConfigResponse, forChainId?: string) {\n // this.handlerRegister.clear(forChainId as any)\n\n for (const suiProcessor of IotaProcessorState.INSTANCE.getValues()) {\n const chainId = suiProcessor.config.network\n if (forChainId !== undefined && forChainId !== chainId.toString()) {\n continue\n }\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 endBlock: suiProcessor.config.endCheckpoint\n })\n for (const handler of suiProcessor.eventHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n this.partitionManager.registerPartitionHandler(HandlerType.SUI_EVENT, handlerId, handler.partitionHandler)\n const eventHandlerConfig: MoveEventHandlerConfig = {\n filters: handler.filters.map((f) => {\n return {\n type: f.type,\n account: f.account || '',\n eventAccount: f.eventAccount || ''\n }\n }),\n fetchConfig: handler.fetchConfig,\n handlerId,\n handlerName: handler.handlerName\n }\n contractConfig.moveEventConfigs.push(eventHandlerConfig)\n }\n for (const handler of suiProcessor.callHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n this.partitionManager.registerPartitionHandler(HandlerType.SUI_CALL, handlerId, handler.partitionHandler)\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 handlerName: handler.handlerName\n }\n contractConfig.moveCallConfigs.push(functionHandlerConfig)\n }\n // deprecated, use objectType processor instead\n for (const handler of suiProcessor.objectChangeHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n const objectChangeHandler: MoveResourceChangeConfig = {\n types: typeof handler.type === 'string' ? [handler.type] : handler.type,\n handlerId,\n handlerName: handler.handlerName,\n includeDeleted: false\n }\n contractConfig.moveResourceChangeConfigs.push(objectChangeHandler)\n }\n config.contractConfigs.push(contractConfig)\n }\n\n for (const processor of IotaAccountProcessorState.INSTANCE.getValues()) {\n const chainId = processor.getChainId()\n if (forChainId !== undefined && forChainId !== chainId.toString()) {\n continue\n }\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 endBlock: processor.config.endCheckpoint\n })\n\n for (const handler of processor.objectChangeHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n const objectChangeHandler: MoveResourceChangeConfig = {\n types: typeof handler.type === 'string' ? [handler.type] : handler.type,\n handlerId,\n handlerName: handler.handlerName,\n includeDeleted: false\n }\n accountConfig.moveResourceChangeConfigs.push(objectChangeHandler)\n }\n\n for (const handler of processor.objectHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n\n accountConfig.moveIntervalConfigs.push({\n intervalConfig: {\n handlerId: handlerId,\n handlerName: handler.handlerName,\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 resourceFetchConfig: handler.fetchConfig,\n fetchConfig: undefined\n })\n }\n\n if (processor instanceof IotaAddressProcessor) {\n for (const handler of processor.callHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\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 handlerName: handler.handlerName\n }\n accountConfig.moveCallConfigs.push(functionHandlerConfig)\n }\n }\n\n config.accountConfigs.push(accountConfig)\n }\n }\n}\n\nconst NoopContext = new IotaContext('', SuiChainId.IOTA_MAINNET, '', new Date(), 0n, {} as any, 0, {})\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { Data_SuiCall, Data_SuiEvent, Data_SuiObjectChange, MoveFetchConfig } from '@sentio/protos'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { IotaNetwork } from './network.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { IotaContext, IotaObjectChangeContext } from './context.js'\nimport {\n MoveCallIotaTransaction,\n IotaEvent,\n IotaTransactionBlockResponse,\n IotaObjectChange\n} from '@iota/iota-sdk/client'\nimport {\n accountAddressString,\n CallHandler,\n EventFilter,\n EventHandler,\n FunctionNameAndCallFilter,\n ObjectChangeHandler,\n SPLITTER,\n TransactionFilter\n} from '../move/index.js'\nimport { getMoveCalls } from './utils.js'\nimport { defaultMoveCoder, MoveCoder } from './index.js'\nimport { ALL_ADDRESS, Labels, PromiseOrVoid } from '../core/index.js'\nimport { Required } from 'utility-types'\nimport { getHandlerName, proxyProcessor } from '../utils/metrics.js'\nimport { HandlerOptions } from './models.js'\n\nexport const DEFAULT_FETCH_CONFIG: MoveFetchConfig = {\n resourceChanges: false,\n allEvents: true,\n inputs: true\n}\n\nexport type IndexConfigure = Required<IotaBindOptions, 'startCheckpoint' | 'network'>\n\nexport function configure(options: IotaBindOptions): IndexConfigure {\n return {\n startCheckpoint: options.startCheckpoint || 0n,\n endCheckpoint: options.endCheckpoint,\n address: options.address === ALL_ADDRESS ? ALL_ADDRESS : accountAddressString(options.address),\n network: options.network || IotaNetwork.MAIN_NET,\n baseLabels: options.baseLabels\n }\n}\n\nexport interface IotaBindOptions {\n address: string\n network?: IotaNetwork\n startCheckpoint?: bigint\n endCheckpoint?: bigint\n baseLabels?: Labels\n}\n\nexport class IotaProcessorState extends ListStateStorage<IotaBaseProcessor> {\n static INSTANCE = new IotaProcessorState()\n}\n\nexport class IotaBaseProcessor {\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: IotaBindOptions) {\n this.moduleName = name\n this.config = configure(options)\n IotaProcessorState.INSTANCE.addValue(this)\n this.coder = defaultMoveCoder(this.config.network)\n\n return proxyProcessor(this)\n }\n\n getChainId(): string {\n return this.config.network\n }\n\n protected onMoveEvent<T extends IotaEvent = IotaEvent>(\n handler: (event: T, ctx: IotaContext) => PromiseOrVoid,\n filter: EventFilter | EventFilter[],\n handlerOptions?: HandlerOptions<MoveFetchConfig, T>\n ): IotaBaseProcessor {\n let _filters: EventFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...handlerOptions })\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\n this.eventHandlers.push({\n handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'event is null')\n }\n const txn = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse\n if (txn.events == null) {\n txn.events = []\n }\n\n const evt = JSON.parse(data.rawEvent) as IotaEvent\n const idx = Number(evt.id.eventSeq) || 0\n\n const ctx = new IotaContext(\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 decoded = await processor.coder.decodeEvent<any>(evt)\n await handler((decoded || evt) as T, ctx)\n\n return ctx.stopAndGetResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n partitionHandler: async (data: Data_SuiEvent): Promise<string | undefined> => {\n const p = handlerOptions?.partitionKey\n if (!p) return undefined\n if (typeof p === 'function') {\n const evt = JSON.parse(data.rawEvent) as IotaEvent\n const decoded = await processor.coder.decodeEvent<any>(evt)\n return p((decoded || evt) as T)\n }\n return p\n }\n })\n return this\n }\n\n protected onEntryFunctionCall<T extends MoveCallIotaTransaction = MoveCallIotaTransaction>(\n handler: (call: T, ctx: IotaContext) => PromiseOrVoid,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n handlerOptions?: HandlerOptions<MoveFetchConfig, T>\n ): IotaBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...handlerOptions })\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 handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const tx = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse\n\n const ctx = new IotaContext(\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: MoveCallIotaTransaction[] = 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 as T, ctx)\n }\n }\n return ctx.stopAndGetResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n partitionHandler: async (data: Data_SuiCall): Promise<string | undefined> => {\n const p = handlerOptions?.partitionKey\n if (!p) return undefined\n if (typeof p === 'function') {\n const tx = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse\n const calls: MoveCallIotaTransaction[] = getMoveCalls(tx)\n // For simplicity, use the first call for partitioning\n if (calls.length > 0) {\n return p(calls[0] as T)\n }\n return undefined\n }\n return p\n }\n })\n return this\n }\n\n onEvent(\n handler: (event: IotaEvent, ctx: IotaContext) => void,\n handlerOptions?: HandlerOptions<MoveFetchConfig, IotaEvent>\n ): this {\n this.onMoveEvent(handler, { type: '' }, handlerOptions)\n return this\n }\n\n onTransactionBlock(\n handler: (transaction: IotaTransactionBlockResponse, ctx: IotaContext) => PromiseOrVoid,\n filter?: TransactionFilter,\n handlerOptions?: HandlerOptions<MoveFetchConfig, IotaTransactionBlockResponse>\n ): this {\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...handlerOptions })\n\n const processor = this\n\n this.callHandlers.push({\n handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is null')\n }\n const tx = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse\n\n const ctx = new IotaContext(\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 partitionHandler: async (data: Data_SuiCall): Promise<string | undefined> => {\n const p = handlerOptions?.partitionKey\n if (!p) return undefined\n if (typeof p === 'function') {\n const tx = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse\n return p(tx)\n }\n return p\n }\n })\n return this\n }\n\n protected onObjectChange(\n handler: (changes: IotaObjectChange[], ctx: IotaObjectChangeContext) => PromiseOrVoid,\n type: string | string[]\n ): this {\n if (this.config.network === IotaNetwork.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 handlerName: getHandlerName(),\n handler: async function (data: Data_SuiObjectChange) {\n const ctx = new IotaObjectChangeContext(\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.rawChanges.map((r) => JSON.parse(r)) as IotaObjectChange[], ctx)\n return ctx.stopAndGetResult()\n },\n type\n })\n\n return this\n }\n}\n\nexport class IotaModulesProcessor extends IotaBaseProcessor {\n static bind(options: IotaBindOptions): IotaModulesProcessor {\n return new IotaModulesProcessor(ALL_ADDRESS, options)\n }\n}\n\nexport class IotaGlobalProcessor extends IotaBaseProcessor {\n static bind(options: Omit<IotaBindOptions, 'address'>): IotaGlobalProcessor {\n return new IotaGlobalProcessor(ALL_ADDRESS, { ...options, address: ALL_ADDRESS })\n }\n onTransactionBlock(\n handler: (transaction: IotaTransactionBlockResponse, ctx: IotaContext) => 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 // deprecated,, use object type processor\n public onObjectChange(\n handler: (changes: IotaObjectChange[], ctx: IotaObjectChangeContext) => void,\n type: string | string[]\n ): this {\n return super.onObjectChange(handler, type)\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import type { IotaEvent, MoveCallIotaTransaction, IotaMoveObject, DevInspectResults } from '@iota/iota-sdk/client'\nimport { DecodedStruct } from '@typemove/move'\n\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nexport type TypedEventInstance<T> = DecodedStruct<IotaEvent, T>\nexport type TypedIotaMoveObject<T> = DecodedStruct<IotaMoveObject, T>\n\nexport type TypedFunctionPayload<T extends Array<any>> = MoveCallIotaTransaction & {\n /**\n * decoded argument data using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n arguments_decoded: T\n}\n\nexport type TypedDevInspectResults<T extends Array<any>> = DevInspectResults & {\n /**\n * Decoded return values using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n results_decoded?: T\n}\n","import { Transaction, TransactionArgument, TransactionObjectInput } from '@iota/iota-sdk/transactions'\n\nexport function isTransactionArgument(value: any): boolean {\n if (typeof value !== 'object') return false\n if (value === null || value === undefined) return false\n\n return (\n value.$kind === 'GasCoin' || value.$kind === 'Result' || value.$kind === 'NestedResult' || value.$kind === 'Input'\n )\n}\n\nexport function transactionArgumentOrObject(\n value: TransactionObjectInput,\n transactionBlock: Transaction\n): TransactionArgument {\n // if (isTransactionArgument(value)) {\n // return value as TransactionArgument\n // }\n return transactionBlock.object(value)\n}\n\nexport function transactionArgumentOrPure(value: any, transactionBlock: Transaction): any {\n if (isTransactionArgument(value)) {\n return value\n }\n return typeof value == 'string' ? transactionBlock.pure.string(value) : transactionBlock.pure.u64(value)\n}\n\nexport function transactionArgumentOrPureString(\n value: TransactionArgument | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.string(value as string)\n}\n\nexport function transactionArgumentOrPureAddress(\n value: TransactionArgument | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.address(value as string)\n}\n\nexport function transactionArgumentOrPureU8(\n value: TransactionArgument | number,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u8(value as number)\n}\n\nexport function transactionArgumentOrPureU16(\n value: TransactionArgument | number,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u16(value as number)\n}\n\nexport function transactionArgumentOrPureU32(\n value: TransactionArgument | number,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u32(value as number)\n}\n\nexport function transactionArgumentOrPureU64(\n value: TransactionArgument | bigint | number | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u64(value as number)\n}\n\nexport function transactionArgumentOrPureU128(\n value: TransactionArgument | bigint | number | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u128(value as number)\n}\n\nexport function transactionArgumentOrPureU256(\n value: TransactionArgument | bigint | number | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u256(value as number)\n}\n\nexport function transactionArgumentOrPureBool(\n value: TransactionArgument | boolean,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.bool(value as boolean)\n}\n\n// TODO vector might be nested\nexport function transactionArgumentOrVec(value: any, transactionBlock: Transaction): any {\n if (isTransactionArgument(value)) {\n return value\n }\n return transactionBlock.makeMoveVec({\n elements: value.map((a: any) => transactionBlock.object(a))\n })\n}\n","import type {\n IotaMoveNormalizedEnum,\n IotaMoveNormalizedField,\n IotaMoveNormalizedFunction,\n IotaMoveNormalizedModule,\n IotaMoveNormalizedStruct,\n IotaMoveNormalizedType\n} from '@iota/iota-sdk/client'\nimport {\n InternalMoveEnum,\n InternalMoveFunction,\n InternalMoveFunctionVisibility,\n InternalMoveModule,\n InternalMoveStruct,\n InternalMoveStructField,\n SPLITTER,\n TypeDescriptor\n} from '@typemove/move'\n\nexport function toInternalModule(module: IotaMoveNormalizedModule): InternalMoveModule {\n return {\n address: module.address,\n exposedFunctions: Object.entries(module.exposedFunctions).map(([n, f]) => toInternalFunction(n, f)),\n name: module.name,\n structs: Object.entries(module.structs).map(([n, s]) => toInternalStruct(n, s)),\n enums: Object.entries(module.enums || {}).map(([n, e]) => toInternalEnum(n, e))\n }\n}\n\nfunction toInternalFunction(name: string, func: IotaMoveNormalizedFunction): InternalMoveFunction {\n let visibility\n switch (func.visibility) {\n case 'Private':\n visibility = InternalMoveFunctionVisibility.PRIVATE\n break\n case 'Public':\n visibility = InternalMoveFunctionVisibility.PUBLIC\n break\n case 'Friend':\n visibility = InternalMoveFunctionVisibility.FRIEND\n break\n default:\n throw Error('No visibility for function' + name)\n }\n return {\n typeParams: func.typeParameters.map((p: any) => {\n return { constraints: p.abilities }\n }),\n isEntry: func.isEntry,\n name: name,\n params: func.parameters.map(toTypeDescriptor),\n return: func.return.map(toTypeDescriptor),\n visibility: visibility\n }\n}\n\nfunction toInternalStruct(name: string, struct: IotaMoveNormalizedStruct): InternalMoveStruct {\n return {\n abilities: struct.abilities.abilities,\n fields: struct.fields.map(toInternalField),\n typeParams: struct.typeParameters.map((p: any) => {\n return { constraints: p.constraints.abilities }\n }),\n isNative: false,\n isEvent: false,\n name: name\n }\n}\n\nfunction toInternalEnum(name: string, enumType: IotaMoveNormalizedEnum): InternalMoveEnum {\n return {\n name: name,\n abilities: enumType.abilities.abilities,\n typeParams: enumType.typeParameters.map((p: any) => {\n return { constraints: p.constraints.abilities }\n }),\n variants: Object.entries(enumType.variants).reduce((acc: { [key: string]: InternalMoveStructField[] }, [k, v]) => {\n acc[k] = v.map(toInternalField)\n return acc\n }, {})\n }\n}\n\nfunction toInternalField(module: IotaMoveNormalizedField): InternalMoveStructField {\n return {\n name: module.name,\n type: toTypeDescriptor(module.type)\n }\n}\n\nfunction toTypeDescriptor(normalizedType: IotaMoveNormalizedType): TypeDescriptor {\n if (typeof normalizedType === 'string') {\n return new TypeDescriptor(normalizedType)\n }\n\n if ('Struct' in normalizedType) {\n const qname = [normalizedType.Struct.address, normalizedType.Struct.module, normalizedType.Struct.name].join(\n SPLITTER\n )\n\n const args = normalizedType.Struct.typeArguments.map(toTypeDescriptor)\n\n return new TypeDescriptor(qname, args)\n }\n\n if ('Vector' in normalizedType) {\n return new TypeDescriptor('Vector', [toTypeDescriptor(normalizedType.Vector)])\n }\n if ('TypeParameter' in normalizedType) {\n return new TypeDescriptor('T' + normalizedType.TypeParameter)\n }\n\n if ('Reference' in normalizedType) {\n const res = toTypeDescriptor(normalizedType.Reference)\n res.reference = true\n return res\n }\n\n if ('MutableReference' in normalizedType) {\n const res = toTypeDescriptor(normalizedType.MutableReference)\n res.reference = true\n res.mutable = true\n return res\n }\n\n throw new Error('Unexpected sui type')\n}\n","import { toInternalModule } from './to-internal.js'\nimport {\n InternalMoveModule,\n InternalMoveStruct,\n ChainAdapter,\n moduleQname,\n SPLITTER,\n TypeDescriptor\n} from '@typemove/move'\n\nimport { IotaMoveNormalizedModule, IotaEvent, IotaMoveObject, IotaClient } from '@iota/iota-sdk/client'\n\nexport class IotaChainAdapter extends ChainAdapter<\n // IotaNetwork,\n IotaMoveNormalizedModule,\n IotaEvent | IotaMoveObject\n> {\n async getChainId() {\n return this.client.getChainIdentifier()\n }\n // static INSTANCE = new IotaChainAdapter()\n\n client: IotaClient\n constructor(client: IotaClient) {\n super()\n this.client = client\n }\n\n async fetchModule(\n account: string,\n module: string\n // network: IotaNetwork\n ): Promise<IotaMoveNormalizedModule> {\n return await this.client.getNormalizedMoveModule({ package: account, module })\n }\n\n async fetchModules(\n account: string\n // network: IotaNetwork\n ): Promise<IotaMoveNormalizedModule[]> {\n const modules = await this.client.getNormalizedMoveModulesByPackage({\n package: account\n })\n return Object.values(modules)\n }\n\n getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[] {\n return params\n // if (params.length === 0) {\n // return params\n // }\n // return params.slice(0, params.length - 1)\n }\n\n toInternalModules(modules: IotaMoveNormalizedModule[]): InternalMoveModule[] {\n return Object.values(modules).map(toInternalModule)\n }\n\n getAllEventStructs(modules: InternalMoveModule[]): Map<string, InternalMoveStruct> {\n const eventMap = new Map<string, InternalMoveStruct>()\n\n for (const module of modules) {\n const qname = moduleQname(module)\n\n for (const struct of module.structs) {\n const abilities = new Set(struct.abilities)\n if (abilities.has('Drop') && abilities.has('Copy')) {\n eventMap.set(qname + SPLITTER + struct.name, struct)\n }\n }\n }\n return eventMap\n }\n\n getType(base: IotaEvent | IotaMoveObject): string {\n return base.type\n }\n\n getData(val: IotaEvent | IotaMoveObject) {\n // if (val.parsedJson) {\n // return val.parsedJson as any\n // }\n if (val === undefined) {\n throw Error('val is undefined')\n }\n if ('parsedJson' in val) {\n return val.parsedJson as any\n }\n // if (IotaParsedData.is(val)) {\n // return val.fields as any\n // }\n if (val.dataType === 'moveObject') {\n return val.fields as any\n }\n // if (IotaMoveObject.is(val)) {\n // return val.fields as any\n // }\n // This may not be perfect, just think everything has\n if ('fields' in val) {\n if ('type' in val && Object.keys(val).length === 2) {\n return val.fields as any\n }\n }\n return val as any\n }\n // validateAndNormalizeAddress(address: string) {\n // return validateAndNormalizeAddress(address)\n // }\n}\n\nfunction getRpcClient(endpoint: string): IotaClient {\n return new IotaClient({ url: endpoint })\n}\n","import { TypedDevInspectResults, TypedEventInstance, TypedFunctionPayload } from './models.js'\nimport {\n AbstractMoveCoder,\n ANY_TYPE,\n DecodedStruct,\n accountTypeString,\n parseMoveType,\n SPLITTER,\n TypeDescriptor,\n InternalMoveModule\n} from '@typemove/move'\nimport {\n MoveCallIotaTransaction,\n IotaCallArg,\n IotaEvent,\n IotaMoveNormalizedModule,\n IotaMoveObject,\n DevInspectResults,\n IotaClient\n} from '@iota/iota-sdk/client'\nimport { toInternalModule } from './to-internal.js'\nimport { IotaChainAdapter } from './sui-chain-adapter.js'\nimport { dynamic_field } from './builtin/0x2.js'\nimport { BcsType, bcs } from '@iota/iota-sdk/bcs'\n\n// import { Encoding } from '@mysten/bcs/types', this doesn't get exported correctly\nexport type Encoding = 'base58' | 'base64' | 'hex'\n\nimport { normalizeIotaObjectId, normalizeIotaAddress } from '@iota/iota-sdk/utils'\n\nexport class MoveCoder extends AbstractMoveCoder<\n // IotaNetwork,\n IotaMoveNormalizedModule,\n IotaEvent | IotaMoveObject\n> {\n constructor(client: IotaClient) {\n super(new IotaChainAdapter(client))\n }\n\n load(module: IotaMoveNormalizedModule, address: string): InternalMoveModule {\n address = accountTypeString(address)\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 this.accounts.add(module.address)\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 normalizeIotaObjectId(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 normalizeIotaAddress(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: IotaEvent): Promise<TypedEventInstance<T> | undefined> {\n return this.decodedStruct(event)\n }\n filterAndDecodeEvents<T>(type: TypeDescriptor<T> | string, resources: IotaEvent[]): 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: IotaMoveObject[],\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: IotaMoveObject[]\n ): Promise<DecodedStruct<IotaMoveObject, T>[]> {\n return this.filterAndDecodeStruct(type, objects)\n }\n\n async decodeFunctionPayload(\n payload: MoveCallIotaTransaction,\n inputs: IotaCallArg[]\n ): Promise<MoveCallIotaTransaction> {\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 bcsRegistered = new Set<string>()\n private bcsRegistry = new Map<string, BcsType<any>>()\n\n private async getBCSTypeWithArgs(type: TypeDescriptor, args: BcsType<any>[] = []): Promise<BcsType<any>> {\n const qname = type.qname\n const sig = type.getNormalizedSignature()\n const cached = this.bcsRegistry.get(sig)\n if (cached) {\n return cached\n }\n const lowerQname = qname.toLowerCase()\n switch (lowerQname) {\n case 'u8':\n case 'u16':\n case 'u32':\n case 'u64':\n case 'u128':\n case 'u256':\n case 'bool':\n return bcs[lowerQname]()\n case 'address':\n return bcs.Address\n case 'vector':\n return bcs.vector(args[0])\n default:\n if (!qname.includes('::')) {\n throw `Unimplemented builtin type ${qname}`\n }\n }\n let moveStruct\n try {\n moveStruct = await this.getMoveStruct(qname)\n } catch (e) {\n console.error('Invalid move address', qname)\n throw e\n }\n const structDef: Record<string, any> = {}\n for (const field of moveStruct.fields) {\n if (field.type.qname.startsWith('T') && args.length) {\n const index = +field.type.qname.slice(1)\n structDef[field.name] = args[index]\n } else if (field.type.typeArgs.length && args.length) {\n structDef[field.name] = await this.getBCSTypeWithArgs(field.type, args)\n } else {\n structDef[field.name] = await this.getBCSType(field.type)\n }\n }\n return bcs.struct(qname, structDef)\n }\n\n async getBCSType(type: TypeDescriptor): Promise<BcsType<any>> {\n const args = await Promise.all(type.typeArgs.map((x) => this.getBCSType(x)))\n const bcsType = await this.getBCSTypeWithArgs(type, args)\n this.bcsRegistry.set(type.getNormalizedSignature(), bcsType)\n return bcsType\n }\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 const bcsType = await this.getBCSType(type)\n this.bcsRegistry.set(type.getNormalizedSignature(), bcsType)\n }\n\n async decodeBCS(type: TypeDescriptor, data: Uint8Array | string, encoding?: Encoding): Promise<any> {\n await this.registerBCSTypes(type)\n if (typeof data == 'string') {\n const buf = Buffer.from(data, encoding as any)\n data = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n }\n const bcsType = this.bcsRegistry.get(type.getNormalizedSignature())\n return bcsType?.parse(data)\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.decodeType(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://api.mainnet.iota.cafe/'\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 IotaClient({ url: endpoint }))\n CODER_MAP.set(endpoint, coder)\n }\n return coder\n}\n\nconst PROVIDER_CODER_MAP = new Map<IotaClient, MoveCoder>()\n\nlet DEFAULT_CHAIN_ID: string | undefined\n\nexport async function getMoveCoder(client: IotaClient): 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/iota'\n\nimport { getClient, IotaNetwork } from './network.js'\n\nconst CODERS = new Map<IotaNetwork, MoveCoder>()\n\nexport function defaultMoveCoder(network: IotaNetwork = IotaNetwork.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(\"node:process\").then((p) => p.stdout.write(\"\"));","import { RecordMetaData } from '@sentio/protos'\nimport { type Labels, normalizeLabels } from '../index.js'\nimport { getClient, IotaNetwork } from './network.js'\nimport {\n IotaTransactionBlockResponse,\n IotaEvent,\n IotaMoveNormalizedModule,\n IotaMoveObject,\n IotaClient\n} from '@iota/iota-sdk/client'\nimport { MoveCoder } from './index.js'\nimport { defaultMoveCoder } from './move-coder.js'\nimport { MoveAccountContext, MoveContext } from '../move/index.js'\n\nexport class IotaContext extends MoveContext<IotaNetwork, IotaMoveNormalizedModule, IotaEvent | IotaMoveObject> {\n moduleName: string\n timestamp: Date\n checkpoint: bigint\n transaction: IotaTransactionBlockResponse\n eventIndex: number\n coder: MoveCoder\n\n constructor(\n moduleName: string,\n network: IotaNetwork,\n address: string,\n timestamp: Date,\n checkpoint: bigint,\n transaction: IotaTransactionBlockResponse,\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(): IotaClient {\n return getClient(this.network)\n }\n}\n\nexport class IotaObjectChangeContext extends MoveContext<\n IotaNetwork,\n IotaMoveNormalizedModule,\n IotaEvent | IotaMoveObject\n> {\n timestamp: Date\n checkpoint: bigint\n coder: MoveCoder\n txDigest: string\n\n constructor(\n network: IotaNetwork,\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(): IotaClient {\n return getClient(this.network)\n }\n}\n\n// TODO address handler should use this context\nexport class IotaAddressContext extends MoveAccountContext<\n IotaNetwork,\n IotaMoveNormalizedModule,\n IotaEvent | IotaMoveObject\n> {\n address: string\n network: IotaNetwork\n checkpoint: bigint\n timestamp: Date\n coder: MoveCoder\n\n protected contractName = 'address'\n\n constructor(\n network: IotaNetwork,\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(): IotaClient {\n return getClient(this.network)\n }\n\n getTimestamp(): number {\n return this.timestamp.getDate()\n }\n}\n\nexport class IotaObjectContext extends IotaAddressContext {\n contractName = 'object'\n objectId: string\n objectVersion: bigint\n\n constructor(\n network: IotaNetwork,\n objectId: string,\n objectVersion: bigint,\n checkpoint: bigint,\n timestamp: Date,\n baseLabels: Labels | undefined\n ) {\n super(network, objectId, checkpoint, timestamp, baseLabels)\n this.objectId = objectId\n this.objectVersion = objectVersion\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import {\n IotaTransactionBlockResponse,\n MoveCallIotaTransaction,\n ProgrammableTransaction,\n IotaTransaction\n} from '@iota/iota-sdk/client'\nimport { accountTypeString } from '@typemove/move'\n\nexport function getMoveCalls(txBlock: IotaTransactionBlockResponse) {\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: IotaTransaction) => {\n if ('MoveCall' in tx) {\n const call = tx.MoveCall as MoveCallIotaTransaction\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 isValidIotaAddress(value: string): value is IotaAddress {\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 (!isValidIotaAddress(address)) {\n// throw Error('Not valid Address')\n// }\n// return normalizeIotaAddress(address)\n// }\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import {\n Data_SuiCall,\n Data_SuiObject,\n Data_SuiObjectChange,\n HandleInterval,\n MoveAccountFetchConfig,\n MoveFetchConfig,\n MoveOwnerType,\n ProcessResult\n} from '@sentio/protos'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { IotaNetwork } from './network.js'\nimport { IotaAddressContext, IotaContext, IotaObjectChangeContext, IotaObjectContext } from './context.js'\nimport { IotaMoveObject, IotaObjectChange, IotaTransactionBlockResponse } from '@iota/iota-sdk/client'\nimport { ALL_ADDRESS, PromiseOrVoid } from '../core/index.js'\nimport { configure, DEFAULT_FETCH_CONFIG, IndexConfigure, IotaBindOptions } from './iota-processor.js'\nimport { CallHandler, TransactionFilter, accountTypeString, ObjectChangeHandler } from '../move/index.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { TypeDescriptor } from '@typemove/move'\nimport { TypedIotaMoveObject } from './models.js'\nimport { getHandlerName, proxyProcessor } from '../utils/metrics.js'\n\nexport interface IotaObjectBindOptions {\n objectId: string\n network?: IotaNetwork\n startCheckpoint?: bigint\n endCheckpoint?: bigint\n baseLabels?: { [key: string]: string }\n}\n\nexport interface IotaObjectTypeBindOptions<T> {\n objectType: TypeDescriptor<T>\n network?: IotaNetwork\n startCheckpoint?: bigint\n endCheckpoint?: 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 handlerName: string\n}\n\nexport const DEFAULT_ACCOUNT_FETCH_CONFIG: MoveAccountFetchConfig = {\n owned: false\n}\n\nexport class IotaAccountProcessorState extends ListStateStorage<IotaBaseObjectOrAddressProcessor<any>> {\n static INSTANCE = new IotaAccountProcessorState()\n}\n\nexport interface IotaInternalObjectsBindOptions extends IotaBindOptions {\n ownerType: MoveOwnerType\n}\n\nexport abstract class IotaBaseObjectOrAddressProcessor<HandlerType> {\n config: IndexConfigure\n ownerType: MoveOwnerType\n templateId: number | undefined\n\n objectHandlers: ObjectHandler[] = []\n objectChangeHandlers: ObjectChangeHandler<Data_SuiObjectChange>[] = []\n\n // static bind(options: IotaObjectsBindOptions): IotaBaseObjectsProcessor<any> {\n // return new IotaBaseObjectsProcessor(options)\n // }\n\n protected constructor(options: IotaInternalObjectsBindOptions) {\n if (options.ownerType === MoveOwnerType.TYPE) {\n this.config = {\n startCheckpoint: options.startCheckpoint || 0n,\n endCheckpoint: options.endCheckpoint,\n address: options.address === '*' ? '*' : accountTypeString(options.address),\n network: options.network || IotaNetwork.MAIN_NET,\n baseLabels: options.baseLabels\n }\n } else {\n this.config = configure(options)\n }\n this.ownerType = options.ownerType\n IotaAccountProcessorState.INSTANCE.addValue(this)\n\n return proxyProcessor(this)\n }\n\n getChainId(): string {\n return this.config.network\n }\n\n // protected abstract transformObjects(objects: IotaMoveObject[]): IotaMoveObject[]\n\n protected abstract doHandle(handler: HandlerType, data: Data_SuiObject, ctx: IotaObjectContext): Promise<any>\n\n public onInterval(\n handler: HandlerType, //(resources: IotaMoveObject[], ctx: IotaObjectsContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n checkpointInterval: HandleInterval | undefined,\n type: string | undefined,\n fetchConfig: Partial<MoveAccountFetchConfig> | undefined,\n handlerName = getHandlerName()\n ): this {\n const processor = this\n this.objectHandlers.push({\n handlerName,\n handler: async function (data) {\n const ctx = new IotaObjectContext(\n processor.config.network,\n data.objectId,\n data.objectVersion,\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\nabstract class IotaBaseObjectOrAddressProcessorInternal<\n HandlerType\n> extends IotaBaseObjectOrAddressProcessor<HandlerType> {\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 IotaAddressProcessor extends IotaBaseObjectOrAddressProcessorInternal<\n (objects: IotaMoveObject[], ctx: IotaAddressContext) => PromiseOrVoid\n> {\n callHandlers: CallHandler<Data_SuiCall>[] = []\n\n static bind(options: IotaBindOptions): IotaAddressProcessor {\n return new IotaAddressProcessor({ ...options, ownerType: MoveOwnerType.ADDRESS })\n }\n\n protected async doHandle(\n handler: (objects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: IotaObjectContext\n ) {\n return handler(data.rawObjects.map((o) => JSON.parse(o)) as IotaMoveObject[], ctx)\n }\n\n onTransactionBlock(\n handler: (transaction: IotaTransactionBlockResponse, ctx: IotaContext) => PromiseOrVoid,\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 handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is null')\n }\n const tx = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse\n\n const ctx = new IotaContext(\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 IotaObjectProcessor extends IotaBaseObjectOrAddressProcessorInternal<\n (self: IotaMoveObject, dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid\n> {\n static bind(options: IotaObjectBindOptions): IotaObjectProcessor {\n return new IotaObjectProcessor({\n address: options.objectId,\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n endCheckpoint: options.endCheckpoint,\n ownerType: MoveOwnerType.OBJECT,\n baseLabels: options.baseLabels\n })\n }\n\n protected async doHandle(\n handler: (self: IotaMoveObject, dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: IotaObjectContext\n ) {\n if (!data.rawSelf) {\n console.log(`Iota object not existed in ${ctx.checkpoint}, please specific a start time`)\n return\n }\n return handler(\n JSON.parse(data.rawSelf) as IotaMoveObject,\n data.rawObjects.map((o) => JSON.parse(o)) as IotaMoveObject[],\n ctx\n )\n }\n}\n\nexport class IotaObjectTypeProcessor<T> extends IotaBaseObjectOrAddressProcessor<\n (self: TypedIotaMoveObject<T>, dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid\n> {\n objectType: TypeDescriptor<T>\n\n static bind<T>(options: IotaObjectTypeBindOptions<T>): IotaObjectTypeProcessor<T> {\n const processor = new IotaObjectTypeProcessor<T>({\n address: ALL_ADDRESS, // current only support on all address\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n endCheckpoint: options.endCheckpoint,\n ownerType: MoveOwnerType.TYPE,\n baseLabels: options.baseLabels\n })\n processor.objectType = options.objectType\n return processor\n }\n\n protected async doHandle(\n handler: (\n self: TypedIotaMoveObject<T>,\n dynamicFieldObjects: IotaMoveObject[],\n ctx: IotaObjectContext\n ) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: IotaObjectContext\n ) {\n if (!data.rawSelf) {\n console.log(`Iota object not existed in ${ctx.checkpoint}, please specific a start time`)\n return\n }\n const object = await ctx.coder.filterAndDecodeObjects(this.objectType, [JSON.parse(data.rawSelf) as IotaMoveObject])\n return handler(object[0], data.rawObjects.map((o) => JSON.parse(o)) as IotaMoveObject[], ctx)\n }\n\n public onObjectChange(handler: (changes: IotaObjectChange[], ctx: IotaObjectChangeContext) => PromiseOrVoid): this {\n if (this.config.network === IotaNetwork.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 handlerName: getHandlerName(),\n handler: async function (data: Data_SuiObjectChange) {\n const ctx = new IotaObjectChangeContext(\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.rawChanges.map((r) => JSON.parse(r)) as IotaObjectChange[], ctx)\n return ctx.stopAndGetResult()\n },\n type: [this.objectType.getSignature()]\n })\n\n return this\n }\n\n public onTimeInterval(\n handler: (\n self: TypedIotaMoveObject<T>,\n dynamicFieldObjects: IotaMoveObject[],\n ctx: IotaObjectContext\n ) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes\n },\n undefined,\n this.objectType.getSignature(),\n fetchConfig\n )\n }\n\n public onCheckpointInterval(\n handler: (\n self: TypedIotaMoveObject<T>,\n dynamicFieldObjects: IotaMoveObject[],\n ctx: IotaObjectContext\n ) => PromiseOrVoid,\n checkpointInterval = 100000,\n backfillCheckpointInterval = 400000,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: checkpointInterval, backfillInterval: backfillCheckpointInterval },\n this.objectType.qname,\n fetchConfig\n )\n }\n}\n\nexport class IotaWrappedObjectProcessor extends IotaBaseObjectOrAddressProcessorInternal<\n (dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid\n> {\n static bind(options: IotaObjectBindOptions): IotaWrappedObjectProcessor {\n return new IotaWrappedObjectProcessor({\n address: options.objectId,\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n endCheckpoint: options.endCheckpoint,\n ownerType: MoveOwnerType.WRAPPED_OBJECT,\n baseLabels: options.baseLabels\n })\n }\n\n protected async doHandle(\n handler: (dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: IotaObjectContext\n ) {\n return handler(data.rawObjects.map((o) => JSON.parse(o)) as IotaMoveObject[], ctx)\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { HandleInterval, MoveAccountFetchConfig, MoveFetchConfig, TemplateInstance } from '@sentio/protos'\nimport { ListStateStorage, processMetrics } from '@sentio/runtime'\nimport { IotaAddressContext, IotaContext, IotaObjectContext } from './context.js'\nimport { IotaMoveObject, IotaTransactionBlockResponse } from '@iota/iota-sdk/client'\nimport { PromiseOrVoid } from '../core/index.js'\nimport {\n DEFAULT_ACCOUNT_FETCH_CONFIG,\n IotaAccountProcessorState,\n IotaAddressProcessor,\n IotaBaseObjectOrAddressProcessor,\n IotaObjectBindOptions,\n IotaObjectProcessor,\n IotaWrappedObjectProcessor\n} from './iota-object-processor.js'\nimport { IotaBindOptions } from './iota-processor.js'\nimport { TransactionFilter, accountAddressString } from '../move/index.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { getHandlerName, proxyProcessor } from '../utils/metrics.js'\n\nclass ObjectHandler<HandlerType> {\n type?: string\n checkpointInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handlerName: string\n handler: HandlerType\n fetchConfig: MoveAccountFetchConfig\n}\n\nexport class IotaAccountProcessorTemplateState extends ListStateStorage<\n IotaObjectOrAddressProcessorTemplate<any, any, any>\n> {\n static INSTANCE = new IotaAccountProcessorTemplateState()\n}\n\nexport abstract class IotaObjectOrAddressProcessorTemplate<\n HandlerType,\n OptionType extends IotaObjectBindOptions | IotaBindOptions,\n ProcessorType extends IotaBaseObjectOrAddressProcessor<HandlerType>\n> {\n id: number\n objectHandlers: ObjectHandler<HandlerType>[] = []\n instances = new Set<string>()\n\n constructor() {\n this.id = IotaAccountProcessorTemplateState.INSTANCE.getValues().length\n IotaAccountProcessorTemplateState.INSTANCE.addValue(this)\n return proxyProcessor(this)\n }\n\n protected abstract createProcessor(options: IotaObjectBindOptions | IotaBindOptions): ProcessorType\n\n bind(options: OptionType, ctx: IotaContext): void {\n options.network = options.network || ctx.network\n options.startCheckpoint = options.startCheckpoint || ctx.checkpoint\n let id = (options as IotaObjectBindOptions).objectId || (options as IotaBindOptions).address\n\n if (id === '*') {\n throw new ServerError(Status.INVALID_ARGUMENT, \"can't bind template instance with *\")\n }\n id = accountAddressString(id)\n\n const instance: TemplateInstance = {\n templateId: this.id,\n contract: {\n name: '',\n chainId: options.network,\n address: id,\n abi: ''\n },\n startBlock: options.startCheckpoint || 0n,\n endBlock: options.endCheckpoint || 0n,\n baseLabels: options.baseLabels\n }\n\n ctx.sendTemplateInstance(instance)\n\n ctx.update({\n states: {\n configUpdated: true\n }\n })\n\n processMetrics.processor_template_instance_count.add(1, {\n chain_id: options.network,\n template: this.constructor.name\n })\n }\n\n startInstance(options: OptionType, ctx: IotaContext): void {\n options.network = options.network || ctx.network\n options.startCheckpoint = options.startCheckpoint || ctx.checkpoint\n let id = (options as IotaObjectBindOptions).objectId || (options as IotaBindOptions).address\n\n if (id === '*') {\n throw new ServerError(Status.INVALID_ARGUMENT, \"can't bind template instance with *\")\n }\n id = accountAddressString(id)\n\n const sig = [options.network, id].join('_')\n if (this.instances.has(sig)) {\n console.debug(`Same object id can be bind to one template only once, ignore duplicate bind: ${sig}`)\n return\n }\n this.instances.add(sig)\n\n const processor = this.createProcessor(options)\n for (const h of this.objectHandlers) {\n processor.onInterval(\n h.handler,\n h.timeIntervalInMinutes,\n h.checkpointInterval,\n h.type,\n h.fetchConfig,\n h.handlerName\n )\n }\n console.log(`successfully bind template ${sig}`)\n }\n\n unbind(options: OptionType, ctx: IotaContext): void {\n options.network = options.network || ctx.network\n options.startCheckpoint = options.startCheckpoint || ctx.checkpoint\n let id = (options as IotaObjectBindOptions).objectId || (options as IotaBindOptions).address\n\n if (id === '*') {\n throw new ServerError(Status.INVALID_ARGUMENT, \"can't delete template instance bind with *\")\n }\n id = accountAddressString(id)\n\n const sig = [options.network, id].join('_')\n if (!this.instances.has(sig)) {\n console.log(`the template instance ${sig} not existed or already unbind`)\n return\n }\n this.instances.delete(sig)\n\n const oldProcessors = IotaAccountProcessorState.INSTANCE.unregister()\n let deleted = 0\n for (const processor of oldProcessors) {\n if (processor.templateId === this.id) {\n if (processor.config.network == options.network && processor.config.address === id) {\n deleted++\n continue\n }\n }\n IotaAccountProcessorState.INSTANCE.addValue(processor)\n }\n\n if (deleted !== 1) {\n throw new ServerError(\n Status.INVALID_ARGUMENT,\n `Failed to delete processor for template ${this.id}, ${sig}. deleted ${deleted} times`\n )\n }\n\n console.log(`successfully unbind template ${sig}`)\n\n ctx.update({\n states: {\n configUpdated: true\n }\n })\n ctx.sendTemplateInstance(\n {\n templateId: this.id,\n contract: {\n name: '',\n chainId: options.network,\n address: id,\n abi: ''\n },\n startBlock: options.startCheckpoint || 0n,\n endBlock: options.endCheckpoint || 0n,\n baseLabels: options.baseLabels\n },\n true\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 handlerName: getHandlerName(),\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: IotaTransactionBlockResponse, ctx: IotaContext) => void\n filter?: TransactionFilter\n fetchConfig?: Partial<MoveFetchConfig>\n}\n\nexport class IotaAddressProcessorTemplate extends IotaObjectOrAddressProcessorTemplate<\n (objects: IotaMoveObject[], ctx: IotaAddressContext) => PromiseOrVoid,\n IotaBindOptions,\n IotaAddressProcessor\n> {\n private handlers: AddressTransactionHandler[] = []\n\n createProcessor(options: IotaBindOptions): IotaAddressProcessor {\n const p = IotaAddressProcessor.bind(options)\n for (const handler of this.handlers) {\n p.onTransactionBlock(handler.handler, handler.filter, handler.fetchConfig)\n }\n p.templateId = this.id\n return p\n }\n\n onTransactionBlock(\n handler: (transaction: IotaTransactionBlockResponse, ctx: IotaContext) => 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 IotaObjectProcessorTemplate extends IotaObjectOrAddressProcessorTemplate<\n (self: IotaMoveObject, dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid,\n IotaObjectBindOptions,\n IotaObjectProcessor\n> {\n createProcessor(options: IotaObjectBindOptions): IotaObjectProcessor {\n const p = IotaObjectProcessor.bind(options)\n p.templateId = this.id\n return p\n }\n}\n\nexport class IotaWrappedObjectProcessorTemplate extends IotaObjectOrAddressProcessorTemplate<\n (dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid,\n IotaObjectBindOptions,\n IotaWrappedObjectProcessor\n> {\n createProcessor(options: IotaObjectBindOptions): IotaWrappedObjectProcessor {\n const p = IotaWrappedObjectProcessor.bind(options)\n p.templateId = this.id\n return p\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import type { IotaEvent, MoveCallIotaTransaction, IotaMoveObject } from '@iota/iota-sdk/client'\nimport { DecodedStruct } from '@typemove/move'\n\nexport type TypedEventInstance<T> = DecodedStruct<IotaEvent, T>\nexport type TypedIotaMoveObject<T> = DecodedStruct<IotaMoveObject, T>\n\nexport type TypedFunctionPayload<T extends Array<any>> = MoveCallIotaTransaction & {\n /**\n * decoded argument data using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n arguments_decoded: T\n}\n\nexport type { PartitionHandler, HandlerOptions } from '../core/index.js'\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","// real plugin is in src/sui/sui-plugin.ts\nimport '@sentio/sdk/sui'\n\nexport class IotaPlugin {}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","export { IotaBaseProcessor, IotaGlobalProcessor, IotaModulesProcessor, type IotaBindOptions } from './iota-processor.js'\nexport {\n IotaAddressProcessor,\n IotaObjectProcessor,\n IotaObjectTypeProcessor,\n IotaWrappedObjectProcessor,\n type IotaObjectBindOptions,\n type IotaObjectTypeBindOptions\n} from './iota-object-processor.js'\n\nexport {\n IotaAddressProcessorTemplate,\n IotaObjectProcessorTemplate,\n IotaWrappedObjectProcessorTemplate\n} from './iota-object-processor-template.js'\n\nexport * from './network.js'\nexport * from './context.js'\nexport * from './models.js'\n\nexport * from './move-coder.js'\n\nexport { IotaPlugin } from './iota-plugin.js'\n\nexport { BUILTIN_TYPES } from '@typemove/move'\n\nexport { MoveCoder } from '@typemove/iota'\n\n// export { validateAndNormalizeAddress, isValidIotaAddress } from './utils.js'\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","export { SuiBaseProcessor, SuiGlobalProcessor, SuiModulesProcessor, type SuiBindOptions } from './sui-processor.js'\nexport {\n SuiAddressProcessor,\n SuiObjectProcessor,\n SuiObjectTypeProcessor,\n SuiWrappedObjectProcessor,\n type SuiObjectBindOptions,\n type SuiObjectTypeBindOptions\n} from './sui-object-processor.js'\n\nexport {\n SuiAddressProcessorTemplate,\n SuiObjectProcessorTemplate,\n SuiWrappedObjectProcessorTemplate\n} from './sui-object-processor-template.js'\n\nexport * from './network.js'\nexport * from './context.js'\nexport * from './models.js'\n\nexport * from './move-coder.js'\n\nexport { SuiPlugin } from './sui-plugin.js'\n\nexport { BUILTIN_TYPES } from '@typemove/move'\n\nexport { MoveCoder } from '@typemove/sui'\n\n// export { validateAndNormalizeAddress, isValidSuiAddress } from './utils.js'\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));"],"mappings":"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","names":["defaultMoveCoder","getClient","defaultMoveCoder","getClient","defaultMoveCoder","ListStateStorage","import_nice_grpc","ListStateStorage","ListStateStorage","import_nice_grpc","ListStateStorage","import_nice_grpc","SuiChainId","USER_PROCESSOR","ListStateStorage","import_nice_grpc","ZERO_ADDRESS","isTransactionArgument","transactionArgumentOrObject","transactionArgumentOrPure","transactionArgumentOrPureAddress","isTransactionArgument","transactionArgumentOrPureU8","transactionArgumentOrPureU16","transactionArgumentOrPureU32","transactionArgumentOrPureU64","transactionArgumentOrPureU128","transactionArgumentOrPureU256","transactionArgumentOrPureBool","transactionArgumentOrVec","toInternalModule","toInternalFunction","toInternalStruct","toInternalEnum","toInternalField","toInternalModule","MoveCoder","toInternalModule","DEFAULT_ENDPOINT","CODER_MAP","defaultMoveCoder","DEFAULT_ENDPOINT","CODER_MAP","MoveCoder","PROVIDER_CODER_MAP","DEFAULT_CHAIN_ID","getMoveCoder","CODERS","defaultMoveCoder","MoveCoder","defaultMoveCoder","getMoveCalls","ListStateStorage","import_nice_grpc","DEFAULT_ACCOUNT_FETCH_CONFIG","ListStateStorage","configure","DEFAULT_FETCH_CONFIG","ListStateStorage","processMetrics","import_nice_grpc","ListStateStorage","processMetrics","DEFAULT_ACCOUNT_FETCH_CONFIG","DEFAULT_FETCH_CONFIG","configure","ListStateStorage","defaultMoveCoder","getMoveCalls","SuiChainId","initCoinList","SuiChainId","NoopContext","USER_PROCESSOR","NoopContext","SuiChainId"]}
|
|
1
|
+
{"version":3,"sources":["../src/sui/sui-processor.ts","../../../node_modules/.pnpm/@typemove+sui@2.0.3_typescript@6.0.3/node_modules/@typemove/sui/src/models.ts","../../../node_modules/.pnpm/@typemove+sui@2.0.3_typescript@6.0.3/node_modules/@typemove/sui/src/transaction.ts","../../../node_modules/.pnpm/@typemove+sui@2.0.3_typescript@6.0.3/node_modules/@typemove/sui/src/to-internal.ts","../../../node_modules/.pnpm/@typemove+sui@2.0.3_typescript@6.0.3/node_modules/@typemove/sui/src/sui-chain-adapter.ts","../../../node_modules/.pnpm/@typemove+sui@2.0.3_typescript@6.0.3/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/models.ts","../src/sui/sui-plugin.ts","../src/sui/sui-plugin-part.ts","../src/iota/iota-plugin-part.ts","../src/iota/iota-processor.ts","../../../node_modules/.pnpm/@typemove+iota@2.0.3_typescript@6.0.3/node_modules/@typemove/iota/src/models.ts","../../../node_modules/.pnpm/@typemove+iota@2.0.3_typescript@6.0.3/node_modules/@typemove/iota/src/transaction.ts","../../../node_modules/.pnpm/@typemove+iota@2.0.3_typescript@6.0.3/node_modules/@typemove/iota/src/to-internal.ts","../../../node_modules/.pnpm/@typemove+iota@2.0.3_typescript@6.0.3/node_modules/@typemove/iota/src/sui-chain-adapter.ts","../../../node_modules/.pnpm/@typemove+iota@2.0.3_typescript@6.0.3/node_modules/@typemove/iota/src/move-coder.ts","../src/iota/move-coder.ts","../src/iota/context.ts","../src/iota/utils.ts","../src/iota/iota-object-processor.ts","../src/iota/iota-object-processor-template.ts","../src/iota/models.ts","../src/iota/iota-plugin.ts","../src/iota/index.ts","../src/sui/index.ts"],"sourcesContent":["import { Data_SuiCall, Data_SuiEvent, Data_SuiObjectChange, MoveFetchConfig } from '@sentio/protos'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { SuiNetwork } from './network.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { SuiContext, SuiObjectChangeContext } from './context.js'\nimport type { SuiObjectChange } from '@mysten/sui/jsonRpc'\nimport type { GrpcTypes } from '@mysten/sui/grpc'\nimport type { SuiEventInput } from '@typemove/sui'\nimport {\n accountAddressString,\n CallHandler,\n EventFilter,\n EventHandler,\n FunctionNameAndCallFilter,\n ObjectChangeHandler,\n SPLITTER,\n TransactionFilter\n} from '../move/index.js'\nimport { getMoveCalls, getProgrammableTransaction } from './utils.js'\nimport { defaultMoveCoder, MoveCoder } from './index.js'\nimport { ALL_ADDRESS, Labels, PromiseOrVoid } from '../core/index.js'\nimport { Required } from 'utility-types'\nimport { getHandlerName, proxyProcessor } from '../utils/metrics.js'\nimport { HandlerOptions } from './models.js'\n\nexport const DEFAULT_FETCH_CONFIG: MoveFetchConfig = {\n resourceChanges: false,\n allEvents: true,\n inputs: true\n}\n\nexport type IndexConfigure = Required<SuiBindOptions, 'startCheckpoint' | 'network'>\n\nexport function configure(options: SuiBindOptions): IndexConfigure {\n return {\n startCheckpoint: options.startCheckpoint || 0n,\n endCheckpoint: options.endCheckpoint,\n address: options.address === ALL_ADDRESS ? ALL_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 endCheckpoint?: 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 return proxyProcessor(this)\n }\n\n getChainId(): string {\n return this.config.network\n }\n\n protected onMoveEvent<T extends SuiEventInput = SuiEventInput>(\n handler: (event: T, ctx: SuiContext) => PromiseOrVoid,\n filter: EventFilter | EventFilter[],\n handlerOptions?: HandlerOptions<MoveFetchConfig, T>\n ): SuiBaseProcessor {\n let _filters: EventFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...handlerOptions })\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\n this.eventHandlers.push({\n handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'event is null')\n }\n const txn = JSON.parse(data.rawTransaction) as GrpcTypes.ExecutedTransaction\n\n const evt = JSON.parse(data.rawEvent) as SuiEventInput\n // gRPC events carry no sequence; index is resolved by the runtime.\n const idx = 0\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 decoded = await processor.coder.decodeEvent<T>(evt)\n await handler((decoded || evt) as T, ctx)\n\n return ctx.stopAndGetResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n partitionHandler: async (data: Data_SuiEvent): Promise<string | undefined> => {\n const p = handlerOptions?.partitionKey\n if (!p) return undefined\n if (typeof p === 'function') {\n const evt = JSON.parse(data.rawEvent) as SuiEventInput\n const decoded = await processor.coder.decodeEvent<any>(evt)\n return p((decoded || evt) as T)\n }\n return p\n }\n })\n return this\n }\n\n protected onEntryFunctionCall<T extends GrpcTypes.MoveCall = GrpcTypes.MoveCall>(\n handler: (call: T, ctx: SuiContext) => PromiseOrVoid,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n handlerOptions?: HandlerOptions<MoveFetchConfig, T>\n ): SuiBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...handlerOptions })\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 handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const tx = JSON.parse(data.rawTransaction) as GrpcTypes.ExecutedTransaction\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 = getMoveCalls(tx)\n const programmableTx = getProgrammableTransaction(tx)\n if (!programmableTx) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected getTransactionKind get empty')\n }\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 partitionHandler: async (data: Data_SuiCall): Promise<string | undefined> => {\n const p = handlerOptions?.partitionKey\n if (!p) return undefined\n if (typeof p === 'function') {\n const tx = JSON.parse(data.rawTransaction) as GrpcTypes.ExecutedTransaction\n const calls = getMoveCalls(tx)\n // For simplicity, use the first call for partitioning\n if (calls.length > 0) {\n return p(calls[0] as T)\n }\n return undefined\n }\n return p\n }\n })\n return this\n }\n\n onEvent(\n handler: (event: SuiEventInput, ctx: SuiContext) => void,\n handlerOptions?: HandlerOptions<MoveFetchConfig, SuiEventInput>\n ): this {\n this.onMoveEvent(handler, { type: '' }, handlerOptions)\n return this\n }\n\n onTransactionBlock(\n handler: (transaction: GrpcTypes.ExecutedTransaction, ctx: SuiContext) => PromiseOrVoid,\n filter?: TransactionFilter,\n handlerOptions?: HandlerOptions<MoveFetchConfig, GrpcTypes.ExecutedTransaction>\n ): this {\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...handlerOptions })\n\n const processor = this\n\n this.callHandlers.push({\n handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is null')\n }\n const tx = JSON.parse(data.rawTransaction) as GrpcTypes.ExecutedTransaction\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 partitionHandler: async (data: Data_SuiCall): Promise<string | undefined> => {\n const p = handlerOptions?.partitionKey\n if (!p) return undefined\n if (typeof p === 'function') {\n const tx = JSON.parse(data.rawTransaction) as GrpcTypes.ExecutedTransaction\n return p(tx)\n }\n return p\n }\n })\n return this\n }\n\n protected onObjectChange(\n handler: (changes: SuiObjectChange[], ctx: SuiObjectChangeContext) => PromiseOrVoid,\n type: string | 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 handlerName: getHandlerName(),\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.rawChanges.map((r) => JSON.parse(r)) 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(ALL_ADDRESS, options)\n }\n}\n\nexport class SuiGlobalProcessor extends SuiBaseProcessor {\n static bind(options: Omit<SuiBindOptions, 'address'>): SuiGlobalProcessor {\n return new SuiGlobalProcessor(ALL_ADDRESS, { ...options, address: ALL_ADDRESS })\n }\n onTransactionBlock(\n handler: (transaction: GrpcTypes.ExecutedTransaction, 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 // deprecated,, use object type processor\n public onObjectChange(\n handler: (changes: SuiObjectChange[], ctx: SuiObjectChangeContext) => void,\n type: string | string[]\n ): this {\n return super.onObjectChange(handler, type)\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import type { SuiClientTypes } from '@mysten/sui/client'\nimport type { GrpcTypes } from '@mysten/sui/grpc'\nimport { DecodedStruct } from '@typemove/move'\n\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\n// Decoder input/output types are now keyed on @mysten/sui/client's unified\n// SuiClientTypes shapes (which both jsonRpc and gRPC clients implement) plus\n// gRPC proto types for the transaction-side shapes that don't have a\n// transport-agnostic equivalent. No `@mysten/sui/jsonRpc` import remains.\nexport type TypedEventInstance<T> = DecodedStruct<SuiClientTypes.Event, T>\nexport type TypedSuiMoveObject<T> = DecodedStruct<SuiClientTypes.Object<{ json: true }>, T>\n\nexport type TypedFunctionPayload<T extends Array<any>> = GrpcTypes.MoveCall & {\n /**\n * decoded argument data using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n arguments_decoded: T\n}\n\n// Result wrapper for SuiGrpcClient.simulateTransaction return values. Replaces\n// the old TypedDevInspectResults that was tied to JSON-RPC's DevInspectResults.\n// The raw simulate response shape is intentionally widened to `any` here\n// because the underlying SDK types are heavily generic and we only need the\n// `commandResults` slice; we pass the original result through unchanged plus a\n// `results_decoded` field populated by `MoveCoder.decodeSimulateResult`.\nexport type TypedSimulateResults<T extends Array<any>> = {\n /**\n * Decoded return values using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n results_decoded?: T\n} & Record<string, any>\n","import { Transaction, TransactionArgument, TransactionObjectInput } from '@mysten/sui/transactions'\n\nexport function isTransactionArgument(value: any): boolean {\n if (typeof value !== 'object') return false\n if (value === null || value === undefined) return false\n\n return (\n value.$kind === 'GasCoin' || value.$kind === 'Result' || value.$kind === 'NestedResult' || value.$kind === 'Input'\n )\n}\n\nexport function transactionArgumentOrObject(\n value: TransactionObjectInput,\n transactionBlock: Transaction\n): TransactionArgument {\n // if (isTransactionArgument(value)) {\n // return value as TransactionArgument\n // }\n return transactionBlock.object(value)\n}\n\nexport function transactionArgumentOrPure(value: any, transactionBlock: Transaction): any {\n if (isTransactionArgument(value)) {\n return value\n }\n return typeof value == 'string' ? transactionBlock.pure.string(value) : transactionBlock.pure.u64(value)\n}\n\nexport function transactionArgumentOrPureString(\n value: TransactionArgument | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.string(value as string)\n}\n\nexport function transactionArgumentOrPureAddress(\n value: TransactionArgument | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.address(value as string)\n}\n\nexport function transactionArgumentOrPureU8(\n value: TransactionArgument | number,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u8(value as number)\n}\n\nexport function transactionArgumentOrPureU16(\n value: TransactionArgument | number,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u16(value as number)\n}\n\nexport function transactionArgumentOrPureU32(\n value: TransactionArgument | number,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u32(value as number)\n}\n\nexport function transactionArgumentOrPureU64(\n value: TransactionArgument | bigint | number | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u64(value as number)\n}\n\nexport function transactionArgumentOrPureU128(\n value: TransactionArgument | bigint | number | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u128(value as number)\n}\n\nexport function transactionArgumentOrPureU256(\n value: TransactionArgument | bigint | number | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u256(value as number)\n}\n\nexport function transactionArgumentOrPureBool(\n value: TransactionArgument | boolean,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.bool(value as boolean)\n}\n\n// TODO vector might be nested\nexport function transactionArgumentOrVec(value: any, transactionBlock: Transaction): any {\n if (isTransactionArgument(value)) {\n return value\n }\n return transactionBlock.makeMoveVec({\n elements: value.map((a: any) => transactionBlock.object(a))\n })\n}\n","import type { GrpcTypes } from '@mysten/sui/grpc'\nimport {\n accountTypeString,\n InternalMoveEnum,\n InternalMoveFunction,\n InternalMoveFunctionVisibility,\n InternalMoveModule,\n InternalMoveStruct,\n InternalMoveStructField,\n SPLITTER,\n TypeDescriptor\n} from '@typemove/move'\n\n// Re-exports for convenience: callers used to import named types from\n// '@mysten/sui/jsonRpc'; now they come from the gRPC proto namespace.\ntype Module = GrpcTypes.Module\ntype DatatypeDescriptor = GrpcTypes.DatatypeDescriptor\ntype FieldDescriptor = GrpcTypes.FieldDescriptor\ntype FunctionDescriptor = GrpcTypes.FunctionDescriptor\ntype OpenSignature = GrpcTypes.OpenSignature\ntype OpenSignatureBody = GrpcTypes.OpenSignatureBody\n\n// Proto enum constants kept as literals so we can compare against\n// the ordinals returned in the wire-decoded shape without importing\n// the namespaced enum at runtime.\nconst DATATYPE_KIND_STRUCT = 1\nconst DATATYPE_KIND_ENUM = 2\n\nconst VISIBILITY_PRIVATE = 1\nconst VISIBILITY_PUBLIC = 2\nconst VISIBILITY_FRIEND = 3\n\n// OpenSignatureBody.Type\nconst TYPE_ADDRESS = 1\nconst TYPE_BOOL = 2\nconst TYPE_U8 = 3\nconst TYPE_U16 = 4\nconst TYPE_U32 = 5\nconst TYPE_U64 = 6\nconst TYPE_U128 = 7\nconst TYPE_U256 = 8\nconst TYPE_VECTOR = 9\nconst TYPE_DATATYPE = 10\nconst TYPE_TYPE_PARAMETER = 11\n\nconst ABILITY_NAMES: Record<number, string> = {\n 1: 'Copy',\n 2: 'Drop',\n 3: 'Store',\n 4: 'Key'\n}\n\n// Convert a proto Module (from movePackageService.getPackage().package.modules[i])\n// into typemove's InternalMoveModule. `packageAddress` is needed because the\n// proto Module doesn't repeat the package id on every module entry.\nexport function toInternalModule(module: Module, packageAddress: string): InternalMoveModule {\n packageAddress = accountTypeString(packageAddress)\n const datatypes = module.datatypes ?? []\n const functions = module.functions ?? []\n\n const structs: InternalMoveStruct[] = datatypes.filter((d) => d.kind === DATATYPE_KIND_STRUCT).map(toInternalStruct)\n\n const enums: InternalMoveEnum[] = datatypes.filter((d) => d.kind === DATATYPE_KIND_ENUM).map(toInternalEnum)\n\n return {\n address: packageAddress,\n name: module.name ?? '',\n exposedFunctions: functions.map(toInternalFunction),\n structs,\n enums\n }\n}\n\nfunction toInternalFunction(func: FunctionDescriptor): InternalMoveFunction {\n let visibility: InternalMoveFunctionVisibility\n switch (func.visibility) {\n case VISIBILITY_PRIVATE:\n visibility = InternalMoveFunctionVisibility.PRIVATE\n break\n case VISIBILITY_PUBLIC:\n visibility = InternalMoveFunctionVisibility.PUBLIC\n break\n case VISIBILITY_FRIEND:\n visibility = InternalMoveFunctionVisibility.FRIEND\n break\n default:\n throw Error(`No visibility for function ${func.name}`)\n }\n return {\n typeParams: (func.typeParameters ?? []).map((p) => ({\n constraints: (p.constraints ?? []).map(abilityName)\n })),\n isEntry: func.isEntry ?? false,\n name: func.name ?? '',\n params: (func.parameters ?? []).map(toTypeDescriptorFromSignature),\n return: (func.returns ?? []).map(toTypeDescriptorFromSignature),\n visibility\n }\n}\n\nfunction toInternalStruct(d: DatatypeDescriptor): InternalMoveStruct {\n return {\n abilities: (d.abilities ?? []).map(abilityName),\n fields: (d.fields ?? []).map(toInternalField),\n typeParams: (d.typeParameters ?? []).map((p) => ({\n constraints: (p.constraints ?? []).map(abilityName)\n })),\n isNative: false,\n isEvent: false,\n name: d.name ?? ''\n }\n}\n\nfunction toInternalEnum(d: DatatypeDescriptor): InternalMoveEnum {\n const variants: { [key: string]: InternalMoveStructField[] } = {}\n for (const v of d.variants ?? []) {\n variants[v.name ?? ''] = (v.fields ?? []).map(toInternalField)\n }\n return {\n name: d.name ?? '',\n abilities: (d.abilities ?? []).map(abilityName),\n typeParams: (d.typeParameters ?? []).map((p) => ({\n constraints: (p.constraints ?? []).map(abilityName)\n })),\n variants\n }\n}\n\nfunction toInternalField(f: FieldDescriptor): InternalMoveStructField {\n if (!f.type) {\n throw Error(`Field ${f.name} has no type`)\n }\n return {\n name: f.name ?? '',\n type: toTypeDescriptorFromBody(f.type)\n }\n}\n\n// OpenSignature wraps an OpenSignatureBody with an optional reference marker.\n// Used for function params and returns.\nfunction toTypeDescriptorFromSignature(sig: OpenSignature): TypeDescriptor {\n if (!sig.body) {\n throw Error('OpenSignature has no body')\n }\n const desc = toTypeDescriptorFromBody(sig.body)\n // Reference.IMMUTABLE=1, MUTABLE=2\n if (sig.reference === 1) {\n desc.reference = true\n } else if (sig.reference === 2) {\n desc.reference = true\n desc.mutable = true\n }\n return desc\n}\n\nfunction toTypeDescriptorFromBody(body: OpenSignatureBody): TypeDescriptor {\n switch (body.type) {\n case TYPE_ADDRESS:\n return new TypeDescriptor('Address')\n case TYPE_BOOL:\n return new TypeDescriptor('Bool')\n case TYPE_U8:\n return new TypeDescriptor('U8')\n case TYPE_U16:\n return new TypeDescriptor('U16')\n case TYPE_U32:\n return new TypeDescriptor('U32')\n case TYPE_U64:\n return new TypeDescriptor('U64')\n case TYPE_U128:\n return new TypeDescriptor('U128')\n case TYPE_U256:\n return new TypeDescriptor('U256')\n case TYPE_VECTOR: {\n const inner = body.typeParameterInstantiation?.[0]\n if (!inner) throw Error('Vector OpenSignatureBody missing type parameter')\n return new TypeDescriptor('Vector', [toTypeDescriptorFromBody(inner)])\n }\n case TYPE_DATATYPE: {\n // gRPC emits typeName as `<defining_id>::<module>::<name>` with the\n // address in canonical long form (0x0000...0002). Normalize to the\n // short form (0x2) so module-lookup keys match what's loaded into\n // MoveCoder by short-form aware code paths.\n const raw = body.typeName ?? ''\n const parts = raw.split(SPLITTER)\n const qname = parts.length === 3 ? [accountTypeString(parts[0]), parts[1], parts[2]].join(SPLITTER) : raw\n const args = (body.typeParameterInstantiation ?? []).map(toTypeDescriptorFromBody)\n return new TypeDescriptor(qname, args)\n }\n case TYPE_TYPE_PARAMETER:\n return new TypeDescriptor('T' + (body.typeParameter ?? 0))\n default:\n throw new Error(`Unexpected OpenSignatureBody type: ${body.type}`)\n }\n}\n\nfunction abilityName(a: number): string {\n const n = ABILITY_NAMES[a]\n if (!n) throw Error(`Unknown Ability value: ${a}`)\n return n\n}\n","import { toInternalModule } from './to-internal.js'\nimport {\n InternalMoveModule,\n InternalMoveStruct,\n ChainAdapter,\n moduleQname,\n SPLITTER,\n TypeDescriptor\n} from '@typemove/move'\n\nimport type { GrpcTypes } from '@mysten/sui/grpc'\nimport { SuiGrpcClient } from '@mysten/sui/grpc'\nimport type { SuiClientTypes } from '@mysten/sui/client'\n\n// Decoder-input types now use @mysten/sui/client's unified SuiClientTypes —\n// the same shapes returned by SuiGrpcClient (and that the GraphQL/JSON-RPC\n// clients implement). Per the SDK's own warnings, the `.json` field's exact\n// field names may vary between transports for some payloads; downstream code\n// reading `getData` should treat it as opaque object data.\nexport type SuiEventInput = SuiClientTypes.Event\nexport type SuiMoveObjectInput = SuiClientTypes.Object<{ json: true }>\n\n// Adapter ModuleType is the proto Module plus the package address (which the\n// proto doesn't carry per-entry — only the wrapping Package has storageId).\nexport interface ModuleWithAddress {\n address: string\n module: GrpcTypes.Module\n}\n\nexport class SuiChainAdapter extends ChainAdapter<ModuleWithAddress, SuiEventInput | SuiMoveObjectInput> {\n client: SuiGrpcClient\n\n constructor(client: SuiGrpcClient) {\n super()\n this.client = client\n }\n\n async getChainId(): Promise<string> {\n const { chainIdentifier } = await this.client.core.getChainIdentifier()\n return chainIdentifier ?? ''\n }\n\n async fetchModule(account: string, module: string): Promise<ModuleWithAddress> {\n // gRPC has no single-module-fetch RPC; pull the whole package and filter.\n const modules = await this.fetchModules(account)\n const m = modules.find((x) => x.module.name === module)\n if (!m) {\n throw Error(`Module ${module} not found in package ${account}`)\n }\n return m\n }\n\n async fetchModules(account: string): Promise<ModuleWithAddress[]> {\n const { response } = await this.client.movePackageService.getPackage({ packageId: account })\n const pkg = response.package\n if (!pkg) {\n throw Error(`No package returned for ${account}`)\n }\n // gRPC returns the canonical long-form storage id (0x0000...0002); the rest\n // of typemove keys system packages by their short form (0x2). Preserve the\n // caller-supplied address so framework lookups and short-form import paths\n // (`@typemove/sui/builtin/0x2`) keep working.\n return (pkg.modules ?? []).map((module) => ({ address: account, module }))\n }\n\n getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[] {\n return params\n }\n\n toInternalModules(modules: ModuleWithAddress[]): InternalMoveModule[] {\n return modules.map(({ address, module }) => toInternalModule(module, address))\n }\n\n getAllEventStructs(modules: InternalMoveModule[]): Map<string, InternalMoveStruct> {\n const eventMap = new Map<string, InternalMoveStruct>()\n for (const module of modules) {\n const qname = moduleQname(module)\n for (const struct of module.structs) {\n const abilities = new Set(struct.abilities)\n if (abilities.has('Drop') && abilities.has('Copy')) {\n eventMap.set(qname + SPLITTER + struct.name, struct)\n }\n }\n }\n return eventMap\n }\n\n getType(base: SuiEventInput | SuiMoveObjectInput): string {\n // Unified SuiClientTypes: Event has `eventType`, Object has `type`.\n const v = base as any\n return v.eventType ?? v.type ?? ''\n }\n\n getData(val: SuiEventInput | SuiMoveObjectInput) {\n if (val === undefined) {\n throw Error('val is undefined')\n }\n // Pass through primitives (e.g. a UID flattened to a bare string) — the\n // decoder's per-type case handlers know how to interpret them.\n if (val === null || typeof val !== 'object') {\n return val as any\n }\n const v = val as any\n // Unified SuiClientTypes shapes: Event.json / Object<{json:true}>.json\n // carries the decoded Move struct content. Anything else (a nested\n // already-flat struct value passed in during recursion) is its own data.\n if (v.json != null) {\n return v.json as any\n }\n return val as any\n }\n}\n\nexport function inferNetworkFromUrl(url: string): string {\n if (url.includes('mainnet')) return 'mainnet'\n if (url.includes('testnet')) return 'testnet'\n if (url.includes('devnet')) return 'devnet'\n if (url.includes('localnet') || url.includes('127.0.0.1') || url.includes('localhost')) return 'localnet'\n return 'custom'\n}\n\n// gRPC counterpart of @mysten/sui/jsonRpc's `getJsonRpcFullnodeUrl`. The SDK\n// doesn't ship one under /grpc — Sui's gRPC-Web endpoint is exposed on the\n// same host as JSON-RPC over standard HTTPS, so we mirror the JSON-RPC list\n// (sans the explicit :443 since the transport speaks HTTPS by default).\nexport function getGrpcFullnodeUrl(network: 'mainnet' | 'testnet' | 'devnet' | 'localnet'): string {\n switch (network) {\n case 'mainnet':\n return 'https://fullnode.mainnet.sui.io'\n case 'testnet':\n return 'https://fullnode.testnet.sui.io'\n case 'devnet':\n return 'https://fullnode.devnet.sui.io'\n case 'localnet':\n return 'http://127.0.0.1:9000'\n }\n}\n\nexport function getGrpcClient(endpoint: string): SuiGrpcClient {\n const network = inferNetworkFromUrl(endpoint) as any\n return new SuiGrpcClient({ network, baseUrl: endpoint })\n}\n","import { TypedSimulateResults, TypedEventInstance, TypedFunctionPayload } from './models.js'\nimport {\n AbstractMoveCoder,\n ANY_TYPE,\n DecodedStruct,\n accountTypeString,\n parseMoveType,\n SPLITTER,\n TypeDescriptor,\n InternalMoveModule\n} from '@typemove/move'\nimport { SuiGrpcClient } from '@mysten/sui/grpc'\nimport type { GrpcTypes } from '@mysten/sui/grpc'\nimport {\n SuiChainAdapter,\n ModuleWithAddress,\n getGrpcClient,\n getGrpcFullnodeUrl,\n SuiEventInput,\n SuiMoveObjectInput\n} from './sui-chain-adapter.js'\nimport { toInternalModule } from './to-internal.js'\nimport { dynamic_field } from './builtin/0x2.js'\nimport { BcsType, bcs } from '@mysten/sui/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/utils'\n\nexport class MoveCoder extends AbstractMoveCoder<ModuleWithAddress, SuiEventInput | SuiMoveObjectInput> {\n constructor(client: SuiGrpcClient) {\n super(new SuiChainAdapter(client))\n }\n\n load(entry: ModuleWithAddress, address: string): InternalMoveModule {\n address = accountTypeString(address)\n const { address: moduleAddress, module } = entry\n let m = this.moduleMapping.get(moduleAddress + '::' + module.name)\n const mDeclared = this.moduleMapping.get(address + '::' + module.name)\n if (m && mDeclared) {\n return m\n }\n this.accounts.add(moduleAddress)\n m = toInternalModule(module, moduleAddress)\n this.loadInternal(m, address)\n return m\n }\n\n protected async decode(data: any, type: TypeDescriptor): Promise<any> {\n // UID handled before the switch to avoid the existing fall-through chain\n // (case '0x2::url::Url' / '0x2::coin::Coin' bodies fire on non-string\n // inputs and corrupt UID output). gRPC's unified Object.json flattens UID\n // to a bare address string — re-wrap to `{ id: '0x<32-byte>' }` so\n // downstream `.id.id`-style accessors keep working. The BCS-shaped path\n // (`{ id: { bytes: Uint8Array(32) } }`) is delegated to super.decode,\n // which then hits the inner ID case.\n if (type.qname === '0x2::object::UID') {\n if (typeof data === 'string') {\n return { id: normalizeSuiObjectId(data) } as any\n }\n return super.decode(data, type)\n }\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: SuiEventInput): Promise<TypedEventInstance<T> | undefined> {\n return this.decodedStruct(event)\n }\n filterAndDecodeEvents<T>(\n type: TypeDescriptor<T> | string,\n resources: SuiEventInput[]\n ): 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: SuiMoveObjectInput[],\n keyType: TypeDescriptor<T1> = ANY_TYPE,\n valueType: TypeDescriptor<T2> = ANY_TYPE\n ): Promise<dynamic_field.Field<T1, T2>[]> {\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: SuiMoveObjectInput[]\n ): Promise<DecodedStruct<SuiMoveObjectInput, T>[]> {\n return this.filterAndDecodeStruct(type, objects)\n }\n\n // Decodes a parsed Move call payload against the loaded module ABI.\n // Inputs are gRPC `Input[]`: kind=PURE carries a Uint8Array of BCS bytes\n // that we decode using the corresponding parameter's Move type;\n // object inputs (IMMUTABLE_OR_OWNED / SHARED / receiving) are surfaced as\n // undefined since their on-chain values aren't part of the payload.\n async decodeFunctionPayload(payload: GrpcTypes.MoveCall, inputs: GrpcTypes.Input[]): Promise<any> {\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: any[] = []\n for (const value of payload.arguments ?? []) {\n const av = value as any\n const idx: number | undefined = av?.input\n if (idx == null || idx < 0 || idx >= inputs.length) {\n args.push(undefined)\n continue\n }\n const arg = inputs[idx]\n if (arg?.pure) {\n const paramType: TypeDescriptor | undefined = params[args.length]\n try {\n const bytes = arg.pure instanceof Uint8Array ? arg.pure : new Uint8Array(arg.pure)\n const decoded: any = paramType ? await this.decodeBCS(paramType, bytes) : bytes\n args.push(decoded)\n } catch {\n args.push(undefined)\n }\n } else {\n // Object inputs (and unknown kinds) — value isn't carried in the payload.\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 bcsRegistered = new Set<string>()\n private bcsRegistry = new Map<string, BcsType<any>>()\n\n private async getBCSTypeWithArgs(type: TypeDescriptor, args: BcsType<any>[] = []): Promise<BcsType<any>> {\n const qname = type.qname\n const sig = type.getNormalizedSignature()\n const cached = this.bcsRegistry.get(sig)\n if (cached) {\n return cached\n }\n const lowerQname = qname.toLowerCase()\n switch (lowerQname) {\n case 'u8':\n case 'u16':\n case 'u32':\n case 'u64':\n case 'u128':\n case 'u256':\n case 'bool':\n return bcs[lowerQname]()\n case 'address':\n return bcs.Address\n case 'vector':\n return bcs.vector(args[0])\n default:\n if (!qname.includes('::')) {\n throw `Unimplemented builtin type ${qname}`\n }\n }\n let moveStruct\n try {\n moveStruct = await this.getMoveStruct(qname)\n } catch (e) {\n console.error('Invalid move address', qname)\n throw e\n }\n const structDef: Record<string, any> = {}\n for (const field of moveStruct.fields) {\n if (field.type.qname.startsWith('T') && args.length) {\n const index = +field.type.qname.slice(1)\n structDef[field.name] = args[index]\n } else if (field.type.typeArgs.length && args.length) {\n structDef[field.name] = await this.getBCSTypeWithArgs(field.type, args)\n } else {\n structDef[field.name] = await this.getBCSType(field.type)\n }\n }\n return bcs.struct(qname, structDef)\n }\n\n async getBCSType(type: TypeDescriptor): Promise<BcsType<any>> {\n const args = await Promise.all(type.typeArgs.map((x) => this.getBCSType(x)))\n const bcsType = await this.getBCSTypeWithArgs(type, args)\n this.bcsRegistry.set(type.getNormalizedSignature(), bcsType)\n return bcsType\n }\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 const bcsType = await this.getBCSType(type)\n this.bcsRegistry.set(type.getNormalizedSignature(), bcsType)\n }\n\n async decodeBCS(type: TypeDescriptor, data: Uint8Array | string, encoding?: Encoding): Promise<any> {\n await this.registerBCSTypes(type)\n if (typeof data == 'string') {\n const buf = Buffer.from(data, encoding as any)\n data = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n }\n const bcsType = this.bcsRegistry.get(type.getNormalizedSignature())\n return bcsType?.parse(data)\n }\n\n // Replaces decodeDevInspectResult. gRPC simulateTransaction returns\n // `commandResults: CommandResult[]` where each CommandResult.returnValues is\n // `CommandOutput[]` of raw `{ bcs: Uint8Array }` — there is no per-return\n // type string the way devInspect carried one. The caller must therefore pass\n // the Move return-type signatures explicitly (codegen emits them next to\n // each generated view helper).\n async decodeSimulateResult<T extends any[]>(\n simulateRes: any,\n returnTypeSignatures: string[],\n typeArguments?: (string | TypeDescriptor)[]\n ): Promise<TypedSimulateResults<T>> {\n // Generic view helpers embed return signatures like \"T0\" / \"vector<T1>\"\n // at codegen time, but the caller supplies concrete type arguments only\n // at runtime. Substitute them in before BCS decoding — otherwise the BCS\n // type registry sees the bare type-parameter qname and rejects it as an\n // unimplemented builtin.\n const ctx = new Map<string, TypeDescriptor>()\n if (typeArguments && typeArguments.length > 0) {\n typeArguments.forEach((t, i) => {\n ctx.set('T' + i, typeof t === 'string' ? parseMoveType(t) : t)\n })\n }\n\n const returnValues: any[] = []\n const commandResults = simulateRes?.commandResults\n if (Array.isArray(commandResults)) {\n let typeIdx = 0\n for (const r of commandResults) {\n const rvs = r?.returnValues\n if (Array.isArray(rvs) && rvs.length > 0) {\n for (const rv of rvs) {\n const sig = returnTypeSignatures[typeIdx++]\n if (!sig) {\n returnValues.push(null)\n continue\n }\n let type = parseMoveType(sig)\n if (ctx.size > 0) {\n type = type.applyTypeArgs(ctx)\n }\n const bcsBytes = rv?.bcs instanceof Uint8Array ? rv.bcs : new Uint8Array(rv?.bcs ?? [])\n const bcsDecoded = await this.decodeBCS(type, bcsBytes)\n const decoded = await this.decodeType(bcsDecoded, type)\n returnValues.push(decoded)\n }\n } else {\n returnValues.push(null)\n }\n }\n }\n return { ...simulateRes, results_decoded: returnValues as any }\n }\n}\n\nconst DEFAULT_ENDPOINT = getGrpcFullnodeUrl('mainnet')\nconst 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(getGrpcClient(endpoint))\n CODER_MAP.set(endpoint, coder)\n }\n return coder\n}\n\nconst PROVIDER_CODER_MAP = new Map<SuiGrpcClient, MoveCoder>()\n\nlet DEFAULT_CHAIN_ID: string | undefined\n\nexport async function getMoveCoder(client: SuiGrpcClient): Promise<MoveCoder> {\n let coder = PROVIDER_CODER_MAP.get(client)\n if (!coder) {\n coder = new MoveCoder(client)\n const { chainIdentifier } = await client.core.getChainIdentifier()\n const defaultCoder = defaultMoveCoder()\n if (!DEFAULT_CHAIN_ID) {\n DEFAULT_CHAIN_ID = await defaultCoder.adapter.getChainId()\n }\n if (chainIdentifier === 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 // @typemove/sui v2 MoveCoder is gRPC-backed.\n coder = new MoveCoder(getClient(network))\n CODERS.set(network, coder)\n }\n\n return coder\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { RecordMetaData } from '@sentio/protos'\nimport { type Labels, normalizeLabels } from '../index.js'\nimport { getClient, SuiNetwork } from './network.js'\nimport type { GrpcTypes, SuiGrpcClient } from '@mysten/sui/grpc'\nimport type { ModuleWithAddress, SuiEventInput, SuiMoveObjectInput } from '@typemove/sui'\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, ModuleWithAddress, SuiEventInput | SuiMoveObjectInput> {\n moduleName: string\n timestamp: Date\n checkpoint: bigint\n transaction: GrpcTypes.ExecutedTransaction\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: GrpcTypes.ExecutedTransaction,\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(): SuiGrpcClient {\n return getClient(this.network)\n }\n}\n\nexport class SuiObjectChangeContext extends MoveContext<\n SuiNetwork,\n ModuleWithAddress,\n SuiEventInput | SuiMoveObjectInput\n> {\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(): SuiGrpcClient {\n return getClient(this.network)\n }\n}\n\n// TODO address handler should use this context\nexport class SuiAddressContext extends MoveAccountContext<\n SuiNetwork,\n ModuleWithAddress,\n SuiEventInput | SuiMoveObjectInput\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(): SuiGrpcClient {\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 objectVersion: bigint\n\n constructor(\n network: SuiNetwork,\n objectId: string,\n objectVersion: bigint,\n checkpoint: bigint,\n timestamp: Date,\n baseLabels: Labels | undefined\n ) {\n super(network, objectId, checkpoint, timestamp, baseLabels)\n this.objectId = objectId\n this.objectVersion = objectVersion\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import type { GrpcTypes } from '@mysten/sui/grpc'\nimport { accountTypeString } from '@typemove/move'\n\nexport function getProgrammableTransaction(\n txBlock: GrpcTypes.ExecutedTransaction\n): GrpcTypes.ProgrammableTransaction | undefined {\n const data = txBlock.transaction?.kind?.data\n return data?.oneofKind === 'programmableTransaction' ? data.programmableTransaction : undefined\n}\n\nexport function getMoveCalls(txBlock: GrpcTypes.ExecutedTransaction): GrpcTypes.MoveCall[] {\n const programmableTx = getProgrammableTransaction(txBlock)\n if (!programmableTx) {\n return []\n }\n\n return programmableTx.commands.flatMap((cmd) => {\n if (cmd.command.oneofKind === 'moveCall') {\n const call = cmd.command.moveCall\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(\"node:process\").then((p) => p.stdout.write(\"\"));","import {\n Data_SuiCall,\n Data_SuiObject,\n Data_SuiObjectChange,\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, SuiObjectChangeContext, SuiObjectContext } from './context.js'\nimport type { SuiObjectChange } from '@mysten/sui/jsonRpc'\nimport type { GrpcTypes } from '@mysten/sui/grpc'\nimport type { SuiMoveObjectInput } from '@typemove/sui'\nimport { ALL_ADDRESS, PromiseOrVoid } from '../core/index.js'\nimport { configure, DEFAULT_FETCH_CONFIG, IndexConfigure, SuiBindOptions } from './sui-processor.js'\nimport { CallHandler, TransactionFilter, accountTypeString, ObjectChangeHandler } from '../move/index.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { TypeDescriptor } from '@typemove/move'\nimport { TypedSuiMoveObject } from './models.js'\nimport { getHandlerName, proxyProcessor } from '../utils/metrics.js'\n\nexport interface SuiObjectBindOptions {\n objectId: string\n network?: SuiNetwork\n startCheckpoint?: bigint\n endCheckpoint?: bigint\n baseLabels?: { [key: string]: string }\n}\n\nexport interface SuiObjectTypeBindOptions<T> {\n objectType: TypeDescriptor<T>\n network?: SuiNetwork\n startCheckpoint?: bigint\n endCheckpoint?: 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 handlerName: string\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 templateId: number | undefined\n\n objectHandlers: ObjectHandler[] = []\n objectChangeHandlers: ObjectChangeHandler<Data_SuiObjectChange>[] = []\n\n // static bind(options: SuiObjectsBindOptions): SuiBaseObjectsProcessor<any> {\n // return new SuiBaseObjectsProcessor(options)\n // }\n\n protected constructor(options: SuiInternalObjectsBindOptions) {\n if (options.ownerType === MoveOwnerType.TYPE) {\n this.config = {\n startCheckpoint: options.startCheckpoint || 0n,\n endCheckpoint: options.endCheckpoint,\n address: options.address === '*' ? '*' : accountTypeString(options.address),\n network: options.network || SuiNetwork.MAIN_NET,\n baseLabels: options.baseLabels\n }\n } else {\n this.config = configure(options)\n }\n this.ownerType = options.ownerType\n SuiAccountProcessorState.INSTANCE.addValue(this)\n\n return proxyProcessor(this)\n }\n\n getChainId(): string {\n return this.config.network\n }\n\n // protected abstract transformObjects(objects: SuiMoveObjectInput[]): SuiMoveObjectInput[]\n\n protected abstract doHandle(handler: HandlerType, data: Data_SuiObject, ctx: SuiObjectContext): Promise<any>\n\n public onInterval(\n handler: HandlerType, //(resources: SuiMoveObjectInput[], ctx: SuiObjectsContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n checkpointInterval: HandleInterval | undefined,\n type: string | undefined,\n fetchConfig: Partial<MoveAccountFetchConfig> | undefined,\n handlerName = getHandlerName()\n ): this {\n const processor = this\n this.objectHandlers.push({\n handlerName,\n handler: async function (data) {\n const ctx = new SuiObjectContext(\n processor.config.network,\n data.objectId,\n data.objectVersion,\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\nabstract class SuiBaseObjectOrAddressProcessorInternal<\n HandlerType\n> extends SuiBaseObjectOrAddressProcessor<HandlerType> {\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 SuiBaseObjectOrAddressProcessorInternal<\n (objects: SuiMoveObjectInput[], 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 async doHandle(\n handler: (objects: SuiMoveObjectInput[], ctx: SuiObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ) {\n return handler(data.rawObjects.map((o) => JSON.parse(o)) as SuiMoveObjectInput[], ctx)\n }\n\n onTransactionBlock(\n handler: (transaction: GrpcTypes.ExecutedTransaction, ctx: SuiContext) => PromiseOrVoid,\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 handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is null')\n }\n const tx = JSON.parse(data.rawTransaction) as GrpcTypes.ExecutedTransaction\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 SuiBaseObjectOrAddressProcessorInternal<\n (self: SuiMoveObjectInput, dynamicFieldObjects: SuiMoveObjectInput[], 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 endCheckpoint: options.endCheckpoint,\n ownerType: MoveOwnerType.OBJECT,\n baseLabels: options.baseLabels\n })\n }\n\n protected async doHandle(\n handler: (\n self: SuiMoveObjectInput,\n dynamicFieldObjects: SuiMoveObjectInput[],\n ctx: SuiObjectContext\n ) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ) {\n if (!data.rawSelf) {\n console.log(`Sui object not existed in ${ctx.checkpoint}, please specific a start time`)\n return\n }\n return handler(\n JSON.parse(data.rawSelf) as SuiMoveObjectInput,\n data.rawObjects.map((o) => JSON.parse(o)) as SuiMoveObjectInput[],\n ctx\n )\n }\n}\n\nexport class SuiObjectTypeProcessor<T> extends SuiBaseObjectOrAddressProcessor<\n (self: TypedSuiMoveObject<T>, dynamicFieldObjects: SuiMoveObjectInput[], ctx: SuiObjectContext) => PromiseOrVoid\n> {\n objectType: TypeDescriptor<T>\n\n static bind<T>(options: SuiObjectTypeBindOptions<T>): SuiObjectTypeProcessor<T> {\n const processor = new SuiObjectTypeProcessor<T>({\n address: ALL_ADDRESS, // current only support on all address\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n endCheckpoint: options.endCheckpoint,\n ownerType: MoveOwnerType.TYPE,\n baseLabels: options.baseLabels\n })\n processor.objectType = options.objectType\n return processor\n }\n\n protected async doHandle(\n handler: (\n self: TypedSuiMoveObject<T>,\n dynamicFieldObjects: SuiMoveObjectInput[],\n ctx: SuiObjectContext\n ) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ) {\n if (!data.rawSelf) {\n console.log(`Sui object not existed in ${ctx.checkpoint}, please specific a start time`)\n return\n }\n const object = await ctx.coder.filterAndDecodeObjects(this.objectType, [\n JSON.parse(data.rawSelf) as SuiMoveObjectInput\n ])\n return handler(object[0], data.rawObjects.map((o) => JSON.parse(o)) as SuiMoveObjectInput[], ctx)\n }\n\n public onObjectChange(handler: (changes: SuiObjectChange[], ctx: SuiObjectChangeContext) => PromiseOrVoid): 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 handlerName: getHandlerName(),\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.rawChanges.map((r) => JSON.parse(r)) as SuiObjectChange[], ctx)\n return ctx.stopAndGetResult()\n },\n type: [this.objectType.getSignature()]\n })\n\n return this\n }\n\n public onTimeInterval(\n handler: (\n self: TypedSuiMoveObject<T>,\n dynamicFieldObjects: SuiMoveObjectInput[],\n ctx: SuiObjectContext\n ) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes\n },\n undefined,\n this.objectType.getSignature(),\n fetchConfig\n )\n }\n\n public onCheckpointInterval(\n handler: (\n self: TypedSuiMoveObject<T>,\n dynamicFieldObjects: SuiMoveObjectInput[],\n ctx: SuiObjectContext\n ) => PromiseOrVoid,\n checkpointInterval = 100000,\n backfillCheckpointInterval = 400000,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: checkpointInterval, backfillInterval: backfillCheckpointInterval },\n this.objectType.qname,\n fetchConfig\n )\n }\n}\n\nexport class SuiWrappedObjectProcessor extends SuiBaseObjectOrAddressProcessorInternal<\n (dynamicFieldObjects: SuiMoveObjectInput[], 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 endCheckpoint: options.endCheckpoint,\n ownerType: MoveOwnerType.WRAPPED_OBJECT,\n baseLabels: options.baseLabels\n })\n }\n\n protected async doHandle(\n handler: (dynamicFieldObjects: SuiMoveObjectInput[], ctx: SuiObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: SuiObjectContext\n ) {\n return handler(data.rawObjects.map((o) => JSON.parse(o)) as SuiMoveObjectInput[], ctx)\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { HandleInterval, MoveAccountFetchConfig, MoveFetchConfig, TemplateInstance } from '@sentio/protos'\nimport { ListStateStorage, processMetrics } from '@sentio/runtime'\nimport { SuiAddressContext, SuiContext, SuiObjectContext } from './context.js'\nimport type { GrpcTypes } from '@mysten/sui/grpc'\nimport type { SuiMoveObjectInput } from '@typemove/sui'\nimport { PromiseOrVoid } from '../core/index.js'\nimport {\n DEFAULT_ACCOUNT_FETCH_CONFIG,\n SuiAccountProcessorState,\n SuiAddressProcessor,\n SuiBaseObjectOrAddressProcessor,\n SuiObjectBindOptions,\n SuiObjectProcessor,\n SuiWrappedObjectProcessor\n} from './sui-object-processor.js'\nimport { SuiBindOptions } from './sui-processor.js'\nimport { accountAddressString, TransactionFilter } from '../move/index.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { getHandlerName, proxyProcessor } from '../utils/metrics.js'\n\nclass ObjectHandler<HandlerType> {\n type?: string\n checkpointInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handlerName: string\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 instances = new Set<string>()\n\n constructor() {\n this.id = SuiAccountProcessorTemplateState.INSTANCE.getValues().length\n SuiAccountProcessorTemplateState.INSTANCE.addValue(this)\n return proxyProcessor(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 let id = (options as SuiObjectBindOptions).objectId || (options as SuiBindOptions).address\n\n if (id === '*') {\n throw new ServerError(Status.INVALID_ARGUMENT, \"can't bind template instance with *\")\n }\n id = accountAddressString(id)\n\n const instance: TemplateInstance = {\n templateId: this.id,\n contract: {\n name: '',\n chainId: options.network,\n address: id,\n abi: ''\n },\n startBlock: options.startCheckpoint || 0n,\n endBlock: options.endCheckpoint || 0n,\n baseLabels: options.baseLabels\n }\n\n ctx.sendTemplateInstance(instance)\n\n ctx.update({\n states: {\n configUpdated: true\n }\n })\n\n processMetrics.processor_template_instance_count.add(1, {\n chain_id: options.network,\n template: this.constructor.name\n })\n }\n\n startInstance(options: OptionType, ctx: SuiContext): void {\n options.network = options.network || ctx.network\n options.startCheckpoint = options.startCheckpoint || ctx.checkpoint\n let id = (options as SuiObjectBindOptions).objectId || (options as SuiBindOptions).address\n\n if (id === '*') {\n throw new ServerError(Status.INVALID_ARGUMENT, \"can't bind template instance with *\")\n }\n id = accountAddressString(id)\n\n const sig = [options.network, id].join('_')\n if (this.instances.has(sig)) {\n console.debug(`Same object id can be bind to one template only once, ignore duplicate bind: ${sig}`)\n return\n }\n this.instances.add(sig)\n\n const processor = this.createProcessor(options)\n for (const h of this.objectHandlers) {\n processor.onInterval(\n h.handler,\n h.timeIntervalInMinutes,\n h.checkpointInterval,\n h.type,\n h.fetchConfig,\n h.handlerName\n )\n }\n console.log(`successfully bind template ${sig}`)\n }\n\n unbind(options: OptionType, ctx: SuiContext): void {\n options.network = options.network || ctx.network\n options.startCheckpoint = options.startCheckpoint || ctx.checkpoint\n let id = (options as SuiObjectBindOptions).objectId || (options as SuiBindOptions).address\n\n if (id === '*') {\n throw new ServerError(Status.INVALID_ARGUMENT, \"can't delete template instance bind with *\")\n }\n id = accountAddressString(id)\n\n const sig = [options.network, id].join('_')\n if (!this.instances.has(sig)) {\n console.log(`the template instance ${sig} not existed or already unbind`)\n return\n }\n this.instances.delete(sig)\n\n const oldProcessors = SuiAccountProcessorState.INSTANCE.unregister()\n let deleted = 0\n for (const processor of oldProcessors) {\n if (processor.templateId === this.id) {\n if (processor.config.network == options.network && processor.config.address === id) {\n deleted++\n continue\n }\n }\n SuiAccountProcessorState.INSTANCE.addValue(processor)\n }\n\n if (deleted !== 1) {\n throw new ServerError(\n Status.INVALID_ARGUMENT,\n `Failed to delete processor for template ${this.id}, ${sig}. deleted ${deleted} times`\n )\n }\n\n console.log(`successfully unbind template ${sig}`)\n\n ctx.update({\n states: {\n configUpdated: true\n }\n })\n\n ctx.sendTemplateInstance(\n {\n templateId: this.id,\n contract: {\n name: '',\n chainId: options.network,\n address: id,\n abi: ''\n },\n startBlock: options.startCheckpoint || 0n,\n endBlock: options.endCheckpoint || 0n,\n baseLabels: options.baseLabels\n },\n true\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 handlerName: getHandlerName(),\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: GrpcTypes.ExecutedTransaction, ctx: SuiContext) => void\n filter?: TransactionFilter\n fetchConfig?: Partial<MoveFetchConfig>\n}\n\nexport class SuiAddressProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<\n (objects: SuiMoveObjectInput[], 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 p.templateId = this.id\n return p\n }\n\n onTransactionBlock(\n handler: (transaction: GrpcTypes.ExecutedTransaction, 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: SuiMoveObjectInput, dynamicFieldObjects: SuiMoveObjectInput[], ctx: SuiObjectContext) => PromiseOrVoid,\n SuiObjectBindOptions,\n SuiObjectProcessor\n> {\n createProcessor(options: SuiObjectBindOptions): SuiObjectProcessor {\n const p = SuiObjectProcessor.bind(options)\n p.templateId = this.id\n return p\n }\n}\n\nexport class SuiWrappedObjectProcessorTemplate extends SuiObjectOrAddressProcessorTemplate<\n (dynamicFieldObjects: SuiMoveObjectInput[], ctx: SuiObjectContext) => PromiseOrVoid,\n SuiObjectBindOptions,\n SuiWrappedObjectProcessor\n> {\n createProcessor(options: SuiObjectBindOptions): SuiWrappedObjectProcessor {\n const p = SuiWrappedObjectProcessor.bind(options)\n p.templateId = this.id\n return p\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import type { GrpcTypes } from '@mysten/sui/grpc'\nimport type { SuiEventInput, SuiMoveObjectInput } from '@typemove/sui'\nimport { DecodedStruct } from '@typemove/move'\n\nexport type TypedEventInstance<T> = DecodedStruct<SuiEventInput, T>\nexport type TypedSuiMoveObject<T> = DecodedStruct<SuiMoveObjectInput, T>\n\nexport type TypedFunctionPayload<T extends Array<any>> = GrpcTypes.MoveCall & {\n /**\n * decoded argument data using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n arguments_decoded: T\n}\n\nexport type { PartitionHandler, HandlerOptions } from '../core/index.js'\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { errorString, mergeProcessResults, Plugin, PluginManager } from '@sentio/runtime'\nimport {\n DataBinding,\n HandlerType,\n InitResponse,\n ProcessConfigResponse,\n ProcessResult,\n ProcessStreamResponse_Partitions,\n StartRequest\n} from '@sentio/protos'\n\nimport { ServerError, Status } from 'nice-grpc'\nimport { PartitionHandlerManager } from '../core/index.js'\nimport { HandlerRegister } from '../core/handler-register.js'\n\nimport { SuiChainId } from '@sentio/chain'\nimport { SuiContext } from './context.js'\nimport { SuiPluginPart } from './sui-plugin-part.js'\nimport { IotaPluginPart } from '../iota/iota-plugin-part.js'\n\nexport class SuiPlugin extends Plugin {\n name: string = 'SuiPlugin'\n handlerRegister = new HandlerRegister()\n partitionManager = new PartitionHandlerManager()\n\n suiPart = new SuiPluginPart(this.handlerRegister, this.partitionManager)\n iotaPart = new IotaPluginPart(this.handlerRegister, this.partitionManager)\n\n async start(request: StartRequest): Promise<void> {\n await this.suiPart.start(request)\n await this.iotaPart.start(request)\n }\n\n async init(config: InitResponse) {\n await this.suiPart.init(config)\n await this.iotaPart.init(config)\n }\n\n async configure(config: ProcessConfigResponse, forChainId?: string) {\n this.handlerRegister.clear(forChainId as any)\n await this.suiPart.configure(config)\n await this.iotaPart.configure(config)\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 async partition(request: DataBinding): Promise<ProcessStreamResponse_Partitions> {\n let data: any\n switch (request.handlerType) {\n case HandlerType.SUI_EVENT:\n if (!request.data?.suiEvent) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"suiEvent can't be empty\")\n }\n data = request.data.suiEvent\n break\n case HandlerType.SUI_CALL:\n if (!request.data?.suiCall) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"suiCall can't be empty\")\n }\n data = request.data.suiCall\n break\n case HandlerType.SUI_OBJECT:\n if (!request.data?.suiObject) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"suiObject can't be empty\")\n }\n data = request.data.suiObject\n break\n case HandlerType.SUI_OBJECT_CHANGE:\n if (!request.data?.suiObjectChange) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"suiObjectChange can't be empty\")\n }\n data = request.data.suiObjectChange\n break\n default:\n throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)\n }\n const partitions = await this.partitionManager.processPartitionForHandlerType(\n request.handlerType,\n request.handlerIds,\n data\n )\n return {\n partitions\n }\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.handlerRegister\n .getHandlerById(\n binding.chainId,\n handlerId\n )(event)\n .catch((e: any) => {\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.handlerRegister\n .getHandlerById(\n binding.chainId,\n handlerId\n )(call)\n .catch((e: any) => {\n throw new ServerError(\n Status.INTERNAL,\n 'error processing call: ' + JSON.stringify(call) + '\\n' + errorString(e)\n )\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.handlerRegister\n .getHandlerById(\n binding.chainId,\n handlerId\n )(object)\n .catch((e: any) => {\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.handlerRegister\n .getHandlerById(\n binding.chainId,\n handlerId\n )(objectChange)\n .catch((e: any) => {\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\nPluginManager.INSTANCE.register(new SuiPlugin())\n\nconst NoopContext = new SuiContext('', SuiChainId.SUI_MAINNET, '', new Date(), 0n, {} as any, 0, {})\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { USER_PROCESSOR } from '@sentio/runtime'\nimport {\n AccountConfig,\n ContractConfig,\n HandlerType,\n InitResponse,\n MoveCallHandlerConfig,\n MoveEventHandlerConfig,\n MoveResourceChangeConfig,\n ProcessConfigResponse,\n StartRequest\n} from '@sentio/protos'\n\nimport { PartitionHandlerManager } from '../core/index.js'\nimport { HandlerRegister } from '../core/handler-register.js'\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\nexport class SuiPluginPart {\n constructor(\n private handlerRegister: HandlerRegister,\n private partitionManager: PartitionHandlerManager\n ) {}\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>([SuiChainId.SUI_MAINNET, SuiChainId.SUI_TESTNET])\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.startInstance(\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 endCheckpoint: instance.endBlock || 0n,\n baseLabels: instance.baseLabels\n },\n NoopContext\n )\n }\n }\n\n async init(config: InitResponse) {\n for (const state of [SuiProcessorState.INSTANCE, SuiAccountProcessorState.INSTANCE]) {\n for (const suiProcessor of state.getValues()) {\n config.chainIds.push(suiProcessor.config.network)\n }\n }\n }\n\n async configure(config: ProcessConfigResponse, forChainId?: string) {\n // this.handlerRegister.clear(forChainId as any)\n\n for (const suiProcessor of SuiProcessorState.INSTANCE.getValues()) {\n const chainId = suiProcessor.config.network\n if (forChainId !== undefined && forChainId !== chainId.toString()) {\n continue\n }\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 endBlock: suiProcessor.config.endCheckpoint\n })\n for (const handler of suiProcessor.eventHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n this.partitionManager.registerPartitionHandler(HandlerType.SUI_EVENT, handlerId, handler.partitionHandler)\n const eventHandlerConfig: MoveEventHandlerConfig = {\n filters: handler.filters.map((f) => {\n return {\n type: f.type,\n account: f.account || '',\n eventAccount: f.eventAccount || ''\n }\n }),\n fetchConfig: handler.fetchConfig,\n handlerId,\n handlerName: handler.handlerName\n }\n contractConfig.moveEventConfigs.push(eventHandlerConfig)\n }\n for (const handler of suiProcessor.callHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n this.partitionManager.registerPartitionHandler(HandlerType.SUI_CALL, handlerId, handler.partitionHandler)\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 handlerName: handler.handlerName\n }\n contractConfig.moveCallConfigs.push(functionHandlerConfig)\n }\n // deprecated, use objectType processor instead\n for (const handler of suiProcessor.objectChangeHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n const objectChangeHandler: MoveResourceChangeConfig = {\n types: typeof handler.type === 'string' ? [handler.type] : handler.type,\n handlerId,\n handlerName: handler.handlerName,\n includeDeleted: false\n }\n contractConfig.moveResourceChangeConfigs.push(objectChangeHandler)\n }\n config.contractConfigs.push(contractConfig)\n }\n\n for (const processor of SuiAccountProcessorState.INSTANCE.getValues()) {\n const chainId = processor.getChainId()\n if (forChainId !== undefined && forChainId !== chainId.toString()) {\n continue\n }\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 endBlock: processor.config.endCheckpoint\n })\n\n for (const handler of processor.objectChangeHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n const objectChangeHandler: MoveResourceChangeConfig = {\n types: typeof handler.type === 'string' ? [handler.type] : handler.type,\n handlerId,\n handlerName: handler.handlerName,\n includeDeleted: false\n }\n accountConfig.moveResourceChangeConfigs.push(objectChangeHandler)\n }\n\n for (const handler of processor.objectHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n\n accountConfig.moveIntervalConfigs.push({\n intervalConfig: {\n handlerId: handlerId,\n handlerName: handler.handlerName,\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 resourceFetchConfig: handler.fetchConfig,\n fetchConfig: undefined\n })\n }\n\n if (processor instanceof SuiAddressProcessor) {\n for (const handler of processor.callHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\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 handlerName: handler.handlerName\n }\n accountConfig.moveCallConfigs.push(functionHandlerConfig)\n }\n }\n\n config.accountConfigs.push(accountConfig)\n }\n }\n}\n\nconst NoopContext = new SuiContext('', SuiChainId.SUI_MAINNET, '', new Date(), 0n, {} as any, 0, {})\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { USER_PROCESSOR } from '@sentio/runtime'\nimport {\n AccountConfig,\n ContractConfig,\n HandlerType,\n InitResponse,\n MoveCallHandlerConfig,\n MoveEventHandlerConfig,\n MoveResourceChangeConfig,\n ProcessConfigResponse,\n StartRequest\n} from '@sentio/protos'\n\nimport { PartitionHandlerManager } from '../core/index.js'\nimport { HandlerRegister } from '../core/handler-register.js'\n\nimport { IotaProcessorState } from './iota-processor.js'\nimport { IotaAccountProcessorState, IotaAddressProcessor } from './iota-object-processor.js'\nimport { initCoinList } from './ext/coin.js'\nimport { SuiChainId } from '@sentio/chain'\nimport {\n IotaAccountProcessorTemplateState,\n IotaObjectOrAddressProcessorTemplate\n} from './iota-object-processor-template.js'\nimport { IotaNetwork } from './network.js'\nimport { IotaContext } from './context.js'\n\nexport class IotaPluginPart {\n constructor(\n private handlerRegister: HandlerRegister,\n private partitionManager: PartitionHandlerManager\n ) {}\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>([SuiChainId.IOTA_MAINNET, SuiChainId.IOTA_TESTNET])\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: IotaObjectOrAddressProcessorTemplate<any, any, any> =\n IotaAccountProcessorTemplateState.INSTANCE.getValues()[instance.templateId]\n\n template.startInstance(\n {\n address: instance.contract?.address || '',\n objectId: instance.contract?.address || '',\n network: <IotaNetwork>instance.contract?.chainId || IotaNetwork.MAIN_NET,\n startCheckpoint: instance.startBlock || 0n,\n endCheckpoint: instance.endBlock || 0n,\n baseLabels: instance.baseLabels\n },\n NoopContext\n )\n }\n }\n\n async init(config: InitResponse) {\n for (const state of [IotaProcessorState.INSTANCE, IotaAccountProcessorState.INSTANCE]) {\n for (const suiProcessor of state.getValues()) {\n config.chainIds.push(suiProcessor.config.network)\n }\n }\n }\n\n async configure(config: ProcessConfigResponse, forChainId?: string) {\n // this.handlerRegister.clear(forChainId as any)\n\n for (const suiProcessor of IotaProcessorState.INSTANCE.getValues()) {\n const chainId = suiProcessor.config.network\n if (forChainId !== undefined && forChainId !== chainId.toString()) {\n continue\n }\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 endBlock: suiProcessor.config.endCheckpoint\n })\n for (const handler of suiProcessor.eventHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n this.partitionManager.registerPartitionHandler(HandlerType.SUI_EVENT, handlerId, handler.partitionHandler)\n const eventHandlerConfig: MoveEventHandlerConfig = {\n filters: handler.filters.map((f) => {\n return {\n type: f.type,\n account: f.account || '',\n eventAccount: f.eventAccount || ''\n }\n }),\n fetchConfig: handler.fetchConfig,\n handlerId,\n handlerName: handler.handlerName\n }\n contractConfig.moveEventConfigs.push(eventHandlerConfig)\n }\n for (const handler of suiProcessor.callHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n this.partitionManager.registerPartitionHandler(HandlerType.SUI_CALL, handlerId, handler.partitionHandler)\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 handlerName: handler.handlerName\n }\n contractConfig.moveCallConfigs.push(functionHandlerConfig)\n }\n // deprecated, use objectType processor instead\n for (const handler of suiProcessor.objectChangeHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n const objectChangeHandler: MoveResourceChangeConfig = {\n types: typeof handler.type === 'string' ? [handler.type] : handler.type,\n handlerId,\n handlerName: handler.handlerName,\n includeDeleted: false\n }\n contractConfig.moveResourceChangeConfigs.push(objectChangeHandler)\n }\n config.contractConfigs.push(contractConfig)\n }\n\n for (const processor of IotaAccountProcessorState.INSTANCE.getValues()) {\n const chainId = processor.getChainId()\n if (forChainId !== undefined && forChainId !== chainId.toString()) {\n continue\n }\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 endBlock: processor.config.endCheckpoint\n })\n\n for (const handler of processor.objectChangeHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n const objectChangeHandler: MoveResourceChangeConfig = {\n types: typeof handler.type === 'string' ? [handler.type] : handler.type,\n handlerId,\n handlerName: handler.handlerName,\n includeDeleted: false\n }\n accountConfig.moveResourceChangeConfigs.push(objectChangeHandler)\n }\n\n for (const handler of processor.objectHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\n\n accountConfig.moveIntervalConfigs.push({\n intervalConfig: {\n handlerId: handlerId,\n handlerName: handler.handlerName,\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 resourceFetchConfig: handler.fetchConfig,\n fetchConfig: undefined\n })\n }\n\n if (processor instanceof IotaAddressProcessor) {\n for (const handler of processor.callHandlers) {\n const handlerId = this.handlerRegister.register(handler.handler, chainId)\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 handlerName: handler.handlerName\n }\n accountConfig.moveCallConfigs.push(functionHandlerConfig)\n }\n }\n\n config.accountConfigs.push(accountConfig)\n }\n }\n}\n\nconst NoopContext = new IotaContext('', SuiChainId.IOTA_MAINNET, '', new Date(), 0n, {} as any, 0, {})\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { Data_SuiCall, Data_SuiEvent, Data_SuiObjectChange, MoveFetchConfig } from '@sentio/protos'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { IotaNetwork } from './network.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { IotaContext, IotaObjectChangeContext } from './context.js'\nimport {\n MoveCallIotaTransaction,\n IotaEvent,\n IotaTransactionBlockResponse,\n IotaObjectChange\n} from '@iota/iota-sdk/client'\nimport {\n accountAddressString,\n CallHandler,\n EventFilter,\n EventHandler,\n FunctionNameAndCallFilter,\n ObjectChangeHandler,\n SPLITTER,\n TransactionFilter\n} from '../move/index.js'\nimport { getMoveCalls } from './utils.js'\nimport { defaultMoveCoder, MoveCoder } from './index.js'\nimport { ALL_ADDRESS, Labels, PromiseOrVoid } from '../core/index.js'\nimport { Required } from 'utility-types'\nimport { getHandlerName, proxyProcessor } from '../utils/metrics.js'\nimport { HandlerOptions } from './models.js'\n\nexport const DEFAULT_FETCH_CONFIG: MoveFetchConfig = {\n resourceChanges: false,\n allEvents: true,\n inputs: true\n}\n\nexport type IndexConfigure = Required<IotaBindOptions, 'startCheckpoint' | 'network'>\n\nexport function configure(options: IotaBindOptions): IndexConfigure {\n return {\n startCheckpoint: options.startCheckpoint || 0n,\n endCheckpoint: options.endCheckpoint,\n address: options.address === ALL_ADDRESS ? ALL_ADDRESS : accountAddressString(options.address),\n network: options.network || IotaNetwork.MAIN_NET,\n baseLabels: options.baseLabels\n }\n}\n\nexport interface IotaBindOptions {\n address: string\n network?: IotaNetwork\n startCheckpoint?: bigint\n endCheckpoint?: bigint\n baseLabels?: Labels\n}\n\nexport class IotaProcessorState extends ListStateStorage<IotaBaseProcessor> {\n static INSTANCE = new IotaProcessorState()\n}\n\nexport class IotaBaseProcessor {\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: IotaBindOptions) {\n this.moduleName = name\n this.config = configure(options)\n IotaProcessorState.INSTANCE.addValue(this)\n this.coder = defaultMoveCoder(this.config.network)\n\n return proxyProcessor(this)\n }\n\n getChainId(): string {\n return this.config.network\n }\n\n protected onMoveEvent<T extends IotaEvent = IotaEvent>(\n handler: (event: T, ctx: IotaContext) => PromiseOrVoid,\n filter: EventFilter | EventFilter[],\n handlerOptions?: HandlerOptions<MoveFetchConfig, T>\n ): IotaBaseProcessor {\n let _filters: EventFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...handlerOptions })\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\n this.eventHandlers.push({\n handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'event is null')\n }\n const txn = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse\n if (txn.events == null) {\n txn.events = []\n }\n\n const evt = JSON.parse(data.rawEvent) as IotaEvent\n const idx = Number(evt.id.eventSeq) || 0\n\n const ctx = new IotaContext(\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 decoded = await processor.coder.decodeEvent<any>(evt)\n await handler((decoded || evt) as T, ctx)\n\n return ctx.stopAndGetResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n partitionHandler: async (data: Data_SuiEvent): Promise<string | undefined> => {\n const p = handlerOptions?.partitionKey\n if (!p) return undefined\n if (typeof p === 'function') {\n const evt = JSON.parse(data.rawEvent) as IotaEvent\n const decoded = await processor.coder.decodeEvent<any>(evt)\n return p((decoded || evt) as T)\n }\n return p\n }\n })\n return this\n }\n\n protected onEntryFunctionCall<T extends MoveCallIotaTransaction = MoveCallIotaTransaction>(\n handler: (call: T, ctx: IotaContext) => PromiseOrVoid,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n handlerOptions?: HandlerOptions<MoveFetchConfig, T>\n ): IotaBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...handlerOptions })\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 handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const tx = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse\n\n const ctx = new IotaContext(\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: MoveCallIotaTransaction[] = 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 as T, ctx)\n }\n }\n return ctx.stopAndGetResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n partitionHandler: async (data: Data_SuiCall): Promise<string | undefined> => {\n const p = handlerOptions?.partitionKey\n if (!p) return undefined\n if (typeof p === 'function') {\n const tx = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse\n const calls: MoveCallIotaTransaction[] = getMoveCalls(tx)\n // For simplicity, use the first call for partitioning\n if (calls.length > 0) {\n return p(calls[0] as T)\n }\n return undefined\n }\n return p\n }\n })\n return this\n }\n\n onEvent(\n handler: (event: IotaEvent, ctx: IotaContext) => void,\n handlerOptions?: HandlerOptions<MoveFetchConfig, IotaEvent>\n ): this {\n this.onMoveEvent(handler, { type: '' }, handlerOptions)\n return this\n }\n\n onTransactionBlock(\n handler: (transaction: IotaTransactionBlockResponse, ctx: IotaContext) => PromiseOrVoid,\n filter?: TransactionFilter,\n handlerOptions?: HandlerOptions<MoveFetchConfig, IotaTransactionBlockResponse>\n ): this {\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...handlerOptions })\n\n const processor = this\n\n this.callHandlers.push({\n handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is null')\n }\n const tx = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse\n\n const ctx = new IotaContext(\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 partitionHandler: async (data: Data_SuiCall): Promise<string | undefined> => {\n const p = handlerOptions?.partitionKey\n if (!p) return undefined\n if (typeof p === 'function') {\n const tx = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse\n return p(tx)\n }\n return p\n }\n })\n return this\n }\n\n protected onObjectChange(\n handler: (changes: IotaObjectChange[], ctx: IotaObjectChangeContext) => PromiseOrVoid,\n type: string | string[]\n ): this {\n if (this.config.network === IotaNetwork.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 handlerName: getHandlerName(),\n handler: async function (data: Data_SuiObjectChange) {\n const ctx = new IotaObjectChangeContext(\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.rawChanges.map((r) => JSON.parse(r)) as IotaObjectChange[], ctx)\n return ctx.stopAndGetResult()\n },\n type\n })\n\n return this\n }\n}\n\nexport class IotaModulesProcessor extends IotaBaseProcessor {\n static bind(options: IotaBindOptions): IotaModulesProcessor {\n return new IotaModulesProcessor(ALL_ADDRESS, options)\n }\n}\n\nexport class IotaGlobalProcessor extends IotaBaseProcessor {\n static bind(options: Omit<IotaBindOptions, 'address'>): IotaGlobalProcessor {\n return new IotaGlobalProcessor(ALL_ADDRESS, { ...options, address: ALL_ADDRESS })\n }\n onTransactionBlock(\n handler: (transaction: IotaTransactionBlockResponse, ctx: IotaContext) => 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 // deprecated,, use object type processor\n public onObjectChange(\n handler: (changes: IotaObjectChange[], ctx: IotaObjectChangeContext) => void,\n type: string | string[]\n ): this {\n return super.onObjectChange(handler, type)\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import type { IotaEvent, MoveCallIotaTransaction, IotaMoveObject, DevInspectResults } from '@iota/iota-sdk/client'\nimport { DecodedStruct } from '@typemove/move'\n\nexport const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000000000000000000000000000'\n\nexport type TypedEventInstance<T> = DecodedStruct<IotaEvent, T>\nexport type TypedIotaMoveObject<T> = DecodedStruct<IotaMoveObject, T>\n\nexport type TypedFunctionPayload<T extends Array<any>> = MoveCallIotaTransaction & {\n /**\n * decoded argument data using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n arguments_decoded: T\n}\n\nexport type TypedDevInspectResults<T extends Array<any>> = DevInspectResults & {\n /**\n * Decoded return values using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n results_decoded?: T\n}\n","import { Transaction, TransactionArgument, TransactionObjectInput } from '@iota/iota-sdk/transactions'\n\nexport function isTransactionArgument(value: any): boolean {\n if (typeof value !== 'object') return false\n if (value === null || value === undefined) return false\n\n return (\n value.$kind === 'GasCoin' || value.$kind === 'Result' || value.$kind === 'NestedResult' || value.$kind === 'Input'\n )\n}\n\nexport function transactionArgumentOrObject(\n value: TransactionObjectInput,\n transactionBlock: Transaction\n): TransactionArgument {\n // if (isTransactionArgument(value)) {\n // return value as TransactionArgument\n // }\n return transactionBlock.object(value)\n}\n\nexport function transactionArgumentOrPure(value: any, transactionBlock: Transaction): any {\n if (isTransactionArgument(value)) {\n return value\n }\n return typeof value == 'string' ? transactionBlock.pure.string(value) : transactionBlock.pure.u64(value)\n}\n\nexport function transactionArgumentOrPureString(\n value: TransactionArgument | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.string(value as string)\n}\n\nexport function transactionArgumentOrPureAddress(\n value: TransactionArgument | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.address(value as string)\n}\n\nexport function transactionArgumentOrPureU8(\n value: TransactionArgument | number,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u8(value as number)\n}\n\nexport function transactionArgumentOrPureU16(\n value: TransactionArgument | number,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u16(value as number)\n}\n\nexport function transactionArgumentOrPureU32(\n value: TransactionArgument | number,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u32(value as number)\n}\n\nexport function transactionArgumentOrPureU64(\n value: TransactionArgument | bigint | number | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u64(value as number)\n}\n\nexport function transactionArgumentOrPureU128(\n value: TransactionArgument | bigint | number | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u128(value as number)\n}\n\nexport function transactionArgumentOrPureU256(\n value: TransactionArgument | bigint | number | string,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.u256(value as number)\n}\n\nexport function transactionArgumentOrPureBool(\n value: TransactionArgument | boolean,\n transactionBlock: Transaction\n): TransactionArgument {\n if (isTransactionArgument(value)) {\n return value as TransactionArgument\n }\n return transactionBlock.pure.bool(value as boolean)\n}\n\n// TODO vector might be nested\nexport function transactionArgumentOrVec(value: any, transactionBlock: Transaction): any {\n if (isTransactionArgument(value)) {\n return value\n }\n return transactionBlock.makeMoveVec({\n elements: value.map((a: any) => transactionBlock.object(a))\n })\n}\n","import type {\n IotaMoveNormalizedEnum,\n IotaMoveNormalizedField,\n IotaMoveNormalizedFunction,\n IotaMoveNormalizedModule,\n IotaMoveNormalizedStruct,\n IotaMoveNormalizedType\n} from '@iota/iota-sdk/client'\nimport {\n InternalMoveEnum,\n InternalMoveFunction,\n InternalMoveFunctionVisibility,\n InternalMoveModule,\n InternalMoveStruct,\n InternalMoveStructField,\n SPLITTER,\n TypeDescriptor\n} from '@typemove/move'\n\nexport function toInternalModule(module: IotaMoveNormalizedModule): InternalMoveModule {\n return {\n address: module.address,\n exposedFunctions: Object.entries(module.exposedFunctions).map(([n, f]) => toInternalFunction(n, f)),\n name: module.name,\n structs: Object.entries(module.structs).map(([n, s]) => toInternalStruct(n, s)),\n enums: Object.entries(module.enums || {}).map(([n, e]) => toInternalEnum(n, e))\n }\n}\n\nfunction toInternalFunction(name: string, func: IotaMoveNormalizedFunction): InternalMoveFunction {\n let visibility\n switch (func.visibility) {\n case 'Private':\n visibility = InternalMoveFunctionVisibility.PRIVATE\n break\n case 'Public':\n visibility = InternalMoveFunctionVisibility.PUBLIC\n break\n case 'Friend':\n visibility = InternalMoveFunctionVisibility.FRIEND\n break\n default:\n throw Error('No visibility for function' + name)\n }\n return {\n typeParams: func.typeParameters.map((p: any) => {\n return { constraints: p.abilities }\n }),\n isEntry: func.isEntry,\n name: name,\n params: func.parameters.map(toTypeDescriptor),\n return: func.return.map(toTypeDescriptor),\n visibility: visibility\n }\n}\n\nfunction toInternalStruct(name: string, struct: IotaMoveNormalizedStruct): InternalMoveStruct {\n return {\n abilities: struct.abilities.abilities,\n fields: struct.fields.map(toInternalField),\n typeParams: struct.typeParameters.map((p: any) => {\n return { constraints: p.constraints.abilities }\n }),\n isNative: false,\n isEvent: false,\n name: name\n }\n}\n\nfunction toInternalEnum(name: string, enumType: IotaMoveNormalizedEnum): InternalMoveEnum {\n return {\n name: name,\n abilities: enumType.abilities.abilities,\n typeParams: enumType.typeParameters.map((p: any) => {\n return { constraints: p.constraints.abilities }\n }),\n variants: Object.entries(enumType.variants).reduce((acc: { [key: string]: InternalMoveStructField[] }, [k, v]) => {\n acc[k] = v.map(toInternalField)\n return acc\n }, {})\n }\n}\n\nfunction toInternalField(module: IotaMoveNormalizedField): InternalMoveStructField {\n return {\n name: module.name,\n type: toTypeDescriptor(module.type)\n }\n}\n\nfunction toTypeDescriptor(normalizedType: IotaMoveNormalizedType): TypeDescriptor {\n if (typeof normalizedType === 'string') {\n return new TypeDescriptor(normalizedType)\n }\n\n if ('Struct' in normalizedType) {\n const qname = [normalizedType.Struct.address, normalizedType.Struct.module, normalizedType.Struct.name].join(\n SPLITTER\n )\n\n const args = normalizedType.Struct.typeArguments.map(toTypeDescriptor)\n\n return new TypeDescriptor(qname, args)\n }\n\n if ('Vector' in normalizedType) {\n return new TypeDescriptor('Vector', [toTypeDescriptor(normalizedType.Vector)])\n }\n if ('TypeParameter' in normalizedType) {\n return new TypeDescriptor('T' + normalizedType.TypeParameter)\n }\n\n if ('Reference' in normalizedType) {\n const res = toTypeDescriptor(normalizedType.Reference)\n res.reference = true\n return res\n }\n\n if ('MutableReference' in normalizedType) {\n const res = toTypeDescriptor(normalizedType.MutableReference)\n res.reference = true\n res.mutable = true\n return res\n }\n\n throw new Error('Unexpected sui type')\n}\n","import { toInternalModule } from './to-internal.js'\nimport {\n InternalMoveModule,\n InternalMoveStruct,\n ChainAdapter,\n moduleQname,\n SPLITTER,\n TypeDescriptor\n} from '@typemove/move'\n\nimport { IotaMoveNormalizedModule, IotaEvent, IotaMoveObject, IotaClient } from '@iota/iota-sdk/client'\n\nexport class IotaChainAdapter extends ChainAdapter<\n // IotaNetwork,\n IotaMoveNormalizedModule,\n IotaEvent | IotaMoveObject\n> {\n async getChainId() {\n return this.client.getChainIdentifier()\n }\n // static INSTANCE = new IotaChainAdapter()\n\n client: IotaClient\n constructor(client: IotaClient) {\n super()\n this.client = client\n }\n\n async fetchModule(\n account: string,\n module: string\n // network: IotaNetwork\n ): Promise<IotaMoveNormalizedModule> {\n return await this.client.getNormalizedMoveModule({ package: account, module })\n }\n\n async fetchModules(\n account: string\n // network: IotaNetwork\n ): Promise<IotaMoveNormalizedModule[]> {\n const modules = await this.client.getNormalizedMoveModulesByPackage({\n package: account\n })\n return Object.values(modules)\n }\n\n getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[] {\n return params\n // if (params.length === 0) {\n // return params\n // }\n // return params.slice(0, params.length - 1)\n }\n\n toInternalModules(modules: IotaMoveNormalizedModule[]): InternalMoveModule[] {\n return Object.values(modules).map(toInternalModule)\n }\n\n getAllEventStructs(modules: InternalMoveModule[]): Map<string, InternalMoveStruct> {\n const eventMap = new Map<string, InternalMoveStruct>()\n\n for (const module of modules) {\n const qname = moduleQname(module)\n\n for (const struct of module.structs) {\n const abilities = new Set(struct.abilities)\n if (abilities.has('Drop') && abilities.has('Copy')) {\n eventMap.set(qname + SPLITTER + struct.name, struct)\n }\n }\n }\n return eventMap\n }\n\n getType(base: IotaEvent | IotaMoveObject): string {\n return base.type\n }\n\n getData(val: IotaEvent | IotaMoveObject) {\n // if (val.parsedJson) {\n // return val.parsedJson as any\n // }\n if (val === undefined) {\n throw Error('val is undefined')\n }\n if ('parsedJson' in val) {\n return val.parsedJson as any\n }\n // if (IotaParsedData.is(val)) {\n // return val.fields as any\n // }\n if (val.dataType === 'moveObject') {\n return val.fields as any\n }\n // if (IotaMoveObject.is(val)) {\n // return val.fields as any\n // }\n // This may not be perfect, just think everything has\n if ('fields' in val) {\n if ('type' in val && Object.keys(val).length === 2) {\n return val.fields as any\n }\n }\n return val as any\n }\n // validateAndNormalizeAddress(address: string) {\n // return validateAndNormalizeAddress(address)\n // }\n}\n\nfunction getRpcClient(endpoint: string): IotaClient {\n return new IotaClient({ url: endpoint })\n}\n","import { TypedDevInspectResults, TypedEventInstance, TypedFunctionPayload } from './models.js'\nimport {\n AbstractMoveCoder,\n ANY_TYPE,\n DecodedStruct,\n accountTypeString,\n parseMoveType,\n SPLITTER,\n TypeDescriptor,\n InternalMoveModule\n} from '@typemove/move'\nimport {\n MoveCallIotaTransaction,\n IotaCallArg,\n IotaEvent,\n IotaMoveNormalizedModule,\n IotaMoveObject,\n DevInspectResults,\n IotaClient\n} from '@iota/iota-sdk/client'\nimport { toInternalModule } from './to-internal.js'\nimport { IotaChainAdapter } from './sui-chain-adapter.js'\nimport { dynamic_field } from './builtin/0x2.js'\nimport { BcsType, bcs } from '@iota/iota-sdk/bcs'\n\n// import { Encoding } from '@mysten/bcs/types', this doesn't get exported correctly\nexport type Encoding = 'base58' | 'base64' | 'hex'\n\nimport { normalizeIotaObjectId, normalizeIotaAddress } from '@iota/iota-sdk/utils'\n\nexport class MoveCoder extends AbstractMoveCoder<\n // IotaNetwork,\n IotaMoveNormalizedModule,\n IotaEvent | IotaMoveObject\n> {\n constructor(client: IotaClient) {\n super(new IotaChainAdapter(client))\n }\n\n load(module: IotaMoveNormalizedModule, address: string): InternalMoveModule {\n address = accountTypeString(address)\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 this.accounts.add(module.address)\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 normalizeIotaObjectId(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 normalizeIotaAddress(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: IotaEvent): Promise<TypedEventInstance<T> | undefined> {\n return this.decodedStruct(event)\n }\n filterAndDecodeEvents<T>(type: TypeDescriptor<T> | string, resources: IotaEvent[]): 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: IotaMoveObject[],\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: IotaMoveObject[]\n ): Promise<DecodedStruct<IotaMoveObject, T>[]> {\n return this.filterAndDecodeStruct(type, objects)\n }\n\n async decodeFunctionPayload(\n payload: MoveCallIotaTransaction,\n inputs: IotaCallArg[]\n ): Promise<MoveCallIotaTransaction> {\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 bcsRegistered = new Set<string>()\n private bcsRegistry = new Map<string, BcsType<any>>()\n\n private async getBCSTypeWithArgs(type: TypeDescriptor, args: BcsType<any>[] = []): Promise<BcsType<any>> {\n const qname = type.qname\n const sig = type.getNormalizedSignature()\n const cached = this.bcsRegistry.get(sig)\n if (cached) {\n return cached\n }\n const lowerQname = qname.toLowerCase()\n switch (lowerQname) {\n case 'u8':\n case 'u16':\n case 'u32':\n case 'u64':\n case 'u128':\n case 'u256':\n case 'bool':\n return bcs[lowerQname]()\n case 'address':\n return bcs.Address\n case 'vector':\n return bcs.vector(args[0])\n default:\n if (!qname.includes('::')) {\n throw `Unimplemented builtin type ${qname}`\n }\n }\n let moveStruct\n try {\n moveStruct = await this.getMoveStruct(qname)\n } catch (e) {\n console.error('Invalid move address', qname)\n throw e\n }\n const structDef: Record<string, any> = {}\n for (const field of moveStruct.fields) {\n if (field.type.qname.startsWith('T') && args.length) {\n const index = +field.type.qname.slice(1)\n structDef[field.name] = args[index]\n } else if (field.type.typeArgs.length && args.length) {\n structDef[field.name] = await this.getBCSTypeWithArgs(field.type, args)\n } else {\n structDef[field.name] = await this.getBCSType(field.type)\n }\n }\n return bcs.struct(qname, structDef)\n }\n\n async getBCSType(type: TypeDescriptor): Promise<BcsType<any>> {\n const args = await Promise.all(type.typeArgs.map((x) => this.getBCSType(x)))\n const bcsType = await this.getBCSTypeWithArgs(type, args)\n this.bcsRegistry.set(type.getNormalizedSignature(), bcsType)\n return bcsType\n }\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 const bcsType = await this.getBCSType(type)\n this.bcsRegistry.set(type.getNormalizedSignature(), bcsType)\n }\n\n async decodeBCS(type: TypeDescriptor, data: Uint8Array | string, encoding?: Encoding): Promise<any> {\n await this.registerBCSTypes(type)\n if (typeof data == 'string') {\n const buf = Buffer.from(data, encoding as any)\n data = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n }\n const bcsType = this.bcsRegistry.get(type.getNormalizedSignature())\n return bcsType?.parse(data)\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.decodeType(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://api.mainnet.iota.cafe/'\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 IotaClient({ url: endpoint }))\n CODER_MAP.set(endpoint, coder)\n }\n return coder\n}\n\nconst PROVIDER_CODER_MAP = new Map<IotaClient, MoveCoder>()\n\nlet DEFAULT_CHAIN_ID: string | undefined\n\nexport async function getMoveCoder(client: IotaClient): 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/iota'\n\nimport { getClient, IotaNetwork } from './network.js'\n\nconst CODERS = new Map<IotaNetwork, MoveCoder>()\n\nexport function defaultMoveCoder(network: IotaNetwork = IotaNetwork.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(\"node:process\").then((p) => p.stdout.write(\"\"));","import { RecordMetaData } from '@sentio/protos'\nimport { type Labels, normalizeLabels } from '../index.js'\nimport { getClient, IotaNetwork } from './network.js'\nimport {\n IotaTransactionBlockResponse,\n IotaEvent,\n IotaMoveNormalizedModule,\n IotaMoveObject,\n IotaClient\n} from '@iota/iota-sdk/client'\nimport { MoveCoder } from './index.js'\nimport { defaultMoveCoder } from './move-coder.js'\nimport { MoveAccountContext, MoveContext } from '../move/index.js'\n\nexport class IotaContext extends MoveContext<IotaNetwork, IotaMoveNormalizedModule, IotaEvent | IotaMoveObject> {\n moduleName: string\n timestamp: Date\n checkpoint: bigint\n transaction: IotaTransactionBlockResponse\n eventIndex: number\n coder: MoveCoder\n\n constructor(\n moduleName: string,\n network: IotaNetwork,\n address: string,\n timestamp: Date,\n checkpoint: bigint,\n transaction: IotaTransactionBlockResponse,\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(): IotaClient {\n return getClient(this.network)\n }\n}\n\nexport class IotaObjectChangeContext extends MoveContext<\n IotaNetwork,\n IotaMoveNormalizedModule,\n IotaEvent | IotaMoveObject\n> {\n timestamp: Date\n checkpoint: bigint\n coder: MoveCoder\n txDigest: string\n\n constructor(\n network: IotaNetwork,\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(): IotaClient {\n return getClient(this.network)\n }\n}\n\n// TODO address handler should use this context\nexport class IotaAddressContext extends MoveAccountContext<\n IotaNetwork,\n IotaMoveNormalizedModule,\n IotaEvent | IotaMoveObject\n> {\n address: string\n network: IotaNetwork\n checkpoint: bigint\n timestamp: Date\n coder: MoveCoder\n\n protected contractName = 'address'\n\n constructor(\n network: IotaNetwork,\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(): IotaClient {\n return getClient(this.network)\n }\n\n getTimestamp(): number {\n return this.timestamp.getDate()\n }\n}\n\nexport class IotaObjectContext extends IotaAddressContext {\n contractName = 'object'\n objectId: string\n objectVersion: bigint\n\n constructor(\n network: IotaNetwork,\n objectId: string,\n objectVersion: bigint,\n checkpoint: bigint,\n timestamp: Date,\n baseLabels: Labels | undefined\n ) {\n super(network, objectId, checkpoint, timestamp, baseLabels)\n this.objectId = objectId\n this.objectVersion = objectVersion\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import {\n IotaTransactionBlockResponse,\n MoveCallIotaTransaction,\n ProgrammableTransaction,\n IotaTransaction\n} from '@iota/iota-sdk/client'\nimport { accountTypeString } from '@typemove/move'\n\nexport function getMoveCalls(txBlock: IotaTransactionBlockResponse) {\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: IotaTransaction) => {\n if ('MoveCall' in tx) {\n const call = tx.MoveCall as MoveCallIotaTransaction\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 isValidIotaAddress(value: string): value is IotaAddress {\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 (!isValidIotaAddress(address)) {\n// throw Error('Not valid Address')\n// }\n// return normalizeIotaAddress(address)\n// }\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import {\n Data_SuiCall,\n Data_SuiObject,\n Data_SuiObjectChange,\n HandleInterval,\n MoveAccountFetchConfig,\n MoveFetchConfig,\n MoveOwnerType,\n ProcessResult\n} from '@sentio/protos'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { IotaNetwork } from './network.js'\nimport { IotaAddressContext, IotaContext, IotaObjectChangeContext, IotaObjectContext } from './context.js'\nimport { IotaMoveObject, IotaObjectChange, IotaTransactionBlockResponse } from '@iota/iota-sdk/client'\nimport { ALL_ADDRESS, PromiseOrVoid } from '../core/index.js'\nimport { configure, DEFAULT_FETCH_CONFIG, IndexConfigure, IotaBindOptions } from './iota-processor.js'\nimport { CallHandler, TransactionFilter, accountTypeString, ObjectChangeHandler } from '../move/index.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { TypeDescriptor } from '@typemove/move'\nimport { TypedIotaMoveObject } from './models.js'\nimport { getHandlerName, proxyProcessor } from '../utils/metrics.js'\n\nexport interface IotaObjectBindOptions {\n objectId: string\n network?: IotaNetwork\n startCheckpoint?: bigint\n endCheckpoint?: bigint\n baseLabels?: { [key: string]: string }\n}\n\nexport interface IotaObjectTypeBindOptions<T> {\n objectType: TypeDescriptor<T>\n network?: IotaNetwork\n startCheckpoint?: bigint\n endCheckpoint?: 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 handlerName: string\n}\n\nexport const DEFAULT_ACCOUNT_FETCH_CONFIG: MoveAccountFetchConfig = {\n owned: false\n}\n\nexport class IotaAccountProcessorState extends ListStateStorage<IotaBaseObjectOrAddressProcessor<any>> {\n static INSTANCE = new IotaAccountProcessorState()\n}\n\nexport interface IotaInternalObjectsBindOptions extends IotaBindOptions {\n ownerType: MoveOwnerType\n}\n\nexport abstract class IotaBaseObjectOrAddressProcessor<HandlerType> {\n config: IndexConfigure\n ownerType: MoveOwnerType\n templateId: number | undefined\n\n objectHandlers: ObjectHandler[] = []\n objectChangeHandlers: ObjectChangeHandler<Data_SuiObjectChange>[] = []\n\n // static bind(options: IotaObjectsBindOptions): IotaBaseObjectsProcessor<any> {\n // return new IotaBaseObjectsProcessor(options)\n // }\n\n protected constructor(options: IotaInternalObjectsBindOptions) {\n if (options.ownerType === MoveOwnerType.TYPE) {\n this.config = {\n startCheckpoint: options.startCheckpoint || 0n,\n endCheckpoint: options.endCheckpoint,\n address: options.address === '*' ? '*' : accountTypeString(options.address),\n network: options.network || IotaNetwork.MAIN_NET,\n baseLabels: options.baseLabels\n }\n } else {\n this.config = configure(options)\n }\n this.ownerType = options.ownerType\n IotaAccountProcessorState.INSTANCE.addValue(this)\n\n return proxyProcessor(this)\n }\n\n getChainId(): string {\n return this.config.network\n }\n\n // protected abstract transformObjects(objects: IotaMoveObject[]): IotaMoveObject[]\n\n protected abstract doHandle(handler: HandlerType, data: Data_SuiObject, ctx: IotaObjectContext): Promise<any>\n\n public onInterval(\n handler: HandlerType, //(resources: IotaMoveObject[], ctx: IotaObjectsContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n checkpointInterval: HandleInterval | undefined,\n type: string | undefined,\n fetchConfig: Partial<MoveAccountFetchConfig> | undefined,\n handlerName = getHandlerName()\n ): this {\n const processor = this\n this.objectHandlers.push({\n handlerName,\n handler: async function (data) {\n const ctx = new IotaObjectContext(\n processor.config.network,\n data.objectId,\n data.objectVersion,\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\nabstract class IotaBaseObjectOrAddressProcessorInternal<\n HandlerType\n> extends IotaBaseObjectOrAddressProcessor<HandlerType> {\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 IotaAddressProcessor extends IotaBaseObjectOrAddressProcessorInternal<\n (objects: IotaMoveObject[], ctx: IotaAddressContext) => PromiseOrVoid\n> {\n callHandlers: CallHandler<Data_SuiCall>[] = []\n\n static bind(options: IotaBindOptions): IotaAddressProcessor {\n return new IotaAddressProcessor({ ...options, ownerType: MoveOwnerType.ADDRESS })\n }\n\n protected async doHandle(\n handler: (objects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: IotaObjectContext\n ) {\n return handler(data.rawObjects.map((o) => JSON.parse(o)) as IotaMoveObject[], ctx)\n }\n\n onTransactionBlock(\n handler: (transaction: IotaTransactionBlockResponse, ctx: IotaContext) => PromiseOrVoid,\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 handlerName: getHandlerName(),\n handler: async function (data) {\n if (!data.rawTransaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is null')\n }\n const tx = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse\n\n const ctx = new IotaContext(\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 IotaObjectProcessor extends IotaBaseObjectOrAddressProcessorInternal<\n (self: IotaMoveObject, dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid\n> {\n static bind(options: IotaObjectBindOptions): IotaObjectProcessor {\n return new IotaObjectProcessor({\n address: options.objectId,\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n endCheckpoint: options.endCheckpoint,\n ownerType: MoveOwnerType.OBJECT,\n baseLabels: options.baseLabels\n })\n }\n\n protected async doHandle(\n handler: (self: IotaMoveObject, dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: IotaObjectContext\n ) {\n if (!data.rawSelf) {\n console.log(`Iota object not existed in ${ctx.checkpoint}, please specific a start time`)\n return\n }\n return handler(\n JSON.parse(data.rawSelf) as IotaMoveObject,\n data.rawObjects.map((o) => JSON.parse(o)) as IotaMoveObject[],\n ctx\n )\n }\n}\n\nexport class IotaObjectTypeProcessor<T> extends IotaBaseObjectOrAddressProcessor<\n (self: TypedIotaMoveObject<T>, dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid\n> {\n objectType: TypeDescriptor<T>\n\n static bind<T>(options: IotaObjectTypeBindOptions<T>): IotaObjectTypeProcessor<T> {\n const processor = new IotaObjectTypeProcessor<T>({\n address: ALL_ADDRESS, // current only support on all address\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n endCheckpoint: options.endCheckpoint,\n ownerType: MoveOwnerType.TYPE,\n baseLabels: options.baseLabels\n })\n processor.objectType = options.objectType\n return processor\n }\n\n protected async doHandle(\n handler: (\n self: TypedIotaMoveObject<T>,\n dynamicFieldObjects: IotaMoveObject[],\n ctx: IotaObjectContext\n ) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: IotaObjectContext\n ) {\n if (!data.rawSelf) {\n console.log(`Iota object not existed in ${ctx.checkpoint}, please specific a start time`)\n return\n }\n const object = await ctx.coder.filterAndDecodeObjects(this.objectType, [JSON.parse(data.rawSelf) as IotaMoveObject])\n return handler(object[0], data.rawObjects.map((o) => JSON.parse(o)) as IotaMoveObject[], ctx)\n }\n\n public onObjectChange(handler: (changes: IotaObjectChange[], ctx: IotaObjectChangeContext) => PromiseOrVoid): this {\n if (this.config.network === IotaNetwork.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 handlerName: getHandlerName(),\n handler: async function (data: Data_SuiObjectChange) {\n const ctx = new IotaObjectChangeContext(\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.rawChanges.map((r) => JSON.parse(r)) as IotaObjectChange[], ctx)\n return ctx.stopAndGetResult()\n },\n type: [this.objectType.getSignature()]\n })\n\n return this\n }\n\n public onTimeInterval(\n handler: (\n self: TypedIotaMoveObject<T>,\n dynamicFieldObjects: IotaMoveObject[],\n ctx: IotaObjectContext\n ) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes\n },\n undefined,\n this.objectType.getSignature(),\n fetchConfig\n )\n }\n\n public onCheckpointInterval(\n handler: (\n self: TypedIotaMoveObject<T>,\n dynamicFieldObjects: IotaMoveObject[],\n ctx: IotaObjectContext\n ) => PromiseOrVoid,\n checkpointInterval = 100000,\n backfillCheckpointInterval = 400000,\n fetchConfig?: Partial<MoveAccountFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: checkpointInterval, backfillInterval: backfillCheckpointInterval },\n this.objectType.qname,\n fetchConfig\n )\n }\n}\n\nexport class IotaWrappedObjectProcessor extends IotaBaseObjectOrAddressProcessorInternal<\n (dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid\n> {\n static bind(options: IotaObjectBindOptions): IotaWrappedObjectProcessor {\n return new IotaWrappedObjectProcessor({\n address: options.objectId,\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n endCheckpoint: options.endCheckpoint,\n ownerType: MoveOwnerType.WRAPPED_OBJECT,\n baseLabels: options.baseLabels\n })\n }\n\n protected async doHandle(\n handler: (dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid,\n data: Data_SuiObject,\n ctx: IotaObjectContext\n ) {\n return handler(data.rawObjects.map((o) => JSON.parse(o)) as IotaMoveObject[], ctx)\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import { HandleInterval, MoveAccountFetchConfig, MoveFetchConfig, TemplateInstance } from '@sentio/protos'\nimport { ListStateStorage, processMetrics } from '@sentio/runtime'\nimport { IotaAddressContext, IotaContext, IotaObjectContext } from './context.js'\nimport { IotaMoveObject, IotaTransactionBlockResponse } from '@iota/iota-sdk/client'\nimport { PromiseOrVoid } from '../core/index.js'\nimport {\n DEFAULT_ACCOUNT_FETCH_CONFIG,\n IotaAccountProcessorState,\n IotaAddressProcessor,\n IotaBaseObjectOrAddressProcessor,\n IotaObjectBindOptions,\n IotaObjectProcessor,\n IotaWrappedObjectProcessor\n} from './iota-object-processor.js'\nimport { IotaBindOptions } from './iota-processor.js'\nimport { TransactionFilter, accountAddressString } from '../move/index.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { getHandlerName, proxyProcessor } from '../utils/metrics.js'\n\nclass ObjectHandler<HandlerType> {\n type?: string\n checkpointInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handlerName: string\n handler: HandlerType\n fetchConfig: MoveAccountFetchConfig\n}\n\nexport class IotaAccountProcessorTemplateState extends ListStateStorage<\n IotaObjectOrAddressProcessorTemplate<any, any, any>\n> {\n static INSTANCE = new IotaAccountProcessorTemplateState()\n}\n\nexport abstract class IotaObjectOrAddressProcessorTemplate<\n HandlerType,\n OptionType extends IotaObjectBindOptions | IotaBindOptions,\n ProcessorType extends IotaBaseObjectOrAddressProcessor<HandlerType>\n> {\n id: number\n objectHandlers: ObjectHandler<HandlerType>[] = []\n instances = new Set<string>()\n\n constructor() {\n this.id = IotaAccountProcessorTemplateState.INSTANCE.getValues().length\n IotaAccountProcessorTemplateState.INSTANCE.addValue(this)\n return proxyProcessor(this)\n }\n\n protected abstract createProcessor(options: IotaObjectBindOptions | IotaBindOptions): ProcessorType\n\n bind(options: OptionType, ctx: IotaContext): void {\n options.network = options.network || ctx.network\n options.startCheckpoint = options.startCheckpoint || ctx.checkpoint\n let id = (options as IotaObjectBindOptions).objectId || (options as IotaBindOptions).address\n\n if (id === '*') {\n throw new ServerError(Status.INVALID_ARGUMENT, \"can't bind template instance with *\")\n }\n id = accountAddressString(id)\n\n const instance: TemplateInstance = {\n templateId: this.id,\n contract: {\n name: '',\n chainId: options.network,\n address: id,\n abi: ''\n },\n startBlock: options.startCheckpoint || 0n,\n endBlock: options.endCheckpoint || 0n,\n baseLabels: options.baseLabels\n }\n\n ctx.sendTemplateInstance(instance)\n\n ctx.update({\n states: {\n configUpdated: true\n }\n })\n\n processMetrics.processor_template_instance_count.add(1, {\n chain_id: options.network,\n template: this.constructor.name\n })\n }\n\n startInstance(options: OptionType, ctx: IotaContext): void {\n options.network = options.network || ctx.network\n options.startCheckpoint = options.startCheckpoint || ctx.checkpoint\n let id = (options as IotaObjectBindOptions).objectId || (options as IotaBindOptions).address\n\n if (id === '*') {\n throw new ServerError(Status.INVALID_ARGUMENT, \"can't bind template instance with *\")\n }\n id = accountAddressString(id)\n\n const sig = [options.network, id].join('_')\n if (this.instances.has(sig)) {\n console.debug(`Same object id can be bind to one template only once, ignore duplicate bind: ${sig}`)\n return\n }\n this.instances.add(sig)\n\n const processor = this.createProcessor(options)\n for (const h of this.objectHandlers) {\n processor.onInterval(\n h.handler,\n h.timeIntervalInMinutes,\n h.checkpointInterval,\n h.type,\n h.fetchConfig,\n h.handlerName\n )\n }\n console.log(`successfully bind template ${sig}`)\n }\n\n unbind(options: OptionType, ctx: IotaContext): void {\n options.network = options.network || ctx.network\n options.startCheckpoint = options.startCheckpoint || ctx.checkpoint\n let id = (options as IotaObjectBindOptions).objectId || (options as IotaBindOptions).address\n\n if (id === '*') {\n throw new ServerError(Status.INVALID_ARGUMENT, \"can't delete template instance bind with *\")\n }\n id = accountAddressString(id)\n\n const sig = [options.network, id].join('_')\n if (!this.instances.has(sig)) {\n console.log(`the template instance ${sig} not existed or already unbind`)\n return\n }\n this.instances.delete(sig)\n\n const oldProcessors = IotaAccountProcessorState.INSTANCE.unregister()\n let deleted = 0\n for (const processor of oldProcessors) {\n if (processor.templateId === this.id) {\n if (processor.config.network == options.network && processor.config.address === id) {\n deleted++\n continue\n }\n }\n IotaAccountProcessorState.INSTANCE.addValue(processor)\n }\n\n if (deleted !== 1) {\n throw new ServerError(\n Status.INVALID_ARGUMENT,\n `Failed to delete processor for template ${this.id}, ${sig}. deleted ${deleted} times`\n )\n }\n\n console.log(`successfully unbind template ${sig}`)\n\n ctx.update({\n states: {\n configUpdated: true\n }\n })\n ctx.sendTemplateInstance(\n {\n templateId: this.id,\n contract: {\n name: '',\n chainId: options.network,\n address: id,\n abi: ''\n },\n startBlock: options.startCheckpoint || 0n,\n endBlock: options.endCheckpoint || 0n,\n baseLabels: options.baseLabels\n },\n true\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 handlerName: getHandlerName(),\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: IotaTransactionBlockResponse, ctx: IotaContext) => void\n filter?: TransactionFilter\n fetchConfig?: Partial<MoveFetchConfig>\n}\n\nexport class IotaAddressProcessorTemplate extends IotaObjectOrAddressProcessorTemplate<\n (objects: IotaMoveObject[], ctx: IotaAddressContext) => PromiseOrVoid,\n IotaBindOptions,\n IotaAddressProcessor\n> {\n private handlers: AddressTransactionHandler[] = []\n\n createProcessor(options: IotaBindOptions): IotaAddressProcessor {\n const p = IotaAddressProcessor.bind(options)\n for (const handler of this.handlers) {\n p.onTransactionBlock(handler.handler, handler.filter, handler.fetchConfig)\n }\n p.templateId = this.id\n return p\n }\n\n onTransactionBlock(\n handler: (transaction: IotaTransactionBlockResponse, ctx: IotaContext) => 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 IotaObjectProcessorTemplate extends IotaObjectOrAddressProcessorTemplate<\n (self: IotaMoveObject, dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid,\n IotaObjectBindOptions,\n IotaObjectProcessor\n> {\n createProcessor(options: IotaObjectBindOptions): IotaObjectProcessor {\n const p = IotaObjectProcessor.bind(options)\n p.templateId = this.id\n return p\n }\n}\n\nexport class IotaWrappedObjectProcessorTemplate extends IotaObjectOrAddressProcessorTemplate<\n (dynamicFieldObjects: IotaMoveObject[], ctx: IotaObjectContext) => PromiseOrVoid,\n IotaObjectBindOptions,\n IotaWrappedObjectProcessor\n> {\n createProcessor(options: IotaObjectBindOptions): IotaWrappedObjectProcessor {\n const p = IotaWrappedObjectProcessor.bind(options)\n p.templateId = this.id\n return p\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","import type { IotaEvent, MoveCallIotaTransaction, IotaMoveObject } from '@iota/iota-sdk/client'\nimport { DecodedStruct } from '@typemove/move'\n\nexport type TypedEventInstance<T> = DecodedStruct<IotaEvent, T>\nexport type TypedIotaMoveObject<T> = DecodedStruct<IotaMoveObject, T>\n\nexport type TypedFunctionPayload<T extends Array<any>> = MoveCallIotaTransaction & {\n /**\n * decoded argument data using ABI, undefined if there is decoding error, usually because the ABI/data mismatch\n */\n arguments_decoded: T\n}\n\nexport type { PartitionHandler, HandlerOptions } from '../core/index.js'\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","// real plugin is in src/sui/sui-plugin.ts\nimport '@sentio/sdk/sui'\n\nexport class IotaPlugin {}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","export { IotaBaseProcessor, IotaGlobalProcessor, IotaModulesProcessor, type IotaBindOptions } from './iota-processor.js'\nexport {\n IotaAddressProcessor,\n IotaObjectProcessor,\n IotaObjectTypeProcessor,\n IotaWrappedObjectProcessor,\n type IotaObjectBindOptions,\n type IotaObjectTypeBindOptions\n} from './iota-object-processor.js'\n\nexport {\n IotaAddressProcessorTemplate,\n IotaObjectProcessorTemplate,\n IotaWrappedObjectProcessorTemplate\n} from './iota-object-processor-template.js'\n\nexport * from './network.js'\nexport * from './context.js'\nexport * from './models.js'\n\nexport * from './move-coder.js'\n\nexport { IotaPlugin } from './iota-plugin.js'\n\nexport { BUILTIN_TYPES } from '@typemove/move'\n\nexport { MoveCoder } from '@typemove/iota'\n\n// export { validateAndNormalizeAddress, isValidIotaAddress } from './utils.js'\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","export { SuiBaseProcessor, SuiGlobalProcessor, SuiModulesProcessor, type SuiBindOptions } from './sui-processor.js'\nexport {\n SuiAddressProcessor,\n SuiObjectProcessor,\n SuiObjectTypeProcessor,\n SuiWrappedObjectProcessor,\n type SuiObjectBindOptions,\n type SuiObjectTypeBindOptions\n} from './sui-object-processor.js'\n\nexport {\n SuiAddressProcessorTemplate,\n SuiObjectProcessorTemplate,\n SuiWrappedObjectProcessorTemplate\n} from './sui-object-processor-template.js'\n\nexport * from './network.js'\nexport * from './context.js'\nexport * from './models.js'\n\nexport * from './move-coder.js'\n\nexport { SuiPlugin } from './sui-plugin.js'\n\nexport { BUILTIN_TYPES } from '@typemove/move'\n\nexport { MoveCoder } from '@typemove/sui'\n\n// export { validateAndNormalizeAddress, isValidSuiAddress } from './utils.js'\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));"],"mappings":"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","names":["defaultMoveCoder","getClient","defaultMoveCoder","getClient","defaultMoveCoder","ListStateStorage","import_nice_grpc","ListStateStorage","ListStateStorage","import_nice_grpc","ListStateStorage","import_nice_grpc","SuiChainId","USER_PROCESSOR","ListStateStorage","import_nice_grpc","ZERO_ADDRESS","isTransactionArgument","transactionArgumentOrObject","transactionArgumentOrPure","transactionArgumentOrPureAddress","isTransactionArgument","transactionArgumentOrPureU8","transactionArgumentOrPureU16","transactionArgumentOrPureU32","transactionArgumentOrPureU64","transactionArgumentOrPureU128","transactionArgumentOrPureU256","transactionArgumentOrPureBool","transactionArgumentOrVec","toInternalModule","toInternalFunction","toInternalStruct","toInternalEnum","toInternalField","toInternalModule","MoveCoder","toInternalModule","DEFAULT_ENDPOINT","CODER_MAP","defaultMoveCoder","DEFAULT_ENDPOINT","CODER_MAP","MoveCoder","PROVIDER_CODER_MAP","DEFAULT_CHAIN_ID","getMoveCoder","CODERS","defaultMoveCoder","MoveCoder","defaultMoveCoder","getMoveCalls","ListStateStorage","import_nice_grpc","DEFAULT_ACCOUNT_FETCH_CONFIG","ListStateStorage","configure","DEFAULT_FETCH_CONFIG","ListStateStorage","processMetrics","import_nice_grpc","ListStateStorage","processMetrics","DEFAULT_ACCOUNT_FETCH_CONFIG","DEFAULT_FETCH_CONFIG","configure","ListStateStorage","defaultMoveCoder","getMoveCalls","SuiChainId","initCoinList","SuiChainId","NoopContext","USER_PROCESSOR","NoopContext","SuiChainId"]}
|