@sentio/runtime 4.0.0-rc.1 → 4.0.0-rc.10

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.
Files changed (39) hide show
  1. package/lib/chunk-7JGO6QCN.js +15174 -0
  2. package/lib/chunk-7JGO6QCN.js.map +1 -0
  3. package/lib/chunk-JTBA3KXU.js +4988 -0
  4. package/lib/chunk-JTBA3KXU.js.map +1 -0
  5. package/lib/index.d.ts +1423 -581
  6. package/lib/index.js +4 -10
  7. package/lib/index.js.map +1 -1
  8. package/lib/plugin-D-rx1WCp.d.ts +108 -0
  9. package/lib/processor-runner.js +25516 -525
  10. package/lib/processor-runner.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/action-server.ts +3 -2
  13. package/src/chain-config.ts +6 -1
  14. package/src/db-context.ts +58 -45
  15. package/src/endpoints.ts +22 -4
  16. package/src/full-service.ts +18 -400
  17. package/src/gen/google/type/money_pb.ts +41 -0
  18. package/src/gen/processor/protos/processor_pb.ts +3850 -0
  19. package/src/gen/service/common/protos/common_pb.ts +4456 -0
  20. package/src/global-config.ts +3 -2
  21. package/src/index.ts +1 -2
  22. package/src/plugin.ts +26 -16
  23. package/src/processor-runner.ts +25 -35
  24. package/src/service-v3.ts +57 -59
  25. package/src/utils.ts +29 -12
  26. package/lib/chunk-GUQLAUIA.js +0 -67172
  27. package/lib/chunk-GUQLAUIA.js.map +0 -1
  28. package/lib/chunk-KOMGWSWU.js +0 -25311
  29. package/lib/chunk-KOMGWSWU.js.map +0 -1
  30. package/lib/processor-StqZovMW.d.ts +0 -554
  31. package/src/gen/google/protobuf/empty.ts +0 -71
  32. package/src/gen/google/protobuf/struct.ts +0 -561
  33. package/src/gen/google/protobuf/timestamp.ts +0 -113
  34. package/src/gen/google/type/money.ts +0 -134
  35. package/src/gen/processor/protos/processor.ts +0 -15354
  36. package/src/gen/service/common/protos/common.ts +0 -16525
  37. package/src/multicall.ts +0 -1605
  38. package/src/provider.ts +0 -195
  39. package/src/service.ts +0 -549
package/lib/index.js CHANGED
@@ -2,18 +2,15 @@ import { createRequire as createRequireShim } from 'module'; const require = cre
2
2
  import {
3
3
  AbstractStoreContext,
4
4
  DataBindingContext,
5
- DummyProvider,
6
5
  Endpoints,
7
6
  GLOBAL_CONFIG,
8
- ProcessorServiceImpl,
9
- QueuedStaticJsonRpcProvider,
7
+ ProcessorServiceImplV3,
10
8
  StoreContext,
11
9
  USER_PROCESSOR,
12
10
  compareSemver,
13
11
  configureEndpoints,
14
12
  dbMetrics,
15
13
  errorString,
16
- getProvider,
17
14
  locatePackageJson,
18
15
  makeEthCallKey,
19
16
  mergeProcessResults,
@@ -24,11 +21,11 @@ import {
24
21
  providerMetrics,
25
22
  recordRuntimeInfo,
26
23
  timeoutError
27
- } from "./chunk-GUQLAUIA.js";
24
+ } from "./chunk-7JGO6QCN.js";
28
25
  import {
29
26
  Plugin,
30
27
  PluginManager
31
- } from "./chunk-KOMGWSWU.js";
28
+ } from "./chunk-JTBA3KXU.js";
32
29
  import "./chunk-I45UXGDM.js";
33
30
  import "./chunk-KVSDPGUI.js";
34
31
 
@@ -109,15 +106,13 @@ import("node:process").then((p) => p.stdout.write(""));
109
106
  export {
110
107
  AbstractStoreContext,
111
108
  DataBindingContext,
112
- DummyProvider,
113
109
  Endpoints,
114
110
  GLOBAL_CONFIG,
115
111
  ListStateStorage,
116
112
  MapStateStorage,
117
113
  Plugin,
118
114
  PluginManager,
119
- ProcessorServiceImpl,
120
- QueuedStaticJsonRpcProvider,
115
+ ProcessorServiceImplV3,
121
116
  State,
122
117
  StateStorage,
123
118
  StoreContext,
@@ -126,7 +121,6 @@ export {
126
121
  configureEndpoints,
127
122
  dbMetrics,
128
123
  errorString,
129
- getProvider,
130
124
  locatePackageJson,
131
125
  makeEthCallKey,
132
126
  mergeProcessResults,
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/state.ts","../src/chain-config.ts","../src/index.ts"],"sourcesContent":["export class State {\n stateMap = new Map<string, any>()\n\n static INSTANCE = new State()\n\n static reset() {\n State.INSTANCE = new State()\n }\n}\n\nexport abstract class StateStorage<T> {\n // TODO learn how to define single instance for all subclasses\n\n protected constructor() {\n //\n }\n\n abstract initValue(): T\n\n key(): string {\n return this.constructor.name\n }\n\n getOrRegister(): T {\n let metricState: T = State.INSTANCE.stateMap.get(this.key())\n if (!metricState) {\n metricState = this.initValue()\n State.INSTANCE.stateMap.set(this.key(), metricState)\n }\n return metricState\n }\n\n unregister(): T {\n const value = State.INSTANCE.stateMap.get(this.key())\n State.INSTANCE.stateMap.delete(this.key())\n return value\n }\n}\n\nexport abstract class MapStateStorage<T> extends StateStorage<Map<string, T>> {\n initValue() {\n return new Map<string, T>()\n }\n\n getValue(key: string): T | undefined {\n const m = this.getOrRegister()\n return m.get(key)\n }\n\n getValues(): T[] {\n const m = this.getOrRegister()\n return Array.from(m.values())\n }\n\n getOrSetValue(key: string, value: T): T {\n const m = this.getOrRegister()\n const oldValue = m.get(key)\n if (oldValue) {\n if (oldValue !== value) {\n console.warn(key, 'has been registered twice, use the previous one')\n }\n return oldValue\n }\n m.set(key, value)\n return value\n }\n}\n\nexport abstract class ListStateStorage<T> extends StateStorage<T[]> {\n initValue() {\n return []\n }\n\n getValues(): T[] {\n return this.getOrRegister()\n }\n\n addValue(value: T): T {\n const m = this.getOrRegister()\n m.push(value)\n return value\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","export interface ChainConfig {\n ChainID: string\n Https?: string[]\n ChainServer?: string\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","export * from './plugin.js'\nexport * from './state.js'\nexport * from './utils.js'\nexport * from './endpoints.js'\nexport * from './chain-config.js'\nexport * from './service.js'\nexport { GLOBAL_CONFIG, type GlobalConfig } from './global-config.js'\nexport * from './db-context.js'\nexport * from './provider.js'\nexport * from './metrics.js'\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,IAAM,QAAN,MAAM,OAAM;AAAA,EACjB,WAAW,oBAAI,IAAiB;AAAA,EAEhC,OAAO,WAAW,IAAI,OAAM;AAAA,EAE5B,OAAO,QAAQ;AACb,WAAM,WAAW,IAAI,OAAM;AAAA,EAC7B;AACF;AAEO,IAAe,eAAf,MAA+B;AAAA;AAAA,EAG1B,cAAc;AAAA,EAExB;AAAA,EAIA,MAAc;AACZ,WAAO,KAAK,YAAY;AAAA,EAC1B;AAAA,EAEA,gBAAmB;AACjB,QAAI,cAAiB,MAAM,SAAS,SAAS,IAAI,KAAK,IAAI,CAAC;AAC3D,QAAI,CAAC,aAAa;AAChB,oBAAc,KAAK,UAAU;AAC7B,YAAM,SAAS,SAAS,IAAI,KAAK,IAAI,GAAG,WAAW;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,aAAgB;AACd,UAAM,QAAQ,MAAM,SAAS,SAAS,IAAI,KAAK,IAAI,CAAC;AACpD,UAAM,SAAS,SAAS,OAAO,KAAK,IAAI,CAAC;AACzC,WAAO;AAAA,EACT;AACF;AAEO,IAAe,kBAAf,cAA0C,aAA6B;AAAA,EAC5E,YAAY;AACV,WAAO,oBAAI,IAAe;AAAA,EAC5B;AAAA,EAEA,SAAS,KAA4B;AACnC,UAAM,IAAI,KAAK,cAAc;AAC7B,WAAO,EAAE,IAAI,GAAG;AAAA,EAClB;AAAA,EAEA,YAAiB;AACf,UAAM,IAAI,KAAK,cAAc;AAC7B,WAAO,MAAM,KAAK,EAAE,OAAO,CAAC;AAAA,EAC9B;AAAA,EAEA,cAAc,KAAa,OAAa;AACtC,UAAM,IAAI,KAAK,cAAc;AAC7B,UAAM,WAAW,EAAE,IAAI,GAAG;AAC1B,QAAI,UAAU;AACZ,UAAI,aAAa,OAAO;AACtB,gBAAQ,KAAK,KAAK,iDAAiD;AAAA,MACrE;AACA,aAAO;AAAA,IACT;AACA,MAAE,IAAI,KAAK,KAAK;AAChB,WAAO;AAAA,EACT;AACF;AAEO,IAAe,mBAAf,cAA2C,aAAkB;AAAA,EAClE,YAAY;AACV,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,YAAiB;AACf,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA,EAEA,SAAS,OAAa;AACpB,UAAM,IAAI,KAAK,cAAc;AAC7B,MAAE,KAAK,KAAK;AACZ,WAAO;AAAA,EACT;AACF;AACC,OAAO,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,EAAE,CAAC;;;AC9ErD,OAAO,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,EAAE,CAAC;;;ACKrD,OAAO,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,EAAE,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/state.ts","../src/chain-config.ts","../src/index.ts"],"sourcesContent":["export class State {\n stateMap = new Map<string, any>()\n\n static INSTANCE = new State()\n\n static reset() {\n State.INSTANCE = new State()\n }\n}\n\nexport abstract class StateStorage<T> {\n // TODO learn how to define single instance for all subclasses\n\n protected constructor() {\n //\n }\n\n abstract initValue(): T\n\n key(): string {\n return this.constructor.name\n }\n\n getOrRegister(): T {\n let metricState: T = State.INSTANCE.stateMap.get(this.key())\n if (!metricState) {\n metricState = this.initValue()\n State.INSTANCE.stateMap.set(this.key(), metricState)\n }\n return metricState\n }\n\n unregister(): T {\n const value = State.INSTANCE.stateMap.get(this.key())\n State.INSTANCE.stateMap.delete(this.key())\n return value\n }\n}\n\nexport abstract class MapStateStorage<T> extends StateStorage<Map<string, T>> {\n initValue() {\n return new Map<string, T>()\n }\n\n getValue(key: string): T | undefined {\n const m = this.getOrRegister()\n return m.get(key)\n }\n\n getValues(): T[] {\n const m = this.getOrRegister()\n return Array.from(m.values())\n }\n\n getOrSetValue(key: string, value: T): T {\n const m = this.getOrRegister()\n const oldValue = m.get(key)\n if (oldValue) {\n if (oldValue !== value) {\n console.warn(key, 'has been registered twice, use the previous one')\n }\n return oldValue\n }\n m.set(key, value)\n return value\n }\n}\n\nexport abstract class ListStateStorage<T> extends StateStorage<T[]> {\n initValue() {\n return []\n }\n\n getValues(): T[] {\n return this.getOrRegister()\n }\n\n addValue(value: T): T {\n const m = this.getOrRegister()\n m.push(value)\n return value\n }\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","export interface RpcConfig {\n Url: string\n Meta?: Record<string, string>\n}\n\nexport interface ChainConfig {\n ChainID: string\n Https?: string[]\n Rpc?: RpcConfig\n}\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));","export * from './plugin.js'\nexport * from './state.js'\nexport * from './utils.js'\nexport * from './endpoints.js'\nexport * from './chain-config.js'\nexport * from './service-v3.js'\nexport { GLOBAL_CONFIG, type GlobalConfig } from './global-config.js'\nexport * from './db-context.js'\nexport * from './metrics.js'\n;import(\"node:process\").then((p) => p.stdout.write(\"\"));"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,IAAM,QAAN,MAAM,OAAM;AAAA,EACjB,WAAW,oBAAI,IAAiB;AAAA,EAEhC,OAAO,WAAW,IAAI,OAAM;AAAA,EAE5B,OAAO,QAAQ;AACb,WAAM,WAAW,IAAI,OAAM;AAAA,EAC7B;AACF;AAEO,IAAe,eAAf,MAA+B;AAAA;AAAA,EAG1B,cAAc;AAAA,EAExB;AAAA,EAIA,MAAc;AACZ,WAAO,KAAK,YAAY;AAAA,EAC1B;AAAA,EAEA,gBAAmB;AACjB,QAAI,cAAiB,MAAM,SAAS,SAAS,IAAI,KAAK,IAAI,CAAC;AAC3D,QAAI,CAAC,aAAa;AAChB,oBAAc,KAAK,UAAU;AAC7B,YAAM,SAAS,SAAS,IAAI,KAAK,IAAI,GAAG,WAAW;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,aAAgB;AACd,UAAM,QAAQ,MAAM,SAAS,SAAS,IAAI,KAAK,IAAI,CAAC;AACpD,UAAM,SAAS,SAAS,OAAO,KAAK,IAAI,CAAC;AACzC,WAAO;AAAA,EACT;AACF;AAEO,IAAe,kBAAf,cAA0C,aAA6B;AAAA,EAC5E,YAAY;AACV,WAAO,oBAAI,IAAe;AAAA,EAC5B;AAAA,EAEA,SAAS,KAA4B;AACnC,UAAM,IAAI,KAAK,cAAc;AAC7B,WAAO,EAAE,IAAI,GAAG;AAAA,EAClB;AAAA,EAEA,YAAiB;AACf,UAAM,IAAI,KAAK,cAAc;AAC7B,WAAO,MAAM,KAAK,EAAE,OAAO,CAAC;AAAA,EAC9B;AAAA,EAEA,cAAc,KAAa,OAAa;AACtC,UAAM,IAAI,KAAK,cAAc;AAC7B,UAAM,WAAW,EAAE,IAAI,GAAG;AAC1B,QAAI,UAAU;AACZ,UAAI,aAAa,OAAO;AACtB,gBAAQ,KAAK,KAAK,iDAAiD;AAAA,MACrE;AACA,aAAO;AAAA,IACT;AACA,MAAE,IAAI,KAAK,KAAK;AAChB,WAAO;AAAA,EACT;AACF;AAEO,IAAe,mBAAf,cAA2C,aAAkB;AAAA,EAClE,YAAY;AACV,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,YAAiB;AACf,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA,EAEA,SAAS,OAAa;AACpB,UAAM,IAAI,KAAK,cAAc;AAC7B,MAAE,KAAK,KAAK;AACZ,WAAO;AAAA,EACT;AACF;AACC,OAAO,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,EAAE,CAAC;;;ACzErD,OAAO,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,EAAE,CAAC;;;ACDrD,OAAO,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,EAAE,CAAC;","names":[]}
@@ -0,0 +1,108 @@
1
+ import { DBResponse, TemplateInstance, TimeseriesResult, DBRequest_DBUpsert, ProcessStreamResponseSchema, ProcessStreamResponseV3Schema, DBRequestSchema, HandlerType, ProcessConfigResponse, StartRequest, DataBinding, PreparedData, ProcessResult, PreprocessResult, ProcessStreamResponse_Partitions, UpdateTemplatesRequest } from '@sentio/protos';
2
+ import { Subject } from 'rxjs';
3
+ import { MessageInitShape } from '@bufbuild/protobuf';
4
+ import { AsyncLocalStorage } from 'node:async_hooks';
5
+
6
+ type ProcessStreamResponseInit = MessageInitShape<typeof ProcessStreamResponseSchema>;
7
+ type ProcessStreamResponseV3Init = MessageInitShape<typeof ProcessStreamResponseV3Schema>;
8
+ type Request = NonNullable<MessageInitShape<typeof DBRequestSchema>['op']>;
9
+ type RequestType = NonNullable<Request['case']>;
10
+ declare const timeoutError: Error;
11
+ interface IStoreContext {
12
+ sendRequest(request: Request, timeoutSecs?: number): Promise<DBResponse>;
13
+ result(dbResult: DBResponse): void;
14
+ error(processId: number, e: any): void;
15
+ close(): void;
16
+ }
17
+ interface IDataBindingContext extends IStoreContext {
18
+ sendTemplateRequest(templates: Array<TemplateInstance>, unbind: boolean): void;
19
+ sendTimeseriesRequest(timeseries: Array<TimeseriesResult>): void;
20
+ }
21
+ declare abstract class AbstractStoreContext implements IStoreContext {
22
+ readonly processId: number;
23
+ private static opCounter;
24
+ protected defers: Map<bigint, {
25
+ resolve: (value: any) => void;
26
+ reject: (reason?: any) => void;
27
+ requestType?: RequestType;
28
+ }>;
29
+ private statsInterval;
30
+ private pendings;
31
+ constructor(processId: number);
32
+ newPromise<T>(opId: bigint, requestType?: RequestType): Promise<T>;
33
+ abstract doSend(resp: ProcessStreamResponseInit | ProcessStreamResponseV3Init): void;
34
+ sendRequest(request: Request, timeoutSecs?: number): Promise<DBResponse>;
35
+ result(dbResult: DBResponse): void;
36
+ error(processId: number, e: any): void;
37
+ close(): void;
38
+ upsertBatch: {
39
+ opId: bigint;
40
+ request: DBRequest_DBUpsert;
41
+ promise: Promise<DBResponse>;
42
+ timer: NodeJS.Timeout;
43
+ } | undefined;
44
+ private sendUpsertInBatch;
45
+ private sendBatch;
46
+ awaitPendings(): Promise<void>;
47
+ }
48
+ declare class StoreContext extends AbstractStoreContext {
49
+ readonly subject: Subject<ProcessStreamResponseInit>;
50
+ constructor(subject: Subject<ProcessStreamResponseInit>, processId: number);
51
+ doSend(resp: ProcessStreamResponseInit): void;
52
+ }
53
+ declare class DataBindingContext extends AbstractStoreContext implements IDataBindingContext {
54
+ readonly processId: number;
55
+ readonly subject: Subject<ProcessStreamResponseV3Init>;
56
+ constructor(processId: number, subject: Subject<ProcessStreamResponseV3Init>);
57
+ sendTemplateRequest(templates: Array<TemplateInstance>, unbind: boolean): void;
58
+ sendTimeseriesRequest(timeseries: Array<TimeseriesResult>): void;
59
+ doSend(resp: ProcessStreamResponseV3Init): void;
60
+ }
61
+
62
+ declare abstract class Plugin {
63
+ name: string;
64
+ supportedHandlers: HandlerType[];
65
+ configure(config: ProcessConfigResponse, forChainId?: string): Promise<void>;
66
+ start(start: StartRequest): Promise<void>;
67
+ /**
68
+ * @deprecated The method should not be used, use ctx.states instead
69
+ */
70
+ stateDiff(config: ProcessConfigResponse): boolean;
71
+ processBinding(request: DataBinding, preparedData: PreparedData | undefined): Promise<ProcessResult>;
72
+ preprocessBinding(request: DataBinding, preprocessStore: {
73
+ [k: string]: any;
74
+ }): Promise<PreprocessResult>;
75
+ partition(request: DataBinding): Promise<ProcessStreamResponse_Partitions>;
76
+ /**
77
+ * method used by action server only
78
+ * @param port
79
+ */
80
+ startServer(port?: number): Promise<void>;
81
+ /**
82
+ * method used by action server only
83
+ */
84
+ shutdownServer(): void;
85
+ }
86
+ declare class PluginManager {
87
+ static INSTANCE: PluginManager;
88
+ dbContextLocalStorage: AsyncLocalStorage<IStoreContext | IDataBindingContext | undefined>;
89
+ plugins: Plugin[];
90
+ typesToPlugin: Map<HandlerType, Plugin>;
91
+ register(plugin: Plugin): void;
92
+ configure(config: ProcessConfigResponse): Promise<void>;
93
+ start(start: StartRequest, actionServerPort?: number): Promise<void[]>;
94
+ startServer(port?: number): Promise<void[]>;
95
+ shutdown(): void;
96
+ /**
97
+ * @deprecated The method should not be used, use ctx.states instead
98
+ */
99
+ stateDiff(config: ProcessConfigResponse): boolean;
100
+ processBinding(request: DataBinding, preparedData: PreparedData | undefined, dbContext?: IDataBindingContext | IStoreContext): Promise<ProcessResult>;
101
+ partition(request: DataBinding): Promise<ProcessStreamResponse_Partitions>;
102
+ preprocessBinding(request: DataBinding, preprocessStore: {
103
+ [k: string]: any;
104
+ }, dbContext?: IDataBindingContext | IStoreContext): Promise<PreprocessResult>;
105
+ updateTemplates(request: UpdateTemplatesRequest): Promise<void>;
106
+ }
107
+
108
+ export { AbstractStoreContext as A, DataBindingContext as D, type IStoreContext as I, Plugin as P, StoreContext as S, PluginManager as a, type IDataBindingContext as b, timeoutError as t };