@sentio/sdk 4.0.0-rc.1 → 4.0.0-rc.3
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-plugin.d.ts +1 -1
- package/lib/aptos/aptos-plugin.d.ts.map +1 -1
- package/lib/aptos/aptos-plugin.js +43 -42
- package/lib/aptos/aptos-plugin.js.map +1 -1
- package/lib/aptos/aptos-processor.d.ts +1 -1
- package/lib/aptos/aptos-processor.d.ts.map +1 -1
- package/lib/aptos/aptos-processor.js +25 -25
- package/lib/aptos/aptos-processor.js.map +1 -1
- package/lib/aptos/aptos-resource-processor-template.d.ts +1 -1
- package/lib/aptos/aptos-resource-processor-template.d.ts.map +1 -1
- package/lib/aptos/aptos-resource-processor-template.js +10 -5
- package/lib/aptos/aptos-resource-processor-template.js.map +1 -1
- package/lib/aptos/context.d.ts +1 -1
- package/lib/aptos/context.d.ts.map +1 -1
- package/lib/aptos/context.js +8 -6
- package/lib/aptos/context.js.map +1 -1
- package/lib/aptos/data.d.ts +4 -4
- package/lib/aptos/data.d.ts.map +1 -1
- package/lib/core/base-context.d.ts +3 -2
- package/lib/core/base-context.d.ts.map +1 -1
- package/lib/core/base-context.js +12 -11
- package/lib/core/base-context.js.map +1 -1
- package/lib/core/core-plugin.d.ts.map +1 -1
- package/lib/core/core-plugin.js +6 -4
- package/lib/core/core-plugin.js.map +1 -1
- package/lib/core/event-logger.d.ts +10 -2
- package/lib/core/event-logger.d.ts.map +1 -1
- package/lib/core/event-logger.js +42 -26
- package/lib/core/event-logger.js.map +1 -1
- package/lib/core/exporter.d.ts.map +1 -1
- package/lib/core/exporter.js +5 -3
- package/lib/core/exporter.js.map +1 -1
- package/lib/core/handler-options.d.ts +1 -1
- package/lib/core/handler-options.d.ts.map +1 -1
- package/lib/core/handler-register.d.ts +1 -1
- package/lib/core/handler-register.d.ts.map +1 -1
- package/lib/core/handler-register.js +2 -2
- package/lib/core/handler-register.js.map +1 -1
- package/lib/core/meter.d.ts +4 -3
- package/lib/core/meter.d.ts.map +1 -1
- package/lib/core/meter.js +5 -4
- package/lib/core/meter.js.map +1 -1
- package/lib/core/normalization.d.ts +1 -1
- package/lib/core/normalization.d.ts.map +1 -1
- package/lib/core/normalization.js +41 -31
- package/lib/core/normalization.js.map +1 -1
- package/lib/core/numberish.d.ts +1 -1
- package/lib/core/numberish.d.ts.map +1 -1
- package/lib/core/numberish.js +35 -30
- package/lib/core/numberish.js.map +1 -1
- package/lib/core/partition-handler-manager.d.ts +1 -1
- package/lib/core/partition-handler-manager.d.ts.map +1 -1
- package/lib/core/partition-handler-manager.js +10 -9
- package/lib/core/partition-handler-manager.js.map +1 -1
- package/lib/cosmos/context.d.ts.map +1 -1
- package/lib/cosmos/context.js +4 -2
- package/lib/cosmos/context.js.map +1 -1
- package/lib/cosmos/cosmos-plugin.d.ts.map +1 -1
- package/lib/cosmos/cosmos-plugin.js +11 -10
- package/lib/cosmos/cosmos-plugin.js.map +1 -1
- package/lib/cosmos/cosmos-processor.js.map +1 -1
- package/lib/eth/abi-decoder/decode-worker.js +2 -2
- package/lib/eth/abi-decoder/decode-worker.js.map +1 -1
- package/lib/eth/account-processor.d.ts +2 -2
- package/lib/eth/account-processor.d.ts.map +1 -1
- package/lib/eth/account-processor.js +10 -9
- package/lib/eth/account-processor.js.map +1 -1
- package/lib/eth/base-processor-template.d.ts +3 -3
- package/lib/eth/base-processor-template.d.ts.map +1 -1
- package/lib/eth/base-processor-template.js +12 -8
- package/lib/eth/base-processor-template.js.map +1 -1
- package/lib/eth/base-processor.d.ts +1 -1
- package/lib/eth/base-processor.d.ts.map +1 -1
- package/lib/eth/base-processor.js +53 -46
- package/lib/eth/base-processor.js.map +1 -1
- package/lib/eth/builtin/internal/eacaggregatorproxy-processor.d.ts.map +1 -1
- package/lib/eth/builtin/internal/eacaggregatorproxy-processor.js +48 -46
- package/lib/eth/builtin/internal/eacaggregatorproxy-processor.js.map +1 -1
- package/lib/eth/builtin/internal/erc1155-processor.d.ts.map +1 -1
- package/lib/eth/builtin/internal/erc1155-processor.js +18 -16
- package/lib/eth/builtin/internal/erc1155-processor.js.map +1 -1
- package/lib/eth/builtin/internal/erc20-processor.d.ts.map +1 -1
- package/lib/eth/builtin/internal/erc20-processor.js +38 -36
- package/lib/eth/builtin/internal/erc20-processor.js.map +1 -1
- package/lib/eth/builtin/internal/erc20bytes-processor.d.ts.map +1 -1
- package/lib/eth/builtin/internal/erc20bytes-processor.js +20 -18
- package/lib/eth/builtin/internal/erc20bytes-processor.js.map +1 -1
- package/lib/eth/builtin/internal/erc721-processor.d.ts.map +1 -1
- package/lib/eth/builtin/internal/erc721-processor.js +30 -28
- package/lib/eth/builtin/internal/erc721-processor.js.map +1 -1
- package/lib/eth/builtin/internal/weth9-processor.d.ts.map +1 -1
- package/lib/eth/builtin/internal/weth9-processor.js +24 -22
- package/lib/eth/builtin/internal/weth9-processor.js.map +1 -1
- package/lib/eth/codegen/file.d.ts.map +1 -1
- package/lib/eth/codegen/file.js +2 -1
- package/lib/eth/codegen/file.js.map +1 -1
- package/lib/eth/codegen/function-calls.js +1 -1
- package/lib/eth/context.d.ts +1 -1
- package/lib/eth/context.d.ts.map +1 -1
- package/lib/eth/context.js +17 -11
- package/lib/eth/context.js.map +1 -1
- package/lib/eth/eth-plugin.d.ts.map +1 -1
- package/lib/eth/eth-plugin.js +83 -75
- package/lib/eth/eth-plugin.js.map +1 -1
- package/lib/eth/eth.d.ts +6 -6
- package/lib/eth/eth.d.ts.map +1 -1
- package/lib/eth/eth.js +39 -26
- package/lib/eth/eth.js.map +1 -1
- package/lib/eth/index.d.ts +1 -1
- package/lib/eth/index.d.ts.map +1 -1
- package/lib/eth/index.js +0 -1
- package/lib/eth/index.js.map +1 -1
- package/lib/fuel/asset-processor.d.ts +2 -2
- package/lib/fuel/asset-processor.d.ts.map +1 -1
- package/lib/fuel/asset-processor.js +5 -3
- package/lib/fuel/asset-processor.js.map +1 -1
- package/lib/fuel/context.d.ts.map +1 -1
- package/lib/fuel/context.js +4 -2
- package/lib/fuel/context.js.map +1 -1
- package/lib/fuel/fuel-plugin.d.ts.map +1 -1
- package/lib/fuel/fuel-plugin.js +41 -53
- package/lib/fuel/fuel-plugin.js.map +1 -1
- package/lib/fuel/fuel-processor-template.d.ts.map +1 -1
- package/lib/fuel/fuel-processor-template.js +7 -5
- package/lib/fuel/fuel-processor-template.js.map +1 -1
- package/lib/fuel/fuel-processor.d.ts.map +1 -1
- package/lib/fuel/fuel-processor.js +30 -20
- package/lib/fuel/fuel-processor.js.map +1 -1
- package/lib/fuel/global-processor.d.ts.map +1 -1
- package/lib/fuel/global-processor.js +2 -1
- package/lib/fuel/global-processor.js.map +1 -1
- package/lib/fuel/types.d.ts +10 -4
- package/lib/fuel/types.d.ts.map +1 -1
- package/lib/fuel/types.js.map +1 -1
- package/lib/iota/context.d.ts +1 -1
- package/lib/iota/context.d.ts.map +1 -1
- package/lib/iota/context.js +8 -6
- package/lib/iota/context.js.map +1 -1
- package/lib/iota/iota-object-processor-template.d.ts +1 -1
- package/lib/iota/iota-object-processor-template.d.ts.map +1 -1
- package/lib/iota/iota-object-processor-template.js +17 -12
- package/lib/iota/iota-object-processor-template.js.map +1 -1
- package/lib/iota/iota-object-processor.d.ts +1 -1
- package/lib/iota/iota-object-processor.d.ts.map +1 -1
- package/lib/iota/iota-object-processor.js +23 -16
- package/lib/iota/iota-object-processor.js.map +1 -1
- package/lib/iota/iota-plugin-part.d.ts +1 -1
- package/lib/iota/iota-plugin-part.d.ts.map +1 -1
- package/lib/iota/iota-plugin-part.js +16 -15
- package/lib/iota/iota-plugin-part.js.map +1 -1
- package/lib/iota/iota-processor.d.ts +1 -1
- package/lib/iota/iota-processor.d.ts.map +1 -1
- package/lib/iota/iota-processor.js +18 -17
- package/lib/iota/iota-processor.js.map +1 -1
- package/lib/iota/network.js +2 -2
- package/lib/iota/network.js.map +1 -1
- package/lib/move/filter.d.ts +1 -1
- package/lib/move/filter.d.ts.map +1 -1
- package/lib/move/index.d.ts +1 -1
- package/lib/move/index.d.ts.map +1 -1
- package/lib/move/index.js +0 -1
- package/lib/move/index.js.map +1 -1
- package/lib/solana/builtin/types.d.ts +4 -4
- package/lib/solana/solana-context.d.ts.map +1 -1
- package/lib/solana/solana-context.js +4 -3
- package/lib/solana/solana-context.js.map +1 -1
- package/lib/solana/solana-plugin.d.ts.map +1 -1
- package/lib/solana/solana-plugin.js +19 -18
- package/lib/solana/solana-plugin.js.map +1 -1
- package/lib/solana/solana-processor.d.ts.map +1 -1
- package/lib/solana/solana-processor.js +8 -3
- package/lib/solana/solana-processor.js.map +1 -1
- package/lib/store/cache.d.ts.map +1 -1
- package/lib/store/cache.js +22 -17
- package/lib/store/cache.js.map +1 -1
- package/lib/store/convert.d.ts +1 -1
- package/lib/store/convert.d.ts.map +1 -1
- package/lib/store/convert.js +67 -104
- package/lib/store/convert.js.map +1 -1
- package/lib/store/decorators.d.ts +1 -1
- package/lib/store/decorators.d.ts.map +1 -1
- package/lib/store/decorators.js +3 -1
- package/lib/store/decorators.js.map +1 -1
- package/lib/store/store.d.ts.map +1 -1
- package/lib/store/store.js +24 -16
- package/lib/store/store.js.map +1 -1
- package/lib/store/types.js +24 -32
- package/lib/store/types.js.map +1 -1
- package/lib/store/util.d.ts +1 -1
- package/lib/store/util.d.ts.map +1 -1
- package/lib/store/util.js +13 -17
- package/lib/store/util.js.map +1 -1
- package/lib/sui/context.d.ts +1 -1
- package/lib/sui/context.d.ts.map +1 -1
- package/lib/sui/context.js +8 -6
- package/lib/sui/context.js.map +1 -1
- package/lib/sui/sui-object-processor-template.d.ts +1 -1
- package/lib/sui/sui-object-processor-template.d.ts.map +1 -1
- package/lib/sui/sui-object-processor-template.js +17 -12
- package/lib/sui/sui-object-processor-template.js.map +1 -1
- package/lib/sui/sui-object-processor.d.ts +1 -1
- package/lib/sui/sui-object-processor.d.ts.map +1 -1
- package/lib/sui/sui-object-processor.js +23 -16
- package/lib/sui/sui-object-processor.js.map +1 -1
- package/lib/sui/sui-plugin-part.d.ts +1 -1
- package/lib/sui/sui-plugin-part.d.ts.map +1 -1
- package/lib/sui/sui-plugin-part.js +16 -15
- package/lib/sui/sui-plugin-part.js.map +1 -1
- package/lib/sui/sui-plugin.d.ts +1 -1
- package/lib/sui/sui-plugin.d.ts.map +1 -1
- package/lib/sui/sui-plugin.js +35 -34
- package/lib/sui/sui-plugin.js.map +1 -1
- package/lib/sui/sui-processor.d.ts +1 -1
- package/lib/sui/sui-processor.d.ts.map +1 -1
- package/lib/sui/sui-processor.js +18 -17
- package/lib/sui/sui-processor.js.map +1 -1
- package/lib/testing/aptos-facet.d.ts.map +1 -1
- package/lib/testing/aptos-facet.js +18 -11
- package/lib/testing/aptos-facet.js.map +1 -1
- package/lib/testing/cosmos-facet.d.ts.map +1 -1
- package/lib/testing/cosmos-facet.js +10 -6
- package/lib/testing/cosmos-facet.js.map +1 -1
- package/lib/testing/eth-facet.d.ts +1 -1
- package/lib/testing/eth-facet.d.ts.map +1 -1
- package/lib/testing/eth-facet.js +34 -18
- package/lib/testing/eth-facet.js.map +1 -1
- package/lib/testing/fuel-facet.d.ts.map +1 -1
- package/lib/testing/fuel-facet.js +28 -18
- package/lib/testing/fuel-facet.js.map +1 -1
- package/lib/testing/iota-facet.d.ts.map +1 -1
- package/lib/testing/iota-facet.js +32 -20
- package/lib/testing/iota-facet.js.map +1 -1
- package/lib/testing/memory-database.d.ts +11 -3
- package/lib/testing/memory-database.d.ts.map +1 -1
- package/lib/testing/memory-database.js +84 -71
- package/lib/testing/memory-database.js.map +1 -1
- package/lib/testing/metric-utils.d.ts +2 -2
- package/lib/testing/metric-utils.d.ts.map +1 -1
- package/lib/testing/metric-utils.js +13 -12
- package/lib/testing/metric-utils.js.map +1 -1
- package/lib/testing/solana-facet.d.ts +3 -2
- package/lib/testing/solana-facet.d.ts.map +1 -1
- package/lib/testing/solana-facet.js +8 -5
- package/lib/testing/solana-facet.js.map +1 -1
- package/lib/testing/sui-facet.d.ts.map +1 -1
- package/lib/testing/sui-facet.js +30 -20
- package/lib/testing/sui-facet.js.map +1 -1
- package/lib/testing/test-processor-server.d.ts +1453 -16
- package/lib/testing/test-processor-server.d.ts.map +1 -1
- package/lib/testing/test-processor-server.js +108 -45
- package/lib/testing/test-processor-server.js.map +1 -1
- package/lib/utils/price.d.ts +1 -1
- package/lib/utils/price.d.ts.map +1 -1
- package/lib/utils/price.js +19 -12
- package/lib/utils/price.js.map +1 -1
- package/package.json +5 -7
- package/src/aptos/aptos-plugin.ts +105 -91
- package/src/aptos/aptos-processor.ts +33 -25
- package/src/aptos/aptos-resource-processor-template.ts +15 -6
- package/src/aptos/context.ts +8 -7
- package/src/aptos/data.ts +4 -4
- package/src/core/base-context.ts +19 -12
- package/src/core/core-plugin.ts +10 -7
- package/src/core/event-logger.ts +63 -34
- package/src/core/exporter.ts +5 -4
- package/src/core/handler-options.ts +1 -1
- package/src/core/handler-register.ts +3 -3
- package/src/core/meter.ts +9 -7
- package/src/core/normalization.ts +53 -31
- package/src/core/numberish.ts +46 -30
- package/src/core/partition-handler-manager.ts +13 -11
- package/src/cosmos/context.ts +4 -3
- package/src/cosmos/cosmos-plugin.ts +19 -15
- package/src/cosmos/cosmos-processor.ts +2 -2
- package/src/eth/abi-decoder/decode-worker.ts +2 -2
- package/src/eth/account-processor.ts +21 -12
- package/src/eth/base-processor-template.ts +22 -10
- package/src/eth/base-processor.ts +66 -54
- package/src/eth/builtin/internal/eacaggregatorproxy-processor.ts +177 -116
- package/src/eth/builtin/internal/erc1155-processor.ts +73 -38
- package/src/eth/builtin/internal/erc20-processor.ts +152 -91
- package/src/eth/builtin/internal/erc20bytes-processor.ts +80 -46
- package/src/eth/builtin/internal/erc721-processor.ts +109 -65
- package/src/eth/builtin/internal/weth9-processor.ts +95 -56
- package/src/eth/codegen/file.ts +2 -1
- package/src/eth/codegen/function-calls.ts +1 -1
- package/src/eth/context.ts +29 -13
- package/src/eth/eth-plugin.ts +135 -118
- package/src/eth/eth.ts +46 -32
- package/src/eth/index.ts +1 -1
- package/src/fuel/asset-processor.ts +16 -8
- package/src/fuel/context.ts +4 -3
- package/src/fuel/fuel-plugin.ts +71 -73
- package/src/fuel/fuel-processor-template.ts +7 -6
- package/src/fuel/fuel-processor.ts +35 -23
- package/src/fuel/global-processor.ts +3 -3
- package/src/fuel/types.ts +10 -4
- package/src/iota/context.ts +8 -7
- package/src/iota/iota-object-processor-template.ts +25 -15
- package/src/iota/iota-object-processor.ts +33 -22
- package/src/iota/iota-plugin-part.ts +41 -34
- package/src/iota/iota-processor.ts +25 -17
- package/src/iota/network.ts +2 -2
- package/src/move/filter.ts +1 -1
- package/src/move/index.ts +1 -1
- package/src/solana/solana-context.ts +4 -3
- package/src/solana/solana-plugin.ts +27 -24
- package/src/solana/solana-processor.ts +14 -6
- package/src/store/cache.ts +22 -18
- package/src/store/convert.ts +68 -104
- package/src/store/decorators.ts +3 -2
- package/src/store/store.ts +30 -22
- package/src/store/types.ts +24 -33
- package/src/store/util.ts +13 -18
- package/src/sui/context.ts +8 -7
- package/src/sui/sui-object-processor-template.ts +25 -15
- package/src/sui/sui-object-processor.ts +33 -22
- package/src/sui/sui-plugin-part.ts +41 -34
- package/src/sui/sui-plugin.ts +49 -47
- package/src/sui/sui-processor.ts +25 -17
- package/src/testing/aptos-facet.ts +18 -11
- package/src/testing/cosmos-facet.ts +10 -6
- package/src/testing/eth-facet.ts +40 -18
- package/src/testing/fuel-facet.ts +28 -18
- package/src/testing/iota-facet.ts +32 -20
- package/src/testing/memory-database.ts +126 -88
- package/src/testing/metric-utils.ts +15 -14
- package/src/testing/solana-facet.ts +11 -6
- package/src/testing/sui-facet.ts +30 -20
- package/src/testing/test-processor-server.ts +169 -79
- package/src/utils/price.ts +20 -13
|
@@ -1,31 +1,35 @@
|
|
|
1
1
|
import {
|
|
2
|
-
AccountConfig,
|
|
3
|
-
ContractConfig,
|
|
4
|
-
DataBinding,
|
|
5
|
-
|
|
6
|
-
Empty,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
ProcessConfigResponse,
|
|
13
|
-
|
|
14
|
-
ProcessStreamRequest,
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
TemplateInstance,
|
|
19
|
-
|
|
2
|
+
type AccountConfig,
|
|
3
|
+
type ContractConfig,
|
|
4
|
+
type DataBinding,
|
|
5
|
+
type DBResponse,
|
|
6
|
+
type Empty,
|
|
7
|
+
EmptySchema,
|
|
8
|
+
type ProcessBindingResponse,
|
|
9
|
+
ProcessBindingResponseSchema,
|
|
10
|
+
ProcessBindingsRequestSchema,
|
|
11
|
+
ProcessConfigRequestSchema,
|
|
12
|
+
type ProcessConfigResponse,
|
|
13
|
+
type ProcessResult,
|
|
14
|
+
type ProcessStreamRequest,
|
|
15
|
+
ProcessStreamRequestSchema,
|
|
16
|
+
ProcessStreamResponseV3Schema,
|
|
17
|
+
StartRequestSchema,
|
|
18
|
+
type TemplateInstance,
|
|
19
|
+
TemplateInstanceSchema,
|
|
20
|
+
type TimeseriesResult,
|
|
21
|
+
UpdateTemplatesRequestSchema
|
|
20
22
|
} from '@sentio/protos'
|
|
21
|
-
import {
|
|
23
|
+
import { create, type MessageInitShape } from '@bufbuild/protobuf'
|
|
24
|
+
import { type HandlerContext } from '@connectrpc/connect'
|
|
22
25
|
import {
|
|
26
|
+
DataBindingContext,
|
|
23
27
|
Endpoints,
|
|
24
28
|
IDataBindingContext,
|
|
29
|
+
mergeProcessResults,
|
|
25
30
|
PluginManager,
|
|
26
|
-
ProcessorServiceImpl,
|
|
27
31
|
State,
|
|
28
|
-
|
|
32
|
+
ProcessorServiceImplV3
|
|
29
33
|
} from '@sentio/runtime'
|
|
30
34
|
|
|
31
35
|
import { AptosFacet } from './aptos-facet.js'
|
|
@@ -40,7 +44,9 @@ import { DatabaseSchemaState } from '../core/database-schema.js'
|
|
|
40
44
|
import { IotaFacet } from './iota-facet.js'
|
|
41
45
|
import { ChainInfo } from '@sentio/chain'
|
|
42
46
|
|
|
43
|
-
|
|
47
|
+
type ProcessStreamResponseV3Init = MessageInitShape<typeof ProcessStreamResponseV3Schema>
|
|
48
|
+
|
|
49
|
+
export const TEST_CONTEXT = {} as HandlerContext
|
|
44
50
|
|
|
45
51
|
export function cleanTest() {
|
|
46
52
|
// retain the DatabaseSchemaState
|
|
@@ -49,11 +55,12 @@ export function cleanTest() {
|
|
|
49
55
|
State.INSTANCE.stateMap.set(DatabaseSchemaState.INSTANCE.key(), state)
|
|
50
56
|
}
|
|
51
57
|
|
|
52
|
-
export class TestProcessorServer
|
|
53
|
-
service:
|
|
58
|
+
export class TestProcessorServer {
|
|
59
|
+
service: ProcessorServiceImplV3
|
|
54
60
|
contractConfigs: ContractConfig[]
|
|
55
61
|
accountConfigs: AccountConfig[]
|
|
56
62
|
storeContext: TestStoreContext
|
|
63
|
+
private nextProcessId = 1
|
|
57
64
|
|
|
58
65
|
aptos: AptosFacet
|
|
59
66
|
eth: EthFacet
|
|
@@ -67,7 +74,7 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
|
|
|
67
74
|
constructor(loader: () => Promise<any>, httpEndpoints: Record<string, string> = {}) {
|
|
68
75
|
cleanTest()
|
|
69
76
|
|
|
70
|
-
this.service = new
|
|
77
|
+
this.service = new ProcessorServiceImplV3(loader)
|
|
71
78
|
this.aptos = new AptosFacet(this)
|
|
72
79
|
this.solana = new SolanaFacet(this)
|
|
73
80
|
this.eth = new EthFacet(this)
|
|
@@ -82,79 +89,137 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
|
|
|
82
89
|
}
|
|
83
90
|
|
|
84
91
|
// start a memory database for testing
|
|
85
|
-
const subject = new Subject<
|
|
86
|
-
this.storeContext = new TestStoreContext(subject, 1)
|
|
92
|
+
const subject = new Subject<ProcessStreamResponseV3Init>()
|
|
93
|
+
this.storeContext = new TestStoreContext(subject, 1, this.service)
|
|
87
94
|
this._db = new MemoryDatabase(this.storeContext)
|
|
88
95
|
}
|
|
89
96
|
|
|
90
|
-
async start(
|
|
91
|
-
|
|
92
|
-
|
|
97
|
+
async start(
|
|
98
|
+
request: MessageInitShape<typeof StartRequestSchema> = { templateInstances: [] },
|
|
99
|
+
context = TEST_CONTEXT
|
|
100
|
+
) {
|
|
101
|
+
const req = create(StartRequestSchema, request)
|
|
102
|
+
const res = await this.service.start(req, context)
|
|
103
|
+
const config = await this.getConfig(create(ProcessConfigRequestSchema, {}))
|
|
93
104
|
this.contractConfigs = config.contractConfigs
|
|
94
105
|
this.accountConfigs = config.accountConfigs
|
|
95
106
|
this._db.start()
|
|
96
|
-
this.storeContext.templateInstances =
|
|
107
|
+
this.storeContext.templateInstances = req.templateInstances
|
|
97
108
|
return res
|
|
98
109
|
}
|
|
99
110
|
|
|
100
|
-
stop(request: Empty, context = TEST_CONTEXT)
|
|
101
|
-
|
|
111
|
+
stop(request: Empty = create(EmptySchema), context = TEST_CONTEXT) {
|
|
112
|
+
this._db.stop()
|
|
113
|
+
return request
|
|
102
114
|
}
|
|
103
115
|
|
|
104
|
-
async getConfig(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
116
|
+
async getConfig(
|
|
117
|
+
request: MessageInitShape<typeof ProcessConfigRequestSchema> = {},
|
|
118
|
+
context = TEST_CONTEXT
|
|
119
|
+
): Promise<ProcessConfigResponse> {
|
|
120
|
+
const config = await this.service.getConfig(create(ProcessConfigRequestSchema, request), context)
|
|
121
|
+
config.templateInstances = this.storeContext.templateInstances
|
|
122
|
+
return config
|
|
110
123
|
}
|
|
111
124
|
|
|
112
125
|
processBindings(
|
|
113
|
-
request:
|
|
114
|
-
context:
|
|
126
|
+
request: MessageInitShape<typeof ProcessBindingsRequestSchema>,
|
|
127
|
+
context: HandlerContext = TEST_CONTEXT
|
|
115
128
|
): Promise<ProcessBindingResponse> {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
129
|
+
const req = create(ProcessBindingsRequestSchema, request)
|
|
130
|
+
return this.processBindingList(req.bindings, context)
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async processBinding(request: DataBinding, context: HandlerContext = TEST_CONTEXT): Promise<ProcessBindingResponse> {
|
|
134
|
+
return this.processBindingList([request], context)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private async processBindingList(
|
|
138
|
+
bindings: DataBinding[],
|
|
139
|
+
context: HandlerContext = TEST_CONTEXT
|
|
140
|
+
): Promise<ProcessBindingResponse> {
|
|
141
|
+
const results: ProcessResult[] = []
|
|
142
|
+
for (const binding of bindings) {
|
|
143
|
+
const result = await this.processBindingV3(binding, context)
|
|
144
|
+
results.push(result)
|
|
145
|
+
|
|
146
|
+
if (result.states?.configUpdated) {
|
|
147
|
+
await PluginManager.INSTANCE.updateTemplates(
|
|
148
|
+
create(UpdateTemplatesRequestSchema, {
|
|
149
|
+
chainId: binding.chainId,
|
|
150
|
+
templateInstances: this.storeContext.templateInstances
|
|
151
|
+
})
|
|
152
|
+
)
|
|
124
153
|
}
|
|
125
|
-
|
|
154
|
+
}
|
|
155
|
+
return create(ProcessBindingResponseSchema, {
|
|
156
|
+
result: mergeProcessResults(results)
|
|
126
157
|
})
|
|
127
158
|
}
|
|
128
159
|
|
|
129
|
-
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
160
|
+
private processBindingV3(request: DataBinding, context: HandlerContext): Promise<ProcessResult> {
|
|
161
|
+
const processId = this.nextProcessId++
|
|
162
|
+
const subject = this.storeContext.subject
|
|
163
|
+
|
|
164
|
+
return new Promise((resolve, reject) => {
|
|
165
|
+
const subscription = subject.subscribe({
|
|
166
|
+
next: (response) => {
|
|
167
|
+
if (response.processId !== processId) {
|
|
168
|
+
return
|
|
169
|
+
}
|
|
170
|
+
if (response.value?.case === 'tplRequest') {
|
|
171
|
+
this.storeContext.applyTemplateRequest(
|
|
172
|
+
(response.value.value.templates ?? []).map((template) => create(TemplateInstanceSchema, template)),
|
|
173
|
+
response.value.value.remove ?? false
|
|
174
|
+
)
|
|
175
|
+
}
|
|
176
|
+
if (response.value?.case === 'result') {
|
|
177
|
+
subscription.unsubscribe()
|
|
178
|
+
// The service always emits a fully-formed ProcessResult message here; use it directly.
|
|
179
|
+
// Do NOT re-`create(ProcessResultSchema, ...)` — that re-validates every field and throws
|
|
180
|
+
// on results carrying loosely-typed values (e.g. a hex string in an int32 field), which
|
|
181
|
+
// the old unary processBindings path passed through untouched.
|
|
182
|
+
const result = response.value.value as ProcessResult
|
|
183
|
+
// The V3 service reports handler failures as a result with `states.error` set (via
|
|
184
|
+
// DataBindingContext.error) rather than erroring the stream. Surface it as a thrown
|
|
185
|
+
// error so tests observe the same behavior as the old unary processBindings path.
|
|
186
|
+
if (result.states?.error) {
|
|
187
|
+
reject(new Error(result.states.error))
|
|
188
|
+
} else {
|
|
189
|
+
resolve(result)
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
error: (e) => {
|
|
194
|
+
subscription.unsubscribe()
|
|
195
|
+
reject(e)
|
|
196
|
+
}
|
|
138
197
|
})
|
|
139
|
-
}
|
|
140
|
-
return ret
|
|
141
|
-
}
|
|
142
198
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
199
|
+
this.service
|
|
200
|
+
.handleRequest(
|
|
201
|
+
create(ProcessStreamRequestSchema, {
|
|
202
|
+
processId,
|
|
203
|
+
value: {
|
|
204
|
+
case: 'binding',
|
|
205
|
+
value: request
|
|
206
|
+
}
|
|
207
|
+
}),
|
|
208
|
+
undefined,
|
|
209
|
+
subject
|
|
210
|
+
)
|
|
211
|
+
.catch((e) => {
|
|
212
|
+
subscription.unsubscribe()
|
|
213
|
+
reject(e)
|
|
214
|
+
})
|
|
215
|
+
})
|
|
148
216
|
}
|
|
149
217
|
|
|
150
|
-
|
|
151
|
-
requests
|
|
152
|
-
context: CallContext
|
|
153
|
-
): ServerStreamingMethodResult<DeepPartial<PreprocessStreamResponse>> {
|
|
154
|
-
throw new Error('Method not implemented.')
|
|
218
|
+
processBindingsStream(requests: AsyncIterable<ProcessStreamRequest>, context: HandlerContext) {
|
|
219
|
+
return this.service.processBindingsStream(requests, context)
|
|
155
220
|
}
|
|
156
221
|
|
|
157
|
-
// processBindingsStream(request: AsyncIterable<ProcessStreamRequest>, context:
|
|
222
|
+
// processBindingsStream(request: AsyncIterable<ProcessStreamRequest>, context: HandlerContext) {
|
|
158
223
|
// return this.service.processBindingsStream(request, context)
|
|
159
224
|
// }
|
|
160
225
|
get db() {
|
|
@@ -166,17 +231,37 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
|
|
|
166
231
|
}
|
|
167
232
|
}
|
|
168
233
|
|
|
169
|
-
class TestStoreContext extends
|
|
234
|
+
class TestStoreContext extends DataBindingContext implements IDataBindingContext {
|
|
170
235
|
constructor(
|
|
171
|
-
|
|
172
|
-
processId: number
|
|
236
|
+
subject: Subject<ProcessStreamResponseV3Init>,
|
|
237
|
+
processId: number,
|
|
238
|
+
private readonly service: ProcessorServiceImplV3
|
|
173
239
|
) {
|
|
174
|
-
super(
|
|
240
|
+
super(processId, subject)
|
|
175
241
|
}
|
|
176
242
|
|
|
177
243
|
templateInstances: TemplateInstance[] = []
|
|
178
244
|
|
|
179
|
-
|
|
245
|
+
result(dbResult: DBResponse, processId = this.processId): void {
|
|
246
|
+
// Resolve a request issued directly from this context (e.g. `service.store.get(...)` in a test,
|
|
247
|
+
// which goes through the TestStoreContext rather than a per-binding context). opIds are globally
|
|
248
|
+
// unique, so this is a no-op when the request originated from the service's per-binding context.
|
|
249
|
+
super.result(dbResult)
|
|
250
|
+
// Forward to the service's per-binding context for requests issued while processing a binding.
|
|
251
|
+
void this.service.handleRequest(
|
|
252
|
+
create(ProcessStreamRequestSchema, {
|
|
253
|
+
processId,
|
|
254
|
+
value: {
|
|
255
|
+
case: 'dbResult',
|
|
256
|
+
value: dbResult
|
|
257
|
+
}
|
|
258
|
+
}),
|
|
259
|
+
undefined,
|
|
260
|
+
this.subject
|
|
261
|
+
)
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
applyTemplateRequest(templates: Array<TemplateInstance>, remove: boolean): void {
|
|
180
265
|
if (remove) {
|
|
181
266
|
this.templateInstances = this.templateInstances.filter(
|
|
182
267
|
(i) => !templates.find((t) => t.templateId === i.templateId && t.contract?.address === i.contract?.address)
|
|
@@ -185,7 +270,12 @@ class TestStoreContext extends StoreContext implements IDataBindingContext {
|
|
|
185
270
|
this.templateInstances.push(...templates)
|
|
186
271
|
}
|
|
187
272
|
}
|
|
273
|
+
|
|
274
|
+
sendTemplateRequest(templates: Array<TemplateInstance>, remove: boolean): void {
|
|
275
|
+
this.applyTemplateRequest(templates, remove)
|
|
276
|
+
}
|
|
277
|
+
|
|
188
278
|
sendTimeseriesRequest(timeseries: Array<TimeseriesResult>): void {
|
|
189
|
-
|
|
279
|
+
// Test helpers currently expose metric/event/export results through ProcessResult.
|
|
190
280
|
}
|
|
191
281
|
}
|
package/src/utils/price.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { CoinID } from '@sentio/protos'
|
|
1
|
+
import { type CoinID, CoinIDSchema } from '@sentio/protos'
|
|
2
|
+
import { create } from '@bufbuild/protobuf'
|
|
2
3
|
import { Endpoints, processMetrics } from '@sentio/runtime'
|
|
3
4
|
import { ChainId } from '@sentio/chain'
|
|
4
5
|
import { LRUCache } from 'lru-cache'
|
|
@@ -56,11 +57,14 @@ export async function getPriceByTypeOrSymbolInternal(
|
|
|
56
57
|
const dateStr = dateString(date)
|
|
57
58
|
const todayDateString = dateString(new Date())
|
|
58
59
|
|
|
60
|
+
const symbol = coinId.id.case === 'symbol' ? coinId.id.value : undefined
|
|
61
|
+
const address = coinId.id.case === 'address' ? coinId.id.value : undefined
|
|
62
|
+
|
|
59
63
|
let key: string
|
|
60
|
-
if (
|
|
61
|
-
key = `${
|
|
64
|
+
if (symbol) {
|
|
65
|
+
key = `${symbol}-${dateStr}`
|
|
62
66
|
} else {
|
|
63
|
-
key = `${
|
|
67
|
+
key = `${address?.address}-${address?.chain}-${dateStr}`
|
|
64
68
|
}
|
|
65
69
|
let price = priceMap.get(key)
|
|
66
70
|
if (price) {
|
|
@@ -71,9 +75,9 @@ export async function getPriceByTypeOrSymbolInternal(
|
|
|
71
75
|
const response = priceClient.getPrice({
|
|
72
76
|
query: {
|
|
73
77
|
timestamp: date.toISOString(),
|
|
74
|
-
'coinId.symbol':
|
|
75
|
-
'coinId.address.address':
|
|
76
|
-
'coinId.address.chain':
|
|
78
|
+
'coinId.symbol': symbol,
|
|
79
|
+
'coinId.address.address': address?.address,
|
|
80
|
+
'coinId.address.chain': address?.chain
|
|
77
81
|
}
|
|
78
82
|
})
|
|
79
83
|
price = response
|
|
@@ -131,12 +135,15 @@ export async function getPriceByType(
|
|
|
131
135
|
): Promise<number | undefined> {
|
|
132
136
|
return getPriceByTypeOrSymbol(
|
|
133
137
|
date,
|
|
134
|
-
{
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
+
create(CoinIDSchema, {
|
|
139
|
+
id: {
|
|
140
|
+
case: 'address',
|
|
141
|
+
value: {
|
|
142
|
+
chain: chainId,
|
|
143
|
+
address: coinType
|
|
144
|
+
}
|
|
138
145
|
}
|
|
139
|
-
},
|
|
146
|
+
}),
|
|
140
147
|
options
|
|
141
148
|
)
|
|
142
149
|
}
|
|
@@ -151,7 +158,7 @@ export async function getPriceBySymbol(
|
|
|
151
158
|
date: Date,
|
|
152
159
|
options?: PriceOptions
|
|
153
160
|
): Promise<number | undefined> {
|
|
154
|
-
return getPriceByTypeOrSymbol(date, { symbol }, options)
|
|
161
|
+
return getPriceByTypeOrSymbol(date, create(CoinIDSchema, { id: { case: 'symbol', value: symbol } }), options)
|
|
155
162
|
}
|
|
156
163
|
|
|
157
164
|
function dateString(date: Date) {
|