@sentio/sdk 1.26.0 → 1.26.1
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/aptos-processor.d.ts +1 -0
- package/lib/aptos/aptos-processor.js +2 -1
- package/lib/aptos/aptos-processor.js.map +1 -1
- package/lib/aptos/context.d.ts +2 -1
- package/lib/aptos/context.js +3 -1
- package/lib/aptos/context.js.map +1 -1
- package/lib/aptos/index.d.ts +1 -1
- package/lib/aptos/index.js +2 -1
- package/lib/aptos/index.js.map +1 -1
- package/lib/core/context.d.ts +2 -5
- package/lib/core/context.js +8 -11
- package/lib/core/context.js.map +1 -1
- package/lib/core/event-tracker.js +1 -1
- package/lib/core/event-tracker.js.map +1 -1
- package/lib/core/exporter.d.ts +14 -0
- package/lib/core/exporter.js +27 -0
- package/lib/core/exporter.js.map +1 -0
- package/lib/core/logger.js +1 -1
- package/lib/core/logger.js.map +1 -1
- package/lib/core/meter.js +2 -2
- package/lib/core/meter.js.map +1 -1
- package/lib/gen/processor/protos/processor.d.ts +32 -0
- package/lib/gen/processor/protos/processor.js +206 -3
- package/lib/gen/processor/protos/processor.js.map +1 -1
- package/lib/processor-state.d.ts +2 -0
- package/lib/processor-state.js +1 -0
- package/lib/processor-state.js.map +1 -1
- package/lib/service.d.ts +1 -0
- package/lib/service.js +19 -16
- package/lib/service.js.map +1 -1
- package/lib/tests/erc20.js +7 -0
- package/lib/tests/erc20.js.map +1 -1
- package/package.json +1 -1
- package/src/aptos/aptos-processor.ts +7 -1
- package/src/aptos/context.ts +3 -1
- package/src/aptos/index.ts +1 -1
- package/src/core/context.ts +10 -20
- package/src/core/event-tracker.ts +1 -1
- package/src/core/exporter.ts +33 -0
- package/src/core/logger.ts +1 -1
- package/src/core/meter.ts +2 -2
- package/src/gen/processor/protos/processor.ts +250 -1
- package/src/processor-state.ts +3 -0
- package/src/service.ts +21 -18
- package/src/tests/erc20.ts +7 -0
package/lib/processor-state.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { Provider } from '@ethersproject/providers';
|
|
|
6
6
|
import { EventTracker } from './core';
|
|
7
7
|
import { Metric } from './core/meter';
|
|
8
8
|
import { AptosAccountProcessor } from './aptos/aptos-processor';
|
|
9
|
+
import { Exporter } from './core/exporter';
|
|
9
10
|
export declare class ProcessorState {
|
|
10
11
|
contracts: Map<string, ContractView<BaseContract>>;
|
|
11
12
|
processors: BaseProcessor<BaseContract, BoundContractView<BaseContract, any>>[];
|
|
@@ -18,5 +19,6 @@ export declare class ProcessorState {
|
|
|
18
19
|
aptosProcessors: AptosBaseProcessor[];
|
|
19
20
|
aptosAccountProcessors: AptosAccountProcessor[];
|
|
20
21
|
eventTrackers: EventTracker[];
|
|
22
|
+
exporters: Exporter[];
|
|
21
23
|
metrics: Metric[];
|
|
22
24
|
}
|
package/lib/processor-state.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processor-state.js","sourceRoot":"","sources":["../src/processor-state.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"processor-state.js","sourceRoot":"","sources":["../src/processor-state.ts"],"names":[],"mappings":";;;AAmBA,MAAa,cAAc;IACzB,mDAAmD;IACnD,SAAS,GAAG,IAAI,GAAG,EAAsC,CAAA;IACzD,qBAAqB;IACrB,UAAU,GAAwE,EAAE,CAAA;IACpF,oCAAoC;IACpC,YAAY,GAAG,IAAI,GAAG,EAAmC,CAAA;IACzD,gBAAgB;IAChB,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAA;IACvC,0BAA0B;IAC1B,SAAS,GAAgF,EAAE,CAAA;IAC3F,wCAAwC;IACxC,kBAAkB,GAAuB,EAAE,CAAA;IAE3C,gBAAgB,GAA0B,EAAE,CAAA;IAE5C,aAAa,GAAuB,EAAE,CAAA;IAEtC,eAAe,GAAyB,EAAE,CAAA;IAC1C,sBAAsB,GAA4B,EAAE,CAAA;IAEpD,aAAa,GAAmB,EAAE,CAAA;IAElC,SAAS,GAAe,EAAE,CAAA;IAE1B,OAAO,GAAa,EAAE,CAAA;CACvB;AA1BD,wCA0BC","sourcesContent":["import {\n BaseProcessor,\n BoundContractView,\n ContractView,\n BaseProcessorTemplate,\n SolanaBaseProcessor,\n SuiBaseProcessor,\n} from './core'\n\nimport { AptosBaseProcessor } from './aptos'\n\nimport { BaseContract } from 'ethers'\nimport { TemplateInstance } from './gen'\nimport { Provider } from '@ethersproject/providers'\nimport { EventTracker } from './core'\nimport { Metric } from './core/meter'\nimport { AptosAccountProcessor } from './aptos/aptos-processor'\nimport { Exporter } from './core/exporter'\n\nexport class ProcessorState {\n // from abiName_address_chainId => contract wrapper\n contracts = new Map<string, ContractView<BaseContract>>()\n // all evm processors\n processors: BaseProcessor<BaseContract, BoundContractView<BaseContract, any>>[] = []\n // from abiName_options to contracts\n processorMap = new Map<string, BaseProcessor<any, any>>()\n // evm providers\n providers = new Map<number, Provider>()\n // evm processor templates\n templates: BaseProcessorTemplate<BaseContract, BoundContractView<BaseContract, any>>[] = []\n // evm processor template instances spec\n templatesInstances: TemplateInstance[] = []\n\n solanaProcessors: SolanaBaseProcessor[] = []\n\n suiProcessors: SuiBaseProcessor[] = []\n\n aptosProcessors: AptosBaseProcessor[] = []\n aptosAccountProcessors: AptosAccountProcessor[] = []\n\n eventTrackers: EventTracker[] = []\n\n exporters: Exporter[] = []\n\n metrics: Metric[] = []\n}\n"]}
|
package/lib/service.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare class ProcessorServiceImpl implements ProcessorServiceImplementat
|
|
|
14
14
|
private templateInstances;
|
|
15
15
|
private metricConfigs;
|
|
16
16
|
private eventTrackingConfigs;
|
|
17
|
+
private exportConfigs;
|
|
17
18
|
private readonly loader;
|
|
18
19
|
private readonly shutdownHandler?;
|
|
19
20
|
constructor(loader: () => void, shutdownHandler?: () => void);
|
package/lib/service.js
CHANGED
|
@@ -27,6 +27,7 @@ class ProcessorServiceImpl {
|
|
|
27
27
|
templateInstances;
|
|
28
28
|
metricConfigs;
|
|
29
29
|
eventTrackingConfigs;
|
|
30
|
+
exportConfigs;
|
|
30
31
|
loader;
|
|
31
32
|
shutdownHandler;
|
|
32
33
|
constructor(loader, shutdownHandler) {
|
|
@@ -41,10 +42,11 @@ class ProcessorServiceImpl {
|
|
|
41
42
|
// TODO project setting
|
|
42
43
|
config: undefined,
|
|
43
44
|
contractConfigs: this.contractConfigs,
|
|
45
|
+
accountConfigs: this.accountConfigs,
|
|
44
46
|
templateInstances: this.templateInstances,
|
|
45
47
|
eventTrackingConfigs: this.eventTrackingConfigs,
|
|
46
48
|
metricConfigs: this.metricConfigs,
|
|
47
|
-
|
|
49
|
+
exportConfigs: this.exportConfigs,
|
|
48
50
|
};
|
|
49
51
|
}
|
|
50
52
|
async configure() {
|
|
@@ -56,6 +58,7 @@ class ProcessorServiceImpl {
|
|
|
56
58
|
this.templateInstances = [...global.PROCESSOR_STATE.templatesInstances];
|
|
57
59
|
this.eventTrackingConfigs = [];
|
|
58
60
|
this.metricConfigs = [];
|
|
61
|
+
this.exportConfigs = [];
|
|
59
62
|
// part 0, prepare metrics and event tracking configs
|
|
60
63
|
for (const metric of global.PROCESSOR_STATE.metrics) {
|
|
61
64
|
this.metricConfigs.push({
|
|
@@ -72,6 +75,13 @@ class ProcessorServiceImpl {
|
|
|
72
75
|
unique: eventTracker.options.unique || false,
|
|
73
76
|
});
|
|
74
77
|
}
|
|
78
|
+
for (const exporter of global.PROCESSOR_STATE.exporters) {
|
|
79
|
+
this.exportConfigs.push({
|
|
80
|
+
exportName: exporter.exportName,
|
|
81
|
+
exportType: exporter.options.exportType,
|
|
82
|
+
exportUrl: exporter.options.exportUrl,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
75
85
|
// Part 1, prepare EVM processors
|
|
76
86
|
for (const processor of global.PROCESSOR_STATE.processors) {
|
|
77
87
|
// If server favor incremental update this need to change
|
|
@@ -605,25 +615,18 @@ function mergeProcessResults(results) {
|
|
|
605
615
|
res.gauges = res.gauges.concat(r.gauges);
|
|
606
616
|
res.logs = res.logs.concat(r.logs);
|
|
607
617
|
res.events = res.events.concat(r.events);
|
|
618
|
+
res.exports = res.exports.concat(r.exports);
|
|
608
619
|
}
|
|
609
620
|
return res;
|
|
610
621
|
}
|
|
611
622
|
function recordRuntimeInfo(results, handlerType) {
|
|
612
|
-
results.gauges.
|
|
613
|
-
e
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
from: handlerType,
|
|
620
|
-
};
|
|
621
|
-
});
|
|
622
|
-
results.logs.forEach((e) => {
|
|
623
|
-
e.runtimeInfo = {
|
|
624
|
-
from: handlerType,
|
|
625
|
-
};
|
|
626
|
-
});
|
|
623
|
+
for (const list of [results.gauges, results.counters, results.logs, results.events, results.exports]) {
|
|
624
|
+
list.forEach((e) => {
|
|
625
|
+
e.runtimeInfo = {
|
|
626
|
+
from: handlerType,
|
|
627
|
+
};
|
|
628
|
+
});
|
|
629
|
+
}
|
|
627
630
|
}
|
|
628
631
|
function errorString(e) {
|
|
629
632
|
return e.stack || e.message;
|
package/lib/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Block, Log } from '@ethersproject/abstract-provider'\nimport { CallContext, ServerError, Status } from 'nice-grpc'\nimport { SOL_MAINMET_ID, SUI_DEVNET_ID } from './utils/chain'\n\nimport {\n AccountConfig,\n AptosCallHandlerConfig,\n AptosEventHandlerConfig,\n BlockBinding,\n ContractConfig,\n DataBinding,\n EventTrackingConfig,\n HandlerType,\n LogFilter,\n LogHandlerConfig,\n MetricConfig,\n ProcessBindingResponse,\n ProcessBindingsRequest,\n ProcessBlocksRequest,\n ProcessConfigRequest,\n ProcessConfigResponse,\n ProcessInstructionsRequest,\n ProcessorServiceImplementation,\n ProcessResult,\n ProcessTransactionsRequest,\n StartRequest,\n TemplateInstance,\n} from './gen'\n\nimport { Empty } from './gen/google/protobuf/empty'\nimport Long from 'long'\nimport { TextDecoder } from 'util'\nimport { Trace } from './core'\nimport { Instruction } from '@project-serum/anchor'\nimport { MoveResourcesWithVersionPayload } from './aptos/aptos-processor'\n\nconst DEFAULT_MAX_BLOCK = Long.ZERO\n\nconst USER_PROCESSOR = 'user_processor'\n\nexport class ProcessorServiceImpl implements ProcessorServiceImplementation {\n private eventHandlers: ((event: Log) => Promise<ProcessResult>)[] = []\n private traceHandlers: ((trace: Trace) => Promise<ProcessResult>)[] = []\n private blockHandlers: ((block: Block) => Promise<ProcessResult>)[] = []\n private aptosEventHandlers: ((event: any) => Promise<ProcessResult>)[] = []\n private aptosCallHandlers: ((func: any) => Promise<ProcessResult>)[] = []\n private aptosResourceHandlers: ((resourceWithVersion: MoveResourcesWithVersionPayload) => Promise<ProcessResult>)[] =\n []\n\n // map from chain id to list of processors\n // private blockHandlers = new Map<string, ((block: Block) => Promise<ProcessResult>)[]>()\n // private processorsByChainId = new Map<string, BaseProcessor<BaseContract, BoundContractView<BaseContract, any>>>()\n\n private started = false\n private contractConfigs: ContractConfig[]\n private accountConfigs: AccountConfig[]\n private templateInstances: TemplateInstance[]\n private metricConfigs: MetricConfig[]\n private eventTrackingConfigs: EventTrackingConfig[]\n private readonly loader: () => void\n\n private readonly shutdownHandler?: () => void\n\n constructor(loader: () => void, shutdownHandler?: () => void) {\n this.loader = loader\n this.shutdownHandler = shutdownHandler\n }\n\n async getConfig(request: ProcessConfigRequest, context: CallContext): Promise<ProcessConfigResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')\n }\n return {\n // TODO project setting\n config: undefined,\n contractConfigs: this.contractConfigs,\n templateInstances: this.templateInstances,\n eventTrackingConfigs: this.eventTrackingConfigs,\n metricConfigs: this.metricConfigs,\n accountConfigs: this.accountConfigs,\n }\n }\n\n async configure() {\n this.eventHandlers = []\n this.templateInstances = []\n // this.processorsByChainId.clear()\n this.contractConfigs = []\n this.accountConfigs = []\n\n this.templateInstances = [...global.PROCESSOR_STATE.templatesInstances]\n this.eventTrackingConfigs = []\n this.metricConfigs = []\n\n // part 0, prepare metrics and event tracking configs\n for (const metric of global.PROCESSOR_STATE.metrics) {\n this.metricConfigs.push({\n ...metric.descriptor,\n })\n }\n\n for (const eventTracker of global.PROCESSOR_STATE.eventTrackers) {\n this.eventTrackingConfigs.push({\n distinctAggregationByDays: eventTracker.options.distinctByDays || [],\n eventName: eventTracker.eventName,\n retentionConfig: undefined,\n totalByDay: eventTracker.options.totalByDay || false,\n totalPerEntity: undefined,\n unique: eventTracker.options.unique || false,\n })\n }\n\n // Part 1, prepare EVM processors\n for (const processor of global.PROCESSOR_STATE.processors) {\n // If server favor incremental update this need to change\n // Start basic config for contract\n const chainId = processor.getChainId()\n // this.processorsByChainId.set(chainId, processor)\n\n const contractConfig: ContractConfig = {\n processorType: USER_PROCESSOR,\n contract: {\n name: processor.config.name,\n chainId: chainId.toString(),\n address: processor.config.address,\n abi: '',\n },\n blockConfigs: [],\n logConfigs: [],\n traceConfigs: [],\n startBlock: processor.config.startBlock,\n endBlock: DEFAULT_MAX_BLOCK,\n instructionConfig: undefined,\n aptosEventConfigs: [],\n aptosCallConfigs: [],\n }\n if (processor.config.endBlock) {\n contractConfig.endBlock = processor.config.endBlock\n }\n\n // Step 1. Prepare all the block handlers\n for (const blockHandler of processor.blockHandlers) {\n const handlerId = this.blockHandlers.push(blockHandler) - 1\n // TODO wrap the block handler into one\n\n contractConfig.blockConfigs.push({\n handlerId: handlerId,\n })\n }\n\n // Step 2. Prepare all trace handlers\n for (const traceHandler of processor.traceHandlers) {\n const handlerId = this.traceHandlers.push(traceHandler.handler) - 1\n contractConfig.traceConfigs.push({\n signature: traceHandler.signature,\n handlerId: handlerId,\n })\n }\n\n // Step 3. Prepare all the event handlers\n for (const eventsHandler of processor.eventHandlers) {\n // associate id with filter\n const handlerId = this.eventHandlers.push(eventsHandler.handler) - 1\n const logConfig: LogHandlerConfig = {\n handlerId: handlerId,\n filters: [],\n }\n\n for (const filter of eventsHandler.filters) {\n if (!filter.topics) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Topic should not be null')\n }\n const logFilter: LogFilter = {\n topics: [],\n }\n\n for (const ts of filter.topics) {\n let hashes: string[] = []\n if (Array.isArray(ts)) {\n hashes = hashes.concat(ts)\n } else if (ts) {\n hashes.push(ts)\n }\n logFilter.topics.push({ hashes: hashes })\n }\n logConfig.filters.push(logFilter)\n }\n contractConfig.logConfigs.push(logConfig)\n }\n\n // Finish up a contract\n this.contractConfigs.push(contractConfig)\n }\n\n // Part 2, prepare solana constractors\n for (const solanaProcessor of global.PROCESSOR_STATE.solanaProcessors) {\n const contractConfig: ContractConfig = {\n processorType: USER_PROCESSOR,\n contract: {\n name: solanaProcessor.contractName,\n chainId: SOL_MAINMET_ID,\n address: solanaProcessor.address,\n abi: '',\n },\n blockConfigs: [],\n logConfigs: [],\n traceConfigs: [],\n startBlock: solanaProcessor.config.startSlot,\n endBlock: DEFAULT_MAX_BLOCK,\n instructionConfig: {\n innerInstruction: solanaProcessor.processInnerInstruction,\n parsedInstruction: solanaProcessor.fromParsedInstruction !== null,\n rawDataInstruction: solanaProcessor.decodeInstruction !== null,\n },\n aptosEventConfigs: [],\n aptosCallConfigs: [],\n }\n this.contractConfigs.push(contractConfig)\n }\n\n // Part 3, prepare sui constractors\n for (const suiProcessor of global.PROCESSOR_STATE.suiProcessors) {\n const contractConfig: ContractConfig = {\n processorType: USER_PROCESSOR,\n contract: {\n name: 'sui contract',\n chainId: SUI_DEVNET_ID,\n address: suiProcessor.address,\n abi: '',\n },\n blockConfigs: [],\n logConfigs: [],\n traceConfigs: [],\n startBlock: suiProcessor.config.startSeqNumber,\n endBlock: DEFAULT_MAX_BLOCK,\n instructionConfig: undefined,\n aptosEventConfigs: [],\n aptosCallConfigs: [],\n }\n this.contractConfigs.push(contractConfig)\n }\n\n // Part 4, prepare aptos constractors\n for (const aptosProcessor of global.PROCESSOR_STATE.aptosProcessors) {\n const contractConfig: ContractConfig = {\n processorType: USER_PROCESSOR,\n contract: {\n name: aptosProcessor.moduleName,\n chainId: aptosProcessor.getChainId(),\n address: aptosProcessor.config.address,\n abi: '',\n },\n blockConfigs: [],\n logConfigs: [],\n traceConfigs: [],\n startBlock: Long.fromString(aptosProcessor.config.startVersion.toString()),\n endBlock: DEFAULT_MAX_BLOCK,\n instructionConfig: undefined,\n aptosEventConfigs: [],\n aptosCallConfigs: [],\n }\n // 1. Prepare event handlers\n for (const handler of aptosProcessor.eventHandlers) {\n const handlerId = this.aptosEventHandlers.push(handler.handler) - 1\n const eventHandlerConfig: AptosEventHandlerConfig = {\n filters: handler.filters.map((f) => {\n return {\n type: f.type,\n account: f.account || '',\n }\n }),\n handlerId,\n }\n contractConfig.aptosEventConfigs.push(eventHandlerConfig)\n }\n\n // 2. Prepare function handlers\n for (const handler of aptosProcessor.callHandlers) {\n const handlerId = this.aptosCallHandlers.push(handler.handler) - 1\n const functionHandlerConfig: AptosCallHandlerConfig = {\n filters: handler.filters.map((filter) => {\n return {\n function: filter.function,\n typeArguments: filter.typeArguments || [],\n withTypeArguments: filter.typeArguments ? true : false,\n includeFailed: filter.includeFailed || false,\n }\n }),\n handlerId,\n }\n contractConfig.aptosCallConfigs.push(functionHandlerConfig)\n }\n this.contractConfigs.push(contractConfig)\n }\n\n for (const aptosProcessor of global.PROCESSOR_STATE.aptosAccountProcessors) {\n const accountConfig: AccountConfig = {\n address: aptosProcessor.config.address,\n chainId: aptosProcessor.getChainId(),\n startBlock: Long.fromValue(aptosProcessor.config.startVersion.toString()),\n onAptosIntervalConfigs: [],\n onIntervalConfigs: [],\n }\n for (const handler of aptosProcessor.resourcesHandlers) {\n const handlerId = this.aptosResourceHandlers.push(handler.handler) - 1\n accountConfig.onAptosIntervalConfigs.push({\n intervalConfig: {\n handlerId: handlerId,\n minutes: handler.timeIntervalInMinutes || 0,\n slot: handler.versionInterval || 0,\n },\n type: handler.type || '',\n })\n }\n this.accountConfigs.push(accountConfig)\n }\n }\n\n async start(request: StartRequest, context: CallContext): Promise<Empty> {\n if (this.started) {\n return {}\n }\n\n try {\n this.loader()\n } catch (e) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Failed to load processor: ' + errorString(e))\n }\n\n for (const instance of request.templateInstances) {\n const template = global.PROCESSOR_STATE.templates[instance.templateId]\n if (!template) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Invalid template contract:' + instance)\n }\n if (!instance.contract) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Contract Empty from:' + instance)\n }\n template.bind({\n name: instance.contract.name,\n address: instance.contract.address,\n network: Number(instance.contract.chainId),\n startBlock: instance.startBlock,\n endBlock: instance.endBlock,\n })\n }\n try {\n await this.configure()\n } catch (e) {\n throw new ServerError(Status.INTERNAL, 'Failed to start processor : ' + errorString(e))\n }\n this.started = true\n return {}\n }\n\n async stop(request: Empty, context: CallContext): Promise<Empty> {\n console.log('Server Shutting down in 5 seconds')\n if (this.shutdownHandler) {\n setTimeout(this.shutdownHandler, 5000)\n }\n return {}\n }\n\n async processBindings(request: ProcessBindingsRequest, options?: CallContext): Promise<ProcessBindingResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')\n }\n\n const promises = request.bindings.map((binding) => this.processBinding(binding))\n const result = mergeProcessResults(await Promise.all(promises))\n\n let updated = false\n if (\n global.PROCESSOR_STATE.templatesInstances &&\n this.templateInstances.length != global.PROCESSOR_STATE.templatesInstances.length\n ) {\n await this.configure()\n updated = true\n }\n\n return {\n result,\n configUpdated: updated,\n }\n }\n\n async processBinding(request: DataBinding, options?: CallContext): Promise<ProcessResult> {\n switch (request.handlerType) {\n case HandlerType.APT_CALL:\n return this.processAptosFunctionCall(request)\n case HandlerType.APT_EVENT:\n return this.processAptosEvent(request)\n case HandlerType.APT_RESOURCE:\n return this.processAptosResource(request)\n default:\n throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)\n }\n }\n\n async processLogs(request: ProcessBindingsRequest, context: CallContext): Promise<ProcessBindingResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')\n }\n\n const promises: Promise<ProcessResult>[] = []\n for (const l of request.bindings) {\n if (!l.data) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Log can't be null\")\n }\n // const jsonString = Buffer.from(l.log.raw.buffer).toString(\"utf-8\")\n // const jsonString = String.fromCharCode.apply(null, l.log.raw)\n\n try {\n const jsonString = Utf8ArrayToStr(l.data.raw)\n const log: Log = JSON.parse(jsonString)\n const handler = this.eventHandlers[l.handlerId]\n const promise = handler(log).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing log: ' + jsonString + '\\n' + errorString(e))\n })\n\n promises.push(promise)\n } catch (e) {\n throw new ServerError(Status.INTERNAL, 'error parse log: ' + l)\n }\n }\n\n const result = mergeProcessResults(await Promise.all(promises))\n\n let updated = false\n if (\n global.PROCESSOR_STATE.templatesInstances &&\n this.templateInstances.length != global.PROCESSOR_STATE.templatesInstances.length\n ) {\n await this.configure()\n updated = true\n }\n\n recordRuntimeInfo(result, HandlerType.ETH_LOG)\n return {\n result,\n configUpdated: updated,\n }\n }\n\n async processTransactions(\n request: ProcessTransactionsRequest,\n context: CallContext\n ): Promise<ProcessBindingResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service not started.')\n }\n\n const result = ProcessResult.fromPartial({})\n\n if (request.chainId.toLowerCase().startsWith('sui') && global.PROCESSOR_STATE.suiProcessors) {\n const processorPromises: Promise<void>[] = []\n for (const txn of request.transactions) {\n processorPromises.push(\n new Promise((resolve, _) => {\n for (const processor of global.PROCESSOR_STATE.suiProcessors) {\n const res = processor.handleTransaction(\n JSON.parse(new TextDecoder().decode(txn.raw)),\n txn.slot ?? Long.fromNumber(0)\n )\n if (res) {\n res.gauges.forEach((g) => result.gauges.push(g))\n res.counters.forEach((c) => result.counters.push(c))\n res.logs.forEach((l) => result.logs.push(l))\n }\n }\n resolve()\n })\n )\n }\n await Promise.all(processorPromises)\n }\n\n // if (request.chainId.toLowerCase().startsWith('apt') && global.PROCESSOR_STATE.aptosProcessors) {\n // const processorPromises: Promise<void>[] = []\n // for (const txn of request.transactions) {\n // processorPromises.push(\n // new Promise((resolve, _) => {\n // for (const processor of global.PROCESSOR_STATE.aptosProcessors) {\n // if (processor.address === txn.programAccountId!) {\n // const res = processor.handleTransaction(\n // JSON.parse(new TextDecoder().decode(txn.raw)),\n // txn.slot ?? Long.fromNumber(0)\n // )\n // if (res) {\n // res.gauges.forEach((g) => result.gauges.push(g))\n // res.counters.forEach((c) => result.counters.push(c))\n // res.logs.forEach((l) => result.logs.push(l))\n // }\n // }\n // }\n // resolve()\n // })\n // )\n // }\n // await Promise.all(processorPromises)\n // }\n\n recordRuntimeInfo(result, HandlerType.TRANSACTION)\n return {\n result,\n configUpdated: false,\n }\n }\n\n async processInstructions(\n request: ProcessInstructionsRequest,\n context: CallContext\n ): Promise<ProcessBindingResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service not started.')\n }\n\n const result = ProcessResult.fromPartial({})\n\n // Only have instruction handlers for solana processors\n if (global.PROCESSOR_STATE.solanaProcessors) {\n const processorPromises: Promise<void>[] = []\n for (const instruction of request.instructions) {\n if (!instruction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'instruction cannot be null')\n }\n\n processorPromises.push(\n new Promise((resolve, _) => {\n for (const processor of global.PROCESSOR_STATE.solanaProcessors) {\n if (processor.address === instruction.programAccountId) {\n let parsedInstruction: Instruction | null = null\n if (instruction.parsed) {\n parsedInstruction = processor.getParsedInstruction(\n JSON.parse(new TextDecoder().decode(instruction.parsed))\n )\n } else if (instruction.instructionData) {\n parsedInstruction = processor.getParsedInstruction(instruction.instructionData)\n }\n if (parsedInstruction == null) {\n continue\n }\n const insHandler = processor.getInstructionHandler(parsedInstruction)\n if (insHandler == null) {\n continue\n }\n const res = processor.handleInstruction(\n parsedInstruction,\n instruction.accounts,\n insHandler,\n instruction.slot\n )\n res.gauges.forEach((g) => result.gauges.push(g))\n res.counters.forEach((c) => result.counters.push(c))\n res.logs.forEach((l) => result.logs.push(l))\n }\n }\n resolve()\n })\n )\n }\n\n await Promise.all(processorPromises)\n }\n\n recordRuntimeInfo(result, HandlerType.INSTRUCTION)\n return {\n result,\n configUpdated: false,\n }\n }\n\n async processBlocks(request: ProcessBlocksRequest, context: CallContext): Promise<ProcessBindingResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')\n }\n\n const promises = request.blockBindings.map((binding) => this.processBlock(binding))\n const result = mergeProcessResults(await Promise.all(promises))\n\n recordRuntimeInfo(result, HandlerType.BLOCK)\n return {\n result,\n configUpdated: false,\n }\n }\n\n async processBlock(binding: BlockBinding): Promise<ProcessResult> {\n if (!binding.block) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Block can't be empty\")\n }\n const jsonString = Utf8ArrayToStr(binding.block.raw)\n\n const block: Block = JSON.parse(jsonString)\n\n const promises: Promise<ProcessResult>[] = []\n for (const handlerId of binding.handlerIds) {\n const promise = this.blockHandlers[handlerId](block).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing block: ' + block.number + '\\n' + errorString(e))\n })\n promises.push(promise)\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n\n async processTraces(request: ProcessBindingsRequest, context: CallContext): Promise<ProcessBindingResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')\n }\n\n const promises = request.bindings.map((binding) => this.processTrace(binding))\n const result = mergeProcessResults(await Promise.all(promises))\n\n recordRuntimeInfo(result, HandlerType.ETH_TRACE)\n return {\n result,\n configUpdated: false,\n }\n }\n\n async processTrace(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Trace can't be empty\")\n }\n const jsonString = Utf8ArrayToStr(binding.data.raw)\n const trace: Trace = JSON.parse(jsonString)\n\n return this.traceHandlers[binding.handlerId](trace).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing trace: ' + jsonString + '\\n' + errorString(e))\n })\n }\n\n async processAptosEvent(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Event can't be empty\")\n }\n const jsonString = Utf8ArrayToStr(binding.data.raw)\n const event = JSON.parse(jsonString)\n // only support aptos event for now\n const result = await this.aptosEventHandlers[binding.handlerId](event).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing event: ' + jsonString + '\\n' + errorString(e))\n })\n recordRuntimeInfo(result, HandlerType.APT_EVENT)\n return result\n }\n\n async processAptosResource(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Event can't be empty\")\n }\n const jsonString = Utf8ArrayToStr(binding.data.raw)\n const json = JSON.parse(jsonString) as MoveResourcesWithVersionPayload\n const result = await this.aptosResourceHandlers[binding.handlerId](json).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing event: ' + jsonString + '\\n' + errorString(e))\n })\n recordRuntimeInfo(result, HandlerType.APT_RESOURCE)\n return result\n }\n\n async processAptosFunctionCall(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Event can't be empty\")\n }\n const jsonString = Utf8ArrayToStr(binding.data.raw)\n const call = JSON.parse(jsonString)\n // only support aptos call for now\n const result = await this.aptosCallHandlers[binding.handlerId](call).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing call: ' + jsonString + '\\n' + errorString(e))\n })\n recordRuntimeInfo(result, HandlerType.APT_CALL)\n return result\n }\n}\n\n// https://ourcodeworld.com/articles/read/164/how-to-convert-an-uint8array-to-string-in-javascript\n/* eslint-disable */\nfunction Utf8ArrayToStr(array: Uint8Array) {\n let out, i, len, c\n let char2, char3\n\n out = ''\n len = array.length\n i = 0\n while (i < len) {\n c = array[i++]\n switch (c >> 4) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n // 0xxxxxxx\n out += String.fromCharCode(c)\n break\n case 12:\n case 13:\n // 110x xxxx 10xx xxxx\n char2 = array[i++]\n out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f))\n break\n case 14:\n // 1110 xxxx 10xx xxxx 10xx xxxx\n char2 = array[i++]\n char3 = array[i++]\n out += String.fromCharCode(((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0))\n break\n }\n }\n\n return out\n}\n\nfunction mergeProcessResults(results: ProcessResult[]): ProcessResult {\n const res = ProcessResult.fromPartial({})\n\n for (const r of results) {\n res.counters = res.counters.concat(r.counters)\n res.gauges = res.gauges.concat(r.gauges)\n res.logs = res.logs.concat(r.logs)\n res.events = res.events.concat(r.events)\n }\n return res\n}\n\nfunction recordRuntimeInfo(results: ProcessResult, handlerType: HandlerType) {\n results.gauges.forEach((e) => {\n e.runtimeInfo = {\n from: handlerType,\n }\n })\n\n results.counters.forEach((e) => {\n e.runtimeInfo = {\n from: handlerType,\n }\n })\n\n results.logs.forEach((e) => {\n e.runtimeInfo = {\n from: handlerType,\n }\n })\n}\n\nfunction errorString(e: Error): string {\n return e.stack || e.message\n}\n"]}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Block, Log } from '@ethersproject/abstract-provider'\nimport { CallContext, ServerError, Status } from 'nice-grpc'\nimport { SOL_MAINMET_ID, SUI_DEVNET_ID } from './utils/chain'\n\nimport {\n AccountConfig,\n AptosCallHandlerConfig,\n AptosEventHandlerConfig,\n BlockBinding,\n ContractConfig,\n DataBinding,\n EventTrackingConfig,\n ExportConfig,\n HandlerType,\n LogFilter,\n LogHandlerConfig,\n MetricConfig,\n ProcessBindingResponse,\n ProcessBindingsRequest,\n ProcessBlocksRequest,\n ProcessConfigRequest,\n ProcessConfigResponse,\n ProcessInstructionsRequest,\n ProcessorServiceImplementation,\n ProcessResult,\n ProcessTransactionsRequest,\n StartRequest,\n TemplateInstance,\n} from './gen'\n\nimport { Empty } from './gen/google/protobuf/empty'\nimport Long from 'long'\nimport { TextDecoder } from 'util'\nimport { Trace } from './core'\nimport { Instruction } from '@project-serum/anchor'\nimport { MoveResourcesWithVersionPayload } from './aptos/aptos-processor'\n\nconst DEFAULT_MAX_BLOCK = Long.ZERO\n\nconst USER_PROCESSOR = 'user_processor'\n\nexport class ProcessorServiceImpl implements ProcessorServiceImplementation {\n private eventHandlers: ((event: Log) => Promise<ProcessResult>)[] = []\n private traceHandlers: ((trace: Trace) => Promise<ProcessResult>)[] = []\n private blockHandlers: ((block: Block) => Promise<ProcessResult>)[] = []\n private aptosEventHandlers: ((event: any) => Promise<ProcessResult>)[] = []\n private aptosCallHandlers: ((func: any) => Promise<ProcessResult>)[] = []\n private aptosResourceHandlers: ((resourceWithVersion: MoveResourcesWithVersionPayload) => Promise<ProcessResult>)[] =\n []\n\n // map from chain id to list of processors\n // private blockHandlers = new Map<string, ((block: Block) => Promise<ProcessResult>)[]>()\n // private processorsByChainId = new Map<string, BaseProcessor<BaseContract, BoundContractView<BaseContract, any>>>()\n\n private started = false\n private contractConfigs: ContractConfig[]\n private accountConfigs: AccountConfig[]\n private templateInstances: TemplateInstance[]\n private metricConfigs: MetricConfig[]\n private eventTrackingConfigs: EventTrackingConfig[]\n private exportConfigs: ExportConfig[]\n private readonly loader: () => void\n\n private readonly shutdownHandler?: () => void\n\n constructor(loader: () => void, shutdownHandler?: () => void) {\n this.loader = loader\n this.shutdownHandler = shutdownHandler\n }\n\n async getConfig(request: ProcessConfigRequest, context: CallContext): Promise<ProcessConfigResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')\n }\n return {\n // TODO project setting\n config: undefined,\n contractConfigs: this.contractConfigs,\n accountConfigs: this.accountConfigs,\n templateInstances: this.templateInstances,\n eventTrackingConfigs: this.eventTrackingConfigs,\n metricConfigs: this.metricConfigs,\n exportConfigs: this.exportConfigs,\n }\n }\n\n async configure() {\n this.eventHandlers = []\n this.templateInstances = []\n // this.processorsByChainId.clear()\n this.contractConfigs = []\n this.accountConfigs = []\n\n this.templateInstances = [...global.PROCESSOR_STATE.templatesInstances]\n this.eventTrackingConfigs = []\n this.metricConfigs = []\n this.exportConfigs = []\n\n // part 0, prepare metrics and event tracking configs\n for (const metric of global.PROCESSOR_STATE.metrics) {\n this.metricConfigs.push({\n ...metric.descriptor,\n })\n }\n\n for (const eventTracker of global.PROCESSOR_STATE.eventTrackers) {\n this.eventTrackingConfigs.push({\n distinctAggregationByDays: eventTracker.options.distinctByDays || [],\n eventName: eventTracker.eventName,\n retentionConfig: undefined,\n totalByDay: eventTracker.options.totalByDay || false,\n totalPerEntity: undefined,\n unique: eventTracker.options.unique || false,\n })\n }\n\n for (const exporter of global.PROCESSOR_STATE.exporters) {\n this.exportConfigs.push({\n exportName: exporter.exportName,\n exportType: exporter.options.exportType,\n exportUrl: exporter.options.exportUrl,\n })\n }\n\n // Part 1, prepare EVM processors\n for (const processor of global.PROCESSOR_STATE.processors) {\n // If server favor incremental update this need to change\n // Start basic config for contract\n const chainId = processor.getChainId()\n // this.processorsByChainId.set(chainId, processor)\n\n const contractConfig: ContractConfig = {\n processorType: USER_PROCESSOR,\n contract: {\n name: processor.config.name,\n chainId: chainId.toString(),\n address: processor.config.address,\n abi: '',\n },\n blockConfigs: [],\n logConfigs: [],\n traceConfigs: [],\n startBlock: processor.config.startBlock,\n endBlock: DEFAULT_MAX_BLOCK,\n instructionConfig: undefined,\n aptosEventConfigs: [],\n aptosCallConfigs: [],\n }\n if (processor.config.endBlock) {\n contractConfig.endBlock = processor.config.endBlock\n }\n\n // Step 1. Prepare all the block handlers\n for (const blockHandler of processor.blockHandlers) {\n const handlerId = this.blockHandlers.push(blockHandler) - 1\n // TODO wrap the block handler into one\n\n contractConfig.blockConfigs.push({\n handlerId: handlerId,\n })\n }\n\n // Step 2. Prepare all trace handlers\n for (const traceHandler of processor.traceHandlers) {\n const handlerId = this.traceHandlers.push(traceHandler.handler) - 1\n contractConfig.traceConfigs.push({\n signature: traceHandler.signature,\n handlerId: handlerId,\n })\n }\n\n // Step 3. Prepare all the event handlers\n for (const eventsHandler of processor.eventHandlers) {\n // associate id with filter\n const handlerId = this.eventHandlers.push(eventsHandler.handler) - 1\n const logConfig: LogHandlerConfig = {\n handlerId: handlerId,\n filters: [],\n }\n\n for (const filter of eventsHandler.filters) {\n if (!filter.topics) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Topic should not be null')\n }\n const logFilter: LogFilter = {\n topics: [],\n }\n\n for (const ts of filter.topics) {\n let hashes: string[] = []\n if (Array.isArray(ts)) {\n hashes = hashes.concat(ts)\n } else if (ts) {\n hashes.push(ts)\n }\n logFilter.topics.push({ hashes: hashes })\n }\n logConfig.filters.push(logFilter)\n }\n contractConfig.logConfigs.push(logConfig)\n }\n\n // Finish up a contract\n this.contractConfigs.push(contractConfig)\n }\n\n // Part 2, prepare solana constractors\n for (const solanaProcessor of global.PROCESSOR_STATE.solanaProcessors) {\n const contractConfig: ContractConfig = {\n processorType: USER_PROCESSOR,\n contract: {\n name: solanaProcessor.contractName,\n chainId: SOL_MAINMET_ID,\n address: solanaProcessor.address,\n abi: '',\n },\n blockConfigs: [],\n logConfigs: [],\n traceConfigs: [],\n startBlock: solanaProcessor.config.startSlot,\n endBlock: DEFAULT_MAX_BLOCK,\n instructionConfig: {\n innerInstruction: solanaProcessor.processInnerInstruction,\n parsedInstruction: solanaProcessor.fromParsedInstruction !== null,\n rawDataInstruction: solanaProcessor.decodeInstruction !== null,\n },\n aptosEventConfigs: [],\n aptosCallConfigs: [],\n }\n this.contractConfigs.push(contractConfig)\n }\n\n // Part 3, prepare sui constractors\n for (const suiProcessor of global.PROCESSOR_STATE.suiProcessors) {\n const contractConfig: ContractConfig = {\n processorType: USER_PROCESSOR,\n contract: {\n name: 'sui contract',\n chainId: SUI_DEVNET_ID,\n address: suiProcessor.address,\n abi: '',\n },\n blockConfigs: [],\n logConfigs: [],\n traceConfigs: [],\n startBlock: suiProcessor.config.startSeqNumber,\n endBlock: DEFAULT_MAX_BLOCK,\n instructionConfig: undefined,\n aptosEventConfigs: [],\n aptosCallConfigs: [],\n }\n this.contractConfigs.push(contractConfig)\n }\n\n // Part 4, prepare aptos constractors\n for (const aptosProcessor of global.PROCESSOR_STATE.aptosProcessors) {\n const contractConfig: ContractConfig = {\n processorType: USER_PROCESSOR,\n contract: {\n name: aptosProcessor.moduleName,\n chainId: aptosProcessor.getChainId(),\n address: aptosProcessor.config.address,\n abi: '',\n },\n blockConfigs: [],\n logConfigs: [],\n traceConfigs: [],\n startBlock: Long.fromString(aptosProcessor.config.startVersion.toString()),\n endBlock: DEFAULT_MAX_BLOCK,\n instructionConfig: undefined,\n aptosEventConfigs: [],\n aptosCallConfigs: [],\n }\n // 1. Prepare event handlers\n for (const handler of aptosProcessor.eventHandlers) {\n const handlerId = this.aptosEventHandlers.push(handler.handler) - 1\n const eventHandlerConfig: AptosEventHandlerConfig = {\n filters: handler.filters.map((f) => {\n return {\n type: f.type,\n account: f.account || '',\n }\n }),\n handlerId,\n }\n contractConfig.aptosEventConfigs.push(eventHandlerConfig)\n }\n\n // 2. Prepare function handlers\n for (const handler of aptosProcessor.callHandlers) {\n const handlerId = this.aptosCallHandlers.push(handler.handler) - 1\n const functionHandlerConfig: AptosCallHandlerConfig = {\n filters: handler.filters.map((filter) => {\n return {\n function: filter.function,\n typeArguments: filter.typeArguments || [],\n withTypeArguments: filter.typeArguments ? true : false,\n includeFailed: filter.includeFailed || false,\n }\n }),\n handlerId,\n }\n contractConfig.aptosCallConfigs.push(functionHandlerConfig)\n }\n this.contractConfigs.push(contractConfig)\n }\n\n for (const aptosProcessor of global.PROCESSOR_STATE.aptosAccountProcessors) {\n const accountConfig: AccountConfig = {\n address: aptosProcessor.config.address,\n chainId: aptosProcessor.getChainId(),\n startBlock: Long.fromValue(aptosProcessor.config.startVersion.toString()),\n onAptosIntervalConfigs: [],\n onIntervalConfigs: [],\n }\n for (const handler of aptosProcessor.resourcesHandlers) {\n const handlerId = this.aptosResourceHandlers.push(handler.handler) - 1\n accountConfig.onAptosIntervalConfigs.push({\n intervalConfig: {\n handlerId: handlerId,\n minutes: handler.timeIntervalInMinutes || 0,\n slot: handler.versionInterval || 0,\n },\n type: handler.type || '',\n })\n }\n this.accountConfigs.push(accountConfig)\n }\n }\n\n async start(request: StartRequest, context: CallContext): Promise<Empty> {\n if (this.started) {\n return {}\n }\n\n try {\n this.loader()\n } catch (e) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Failed to load processor: ' + errorString(e))\n }\n\n for (const instance of request.templateInstances) {\n const template = global.PROCESSOR_STATE.templates[instance.templateId]\n if (!template) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Invalid template contract:' + instance)\n }\n if (!instance.contract) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Contract Empty from:' + instance)\n }\n template.bind({\n name: instance.contract.name,\n address: instance.contract.address,\n network: Number(instance.contract.chainId),\n startBlock: instance.startBlock,\n endBlock: instance.endBlock,\n })\n }\n try {\n await this.configure()\n } catch (e) {\n throw new ServerError(Status.INTERNAL, 'Failed to start processor : ' + errorString(e))\n }\n this.started = true\n return {}\n }\n\n async stop(request: Empty, context: CallContext): Promise<Empty> {\n console.log('Server Shutting down in 5 seconds')\n if (this.shutdownHandler) {\n setTimeout(this.shutdownHandler, 5000)\n }\n return {}\n }\n\n async processBindings(request: ProcessBindingsRequest, options?: CallContext): Promise<ProcessBindingResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')\n }\n\n const promises = request.bindings.map((binding) => this.processBinding(binding))\n const result = mergeProcessResults(await Promise.all(promises))\n\n let updated = false\n if (\n global.PROCESSOR_STATE.templatesInstances &&\n this.templateInstances.length != global.PROCESSOR_STATE.templatesInstances.length\n ) {\n await this.configure()\n updated = true\n }\n\n return {\n result,\n configUpdated: updated,\n }\n }\n\n async processBinding(request: DataBinding, options?: CallContext): Promise<ProcessResult> {\n switch (request.handlerType) {\n case HandlerType.APT_CALL:\n return this.processAptosFunctionCall(request)\n case HandlerType.APT_EVENT:\n return this.processAptosEvent(request)\n case HandlerType.APT_RESOURCE:\n return this.processAptosResource(request)\n default:\n throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)\n }\n }\n\n async processLogs(request: ProcessBindingsRequest, context: CallContext): Promise<ProcessBindingResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')\n }\n\n const promises: Promise<ProcessResult>[] = []\n for (const l of request.bindings) {\n if (!l.data) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Log can't be null\")\n }\n // const jsonString = Buffer.from(l.log.raw.buffer).toString(\"utf-8\")\n // const jsonString = String.fromCharCode.apply(null, l.log.raw)\n\n try {\n const jsonString = Utf8ArrayToStr(l.data.raw)\n const log: Log = JSON.parse(jsonString)\n const handler = this.eventHandlers[l.handlerId]\n const promise = handler(log).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing log: ' + jsonString + '\\n' + errorString(e))\n })\n\n promises.push(promise)\n } catch (e) {\n throw new ServerError(Status.INTERNAL, 'error parse log: ' + l)\n }\n }\n\n const result = mergeProcessResults(await Promise.all(promises))\n\n let updated = false\n if (\n global.PROCESSOR_STATE.templatesInstances &&\n this.templateInstances.length != global.PROCESSOR_STATE.templatesInstances.length\n ) {\n await this.configure()\n updated = true\n }\n\n recordRuntimeInfo(result, HandlerType.ETH_LOG)\n return {\n result,\n configUpdated: updated,\n }\n }\n\n async processTransactions(\n request: ProcessTransactionsRequest,\n context: CallContext\n ): Promise<ProcessBindingResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service not started.')\n }\n\n const result = ProcessResult.fromPartial({})\n\n if (request.chainId.toLowerCase().startsWith('sui') && global.PROCESSOR_STATE.suiProcessors) {\n const processorPromises: Promise<void>[] = []\n for (const txn of request.transactions) {\n processorPromises.push(\n new Promise((resolve, _) => {\n for (const processor of global.PROCESSOR_STATE.suiProcessors) {\n const res = processor.handleTransaction(\n JSON.parse(new TextDecoder().decode(txn.raw)),\n txn.slot ?? Long.fromNumber(0)\n )\n if (res) {\n res.gauges.forEach((g) => result.gauges.push(g))\n res.counters.forEach((c) => result.counters.push(c))\n res.logs.forEach((l) => result.logs.push(l))\n }\n }\n resolve()\n })\n )\n }\n await Promise.all(processorPromises)\n }\n\n // if (request.chainId.toLowerCase().startsWith('apt') && global.PROCESSOR_STATE.aptosProcessors) {\n // const processorPromises: Promise<void>[] = []\n // for (const txn of request.transactions) {\n // processorPromises.push(\n // new Promise((resolve, _) => {\n // for (const processor of global.PROCESSOR_STATE.aptosProcessors) {\n // if (processor.address === txn.programAccountId!) {\n // const res = processor.handleTransaction(\n // JSON.parse(new TextDecoder().decode(txn.raw)),\n // txn.slot ?? Long.fromNumber(0)\n // )\n // if (res) {\n // res.gauges.forEach((g) => result.gauges.push(g))\n // res.counters.forEach((c) => result.counters.push(c))\n // res.logs.forEach((l) => result.logs.push(l))\n // }\n // }\n // }\n // resolve()\n // })\n // )\n // }\n // await Promise.all(processorPromises)\n // }\n\n recordRuntimeInfo(result, HandlerType.TRANSACTION)\n return {\n result,\n configUpdated: false,\n }\n }\n\n async processInstructions(\n request: ProcessInstructionsRequest,\n context: CallContext\n ): Promise<ProcessBindingResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service not started.')\n }\n\n const result = ProcessResult.fromPartial({})\n\n // Only have instruction handlers for solana processors\n if (global.PROCESSOR_STATE.solanaProcessors) {\n const processorPromises: Promise<void>[] = []\n for (const instruction of request.instructions) {\n if (!instruction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'instruction cannot be null')\n }\n\n processorPromises.push(\n new Promise((resolve, _) => {\n for (const processor of global.PROCESSOR_STATE.solanaProcessors) {\n if (processor.address === instruction.programAccountId) {\n let parsedInstruction: Instruction | null = null\n if (instruction.parsed) {\n parsedInstruction = processor.getParsedInstruction(\n JSON.parse(new TextDecoder().decode(instruction.parsed))\n )\n } else if (instruction.instructionData) {\n parsedInstruction = processor.getParsedInstruction(instruction.instructionData)\n }\n if (parsedInstruction == null) {\n continue\n }\n const insHandler = processor.getInstructionHandler(parsedInstruction)\n if (insHandler == null) {\n continue\n }\n const res = processor.handleInstruction(\n parsedInstruction,\n instruction.accounts,\n insHandler,\n instruction.slot\n )\n res.gauges.forEach((g) => result.gauges.push(g))\n res.counters.forEach((c) => result.counters.push(c))\n res.logs.forEach((l) => result.logs.push(l))\n }\n }\n resolve()\n })\n )\n }\n\n await Promise.all(processorPromises)\n }\n\n recordRuntimeInfo(result, HandlerType.INSTRUCTION)\n return {\n result,\n configUpdated: false,\n }\n }\n\n async processBlocks(request: ProcessBlocksRequest, context: CallContext): Promise<ProcessBindingResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')\n }\n\n const promises = request.blockBindings.map((binding) => this.processBlock(binding))\n const result = mergeProcessResults(await Promise.all(promises))\n\n recordRuntimeInfo(result, HandlerType.BLOCK)\n return {\n result,\n configUpdated: false,\n }\n }\n\n async processBlock(binding: BlockBinding): Promise<ProcessResult> {\n if (!binding.block) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Block can't be empty\")\n }\n const jsonString = Utf8ArrayToStr(binding.block.raw)\n\n const block: Block = JSON.parse(jsonString)\n\n const promises: Promise<ProcessResult>[] = []\n for (const handlerId of binding.handlerIds) {\n const promise = this.blockHandlers[handlerId](block).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing block: ' + block.number + '\\n' + errorString(e))\n })\n promises.push(promise)\n }\n return mergeProcessResults(await Promise.all(promises))\n }\n\n async processTraces(request: ProcessBindingsRequest, context: CallContext): Promise<ProcessBindingResponse> {\n if (!this.started) {\n throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')\n }\n\n const promises = request.bindings.map((binding) => this.processTrace(binding))\n const result = mergeProcessResults(await Promise.all(promises))\n\n recordRuntimeInfo(result, HandlerType.ETH_TRACE)\n return {\n result,\n configUpdated: false,\n }\n }\n\n async processTrace(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Trace can't be empty\")\n }\n const jsonString = Utf8ArrayToStr(binding.data.raw)\n const trace: Trace = JSON.parse(jsonString)\n\n return this.traceHandlers[binding.handlerId](trace).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing trace: ' + jsonString + '\\n' + errorString(e))\n })\n }\n\n async processAptosEvent(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Event can't be empty\")\n }\n const jsonString = Utf8ArrayToStr(binding.data.raw)\n const event = JSON.parse(jsonString)\n // only support aptos event for now\n const result = await this.aptosEventHandlers[binding.handlerId](event).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing event: ' + jsonString + '\\n' + errorString(e))\n })\n recordRuntimeInfo(result, HandlerType.APT_EVENT)\n return result\n }\n\n async processAptosResource(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Event can't be empty\")\n }\n const jsonString = Utf8ArrayToStr(binding.data.raw)\n const json = JSON.parse(jsonString) as MoveResourcesWithVersionPayload\n const result = await this.aptosResourceHandlers[binding.handlerId](json).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing event: ' + jsonString + '\\n' + errorString(e))\n })\n recordRuntimeInfo(result, HandlerType.APT_RESOURCE)\n return result\n }\n\n async processAptosFunctionCall(binding: DataBinding): Promise<ProcessResult> {\n if (!binding.data) {\n throw new ServerError(Status.INVALID_ARGUMENT, \"Event can't be empty\")\n }\n const jsonString = Utf8ArrayToStr(binding.data.raw)\n const call = JSON.parse(jsonString)\n // only support aptos call for now\n const result = await this.aptosCallHandlers[binding.handlerId](call).catch((e) => {\n throw new ServerError(Status.INTERNAL, 'error processing call: ' + jsonString + '\\n' + errorString(e))\n })\n recordRuntimeInfo(result, HandlerType.APT_CALL)\n return result\n }\n}\n\n// https://ourcodeworld.com/articles/read/164/how-to-convert-an-uint8array-to-string-in-javascript\n/* eslint-disable */\nfunction Utf8ArrayToStr(array: Uint8Array) {\n let out, i, len, c\n let char2, char3\n\n out = ''\n len = array.length\n i = 0\n while (i < len) {\n c = array[i++]\n switch (c >> 4) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n // 0xxxxxxx\n out += String.fromCharCode(c)\n break\n case 12:\n case 13:\n // 110x xxxx 10xx xxxx\n char2 = array[i++]\n out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f))\n break\n case 14:\n // 1110 xxxx 10xx xxxx 10xx xxxx\n char2 = array[i++]\n char3 = array[i++]\n out += String.fromCharCode(((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0))\n break\n }\n }\n\n return out\n}\n\nfunction mergeProcessResults(results: ProcessResult[]): ProcessResult {\n const res = ProcessResult.fromPartial({})\n\n for (const r of results) {\n res.counters = res.counters.concat(r.counters)\n res.gauges = res.gauges.concat(r.gauges)\n res.logs = res.logs.concat(r.logs)\n res.events = res.events.concat(r.events)\n res.exports = res.exports.concat(r.exports)\n }\n return res\n}\n\nfunction recordRuntimeInfo(results: ProcessResult, handlerType: HandlerType) {\n for (const list of [results.gauges, results.counters, results.logs, results.events, results.exports]) {\n list.forEach((e) => {\n e.runtimeInfo = {\n from: handlerType,\n }\n })\n }\n}\n\nfunction errorString(e: Error): string {\n return e.stack || e.message\n}\n"]}
|
package/lib/tests/erc20.js
CHANGED
|
@@ -3,8 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.filter = void 0;
|
|
4
4
|
const erc20_1 = require("../builtin/erc20");
|
|
5
5
|
const event_tracker_1 = require("../core/event-tracker");
|
|
6
|
+
const exporter_1 = require("../core/exporter");
|
|
7
|
+
const sdk_1 = require("@sentio/sdk");
|
|
6
8
|
exports.filter = erc20_1.ERC20Processor.filters.Transfer('0x0000000000000000000000000000000000000000', '0xb329e39ebefd16f40d38f07643652ce17ca5bac1');
|
|
7
9
|
const tracker = event_tracker_1.EventTracker.register('sdf');
|
|
10
|
+
const exporter = exporter_1.Exporter.register('transfer', {
|
|
11
|
+
exportType: sdk_1.ExportConfig_ExportType.WEBHOOK,
|
|
12
|
+
exportUrl: 'http://localhost',
|
|
13
|
+
});
|
|
8
14
|
const processorTemplate = new erc20_1.ERC20ProcessorTemplate().onEventTransfer(async function (event, ctx) {
|
|
9
15
|
console.log('');
|
|
10
16
|
});
|
|
@@ -29,6 +35,7 @@ erc20_1.ERC20Processor.bind({ address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB
|
|
|
29
35
|
.onEventTransfer(async function (event, ctx) {
|
|
30
36
|
ctx.meter.Counter('c2').add(2);
|
|
31
37
|
tracker.trackEvent(ctx, { distinctId: event.args.from });
|
|
38
|
+
exporter.emit(ctx, event);
|
|
32
39
|
}, exports.filter)
|
|
33
40
|
.onBlock(async function (block, ctx) {
|
|
34
41
|
ctx.meter.Gauge('g2').record(20, { k: 'v' });
|
package/lib/tests/erc20.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erc20.js","sourceRoot":"","sources":["../../src/tests/erc20.ts"],"names":[],"mappings":";;;AAAA,4CAAyE;AACzE,yDAAoD;
|
|
1
|
+
{"version":3,"file":"erc20.js","sourceRoot":"","sources":["../../src/tests/erc20.ts"],"names":[],"mappings":"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","sourcesContent":["import { ERC20Processor, ERC20ProcessorTemplate } from '../builtin/erc20'\nimport { EventTracker } from '../core/event-tracker'\nimport { Exporter } from '../core/exporter'\nimport { ExportConfig_ExportType } from '@sentio/sdk'\n\nexport const filter = ERC20Processor.filters.Transfer(\n '0x0000000000000000000000000000000000000000',\n '0xb329e39ebefd16f40d38f07643652ce17ca5bac1'\n)\n\nconst tracker = EventTracker.register('sdf')\nconst exporter = Exporter.register('transfer', {\n exportType: ExportConfig_ExportType.WEBHOOK,\n exportUrl: 'http://localhost',\n})\n\nconst processorTemplate = new ERC20ProcessorTemplate().onEventTransfer(async function (event, ctx) {\n console.log('')\n})\n\nERC20Processor.bind({\n address: '0x1e4ede388cbc9f4b5c79681b7f94d36a11abebc9',\n // network: 1,\n name: 'x2y2',\n startBlock: 14201940,\n})\n .onEventTransfer(async function (event, ctx) {\n processorTemplate.bind({ address: '0x1E4EDE388cbc9F4b5c79681B7f94d36a11ABEBC9', network: 3, name: 'dynamic' })\n // template.bind('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 3, 'dynamic')\n ctx.meter.Counter('c1').add(1)\n }, filter)\n .onBlock(async function (block, ctx) {\n ctx.meter.Gauge('g1').record(10, { k: 'v' })\n })\n .onCallApprove(function (call, ctx) {\n ctx.meter.Counter('added').add(call.args.amount, { spender: call.args.spender })\n })\n\nERC20Processor.bind({ address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', network: 56, name: 'usdc' })\n .onEventTransfer(async function (event, ctx) {\n ctx.meter.Counter('c2').add(2)\n tracker.trackEvent(ctx, { distinctId: event.args.from })\n exporter.emit(ctx, event)\n }, filter)\n .onBlock(async function (block, ctx) {\n ctx.meter.Gauge('g2').record(20, { k: 'v' })\n })\n// .onEventApproval(async function (event, ctx) {\n// BigNumber.from(10 ** 18)\n// // console.log(n)\n// })\nERC20Processor.bind({ address: 'xxxx', network: 56 })\n\nERC20Processor.bind({ address: 'yyyy', network: 1 })\nERC20Processor.bind({ address: 'yyyy', network: 1 })\nERC20Processor.bind({ address: 'yyyy', network: 1, startBlock: 21, name: 'ytoken' })\n\n// const template = Erc20Processor.template\n// .onTransfer(async function (event, ctx) {\n// ctx.meter.Counter('c2').add(2)\n// }, filter)\n// .onBlock(async function (block, ctx) {\n// ctx.meter.Gauge('h1').record(20, { k: 'v' })\n// })\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentio/sdk",
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "1.26.
|
|
4
|
+
"version": "1.26.1",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"compile_target": "yarn tsc -b src/target-ethers-sentio/tsconfig.json",
|
|
7
7
|
"compile": "tsc -p . && cp src/cli/webpack.config.js lib/cli && cp src/utils/*.csv lib/utils",
|
|
@@ -53,6 +53,7 @@ class CallHandler {
|
|
|
53
53
|
export class MoveResourcesWithVersionPayload {
|
|
54
54
|
resources: MoveResource[]
|
|
55
55
|
version: string
|
|
56
|
+
timestamp: string
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
class ResourceHandlder {
|
|
@@ -231,7 +232,12 @@ export class AptosAccountProcessor {
|
|
|
231
232
|
const processor = this
|
|
232
233
|
this.resourcesHandlers.push({
|
|
233
234
|
handler: async function (arg) {
|
|
234
|
-
const ctx = new AptosResourceContext(
|
|
235
|
+
const ctx = new AptosResourceContext(
|
|
236
|
+
processor.config.network,
|
|
237
|
+
processor.config.address,
|
|
238
|
+
BigInt(arg.version),
|
|
239
|
+
parseInt(arg.timestamp)
|
|
240
|
+
)
|
|
235
241
|
await handler(arg.resources, ctx)
|
|
236
242
|
return ctx.getProcessResult()
|
|
237
243
|
},
|
package/src/aptos/context.ts
CHANGED
|
@@ -50,12 +50,14 @@ export class AptosResourceContext extends BaseContext {
|
|
|
50
50
|
address: string
|
|
51
51
|
network: AptosNetwork
|
|
52
52
|
version: bigint
|
|
53
|
+
timestampInMicros: number
|
|
53
54
|
|
|
54
|
-
constructor(network: AptosNetwork, address: string, version: bigint) {
|
|
55
|
+
constructor(network: AptosNetwork, address: string, version: bigint, timestampInMicros: number) {
|
|
55
56
|
super()
|
|
56
57
|
this.address = address
|
|
57
58
|
this.network = network
|
|
58
59
|
this.version = version
|
|
60
|
+
this.timestampInMicros = timestampInMicros
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
getMetaData(descriptor: DataDescriptor, labels: Labels): RecordMetaData {
|
package/src/aptos/index.ts
CHANGED
|
@@ -2,6 +2,6 @@ export type { Transaction_UserTransaction, TransactionPayload_EntryFunctionPaylo
|
|
|
2
2
|
export type { EventInstance, TypedEventInstance, TypedEntryFunctionPayload } from './types'
|
|
3
3
|
export { TYPE_REGISTRY, TypeRegistry } from './types'
|
|
4
4
|
export type { FunctionNameAndCallFilter, EventFilter, CallFilter, ArgumentsFilter } from './aptos-processor'
|
|
5
|
-
export { AptosBaseProcessor } from './aptos-processor'
|
|
5
|
+
export { AptosBaseProcessor, AptosAccountProcessor } from './aptos-processor'
|
|
6
6
|
export { AptosContext } from './context'
|
|
7
7
|
export { AptosBindOptions, AptosNetwork, getRpcClient } from './network'
|
package/src/core/context.ts
CHANGED
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CounterResult,
|
|
3
|
-
GaugeResult,
|
|
4
|
-
LogResult,
|
|
5
|
-
DataDescriptor,
|
|
6
|
-
RecordMetaData,
|
|
7
|
-
EventTrackingResult,
|
|
8
|
-
ProcessResult,
|
|
9
|
-
} from '../gen'
|
|
1
|
+
import { DataDescriptor, RecordMetaData, ProcessResult } from '../gen'
|
|
10
2
|
import { BaseContract, EventFilter } from 'ethers'
|
|
11
3
|
import { Block, Log } from '@ethersproject/abstract-provider'
|
|
12
4
|
import { Meter, normalizeLabels } from './meter'
|
|
@@ -17,26 +9,24 @@ import { Labels } from './metadata'
|
|
|
17
9
|
import { SOL_MAINMET_ID, SUI_DEVNET_ID } from '../utils/chain'
|
|
18
10
|
|
|
19
11
|
export abstract class BaseContext {
|
|
20
|
-
gauges: GaugeResult[] = []
|
|
21
|
-
counters: CounterResult[] = []
|
|
22
|
-
logs: LogResult[] = []
|
|
23
|
-
events: EventTrackingResult[] = []
|
|
24
12
|
meter: Meter
|
|
25
13
|
logger: Logger
|
|
26
14
|
|
|
15
|
+
res: ProcessResult = {
|
|
16
|
+
counters: [],
|
|
17
|
+
events: [],
|
|
18
|
+
exports: [],
|
|
19
|
+
gauges: [],
|
|
20
|
+
logs: [],
|
|
21
|
+
}
|
|
22
|
+
|
|
27
23
|
protected constructor() {
|
|
28
24
|
this.meter = new Meter(this)
|
|
29
25
|
this.logger = new Logger(this)
|
|
30
26
|
}
|
|
31
27
|
|
|
32
28
|
getProcessResult(): ProcessResult {
|
|
33
|
-
|
|
34
|
-
gauges: this.gauges,
|
|
35
|
-
counters: this.counters,
|
|
36
|
-
logs: this.logs,
|
|
37
|
-
events: this.events,
|
|
38
|
-
}
|
|
39
|
-
return res
|
|
29
|
+
return this.res
|
|
40
30
|
}
|
|
41
31
|
|
|
42
32
|
abstract getMetaData(descriptor: DataDescriptor, labels: Labels): RecordMetaData
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { BaseContext } from './context'
|
|
2
|
+
import { DataDescriptor, ExportResult, ExportConfig_ExportType } from '@sentio/sdk'
|
|
3
|
+
|
|
4
|
+
export type Export = Record<string, any>
|
|
5
|
+
|
|
6
|
+
export interface ExporterOptions {
|
|
7
|
+
exportType: ExportConfig_ExportType
|
|
8
|
+
exportUrl: string
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class Exporter {
|
|
12
|
+
static register(exporterName: string, options: ExporterOptions) {
|
|
13
|
+
const exporter = new Exporter(exporterName, options)
|
|
14
|
+
global.PROCESSOR_STATE.exporters.push(exporter)
|
|
15
|
+
return exporter
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
exportName: string
|
|
19
|
+
options: ExporterOptions
|
|
20
|
+
protected constructor(eventName: string, options: ExporterOptions) {
|
|
21
|
+
this.exportName = eventName
|
|
22
|
+
this.options = options
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
emit(ctx: BaseContext, data: Export) {
|
|
26
|
+
const res: ExportResult = {
|
|
27
|
+
metadata: ctx.getMetaData(DataDescriptor.fromPartial({ name: this.exportName }), {}),
|
|
28
|
+
payload: JSON.stringify(data),
|
|
29
|
+
runtimeInfo: undefined,
|
|
30
|
+
}
|
|
31
|
+
ctx.res.exports.push(res)
|
|
32
|
+
}
|
|
33
|
+
}
|
package/src/core/logger.ts
CHANGED
|
@@ -22,7 +22,7 @@ export class Logger extends DescriptorWithUsage {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
this.usage++
|
|
25
|
-
this.ctx.logs.push({
|
|
25
|
+
this.ctx.res.logs.push({
|
|
26
26
|
// name: this.name,
|
|
27
27
|
metadata: this.ctx.getMetaData(this.getShortDescriptor(), {}), // GetRecordMetaData(this.ctx, this, {}),
|
|
28
28
|
level,
|
package/src/core/meter.ts
CHANGED
|
@@ -65,7 +65,7 @@ export class Counter extends Metric {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
private record(ctx: BaseContext, value: Numberish, labels: Labels, add: boolean) {
|
|
68
|
-
ctx.counters.push({
|
|
68
|
+
ctx.res.counters.push({
|
|
69
69
|
metadata: ctx.getMetaData(this.getShortDescriptor(), labels),
|
|
70
70
|
metricValue: toMetricValue(value),
|
|
71
71
|
add: add,
|
|
@@ -95,7 +95,7 @@ export class CounterBinding {
|
|
|
95
95
|
|
|
96
96
|
export class Gauge extends Metric {
|
|
97
97
|
record(ctx: BaseContext, value: Numberish, labels: Labels = {}) {
|
|
98
|
-
ctx.gauges.push({
|
|
98
|
+
ctx.res.gauges.push({
|
|
99
99
|
metadata: ctx.getMetaData(this.getShortDescriptor(), labels),
|
|
100
100
|
metricValue: toMetricValue(value),
|
|
101
101
|
runtimeInfo: undefined,
|