@sentio/sdk 2.36.2-rc.1 → 2.37.0-rc.11

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 (70) hide show
  1. package/lib/core/base-context.d.ts +4 -0
  2. package/lib/core/base-context.d.ts.map +1 -1
  3. package/lib/core/base-context.js +20 -4
  4. package/lib/core/base-context.js.map +1 -1
  5. package/lib/core/core-plugin.d.ts.map +1 -1
  6. package/lib/core/core-plugin.js +8 -0
  7. package/lib/core/core-plugin.js.map +1 -1
  8. package/lib/core/database-schema.d.ts +15 -0
  9. package/lib/core/database-schema.d.ts.map +1 -0
  10. package/lib/core/database-schema.js +16 -0
  11. package/lib/core/database-schema.js.map +1 -0
  12. package/lib/core/index.d.ts +1 -0
  13. package/lib/core/index.d.ts.map +1 -1
  14. package/lib/core/index.js +1 -0
  15. package/lib/core/index.js.map +1 -1
  16. package/lib/store/codegen.d.ts +4 -0
  17. package/lib/store/codegen.d.ts.map +1 -0
  18. package/lib/store/codegen.js +221 -0
  19. package/lib/store/codegen.js.map +1 -0
  20. package/lib/store/context.d.ts +2 -0
  21. package/lib/store/context.d.ts.map +1 -0
  22. package/lib/store/context.js +2 -0
  23. package/lib/store/context.js.map +1 -0
  24. package/lib/store/decorators.d.ts +12 -0
  25. package/lib/store/decorators.d.ts.map +1 -0
  26. package/lib/store/decorators.js +25 -0
  27. package/lib/store/decorators.js.map +1 -0
  28. package/lib/store/entity.d.ts +17 -0
  29. package/lib/store/entity.d.ts.map +1 -0
  30. package/lib/store/entity.js +61 -0
  31. package/lib/store/entity.js.map +1 -0
  32. package/lib/store/index.d.ts +6 -0
  33. package/lib/store/index.d.ts.map +1 -0
  34. package/lib/store/index.js +6 -0
  35. package/lib/store/index.js.map +1 -0
  36. package/lib/store/run.d.ts +2 -0
  37. package/lib/store/run.d.ts.map +1 -0
  38. package/lib/store/run.js +11 -0
  39. package/lib/store/run.js.map +1 -0
  40. package/lib/store/schema.d.ts +7 -0
  41. package/lib/store/schema.d.ts.map +1 -0
  42. package/lib/store/schema.js +30 -0
  43. package/lib/store/schema.js.map +1 -0
  44. package/lib/store/store.d.ts +12 -0
  45. package/lib/store/store.d.ts.map +1 -0
  46. package/lib/store/store.js +74 -0
  47. package/lib/store/store.js.map +1 -0
  48. package/lib/store/types.d.ts +10 -0
  49. package/lib/store/types.d.ts.map +1 -0
  50. package/lib/store/types.js +2 -0
  51. package/lib/store/types.js.map +1 -0
  52. package/lib/testing/test-processor-server.d.ts +2 -5
  53. package/lib/testing/test-processor-server.d.ts.map +1 -1
  54. package/lib/testing/test-processor-server.js +2 -2
  55. package/lib/testing/test-processor-server.js.map +1 -1
  56. package/package.json +11 -8
  57. package/src/core/base-context.ts +22 -4
  58. package/src/core/core-plugin.ts +9 -0
  59. package/src/core/database-schema.ts +24 -0
  60. package/src/core/index.ts +1 -0
  61. package/src/store/codegen.ts +256 -0
  62. package/src/store/context.ts +1 -0
  63. package/src/store/decorators.ts +32 -0
  64. package/src/store/entity.ts +71 -0
  65. package/src/store/index.ts +5 -0
  66. package/src/store/run.ts +10 -0
  67. package/src/store/schema.ts +35 -0
  68. package/src/store/store.ts +80 -0
  69. package/src/store/types.ts +10 -0
  70. package/src/testing/test-processor-server.ts +13 -2
@@ -0,0 +1,11 @@
1
+ import { codegen } from './codegen.js';
2
+ if (process.argv.length > 3) {
3
+ const srcFile = process.argv[2];
4
+ const targetDir = process.argv[3];
5
+ await codegen(srcFile, targetDir);
6
+ }
7
+ else {
8
+ console.error('Not enough argument');
9
+ process.exit(1);
10
+ }
11
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/store/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjC,MAAM,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;AACnC,CAAC;KAAM,CAAC;IACN,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { DocumentNode, GraphQLSchema } from 'graphql/index.js';
2
+ export declare function buildSchema(doc: DocumentNode): GraphQLSchema;
3
+ export declare function schemaFromFile(filePath: string): {
4
+ schema: GraphQLSchema;
5
+ source: string;
6
+ };
7
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,YAAY,EAAgB,aAAa,EAAyB,MAAM,kBAAkB,CAAA;AAqBnH,wBAAgB,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,CAO5D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM;;;EAI9C"}
@@ -0,0 +1,30 @@
1
+ import { buildASTSchema, extendSchema, parse, validateSchema } from 'graphql/index.js';
2
+ import * as fs from 'node:fs';
3
+ const customScalars = ['BigInt', 'BigDecimal', 'DateTime', 'JSON', 'Bytes', 'ID'];
4
+ const baseSchema = buildASTSchema(parse(`
5
+ directive @entity on OBJECT
6
+ directive @query on INTERFACE
7
+ directive @derivedFrom(field: String!) on FIELD_DEFINITION
8
+ directive @unique on FIELD_DEFINITION
9
+ directive @index(fields: [String!] unique: Boolean) repeatable on OBJECT | FIELD_DEFINITION
10
+ directive @fulltext(query: String!) on FIELD_DEFINITION
11
+ directive @cardinality(value: Int!) on OBJECT | FIELD_DEFINITION
12
+ directive @byteWeight(value: Float!) on FIELD_DEFINITION
13
+ directive @variant on OBJECT # legacy
14
+ directive @jsonField on OBJECT # legacy
15
+ ${customScalars.map((name) => 'scalar ' + name).join('\n')}
16
+ `));
17
+ export function buildSchema(doc) {
18
+ const schema = extendSchema(baseSchema, doc);
19
+ const errors = validateSchema(schema).filter((err) => !/query root/i.test(err.message));
20
+ if (errors.length > 0) {
21
+ throw errors[0];
22
+ }
23
+ return schema;
24
+ }
25
+ export function schemaFromFile(filePath) {
26
+ const source = fs.readFileSync(filePath, 'utf-8');
27
+ const doc = parse(source);
28
+ return { schema: buildSchema(doc), source };
29
+ }
30
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAgB,YAAY,EAAiB,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACnH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAE7B,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AAEjF,MAAM,UAAU,GAAG,cAAc,CAC/B,KAAK,CAAC;;;;;;;;;;;MAWF,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CAC7D,CAAC,CACD,CAAA;AAED,MAAM,UAAU,WAAW,CAAC,GAAiB;IAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;IACvF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACjD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;IACzB,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAA;AAC7C,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Entity, EntityClass } from './entity.js';
2
+ import { StoreContext } from './context.js';
3
+ export declare class Store {
4
+ private readonly context;
5
+ constructor(context: StoreContext);
6
+ get<T extends Entity>(entity: EntityClass<T> | string, id: string): Promise<T | undefined>;
7
+ delete(entity: EntityClass<any>, id: string | string[]): Promise<void>;
8
+ upsert<T extends Entity>(entity: T | T[]): Promise<void>;
9
+ list<T extends Entity>(entity: EntityClass<T>, limit?: number, offset?: number): Promise<T[]>;
10
+ private newEntity;
11
+ }
12
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3C,qBAAa,KAAK;IACJ,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY;IAE5C,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAe1F,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBtE,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxD,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAenG,OAAO,CAAC,SAAS;CAYlB"}
@@ -0,0 +1,74 @@
1
+ import { Entity } from './entity.js';
2
+ import { DatabaseSchema } from '../core/index.js';
3
+ export class Store {
4
+ context;
5
+ constructor(context) {
6
+ this.context = context;
7
+ }
8
+ async get(entity, id) {
9
+ const promise = this.context.sendRequest({
10
+ get: {
11
+ entity: typeof entity == 'string' ? entity : entity.prototype.entityName,
12
+ id
13
+ }
14
+ });
15
+ const data = (await promise);
16
+ if (data?.['id'] != null) {
17
+ return this.newEntity(entity, data);
18
+ }
19
+ return undefined;
20
+ }
21
+ async delete(entity, id) {
22
+ const toBeDeleted = [];
23
+ if (Array.isArray(id)) {
24
+ for (const i of id) {
25
+ toBeDeleted.push({ entity: entity.prototype.entityName, id: i });
26
+ }
27
+ }
28
+ else {
29
+ toBeDeleted.push({ entity: entity.prototype.entityName, id });
30
+ }
31
+ await this.context.sendRequest({
32
+ delete: {
33
+ entity: toBeDeleted.map((e) => e.entity),
34
+ id: toBeDeleted.map((e) => e.id)
35
+ }
36
+ });
37
+ }
38
+ async upsert(entity) {
39
+ const entities = Array.isArray(entity) ? entity : [entity];
40
+ const promise = this.context.sendRequest({
41
+ upsert: {
42
+ entity: entities.map((e) => e.constructor.prototype.entityName),
43
+ data: entities.map((e) => e.data),
44
+ id: entities.map((e) => e.id)
45
+ }
46
+ });
47
+ await promise;
48
+ }
49
+ async list(entity, limit, offset) {
50
+ const promise = this.context.sendRequest({
51
+ list: {
52
+ entity: entity.constructor.prototype.entityName,
53
+ limit,
54
+ offset
55
+ }
56
+ });
57
+ const list = (await promise);
58
+ return list.map((data) => {
59
+ return this.newEntity(entity, data);
60
+ });
61
+ }
62
+ newEntity(entity, data) {
63
+ if (typeof entity == 'string') {
64
+ const en = DatabaseSchema.findEntity(entity);
65
+ if (!en) {
66
+ // it is an interface
67
+ return new Entity(data);
68
+ }
69
+ entity = en;
70
+ }
71
+ return new entity(data);
72
+ }
73
+ }
74
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type { BigDecimal } from '@sentio/bigdecimal';
2
+ export type ID = string;
3
+ export type String = string;
4
+ export type Int = number;
5
+ export type Float = number;
6
+ export type Boolean = boolean;
7
+ export type DateTime = Date;
8
+ export type Json = any;
9
+ export type Bytes = Uint8Array;
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,MAAM,EAAE,GAAG,MAAM,CAAA;AACvB,MAAM,MAAM,MAAM,GAAG,MAAM,CAAA;AAC3B,MAAM,MAAM,GAAG,GAAG,MAAM,CAAA;AACxB,MAAM,MAAM,KAAK,GAAG,MAAM,CAAA;AAC1B,MAAM,MAAM,OAAO,GAAG,OAAO,CAAA;AAC7B,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAA;AAC3B,MAAM,MAAM,IAAI,GAAG,GAAG,CAAA;AACtB,MAAM,MAAM,KAAK,GAAG,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { AccountConfig, ContractConfig, DataBinding, Empty, ProcessBindingResponse, ProcessBindingsRequest, ProcessConfigRequest, ProcessConfigResponse, ProcessorServiceImplementation, StartRequest } from '@sentio/protos';
1
+ import { AccountConfig, ContractConfig, DataBinding, DeepPartial, Empty, ProcessBindingResponse, ProcessBindingsRequest, ProcessConfigRequest, ProcessConfigResponse, ProcessorServiceImplementation, ProcessStreamRequest, ProcessStreamResponse, ServerStreamingMethodResult, StartRequest } from '@sentio/protos';
2
2
  import { CallContext } from 'nice-grpc-common';
3
3
  import { ProcessorServiceImpl } from '@sentio/runtime';
4
4
  import { AptosFacet } from './aptos-facet.js';
@@ -23,9 +23,6 @@ export declare class TestProcessorServer implements ProcessorServiceImplementati
23
23
  getConfig(request: ProcessConfigRequest, context?: CallContext): Promise<ProcessConfigResponse>;
24
24
  processBindings(request: ProcessBindingsRequest, context?: CallContext): Promise<ProcessBindingResponse>;
25
25
  processBinding(request: DataBinding, context?: CallContext): Promise<ProcessBindingResponse>;
26
- processBindingsStream(request: AsyncIterable<DataBinding>, context: CallContext): AsyncGenerator<{
27
- result: import("@sentio/protos").ProcessResult;
28
- configUpdated: boolean;
29
- }, void, unknown>;
26
+ processBindingsStream(requests: AsyncIterable<ProcessStreamRequest>, context: CallContext): ServerStreamingMethodResult<DeepPartial<ProcessStreamResponse>>;
30
27
  }
31
28
  //# sourceMappingURL=test-processor-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-processor-server.d.ts","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,KAAK,EACL,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAa,oBAAoB,EAAS,MAAM,iBAAiB,CAAA;AAGxE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,eAAO,MAAM,YAAY,EAAE,WAA6B,CAAA;AAExD,wBAAgB,SAAS,SAExB;AAED,qBAAa,mBAAoB,YAAW,8BAA8B;IACxE,OAAO,EAAE,oBAAoB,CAAA;IAC7B,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,cAAc,EAAE,aAAa,EAAE,CAAA;IAE/B,KAAK,EAAE,UAAU,CAAA;IACjB,GAAG,EAAE,QAAQ,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,QAAQ,CAAA;IACb,IAAI,EAAE,SAAS,CAAA;gBAEH,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAgB5E,KAAK,CAAC,OAAO,GAAE,YAAwC,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,KAAK,CAAC;IAQtG,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,KAAK,CAAC;IAI5D,SAAS,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIhG,eAAe,CACb,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,WAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC;IAIlC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,WAA0B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI1G,qBAAqB,CAAC,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,WAAW;;;;CAGhF"}
1
+ {"version":3,"file":"test-processor-server.d.ts","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,EACL,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,EAC3B,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAa,oBAAoB,EAAS,MAAM,iBAAiB,CAAA;AAGxE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,eAAO,MAAM,YAAY,EAAE,WAA6B,CAAA;AAExD,wBAAgB,SAAS,SAExB;AAED,qBAAa,mBAAoB,YAAW,8BAA8B;IACxE,OAAO,EAAE,oBAAoB,CAAA;IAC7B,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,cAAc,EAAE,aAAa,EAAE,CAAA;IAE/B,KAAK,EAAE,UAAU,CAAA;IACjB,GAAG,EAAE,QAAQ,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,QAAQ,CAAA;IACb,IAAI,EAAE,SAAS,CAAA;gBAEH,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAgB5E,KAAK,CAAC,OAAO,GAAE,YAAwC,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,KAAK,CAAC;IAQtG,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,KAAK,CAAC;IAI5D,SAAS,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIhG,eAAe,CACb,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,WAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC;IAIlC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,WAA0B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI1G,qBAAqB,CACnB,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC7C,OAAO,EAAE,WAAW,GACnB,2BAA2B,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;CAOnE"}
@@ -50,8 +50,8 @@ export class TestProcessorServer {
50
50
  processBinding(request, context = TEST_CONTEXT) {
51
51
  return this.service.processBindings({ bindings: [request] }, context);
52
52
  }
53
- processBindingsStream(request, context) {
54
- return this.service.processBindingsStream(request, context);
53
+ processBindingsStream(requests, context) {
54
+ throw new Error('Method not implemented.');
55
55
  }
56
56
  }
57
57
  //# sourceMappingURL=test-processor-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-processor-server.js","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-processor-server.js","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentio/sdk",
3
- "version": "2.36.2-rc.1",
3
+ "version": "2.37.0-rc.11",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -35,7 +35,9 @@
35
35
  "./sui/builtin/0x2": "./lib/sui/builtin/0x2.js",
36
36
  "./sui/builtin/0x3": "./lib/sui/builtin/0x3.js",
37
37
  "./fuel": "./lib/fuel/index.js",
38
- "./fuel/codegen": "./lib/fuel/codegen/index.js"
38
+ "./fuel/codegen": "./lib/fuel/codegen/index.js",
39
+ "./store": "./lib/store/index.js",
40
+ "./store/codegen": "./lib/store/codegen.js"
39
41
  },
40
42
  "files": [
41
43
  "{lib,src}",
@@ -52,9 +54,9 @@
52
54
  "@sentio/chain": "^1.0.21",
53
55
  "@sentio/ethers-v6": "^1.0.29",
54
56
  "@solana/web3.js": "1.91.8",
55
- "@typemove/aptos": "~1.6.0",
56
- "@typemove/move": "~1.6.0",
57
- "@typemove/sui": "~1.6.0",
57
+ "@typemove/aptos": "~1.6.1",
58
+ "@typemove/move": "~1.6.1",
59
+ "@typemove/sui": "~1.6.1",
58
60
  "bs58": "^5.0.0",
59
61
  "chalk": "^5.3.0",
60
62
  "csv-parse": "^5.5.3",
@@ -77,8 +79,8 @@
77
79
  "typedoc": "^0.25.7",
78
80
  "utility-types": "^3.11.0",
79
81
  "yaml": "^2.3.4",
80
- "@sentio/runtime": "^2.36.2-rc.1",
81
- "@sentio/protos": "2.36.2-rc.1"
82
+ "@sentio/protos": "2.37.0-rc.11",
83
+ "@sentio/runtime": "^2.37.0-rc.11"
82
84
  },
83
85
  "peerDependencies": {
84
86
  "tsup": "npm:@sentio/tsup@^6.7.2"
@@ -97,7 +99,7 @@
97
99
  "build": "pnpm gen && pnpm compile",
98
100
  "build:all": "pnpm --filter=$(node -p \"require('./package.json').name\")... build",
99
101
  "compile": "tsc && cp src/utils/*.csv lib/utils && cp src/tsup.config.ts lib",
100
- "gen": "pnpm gen:eth && pnpm gen:aptos && pnpm gen:sui && pnpm gen:solana && pnpm gen:fuel",
102
+ "gen": "pnpm gen:eth && pnpm gen:aptos && pnpm gen:sui && pnpm gen:solana && pnpm gen:fuel && pnpm gen:store",
101
103
  "gen:aptos": "tsx src/aptos/codegen/run.ts src/aptos/abis src/aptos/builtin && pnpm gen:aptos_test",
102
104
  "gen:aptos_test": "tsx src/aptos/codegen/run.ts src/aptos/tests/abis src/aptos/tests/types",
103
105
  "gen:docs": "typedoc --options typedoc.json",
@@ -106,6 +108,7 @@
106
108
  "gen:fuel": "tsx src/fuel/codegen/run.ts src/fuel/abis src/sui/builtin && pnpm gen:fuel_test",
107
109
  "gen:fuel_test": "tsx src/fuel/codegen/run.ts src/fuel/tests/abis src/fuel/tests/types",
108
110
  "gen:solana": "tsx src/solana/codegen/run.ts src/solana/tests/abis src/solana/tests/types",
111
+ "gen:store": "tsx src/store/run.ts src/store/tests src/store/tests/generated",
109
112
  "gen:sui": "tsx src/sui/codegen/run.ts src/sui/abis src/sui/builtin && pnpm gen:sui_test",
110
113
  "gen:sui_test": "tsx src/sui/codegen/run.ts src/sui/tests/abis src/sui/tests/types",
111
114
  "test": "NODE_OPTIONS=--experimental-vm-modules pnpm jest --runInBand --detectOpenHandles"
@@ -2,13 +2,15 @@ import { ProcessResult, RecordMetaData } from '@sentio/protos'
2
2
  import { EventLoggerBinding } from './event-logger.js'
3
3
  import { Meter, Labels } from './meter.js'
4
4
  import { ChainId } from '@sentio/chain'
5
- import { mergeProcessResults } from '@sentio/runtime'
5
+ import { mergeProcessResults, PluginManager } from '@sentio/runtime'
6
6
  import { Required } from 'utility-types'
7
7
  import { ServerError, Status } from 'nice-grpc'
8
+ import { Store } from '../store/store.js'
8
9
 
9
10
  export abstract class BaseContext {
10
11
  meter: Meter
11
12
  eventLogger: EventLoggerBinding
13
+ private _store: Store
12
14
  protected baseLabels: Labels
13
15
  private active: boolean
14
16
 
@@ -18,8 +20,8 @@ export abstract class BaseContext {
18
20
  exports: [],
19
21
  gauges: [],
20
22
  states: {
21
- configUpdated: false,
22
- },
23
+ configUpdated: false
24
+ }
23
25
  }
24
26
 
25
27
  public update(res: Partial<ProcessResult>) {
@@ -35,6 +37,7 @@ export abstract class BaseContext {
35
37
  this.eventLogger = new EventLoggerBinding(this)
36
38
  this.baseLabels = baseLabels || {}
37
39
  this.active = true
40
+ this.initStore()
38
41
  }
39
42
 
40
43
  stopAndGetResult(): ProcessResult {
@@ -49,11 +52,26 @@ export abstract class BaseContext {
49
52
  getMetaData(name: string, labels: Labels): RecordMetaData {
50
53
  return {
51
54
  ...this.baseLabels,
52
- ...this.getMetaDataInternal(name, labels),
55
+ ...this.getMetaDataInternal(name, labels)
53
56
  }
54
57
  }
55
58
 
56
59
  protected abstract getMetaDataInternal(name: string, labels: Labels): RecordMetaData
57
60
 
58
61
  abstract getChainId(): ChainId
62
+
63
+ get store() {
64
+ if (this._store == null) {
65
+ console.warn('Store is not set, please initialize the processor with your database schema first.')
66
+ }
67
+ return this._store
68
+ }
69
+
70
+ // this method must be called within the dbContextLocalStorage scope
71
+ initStore() {
72
+ const dbContext = PluginManager.INSTANCE.dbContextLocalStorage.getStore()
73
+ if (dbContext) {
74
+ this._store = new Store(dbContext)
75
+ }
76
+ }
59
77
  }
@@ -6,6 +6,7 @@ import { ExporterState } from './exporter.js'
6
6
  import { EventTrackerState } from './event-tracker.js'
7
7
  import { TemplateInstanceState } from './template.js'
8
8
  import { EventLoggerState } from './event-logger.js'
9
+ import { DatabaseSchemaState } from './database-schema.js'
9
10
 
10
11
  export class CorePlugin extends Plugin {
11
12
  name: string = 'CorePlugin'
@@ -44,6 +45,14 @@ export class CorePlugin extends Plugin {
44
45
  channel: exporter.channel
45
46
  })
46
47
  }
48
+
49
+ if (DatabaseSchemaState.INSTANCE.getValues().length > 0) {
50
+ config.dbSchema = {
51
+ gqlSchema: DatabaseSchemaState.INSTANCE.getValues()
52
+ .map((e) => e.source)
53
+ .join('\n\n')
54
+ }
55
+ }
47
56
  }
48
57
  }
49
58
 
@@ -0,0 +1,24 @@
1
+ import { ListStateStorage } from '@sentio/runtime'
2
+ import { EntityClass } from '../store/index.js'
3
+
4
+ type Schema = {
5
+ source: string
6
+ entities: Record<string, EntityClass<any>>
7
+ }
8
+
9
+ export class DatabaseSchemaState extends ListStateStorage<Schema> {
10
+ static INSTANCE = new DatabaseSchemaState()
11
+ }
12
+
13
+ export class DatabaseSchema {
14
+ static register(schema: Schema) {
15
+ DatabaseSchemaState.INSTANCE.addValue(schema)
16
+ }
17
+
18
+ static findEntity(name: string) {
19
+ const s = DatabaseSchemaState.INSTANCE.getValues().find((s) => {
20
+ return s.entities[name] != null
21
+ })
22
+ return s?.entities[name]
23
+ }
24
+ }
package/src/core/index.ts CHANGED
@@ -10,3 +10,4 @@ export * from './event-logger.js'
10
10
  export { type Numberish, toBigInteger, toMetricValue } from './numberish.js'
11
11
 
12
12
  export { CorePlugin } from './core-plugin.js'
13
+ export { DatabaseSchema } from './database-schema.js'