@sentio/sdk 3.1.0 → 3.2.0-rc.2

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.
@@ -3,10 +3,12 @@ import { EventLoggerBinding } from './event-logger.js';
3
3
  import { Meter, Labels } from './meter.js';
4
4
  import { ChainId } from '@sentio/chain';
5
5
  import { Store } from '../store/store.js';
6
+ import { MemoryCache } from '../store/cache.js';
6
7
  export declare abstract class BaseContext {
7
8
  meter: Meter;
8
9
  eventLogger: EventLoggerBinding;
9
10
  private _store;
11
+ private _cache;
10
12
  baseLabels: Labels;
11
13
  private active;
12
14
  private _res;
@@ -18,6 +20,28 @@ export declare abstract class BaseContext {
18
20
  protected abstract getMetaDataInternal(name: string, labels: Labels): RecordMetaData;
19
21
  abstract getChainId(): ChainId;
20
22
  get store(): Store;
23
+ /**
24
+ * Access the in-memory key-value cache.
25
+ *
26
+ * The cache allows storing and retrieving JSON-serializable values that persist
27
+ * across handler invocations. Useful for caching computed results, tracking
28
+ * cumulative state, or storing intermediate processing data.
29
+ *
30
+ * @returns The MemoryCache instance, or undefined if cache is not available
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * // Store and retrieve values
35
+ * await ctx.cache.set('totalVolume', volume)
36
+ * const cached = await ctx.cache.get<number>('totalVolume')
37
+ *
38
+ * // Block-scoped values (isolated per block)
39
+ * await ctx.cache.setInBlock('blockCount', count)
40
+ * ```
41
+ *
42
+ * @see {@link MemoryCache} for full API documentation
43
+ */
44
+ get cache(): MemoryCache;
21
45
  initStore(): void;
22
46
  sendTemplateInstance(instance: TemplateInstance, unbind?: boolean): void;
23
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base-context.d.ts","sourceRoot":"","sources":["../../src/core/base-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAIvC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,8BAAsB,WAAW;IAC/B,KAAK,EAAE,KAAK,CAAA;IACZ,WAAW,EAAE,kBAAkB,CAAA;IAC/B,OAAO,CAAC,MAAM,CAAO;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,IAAI,CASX;IAEM,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,CAAC;IAQzC,SAAS,aAAa,UAAU,EAAE,MAAM,GAAG,SAAS;IAQpD,gBAAgB,IAAI,aAAa;IASjC,OAAO,CAAC,aAAa,CAAoC;IAEzD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc;IAmBzD,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc;IAEpF,QAAQ,CAAC,UAAU,IAAI,OAAO;IAE9B,IAAI,KAAK,UAQR;IAGD,SAAS;IAOT,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,GAAE,OAAe;CAMzE"}
1
+ {"version":3,"file":"base-context.d.ts","sourceRoot":"","sources":["../../src/core/base-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAIvC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,8BAAsB,WAAW;IAC/B,KAAK,EAAE,KAAK,CAAA;IACZ,WAAW,EAAE,kBAAkB,CAAA;IAC/B,OAAO,CAAC,MAAM,CAAO;IACrB,OAAO,CAAC,MAAM,CAAa;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,IAAI,CASX;IAEM,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,CAAC;IAQzC,SAAS,aAAa,UAAU,EAAE,MAAM,GAAG,SAAS;IAQpD,gBAAgB,IAAI,aAAa;IASjC,OAAO,CAAC,aAAa,CAAoC;IAEzD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc;IAmBzD,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc;IAEpF,QAAQ,CAAC,UAAU,IAAI,OAAO;IAE9B,IAAI,KAAK,UAQR;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,IAAI,KAAK,gBAQR;IAGD,SAAS;IAOT,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,GAAE,OAAe;CAMzE"}
@@ -4,10 +4,12 @@ import { Meter } from './meter.js';
4
4
  import { mergeProcessResultsInPlace, PluginManager } from '@sentio/runtime';
5
5
  import { ServerError, Status } from 'nice-grpc';
6
6
  import { Store } from '../store/store.js';
7
+ import { MemoryCache } from '../store/cache.js';
7
8
  export class BaseContext {
8
9
  meter;
9
10
  eventLogger;
10
11
  _store;
12
+ _cache;
11
13
  baseLabels;
12
14
  active;
13
15
  _res = {
@@ -71,6 +73,36 @@ export class BaseContext {
71
73
  }
72
74
  return this._store;
73
75
  }
76
+ /**
77
+ * Access the in-memory key-value cache.
78
+ *
79
+ * The cache allows storing and retrieving JSON-serializable values that persist
80
+ * across handler invocations. Useful for caching computed results, tracking
81
+ * cumulative state, or storing intermediate processing data.
82
+ *
83
+ * @returns The MemoryCache instance, or undefined if cache is not available
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * // Store and retrieve values
88
+ * await ctx.cache.set('totalVolume', volume)
89
+ * const cached = await ctx.cache.get<number>('totalVolume')
90
+ *
91
+ * // Block-scoped values (isolated per block)
92
+ * await ctx.cache.setInBlock('blockCount', count)
93
+ * ```
94
+ *
95
+ * @see {@link MemoryCache} for full API documentation
96
+ */
97
+ get cache() {
98
+ if (!this._cache) {
99
+ const dbContext = PluginManager.INSTANCE.dbContextLocalStorage.getStore();
100
+ if (dbContext) {
101
+ this._cache = new MemoryCache(dbContext, this);
102
+ }
103
+ }
104
+ return this._cache;
105
+ }
74
106
  // this method must be called within the dbContextLocalStorage scope
75
107
  initStore() {
76
108
  const dbContext = PluginManager.INSTANCE.dbContextLocalStorage.getStore();
@@ -1 +1 @@
1
- {"version":3,"file":"base-context.js","sourceRoot":"","sources":["../../src/core/base-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-context.js","sourceRoot":"","sources":["../../src/core/base-context.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"core-plugin.d.ts","sourceRoot":"","sources":["../../src/core/core-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAOpE,qBAAa,UAAW,SAAQ,MAAM;IACpC,IAAI,EAAE,MAAM,CAAe;IAErB,SAAS,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,qBAAqB,GAAG,IAAI;CA2BtE"}
1
+ {"version":3,"file":"core-plugin.d.ts","sourceRoot":"","sources":["../../src/core/core-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,MAAM,EAAiB,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAOpE,qBAAa,UAAW,SAAQ,MAAM;IACpC,IAAI,EAAE,MAAM,CAAe;IAErB,SAAS,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,qBAAqB,GAAG,IAAI;CAsCtE"}
@@ -1,4 +1,4 @@
1
- import { Plugin, PluginManager } from '@sentio/runtime';
1
+ import { GLOBAL_CONFIG, Plugin, PluginManager } from '@sentio/runtime';
2
2
  import { MetricState } from './meter.js';
3
3
  import { ExporterState } from './exporter.js';
4
4
  import { EventLoggerState } from './event-logger.js';
@@ -28,9 +28,18 @@ export class CorePlugin extends Plugin {
28
28
  channel: exporter.channel
29
29
  });
30
30
  }
31
- if (DatabaseSchemaState.INSTANCE.getValues().length > 0) {
32
- const schemas = DatabaseSchemaState.INSTANCE.getValues();
33
- const mergedSources = mergeSchemas(schemas);
31
+ const schemas = DatabaseSchemaState.INSTANCE.getValues();
32
+ let mergedSources = mergeSchemas(schemas);
33
+ // Append MemoryCacheItem schema when cache is enabled
34
+ if (GLOBAL_CONFIG.cache?.enabled) {
35
+ mergedSources += `
36
+ type MemoryCacheItem @cache(sizeMB: ${GLOBAL_CONFIG.cache.size || 100}) {
37
+ id: ID!
38
+ value: String!
39
+ }
40
+ `;
41
+ }
42
+ if (mergedSources.trim().length > 0) {
34
43
  config.dbSchema = {
35
44
  gqlSchema: mergedSources
36
45
  };
@@ -1 +1 @@
1
- {"version":3,"file":"core-plugin.js","sourceRoot":"","sources":["../../src/core/core-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExE,MAAM,OAAO,UAAW,SAAQ,MAAM;IACpC,IAAI,GAAW,YAAY,CAAA;IAE3B,KAAK,CAAC,SAAS,CAAC,MAA6B;QAC3C,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAoB;QAC7B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAChC,CAAC;IAED,iBAAiB,CAAC,MAA4C;QAC5D,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;YACtD,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;gBACxB,GAAG,MAAM,CAAC,MAAM;aACjB,CAAC,CAAA;QACJ,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;YAC1D,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC1B,GAAG,KAAK,CAAC,MAAM;aAChB,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;YAC1D,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;gBACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,mBAAmB,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;YACxD,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;YAC3C,MAAM,CAAC,QAAQ,GAAG;gBAChB,SAAS,EAAE,aAAa;aACzB,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"core-plugin.js","sourceRoot":"","sources":["../../src/core/core-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAGtE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExE,MAAM,OAAO,UAAW,SAAQ,MAAM;IACpC,IAAI,GAAW,YAAY,CAAA;IAE3B,KAAK,CAAC,SAAS,CAAC,MAA6B;QAC3C,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAoB;QAC7B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAChC,CAAC;IAED,iBAAiB,CAAC,MAA4C;QAC5D,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;YACtD,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;gBACxB,GAAG,MAAM,CAAC,MAAM;aACjB,CAAC,CAAA;QACJ,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;YAC1D,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;gBAC1B,GAAG,KAAK,CAAC,MAAM;aAChB,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;YAC1D,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;gBACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;QACxD,IAAI,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;QAEzC,sDAAsD;QACtD,IAAI,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;YACjC,aAAa,IAAI;sCACe,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG;;;;CAIpE,CAAA;QACG,CAAC;QAED,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,QAAQ,GAAG;gBAChB,SAAS,EAAE,aAAa;aACzB,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAED,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC,CAAA"}
@@ -0,0 +1,130 @@
1
+ import { IStoreContext } from '@sentio/runtime';
2
+ import { BaseContext } from '../core/index.js';
3
+ /**
4
+ * A key-value cache that persists across handler invocations.
5
+ *
6
+ * MemoryCache provides a simple interface for storing and retrieving JSON-serializable
7
+ * values. It's useful for caching computed results, tracking state between events,
8
+ * or storing intermediate data during processing.
9
+ *
10
+ * Access the cache through the context object in your handlers:
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * // Basic usage
15
+ * ERC20Processor.bind({ address: TOKEN_ADDRESS })
16
+ * .onEventTransfer(async (event, ctx) => {
17
+ * // Get cached total
18
+ * let total = await ctx.cache.get<number>('transferTotal') ?? 0
19
+ * total += Number(event.args.value)
20
+ * await ctx.cache.set('transferTotal', total)
21
+ * })
22
+ * ```
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * // Block-scoped caching (values isolated per block)
27
+ * .onEventTransfer(async (event, ctx) => {
28
+ * // This value is only visible within the current block
29
+ * await ctx.cache.setInBlock('blockTransferCount', count)
30
+ * const blockCount = await ctx.cache.getInBlock<number>('blockTransferCount')
31
+ * })
32
+ * ```
33
+ *
34
+ * @remarks
35
+ * - Values are JSON serialized, so only JSON-compatible types are supported
36
+ * - Cache is enabled by default; configure via `GLOBAL_CONFIG.cache`
37
+ * - Block-scoped methods (`*InBlock`) prefix keys with block number for isolation
38
+ */
39
+ export declare class MemoryCache {
40
+ private readonly storeContext;
41
+ private readonly context;
42
+ constructor(storeContext: IStoreContext, context: BaseContext);
43
+ /**
44
+ * Retrieves a value from the cache.
45
+ *
46
+ * @typeParam T - The expected type of the cached value
47
+ * @param key - The unique key identifying the cached value
48
+ * @returns The cached value deserialized as type T, or null if not found
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * const user = await ctx.cache.get<{ name: string, score: number }>('user:123')
53
+ * if (user) {
54
+ * console.log(user.name, user.score)
55
+ * }
56
+ * ```
57
+ */
58
+ get<T>(key: string): Promise<T | null>;
59
+ /**
60
+ * Stores a value in the cache.
61
+ *
62
+ * @typeParam T - The type of value being stored (must be JSON-serializable)
63
+ * @param key - The unique key to store the value under
64
+ * @param value - The value to cache (will be JSON serialized)
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * await ctx.cache.set('config', { threshold: 100, enabled: true })
69
+ * await ctx.cache.set('lastPrice', 1234.56)
70
+ * ```
71
+ */
72
+ set<T>(key: string, value: T): Promise<void>;
73
+ /**
74
+ * Removes a value from the cache.
75
+ *
76
+ * @param key - The key of the value to remove
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * await ctx.cache.delete('temporaryData')
81
+ * ```
82
+ */
83
+ delete(key: string): Promise<void>;
84
+ /**
85
+ * Stores a value scoped to the current block number.
86
+ *
87
+ * The key is automatically prefixed with the block number, ensuring that
88
+ * values set in different blocks don't collide. Useful for accumulating
89
+ * per-block statistics or temporary computation results.
90
+ *
91
+ * @typeParam T - The type of value being stored (must be JSON-serializable)
92
+ * @param key - The key to store the value under (will be prefixed with block number)
93
+ * @param value - The value to cache
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * // Track transfers per block
98
+ * let count = await ctx.cache.getInBlock<number>('transferCount') ?? 0
99
+ * await ctx.cache.setInBlock('transferCount', count + 1)
100
+ * ```
101
+ */
102
+ setInBlock<T>(key: string, value: T): Promise<void>;
103
+ /**
104
+ * Retrieves a value scoped to the current block number.
105
+ *
106
+ * Only returns values that were set in the same block using `setInBlock`.
107
+ *
108
+ * @typeParam T - The expected type of the cached value
109
+ * @param key - The key to retrieve (block number prefix is added automatically)
110
+ * @returns The cached value for this block, or null if not found
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * const blockVolume = await ctx.cache.getInBlock<bigint>('volume')
115
+ * ```
116
+ */
117
+ getInBlock<T>(key: string): Promise<T | null>;
118
+ /**
119
+ * Removes a value scoped to the current block number.
120
+ *
121
+ * @param key - The key to delete (block number prefix is added automatically)
122
+ *
123
+ * @example
124
+ * ```typescript
125
+ * await ctx.cache.deleteInBlock('temporaryBlockData')
126
+ * ```
127
+ */
128
+ deleteInBlock(key: string): Promise<void>;
129
+ }
130
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/store/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAK9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,YAAY,EAAE,aAAa,EAC3B,OAAO,EAAE,WAAW;IAGvC;;;;;;;;;;;;;;OAcG;IACU,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkBnD;;;;;;;;;;;;OAYG;IACU,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBzD;;;;;;;;;OASG;IACU,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C;;;;;;;;;;;;;;;;;OAiBG;IACU,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE;;;;;;;;;;;;;OAaG;IACU,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAK1D;;;;;;;;;OASG;IACU,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIvD"}
@@ -0,0 +1,183 @@
1
+ /** Internal entity name used for cache storage */
2
+ const CacheItemEntityName = 'MemoryCacheItem';
3
+ /**
4
+ * A key-value cache that persists across handler invocations.
5
+ *
6
+ * MemoryCache provides a simple interface for storing and retrieving JSON-serializable
7
+ * values. It's useful for caching computed results, tracking state between events,
8
+ * or storing intermediate data during processing.
9
+ *
10
+ * Access the cache through the context object in your handlers:
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * // Basic usage
15
+ * ERC20Processor.bind({ address: TOKEN_ADDRESS })
16
+ * .onEventTransfer(async (event, ctx) => {
17
+ * // Get cached total
18
+ * let total = await ctx.cache.get<number>('transferTotal') ?? 0
19
+ * total += Number(event.args.value)
20
+ * await ctx.cache.set('transferTotal', total)
21
+ * })
22
+ * ```
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * // Block-scoped caching (values isolated per block)
27
+ * .onEventTransfer(async (event, ctx) => {
28
+ * // This value is only visible within the current block
29
+ * await ctx.cache.setInBlock('blockTransferCount', count)
30
+ * const blockCount = await ctx.cache.getInBlock<number>('blockTransferCount')
31
+ * })
32
+ * ```
33
+ *
34
+ * @remarks
35
+ * - Values are JSON serialized, so only JSON-compatible types are supported
36
+ * - Cache is enabled by default; configure via `GLOBAL_CONFIG.cache`
37
+ * - Block-scoped methods (`*InBlock`) prefix keys with block number for isolation
38
+ */
39
+ export class MemoryCache {
40
+ storeContext;
41
+ context;
42
+ constructor(storeContext, context) {
43
+ this.storeContext = storeContext;
44
+ this.context = context;
45
+ }
46
+ /**
47
+ * Retrieves a value from the cache.
48
+ *
49
+ * @typeParam T - The expected type of the cached value
50
+ * @param key - The unique key identifying the cached value
51
+ * @returns The cached value deserialized as type T, or null if not found
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const user = await ctx.cache.get<{ name: string, score: number }>('user:123')
56
+ * if (user) {
57
+ * console.log(user.name, user.score)
58
+ * }
59
+ * ```
60
+ */
61
+ async get(key) {
62
+ const promise = this.storeContext.sendRequest({
63
+ get: {
64
+ entity: CacheItemEntityName,
65
+ id: key
66
+ }
67
+ });
68
+ const data = (await promise);
69
+ if (data.entityList?.entities[0]) {
70
+ const entityData = data.entityList?.entities[0]?.data;
71
+ const value = entityData.fields['value'];
72
+ return JSON.parse(value.stringValue);
73
+ }
74
+ return null;
75
+ }
76
+ /**
77
+ * Stores a value in the cache.
78
+ *
79
+ * @typeParam T - The type of value being stored (must be JSON-serializable)
80
+ * @param key - The unique key to store the value under
81
+ * @param value - The value to cache (will be JSON serialized)
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * await ctx.cache.set('config', { threshold: 100, enabled: true })
86
+ * await ctx.cache.set('lastPrice', 1234.56)
87
+ * ```
88
+ */
89
+ async set(key, value) {
90
+ const entityData = {
91
+ fields: {
92
+ id: {
93
+ stringValue: key
94
+ },
95
+ value: {
96
+ stringValue: JSON.stringify(value)
97
+ }
98
+ }
99
+ };
100
+ const request = {
101
+ upsert: {
102
+ entity: [CacheItemEntityName],
103
+ id: [key],
104
+ entityData: [entityData]
105
+ }
106
+ };
107
+ await this.storeContext.sendRequest(request);
108
+ }
109
+ /**
110
+ * Removes a value from the cache.
111
+ *
112
+ * @param key - The key of the value to remove
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * await ctx.cache.delete('temporaryData')
117
+ * ```
118
+ */
119
+ async delete(key) {
120
+ const request = {
121
+ delete: {
122
+ entity: [CacheItemEntityName],
123
+ id: [key]
124
+ }
125
+ };
126
+ await this.storeContext.sendRequest(request);
127
+ }
128
+ /**
129
+ * Stores a value scoped to the current block number.
130
+ *
131
+ * The key is automatically prefixed with the block number, ensuring that
132
+ * values set in different blocks don't collide. Useful for accumulating
133
+ * per-block statistics or temporary computation results.
134
+ *
135
+ * @typeParam T - The type of value being stored (must be JSON-serializable)
136
+ * @param key - The key to store the value under (will be prefixed with block number)
137
+ * @param value - The value to cache
138
+ *
139
+ * @example
140
+ * ```typescript
141
+ * // Track transfers per block
142
+ * let count = await ctx.cache.getInBlock<number>('transferCount') ?? 0
143
+ * await ctx.cache.setInBlock('transferCount', count + 1)
144
+ * ```
145
+ */
146
+ async setInBlock(key, value) {
147
+ const block = this.context.getMetaData('for cache', {}).blockNumber;
148
+ return this.set(`${block}-${key}`, value);
149
+ }
150
+ /**
151
+ * Retrieves a value scoped to the current block number.
152
+ *
153
+ * Only returns values that were set in the same block using `setInBlock`.
154
+ *
155
+ * @typeParam T - The expected type of the cached value
156
+ * @param key - The key to retrieve (block number prefix is added automatically)
157
+ * @returns The cached value for this block, or null if not found
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * const blockVolume = await ctx.cache.getInBlock<bigint>('volume')
162
+ * ```
163
+ */
164
+ async getInBlock(key) {
165
+ const block = this.context.getMetaData('for cache', {}).blockNumber;
166
+ return this.get(`${block}-${key}`);
167
+ }
168
+ /**
169
+ * Removes a value scoped to the current block number.
170
+ *
171
+ * @param key - The key to delete (block number prefix is added automatically)
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * await ctx.cache.deleteInBlock('temporaryBlockData')
176
+ * ```
177
+ */
178
+ async deleteInBlock(key) {
179
+ const block = this.context.getMetaData('for cache', {}).blockNumber;
180
+ return this.delete(`${block}-${key}`);
181
+ }
182
+ }
183
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/store/cache.ts"],"names":[],"mappings":"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"}
@@ -1 +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;AA+DnH,wBAAgB,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,CAQ5D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM;;;EAI9C"}
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;AAgEnH,wBAAgB,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,aAAa,CAQ5D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM;;;EAI9C"}
@@ -16,6 +16,7 @@ const baseSchema = buildASTSchema(parse(`
16
16
  directive @jsonField on OBJECT # legacy
17
17
  directive @aggregation(intervals: [String!]! = ["hour"], source: String!) on OBJECT
18
18
  directive @aggregate(fn: String!, arg: String, cumulative: Boolean = false) on FIELD_DEFINITION
19
+ directive @cache(sizeMB: Int!) on OBJECT
19
20
  ${customScalars.map((name) => 'scalar ' + name).join('\n')}
20
21
  `));
21
22
  function getElemType(type) {
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/store/schema.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ export declare class MemoryDatabase {
19
19
  private fillDerivedFromFields;
20
20
  private processRequest;
21
21
  reset(): void;
22
+ private requestRequiresSchema;
22
23
  private listEntities;
23
24
  }
24
25
  export declare function withStoreContext(ctx: StoreContext, fn: () => Promise<void>): () => Promise<void>;
@@ -1 +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,EACL,SAAS,EAOV,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAgB,aAAa,EAA0B,MAAM,kBAAkB,CAAA;AAOtF,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,qBAAa,cAAc;IAKb,QAAQ,CAAC,SAAS,EAAE,YAAY;IAJ5C,EAAE,mCAAyC;IACpC,aAAa,EAAE,SAAS,GAAG,SAAS,CAAA;IAC3C,OAAO,EAAE,aAAa,CAAA;gBAED,SAAS,EAAE,YAAY;IAE5C,IAAI,MAAM,kBAST;IAED,IAAI,KAAK,UAER;IAED,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;IAkEtB,KAAK;IAIL,OAAO,CAAC,YAAY;CAmBrB;AA8ID,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,uBAI1E"}
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,EACL,SAAS,EAOV,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAgB,aAAa,EAA0B,MAAM,kBAAkB,CAAA;AAOtF,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAKzC,qBAAa,cAAc;IAKb,QAAQ,CAAC,SAAS,EAAE,YAAY;IAJ5C,EAAE,mCAAyC;IACpC,aAAa,EAAE,SAAS,GAAG,SAAS,CAAA;IAC3C,OAAO,EAAE,aAAa,CAAA;gBAED,SAAS,EAAE,YAAY;IAE5C,IAAI,MAAM,kBAST;IAED,IAAI,KAAK,UAER;IAED,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;IAmBtD,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;IA6C7B,OAAO,CAAC,cAAc;IAqEtB,KAAK;IAKL,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,YAAY;CAmBrB;AA8ID,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,uBAI1E"}
@@ -7,6 +7,8 @@ import { PluginManager } from '@sentio/runtime';
7
7
  import { BigDecimalConverter, BigIntConverter } from '../store/convert.js';
8
8
  import { BigDecimal } from '@sentio/bigdecimal';
9
9
  import { Store } from '../store/store.js';
10
+ // Internal entity name used by MemoryCache - bypasses schema validation
11
+ const MEMORY_CACHE_ITEM_ENTITY = 'MemoryCacheItem';
10
12
  export class MemoryDatabase {
11
13
  dbContext;
12
14
  db = new Map();
@@ -43,6 +45,10 @@ export class MemoryDatabase {
43
45
  const entityDB = this.db.get(entity) ?? {};
44
46
  entityDB[id] = { entity, fields: data.fields };
45
47
  this.db.set(entity, entityDB);
48
+ // Skip interface handling for MemoryCacheItem (no schema required)
49
+ if (entity === MEMORY_CACHE_ITEM_ENTITY || !this.schema) {
50
+ return;
51
+ }
46
52
  const entityClass = this.schema.getType(entity);
47
53
  if (entityClass && entityClass instanceof GraphQLObjectType) {
48
54
  for (const intf of entityClass.getInterfaces()) {
@@ -69,6 +75,10 @@ export class MemoryDatabase {
69
75
  }
70
76
  // a quick and dirty way to mimic how derivedFrom fields are filled in the real database
71
77
  fillDerivedFromFields(entity, id, result) {
78
+ // Skip derived fields processing for MemoryCacheItem (no schema required)
79
+ if (entity === MEMORY_CACHE_ITEM_ENTITY || !this.schema) {
80
+ return result;
81
+ }
72
82
  const entityClass = this.schema.getType(entity);
73
83
  if (entityClass && entityClass instanceof GraphQLObjectType) {
74
84
  for (const field of Object.values(entityClass.getFields())) {
@@ -110,11 +120,13 @@ export class MemoryDatabase {
110
120
  return result;
111
121
  }
112
122
  processRequest(request) {
113
- if (!this.schema) {
123
+ const req = request.dbRequest;
124
+ // Check if schema is required for this request
125
+ const requiresSchema = this.requestRequiresSchema(req);
126
+ if (requiresSchema && !this.schema) {
114
127
  console.warn('No schema defined, please check if entity schema is defined and loaded');
115
128
  return;
116
129
  }
117
- const req = request.dbRequest;
118
130
  this.lastDbRequest = req;
119
131
  if (req) {
120
132
  if (req.upsert) {
@@ -173,6 +185,25 @@ export class MemoryDatabase {
173
185
  reset() {
174
186
  this.db.clear();
175
187
  }
188
+ // Check if the request involves only MemoryCacheItem entity, which doesn't require schema
189
+ requestRequiresSchema(req) {
190
+ if (!req)
191
+ return false;
192
+ // Check if all entities in the request are MemoryCacheItem
193
+ if (req.upsert) {
194
+ return !req.upsert.entity.every((e) => e === MEMORY_CACHE_ITEM_ENTITY);
195
+ }
196
+ if (req.delete) {
197
+ return !req.delete.entity.every((e) => e === MEMORY_CACHE_ITEM_ENTITY);
198
+ }
199
+ if (req.get) {
200
+ return req.get.entity !== MEMORY_CACHE_ITEM_ENTITY;
201
+ }
202
+ if (req.list) {
203
+ return req.list.entity !== MEMORY_CACHE_ITEM_ENTITY;
204
+ }
205
+ return false;
206
+ }
176
207
  listEntities(entity, filters) {
177
208
  const entityDB = this.db.get(entity);
178
209
  const entities = entityDB
@@ -1 +1 @@
1
- {"version":3,"file":"memory-database.js","sourceRoot":"","sources":["../../src/testing/memory-database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-database.js","sourceRoot":"","sources":["../../src/testing/memory-database.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,oBAAoB,EAKrB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAA+B,KAAK,EAAmB,MAAM,kBAAkB,CAAA;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,iBAAiB,EAAqB,MAAM,SAAS,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,wEAAwE;AACxE,MAAM,wBAAwB,GAAG,iBAAiB,CAAA;AAElD,MAAM,OAAO,cAAc;IAKJ;IAJrB,EAAE,GAAG,IAAI,GAAG,EAA+B,CAAA;IACpC,aAAa,CAAuB;IAC3C,OAAO,CAAe;IAEtB,YAAqB,SAAuB;QAAvB,cAAS,GAAT,SAAS,CAAc;IAAG,CAAC;IAEhD,IAAI,MAAM;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,mBAAmB,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;gBACjE,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;gBACzB,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAClC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IAClE,CAAC;IAED,IAAI;QACF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;QACpC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;IACnC,CAAC;IAEM,SAAS,CAAC,MAAc,EAAE,EAAU;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACpC,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC5C,CAAC;IAES,MAAM,CAAC,MAAc,EAAE,EAAU,EAAE,IAAS;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;QAC1C,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;QAC9C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC7B,mEAAmE;QACnE,IAAI,MAAM,KAAK,wBAAwB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACxD,OAAM;QACR,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC/C,IAAI,WAAW,IAAI,WAAW,YAAY,iBAAiB,EAAE,CAAC;YAC5D,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAA;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;gBAC1C,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;gBAC5C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAES,MAAM,CAAC,MAAc,EAAE,EAAU;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACpC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAES,OAAO,CAAC,MAAc,EAAE,EAAU;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACpC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;YAC3B,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;QACvD,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,wFAAwF;IAChF,qBAAqB,CAAC,MAAc,EAAE,EAAU,EAAE,MAAW;QACnE,0EAA0E;QAC1E,IAAI,MAAM,KAAK,wBAAwB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACxD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC/C,IAAI,WAAW,IAAI,WAAW,YAAY,iBAAiB,EAAE,CAAC;YAC5D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC;gBAC3D,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;gBACzC,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAA;oBAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;oBACpD,IAAI,SAAS,IAAI,SAAS,YAAY,iBAAiB,EAAE,CAAC;wBACxD,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,CAAA;wBACvD,IAAI,YAAY,EAAE,CAAC;4BACjB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;4BACzC,IAAI,MAAM,EAAE,CAAC;gCACX,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oCACzC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;oCAC5B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;oCAC7C,IAAI,WAAW,GAAG,KAAK,CAAA;oCACvB,IAAI,WAAW,EAAE,WAAW,KAAK,EAAE,EAAE,CAAC;wCACpC,WAAW,GAAG,IAAI,CAAA;oCACpB,CAAC;oCACD,IAAI,WAAW,EAAE,SAAS,EAAE,CAAC;wCAC3B,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAA;oCACnF,CAAC;oCACD,IAAI,WAAW,EAAE,CAAC;wCAChB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;wCACrC,IAAI,GAAG,EAAE,CAAC;4CACR,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;wCACpD,CAAC;6CAAM,CAAC;4CACN,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAA;wCAClF,CAAC;oCACH,CAAC;gCACH,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,cAAc,CAAC,OAA8B;QACnD,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAA;QAE7B,+CAA+C;QAC/C,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAA;QACtD,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;YACtF,OAAM;QACR,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,GAAG,CAAA;QACxB,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAA;gBACzC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAY,CAAA;oBACtC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;oBAC5B,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;gBAChC,CAAC,CAAC,CAAA;gBAEF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;oBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;iBACf,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAA;gBACjC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;oBACpB,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;oBAC9B,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;gBAC5B,CAAC,CAAC,CAAA;gBACF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;oBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;iBACf,CAAC,CAAA;YACJ,CAAC;YAED,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBACZ,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,CAAA;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;gBACrC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;oBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,8CAA8C;oBAC9C,UAAU,EAAE;wBACV,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;qBACvC;iBACF,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACb,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;gBAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBAE/C,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;oBAE5B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;wBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;wBAC1E,UAAU,EAAE,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;qBAC7D,CAAC,CAAA;gBACJ,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;wBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;wBAChE,UAAU,EAAE,GAAG;qBAChB,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;IACjB,CAAC;IAED,0FAA0F;IAClF,qBAAqB,CAAC,GAA0B;QACtD,IAAI,CAAC,GAAG;YAAE,OAAO,KAAK,CAAA;QAEtB,2DAA2D;QAC3D,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,wBAAwB,CAAC,CAAA;QACxE,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,wBAAwB,CAAC,CAAA;QACxE,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,wBAAwB,CAAA;QACpD,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,wBAAwB,CAAA;QACrD,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,YAAY,CAAC,MAAc,EAAE,OAA8B;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACpC,MAAM,QAAQ,GAAG,QAAQ;YACvB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;iBACrB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACtE,CAAC,CAAC,EAAE,CAAA;QAEN,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,QAAQ,CAAA;QACjB,CAAC;QAED,IAAI,OAAO,GAAG,QAAQ,CAAA;QACtB,2BAA2B;QAC3B,KAAK,MAAM,CAAC,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;YAC9B,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC/C,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AAED,SAAS,MAAM,CAAC,MAAkB,EAAE,MAA0B;IAC5D,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;IAE5C,QAAQ,MAAM,CAAC,EAAE,EAAE,CAAC;QAClB,KAAK,oBAAoB,CAAC,EAAE;YAC1B,OAAO,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACnC,KAAK,oBAAoB,CAAC,EAAE;YAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACpC,KAAK,oBAAoB,CAAC,EAAE;YAC1B,OAAO,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACzC,KAAK,oBAAoB,CAAC,EAAE;YAC1B,OAAO,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACtC,KAAK,oBAAoB,CAAC,EAAE;YAC1B,OAAO,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACvE,KAAK,oBAAoB,CAAC,EAAE;YAC1B,OAAO,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;QACpE,KAAK,oBAAoB,CAAC,EAAE;YAC1B,OAAO,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACxE,KAAK,oBAAoB,CAAC,MAAM;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACzE,KAAK,oBAAoB,CAAC,OAAO;YAC/B,OAAO,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACzE,KAAK,oBAAoB,CAAC,OAAO;YAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;gBAC3C,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC3E,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAA;QACd,KAAK,oBAAoB,CAAC,IAAI;YAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;QACtE;YACE,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,MAAkB,EAAE,KAAa;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,KAAK,CAAC,KAAgB,EAAE,KAAqB;IACpD,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC,WAAW,KAAK,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAA;IAC5D,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,EAAE,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;YAC3B,OAAO,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACzB,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IACtE,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,WAAW,CAAC,KAAgB,EAAE,KAAqB;IAC1D,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACzB,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;QACvB,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;QACvB,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7D,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAgB,EAAE,KAAgC;IAClE,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACzB,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;QACvB,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAA;QACvB,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAiB;IACjC,IAAI,KAAK,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC,QAAQ,CAAA;IACvB,CAAC;IACD,IAAI,KAAK,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC,UAAU,CAAA;IACzB,CAAC;IACD,IAAI,KAAK,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,eAAe,CAAC,EAAE,CAAC,KAAK,CAAW,CAAA;IAC5C,CAAC;IACD,IAAI,KAAK,EAAE,eAAe,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,mBAAmB,CAAC,EAAE,CAAC,KAAK,CAAe,CAAA;IACpD,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAS;IACzB,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,aAAa,EAAE,EAAE;QACjB,cAAc,EAAE,EAAE;QAClB,YAAY,EAAE,IAAI,IAAI,EAAE;QACxB,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;KAC9B,CAAA;AACH,CAAC;AAED,SAAS,IAAI,CAAC,KAAc,EAAE,KAAc;IAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;IACtE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,KAA6B;IACnD,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;QACxD,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,KAAwB,CAAA;YAC/D,OAAO,KAAK,EAAE,KAAK,CAAA;QACrB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED,SAAS,WAAW,CAAC,IAAuB;IAC1C,IAAI,IAAI,YAAY,iBAAiB,EAAE,CAAC;QACtC,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,IAAI,YAAY,WAAW,EAAE,CAAC;QAChC,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IACD,IAAI,IAAI,YAAY,cAAc,EAAE,CAAC;QACnC,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAiB,EAAE,EAAuB;IACzE,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,aAAa,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACjE,CAAC,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentio/sdk",
3
- "version": "3.1.0",
3
+ "version": "3.2.0-rc.2",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -97,8 +97,8 @@
97
97
  "typechain": "^8.3.2",
98
98
  "utility-types": "^3.11.0",
99
99
  "yaml": "^2.3.4",
100
- "@sentio/protos": "3.1.0",
101
- "@sentio/runtime": "^3.1.0"
100
+ "@sentio/protos": "3.2.0-rc.2",
101
+ "@sentio/runtime": "^3.2.0-rc.2"
102
102
  },
103
103
  "peerDependencies": {
104
104
  "@sentio/tsup": "^8.3.5-rc.1"
@@ -6,11 +6,13 @@ import { mergeProcessResultsInPlace, PluginManager } from '@sentio/runtime'
6
6
  import { Required } from 'utility-types'
7
7
  import { ServerError, Status } from 'nice-grpc'
8
8
  import { Store } from '../store/store.js'
9
+ import { MemoryCache } from '../store/cache.js'
9
10
 
10
11
  export abstract class BaseContext {
11
12
  meter: Meter
12
13
  eventLogger: EventLoggerBinding
13
14
  private _store: Store
15
+ private _cache: MemoryCache
14
16
  baseLabels: Labels
15
17
  private active: boolean
16
18
 
@@ -85,6 +87,37 @@ export abstract class BaseContext {
85
87
  return this._store
86
88
  }
87
89
 
90
+ /**
91
+ * Access the in-memory key-value cache.
92
+ *
93
+ * The cache allows storing and retrieving JSON-serializable values that persist
94
+ * across handler invocations. Useful for caching computed results, tracking
95
+ * cumulative state, or storing intermediate processing data.
96
+ *
97
+ * @returns The MemoryCache instance, or undefined if cache is not available
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * // Store and retrieve values
102
+ * await ctx.cache.set('totalVolume', volume)
103
+ * const cached = await ctx.cache.get<number>('totalVolume')
104
+ *
105
+ * // Block-scoped values (isolated per block)
106
+ * await ctx.cache.setInBlock('blockCount', count)
107
+ * ```
108
+ *
109
+ * @see {@link MemoryCache} for full API documentation
110
+ */
111
+ get cache() {
112
+ if (!this._cache) {
113
+ const dbContext = PluginManager.INSTANCE.dbContextLocalStorage.getStore()
114
+ if (dbContext) {
115
+ this._cache = new MemoryCache(dbContext, this)
116
+ }
117
+ }
118
+ return this._cache
119
+ }
120
+
88
121
  // this method must be called within the dbContextLocalStorage scope
89
122
  initStore() {
90
123
  const dbContext = PluginManager.INSTANCE.dbContextLocalStorage.getStore()
@@ -1,4 +1,4 @@
1
- import { Plugin, PluginManager } from '@sentio/runtime'
1
+ import { GLOBAL_CONFIG, Plugin, PluginManager } from '@sentio/runtime'
2
2
  import { InitResponse, ProcessConfigResponse } from '@sentio/protos'
3
3
 
4
4
  import { MetricState } from './meter.js'
@@ -36,9 +36,20 @@ export class CorePlugin extends Plugin {
36
36
  })
37
37
  }
38
38
 
39
- if (DatabaseSchemaState.INSTANCE.getValues().length > 0) {
40
- const schemas = DatabaseSchemaState.INSTANCE.getValues()
41
- const mergedSources = mergeSchemas(schemas)
39
+ const schemas = DatabaseSchemaState.INSTANCE.getValues()
40
+ let mergedSources = mergeSchemas(schemas)
41
+
42
+ // Append MemoryCacheItem schema when cache is enabled
43
+ if (GLOBAL_CONFIG.cache?.enabled) {
44
+ mergedSources += `
45
+ type MemoryCacheItem @cache(sizeMB: ${GLOBAL_CONFIG.cache.size || 100}) {
46
+ id: ID!
47
+ value: String!
48
+ }
49
+ `
50
+ }
51
+
52
+ if (mergedSources.trim().length > 0) {
42
53
  config.dbSchema = {
43
54
  gqlSchema: mergedSources
44
55
  }
@@ -0,0 +1,193 @@
1
+ import { IStoreContext } from '@sentio/runtime'
2
+ import { DBRequest, DBResponse, RichStruct, RichValue } from '@sentio/protos'
3
+ import { BaseContext } from '../core/index.js'
4
+
5
+ /** Internal entity name used for cache storage */
6
+ const CacheItemEntityName = 'MemoryCacheItem'
7
+
8
+ /**
9
+ * A key-value cache that persists across handler invocations.
10
+ *
11
+ * MemoryCache provides a simple interface for storing and retrieving JSON-serializable
12
+ * values. It's useful for caching computed results, tracking state between events,
13
+ * or storing intermediate data during processing.
14
+ *
15
+ * Access the cache through the context object in your handlers:
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // Basic usage
20
+ * ERC20Processor.bind({ address: TOKEN_ADDRESS })
21
+ * .onEventTransfer(async (event, ctx) => {
22
+ * // Get cached total
23
+ * let total = await ctx.cache.get<number>('transferTotal') ?? 0
24
+ * total += Number(event.args.value)
25
+ * await ctx.cache.set('transferTotal', total)
26
+ * })
27
+ * ```
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * // Block-scoped caching (values isolated per block)
32
+ * .onEventTransfer(async (event, ctx) => {
33
+ * // This value is only visible within the current block
34
+ * await ctx.cache.setInBlock('blockTransferCount', count)
35
+ * const blockCount = await ctx.cache.getInBlock<number>('blockTransferCount')
36
+ * })
37
+ * ```
38
+ *
39
+ * @remarks
40
+ * - Values are JSON serialized, so only JSON-compatible types are supported
41
+ * - Cache is enabled by default; configure via `GLOBAL_CONFIG.cache`
42
+ * - Block-scoped methods (`*InBlock`) prefix keys with block number for isolation
43
+ */
44
+ export class MemoryCache {
45
+ constructor(
46
+ private readonly storeContext: IStoreContext,
47
+ private readonly context: BaseContext
48
+ ) {}
49
+
50
+ /**
51
+ * Retrieves a value from the cache.
52
+ *
53
+ * @typeParam T - The expected type of the cached value
54
+ * @param key - The unique key identifying the cached value
55
+ * @returns The cached value deserialized as type T, or null if not found
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const user = await ctx.cache.get<{ name: string, score: number }>('user:123')
60
+ * if (user) {
61
+ * console.log(user.name, user.score)
62
+ * }
63
+ * ```
64
+ */
65
+ public async get<T>(key: string): Promise<T | null> {
66
+ const promise = this.storeContext.sendRequest({
67
+ get: {
68
+ entity: CacheItemEntityName,
69
+ id: key
70
+ }
71
+ })
72
+
73
+ const data = (await promise) as DBResponse
74
+ if (data.entityList?.entities[0]) {
75
+ const entityData = data.entityList?.entities[0]?.data as RichStruct
76
+ const value = entityData.fields['value'] as RichValue
77
+ return JSON.parse(value.stringValue!) as T
78
+ }
79
+
80
+ return null
81
+ }
82
+
83
+ /**
84
+ * Stores a value in the cache.
85
+ *
86
+ * @typeParam T - The type of value being stored (must be JSON-serializable)
87
+ * @param key - The unique key to store the value under
88
+ * @param value - The value to cache (will be JSON serialized)
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * await ctx.cache.set('config', { threshold: 100, enabled: true })
93
+ * await ctx.cache.set('lastPrice', 1234.56)
94
+ * ```
95
+ */
96
+ public async set<T>(key: string, value: T): Promise<void> {
97
+ const entityData: RichStruct = {
98
+ fields: {
99
+ id: {
100
+ stringValue: key
101
+ },
102
+ value: {
103
+ stringValue: JSON.stringify(value)
104
+ }
105
+ }
106
+ }
107
+ const request = {
108
+ upsert: {
109
+ entity: [CacheItemEntityName],
110
+ id: [key],
111
+ entityData: [entityData]
112
+ }
113
+ } as DBRequest
114
+ await this.storeContext.sendRequest(request)
115
+ }
116
+
117
+ /**
118
+ * Removes a value from the cache.
119
+ *
120
+ * @param key - The key of the value to remove
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * await ctx.cache.delete('temporaryData')
125
+ * ```
126
+ */
127
+ public async delete(key: string): Promise<void> {
128
+ const request = {
129
+ delete: {
130
+ entity: [CacheItemEntityName],
131
+ id: [key]
132
+ }
133
+ } as DBRequest
134
+ await this.storeContext.sendRequest(request)
135
+ }
136
+
137
+ /**
138
+ * Stores a value scoped to the current block number.
139
+ *
140
+ * The key is automatically prefixed with the block number, ensuring that
141
+ * values set in different blocks don't collide. Useful for accumulating
142
+ * per-block statistics or temporary computation results.
143
+ *
144
+ * @typeParam T - The type of value being stored (must be JSON-serializable)
145
+ * @param key - The key to store the value under (will be prefixed with block number)
146
+ * @param value - The value to cache
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * // Track transfers per block
151
+ * let count = await ctx.cache.getInBlock<number>('transferCount') ?? 0
152
+ * await ctx.cache.setInBlock('transferCount', count + 1)
153
+ * ```
154
+ */
155
+ public async setInBlock<T>(key: string, value: T): Promise<void> {
156
+ const block = this.context.getMetaData('for cache', {}).blockNumber
157
+ return this.set<T>(`${block}-${key}`, value)
158
+ }
159
+
160
+ /**
161
+ * Retrieves a value scoped to the current block number.
162
+ *
163
+ * Only returns values that were set in the same block using `setInBlock`.
164
+ *
165
+ * @typeParam T - The expected type of the cached value
166
+ * @param key - The key to retrieve (block number prefix is added automatically)
167
+ * @returns The cached value for this block, or null if not found
168
+ *
169
+ * @example
170
+ * ```typescript
171
+ * const blockVolume = await ctx.cache.getInBlock<bigint>('volume')
172
+ * ```
173
+ */
174
+ public async getInBlock<T>(key: string): Promise<T | null> {
175
+ const block = this.context.getMetaData('for cache', {}).blockNumber
176
+ return this.get<T>(`${block}-${key}`)
177
+ }
178
+
179
+ /**
180
+ * Removes a value scoped to the current block number.
181
+ *
182
+ * @param key - The key to delete (block number prefix is added automatically)
183
+ *
184
+ * @example
185
+ * ```typescript
186
+ * await ctx.cache.deleteInBlock('temporaryBlockData')
187
+ * ```
188
+ */
189
+ public async deleteInBlock(key: string): Promise<void> {
190
+ const block = this.context.getMetaData('for cache', {}).blockNumber
191
+ return this.delete(`${block}-${key}`)
192
+ }
193
+ }
@@ -19,6 +19,7 @@ const baseSchema = buildASTSchema(
19
19
  directive @jsonField on OBJECT # legacy
20
20
  directive @aggregation(intervals: [String!]! = ["hour"], source: String!) on OBJECT
21
21
  directive @aggregate(fn: String!, arg: String, cumulative: Boolean = false) on FIELD_DEFINITION
22
+ directive @cache(sizeMB: Int!) on OBJECT
22
23
  ${customScalars.map((name) => 'scalar ' + name).join('\n')}
23
24
  `)
24
25
  )
@@ -17,6 +17,9 @@ import { BigDecimalConverter, BigIntConverter } from '../store/convert.js'
17
17
  import { BigDecimal } from '@sentio/bigdecimal'
18
18
  import { Store } from '../store/store.js'
19
19
 
20
+ // Internal entity name used by MemoryCache - bypasses schema validation
21
+ const MEMORY_CACHE_ITEM_ENTITY = 'MemoryCacheItem'
22
+
20
23
  export class MemoryDatabase {
21
24
  db = new Map<string, Record<string, any>>()
22
25
  public lastDbRequest: DBRequest | undefined
@@ -57,6 +60,10 @@ export class MemoryDatabase {
57
60
  const entityDB = this.db.get(entity) ?? {}
58
61
  entityDB[id] = { entity, fields: data.fields }
59
62
  this.db.set(entity, entityDB)
63
+ // Skip interface handling for MemoryCacheItem (no schema required)
64
+ if (entity === MEMORY_CACHE_ITEM_ENTITY || !this.schema) {
65
+ return
66
+ }
60
67
  const entityClass = this.schema.getType(entity)
61
68
  if (entityClass && entityClass instanceof GraphQLObjectType) {
62
69
  for (const intf of entityClass.getInterfaces()) {
@@ -86,6 +93,10 @@ export class MemoryDatabase {
86
93
 
87
94
  // a quick and dirty way to mimic how derivedFrom fields are filled in the real database
88
95
  private fillDerivedFromFields(entity: string, id: string, result: any) {
96
+ // Skip derived fields processing for MemoryCacheItem (no schema required)
97
+ if (entity === MEMORY_CACHE_ITEM_ENTITY || !this.schema) {
98
+ return result
99
+ }
89
100
  const entityClass = this.schema.getType(entity)
90
101
  if (entityClass && entityClass instanceof GraphQLObjectType) {
91
102
  for (const field of Object.values(entityClass.getFields())) {
@@ -127,12 +138,15 @@ export class MemoryDatabase {
127
138
  }
128
139
 
129
140
  private processRequest(request: ProcessStreamResponse) {
130
- if (!this.schema) {
141
+ const req = request.dbRequest
142
+
143
+ // Check if schema is required for this request
144
+ const requiresSchema = this.requestRequiresSchema(req)
145
+ if (requiresSchema && !this.schema) {
131
146
  console.warn('No schema defined, please check if entity schema is defined and loaded')
132
147
  return
133
148
  }
134
149
 
135
- const req = request.dbRequest
136
150
  this.lastDbRequest = req
137
151
  if (req) {
138
152
  if (req.upsert) {
@@ -196,6 +210,26 @@ export class MemoryDatabase {
196
210
  this.db.clear()
197
211
  }
198
212
 
213
+ // Check if the request involves only MemoryCacheItem entity, which doesn't require schema
214
+ private requestRequiresSchema(req: DBRequest | undefined): boolean {
215
+ if (!req) return false
216
+
217
+ // Check if all entities in the request are MemoryCacheItem
218
+ if (req.upsert) {
219
+ return !req.upsert.entity.every((e) => e === MEMORY_CACHE_ITEM_ENTITY)
220
+ }
221
+ if (req.delete) {
222
+ return !req.delete.entity.every((e) => e === MEMORY_CACHE_ITEM_ENTITY)
223
+ }
224
+ if (req.get) {
225
+ return req.get.entity !== MEMORY_CACHE_ITEM_ENTITY
226
+ }
227
+ if (req.list) {
228
+ return req.list.entity !== MEMORY_CACHE_ITEM_ENTITY
229
+ }
230
+ return false
231
+ }
232
+
199
233
  private listEntities(entity: string, filters?: DBRequest_DBFilter[]) {
200
234
  const entityDB = this.db.get(entity)
201
235
  const entities = entityDB