@sentio/sdk 2.1.2 → 2.1.3-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/aptos/tests/souffl3.js +2 -3
- package/lib/aptos/tests/souffl3.js.map +1 -1
- package/lib/core/base-context.d.ts +4 -2
- package/lib/core/base-context.js +7 -2
- package/lib/core/base-context.js.map +1 -1
- package/lib/core/core-plugin.js +0 -11
- package/lib/core/core-plugin.js.map +1 -1
- package/lib/core/{logger.d.ts → event-logger.d.ts} +4 -2
- package/lib/core/{logger.js → event-logger.js} +16 -3
- package/lib/core/event-logger.js.map +1 -0
- package/lib/core/event-tracker.d.ts +4 -22
- package/lib/core/event-tracker.js +5 -52
- package/lib/core/event-tracker.js.map +1 -1
- package/lib/core/index.d.ts +0 -1
- package/lib/core/index.js +0 -1
- package/lib/core/index.js.map +1 -1
- package/lib/core/normalization.js +1 -1
- package/lib/core/normalization.js.map +1 -1
- package/package.json +5 -5
- package/src/aptos/tests/souffl3.ts +2 -3
- package/src/core/base-context.ts +9 -3
- package/src/core/core-plugin.ts +0 -12
- package/src/core/{logger.ts → event-logger.ts} +19 -3
- package/src/core/event-tracker.ts +11 -68
- package/src/core/index.ts +0 -1
- package/src/core/normalization.ts +1 -1
- package/lib/core/logger.js.map +0 -1
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { AptosAccountProcessor, defaultMoveCoder } from '@sentio/sdk/aptos';
|
|
2
|
-
import { AccountEventTracker } from '@sentio/sdk';
|
|
3
2
|
import { SouffleChefCampaign, CandyMachine } from './types/souffle.js';
|
|
4
3
|
import { token } from '../builtin/0x3.js';
|
|
5
4
|
import { aptos_account, voting } from '../builtin/0x1.js';
|
|
6
|
-
const accountTracker = AccountEventTracker.register('pull')
|
|
5
|
+
// const accountTracker = AccountEventTracker.register('pull')
|
|
7
6
|
SouffleChefCampaign.bind({ startVersion: 3212312n })
|
|
8
7
|
.onEntryPullTokenV2((call, ctx) => {
|
|
9
8
|
ctx.meter.Counter('call_num').add(1);
|
|
@@ -11,7 +10,7 @@ SouffleChefCampaign.bind({ startVersion: 3212312n })
|
|
|
11
10
|
})
|
|
12
11
|
.onEventPullTokenEvent((evt, ctx) => {
|
|
13
12
|
ctx.meter.Counter('burned').add(1);
|
|
14
|
-
|
|
13
|
+
ctx.eventLogger.emit('pull', { distinctId: ctx.transaction.sender });
|
|
15
14
|
})
|
|
16
15
|
.onEvent((event, ctx) => {
|
|
17
16
|
ctx.meter.Counter('evt_num').add(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"souffl3.js","sourceRoot":"","sources":["../../../src/aptos/tests/souffl3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"souffl3.js","sourceRoot":"","sources":["../../../src/aptos/tests/souffl3.ts"],"names":[],"mappings":"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","sourcesContent":["import { AptosAccountProcessor, defaultMoveCoder } from '@sentio/sdk/aptos'\nimport { SouffleChefCampaign, CandyMachine } from './types/souffle.js'\nimport { token } from '../builtin/0x3.js'\nimport { aptos_account, voting } from '../builtin/0x1.js'\n\n// const accountTracker = AccountEventTracker.register('pull')\n\nSouffleChefCampaign.bind({ startVersion: 3212312n })\n .onEntryPullTokenV2((call: SouffleChefCampaign.PullTokenV2Payload, ctx) => {\n ctx.meter.Counter('call_num').add(1)\n ctx.meter.Counter('pulled').add(call.arguments_decoded[3])\n })\n .onEventPullTokenEvent((evt, ctx) => {\n ctx.meter.Counter('burned').add(1)\n ctx.eventLogger.emit('pull', { distinctId: ctx.transaction.sender })\n })\n .onEvent(\n (event, ctx) => {\n ctx.meter.Counter('evt_num').add(1)\n },\n {\n type: '0x1::coin::DepositEvent',\n }\n )\n .onTransaction((txn, ctx) => {\n const events = defaultMoveCoder().filterAndDecodeEvents<token.DepositEvent>('0x3::token::DepositEvent', txn.events)\n for (const event of events) {\n // const depositEventInstance = DEFAULT_TYPE_REGISTRY.decodeEvent(event) as DepositEventInstance\n ctx.meter.Counter('deposit_token_count').add(event.data_decoded.amount)\n }\n })\n\nCandyMachine.bind().onEntryPullToken((call: CandyMachine.PullTokenPayload, ctx) => {\n ctx.meter.Counter('pulled').add(call.arguments[2])\n})\n\ntoken.bind().onEventDepositEvent((evt: token.DepositEventInstance, ctx) => {\n ctx.meter.Gauge('version').record(evt.data_decoded.id.property_version)\n ctx.meter.Counter('deposit').add(evt.data_decoded.amount, { token: evt.data_decoded.id.token_data_id.name })\n})\n\nvoting.bind().onEventCreateProposalEvent((evt, ctx) => {\n ctx.meter.Gauge('size').record(evt.data_decoded.metadata.data.length)\n})\n\nAptosAccountProcessor.bind({ address: '0x1' }).onTimeInterval((resources, ctx) => {\n ctx.meter.Counter('onTimer').add(1)\n}, 10000)\n\naptos_account.bind().onEntryCreateAccount(\n (call, ctx) => {\n ctx.meter.Counter('xx').add(1)\n },\n undefined,\n { resourceChanges: true }\n)\n"]}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { ProcessResult, RecordMetaData } from '@sentio/protos';
|
|
2
|
-
import {
|
|
2
|
+
import { EventLogger } from './event-logger.js';
|
|
3
3
|
import { Meter, Labels } from './meter.js';
|
|
4
4
|
import { BoundedEventTracker } from './event-tracker.js';
|
|
5
5
|
export declare abstract class BaseContext {
|
|
6
6
|
meter: Meter;
|
|
7
|
-
|
|
7
|
+
eventLogger: EventLogger;
|
|
8
|
+
logger: EventLogger;
|
|
9
|
+
/** @deprecated use {@link this.eventLogger} instead */
|
|
8
10
|
eventTracker: BoundedEventTracker;
|
|
9
11
|
_res: ProcessResult;
|
|
10
12
|
protected constructor();
|
package/lib/core/base-context.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EventLogger } from './event-logger.js';
|
|
2
2
|
import { Meter } from './meter.js';
|
|
3
3
|
import { BoundedEventTracker } from './event-tracker.js';
|
|
4
4
|
export class BaseContext {
|
|
5
5
|
meter;
|
|
6
|
+
eventLogger;
|
|
6
7
|
logger;
|
|
8
|
+
/** @deprecated use {@link this.eventLogger} instead */
|
|
7
9
|
eventTracker;
|
|
8
10
|
_res = {
|
|
9
11
|
counters: [],
|
|
@@ -14,7 +16,10 @@ export class BaseContext {
|
|
|
14
16
|
};
|
|
15
17
|
constructor() {
|
|
16
18
|
this.meter = new Meter(this);
|
|
17
|
-
this.
|
|
19
|
+
this.eventLogger = new EventLogger(this);
|
|
20
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
21
|
+
this.logger = this.eventLogger;
|
|
22
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
18
23
|
this.eventTracker = new BoundedEventTracker(this);
|
|
19
24
|
}
|
|
20
25
|
getProcessResult() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-context.js","sourceRoot":"","sources":["../../src/core/base-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"base-context.js","sourceRoot":"","sources":["../../src/core/base-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAU,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAExD,MAAM,OAAgB,WAAW;IAC/B,KAAK,CAAO;IACZ,WAAW,CAAa;IAExB,MAAM,CAAa;IACnB,uDAAuD;IACvD,YAAY,CAAqB;IAEjC,IAAI,GAAkB;QACpB,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;KACT,CAAA;IAED;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;QACxC,mDAAmD;QACnD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAA;QAC9B,mDAAmD;QACnD,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAA;IACnD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;CAGF","sourcesContent":["import { ProcessResult, RecordMetaData } from '@sentio/protos'\nimport { EventLogger } from './event-logger.js'\nimport { Meter, Labels } from './meter.js'\nimport { BoundedEventTracker } from './event-tracker.js'\n\nexport abstract class BaseContext {\n meter: Meter\n eventLogger: EventLogger\n\n logger: EventLogger\n /** @deprecated use {@link this.eventLogger} instead */\n eventTracker: BoundedEventTracker\n\n _res: ProcessResult = {\n counters: [],\n events: [],\n exports: [],\n gauges: [],\n logs: [],\n }\n\n protected constructor() {\n this.meter = new Meter(this)\n this.eventLogger = new EventLogger(this)\n // eslint-disable-next-line deprecation/deprecation\n this.logger = this.eventLogger\n // eslint-disable-next-line deprecation/deprecation\n this.eventTracker = new BoundedEventTracker(this)\n }\n\n getProcessResult(): ProcessResult {\n return this._res\n }\n\n abstract getMetaData(name: string, labels: Labels): RecordMetaData\n}\n"]}
|
package/lib/core/core-plugin.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Plugin, PluginManager } from '@sentio/runtime';
|
|
2
2
|
import { MetricState } from './meter.js';
|
|
3
|
-
import { EventTrackerState } from './event-tracker.js';
|
|
4
3
|
import { ExporterState } from './exporter.js';
|
|
5
4
|
export class CorePlugin extends Plugin {
|
|
6
5
|
name = 'CorePlugin';
|
|
@@ -11,16 +10,6 @@ export class CorePlugin extends Plugin {
|
|
|
11
10
|
...metric.config,
|
|
12
11
|
});
|
|
13
12
|
}
|
|
14
|
-
for (const eventTracker of EventTrackerState.INSTANCE.getValues()) {
|
|
15
|
-
config.eventTrackingConfigs.push({
|
|
16
|
-
distinctAggregationByDays: eventTracker.options.distinctByDays || [],
|
|
17
|
-
eventName: eventTracker.name,
|
|
18
|
-
retentionConfig: undefined,
|
|
19
|
-
totalByDay: eventTracker.options.totalByDay || false,
|
|
20
|
-
totalPerEntity: undefined,
|
|
21
|
-
unique: eventTracker.options.unique || false,
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
13
|
for (const exporter of ExporterState.INSTANCE.getValues()) {
|
|
25
14
|
config.exportConfigs.push({
|
|
26
15
|
name: exporter.name,
|
|
@@ -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,
|
|
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;AAE7C,MAAM,OAAO,UAAW,SAAQ,MAAM;IACpC,IAAI,GAAW,YAAY,CAAA;IAE3B,KAAK,CAAC,SAAS,CAAC,MAA6B;QAC3C,qDAAqD;QACrD,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE;YACrD,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;gBACxB,GAAG,MAAM,CAAC,MAAM;aACjB,CAAC,CAAA;SACH;QAED,KAAK,MAAM,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE;YACzD,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;gBACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC,CAAA;SACH;IACH,CAAC;CACF;AAED,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC,CAAA","sourcesContent":["import { Plugin, PluginManager } from '@sentio/runtime'\nimport { ProcessConfigResponse } from '@sentio/protos'\n\nimport { MetricState } from './meter.js'\nimport { ExporterState } from './exporter.js'\n\nexport class CorePlugin extends Plugin {\n name: string = 'CorePlugin'\n\n async configure(config: ProcessConfigResponse): Promise<void> {\n // part 0, prepare metrics and event tracking configs\n for (const metric of MetricState.INSTANCE.getValues()) {\n config.metricConfigs.push({\n ...metric.config,\n })\n }\n\n for (const exporter of ExporterState.INSTANCE.getValues()) {\n config.exportConfigs.push({\n name: exporter.name,\n channel: exporter.channel,\n })\n }\n }\n}\n\nPluginManager.INSTANCE.register(new CorePlugin())\n"]}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { BaseContext } from './base-context.js';
|
|
2
2
|
import { LogLevel } from '@sentio/protos';
|
|
3
3
|
import { NamedResultDescriptor } from './metadata.js';
|
|
4
|
+
import { Event } from './event-tracker.js';
|
|
4
5
|
export type Attributes = Record<string, any>;
|
|
5
|
-
export declare class
|
|
6
|
+
export declare class EventLogger extends NamedResultDescriptor {
|
|
6
7
|
private readonly ctx;
|
|
7
8
|
constructor(ctx: BaseContext, name?: string);
|
|
8
|
-
withName(name: string):
|
|
9
|
+
withName(name: string): EventLogger;
|
|
9
10
|
protected log(level: LogLevel, message: any, attributes?: Attributes): void;
|
|
10
11
|
info(msg: any, attributes?: Attributes): void;
|
|
11
12
|
warn(msg: any, attributes?: Attributes): void;
|
|
12
13
|
error(msg: any, attributes?: Attributes): void;
|
|
13
14
|
critical(msg: any, attributes?: Attributes): void;
|
|
15
|
+
emit(eventName: string, event: Event): void;
|
|
14
16
|
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { LogLevel } from '@sentio/protos';
|
|
2
2
|
import { NamedResultDescriptor } from './metadata.js';
|
|
3
3
|
import { normalizeAttribute } from './normalization.js';
|
|
4
|
-
export class
|
|
4
|
+
export class EventLogger extends NamedResultDescriptor {
|
|
5
5
|
ctx;
|
|
6
6
|
constructor(ctx, name = '') {
|
|
7
7
|
super(name);
|
|
8
8
|
this.ctx = ctx;
|
|
9
9
|
}
|
|
10
10
|
withName(name) {
|
|
11
|
-
return new
|
|
11
|
+
return new EventLogger(this.ctx, name);
|
|
12
12
|
}
|
|
13
13
|
log(level, message, attributes = {}) {
|
|
14
14
|
if (typeof message !== 'string' && !(message instanceof String)) {
|
|
@@ -36,5 +36,18 @@ export class Logger extends NamedResultDescriptor {
|
|
|
36
36
|
critical(msg, attributes = {}) {
|
|
37
37
|
this.log(LogLevel.CRITICAL, msg, attributes);
|
|
38
38
|
}
|
|
39
|
+
emit(eventName, event) {
|
|
40
|
+
const { distinctId, severity, message, ...payload } = event;
|
|
41
|
+
const res = {
|
|
42
|
+
metadata: this.ctx.getMetaData(eventName, {}),
|
|
43
|
+
severity: severity || LogLevel.INFO,
|
|
44
|
+
message: message || '',
|
|
45
|
+
distinctEntityId: distinctId || '',
|
|
46
|
+
attributes: payload,
|
|
47
|
+
runtimeInfo: undefined,
|
|
48
|
+
noMetric: true,
|
|
49
|
+
};
|
|
50
|
+
this.ctx._res.events.push(res);
|
|
51
|
+
}
|
|
39
52
|
}
|
|
40
|
-
//# sourceMappingURL=logger.js.map
|
|
53
|
+
//# sourceMappingURL=event-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-logger.js","sourceRoot":"","sources":["../../src/core/event-logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAKvD,MAAM,OAAO,WAAY,SAAQ,qBAAqB;IACnC,GAAG,CAAa;IAEjC,YAAY,GAAgB,EAAE,IAAI,GAAG,EAAE;QACrC,KAAK,CAAC,IAAI,CAAC,CAAA;QACX,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;IAES,GAAG,CAAC,KAAe,EAAE,OAAY,EAAE,aAAyB,EAAE;QACtE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,YAAY,MAAM,CAAC,EAAE;YAC/D,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;SAClC;QAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAA;QAE3C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB,mBAAmB;YACnB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,KAAK;YACL,OAAO;YACP,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,SAAS;SACvB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,GAAQ,EAAE,aAAyB,EAAE;QACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,GAAQ,EAAE,aAAyB,EAAE;QACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,GAAQ,EAAE,aAAyB,EAAE;QACzC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IAC3C,CAAC;IAED,QAAQ,CAAC,GAAQ,EAAE,aAAyB,EAAE;QAC5C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,CAAC,SAAiB,EAAE,KAAY;QAClC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,CAAA;QAE3D,MAAM,GAAG,GAAwB;YAC/B,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC;YAC7C,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC,IAAI;YACnC,OAAO,EAAE,OAAO,IAAI,EAAE;YACtB,gBAAgB,EAAE,UAAU,IAAI,EAAE;YAClC,UAAU,EAAE,OAAO;YACnB,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,IAAI;SACf,CAAA;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAChC,CAAC;CACF","sourcesContent":["import { BaseContext } from './base-context.js'\nimport { EventTrackingResult, LogLevel } from '@sentio/protos'\nimport { NamedResultDescriptor } from './metadata.js'\nimport { normalizeAttribute } from './normalization.js'\nimport { Event } from './event-tracker.js'\n\nexport type Attributes = Record<string, any>\n\nexport class EventLogger extends NamedResultDescriptor {\n private readonly ctx: BaseContext\n\n constructor(ctx: BaseContext, name = '') {\n super(name)\n this.ctx = ctx\n }\n\n withName(name: string) {\n return new EventLogger(this.ctx, name)\n }\n\n protected log(level: LogLevel, message: any, attributes: Attributes = {}) {\n if (typeof message !== 'string' && !(message instanceof String)) {\n message = JSON.stringify(message)\n }\n\n const norm = normalizeAttribute(attributes)\n\n this.ctx._res.logs.push({\n // name: this.name,\n metadata: this.ctx.getMetaData(this.name, {}), // GetRecordMetaData(this.ctx, this, {}),\n level,\n message,\n attributes2: norm,\n runtimeInfo: undefined,\n })\n }\n\n info(msg: any, attributes: Attributes = {}) {\n this.log(LogLevel.INFO, msg, attributes)\n }\n\n warn(msg: any, attributes: Attributes = {}) {\n this.log(LogLevel.WARNING, msg, attributes)\n }\n\n error(msg: any, attributes: Attributes = {}) {\n this.log(LogLevel.ERROR, msg, attributes)\n }\n\n critical(msg: any, attributes: Attributes = {}) {\n this.log(LogLevel.CRITICAL, msg, attributes)\n }\n\n emit(eventName: string, event: Event) {\n const { distinctId, severity, message, ...payload } = event\n\n const res: EventTrackingResult = {\n metadata: this.ctx.getMetaData(eventName, {}),\n severity: severity || LogLevel.INFO,\n message: message || '',\n distinctEntityId: distinctId || '',\n attributes: payload,\n runtimeInfo: undefined,\n noMetric: true,\n }\n this.ctx._res.events.push(res)\n }\n}\n"]}
|
|
@@ -1,29 +1,11 @@
|
|
|
1
1
|
import { BaseContext } from './base-context.js';
|
|
2
|
-
import {
|
|
3
|
-
import { MapStateStorage } from '@sentio/runtime';
|
|
2
|
+
import { LogLevel } from '@sentio/protos';
|
|
4
3
|
export interface Event {
|
|
5
|
-
distinctId
|
|
4
|
+
distinctId?: string;
|
|
5
|
+
severity?: LogLevel;
|
|
6
|
+
message?: string;
|
|
6
7
|
[key: string]: any;
|
|
7
8
|
}
|
|
8
|
-
export interface TrackerOptions {
|
|
9
|
-
totalByDay?: boolean;
|
|
10
|
-
unique?: boolean;
|
|
11
|
-
distinctByDays?: number[];
|
|
12
|
-
}
|
|
13
|
-
export declare class EventTrackerState extends MapStateStorage<EventTracker> {
|
|
14
|
-
static INSTANCE: EventTrackerState;
|
|
15
|
-
}
|
|
16
|
-
export declare class EventTracker extends NamedResultDescriptor {
|
|
17
|
-
static DEFAULT_OPTIONS: TrackerOptions;
|
|
18
|
-
static register(eventName: string, options?: TrackerOptions): EventTracker;
|
|
19
|
-
options: TrackerOptions;
|
|
20
|
-
protected constructor(eventName: string, options: TrackerOptions);
|
|
21
|
-
trackEvent(ctx: BaseContext, event: Event): void;
|
|
22
|
-
}
|
|
23
|
-
export declare class AccountEventTracker extends EventTracker {
|
|
24
|
-
static DEFAULT_OPTIONS: TrackerOptions;
|
|
25
|
-
static register(eventName?: string, options?: TrackerOptions): EventTracker;
|
|
26
|
-
}
|
|
27
9
|
export declare class BoundedEventTracker {
|
|
28
10
|
private readonly ctx;
|
|
29
11
|
constructor(ctx: BaseContext);
|
|
@@ -1,63 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { MapStateStorage } from '@sentio/runtime';
|
|
3
|
-
import { normalizeAttribute } from './normalization.js';
|
|
4
|
-
export class EventTrackerState extends MapStateStorage {
|
|
5
|
-
static INSTANCE = new EventTrackerState();
|
|
6
|
-
}
|
|
7
|
-
// Track Event with an identity associate with it
|
|
8
|
-
export class EventTracker extends NamedResultDescriptor {
|
|
9
|
-
static DEFAULT_OPTIONS = {
|
|
10
|
-
totalByDay: true,
|
|
11
|
-
unique: true,
|
|
12
|
-
};
|
|
13
|
-
static register(eventName, options) {
|
|
14
|
-
const tracker = new EventTracker(eventName, { ...EventTracker.DEFAULT_OPTIONS, ...options });
|
|
15
|
-
return EventTrackerState.INSTANCE.getOrSetValue(eventName, tracker);
|
|
16
|
-
}
|
|
17
|
-
options;
|
|
18
|
-
constructor(eventName, options) {
|
|
19
|
-
super(eventName);
|
|
20
|
-
this.options = options;
|
|
21
|
-
}
|
|
22
|
-
trackEvent(ctx, event) {
|
|
23
|
-
const { distinctId, ...payload } = event;
|
|
24
|
-
const res = {
|
|
25
|
-
metadata: ctx.getMetaData(this.name, {}),
|
|
26
|
-
distinctEntityId: distinctId,
|
|
27
|
-
attributes: normalizeAttribute(payload),
|
|
28
|
-
runtimeInfo: undefined,
|
|
29
|
-
noMetric: false,
|
|
30
|
-
};
|
|
31
|
-
ctx._res.events.push(res);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
export class AccountEventTracker extends EventTracker {
|
|
35
|
-
static DEFAULT_OPTIONS = {
|
|
36
|
-
totalByDay: true,
|
|
37
|
-
unique: true,
|
|
38
|
-
distinctByDays: [1, 7, 30],
|
|
39
|
-
};
|
|
40
|
-
static register(eventName, options) {
|
|
41
|
-
if (eventName) {
|
|
42
|
-
eventName = ['user', eventName].join('_');
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
eventName = 'user';
|
|
46
|
-
}
|
|
47
|
-
const tracker = new AccountEventTracker(eventName, { ...AccountEventTracker.DEFAULT_OPTIONS, ...options });
|
|
48
|
-
return EventTrackerState.INSTANCE.getOrSetValue(eventName, tracker);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
1
|
+
import { LogLevel } from '@sentio/protos';
|
|
51
2
|
export class BoundedEventTracker {
|
|
52
3
|
ctx;
|
|
53
4
|
constructor(ctx) {
|
|
54
5
|
this.ctx = ctx;
|
|
55
6
|
}
|
|
56
7
|
track(eventName, event) {
|
|
57
|
-
const { distinctId, ...payload } = event;
|
|
8
|
+
const { distinctId, severity, message, ...payload } = event;
|
|
58
9
|
const res = {
|
|
59
10
|
metadata: this.ctx.getMetaData(eventName, {}),
|
|
60
|
-
|
|
11
|
+
severity: severity || LogLevel.INFO,
|
|
12
|
+
message: message || '',
|
|
13
|
+
distinctEntityId: distinctId || '',
|
|
61
14
|
attributes: payload,
|
|
62
15
|
runtimeInfo: undefined,
|
|
63
16
|
noMetric: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-tracker.js","sourceRoot":"","sources":["../../src/core/event-tracker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-tracker.js","sourceRoot":"","sources":["../../src/core/event-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAa9D,MAAM,OAAO,mBAAmB;IACb,GAAG,CAAa;IAEjC,YAAY,GAAgB;QAC1B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,SAAiB,EAAE,KAAY;QACnC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,CAAA;QAE3D,MAAM,GAAG,GAAwB;YAC/B,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC;YAC7C,QAAQ,EAAE,QAAQ,IAAI,QAAQ,CAAC,IAAI;YACnC,OAAO,EAAE,OAAO,IAAI,EAAE;YACtB,gBAAgB,EAAE,UAAU,IAAI,EAAE;YAClC,UAAU,EAAE,OAAO;YACnB,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,IAAI;SACf,CAAA;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAChC,CAAC;CACF","sourcesContent":["import { BaseContext } from './base-context.js'\nimport { EventTrackingResult, LogLevel } from '@sentio/protos'\n\nexport interface Event {\n // The unique identifier of main identity associate with an event\n // .e.g user id / token address / account address / contract address id\n //\n distinctId?: string\n severity?: LogLevel\n message?: string\n\n [key: string]: any\n}\n\nexport class BoundedEventTracker {\n private readonly ctx: BaseContext\n\n constructor(ctx: BaseContext) {\n this.ctx = ctx\n }\n\n track(eventName: string, event: Event) {\n const { distinctId, severity, message, ...payload } = event\n\n const res: EventTrackingResult = {\n metadata: this.ctx.getMetaData(eventName, {}),\n severity: severity || LogLevel.INFO,\n message: message || '',\n distinctEntityId: distinctId || '',\n attributes: payload,\n runtimeInfo: undefined,\n noMetric: true,\n }\n this.ctx._res.events.push(res)\n }\n}\n"]}
|
package/lib/core/index.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ export { BigDecimal, scaleDown } from './big-decimal.js';
|
|
|
2
2
|
export { BaseContext } from './base-context.js';
|
|
3
3
|
export { normalizeLabels } from './normalization.js';
|
|
4
4
|
export { CounterBinding, Meter, type Labels, GaugeBinding, Counter, Gauge, MetricOptions } from './meter.js';
|
|
5
|
-
export { EventTracker, AccountEventTracker } from './event-tracker.js';
|
|
6
5
|
export { Exporter } from './exporter.js';
|
|
7
6
|
export { type Numberish, toBigInteger, toMetricValue } from './numberish.js';
|
|
8
7
|
export { SuiBaseProcessor, SuiBindOptions } from './sui-processor.js';
|
package/lib/core/index.js
CHANGED
|
@@ -2,7 +2,6 @@ export { BigDecimal, scaleDown } from './big-decimal.js';
|
|
|
2
2
|
export { BaseContext } from './base-context.js';
|
|
3
3
|
export { normalizeLabels } from './normalization.js';
|
|
4
4
|
export { CounterBinding, Meter, GaugeBinding, Counter, Gauge, MetricOptions } from './meter.js';
|
|
5
|
-
export { EventTracker, AccountEventTracker } from './event-tracker.js';
|
|
6
5
|
export { Exporter } from './exporter.js';
|
|
7
6
|
export { toBigInteger, toMetricValue } from './numberish.js';
|
|
8
7
|
export { SuiBaseProcessor, SuiBindOptions } from './sui-processor.js';
|
package/lib/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,KAAK,EAAe,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC5G,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,KAAK,EAAe,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC5G,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAkB,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE5E,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAErE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA","sourcesContent":["export { BigDecimal, scaleDown } from './big-decimal.js'\nexport { BaseContext } from './base-context.js'\nexport { normalizeLabels } from './normalization.js'\nexport { CounterBinding, Meter, type Labels, GaugeBinding, Counter, Gauge, MetricOptions } from './meter.js'\nexport { Exporter } from './exporter.js'\nexport { type Numberish, toBigInteger, toMetricValue } from './numberish.js'\n\nexport { SuiBaseProcessor, SuiBindOptions } from './sui-processor.js'\n\nexport { SuiPlugin } from './sui-plugin.js'\nexport { CorePlugin } from './core-plugin.js'\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalization.js","sourceRoot":"","sources":["../../src/core/normalization.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,IAAI,KAAK,QAAQ,EAAE;QACrB,OAAO,SAAS,CAAA;KACjB;IACD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,UAAU,GAAW,EAAE,CAAA;IAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;QACxB,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;KAC5D;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,GAAQ,EAAE,MAAc;IAC/C,IAAI,GAAQ,CAAA;IAEZ,MAAM,UAAU,GAAG,OAAO,GAAG,CAAA;IAC7B,QAAQ,UAAU,EAAE;QAClB,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAC7B,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;QACpB,KAAK,QAAQ;YACX,OAAO,GAAG,CAAA;QACZ,KAAK,UAAU;YACb,OAAO,IAAI,CAAA;QACb,KAAK,QAAQ;YACX,OAAO,IAAI,CAAA;KACd;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,GAAG,GAAG,EAAE,CAAA;QACR,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;YACrB,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;SACvC;KACF;SAAM,IAAI,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE;QAC9B,IAAI,GAAG,YAAY,IAAI,EAAE;YACvB,OAAO,GAAG,CAAC,WAAW,EAAE,CAAA;SACzB;QACD,IAAI,GAAG,YAAY,UAAU,EAAE;YAC7B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;SACtB;QACD,GAAG,GAAG,EAAE,CAAA;QACR,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC9C,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAChD,IAAI,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"normalization.js","sourceRoot":"","sources":["../../src/core/normalization.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,IAAI,KAAK,QAAQ,EAAE;QACrB,OAAO,SAAS,CAAA;KACjB;IACD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,UAAU,GAAW,EAAE,CAAA;IAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;QACxB,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;KAC5D;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,GAAQ,EAAE,MAAc;IAC/C,IAAI,GAAQ,CAAA;IAEZ,MAAM,UAAU,GAAG,OAAO,GAAG,CAAA;IAC7B,QAAQ,UAAU,EAAE;QAClB,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QAC7B,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;QACpB,KAAK,QAAQ;YACX,OAAO,GAAG,CAAA;QACZ,KAAK,UAAU;YACb,OAAO,IAAI,CAAA;QACb,KAAK,QAAQ;YACX,OAAO,IAAI,CAAA;KACd;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,GAAG,GAAG,EAAE,CAAA;QACR,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;YACrB,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;SACvC;KACF;SAAM,IAAI,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE;QAC9B,IAAI,GAAG,YAAY,IAAI,EAAE;YACvB,OAAO,GAAG,CAAC,WAAW,EAAE,CAAA;SACzB;QACD,IAAI,GAAG,YAAY,UAAU,EAAE;YAC7B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAA;SACtB;QACD,GAAG,GAAG,EAAE,CAAA;QACR,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC9C,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAChD,IAAI,SAAS,IAAI,IAAI,EAAE;gBACrB,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;aACrB;SACF;KACF;SAAM;QACL,GAAG,GAAG,GAAG,CAAA;KACV;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAA2B;IAC5D,OAAO,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AACtC,CAAC","sourcesContent":["import { Labels } from './meter.js'\nimport { BigDecimal } from './big-decimal.js'\n\nfunction normalizeName(name: string): string {\n return name.slice(0, 100).replace(/[^_\\-a-zA-Z0-9]/g, '_')\n}\n\nexport function normalizeKey(name: string): string {\n if (name === 'labels') {\n return 'labels_'\n }\n return normalizeName(name)\n}\n\nfunction normalizeValue(name: string): string {\n return name.slice(0, 100)\n}\n\nexport function normalizeLabels(labels: Labels): Labels {\n const normLabels: Labels = {}\n for (const key in labels) {\n normLabels[normalizeKey(key)] = normalizeValue(labels[key])\n }\n return normLabels\n}\n\nfunction normalizeObject(obj: any, length: number): any {\n let ret: any\n\n const typeString = typeof obj\n switch (typeString) {\n case 'string':\n return obj.slice(0, length)\n case 'bigint':\n return Number(obj)\n case 'number':\n return obj\n case 'function':\n return null\n case 'symbol':\n return null\n }\n if (Array.isArray(obj)) {\n ret = []\n for (const val of obj) {\n ret.push(normalizeObject(val, length))\n }\n } else if (obj === Object(obj)) {\n if (obj instanceof Date) {\n return obj.toISOString()\n }\n if (obj instanceof BigDecimal) {\n return obj.toNumber()\n }\n ret = {}\n for (const [key, value] of Object.entries(obj)) {\n const normValue = normalizeObject(value, length)\n if (normValue != null) {\n ret[key] = normValue\n }\n }\n } else {\n ret = obj\n }\n return ret\n}\n\nexport function normalizeAttribute(record: Record<string, any>): any {\n return normalizeObject(record, 1000)\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentio/sdk",
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "2.1.
|
|
4
|
+
"version": "2.1.3-rc.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"compile": "tsc -p . && cp src/utils/*.csv lib/utils && cp src/tsup.config.ts lib",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"@project-serum/anchor": "^0.26.0",
|
|
19
19
|
"@sentio/bigdecimal": "^9.1.1-patch.3",
|
|
20
20
|
"@sentio/ethers-v6": "^1.0.25",
|
|
21
|
-
"@sentio/protos": "^2.1.
|
|
22
|
-
"@sentio/runtime": "^2.1.
|
|
23
|
-
"@sentio/sdk": "^2.1.
|
|
21
|
+
"@sentio/protos": "^2.1.3-rc.1",
|
|
22
|
+
"@sentio/runtime": "^2.1.3-rc.1",
|
|
23
|
+
"@sentio/sdk": "^2.1.3-rc.1",
|
|
24
24
|
"@solana/web3.js": "^1.47.3",
|
|
25
25
|
"@types/prettier": "^2.7.2",
|
|
26
26
|
"aptos-sdk": "npm:@sentio/aptos@^1.6.0",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"typedoc": {
|
|
72
72
|
"entryPoint": "./src/index.ts"
|
|
73
73
|
},
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "7abc8209ebf49b692f138aa1377f3da15e736be7"
|
|
75
75
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { AptosAccountProcessor, defaultMoveCoder } from '@sentio/sdk/aptos'
|
|
2
|
-
import { AccountEventTracker } from '@sentio/sdk'
|
|
3
2
|
import { SouffleChefCampaign, CandyMachine } from './types/souffle.js'
|
|
4
3
|
import { token } from '../builtin/0x3.js'
|
|
5
4
|
import { aptos_account, voting } from '../builtin/0x1.js'
|
|
6
5
|
|
|
7
|
-
const accountTracker = AccountEventTracker.register('pull')
|
|
6
|
+
// const accountTracker = AccountEventTracker.register('pull')
|
|
8
7
|
|
|
9
8
|
SouffleChefCampaign.bind({ startVersion: 3212312n })
|
|
10
9
|
.onEntryPullTokenV2((call: SouffleChefCampaign.PullTokenV2Payload, ctx) => {
|
|
@@ -13,7 +12,7 @@ SouffleChefCampaign.bind({ startVersion: 3212312n })
|
|
|
13
12
|
})
|
|
14
13
|
.onEventPullTokenEvent((evt, ctx) => {
|
|
15
14
|
ctx.meter.Counter('burned').add(1)
|
|
16
|
-
|
|
15
|
+
ctx.eventLogger.emit('pull', { distinctId: ctx.transaction.sender })
|
|
17
16
|
})
|
|
18
17
|
.onEvent(
|
|
19
18
|
(event, ctx) => {
|
package/src/core/base-context.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { ProcessResult, RecordMetaData } from '@sentio/protos'
|
|
2
|
-
import {
|
|
2
|
+
import { EventLogger } from './event-logger.js'
|
|
3
3
|
import { Meter, Labels } from './meter.js'
|
|
4
4
|
import { BoundedEventTracker } from './event-tracker.js'
|
|
5
5
|
|
|
6
6
|
export abstract class BaseContext {
|
|
7
7
|
meter: Meter
|
|
8
|
-
|
|
8
|
+
eventLogger: EventLogger
|
|
9
|
+
|
|
10
|
+
logger: EventLogger
|
|
11
|
+
/** @deprecated use {@link this.eventLogger} instead */
|
|
9
12
|
eventTracker: BoundedEventTracker
|
|
10
13
|
|
|
11
14
|
_res: ProcessResult = {
|
|
@@ -18,7 +21,10 @@ export abstract class BaseContext {
|
|
|
18
21
|
|
|
19
22
|
protected constructor() {
|
|
20
23
|
this.meter = new Meter(this)
|
|
21
|
-
this.
|
|
24
|
+
this.eventLogger = new EventLogger(this)
|
|
25
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
26
|
+
this.logger = this.eventLogger
|
|
27
|
+
// eslint-disable-next-line deprecation/deprecation
|
|
22
28
|
this.eventTracker = new BoundedEventTracker(this)
|
|
23
29
|
}
|
|
24
30
|
|
package/src/core/core-plugin.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { Plugin, PluginManager } from '@sentio/runtime'
|
|
|
2
2
|
import { ProcessConfigResponse } from '@sentio/protos'
|
|
3
3
|
|
|
4
4
|
import { MetricState } from './meter.js'
|
|
5
|
-
import { EventTrackerState } from './event-tracker.js'
|
|
6
5
|
import { ExporterState } from './exporter.js'
|
|
7
6
|
|
|
8
7
|
export class CorePlugin extends Plugin {
|
|
@@ -16,17 +15,6 @@ export class CorePlugin extends Plugin {
|
|
|
16
15
|
})
|
|
17
16
|
}
|
|
18
17
|
|
|
19
|
-
for (const eventTracker of EventTrackerState.INSTANCE.getValues()) {
|
|
20
|
-
config.eventTrackingConfigs.push({
|
|
21
|
-
distinctAggregationByDays: eventTracker.options.distinctByDays || [],
|
|
22
|
-
eventName: eventTracker.name,
|
|
23
|
-
retentionConfig: undefined,
|
|
24
|
-
totalByDay: eventTracker.options.totalByDay || false,
|
|
25
|
-
totalPerEntity: undefined,
|
|
26
|
-
unique: eventTracker.options.unique || false,
|
|
27
|
-
})
|
|
28
|
-
}
|
|
29
|
-
|
|
30
18
|
for (const exporter of ExporterState.INSTANCE.getValues()) {
|
|
31
19
|
config.exportConfigs.push({
|
|
32
20
|
name: exporter.name,
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { BaseContext } from './base-context.js'
|
|
2
|
-
import { LogLevel } from '@sentio/protos'
|
|
2
|
+
import { EventTrackingResult, LogLevel } from '@sentio/protos'
|
|
3
3
|
import { NamedResultDescriptor } from './metadata.js'
|
|
4
4
|
import { normalizeAttribute } from './normalization.js'
|
|
5
|
+
import { Event } from './event-tracker.js'
|
|
5
6
|
|
|
6
7
|
export type Attributes = Record<string, any>
|
|
7
8
|
|
|
8
|
-
export class
|
|
9
|
+
export class EventLogger extends NamedResultDescriptor {
|
|
9
10
|
private readonly ctx: BaseContext
|
|
10
11
|
|
|
11
12
|
constructor(ctx: BaseContext, name = '') {
|
|
@@ -14,7 +15,7 @@ export class Logger extends NamedResultDescriptor {
|
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
withName(name: string) {
|
|
17
|
-
return new
|
|
18
|
+
return new EventLogger(this.ctx, name)
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
protected log(level: LogLevel, message: any, attributes: Attributes = {}) {
|
|
@@ -49,4 +50,19 @@ export class Logger extends NamedResultDescriptor {
|
|
|
49
50
|
critical(msg: any, attributes: Attributes = {}) {
|
|
50
51
|
this.log(LogLevel.CRITICAL, msg, attributes)
|
|
51
52
|
}
|
|
53
|
+
|
|
54
|
+
emit(eventName: string, event: Event) {
|
|
55
|
+
const { distinctId, severity, message, ...payload } = event
|
|
56
|
+
|
|
57
|
+
const res: EventTrackingResult = {
|
|
58
|
+
metadata: this.ctx.getMetaData(eventName, {}),
|
|
59
|
+
severity: severity || LogLevel.INFO,
|
|
60
|
+
message: message || '',
|
|
61
|
+
distinctEntityId: distinctId || '',
|
|
62
|
+
attributes: payload,
|
|
63
|
+
runtimeInfo: undefined,
|
|
64
|
+
noMetric: true,
|
|
65
|
+
}
|
|
66
|
+
this.ctx._res.events.push(res)
|
|
67
|
+
}
|
|
52
68
|
}
|
|
@@ -1,75 +1,15 @@
|
|
|
1
1
|
import { BaseContext } from './base-context.js'
|
|
2
|
-
import { EventTrackingResult } from '@sentio/protos'
|
|
3
|
-
import { NamedResultDescriptor } from './metadata.js'
|
|
4
|
-
import { MapStateStorage } from '@sentio/runtime'
|
|
5
|
-
import { normalizeAttribute } from './normalization.js'
|
|
2
|
+
import { EventTrackingResult, LogLevel } from '@sentio/protos'
|
|
6
3
|
|
|
7
4
|
export interface Event {
|
|
8
5
|
// The unique identifier of main identity associate with an event
|
|
9
|
-
// .e.g user id /
|
|
6
|
+
// .e.g user id / token address / account address / contract address id
|
|
10
7
|
//
|
|
11
|
-
distinctId
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export interface TrackerOptions {
|
|
16
|
-
totalByDay?: boolean
|
|
17
|
-
unique?: boolean
|
|
18
|
-
distinctByDays?: number[]
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export class EventTrackerState extends MapStateStorage<EventTracker> {
|
|
22
|
-
static INSTANCE = new EventTrackerState()
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// Track Event with an identity associate with it
|
|
26
|
-
export class EventTracker extends NamedResultDescriptor {
|
|
27
|
-
static DEFAULT_OPTIONS: TrackerOptions = {
|
|
28
|
-
totalByDay: true,
|
|
29
|
-
unique: true,
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
static register(eventName: string, options?: TrackerOptions) {
|
|
33
|
-
const tracker = new EventTracker(eventName, { ...EventTracker.DEFAULT_OPTIONS, ...options })
|
|
34
|
-
return EventTrackerState.INSTANCE.getOrSetValue(eventName, tracker)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
options: TrackerOptions
|
|
38
|
-
protected constructor(eventName: string, options: TrackerOptions) {
|
|
39
|
-
super(eventName)
|
|
40
|
-
this.options = options
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
trackEvent(ctx: BaseContext, event: Event) {
|
|
44
|
-
const { distinctId, ...payload } = event
|
|
8
|
+
distinctId?: string
|
|
9
|
+
severity?: LogLevel
|
|
10
|
+
message?: string
|
|
45
11
|
|
|
46
|
-
|
|
47
|
-
metadata: ctx.getMetaData(this.name, {}),
|
|
48
|
-
distinctEntityId: distinctId,
|
|
49
|
-
attributes: normalizeAttribute(payload),
|
|
50
|
-
runtimeInfo: undefined,
|
|
51
|
-
noMetric: false,
|
|
52
|
-
}
|
|
53
|
-
ctx._res.events.push(res)
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export class AccountEventTracker extends EventTracker {
|
|
58
|
-
static DEFAULT_OPTIONS: TrackerOptions = {
|
|
59
|
-
totalByDay: true,
|
|
60
|
-
unique: true,
|
|
61
|
-
distinctByDays: [1, 7, 30],
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
static register(eventName?: string, options?: TrackerOptions) {
|
|
65
|
-
if (eventName) {
|
|
66
|
-
eventName = ['user', eventName].join('_')
|
|
67
|
-
} else {
|
|
68
|
-
eventName = 'user'
|
|
69
|
-
}
|
|
70
|
-
const tracker = new AccountEventTracker(eventName, { ...AccountEventTracker.DEFAULT_OPTIONS, ...options })
|
|
71
|
-
return EventTrackerState.INSTANCE.getOrSetValue(eventName, tracker)
|
|
72
|
-
}
|
|
12
|
+
[key: string]: any
|
|
73
13
|
}
|
|
74
14
|
|
|
75
15
|
export class BoundedEventTracker {
|
|
@@ -80,10 +20,13 @@ export class BoundedEventTracker {
|
|
|
80
20
|
}
|
|
81
21
|
|
|
82
22
|
track(eventName: string, event: Event) {
|
|
83
|
-
const { distinctId, ...payload } = event
|
|
23
|
+
const { distinctId, severity, message, ...payload } = event
|
|
24
|
+
|
|
84
25
|
const res: EventTrackingResult = {
|
|
85
26
|
metadata: this.ctx.getMetaData(eventName, {}),
|
|
86
|
-
|
|
27
|
+
severity: severity || LogLevel.INFO,
|
|
28
|
+
message: message || '',
|
|
29
|
+
distinctEntityId: distinctId || '',
|
|
87
30
|
attributes: payload,
|
|
88
31
|
runtimeInfo: undefined,
|
|
89
32
|
noMetric: true,
|
package/src/core/index.ts
CHANGED
|
@@ -2,7 +2,6 @@ export { BigDecimal, scaleDown } from './big-decimal.js'
|
|
|
2
2
|
export { BaseContext } from './base-context.js'
|
|
3
3
|
export { normalizeLabels } from './normalization.js'
|
|
4
4
|
export { CounterBinding, Meter, type Labels, GaugeBinding, Counter, Gauge, MetricOptions } from './meter.js'
|
|
5
|
-
export { EventTracker, AccountEventTracker } from './event-tracker.js'
|
|
6
5
|
export { Exporter } from './exporter.js'
|
|
7
6
|
export { type Numberish, toBigInteger, toMetricValue } from './numberish.js'
|
|
8
7
|
|
package/lib/core/logger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAIvD,MAAM,OAAO,MAAO,SAAQ,qBAAqB;IAC9B,GAAG,CAAa;IAEjC,YAAY,GAAgB,EAAE,IAAI,GAAG,EAAE;QACrC,KAAK,CAAC,IAAI,CAAC,CAAA;QACX,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC;IAES,GAAG,CAAC,KAAe,EAAE,OAAY,EAAE,aAAyB,EAAE;QACtE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,YAAY,MAAM,CAAC,EAAE;YAC/D,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;SAClC;QAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAA;QAE3C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB,mBAAmB;YACnB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,KAAK;YACL,OAAO;YACP,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,SAAS;SACvB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAC,GAAQ,EAAE,aAAyB,EAAE;QACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,GAAQ,EAAE,aAAyB,EAAE;QACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,GAAQ,EAAE,aAAyB,EAAE;QACzC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IAC3C,CAAC;IAED,QAAQ,CAAC,GAAQ,EAAE,aAAyB,EAAE;QAC5C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IAC9C,CAAC;CACF","sourcesContent":["import { BaseContext } from './base-context.js'\nimport { LogLevel } from '@sentio/protos'\nimport { NamedResultDescriptor } from './metadata.js'\nimport { normalizeAttribute } from './normalization.js'\n\nexport type Attributes = Record<string, any>\n\nexport class Logger extends NamedResultDescriptor {\n private readonly ctx: BaseContext\n\n constructor(ctx: BaseContext, name = '') {\n super(name)\n this.ctx = ctx\n }\n\n withName(name: string) {\n return new Logger(this.ctx, name)\n }\n\n protected log(level: LogLevel, message: any, attributes: Attributes = {}) {\n if (typeof message !== 'string' && !(message instanceof String)) {\n message = JSON.stringify(message)\n }\n\n const norm = normalizeAttribute(attributes)\n\n this.ctx._res.logs.push({\n // name: this.name,\n metadata: this.ctx.getMetaData(this.name, {}), // GetRecordMetaData(this.ctx, this, {}),\n level,\n message,\n attributes2: norm,\n runtimeInfo: undefined,\n })\n }\n\n info(msg: any, attributes: Attributes = {}) {\n this.log(LogLevel.INFO, msg, attributes)\n }\n\n warn(msg: any, attributes: Attributes = {}) {\n this.log(LogLevel.WARNING, msg, attributes)\n }\n\n error(msg: any, attributes: Attributes = {}) {\n this.log(LogLevel.ERROR, msg, attributes)\n }\n\n critical(msg: any, attributes: Attributes = {}) {\n this.log(LogLevel.CRITICAL, msg, attributes)\n }\n}\n"]}
|