@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,15 +1,20 @@
|
|
|
1
1
|
import { USER_PROCESSOR } from '@sentio/runtime'
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
AccountConfigSchema,
|
|
4
|
+
ContractConfigSchema,
|
|
5
5
|
HandlerType,
|
|
6
|
-
InitResponse,
|
|
7
|
-
MoveCallHandlerConfig,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
type InitResponse,
|
|
7
|
+
type MoveCallHandlerConfig,
|
|
8
|
+
MoveCallHandlerConfigSchema,
|
|
9
|
+
type MoveEventHandlerConfig,
|
|
10
|
+
MoveEventHandlerConfigSchema,
|
|
11
|
+
MoveOnIntervalConfigSchema,
|
|
12
|
+
type MoveResourceChangeConfig,
|
|
13
|
+
MoveResourceChangeConfigSchema,
|
|
14
|
+
type ProcessConfigResponse,
|
|
15
|
+
type StartRequest
|
|
12
16
|
} from '@sentio/protos'
|
|
17
|
+
import { create } from '@bufbuild/protobuf'
|
|
13
18
|
|
|
14
19
|
import { PartitionHandlerManager } from '../core/index.js'
|
|
15
20
|
import { HandlerRegister } from '../core/handler-register.js'
|
|
@@ -75,7 +80,7 @@ export class IotaPluginPart {
|
|
|
75
80
|
if (forChainId !== undefined && forChainId !== chainId.toString()) {
|
|
76
81
|
continue
|
|
77
82
|
}
|
|
78
|
-
const contractConfig =
|
|
83
|
+
const contractConfig = create(ContractConfigSchema, {
|
|
79
84
|
transactionConfig: [],
|
|
80
85
|
processorType: USER_PROCESSOR,
|
|
81
86
|
contract: {
|
|
@@ -90,7 +95,7 @@ export class IotaPluginPart {
|
|
|
90
95
|
for (const handler of suiProcessor.eventHandlers) {
|
|
91
96
|
const handlerId = this.handlerRegister.register(handler.handler, chainId)
|
|
92
97
|
this.partitionManager.registerPartitionHandler(HandlerType.SUI_EVENT, handlerId, handler.partitionHandler)
|
|
93
|
-
const eventHandlerConfig: MoveEventHandlerConfig = {
|
|
98
|
+
const eventHandlerConfig: MoveEventHandlerConfig = create(MoveEventHandlerConfigSchema, {
|
|
94
99
|
filters: handler.filters.map((f) => {
|
|
95
100
|
return {
|
|
96
101
|
type: f.type,
|
|
@@ -101,13 +106,13 @@ export class IotaPluginPart {
|
|
|
101
106
|
fetchConfig: handler.fetchConfig,
|
|
102
107
|
handlerId,
|
|
103
108
|
handlerName: handler.handlerName
|
|
104
|
-
}
|
|
109
|
+
})
|
|
105
110
|
contractConfig.moveEventConfigs.push(eventHandlerConfig)
|
|
106
111
|
}
|
|
107
112
|
for (const handler of suiProcessor.callHandlers) {
|
|
108
113
|
const handlerId = this.handlerRegister.register(handler.handler, chainId)
|
|
109
114
|
this.partitionManager.registerPartitionHandler(HandlerType.SUI_CALL, handlerId, handler.partitionHandler)
|
|
110
|
-
const functionHandlerConfig: MoveCallHandlerConfig = {
|
|
115
|
+
const functionHandlerConfig: MoveCallHandlerConfig = create(MoveCallHandlerConfigSchema, {
|
|
111
116
|
filters: handler.filters.map((filter) => {
|
|
112
117
|
return {
|
|
113
118
|
function: filter.function,
|
|
@@ -121,18 +126,18 @@ export class IotaPluginPart {
|
|
|
121
126
|
fetchConfig: handler.fetchConfig,
|
|
122
127
|
handlerId,
|
|
123
128
|
handlerName: handler.handlerName
|
|
124
|
-
}
|
|
129
|
+
})
|
|
125
130
|
contractConfig.moveCallConfigs.push(functionHandlerConfig)
|
|
126
131
|
}
|
|
127
132
|
// deprecated, use objectType processor instead
|
|
128
133
|
for (const handler of suiProcessor.objectChangeHandlers) {
|
|
129
134
|
const handlerId = this.handlerRegister.register(handler.handler, chainId)
|
|
130
|
-
const objectChangeHandler: MoveResourceChangeConfig = {
|
|
135
|
+
const objectChangeHandler: MoveResourceChangeConfig = create(MoveResourceChangeConfigSchema, {
|
|
131
136
|
types: typeof handler.type === 'string' ? [handler.type] : handler.type,
|
|
132
137
|
handlerId,
|
|
133
138
|
handlerName: handler.handlerName,
|
|
134
139
|
includeDeleted: false
|
|
135
|
-
}
|
|
140
|
+
})
|
|
136
141
|
contractConfig.moveResourceChangeConfigs.push(objectChangeHandler)
|
|
137
142
|
}
|
|
138
143
|
config.contractConfigs.push(contractConfig)
|
|
@@ -143,7 +148,7 @@ export class IotaPluginPart {
|
|
|
143
148
|
if (forChainId !== undefined && forChainId !== chainId.toString()) {
|
|
144
149
|
continue
|
|
145
150
|
}
|
|
146
|
-
const accountConfig =
|
|
151
|
+
const accountConfig = create(AccountConfigSchema, {
|
|
147
152
|
address: processor.config.address,
|
|
148
153
|
chainId: processor.getChainId(),
|
|
149
154
|
startBlock: processor.config.startCheckpoint, // TODO maybe use another field
|
|
@@ -152,39 +157,41 @@ export class IotaPluginPart {
|
|
|
152
157
|
|
|
153
158
|
for (const handler of processor.objectChangeHandlers) {
|
|
154
159
|
const handlerId = this.handlerRegister.register(handler.handler, chainId)
|
|
155
|
-
const objectChangeHandler: MoveResourceChangeConfig = {
|
|
160
|
+
const objectChangeHandler: MoveResourceChangeConfig = create(MoveResourceChangeConfigSchema, {
|
|
156
161
|
types: typeof handler.type === 'string' ? [handler.type] : handler.type,
|
|
157
162
|
handlerId,
|
|
158
163
|
handlerName: handler.handlerName,
|
|
159
164
|
includeDeleted: false
|
|
160
|
-
}
|
|
165
|
+
})
|
|
161
166
|
accountConfig.moveResourceChangeConfigs.push(objectChangeHandler)
|
|
162
167
|
}
|
|
163
168
|
|
|
164
169
|
for (const handler of processor.objectHandlers) {
|
|
165
170
|
const handlerId = this.handlerRegister.register(handler.handler, chainId)
|
|
166
171
|
|
|
167
|
-
accountConfig.moveIntervalConfigs.push(
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
172
|
+
accountConfig.moveIntervalConfigs.push(
|
|
173
|
+
create(MoveOnIntervalConfigSchema, {
|
|
174
|
+
intervalConfig: {
|
|
175
|
+
handlerId: handlerId,
|
|
176
|
+
handlerName: handler.handlerName,
|
|
177
|
+
minutes: 0,
|
|
178
|
+
minutesInterval: handler.timeIntervalInMinutes,
|
|
179
|
+
slot: 0,
|
|
180
|
+
slotInterval: handler.checkPointInterval,
|
|
181
|
+
fetchConfig: undefined
|
|
182
|
+
},
|
|
183
|
+
type: handler.type || '',
|
|
184
|
+
ownerType: processor.ownerType,
|
|
185
|
+
resourceFetchConfig: handler.fetchConfig,
|
|
175
186
|
fetchConfig: undefined
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
ownerType: processor.ownerType,
|
|
179
|
-
resourceFetchConfig: handler.fetchConfig,
|
|
180
|
-
fetchConfig: undefined
|
|
181
|
-
})
|
|
187
|
+
})
|
|
188
|
+
)
|
|
182
189
|
}
|
|
183
190
|
|
|
184
191
|
if (processor instanceof IotaAddressProcessor) {
|
|
185
192
|
for (const handler of processor.callHandlers) {
|
|
186
193
|
const handlerId = this.handlerRegister.register(handler.handler, chainId)
|
|
187
|
-
const functionHandlerConfig: MoveCallHandlerConfig = {
|
|
194
|
+
const functionHandlerConfig: MoveCallHandlerConfig = create(MoveCallHandlerConfigSchema, {
|
|
188
195
|
filters: handler.filters.map((filter) => {
|
|
189
196
|
return {
|
|
190
197
|
function: filter.function,
|
|
@@ -198,7 +205,7 @@ export class IotaPluginPart {
|
|
|
198
205
|
fetchConfig: handler.fetchConfig,
|
|
199
206
|
handlerId,
|
|
200
207
|
handlerName: handler.handlerName
|
|
201
|
-
}
|
|
208
|
+
})
|
|
202
209
|
accountConfig.moveCallConfigs.push(functionHandlerConfig)
|
|
203
210
|
}
|
|
204
211
|
}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type Data_SuiCall,
|
|
3
|
+
type Data_SuiEvent,
|
|
4
|
+
type Data_SuiObjectChange,
|
|
5
|
+
type MoveFetchConfig,
|
|
6
|
+
MoveFetchConfigSchema,
|
|
7
|
+
timestampDate
|
|
8
|
+
} from '@sentio/protos'
|
|
9
|
+
import { create } from '@bufbuild/protobuf'
|
|
2
10
|
import { ListStateStorage } from '@sentio/runtime'
|
|
3
11
|
import { IotaNetwork } from './network.js'
|
|
4
|
-
import {
|
|
12
|
+
import { ConnectError, Code } from '@connectrpc/connect'
|
|
5
13
|
import { IotaContext, IotaObjectChangeContext } from './context.js'
|
|
6
14
|
import {
|
|
7
15
|
MoveCallIotaTransaction,
|
|
@@ -26,11 +34,11 @@ import { Required } from 'utility-types'
|
|
|
26
34
|
import { getHandlerName, proxyProcessor } from '../utils/metrics.js'
|
|
27
35
|
import { HandlerOptions } from './models.js'
|
|
28
36
|
|
|
29
|
-
export const DEFAULT_FETCH_CONFIG: MoveFetchConfig = {
|
|
37
|
+
export const DEFAULT_FETCH_CONFIG: MoveFetchConfig = create(MoveFetchConfigSchema, {
|
|
30
38
|
resourceChanges: false,
|
|
31
39
|
allEvents: true,
|
|
32
40
|
inputs: true
|
|
33
|
-
}
|
|
41
|
+
})
|
|
34
42
|
|
|
35
43
|
export type IndexConfigure = Required<IotaBindOptions, 'startCheckpoint' | 'network'>
|
|
36
44
|
|
|
@@ -85,7 +93,7 @@ export class IotaBaseProcessor {
|
|
|
85
93
|
handlerOptions?: HandlerOptions<MoveFetchConfig, T>
|
|
86
94
|
): IotaBaseProcessor {
|
|
87
95
|
let _filters: EventFilter[] = []
|
|
88
|
-
const _fetchConfig =
|
|
96
|
+
const _fetchConfig = create(MoveFetchConfigSchema, { ...DEFAULT_FETCH_CONFIG, ...handlerOptions })
|
|
89
97
|
|
|
90
98
|
if (Array.isArray(filter)) {
|
|
91
99
|
_filters = filter
|
|
@@ -102,7 +110,7 @@ export class IotaBaseProcessor {
|
|
|
102
110
|
handlerName: getHandlerName(),
|
|
103
111
|
handler: async function (data) {
|
|
104
112
|
if (!data.rawTransaction) {
|
|
105
|
-
throw new
|
|
113
|
+
throw new ConnectError('event is null', Code.InvalidArgument)
|
|
106
114
|
}
|
|
107
115
|
const txn = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse
|
|
108
116
|
if (txn.events == null) {
|
|
@@ -116,7 +124,7 @@ export class IotaBaseProcessor {
|
|
|
116
124
|
processor.moduleName,
|
|
117
125
|
processor.config.network,
|
|
118
126
|
processor.config.address,
|
|
119
|
-
data.timestamp
|
|
127
|
+
data.timestamp ? timestampDate(data.timestamp) : new Date(0),
|
|
120
128
|
data.slot,
|
|
121
129
|
txn,
|
|
122
130
|
idx,
|
|
@@ -150,7 +158,7 @@ export class IotaBaseProcessor {
|
|
|
150
158
|
handlerOptions?: HandlerOptions<MoveFetchConfig, T>
|
|
151
159
|
): IotaBaseProcessor {
|
|
152
160
|
let _filters: FunctionNameAndCallFilter[] = []
|
|
153
|
-
const _fetchConfig =
|
|
161
|
+
const _fetchConfig = create(MoveFetchConfigSchema, { ...DEFAULT_FETCH_CONFIG, ...handlerOptions })
|
|
154
162
|
|
|
155
163
|
if (Array.isArray(filter)) {
|
|
156
164
|
_filters = filter
|
|
@@ -165,7 +173,7 @@ export class IotaBaseProcessor {
|
|
|
165
173
|
handlerName: getHandlerName(),
|
|
166
174
|
handler: async function (data) {
|
|
167
175
|
if (!data.rawTransaction) {
|
|
168
|
-
throw new
|
|
176
|
+
throw new ConnectError('call is null', Code.InvalidArgument)
|
|
169
177
|
}
|
|
170
178
|
const tx = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse
|
|
171
179
|
|
|
@@ -173,7 +181,7 @@ export class IotaBaseProcessor {
|
|
|
173
181
|
processor.moduleName,
|
|
174
182
|
processor.config.network,
|
|
175
183
|
processor.config.address,
|
|
176
|
-
data.timestamp
|
|
184
|
+
data.timestamp ? timestampDate(data.timestamp) : new Date(0),
|
|
177
185
|
data.slot,
|
|
178
186
|
tx,
|
|
179
187
|
0,
|
|
@@ -183,7 +191,7 @@ export class IotaBaseProcessor {
|
|
|
183
191
|
const calls: MoveCallIotaTransaction[] = getMoveCalls(tx)
|
|
184
192
|
const txKind = tx.transaction?.data?.transaction
|
|
185
193
|
if (!txKind) {
|
|
186
|
-
throw new
|
|
194
|
+
throw new ConnectError('Unexpected getTransactionKind get empty', Code.InvalidArgument)
|
|
187
195
|
}
|
|
188
196
|
|
|
189
197
|
// getProgrammableTransaction(txKind)
|
|
@@ -236,7 +244,7 @@ export class IotaBaseProcessor {
|
|
|
236
244
|
filter?: TransactionFilter,
|
|
237
245
|
handlerOptions?: HandlerOptions<MoveFetchConfig, IotaTransactionBlockResponse>
|
|
238
246
|
): this {
|
|
239
|
-
const _fetchConfig =
|
|
247
|
+
const _fetchConfig = create(MoveFetchConfigSchema, { ...DEFAULT_FETCH_CONFIG, ...handlerOptions })
|
|
240
248
|
|
|
241
249
|
const processor = this
|
|
242
250
|
|
|
@@ -244,7 +252,7 @@ export class IotaBaseProcessor {
|
|
|
244
252
|
handlerName: getHandlerName(),
|
|
245
253
|
handler: async function (data) {
|
|
246
254
|
if (!data.rawTransaction) {
|
|
247
|
-
throw new
|
|
255
|
+
throw new ConnectError('transaction is null', Code.InvalidArgument)
|
|
248
256
|
}
|
|
249
257
|
const tx = JSON.parse(data.rawTransaction) as IotaTransactionBlockResponse
|
|
250
258
|
|
|
@@ -252,7 +260,7 @@ export class IotaBaseProcessor {
|
|
|
252
260
|
processor.moduleName,
|
|
253
261
|
processor.config.network,
|
|
254
262
|
processor.config.address,
|
|
255
|
-
data.timestamp
|
|
263
|
+
data.timestamp ? timestampDate(data.timestamp) : new Date(0),
|
|
256
264
|
data.slot,
|
|
257
265
|
tx,
|
|
258
266
|
0,
|
|
@@ -283,7 +291,7 @@ export class IotaBaseProcessor {
|
|
|
283
291
|
type: string | string[]
|
|
284
292
|
): this {
|
|
285
293
|
if (this.config.network === IotaNetwork.TEST_NET) {
|
|
286
|
-
throw new
|
|
294
|
+
throw new ConnectError('object change not supported in testnet', Code.InvalidArgument)
|
|
287
295
|
}
|
|
288
296
|
const processor = this
|
|
289
297
|
this.objectChangeHandlers.push({
|
|
@@ -292,7 +300,7 @@ export class IotaBaseProcessor {
|
|
|
292
300
|
const ctx = new IotaObjectChangeContext(
|
|
293
301
|
processor.config.network,
|
|
294
302
|
processor.config.address,
|
|
295
|
-
data.timestamp
|
|
303
|
+
data.timestamp ? timestampDate(data.timestamp) : new Date(0),
|
|
296
304
|
data.slot,
|
|
297
305
|
data.txDigest,
|
|
298
306
|
processor.config.baseLabels
|
|
@@ -324,7 +332,7 @@ export class IotaGlobalProcessor extends IotaBaseProcessor {
|
|
|
324
332
|
): this {
|
|
325
333
|
// TODO enable more strict check
|
|
326
334
|
// if (!filter.publicKeyPrefix || filter.publicKeyPrefix.length < 2) {
|
|
327
|
-
// throw new
|
|
335
|
+
// throw new ConnectError('restriction too low for global processor', Code.InvalidArgument)
|
|
328
336
|
// }
|
|
329
337
|
return super.onTransactionBlock(handler, filter, fetchConfig)
|
|
330
338
|
}
|
package/src/iota/network.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SuiChainId } from '@sentio/chain'
|
|
2
2
|
import { Endpoints } from '@sentio/runtime'
|
|
3
|
-
// import {
|
|
3
|
+
// import { ConnectError, Code } from '@connectrpc/connect'
|
|
4
4
|
import { IotaClient } from '@iota/iota-sdk/client'
|
|
5
5
|
|
|
6
6
|
export type IotaNetwork = SuiChainId
|
|
@@ -13,7 +13,7 @@ export function getClient(network: IotaNetwork): IotaClient {
|
|
|
13
13
|
let chainServer = Endpoints.INSTANCE.chainServer.get(network)
|
|
14
14
|
if (!chainServer) {
|
|
15
15
|
chainServer = getRpcEndpoint(network)
|
|
16
|
-
// throw new
|
|
16
|
+
// throw new ConnectError('RPC endpoint not provided', Code.Internal)
|
|
17
17
|
}
|
|
18
18
|
return new IotaClient({ url: chainServer })
|
|
19
19
|
}
|
package/src/move/filter.ts
CHANGED
package/src/move/index.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { normalizeLabels, Labels, BaseContext, RecordMetaData } from '../index.js'
|
|
1
|
+
import { normalizeLabels, Labels, BaseContext, RecordMetaData, RecordMetaDataSchema } from '../index.js'
|
|
2
2
|
import { SolanaChainId } from '@sentio/chain'
|
|
3
|
+
import { create } from '@bufbuild/protobuf'
|
|
3
4
|
import type { TransactionResponse } from './solana-rpc-types.js'
|
|
4
5
|
|
|
5
6
|
export class SolanaContext extends BaseContext {
|
|
@@ -30,7 +31,7 @@ export class SolanaContext extends BaseContext {
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
getMetaDataInternal(name: string, labels: Labels): RecordMetaData {
|
|
33
|
-
return {
|
|
34
|
+
return create(RecordMetaDataSchema, {
|
|
34
35
|
address: this.address,
|
|
35
36
|
contractName: this.programName,
|
|
36
37
|
blockNumber: this.blockNumber,
|
|
@@ -40,6 +41,6 @@ export class SolanaContext extends BaseContext {
|
|
|
40
41
|
chainId: this.getChainId(),
|
|
41
42
|
name: name,
|
|
42
43
|
labels: normalizeLabels(labels)
|
|
43
|
-
}
|
|
44
|
+
})
|
|
44
45
|
}
|
|
45
46
|
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { errorString, mergeProcessResults, Plugin, PluginManager, USER_PROCESSOR } from '@sentio/runtime'
|
|
2
2
|
import {
|
|
3
|
-
|
|
3
|
+
ContractConfigSchema,
|
|
4
4
|
DataBinding,
|
|
5
5
|
HandlerType,
|
|
6
6
|
InitResponse,
|
|
7
|
-
|
|
7
|
+
InstructionHandlerConfigSchema,
|
|
8
|
+
OnIntervalConfigSchema,
|
|
8
9
|
ProcessConfigResponse,
|
|
9
10
|
ProcessResult
|
|
10
11
|
} from '@sentio/protos'
|
|
11
|
-
|
|
12
|
-
import {
|
|
12
|
+
import { create } from '@bufbuild/protobuf'
|
|
13
|
+
import { ConnectError, Code } from '@connectrpc/connect'
|
|
13
14
|
|
|
14
15
|
import { SolanaProcessorState } from './solana-processor.js'
|
|
15
16
|
import { Instruction as SolInstruction } from '@anchor-lang/core'
|
|
@@ -32,7 +33,7 @@ export class SolanaPlugin extends Plugin {
|
|
|
32
33
|
continue
|
|
33
34
|
}
|
|
34
35
|
|
|
35
|
-
const contractConfig =
|
|
36
|
+
const contractConfig = create(ContractConfigSchema, {
|
|
36
37
|
processorType: USER_PROCESSOR,
|
|
37
38
|
contract: {
|
|
38
39
|
name: solanaProcessor.contractName,
|
|
@@ -50,17 +51,17 @@ export class SolanaPlugin extends Plugin {
|
|
|
50
51
|
break
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
|
-
contractConfig.instructionConfig = {
|
|
54
|
+
contractConfig.instructionConfig = create(InstructionHandlerConfigSchema, {
|
|
54
55
|
innerInstruction: solanaProcessor.processInnerInstruction,
|
|
55
56
|
parsedInstruction: solanaProcessor.fromParsedInstruction !== null,
|
|
56
57
|
rawDataInstruction: solanaProcessor.decodeInstruction !== null,
|
|
57
58
|
fetchTx: fetchTx
|
|
58
|
-
}
|
|
59
|
+
})
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
for (const [idx, handler] of solanaProcessor.blockHandlers.entries()) {
|
|
62
63
|
contractConfig.intervalConfigs.push(
|
|
63
|
-
|
|
64
|
+
create(OnIntervalConfigSchema, {
|
|
64
65
|
handlerId: idx,
|
|
65
66
|
minutesInterval: handler.timeIntervalInMinutes,
|
|
66
67
|
slotInterval: handler.slotInterval,
|
|
@@ -82,19 +83,19 @@ export class SolanaPlugin extends Plugin {
|
|
|
82
83
|
case HandlerType.SOL_BLOCK:
|
|
83
84
|
return this.processSolBlock(request)
|
|
84
85
|
default:
|
|
85
|
-
throw new
|
|
86
|
+
throw new ConnectError('No handle type registered ' + request.handlerType, Code.InvalidArgument)
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
async processSolInstruction(request: DataBinding): Promise<ProcessResult> {
|
|
90
91
|
if (!request.data) {
|
|
91
|
-
throw new
|
|
92
|
+
throw new ConnectError('instruction data cannot be empty', Code.InvalidArgument)
|
|
92
93
|
}
|
|
93
|
-
if (
|
|
94
|
-
throw new
|
|
94
|
+
if (request.data.value.case !== 'solInstruction') {
|
|
95
|
+
throw new ConnectError('instruction data cannot be empty', Code.InvalidArgument)
|
|
95
96
|
}
|
|
96
97
|
|
|
97
|
-
const instruction = request.data.
|
|
98
|
+
const instruction = request.data.value.value
|
|
98
99
|
const promises: Promise<ProcessResult>[] = []
|
|
99
100
|
|
|
100
101
|
// Only have instruction handlers for solana processors
|
|
@@ -103,15 +104,17 @@ export class SolanaPlugin extends Plugin {
|
|
|
103
104
|
let parsedInstruction: SolInstruction | null = null
|
|
104
105
|
|
|
105
106
|
try {
|
|
106
|
-
if (instruction.
|
|
107
|
-
parsedInstruction = processor.getParsedInstruction(
|
|
107
|
+
if (instruction.rawParsed) {
|
|
108
|
+
parsedInstruction = processor.getParsedInstruction(
|
|
109
|
+
JSON.parse(instruction.rawParsed) as { type: string; info: any }
|
|
110
|
+
)
|
|
108
111
|
} else if (instruction.instructionData) {
|
|
109
112
|
parsedInstruction = processor.getParsedInstruction(instruction.instructionData)
|
|
110
113
|
}
|
|
111
114
|
} catch (e) {
|
|
112
|
-
throw new
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
throw new ConnectError(
|
|
116
|
+
'Failed to decode instruction: ' + JSON.stringify(instruction) + errorString(e),
|
|
117
|
+
Code.Internal
|
|
115
118
|
)
|
|
116
119
|
}
|
|
117
120
|
if (parsedInstruction == null) {
|
|
@@ -124,9 +127,9 @@ export class SolanaPlugin extends Plugin {
|
|
|
124
127
|
const res = processor
|
|
125
128
|
.handleInstruction(parsedInstruction, instruction.accounts, insHandler, instruction)
|
|
126
129
|
.catch((e) => {
|
|
127
|
-
throw new
|
|
128
|
-
|
|
129
|
-
|
|
130
|
+
throw new ConnectError(
|
|
131
|
+
'Error processing instruction: ' + JSON.stringify(instruction) + '\n' + errorString(e),
|
|
132
|
+
Code.Internal
|
|
130
133
|
)
|
|
131
134
|
})
|
|
132
135
|
|
|
@@ -137,10 +140,10 @@ export class SolanaPlugin extends Plugin {
|
|
|
137
140
|
}
|
|
138
141
|
|
|
139
142
|
async processSolBlock(request: DataBinding): Promise<ProcessResult> {
|
|
140
|
-
if (
|
|
141
|
-
throw new
|
|
143
|
+
if (request.data?.value.case !== 'solBlock') {
|
|
144
|
+
throw new ConnectError('block data cannot be empty', Code.InvalidArgument)
|
|
142
145
|
}
|
|
143
|
-
const block = request.data.
|
|
146
|
+
const block = request.data.value.value
|
|
144
147
|
const promises: Promise<ProcessResult>[] = []
|
|
145
148
|
for (const processor of SolanaProcessorState.INSTANCE.getValues()) {
|
|
146
149
|
for (const handlerId of request.handlerIds) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Data_SolBlock, Data_SolInstruction, HandleInterval, ProcessResult } from '@sentio/protos'
|
|
1
|
+
import { Data_SolBlock, Data_SolInstruction, HandleInterval, HandleIntervalSchema, ProcessResult } from '@sentio/protos'
|
|
2
|
+
import { create } from '@bufbuild/protobuf'
|
|
2
3
|
import { SolanaContext } from './solana-context.js'
|
|
3
4
|
import { Instruction } from '@anchor-lang/core'
|
|
4
5
|
import { SolanaBindOptions, SolanaFetchConfig } from './solana-options.js'
|
|
@@ -99,7 +100,10 @@ export class SolanaBaseProcessor {
|
|
|
99
100
|
): this {
|
|
100
101
|
return this.onInterval(
|
|
101
102
|
handler,
|
|
102
|
-
|
|
103
|
+
create(HandleIntervalSchema, {
|
|
104
|
+
recentInterval: timeIntervalInMinutes,
|
|
105
|
+
backfillInterval: backfillTimeIntervalInMinutes
|
|
106
|
+
}),
|
|
103
107
|
undefined
|
|
104
108
|
)
|
|
105
109
|
}
|
|
@@ -109,10 +113,14 @@ export class SolanaBaseProcessor {
|
|
|
109
113
|
blockInterval = 1000,
|
|
110
114
|
backfillBlockInterval = 4000
|
|
111
115
|
): this {
|
|
112
|
-
return this.onInterval(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
+
return this.onInterval(
|
|
117
|
+
handler,
|
|
118
|
+
undefined,
|
|
119
|
+
create(HandleIntervalSchema, {
|
|
120
|
+
recentInterval: blockInterval,
|
|
121
|
+
backfillInterval: backfillBlockInterval
|
|
122
|
+
})
|
|
123
|
+
)
|
|
116
124
|
}
|
|
117
125
|
|
|
118
126
|
public onInterval<T>(
|
package/src/store/cache.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IStoreContext } from '@sentio/runtime'
|
|
2
|
-
import {
|
|
2
|
+
import { type DBResponse, type RichStruct, RichStructSchema } from '@sentio/protos'
|
|
3
|
+
import { create } from '@bufbuild/protobuf'
|
|
3
4
|
import { BaseContext } from '../core/index.js'
|
|
4
5
|
|
|
5
6
|
/** Internal entity name used for cache storage */
|
|
@@ -64,17 +65,20 @@ export class MemoryCache {
|
|
|
64
65
|
*/
|
|
65
66
|
public async get<T>(key: string): Promise<T | null> {
|
|
66
67
|
const promise = this.storeContext.sendRequest({
|
|
67
|
-
|
|
68
|
+
case: 'get',
|
|
69
|
+
value: {
|
|
68
70
|
entity: CacheItemEntityName,
|
|
69
71
|
id: key
|
|
70
72
|
}
|
|
71
73
|
})
|
|
72
74
|
|
|
73
75
|
const data = (await promise) as DBResponse
|
|
74
|
-
if (data.entityList
|
|
75
|
-
const entityData = data.
|
|
76
|
-
const value = entityData
|
|
77
|
-
|
|
76
|
+
if (data.value.case === 'entityList' && data.value.value.entities[0]) {
|
|
77
|
+
const entityData = data.value.value.entities[0]?.data
|
|
78
|
+
const value = entityData?.fields['value']
|
|
79
|
+
if (value?.value.case === 'stringValue') {
|
|
80
|
+
return JSON.parse(value.value.value) as T
|
|
81
|
+
}
|
|
78
82
|
}
|
|
79
83
|
|
|
80
84
|
return null
|
|
@@ -94,24 +98,24 @@ export class MemoryCache {
|
|
|
94
98
|
* ```
|
|
95
99
|
*/
|
|
96
100
|
public async set<T>(key: string, value: T): Promise<void> {
|
|
97
|
-
const entityData: RichStruct = {
|
|
101
|
+
const entityData: RichStruct = create(RichStructSchema, {
|
|
98
102
|
fields: {
|
|
99
103
|
id: {
|
|
100
|
-
stringValue: key
|
|
104
|
+
value: { case: 'stringValue', value: key }
|
|
101
105
|
},
|
|
102
106
|
value: {
|
|
103
|
-
stringValue: JSON.stringify(value)
|
|
107
|
+
value: { case: 'stringValue', value: JSON.stringify(value) }
|
|
104
108
|
}
|
|
105
109
|
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
110
|
+
})
|
|
111
|
+
await this.storeContext.sendRequest({
|
|
112
|
+
case: 'upsert',
|
|
113
|
+
value: {
|
|
109
114
|
entity: [CacheItemEntityName],
|
|
110
115
|
id: [key],
|
|
111
116
|
entityData: [entityData]
|
|
112
117
|
}
|
|
113
|
-
}
|
|
114
|
-
await this.storeContext.sendRequest(request)
|
|
118
|
+
})
|
|
115
119
|
}
|
|
116
120
|
|
|
117
121
|
/**
|
|
@@ -125,13 +129,13 @@ export class MemoryCache {
|
|
|
125
129
|
* ```
|
|
126
130
|
*/
|
|
127
131
|
public async delete(key: string): Promise<void> {
|
|
128
|
-
|
|
129
|
-
|
|
132
|
+
await this.storeContext.sendRequest({
|
|
133
|
+
case: 'delete',
|
|
134
|
+
value: {
|
|
130
135
|
entity: [CacheItemEntityName],
|
|
131
136
|
id: [key]
|
|
132
137
|
}
|
|
133
|
-
}
|
|
134
|
-
await this.storeContext.sendRequest(request)
|
|
138
|
+
})
|
|
135
139
|
}
|
|
136
140
|
|
|
137
141
|
/**
|