@sentio/sdk 1.27.7 → 1.27.8
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/core/base-processor.d.ts +10 -1
- package/lib/core/base-processor.js +22 -4
- package/lib/core/base-processor.js.map +1 -1
- package/lib/gen/processor/protos/processor.d.ts +3 -2
- package/lib/gen/processor/protos/processor.js +38 -21
- package/lib/gen/processor/protos/processor.js.map +1 -1
- package/lib/service.js +11 -5
- package/lib/service.js.map +1 -1
- package/lib/testing/test-processor-server.js +1 -1
- package/lib/testing/test-processor-server.js.map +1 -1
- package/package.json +1 -1
- package/src/core/base-processor.ts +46 -11
- package/src/gen/processor/protos/processor.ts +44 -23
- package/src/service.ts +11 -5
- package/src/testing/test-processor-server.ts +1 -1
|
@@ -14,8 +14,13 @@ export declare class TraceHandler {
|
|
|
14
14
|
signature: string;
|
|
15
15
|
handler: (trace: Trace) => Promise<ProcessResult>;
|
|
16
16
|
}
|
|
17
|
+
declare class BlockHandlder {
|
|
18
|
+
blockInterval?: number;
|
|
19
|
+
timeIntervalInMinutes?: number;
|
|
20
|
+
handler: (block: Block) => Promise<ProcessResult>;
|
|
21
|
+
}
|
|
17
22
|
export declare abstract class BaseProcessor<TContract extends BaseContract, TBoundContractView extends BoundContractView<TContract, ContractView<TContract>>> {
|
|
18
|
-
blockHandlers:
|
|
23
|
+
blockHandlers: BlockHandlder[];
|
|
19
24
|
eventHandlers: EventsHandler[];
|
|
20
25
|
traceHandlers: TraceHandler[];
|
|
21
26
|
config: BindInternalOptions;
|
|
@@ -24,6 +29,10 @@ export declare abstract class BaseProcessor<TContract extends BaseContract, TBou
|
|
|
24
29
|
getChainId(): number;
|
|
25
30
|
onEvent(handler: (event: Event, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, filter: EventFilter | EventFilter[]): this;
|
|
26
31
|
onBlock(handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid): this;
|
|
32
|
+
onBlockInterval(handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, blockInterval?: number): this;
|
|
33
|
+
onTimeInterval(handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, timeIntervalInMinutes?: number): this;
|
|
34
|
+
onInterval(handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, timeInterval: number | undefined, blockInterval: number | undefined): this;
|
|
27
35
|
onAllEvents(handler: (event: Log, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid): this;
|
|
28
36
|
protected onTrace(signature: string, handler: (trace: Trace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid): this;
|
|
29
37
|
}
|
|
38
|
+
export {};
|
|
@@ -18,6 +18,11 @@ class TraceHandler {
|
|
|
18
18
|
handler;
|
|
19
19
|
}
|
|
20
20
|
exports.TraceHandler = TraceHandler;
|
|
21
|
+
class BlockHandlder {
|
|
22
|
+
blockInterval;
|
|
23
|
+
timeIntervalInMinutes;
|
|
24
|
+
handler;
|
|
25
|
+
}
|
|
21
26
|
class BaseProcessor {
|
|
22
27
|
blockHandlers = [];
|
|
23
28
|
eventHandlers = [];
|
|
@@ -85,13 +90,26 @@ class BaseProcessor {
|
|
|
85
90
|
return this;
|
|
86
91
|
}
|
|
87
92
|
onBlock(handler) {
|
|
93
|
+
return this.onBlockInterval(handler, 1);
|
|
94
|
+
}
|
|
95
|
+
onBlockInterval(handler, blockInterval = 240) {
|
|
96
|
+
return this.onInterval(handler, undefined, blockInterval);
|
|
97
|
+
}
|
|
98
|
+
onTimeInterval(handler, timeIntervalInMinutes = 60) {
|
|
99
|
+
return this.onInterval(handler, timeIntervalInMinutes, undefined);
|
|
100
|
+
}
|
|
101
|
+
onInterval(handler, timeInterval, blockInterval) {
|
|
88
102
|
const chainId = this.getChainId();
|
|
89
103
|
const contractView = this.CreateBoundContractView();
|
|
90
104
|
const contractName = this.config.name;
|
|
91
|
-
this.blockHandlers.push(
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
105
|
+
this.blockHandlers.push({
|
|
106
|
+
handler: async function (block) {
|
|
107
|
+
const ctx = new context_1.ContractContext(contractName, contractView, chainId, block, undefined);
|
|
108
|
+
await handler(block, ctx);
|
|
109
|
+
return ctx.getProcessResult();
|
|
110
|
+
},
|
|
111
|
+
timeIntervalInMinutes: timeInterval,
|
|
112
|
+
blockInterval: blockInterval,
|
|
95
113
|
});
|
|
96
114
|
return this;
|
|
97
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-processor.js","sourceRoot":"","sources":["../../src/core/base-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { Event } from '@ethersproject/contracts'\nimport { BytesLike } from '@ethersproject/bytes'\nimport { Block, Log, getNetwork } from '@ethersproject/providers'\nimport { BaseContract, EventFilter } from '@ethersproject/contracts'\nimport Long from 'long'\n\nimport { BoundContractView, ContractContext, ContractView } from './context'\nimport { ProcessResult } from '../gen'\nimport { BindInternalOptions, BindOptions } from './bind-options'\nimport { PromiseOrVoid } from '../promise-or-void'\nimport { Trace } from './trace'\n\nexport class EventsHandler {\n filters: EventFilter[]\n handler: (event: Log) => Promise<ProcessResult>\n}\n\nexport class TraceHandler {\n signature: string\n handler: (trace: Trace) => Promise<ProcessResult>\n}\n\nexport abstract class BaseProcessor<\n TContract extends BaseContract,\n TBoundContractView extends BoundContractView<TContract, ContractView<TContract>>\n> {\n blockHandlers: ((block: Block) => Promise<ProcessResult>)[] = []\n eventHandlers: EventsHandler[] = []\n traceHandlers: TraceHandler[] = []\n\n config: BindInternalOptions\n\n constructor(config: BindOptions) {\n this.config = {\n address: config.address,\n name: config.name || '',\n network: config.network ? config.network : 1,\n startBlock: new Long(0),\n }\n if (config.startBlock) {\n if (typeof config.startBlock === 'number') {\n this.config.startBlock = Long.fromNumber(config.startBlock)\n } else {\n this.config.startBlock = config.startBlock\n }\n }\n if (config.endBlock) {\n if (typeof config.endBlock === 'number') {\n this.config.endBlock = Long.fromNumber(config.endBlock)\n } else {\n this.config.endBlock = config.endBlock\n }\n }\n }\n\n protected abstract CreateBoundContractView(): TBoundContractView\n\n public getChainId(): number {\n return getNetwork(this.config.network).chainId\n }\n\n public onEvent(\n handler: (event: Event, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n filter: EventFilter | EventFilter[]\n ) {\n const chainId = this.getChainId()\n\n let _filters: EventFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n const contractView = this.CreateBoundContractView()\n const contractName = this.config.name\n this.eventHandlers.push({\n filters: _filters,\n handler: async function (log) {\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n undefined,\n log\n )\n // let event: Event = <Event>deepCopy(log);\n const event: Event = <Event>log\n const parsed = contractView.rawContract.interface.parseLog(log)\n if (parsed) {\n event.args = parsed.args\n event.decode = (data: BytesLike, topics?: Array<any>) => {\n return contractView.rawContract.interface.decodeEventLog(parsed.eventFragment, data, topics)\n }\n event.event = parsed.name\n event.eventSignature = parsed.signature\n\n // TODO fix this bug\n await handler(event, ctx)\n return ctx.getProcessResult()\n }\n return ProcessResult.fromPartial({})\n },\n })\n return this\n }\n\n public onBlock(handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid) {\n const chainId = this.getChainId()\n const contractView = this.CreateBoundContractView()\n const contractName = this.config.name\n\n this.blockHandlers.push(async function (block: Block) {\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n block,\n undefined\n )\n await handler(block, ctx)\n return ctx.getProcessResult()\n })\n return this\n }\n\n public onAllEvents(handler: (event: Log, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid) {\n const _filters: EventFilter[] = []\n const tmpContract = this.CreateBoundContractView()\n\n for (const key in tmpContract.filters) {\n _filters.push(tmpContract.filters[key]())\n }\n return this.onEvent(function (log, ctx) {\n return handler(log, ctx)\n }, _filters)\n }\n\n protected onTrace(\n signature: string,\n handler: (trace: Trace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid\n ) {\n const chainId = this.getChainId()\n const contractView = this.CreateBoundContractView()\n const contractName = this.config.name\n\n this.traceHandlers.push({\n signature,\n handler: async function (trace: Trace) {\n const contractInterface = contractView.rawContract.interface\n const fragment = contractInterface.getFunction(signature)\n if (!trace.action.input) {\n return ProcessResult.fromPartial({})\n }\n const traceData = '0x' + trace.action.input.slice(10)\n trace.args = contractInterface._abiCoder.decode(fragment.inputs, traceData)\n\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n undefined,\n undefined,\n trace\n )\n await handler(trace, ctx)\n return ctx.getProcessResult()\n },\n })\n return this\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"base-processor.js","sourceRoot":"","sources":["../../src/core/base-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { Event } from '@ethersproject/contracts'\nimport { BytesLike } from '@ethersproject/bytes'\nimport { Block, Log, getNetwork } from '@ethersproject/providers'\nimport { BaseContract, EventFilter } from '@ethersproject/contracts'\nimport Long from 'long'\n\nimport { BoundContractView, ContractContext, ContractView } from './context'\nimport { ProcessResult } from '../gen'\nimport { BindInternalOptions, BindOptions } from './bind-options'\nimport { PromiseOrVoid } from '../promise-or-void'\nimport { Trace } from './trace'\nimport { MoveResource } from 'aptos-sdk/src/generated'\nimport { AptosResourceContext } from '../aptos'\nimport { MoveResourcesWithVersionPayload } from '../aptos/aptos-processor'\n\nexport class EventsHandler {\n filters: EventFilter[]\n handler: (event: Log) => Promise<ProcessResult>\n}\n\nexport class TraceHandler {\n signature: string\n handler: (trace: Trace) => Promise<ProcessResult>\n}\n\nclass BlockHandlder {\n blockInterval?: number\n timeIntervalInMinutes?: number\n handler: (block: Block) => Promise<ProcessResult>\n}\n\nexport abstract class BaseProcessor<\n TContract extends BaseContract,\n TBoundContractView extends BoundContractView<TContract, ContractView<TContract>>\n> {\n blockHandlers: BlockHandlder[] = []\n eventHandlers: EventsHandler[] = []\n traceHandlers: TraceHandler[] = []\n\n config: BindInternalOptions\n\n constructor(config: BindOptions) {\n this.config = {\n address: config.address,\n name: config.name || '',\n network: config.network ? config.network : 1,\n startBlock: new Long(0),\n }\n if (config.startBlock) {\n if (typeof config.startBlock === 'number') {\n this.config.startBlock = Long.fromNumber(config.startBlock)\n } else {\n this.config.startBlock = config.startBlock\n }\n }\n if (config.endBlock) {\n if (typeof config.endBlock === 'number') {\n this.config.endBlock = Long.fromNumber(config.endBlock)\n } else {\n this.config.endBlock = config.endBlock\n }\n }\n }\n\n protected abstract CreateBoundContractView(): TBoundContractView\n\n public getChainId(): number {\n return getNetwork(this.config.network).chainId\n }\n\n public onEvent(\n handler: (event: Event, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n filter: EventFilter | EventFilter[]\n ) {\n const chainId = this.getChainId()\n\n let _filters: EventFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n const contractView = this.CreateBoundContractView()\n const contractName = this.config.name\n this.eventHandlers.push({\n filters: _filters,\n handler: async function (log) {\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n undefined,\n log\n )\n // let event: Event = <Event>deepCopy(log);\n const event: Event = <Event>log\n const parsed = contractView.rawContract.interface.parseLog(log)\n if (parsed) {\n event.args = parsed.args\n event.decode = (data: BytesLike, topics?: Array<any>) => {\n return contractView.rawContract.interface.decodeEventLog(parsed.eventFragment, data, topics)\n }\n event.event = parsed.name\n event.eventSignature = parsed.signature\n\n // TODO fix this bug\n await handler(event, ctx)\n return ctx.getProcessResult()\n }\n return ProcessResult.fromPartial({})\n },\n })\n return this\n }\n\n public onBlock(handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid) {\n return this.onBlockInterval(handler, 1)\n }\n\n public onBlockInterval(\n handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n blockInterval = 240\n ) {\n return this.onInterval(handler, undefined, blockInterval)\n }\n\n public onTimeInterval(\n handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeIntervalInMinutes = 60\n ) {\n return this.onInterval(handler, timeIntervalInMinutes, undefined)\n }\n\n public onInterval(\n handler: (block: Block, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeInterval: number | undefined,\n blockInterval: number | undefined\n ) {\n const chainId = this.getChainId()\n const contractView = this.CreateBoundContractView()\n const contractName = this.config.name\n\n this.blockHandlers.push({\n handler: async function (block: Block) {\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n block,\n undefined\n )\n await handler(block, ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n blockInterval: blockInterval,\n })\n return this\n }\n\n public onAllEvents(handler: (event: Log, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid) {\n const _filters: EventFilter[] = []\n const tmpContract = this.CreateBoundContractView()\n\n for (const key in tmpContract.filters) {\n _filters.push(tmpContract.filters[key]())\n }\n return this.onEvent(function (log, ctx) {\n return handler(log, ctx)\n }, _filters)\n }\n\n protected onTrace(\n signature: string,\n handler: (trace: Trace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid\n ) {\n const chainId = this.getChainId()\n const contractView = this.CreateBoundContractView()\n const contractName = this.config.name\n\n this.traceHandlers.push({\n signature,\n handler: async function (trace: Trace) {\n const contractInterface = contractView.rawContract.interface\n const fragment = contractInterface.getFunction(signature)\n if (!trace.action.input) {\n return ProcessResult.fromPartial({})\n }\n const traceData = '0x' + trace.action.input.slice(10)\n trace.args = contractInterface._abiCoder.decode(fragment.inputs, traceData)\n\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n undefined,\n undefined,\n trace\n )\n await handler(trace, ctx)\n return ctx.getProcessResult()\n },\n })\n return this\n }\n}\n"]}
|
|
@@ -44,6 +44,7 @@ export interface ProcessConfigResponse {
|
|
|
44
44
|
export interface ContractConfig {
|
|
45
45
|
contract: ContractInfo | undefined;
|
|
46
46
|
blockConfigs: BlockHandlerConfig[];
|
|
47
|
+
intervalConfigs: OnIntervalConfig[];
|
|
47
48
|
logConfigs: LogHandlerConfig[];
|
|
48
49
|
traceConfigs: TraceHandlerConfig[];
|
|
49
50
|
aptosEventConfigs: AptosEventHandlerConfig[];
|
|
@@ -89,8 +90,8 @@ export interface AccountConfig {
|
|
|
89
90
|
chainId: string;
|
|
90
91
|
address: string;
|
|
91
92
|
startBlock: Long;
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
intervalConfigs: OnIntervalConfig[];
|
|
94
|
+
aptosIntervalConfigs: AptosOnIntervalConfig[];
|
|
94
95
|
}
|
|
95
96
|
export interface OnIntervalConfig {
|
|
96
97
|
handlerId: number;
|
|
@@ -418,6 +418,7 @@ function createBaseContractConfig() {
|
|
|
418
418
|
return {
|
|
419
419
|
contract: undefined,
|
|
420
420
|
blockConfigs: [],
|
|
421
|
+
intervalConfigs: [],
|
|
421
422
|
logConfigs: [],
|
|
422
423
|
traceConfigs: [],
|
|
423
424
|
aptosEventConfigs: [],
|
|
@@ -436,6 +437,9 @@ exports.ContractConfig = {
|
|
|
436
437
|
for (const v of message.blockConfigs) {
|
|
437
438
|
exports.BlockHandlerConfig.encode(v, writer.uint32(58).fork()).ldelim();
|
|
438
439
|
}
|
|
440
|
+
for (const v of message.intervalConfigs) {
|
|
441
|
+
exports.OnIntervalConfig.encode(v, writer.uint32(90).fork()).ldelim();
|
|
442
|
+
}
|
|
439
443
|
for (const v of message.logConfigs) {
|
|
440
444
|
exports.LogHandlerConfig.encode(v, writer.uint32(26).fork()).ldelim();
|
|
441
445
|
}
|
|
@@ -475,6 +479,9 @@ exports.ContractConfig = {
|
|
|
475
479
|
case 7:
|
|
476
480
|
message.blockConfigs.push(exports.BlockHandlerConfig.decode(reader, reader.uint32()));
|
|
477
481
|
break;
|
|
482
|
+
case 11:
|
|
483
|
+
message.intervalConfigs.push(exports.OnIntervalConfig.decode(reader, reader.uint32()));
|
|
484
|
+
break;
|
|
478
485
|
case 3:
|
|
479
486
|
message.logConfigs.push(exports.LogHandlerConfig.decode(reader, reader.uint32()));
|
|
480
487
|
break;
|
|
@@ -514,6 +521,9 @@ exports.ContractConfig = {
|
|
|
514
521
|
blockConfigs: Array.isArray(object?.blockConfigs)
|
|
515
522
|
? object.blockConfigs.map((e) => exports.BlockHandlerConfig.fromJSON(e))
|
|
516
523
|
: [],
|
|
524
|
+
intervalConfigs: Array.isArray(object?.intervalConfigs)
|
|
525
|
+
? object.intervalConfigs.map((e) => exports.OnIntervalConfig.fromJSON(e))
|
|
526
|
+
: [],
|
|
517
527
|
logConfigs: Array.isArray(object?.logConfigs)
|
|
518
528
|
? object.logConfigs.map((e) => exports.LogHandlerConfig.fromJSON(e))
|
|
519
529
|
: [],
|
|
@@ -552,6 +562,12 @@ exports.ContractConfig = {
|
|
|
552
562
|
else {
|
|
553
563
|
obj.blockConfigs = [];
|
|
554
564
|
}
|
|
565
|
+
if (message.intervalConfigs) {
|
|
566
|
+
obj.intervalConfigs = message.intervalConfigs.map((e) => e ? exports.OnIntervalConfig.toJSON(e) : undefined);
|
|
567
|
+
}
|
|
568
|
+
else {
|
|
569
|
+
obj.intervalConfigs = [];
|
|
570
|
+
}
|
|
555
571
|
if (message.logConfigs) {
|
|
556
572
|
obj.logConfigs = message.logConfigs.map((e) => e ? exports.LogHandlerConfig.toJSON(e) : undefined);
|
|
557
573
|
}
|
|
@@ -596,6 +612,8 @@ exports.ContractConfig = {
|
|
|
596
612
|
: undefined;
|
|
597
613
|
message.blockConfigs =
|
|
598
614
|
object.blockConfigs?.map((e) => exports.BlockHandlerConfig.fromPartial(e)) || [];
|
|
615
|
+
message.intervalConfigs =
|
|
616
|
+
object.intervalConfigs?.map((e) => exports.OnIntervalConfig.fromPartial(e)) || [];
|
|
599
617
|
message.logConfigs =
|
|
600
618
|
object.logConfigs?.map((e) => exports.LogHandlerConfig.fromPartial(e)) || [];
|
|
601
619
|
message.traceConfigs =
|
|
@@ -984,8 +1002,8 @@ function createBaseAccountConfig() {
|
|
|
984
1002
|
chainId: "",
|
|
985
1003
|
address: "",
|
|
986
1004
|
startBlock: long_1.default.UZERO,
|
|
987
|
-
|
|
988
|
-
|
|
1005
|
+
intervalConfigs: [],
|
|
1006
|
+
aptosIntervalConfigs: [],
|
|
989
1007
|
};
|
|
990
1008
|
}
|
|
991
1009
|
exports.AccountConfig = {
|
|
@@ -999,10 +1017,10 @@ exports.AccountConfig = {
|
|
|
999
1017
|
if (!message.startBlock.isZero()) {
|
|
1000
1018
|
writer.uint32(24).uint64(message.startBlock);
|
|
1001
1019
|
}
|
|
1002
|
-
for (const v of message.
|
|
1020
|
+
for (const v of message.intervalConfigs) {
|
|
1003
1021
|
exports.OnIntervalConfig.encode(v, writer.uint32(34).fork()).ldelim();
|
|
1004
1022
|
}
|
|
1005
|
-
for (const v of message.
|
|
1023
|
+
for (const v of message.aptosIntervalConfigs) {
|
|
1006
1024
|
exports.AptosOnIntervalConfig.encode(v, writer.uint32(42).fork()).ldelim();
|
|
1007
1025
|
}
|
|
1008
1026
|
return writer;
|
|
@@ -1024,10 +1042,10 @@ exports.AccountConfig = {
|
|
|
1024
1042
|
message.startBlock = reader.uint64();
|
|
1025
1043
|
break;
|
|
1026
1044
|
case 4:
|
|
1027
|
-
message.
|
|
1045
|
+
message.intervalConfigs.push(exports.OnIntervalConfig.decode(reader, reader.uint32()));
|
|
1028
1046
|
break;
|
|
1029
1047
|
case 5:
|
|
1030
|
-
message.
|
|
1048
|
+
message.aptosIntervalConfigs.push(exports.AptosOnIntervalConfig.decode(reader, reader.uint32()));
|
|
1031
1049
|
break;
|
|
1032
1050
|
default:
|
|
1033
1051
|
reader.skipType(tag & 7);
|
|
@@ -1043,11 +1061,11 @@ exports.AccountConfig = {
|
|
|
1043
1061
|
startBlock: isSet(object.startBlock)
|
|
1044
1062
|
? long_1.default.fromValue(object.startBlock)
|
|
1045
1063
|
: long_1.default.UZERO,
|
|
1046
|
-
|
|
1047
|
-
? object.
|
|
1064
|
+
intervalConfigs: Array.isArray(object?.intervalConfigs)
|
|
1065
|
+
? object.intervalConfigs.map((e) => exports.OnIntervalConfig.fromJSON(e))
|
|
1048
1066
|
: [],
|
|
1049
|
-
|
|
1050
|
-
? object.
|
|
1067
|
+
aptosIntervalConfigs: Array.isArray(object?.aptosIntervalConfigs)
|
|
1068
|
+
? object.aptosIntervalConfigs.map((e) => exports.AptosOnIntervalConfig.fromJSON(e))
|
|
1051
1069
|
: [],
|
|
1052
1070
|
};
|
|
1053
1071
|
},
|
|
@@ -1057,17 +1075,17 @@ exports.AccountConfig = {
|
|
|
1057
1075
|
message.address !== undefined && (obj.address = message.address);
|
|
1058
1076
|
message.startBlock !== undefined &&
|
|
1059
1077
|
(obj.startBlock = (message.startBlock || long_1.default.UZERO).toString());
|
|
1060
|
-
if (message.
|
|
1061
|
-
obj.
|
|
1078
|
+
if (message.intervalConfigs) {
|
|
1079
|
+
obj.intervalConfigs = message.intervalConfigs.map((e) => e ? exports.OnIntervalConfig.toJSON(e) : undefined);
|
|
1062
1080
|
}
|
|
1063
1081
|
else {
|
|
1064
|
-
obj.
|
|
1082
|
+
obj.intervalConfigs = [];
|
|
1065
1083
|
}
|
|
1066
|
-
if (message.
|
|
1067
|
-
obj.
|
|
1084
|
+
if (message.aptosIntervalConfigs) {
|
|
1085
|
+
obj.aptosIntervalConfigs = message.aptosIntervalConfigs.map((e) => e ? exports.AptosOnIntervalConfig.toJSON(e) : undefined);
|
|
1068
1086
|
}
|
|
1069
1087
|
else {
|
|
1070
|
-
obj.
|
|
1088
|
+
obj.aptosIntervalConfigs = [];
|
|
1071
1089
|
}
|
|
1072
1090
|
return obj;
|
|
1073
1091
|
},
|
|
@@ -1079,11 +1097,10 @@ exports.AccountConfig = {
|
|
|
1079
1097
|
object.startBlock !== undefined && object.startBlock !== null
|
|
1080
1098
|
? long_1.default.fromValue(object.startBlock)
|
|
1081
1099
|
: long_1.default.UZERO;
|
|
1082
|
-
message.
|
|
1083
|
-
object.
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
object.onAptosIntervalConfigs?.map((e) => exports.AptosOnIntervalConfig.fromPartial(e)) || [];
|
|
1100
|
+
message.intervalConfigs =
|
|
1101
|
+
object.intervalConfigs?.map((e) => exports.OnIntervalConfig.fromPartial(e)) || [];
|
|
1102
|
+
message.aptosIntervalConfigs =
|
|
1103
|
+
object.aptosIntervalConfigs?.map((e) => exports.AptosOnIntervalConfig.fromPartial(e)) || [];
|
|
1087
1104
|
return message;
|
|
1088
1105
|
},
|
|
1089
1106
|
};
|