@xyo-network/sentinel-abstract 5.3.20 → 5.3.24

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/sentinel-abstract",
3
- "version": "5.3.20",
3
+ "version": "5.3.24",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -30,35 +30,53 @@
30
30
  "types": "dist/neutral/index.d.ts",
31
31
  "files": [
32
32
  "dist",
33
- "src",
34
33
  "!**/*.bench.*",
35
34
  "!**/*.spec.*",
36
- "!**/*.test.*"
35
+ "!**/*.test.*",
36
+ "README.md"
37
37
  ],
38
38
  "dependencies": {
39
- "@xyo-network/account-model": "~5.3.20",
40
- "@xyo-network/boundwitness-builder": "~5.3.20",
41
- "@xyo-network/boundwitness-model": "~5.3.20",
42
- "@xyo-network/boundwitness-wrapper": "~5.3.20",
43
- "@xyo-network/module-abstract": "~5.3.20",
44
- "@xyo-network/module-model": "~5.3.20",
45
- "@xyo-network/payload-builder": "~5.3.20",
46
- "@xyo-network/payload-model": "~5.3.20",
47
- "@xyo-network/sentinel-model": "~5.3.20"
39
+ "@xyo-network/account-model": "~5.3.24",
40
+ "@xyo-network/boundwitness-builder": "~5.3.24",
41
+ "@xyo-network/module-abstract": "~5.3.24",
42
+ "@xyo-network/boundwitness-model": "~5.3.24",
43
+ "@xyo-network/module-model": "~5.3.24",
44
+ "@xyo-network/payload-model": "~5.3.24",
45
+ "@xyo-network/sentinel-model": "~5.3.24",
46
+ "@xyo-network/payload-builder": "~5.3.24",
47
+ "@xyo-network/boundwitness-wrapper": "~5.3.24"
48
48
  },
49
49
  "devDependencies": {
50
- "@xylabs/sdk-js": "^5.0.90",
51
- "@xylabs/ts-scripts-common": "~7.5.6",
52
- "@xylabs/ts-scripts-yarn3": "~7.5.6",
53
- "@xylabs/tsconfig": "~7.5.6",
50
+ "@opentelemetry/api": "^1.9.1",
51
+ "@types/node": "^25.5.0",
52
+ "@xylabs/sdk-js": "^5.0.93",
53
+ "@xylabs/ts-scripts-common": "~7.6.16",
54
+ "@xylabs/ts-scripts-pnpm": "~7.6.16",
55
+ "@xylabs/tsconfig": "~7.6.16",
56
+ "acorn": "^8.16.0",
57
+ "axios": "^1.14.0",
58
+ "esbuild": "^0.28.0",
59
+ "ethers": "^6.16.0",
60
+ "tslib": "^2.8.1",
54
61
  "typescript": "~5.9.3",
55
- "zod": "^4.3.6"
62
+ "zod": "^4.3.6",
63
+ "@xyo-network/boundwitness-builder": "~5.3.24",
64
+ "@xyo-network/boundwitness-wrapper": "~5.3.24",
65
+ "@xyo-network/account-model": "~5.3.24",
66
+ "@xyo-network/boundwitness-model": "~5.3.24",
67
+ "@xyo-network/module-abstract": "~5.3.24",
68
+ "@xyo-network/payload-model": "~5.3.24",
69
+ "@xyo-network/module-model": "~5.3.24",
70
+ "@xyo-network/payload-builder": "~5.3.24",
71
+ "@xyo-network/sentinel-model": "~5.3.24"
56
72
  },
57
73
  "peerDependencies": {
58
74
  "@xylabs/sdk-js": "^5",
75
+ "ethers": "^6",
76
+ "tslib": "^2.8.1",
59
77
  "zod": "^4"
60
78
  },
61
79
  "publishConfig": {
62
80
  "access": "public"
63
81
  }
64
- }
82
+ }
@@ -1,182 +0,0 @@
1
- import {
2
- assertEx, forget, globallyUnique,
3
- } from '@xylabs/sdk-js'
4
- import type { AccountInstance } from '@xyo-network/account-model'
5
- import { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'
6
- import type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'
7
- import { isBoundWitness } from '@xyo-network/boundwitness-model'
8
- import { QueryBoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'
9
- import { AbstractModuleInstance } from '@xyo-network/module-abstract'
10
- import type {
11
- ModuleConfig, ModuleQueryHandlerResult, ModuleQueryResult,
12
- } from '@xyo-network/module-model'
13
- import { PayloadBuilder } from '@xyo-network/payload-builder'
14
- import type { Payload, Schema } from '@xyo-network/payload-model'
15
- import type {
16
- AttachableSentinelInstance,
17
- CustomSentinelInstance,
18
- ResolvedTask,
19
- SentinelInstance,
20
- SentinelJob,
21
- SentinelModuleEventData,
22
- SentinelParams,
23
- SentinelQueries,
24
- SentinelReportQuery,
25
- } from '@xyo-network/sentinel-model'
26
- import {
27
- SentinelConfigSchema,
28
- SentinelReportQuerySchema,
29
- } from '@xyo-network/sentinel-model'
30
-
31
- export abstract class AbstractSentinel<
32
- TParams extends SentinelParams = SentinelParams,
33
- TEventData extends SentinelModuleEventData<SentinelInstance<TParams>> = SentinelModuleEventData<SentinelInstance<TParams>>,
34
- >
35
- extends AbstractModuleInstance<TParams, TEventData>
36
- implements CustomSentinelInstance<TParams, TEventData>, AttachableSentinelInstance<TParams, TEventData> {
37
- static override readonly configSchemas: Schema[] = [...super.configSchemas, SentinelConfigSchema]
38
- static override readonly defaultConfigSchema: Schema = SentinelConfigSchema
39
- static override readonly uniqueName = globallyUnique('AbstractSentinel', AbstractSentinel, 'xyo')
40
- history: BoundWitness[] = []
41
- private _jobPromise?: Promise<SentinelJob>
42
-
43
- get jobPromise() {
44
- this._jobPromise = this._jobPromise ?? this.generateJob()
45
- return this._jobPromise
46
- }
47
-
48
- override get queries(): Schema[] {
49
- return [SentinelReportQuerySchema, ...super.queries]
50
- }
51
-
52
- get synchronous(): boolean {
53
- return this.config.synchronous ?? true
54
- }
55
-
56
- get throwErrors(): boolean {
57
- return this.config.throwErrors ?? true
58
- }
59
-
60
- async report(inPayloads?: Payload[]): Promise<Payload[]> {
61
- this._noOverride('report')
62
- this.isSupportedQuery(SentinelReportQuerySchema, 'report')
63
- return await this.spanAsync('report', async () => {
64
- const reportPromise = (async () => {
65
- if (this.reentrancy?.scope === 'global' && this.reentrancy?.action === 'skip' && this.globalReentrancyMutex?.isLocked()) {
66
- console.warn(`Skipping report for ${this.id} due to global reentrancy lock`)
67
- return []
68
- }
69
- try {
70
- await this.globalReentrancyMutex?.acquire()
71
- await this.emit('reportStart', { inPayloads, mod: this })
72
- const payloads = await this.reportHandler(inPayloads)
73
-
74
- // create boundwitness
75
- const result = (await new BoundWitnessBuilder().payloads(payloads).signer(this.account).build()).flat()
76
-
77
- if (this.config.archiving) {
78
- forget(this.storeToArchivists(result), { name: `AbstractSentinel.report.storeArchivist [${this.id}]` })
79
- }
80
-
81
- await this.emitReportEnd(inPayloads, result)
82
- return result
83
- } finally {
84
- this.globalReentrancyMutex?.release()
85
- }
86
- }
87
- )()
88
- if (this.synchronous) {
89
- return await reportPromise
90
- } else {
91
- forget(reportPromise, { name: `AbstractSentinel.report [${this.id}]` })
92
- return []
93
- }
94
- }, { timeBudgetLimit: 200 })
95
- }
96
-
97
- async reportQuery(payloads?: Payload[], account?: AccountInstance): Promise<ModuleQueryResult> {
98
- this._noOverride('reportQuery')
99
- const queryPayload: SentinelReportQuery = { schema: SentinelReportQuerySchema }
100
- return await this.sendQueryRaw(queryPayload, payloads, account)
101
- }
102
-
103
- protected async emitReportEnd(inPayloads?: Payload[], payloads?: Payload[]) {
104
- const boundwitnesses = payloads?.filter(isBoundWitness) ?? []
105
- const outPayloads = payloads?.filter(payload => !isBoundWitness(payload)) ?? []
106
- const boundwitness = boundwitnesses.find(bw => bw.addresses.includes(this.address))
107
- await this.emit('reportEnd', {
108
- boundwitness, inPayloads, mod: this, outPayloads,
109
- })
110
- }
111
-
112
- protected async generateJob() {
113
- const job: SentinelJob = { tasks: [] }
114
- let tasks: ResolvedTask[] = await Promise.all(
115
- (this.config.tasks ?? []).map(async task => ({
116
- input: task.input ?? false,
117
- mod: assertEx(await this.resolve(task.mod), () => `Unable to resolve task module [${task.mod}]`),
118
- })),
119
- )
120
- while (tasks.length > 0) {
121
- const previousTasks = job.tasks.at(-1) ?? []
122
- const newListCandidates
123
- // add all tasks that either require no previous input or have the previous input module already added
124
- = tasks.filter((task) => {
125
- const input = task.input
126
- if (input === undefined) {
127
- return true
128
- }
129
- if (typeof input === 'boolean') {
130
- return true
131
- }
132
- if (typeof input === 'string') {
133
- return previousTasks.some(prevTask => prevTask.mod.address === input || prevTask.mod.modName === input)
134
- }
135
- if (Array.isArray(input)) {
136
- return previousTasks.some(
137
- prevTask => input.includes(prevTask.mod.address) || input.includes(prevTask.mod.modName ?? prevTask.mod.address),
138
- )
139
- }
140
- return false
141
- })
142
- // remove any tasks that have inputs that are in the current list or the remaining tasks
143
- const newList = newListCandidates.filter((taskCandidate) => {
144
- const input = taskCandidate.input
145
- return !(
146
- Array.isArray(input)
147
- && tasks.some(
148
- remainingTask => input.includes(remainingTask.mod.address) || input.includes(remainingTask.mod.modName ?? remainingTask.mod.address),
149
- )
150
- )
151
- })
152
- assertEx(newList.length > 0, () => `Unable to generateJob [${tasks.length}]`)
153
- job.tasks.push(newList)
154
- // remove the tasks we just added
155
- tasks = tasks.filter(task => !newList.includes(task))
156
- }
157
- return job
158
- }
159
-
160
- protected override async queryHandler<T extends QueryBoundWitness = QueryBoundWitness, TConfig extends ModuleConfig = ModuleConfig>(
161
- query: T,
162
- payloads?: Payload[],
163
- queryConfig?: TConfig,
164
- ): Promise<ModuleQueryHandlerResult> {
165
- const wrapper = QueryBoundWitnessWrapper.parseQuery<SentinelQueries>(query, payloads)
166
- const queryPayload = await wrapper.getQuery()
167
- assertEx(await this.queryable(query, payloads, queryConfig))
168
- const resultPayloads: Payload[] = []
169
- switch (queryPayload.schema) {
170
- case SentinelReportQuerySchema: {
171
- resultPayloads.push(...(await this.report(payloads)))
172
- break
173
- }
174
- default: {
175
- return super.queryHandler(query, payloads)
176
- }
177
- }
178
- return PayloadBuilder.omitPrivateStorageMeta(resultPayloads) as ModuleQueryHandlerResult
179
- }
180
-
181
- abstract reportHandler(payloads?: Payload[]): Promise<Payload[]>
182
- }
package/src/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './AbstractSentinel.ts'