@sentio/sdk 2.54.0-rc.11 → 2.54.0-rc.13
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/store/decorators.js +1 -1
- package/lib/store/decorators.js.map +1 -1
- package/lib/store/store.d.ts +0 -1
- package/lib/store/store.d.ts.map +1 -1
- package/lib/store/store.js +1 -24
- package/lib/store/store.js.map +1 -1
- package/lib/testing/memory-database.d.ts +22 -0
- package/lib/testing/memory-database.d.ts.map +1 -0
- package/lib/testing/memory-database.js +202 -0
- package/lib/testing/memory-database.js.map +1 -0
- package/lib/testing/test-processor-server.d.ts +2 -1
- package/lib/testing/test-processor-server.d.ts.map +1 -1
- package/lib/testing/test-processor-server.js +15 -3
- package/lib/testing/test-processor-server.js.map +1 -1
- package/package.json +4 -3
- package/src/store/decorators.ts +1 -1
- package/src/store/store.ts +1 -27
- package/src/testing/memory-database.ts +220 -0
- package/src/testing/test-processor-server.ts +16 -3
- package/lib/store/cache.d.ts +0 -11
- package/lib/store/cache.d.ts.map +0 -1
- package/lib/store/cache.js +0 -35
- package/lib/store/cache.js.map +0 -1
- package/src/store/cache.ts +0 -42
package/lib/store/decorators.js
CHANGED
@@ -15,7 +15,7 @@ export function Entity(entityName) {
|
|
15
15
|
const target = BaseClass.prototype;
|
16
16
|
for (const [propertyKey, type] of Object.entries(meta)) {
|
17
17
|
if (type.isRelation && type.relationName) {
|
18
|
-
const relationName = type.relationName;
|
18
|
+
const relationName = type.relationName.endsWith('!') ? type.relationName.slice(0, -1) : type.relationName;
|
19
19
|
const idGetter = function () {
|
20
20
|
return handleError(this.constructor.entityName, propertyKey, () => type.to(this._data.fields[propertyKey]));
|
21
21
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/store/decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AACzB,OAAO,EACL,MAAM,EACN,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,cAAc,EAEf,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,SAAS,WAAW,CAAC,MAAc,EAAE,GAAW,EAAE,EAAa;IAC7D,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAA;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,kBAAkB,MAAM,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACvF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,UAAkB;IACvC,OAAO,UAAiC,SAAY;QAClD,MAAM,IAAI,GAAyC,SAAiB,CAAC,IAAI,IAAI,EAAE,CAAA;QAC/E,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAA;QAClC,KAAK,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACzC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/store/decorators.ts"],"names":[],"mappings":"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"}
|
package/lib/store/store.d.ts
CHANGED
@@ -8,7 +8,6 @@ export interface EntityClass<T> {
|
|
8
8
|
export declare function getEntityName<T>(entity: EntityClass<T> | T | string): string;
|
9
9
|
export declare class Store {
|
10
10
|
private readonly context;
|
11
|
-
private cache;
|
12
11
|
constructor(context: StoreContext);
|
13
12
|
get<T extends Entity>(entity: EntityClass<T> | string, id: ID): Promise<T | undefined>;
|
14
13
|
delete<T extends Entity>(entity: EntityClass<T> | T | T[], id?: string | string[]): Promise<void>;
|
package/lib/store/store.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,cAAc,IAAI,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAIvF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
|
package/lib/store/store.js
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
import { DatabaseSchema } from '../core/index.js';
|
2
2
|
import { DBRequest_DBOperator } from '@sentio/protos';
|
3
3
|
import { PluginManager } from '@sentio/runtime';
|
4
|
-
import { LocalCache } from './cache.js';
|
5
4
|
import { serializeRichValue } from './util.js';
|
6
5
|
export function getEntityName(entity) {
|
7
6
|
if (entity == null) {
|
@@ -20,16 +19,11 @@ export function getEntityName(entity) {
|
|
20
19
|
}
|
21
20
|
export class Store {
|
22
21
|
context;
|
23
|
-
cache = new LocalCache();
|
24
22
|
constructor(context) {
|
25
23
|
this.context = context;
|
26
24
|
}
|
27
25
|
async get(entity, id) {
|
28
26
|
const entityName = getEntityName(entity);
|
29
|
-
const cachedData = this.cache.get(entityName, id);
|
30
|
-
if (cachedData) {
|
31
|
-
return Promise.resolve(this.newEntity(entity, cachedData));
|
32
|
-
}
|
33
27
|
const promise = this.context.sendRequest({
|
34
28
|
get: {
|
35
29
|
entity: entityName,
|
@@ -54,13 +48,11 @@ export class Store {
|
|
54
48
|
for (const i of id) {
|
55
49
|
request.entity.push(entityName);
|
56
50
|
request.id.push(i.toString());
|
57
|
-
this.cache.delete(entityName, i.toString());
|
58
51
|
}
|
59
52
|
}
|
60
53
|
else {
|
61
54
|
request.entity.push(entityName);
|
62
55
|
request.id.push(id);
|
63
|
-
this.cache.delete(entityName, id);
|
64
56
|
}
|
65
57
|
}
|
66
58
|
else {
|
@@ -68,7 +60,6 @@ export class Store {
|
|
68
60
|
for (const e of entities) {
|
69
61
|
request.entity.push(entityName);
|
70
62
|
request.id.push(e.id.toString());
|
71
|
-
this.cache.delete(entityName, id);
|
72
63
|
}
|
73
64
|
}
|
74
65
|
await this.context.sendRequest({
|
@@ -85,18 +76,7 @@ export class Store {
|
|
85
76
|
entityData: entities.map((e) => e._data)
|
86
77
|
}
|
87
78
|
};
|
88
|
-
|
89
|
-
return promise.then((_data) => {
|
90
|
-
request.upsert?.entity.forEach((entity, i) => {
|
91
|
-
this.cache.set({
|
92
|
-
entity: entity,
|
93
|
-
data: request.upsert?.entityData[i],
|
94
|
-
genBlockChain: '',
|
95
|
-
genBlockTime: undefined,
|
96
|
-
genBlockNumber: 0n
|
97
|
-
});
|
98
|
-
});
|
99
|
-
});
|
79
|
+
await this.context.sendRequest(request);
|
100
80
|
}
|
101
81
|
async *listIterator(entity, filters) {
|
102
82
|
let cursor = undefined;
|
@@ -154,9 +134,6 @@ export class Store {
|
|
154
134
|
}) || []
|
155
135
|
}
|
156
136
|
}, 3600));
|
157
|
-
response.entityList?.entities?.forEach((entity) => {
|
158
|
-
this.cache.set(entity);
|
159
|
-
});
|
160
137
|
return response;
|
161
138
|
}
|
162
139
|
async list(entity, filters, cursor) {
|
package/lib/store/store.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAIjD,OAAO,EAAE,oBAAoB,EAAc,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store/store.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { StoreContext } from '../store/context.js';
|
2
|
+
import { DBRequest } from '@sentio/protos';
|
3
|
+
import { GraphQLSchema } from 'graphql/index.js';
|
4
|
+
export declare class MemoryDatabase {
|
5
|
+
readonly dbContext: StoreContext;
|
6
|
+
db: Map<string, Record<string, any>>;
|
7
|
+
lastDbRequest: DBRequest | undefined;
|
8
|
+
schema: GraphQLSchema;
|
9
|
+
constructor(dbContext: StoreContext);
|
10
|
+
start(): void;
|
11
|
+
stop(): void;
|
12
|
+
hasEntity(entity: string, id: string): any;
|
13
|
+
protected upsert(entity: string, id: string, data: any): void;
|
14
|
+
protected delete(entity: string, id: string): void;
|
15
|
+
protected getById(entity: string, id: string): any;
|
16
|
+
private fillDerivedFromFields;
|
17
|
+
private processRequest;
|
18
|
+
reset(): void;
|
19
|
+
private listEntities;
|
20
|
+
}
|
21
|
+
export declare function withStoreContext(ctx: StoreContext, fn: () => Promise<void>): () => Promise<void>;
|
22
|
+
//# sourceMappingURL=memory-database.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"memory-database.d.ts","sourceRoot":"","sources":["../../src/testing/memory-database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAyB,MAAM,gBAAgB,CAAA;AACjE,OAAO,EAAgB,aAAa,EAAmB,MAAM,kBAAkB,CAAA;AAO/E,qBAAa,cAAc;IAKb,QAAQ,CAAC,SAAS,EAAE,YAAY;IAJ5C,EAAE,mCAAyC;IACpC,aAAa,EAAE,SAAS,GAAG,SAAS,CAAA;IAC3C,MAAM,EAAE,aAAa,CAAA;gBAEA,SAAS,EAAE,YAAY;IAM5C,KAAK;IAIL,IAAI;IAKG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAK3C,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;IAetD,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAO3C,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAU5C,OAAO,CAAC,qBAAqB;IAyC7B,OAAO,CAAC,cAAc;IA6DtB,KAAK;IAIL,OAAO,CAAC,YAAY;CAQrB;AAmCD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,uBAI1E"}
|
@@ -0,0 +1,202 @@
|
|
1
|
+
import { DatabaseSchemaState } from '../core/database-schema.js';
|
2
|
+
import { parse } from 'graphql/index.js';
|
3
|
+
import { buildSchema } from '../store/schema.js';
|
4
|
+
import { GraphQLList, GraphQLNonNull, GraphQLObjectType } from 'graphql';
|
5
|
+
import { PluginManager } from '@sentio/runtime';
|
6
|
+
export class MemoryDatabase {
|
7
|
+
dbContext;
|
8
|
+
db = new Map();
|
9
|
+
lastDbRequest;
|
10
|
+
schema;
|
11
|
+
constructor(dbContext) {
|
12
|
+
this.dbContext = dbContext;
|
13
|
+
const source = DatabaseSchemaState.INSTANCE.getValues()[0].source;
|
14
|
+
const doc = parse(source);
|
15
|
+
this.schema = buildSchema(doc);
|
16
|
+
}
|
17
|
+
start() {
|
18
|
+
this.dbContext.subject.subscribe(this.processRequest.bind(this));
|
19
|
+
}
|
20
|
+
stop() {
|
21
|
+
this.dbContext.subject.unsubscribe();
|
22
|
+
this.dbContext.subject.complete();
|
23
|
+
}
|
24
|
+
hasEntity(entity, id) {
|
25
|
+
const entityDB = this.db.get(entity);
|
26
|
+
return entityDB ? entityDB[id] : undefined;
|
27
|
+
}
|
28
|
+
upsert(entity, id, data) {
|
29
|
+
const entityDB = this.db.get(entity) ?? {};
|
30
|
+
entityDB[id] = { entity, fields: data.fields };
|
31
|
+
this.db.set(entity, entityDB);
|
32
|
+
const entityClass = this.schema.getType(entity);
|
33
|
+
if (entityClass && entityClass instanceof GraphQLObjectType) {
|
34
|
+
for (const intf of entityClass.getInterfaces()) {
|
35
|
+
const intfName = intf.name;
|
36
|
+
const intfDB = this.db.get(intfName) ?? {};
|
37
|
+
intfDB[id] = { entity, fields: data.fields };
|
38
|
+
this.db.set(intfName, intfDB);
|
39
|
+
}
|
40
|
+
}
|
41
|
+
}
|
42
|
+
delete(entity, id) {
|
43
|
+
const entityDB = this.db.get(entity);
|
44
|
+
if (entityDB) {
|
45
|
+
delete entityDB[id];
|
46
|
+
}
|
47
|
+
}
|
48
|
+
getById(entity, id) {
|
49
|
+
const entityDB = this.db.get(entity);
|
50
|
+
if (entityDB) {
|
51
|
+
const result = entityDB[id];
|
52
|
+
return this.fillDerivedFromFields(entity, id, result);
|
53
|
+
}
|
54
|
+
return undefined;
|
55
|
+
}
|
56
|
+
// a quick and dirty way to mimic how derivedFrom fields are filled in the real database
|
57
|
+
fillDerivedFromFields(entity, id, result) {
|
58
|
+
const entityClass = this.schema.getType(entity);
|
59
|
+
if (entityClass && entityClass instanceof GraphQLObjectType) {
|
60
|
+
for (const field of Object.values(entityClass.getFields())) {
|
61
|
+
const derivedFrom = GetDerivedFrom(field);
|
62
|
+
if (derivedFrom) {
|
63
|
+
const elemType = getElemType(field.type);
|
64
|
+
const elemClass = this.schema.getType(elemType.name);
|
65
|
+
if (elemClass && elemClass instanceof GraphQLObjectType) {
|
66
|
+
const derivedField = elemClass.getFields()[derivedFrom];
|
67
|
+
if (derivedField) {
|
68
|
+
const elemDb = this.db.get(elemType.name);
|
69
|
+
if (elemDb) {
|
70
|
+
for (const elemID of Object.keys(elemDb)) {
|
71
|
+
const value = elemDb[elemID];
|
72
|
+
const deriveField = value.fields[derivedFrom];
|
73
|
+
let hasRelation = false;
|
74
|
+
if (deriveField?.stringValue === id) {
|
75
|
+
hasRelation = true;
|
76
|
+
}
|
77
|
+
if (deriveField.listValue) {
|
78
|
+
hasRelation = deriveField.listValue.values.some((v) => v.stringValue === id);
|
79
|
+
}
|
80
|
+
if (hasRelation) {
|
81
|
+
const arr = result.fields[field.name];
|
82
|
+
if (arr) {
|
83
|
+
arr.listValue.values.push({ stringValue: elemID });
|
84
|
+
}
|
85
|
+
else {
|
86
|
+
result.fields[field.name] = { listValue: { values: [{ stringValue: elemID }] } };
|
87
|
+
}
|
88
|
+
}
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}
|
95
|
+
}
|
96
|
+
return result;
|
97
|
+
}
|
98
|
+
processRequest(request) {
|
99
|
+
const req = request.dbRequest;
|
100
|
+
this.lastDbRequest = req;
|
101
|
+
if (req) {
|
102
|
+
if (req.upsert) {
|
103
|
+
const { entityData, entity } = req.upsert;
|
104
|
+
entityData.forEach((d, i) => {
|
105
|
+
const id = d.fields['id'].stringValue;
|
106
|
+
const entityName = entity[i];
|
107
|
+
this.upsert(entityName, id, d);
|
108
|
+
});
|
109
|
+
this.dbContext.result({
|
110
|
+
opId: req.opId
|
111
|
+
});
|
112
|
+
}
|
113
|
+
if (req.delete) {
|
114
|
+
const { id, entity } = req.delete;
|
115
|
+
id.forEach((i, idx) => {
|
116
|
+
const entityName = entity[idx];
|
117
|
+
this.delete(entityName, i);
|
118
|
+
});
|
119
|
+
this.dbContext.result({
|
120
|
+
opId: req.opId
|
121
|
+
});
|
122
|
+
}
|
123
|
+
if (req.get) {
|
124
|
+
const { entity, id } = req.get;
|
125
|
+
const data = this.getById(entity, id);
|
126
|
+
this.dbContext.result({
|
127
|
+
opId: req.opId,
|
128
|
+
// entities: { entities: data ? [data] : [] },
|
129
|
+
entityList: {
|
130
|
+
entities: data ? [toEntity(data)] : []
|
131
|
+
}
|
132
|
+
});
|
133
|
+
}
|
134
|
+
if (req.list) {
|
135
|
+
const { entity, cursor } = req.list;
|
136
|
+
const list = this.listEntities(entity);
|
137
|
+
if (cursor) {
|
138
|
+
const idx = parseInt(cursor);
|
139
|
+
this.dbContext.result({
|
140
|
+
opId: req.opId,
|
141
|
+
entityList: { entities: list.slice(idx, idx + 1).map((d) => toEntity(d)) },
|
142
|
+
nextCursor: idx + 1 < list.length ? `${idx + 1}` : undefined
|
143
|
+
});
|
144
|
+
}
|
145
|
+
else {
|
146
|
+
this.dbContext.result({
|
147
|
+
opId: req.opId,
|
148
|
+
entityList: { entities: list.length ? [toEntity(list[0])] : [] },
|
149
|
+
nextCursor: '1'
|
150
|
+
});
|
151
|
+
}
|
152
|
+
}
|
153
|
+
}
|
154
|
+
}
|
155
|
+
reset() {
|
156
|
+
this.db.clear();
|
157
|
+
}
|
158
|
+
listEntities(entity) {
|
159
|
+
const entityDB = this.db.get(entity);
|
160
|
+
return entityDB
|
161
|
+
? Object.entries(entityDB)
|
162
|
+
.sort((a, b) => a[0].localeCompare(b[0]))
|
163
|
+
.map(([id, data]) => this.fillDerivedFromFields(entity, id, data))
|
164
|
+
: [];
|
165
|
+
}
|
166
|
+
}
|
167
|
+
function toEntity(data) {
|
168
|
+
return {
|
169
|
+
entity: data.entity,
|
170
|
+
genBlockChain: '',
|
171
|
+
genBlockNumber: 0n,
|
172
|
+
genBlockTime: new Date(),
|
173
|
+
data: { fields: data.fields }
|
174
|
+
};
|
175
|
+
}
|
176
|
+
function GetDerivedFrom(field) {
|
177
|
+
for (const directive of field.astNode?.directives ?? []) {
|
178
|
+
if (directive.name.value === 'derivedFrom') {
|
179
|
+
const value = directive.arguments?.[0].value;
|
180
|
+
return value?.value;
|
181
|
+
}
|
182
|
+
}
|
183
|
+
return '';
|
184
|
+
}
|
185
|
+
function getElemType(type) {
|
186
|
+
if (type instanceof GraphQLObjectType) {
|
187
|
+
return type;
|
188
|
+
}
|
189
|
+
if (type instanceof GraphQLList) {
|
190
|
+
return getElemType(type.ofType);
|
191
|
+
}
|
192
|
+
if (type instanceof GraphQLNonNull) {
|
193
|
+
return getElemType(type.ofType);
|
194
|
+
}
|
195
|
+
return type;
|
196
|
+
}
|
197
|
+
export function withStoreContext(ctx, fn) {
|
198
|
+
return async () => {
|
199
|
+
await PluginManager.INSTANCE.dbContextLocalStorage.run(ctx, fn);
|
200
|
+
};
|
201
|
+
}
|
202
|
+
//# sourceMappingURL=memory-database.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"memory-database.js","sourceRoot":"","sources":["../../src/testing/memory-database.ts"],"names":[],"mappings":"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"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { AccountConfig, ContractConfig, DataBinding, DeepPartial, Empty, PreprocessStreamRequest, PreprocessStreamResponse, ProcessBindingResponse, ProcessBindingsRequest, ProcessConfigRequest, ProcessConfigResponse, ProcessorServiceImplementation, ProcessStreamRequest, ProcessStreamResponse, ServerStreamingMethodResult, StartRequest } from '@sentio/protos';
|
2
2
|
import { CallContext } from 'nice-grpc-common';
|
3
|
-
import { ProcessorServiceImpl } from '@sentio/runtime';
|
3
|
+
import { ProcessorServiceImpl, StoreContext } from '@sentio/runtime';
|
4
4
|
import { AptosFacet } from './aptos-facet.js';
|
5
5
|
import { SolanaFacet } from './solana-facet.js';
|
6
6
|
import { EthFacet } from './eth-facet.js';
|
@@ -15,6 +15,7 @@ export declare class TestProcessorServer implements ProcessorServiceImplementati
|
|
15
15
|
service: ProcessorServiceImpl;
|
16
16
|
contractConfigs: ContractConfig[];
|
17
17
|
accountConfigs: AccountConfig[];
|
18
|
+
storeContext: StoreContext;
|
18
19
|
aptos: AptosFacet;
|
19
20
|
eth: EthFacet;
|
20
21
|
solana: SolanaFacet;
|
@@ -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,WAAW,EACX,KAAK,EACL,uBAAuB,EACvB,wBAAwB,EACxB,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,
|
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,uBAAuB,EACvB,wBAAwB,EACxB,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,EAA4B,oBAAoB,EAAS,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGrG,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;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAIzC,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;IAC/B,YAAY,EAAE,YAAY,CAAA;IAE1B,KAAK,EAAE,UAAU,CAAA;IACjB,GAAG,EAAE,QAAQ,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,QAAQ,CAAA;IACb,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,WAAW,CAAA;IACnB,QAAQ,EAAE,aAAa,CAAA;IACvB,GAAG,EAAE,QAAQ,CAAA;gBAED,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAyB5E,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;IAMlC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,WAA0B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAM1G,qBAAqB,CACnB,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC7C,OAAO,EAAE,WAAW,GACnB,2BAA2B,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAIlE,wBAAwB,CACtB,QAAQ,EAAE,aAAa,CAAC,uBAAuB,CAAC,EAChD,OAAO,EAAE,WAAW,GACnB,2BAA2B,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;CAOtE"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Endpoints, ProcessorServiceImpl, State } from '@sentio/runtime';
|
1
|
+
import { Endpoints, PluginManager, ProcessorServiceImpl, State, StoreContext } from '@sentio/runtime';
|
2
2
|
import { CHAIN_MAP } from '@sentio/chain';
|
3
3
|
import { AptosFacet } from './aptos-facet.js';
|
4
4
|
import { SolanaFacet } from './solana-facet.js';
|
@@ -8,6 +8,8 @@ import { FuelFacet } from './fuel-facet.js';
|
|
8
8
|
import { CosmosFacet } from './cosmos-facet.js';
|
9
9
|
import { StarknetFacet } from './starknet-facet.js';
|
10
10
|
import { BTCFacet } from './btc-facet.js';
|
11
|
+
import { Subject } from 'rxjs';
|
12
|
+
import { MemoryDatabase } from './memory-database.js';
|
11
13
|
export const TEST_CONTEXT = {};
|
12
14
|
export function cleanTest() {
|
13
15
|
State.reset();
|
@@ -16,6 +18,7 @@ export class TestProcessorServer {
|
|
16
18
|
service;
|
17
19
|
contractConfigs;
|
18
20
|
accountConfigs;
|
21
|
+
storeContext;
|
19
22
|
aptos;
|
20
23
|
eth;
|
21
24
|
solana;
|
@@ -39,6 +42,11 @@ export class TestProcessorServer {
|
|
39
42
|
const http = httpEndpoints[k] || '';
|
40
43
|
Endpoints.INSTANCE.chainServer.set(k, http);
|
41
44
|
}
|
45
|
+
// start a memory database for testing
|
46
|
+
const subject = new Subject();
|
47
|
+
this.storeContext = new StoreContext(subject, 1);
|
48
|
+
const db = new MemoryDatabase(this.storeContext);
|
49
|
+
db.start();
|
42
50
|
}
|
43
51
|
async start(request = { templateInstances: [] }, context = TEST_CONTEXT) {
|
44
52
|
const res = await this.service.start(request, context);
|
@@ -54,10 +62,14 @@ export class TestProcessorServer {
|
|
54
62
|
return this.service.getConfig(request, context);
|
55
63
|
}
|
56
64
|
processBindings(request, context = TEST_CONTEXT) {
|
57
|
-
return
|
65
|
+
return PluginManager.INSTANCE.dbContextLocalStorage.run(this.storeContext, () => {
|
66
|
+
return this.service.processBindings(request, context);
|
67
|
+
});
|
58
68
|
}
|
59
69
|
processBinding(request, context = TEST_CONTEXT) {
|
60
|
-
return
|
70
|
+
return PluginManager.INSTANCE.dbContextLocalStorage.run(this.storeContext, () => {
|
71
|
+
return this.service.processBindings({ bindings: [request] }, context);
|
72
|
+
});
|
61
73
|
}
|
62
74
|
processBindingsStream(requests, context) {
|
63
75
|
throw new Error('Method not implemented.');
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"test-processor-server.js","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;
|
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.54.0-rc.
|
3
|
+
"version": "2.54.0-rc.13",
|
4
4
|
"license": "Apache-2.0",
|
5
5
|
"type": "module",
|
6
6
|
"exports": {
|
@@ -85,8 +85,8 @@
|
|
85
85
|
"typechain": "^8.3.2",
|
86
86
|
"utility-types": "^3.11.0",
|
87
87
|
"yaml": "^2.3.4",
|
88
|
-
"@sentio/
|
89
|
-
"@sentio/
|
88
|
+
"@sentio/runtime": "^2.54.0-rc.13",
|
89
|
+
"@sentio/protos": "2.54.0-rc.13"
|
90
90
|
},
|
91
91
|
"peerDependencies": {
|
92
92
|
"tsup": "npm:@sentio/tsup@^8.3.5-rc.1"
|
@@ -122,6 +122,7 @@
|
|
122
122
|
"gen:sui_test": "tsx src/sui/codegen/run.ts src/sui/tests/abis src/sui/tests/types",
|
123
123
|
"test": "glob -c 'tsx --test' '**/*.test.ts'",
|
124
124
|
"test:btc": "tsx --test src/btc/tests/processor.test.ts",
|
125
|
+
"test:db": "glob -c 'tsx --test' 'src/store/tests/database.test.ts'",
|
125
126
|
"test:starknet": "tsx --test src/stark/tests/event.test.ts"
|
126
127
|
}
|
127
128
|
}
|
package/src/store/decorators.ts
CHANGED
@@ -34,7 +34,7 @@ export function Entity(entityName: string) {
|
|
34
34
|
const target = BaseClass.prototype
|
35
35
|
for (const [propertyKey, type] of Object.entries(meta)) {
|
36
36
|
if (type.isRelation && type.relationName) {
|
37
|
-
const relationName = type.relationName
|
37
|
+
const relationName = type.relationName.endsWith('!') ? type.relationName.slice(0, -1) : type.relationName
|
38
38
|
const idGetter = function (this: any) {
|
39
39
|
return handleError(this.constructor.entityName, propertyKey, () => type!.to(this._data.fields[propertyKey]))
|
40
40
|
}
|
package/src/store/store.ts
CHANGED
@@ -6,7 +6,6 @@ import type { DBRequest, Entity as EntityStruct, RichValue } from '@sentio/proto
|
|
6
6
|
import { DBRequest_DBOperator, DBResponse } from '@sentio/protos'
|
7
7
|
import { PluginManager } from '@sentio/runtime'
|
8
8
|
import { Cursor } from './cursor.js'
|
9
|
-
import { LocalCache } from './cache.js'
|
10
9
|
import { serializeRichValue } from './util.js'
|
11
10
|
|
12
11
|
export interface EntityClass<T> {
|
@@ -30,16 +29,10 @@ export function getEntityName<T>(entity: EntityClass<T> | T | string): string {
|
|
30
29
|
}
|
31
30
|
|
32
31
|
export class Store {
|
33
|
-
private cache = new LocalCache()
|
34
|
-
|
35
32
|
constructor(private readonly context: StoreContext) {}
|
36
33
|
|
37
34
|
async get<T extends Entity>(entity: EntityClass<T> | string, id: ID): Promise<T | undefined> {
|
38
35
|
const entityName = getEntityName(entity)
|
39
|
-
const cachedData = this.cache.get(entityName, id)
|
40
|
-
if (cachedData) {
|
41
|
-
return Promise.resolve(this.newEntity(entity, cachedData))
|
42
|
-
}
|
43
36
|
|
44
37
|
const promise = this.context.sendRequest({
|
45
38
|
get: {
|
@@ -68,19 +61,16 @@ export class Store {
|
|
68
61
|
for (const i of id) {
|
69
62
|
request.entity.push(entityName)
|
70
63
|
request.id.push(i.toString())
|
71
|
-
this.cache.delete(entityName, i.toString())
|
72
64
|
}
|
73
65
|
} else {
|
74
66
|
request.entity.push(entityName)
|
75
67
|
request.id.push(id)
|
76
|
-
this.cache.delete(entityName, id)
|
77
68
|
}
|
78
69
|
} else {
|
79
70
|
const entities = Array.isArray(entity) ? entity : [entity]
|
80
71
|
for (const e of entities) {
|
81
72
|
request.entity.push(entityName)
|
82
73
|
request.id.push((e as Entity).id.toString())
|
83
|
-
this.cache.delete(entityName, id)
|
84
74
|
}
|
85
75
|
}
|
86
76
|
|
@@ -99,19 +89,7 @@ export class Store {
|
|
99
89
|
entityData: entities.map((e: any) => e._data)
|
100
90
|
}
|
101
91
|
} as DBRequest
|
102
|
-
|
103
|
-
|
104
|
-
return promise.then((_data) => {
|
105
|
-
request.upsert?.entity.forEach((entity, i) => {
|
106
|
-
this.cache.set({
|
107
|
-
entity: entity,
|
108
|
-
data: request.upsert?.entityData[i],
|
109
|
-
genBlockChain: '',
|
110
|
-
genBlockTime: undefined,
|
111
|
-
genBlockNumber: 0n
|
112
|
-
})
|
113
|
-
})
|
114
|
-
})
|
92
|
+
await this.context.sendRequest(request)
|
115
93
|
}
|
116
94
|
|
117
95
|
async *listIterator<T extends Entity, P extends keyof T, O extends Operators<T[P]>>(
|
@@ -192,10 +170,6 @@ export class Store {
|
|
192
170
|
3600
|
193
171
|
)) as DBResponse
|
194
172
|
|
195
|
-
response.entityList?.entities?.forEach((entity) => {
|
196
|
-
this.cache.set(entity)
|
197
|
-
})
|
198
|
-
|
199
173
|
return response
|
200
174
|
}
|
201
175
|
|
@@ -0,0 +1,220 @@
|
|
1
|
+
import { StoreContext } from '../store/context.js'
|
2
|
+
import { DBRequest, ProcessStreamResponse } from '@sentio/protos'
|
3
|
+
import { GraphQLField, GraphQLSchema, StringValueNode } from 'graphql/index.js'
|
4
|
+
import { DatabaseSchemaState } from '../core/database-schema.js'
|
5
|
+
import { parse } from 'graphql/index.js'
|
6
|
+
import { buildSchema } from '../store/schema.js'
|
7
|
+
import { GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLOutputType } from 'graphql'
|
8
|
+
import { PluginManager } from '@sentio/runtime'
|
9
|
+
|
10
|
+
export class MemoryDatabase {
|
11
|
+
db = new Map<string, Record<string, any>>()
|
12
|
+
public lastDbRequest: DBRequest | undefined
|
13
|
+
schema: GraphQLSchema
|
14
|
+
|
15
|
+
constructor(readonly dbContext: StoreContext) {
|
16
|
+
const source = DatabaseSchemaState.INSTANCE.getValues()[0].source
|
17
|
+
const doc = parse(source)
|
18
|
+
this.schema = buildSchema(doc)
|
19
|
+
}
|
20
|
+
|
21
|
+
start() {
|
22
|
+
this.dbContext.subject.subscribe(this.processRequest.bind(this))
|
23
|
+
}
|
24
|
+
|
25
|
+
stop() {
|
26
|
+
this.dbContext.subject.unsubscribe()
|
27
|
+
this.dbContext.subject.complete()
|
28
|
+
}
|
29
|
+
|
30
|
+
public hasEntity(entity: string, id: string) {
|
31
|
+
const entityDB = this.db.get(entity)
|
32
|
+
return entityDB ? entityDB[id] : undefined
|
33
|
+
}
|
34
|
+
|
35
|
+
protected upsert(entity: string, id: string, data: any) {
|
36
|
+
const entityDB = this.db.get(entity) ?? {}
|
37
|
+
entityDB[id] = { entity, fields: data.fields }
|
38
|
+
this.db.set(entity, entityDB)
|
39
|
+
const entityClass = this.schema.getType(entity)
|
40
|
+
if (entityClass && entityClass instanceof GraphQLObjectType) {
|
41
|
+
for (const intf of entityClass.getInterfaces()) {
|
42
|
+
const intfName = intf.name
|
43
|
+
const intfDB = this.db.get(intfName) ?? {}
|
44
|
+
intfDB[id] = { entity, fields: data.fields }
|
45
|
+
this.db.set(intfName, intfDB)
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
protected delete(entity: string, id: string) {
|
51
|
+
const entityDB = this.db.get(entity)
|
52
|
+
if (entityDB) {
|
53
|
+
delete entityDB[id]
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
protected getById(entity: string, id: string) {
|
58
|
+
const entityDB = this.db.get(entity)
|
59
|
+
if (entityDB) {
|
60
|
+
const result = entityDB[id]
|
61
|
+
return this.fillDerivedFromFields(entity, id, result)
|
62
|
+
}
|
63
|
+
return undefined
|
64
|
+
}
|
65
|
+
|
66
|
+
// a quick and dirty way to mimic how derivedFrom fields are filled in the real database
|
67
|
+
private fillDerivedFromFields(entity: string, id: string, result: any) {
|
68
|
+
const entityClass = this.schema.getType(entity)
|
69
|
+
if (entityClass && entityClass instanceof GraphQLObjectType) {
|
70
|
+
for (const field of Object.values(entityClass.getFields())) {
|
71
|
+
const derivedFrom = GetDerivedFrom(field)
|
72
|
+
if (derivedFrom) {
|
73
|
+
const elemType = getElemType(field.type) as GraphQLObjectType
|
74
|
+
const elemClass = this.schema.getType(elemType.name)
|
75
|
+
if (elemClass && elemClass instanceof GraphQLObjectType) {
|
76
|
+
const derivedField = elemClass.getFields()[derivedFrom]
|
77
|
+
if (derivedField) {
|
78
|
+
const elemDb = this.db.get(elemType.name)
|
79
|
+
if (elemDb) {
|
80
|
+
for (const elemID of Object.keys(elemDb)) {
|
81
|
+
const value = elemDb[elemID]
|
82
|
+
const deriveField = value.fields[derivedFrom]
|
83
|
+
let hasRelation = false
|
84
|
+
if (deriveField?.stringValue === id) {
|
85
|
+
hasRelation = true
|
86
|
+
}
|
87
|
+
if (deriveField.listValue) {
|
88
|
+
hasRelation = deriveField.listValue.values.some((v: any) => v.stringValue === id)
|
89
|
+
}
|
90
|
+
if (hasRelation) {
|
91
|
+
const arr = result.fields[field.name]
|
92
|
+
if (arr) {
|
93
|
+
arr.listValue.values.push({ stringValue: elemID })
|
94
|
+
} else {
|
95
|
+
result.fields[field.name] = { listValue: { values: [{ stringValue: elemID }] } }
|
96
|
+
}
|
97
|
+
}
|
98
|
+
}
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
}
|
103
|
+
}
|
104
|
+
}
|
105
|
+
return result
|
106
|
+
}
|
107
|
+
|
108
|
+
private processRequest(request: ProcessStreamResponse) {
|
109
|
+
const req = request.dbRequest
|
110
|
+
this.lastDbRequest = req
|
111
|
+
if (req) {
|
112
|
+
if (req.upsert) {
|
113
|
+
const { entityData, entity } = req.upsert
|
114
|
+
entityData.forEach((d, i) => {
|
115
|
+
const id = d.fields['id'].stringValue!
|
116
|
+
const entityName = entity[i]
|
117
|
+
this.upsert(entityName, id, d)
|
118
|
+
})
|
119
|
+
|
120
|
+
this.dbContext.result({
|
121
|
+
opId: req.opId
|
122
|
+
})
|
123
|
+
}
|
124
|
+
if (req.delete) {
|
125
|
+
const { id, entity } = req.delete
|
126
|
+
id.forEach((i, idx) => {
|
127
|
+
const entityName = entity[idx]
|
128
|
+
this.delete(entityName, i)
|
129
|
+
})
|
130
|
+
this.dbContext.result({
|
131
|
+
opId: req.opId
|
132
|
+
})
|
133
|
+
}
|
134
|
+
|
135
|
+
if (req.get) {
|
136
|
+
const { entity, id } = req.get
|
137
|
+
const data = this.getById(entity, id)
|
138
|
+
this.dbContext.result({
|
139
|
+
opId: req.opId,
|
140
|
+
// entities: { entities: data ? [data] : [] },
|
141
|
+
entityList: {
|
142
|
+
entities: data ? [toEntity(data)] : []
|
143
|
+
}
|
144
|
+
})
|
145
|
+
}
|
146
|
+
if (req.list) {
|
147
|
+
const { entity, cursor } = req.list
|
148
|
+
const list = this.listEntities(entity)
|
149
|
+
|
150
|
+
if (cursor) {
|
151
|
+
const idx = parseInt(cursor)
|
152
|
+
|
153
|
+
this.dbContext.result({
|
154
|
+
opId: req.opId,
|
155
|
+
entityList: { entities: list.slice(idx, idx + 1).map((d) => toEntity(d)) },
|
156
|
+
nextCursor: idx + 1 < list.length ? `${idx + 1}` : undefined
|
157
|
+
})
|
158
|
+
} else {
|
159
|
+
this.dbContext.result({
|
160
|
+
opId: req.opId,
|
161
|
+
entityList: { entities: list.length ? [toEntity(list[0])] : [] },
|
162
|
+
nextCursor: '1'
|
163
|
+
})
|
164
|
+
}
|
165
|
+
}
|
166
|
+
}
|
167
|
+
}
|
168
|
+
|
169
|
+
reset() {
|
170
|
+
this.db.clear()
|
171
|
+
}
|
172
|
+
|
173
|
+
private listEntities(entity: string) {
|
174
|
+
const entityDB = this.db.get(entity)
|
175
|
+
return entityDB
|
176
|
+
? Object.entries(entityDB)
|
177
|
+
.sort((a, b) => a[0].localeCompare(b[0]))
|
178
|
+
.map(([id, data]) => this.fillDerivedFromFields(entity, id, data))
|
179
|
+
: []
|
180
|
+
}
|
181
|
+
}
|
182
|
+
|
183
|
+
function toEntity(data: any) {
|
184
|
+
return {
|
185
|
+
entity: data.entity,
|
186
|
+
genBlockChain: '',
|
187
|
+
genBlockNumber: 0n,
|
188
|
+
genBlockTime: new Date(),
|
189
|
+
data: { fields: data.fields }
|
190
|
+
}
|
191
|
+
}
|
192
|
+
|
193
|
+
function GetDerivedFrom(field: GraphQLField<any, any>): string {
|
194
|
+
for (const directive of field.astNode?.directives ?? []) {
|
195
|
+
if (directive.name.value === 'derivedFrom') {
|
196
|
+
const value = directive.arguments?.[0].value as StringValueNode
|
197
|
+
return value?.value
|
198
|
+
}
|
199
|
+
}
|
200
|
+
return ''
|
201
|
+
}
|
202
|
+
|
203
|
+
function getElemType(type: GraphQLOutputType) {
|
204
|
+
if (type instanceof GraphQLObjectType) {
|
205
|
+
return type
|
206
|
+
}
|
207
|
+
if (type instanceof GraphQLList) {
|
208
|
+
return getElemType(type.ofType)
|
209
|
+
}
|
210
|
+
if (type instanceof GraphQLNonNull) {
|
211
|
+
return getElemType(type.ofType)
|
212
|
+
}
|
213
|
+
return type
|
214
|
+
}
|
215
|
+
|
216
|
+
export function withStoreContext(ctx: StoreContext, fn: () => Promise<void>) {
|
217
|
+
return async () => {
|
218
|
+
await PluginManager.INSTANCE.dbContextLocalStorage.run(ctx, fn)
|
219
|
+
}
|
220
|
+
}
|
@@ -17,7 +17,7 @@ import {
|
|
17
17
|
StartRequest
|
18
18
|
} from '@sentio/protos'
|
19
19
|
import { CallContext } from 'nice-grpc-common'
|
20
|
-
import { Endpoints, ProcessorServiceImpl, State } from '@sentio/runtime'
|
20
|
+
import { Endpoints, PluginManager, ProcessorServiceImpl, State, StoreContext } from '@sentio/runtime'
|
21
21
|
import { CHAIN_MAP } from '@sentio/chain'
|
22
22
|
|
23
23
|
import { AptosFacet } from './aptos-facet.js'
|
@@ -28,6 +28,8 @@ import { FuelFacet } from './fuel-facet.js'
|
|
28
28
|
import { CosmosFacet } from './cosmos-facet.js'
|
29
29
|
import { StarknetFacet } from './starknet-facet.js'
|
30
30
|
import { BTCFacet } from './btc-facet.js'
|
31
|
+
import { Subject } from 'rxjs'
|
32
|
+
import { MemoryDatabase } from './memory-database.js'
|
31
33
|
|
32
34
|
export const TEST_CONTEXT: CallContext = <CallContext>{}
|
33
35
|
|
@@ -39,6 +41,7 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
|
|
39
41
|
service: ProcessorServiceImpl
|
40
42
|
contractConfigs: ContractConfig[]
|
41
43
|
accountConfigs: AccountConfig[]
|
44
|
+
storeContext: StoreContext
|
42
45
|
|
43
46
|
aptos: AptosFacet
|
44
47
|
eth: EthFacet
|
@@ -66,6 +69,12 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
|
|
66
69
|
const http = httpEndpoints[k] || ''
|
67
70
|
Endpoints.INSTANCE.chainServer.set(k, http)
|
68
71
|
}
|
72
|
+
|
73
|
+
// start a memory database for testing
|
74
|
+
const subject = new Subject<DeepPartial<ProcessStreamResponse>>()
|
75
|
+
this.storeContext = new StoreContext(subject, 1)
|
76
|
+
const db = new MemoryDatabase(this.storeContext)
|
77
|
+
db.start()
|
69
78
|
}
|
70
79
|
|
71
80
|
async start(request: StartRequest = { templateInstances: [] }, context = TEST_CONTEXT): Promise<Empty> {
|
@@ -88,11 +97,15 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
|
|
88
97
|
request: ProcessBindingsRequest,
|
89
98
|
context: CallContext = TEST_CONTEXT
|
90
99
|
): Promise<ProcessBindingResponse> {
|
91
|
-
return
|
100
|
+
return PluginManager.INSTANCE.dbContextLocalStorage.run(this.storeContext, () => {
|
101
|
+
return this.service.processBindings(request, context)
|
102
|
+
})
|
92
103
|
}
|
93
104
|
|
94
105
|
processBinding(request: DataBinding, context: CallContext = TEST_CONTEXT): Promise<ProcessBindingResponse> {
|
95
|
-
return
|
106
|
+
return PluginManager.INSTANCE.dbContextLocalStorage.run(this.storeContext, () => {
|
107
|
+
return this.service.processBindings({ bindings: [request] }, context)
|
108
|
+
})
|
96
109
|
}
|
97
110
|
|
98
111
|
processBindingsStream(
|
package/lib/store/cache.d.ts
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
import { ID } from './types.js';
|
2
|
-
import type { Entity as EntityStruct } from '@sentio/protos';
|
3
|
-
export declare class LocalCache {
|
4
|
-
private cache;
|
5
|
-
getKey(entity: string, id: ID): string;
|
6
|
-
has(entity: string, id: ID): boolean;
|
7
|
-
get(entity: string, id: ID): EntityStruct | undefined;
|
8
|
-
set(entity: EntityStruct): void;
|
9
|
-
delete(entityName: string, id: string | undefined): void;
|
10
|
-
}
|
11
|
-
//# sourceMappingURL=cache.d.ts.map
|
package/lib/store/cache.d.ts.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/store/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAA;AAC/B,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE5D,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAuC;IAEpD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;IAI7B,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO;IAIpC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,YAAY,GAAG,SAAS;IAIrD,GAAG,CAAC,MAAM,EAAE,YAAY;IAkBxB,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS;CAKlD"}
|
package/lib/store/cache.js
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
export class LocalCache {
|
2
|
-
cache = new Map();
|
3
|
-
getKey(entity, id) {
|
4
|
-
return `${entity}-${id}`;
|
5
|
-
}
|
6
|
-
has(entity, id) {
|
7
|
-
return this.cache.has(this.getKey(entity, id));
|
8
|
-
}
|
9
|
-
get(entity, id) {
|
10
|
-
return this.cache.get(this.getKey(entity, id));
|
11
|
-
}
|
12
|
-
set(entity) {
|
13
|
-
const id = entity.data?.fields['id'].stringValue;
|
14
|
-
if (id) {
|
15
|
-
const key = this.getKey(entity.entity, id);
|
16
|
-
let fields = entity.data?.fields || {};
|
17
|
-
if (this.cache.has(key)) {
|
18
|
-
const existFields = this.cache.get(key)?.data?.fields || {};
|
19
|
-
fields = Object.assign(existFields, fields);
|
20
|
-
}
|
21
|
-
this.cache.set(key, {
|
22
|
-
...entity,
|
23
|
-
data: {
|
24
|
-
fields
|
25
|
-
}
|
26
|
-
});
|
27
|
-
}
|
28
|
-
}
|
29
|
-
delete(entityName, id) {
|
30
|
-
if (id) {
|
31
|
-
this.cache.delete(this.getKey(entityName, id));
|
32
|
-
}
|
33
|
-
}
|
34
|
-
}
|
35
|
-
//# sourceMappingURL=cache.js.map
|
package/lib/store/cache.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/store/cache.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,UAAU;IACb,KAAK,GAA8B,IAAI,GAAG,EAAE,CAAA;IAEpD,MAAM,CAAC,MAAc,EAAE,EAAM;QAC3B,OAAO,GAAG,MAAM,IAAI,EAAE,EAAE,CAAA;IAC1B,CAAC;IAED,GAAG,CAAC,MAAc,EAAE,EAAM;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,GAAG,CAAC,MAAc,EAAE,EAAM;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;IAChD,CAAC;IAED,GAAG,CAAC,MAAoB;QACtB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAA;QAChD,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;YAC1C,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAA;YACtC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,CAAA;gBAC3D,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;YAC7C,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBAClB,GAAG,MAAM;gBACT,IAAI,EAAE;oBACJ,MAAM;iBACP;aACF,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,MAAM,CAAC,UAAkB,EAAE,EAAsB;QAC/C,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;CACF"}
|
package/src/store/cache.ts
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
import { ID } from './types.js'
|
2
|
-
import type { Entity as EntityStruct } from '@sentio/protos'
|
3
|
-
|
4
|
-
export class LocalCache {
|
5
|
-
private cache: Map<string, EntityStruct> = new Map()
|
6
|
-
|
7
|
-
getKey(entity: string, id: ID) {
|
8
|
-
return `${entity}-${id}`
|
9
|
-
}
|
10
|
-
|
11
|
-
has(entity: string, id: ID): boolean {
|
12
|
-
return this.cache.has(this.getKey(entity, id))
|
13
|
-
}
|
14
|
-
|
15
|
-
get(entity: string, id: ID): EntityStruct | undefined {
|
16
|
-
return this.cache.get(this.getKey(entity, id))
|
17
|
-
}
|
18
|
-
|
19
|
-
set(entity: EntityStruct) {
|
20
|
-
const id = entity.data?.fields['id'].stringValue
|
21
|
-
if (id) {
|
22
|
-
const key = this.getKey(entity.entity, id)
|
23
|
-
let fields = entity.data?.fields || {}
|
24
|
-
if (this.cache.has(key)) {
|
25
|
-
const existFields = this.cache.get(key)?.data?.fields || {}
|
26
|
-
fields = Object.assign(existFields, fields)
|
27
|
-
}
|
28
|
-
this.cache.set(key, {
|
29
|
-
...entity,
|
30
|
-
data: {
|
31
|
-
fields
|
32
|
-
}
|
33
|
-
})
|
34
|
-
}
|
35
|
-
}
|
36
|
-
|
37
|
-
delete(entityName: string, id: string | undefined) {
|
38
|
-
if (id) {
|
39
|
-
this.cache.delete(this.getKey(entityName, id))
|
40
|
-
}
|
41
|
-
}
|
42
|
-
}
|