@verana-labs/vs-agent-sdk 1.11.0-dev.12 → 1.11.0-dev.14
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/README.md +172 -0
- package/build/agent/VsAgent.d.ts +1 -1
- package/build/agent/createVsAgent.d.ts +1 -1
- package/build/blockchain/IndexerWebSocketService.d.ts +33 -0
- package/build/blockchain/IndexerWebSocketService.js +181 -0
- package/build/blockchain/IndexerWebSocketService.js.map +1 -0
- package/build/blockchain/VeranaHelpers.d.ts +4 -0
- package/build/blockchain/VeranaHelpers.js +29 -0
- package/build/blockchain/VeranaHelpers.js.map +1 -0
- package/build/blockchain/VeranaIndexerService.d.ts +8 -0
- package/build/blockchain/VeranaIndexerService.js +28 -0
- package/build/blockchain/VeranaIndexerService.js.map +1 -0
- package/build/blockchain/handlers/IndexerHandlerRegistry.d.ts +25 -0
- package/build/blockchain/handlers/IndexerHandlerRegistry.js +34 -0
- package/build/blockchain/handlers/IndexerHandlerRegistry.js.map +1 -0
- package/build/blockchain/handlers/defaultHandlers.d.ts +6 -0
- package/build/blockchain/handlers/defaultHandlers.js +125 -0
- package/build/blockchain/handlers/defaultHandlers.js.map +1 -0
- package/build/blockchain/handlers/index.d.ts +3 -0
- package/build/blockchain/handlers/index.js +20 -0
- package/build/blockchain/handlers/index.js.map +1 -0
- package/build/blockchain/handlers/stateMutations.d.ts +12 -0
- package/build/blockchain/handlers/stateMutations.js +74 -0
- package/build/blockchain/handlers/stateMutations.js.map +1 -0
- package/build/blockchain/index.d.ts +4 -0
- package/build/blockchain/index.js +4 -0
- package/build/blockchain/index.js.map +1 -1
- package/build/blockchain/types.d.ts +60 -1
- package/build/blockchain/types.js +2 -1
- package/build/blockchain/types.js.map +1 -1
- package/package.json +2 -2
package/README.md
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
# @verana-labs/vs-agent-sdk
|
|
2
|
+
|
|
3
|
+
Framework-agnostic Verifiable Service Agent SDK with DIDComm, AnonCreds, and blockchain integration.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @verana-labs/vs-agent-sdk @credo-ts/core @credo-ts/node
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Basic Usage
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { createVsAgent, setupBaseDidComm } from '@verana-labs/vs-agent-sdk'
|
|
15
|
+
import { getNodeHttpServer } from '@credo-ts/node'
|
|
16
|
+
|
|
17
|
+
const agent = createVsAgent({
|
|
18
|
+
plugins: [
|
|
19
|
+
setupBaseDidComm({
|
|
20
|
+
walletConfig: { dbPath: './wallet' },
|
|
21
|
+
publicApiBaseUrl: 'https://api.example.com',
|
|
22
|
+
endpoints: ['https://agent.example.com/didcomm'],
|
|
23
|
+
}),
|
|
24
|
+
],
|
|
25
|
+
label: 'My Agent',
|
|
26
|
+
publicApiBaseUrl: 'https://api.example.com',
|
|
27
|
+
dependencies: getNodeHttpServer(),
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
await agent.initialize()
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Indexer WebSocket
|
|
34
|
+
|
|
35
|
+
Stream blockchain events in real-time:
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
import { IndexerWebSocketService } from '@verana-labs/vs-agent-sdk'
|
|
39
|
+
|
|
40
|
+
const indexerWs = new IndexerWebSocketService({
|
|
41
|
+
indexerUrl: 'https://indexer.verana.io',
|
|
42
|
+
agent,
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
await indexerWs.start()
|
|
46
|
+
// Auto-reconnects with exponential backoff (max 5min)
|
|
47
|
+
// Persists last block height in agent storage
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Custom Handlers
|
|
51
|
+
|
|
52
|
+
Build default handlers or replace with your own:
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import { buildDefaultIndexerHandlerRegistry } from '@verana-labs/vs-agent-sdk'
|
|
56
|
+
|
|
57
|
+
const handlerRegistry = buildDefaultIndexerHandlerRegistry()
|
|
58
|
+
|
|
59
|
+
const indexerWs = new IndexerWebSocketService({
|
|
60
|
+
indexerUrl: 'https://indexer.example.com',
|
|
61
|
+
agent,
|
|
62
|
+
handlerRegistry,
|
|
63
|
+
})
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Override a specific handler:**
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
import { buildDefaultIndexerHandlerRegistry } from '@verana-labs/vs-agent-sdk'
|
|
70
|
+
import type { IndexerActivity, IndexerDispatchContext } from '@verana-labs/vs-agent-sdk'
|
|
71
|
+
|
|
72
|
+
const registry = buildDefaultIndexerHandlerRegistry()
|
|
73
|
+
|
|
74
|
+
// Replace credential schema handler with custom logic
|
|
75
|
+
registry.register('CredentialSchema', async (activity: IndexerActivity, context: IndexerDispatchContext) => {
|
|
76
|
+
const { id, jsonSchema } = activity.changes as any
|
|
77
|
+
console.log(`Schema ${id} updated at block ${context.blockHeight}`)
|
|
78
|
+
|
|
79
|
+
// Sync to your database
|
|
80
|
+
await db.schemas.update(id, { schema: jsonSchema })
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
const indexerWs = new IndexerWebSocketService({
|
|
84
|
+
indexerUrl: 'https://indexer.example.com',
|
|
85
|
+
agent,
|
|
86
|
+
handlerRegistry: registry,
|
|
87
|
+
})
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Custom handlers from scratch:**
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
import { IndexerHandlerRegistry } from '@verana-labs/vs-agent-sdk'
|
|
94
|
+
import type { IndexerActivity, IndexerDispatchContext } from '@verana-labs/vs-agent-sdk'
|
|
95
|
+
|
|
96
|
+
const registry = new IndexerHandlerRegistry()
|
|
97
|
+
|
|
98
|
+
// Handle trust registry changes
|
|
99
|
+
registry.register('TrustRegistry', async (activity, context) => {
|
|
100
|
+
const { id, did, archived } = activity.changes as any
|
|
101
|
+
await agent.config.logger.info(`[Block ${context.blockHeight}] TR ${id} ${archived ? 'archived' : 'activated'}`)
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
// Handle permission changes with custom messages
|
|
105
|
+
registry.register('Permission', async (activity, context) => {
|
|
106
|
+
const { id, did, revoked } = activity.changes as any
|
|
107
|
+
const status = revoked ? 'revoked' : 'granted'
|
|
108
|
+
|
|
109
|
+
await agent.config.logger.info(`[Block ${context.blockHeight}] Permission ${status}: ${id}`)
|
|
110
|
+
|
|
111
|
+
// Emit to your service
|
|
112
|
+
await sendWebhookEvent('https://your-service.com/perms', {
|
|
113
|
+
type: 'permission_status_changed',
|
|
114
|
+
permissionId: id,
|
|
115
|
+
did,
|
|
116
|
+
status,
|
|
117
|
+
blockHeight: context.blockHeight,
|
|
118
|
+
timestamp: new Date().toISOString(),
|
|
119
|
+
})
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
const indexerWs = new IndexerWebSocketService({
|
|
123
|
+
indexerUrl: 'https://indexer.example.com',
|
|
124
|
+
agent,
|
|
125
|
+
handlerRegistry: registry,
|
|
126
|
+
})
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Blockchain Integration
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
import { VeranaChainService } from '@verana-labs/vs-agent-sdk'
|
|
133
|
+
|
|
134
|
+
const chain = new VeranaChainService({
|
|
135
|
+
rpcUrl: 'https://rpc.verana.io',
|
|
136
|
+
chainId: 'verana-mainnet-1',
|
|
137
|
+
mnemonic: 'your wallet seed phrase...',
|
|
138
|
+
logger: agent.config.logger,
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
const agent = createVsAgent({
|
|
142
|
+
plugins: [...],
|
|
143
|
+
veranaChain: chain,
|
|
144
|
+
label: 'My Agent',
|
|
145
|
+
publicApiBaseUrl: 'https://api.example.com',
|
|
146
|
+
dependencies: getNodeHttpServer(),
|
|
147
|
+
})
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Utilities
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
// DIDs
|
|
154
|
+
import { createInvitation, getWebDid } from '@verana-labs/vs-agent-sdk'
|
|
155
|
+
|
|
156
|
+
const did = await getWebDid(agent)
|
|
157
|
+
const invitation = await createInvitation(agent)
|
|
158
|
+
|
|
159
|
+
// Webhooks
|
|
160
|
+
import { sendWebhookEvent } from '@verana-labs/vs-agent-sdk'
|
|
161
|
+
|
|
162
|
+
await sendWebhookEvent('https://example.com/webhook', {
|
|
163
|
+
type: 'event_type',
|
|
164
|
+
data: { /* ... */ },
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
// Transports
|
|
168
|
+
import {
|
|
169
|
+
HttpInboundTransport,
|
|
170
|
+
VsAgentWsInboundTransport,
|
|
171
|
+
} from '@verana-labs/vs-agent-sdk'
|
|
172
|
+
```
|
package/build/agent/VsAgent.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { AnonCredsDidCommCredentialFormatService, AnonCredsModule, AnonCredsDidC
|
|
|
2
2
|
import { AskarModule, AskarModuleConfigStoreOptions } from '@credo-ts/askar';
|
|
3
3
|
import { Agent, AgentDependencies, DidsModule, InitConfig, W3cCredentialsModule } from '@credo-ts/core';
|
|
4
4
|
import { DidCommCredentialsModuleConfigOptions, DidCommCredentialV2Protocol, DidCommJsonLdCredentialFormatService, DidCommModule, DidCommModuleConfigOptions, DidCommProofsModuleConfigOptions, DidCommProofV2Protocol } from '@credo-ts/didcomm';
|
|
5
|
-
import { VeranaChainService } from '../blockchain';
|
|
5
|
+
import { VeranaChainService } from '../blockchain/VeranaChainService';
|
|
6
6
|
type VsAgentDidCommModule = DidCommModule<DidCommModuleConfigOptions & {
|
|
7
7
|
credentials: DidCommCredentialsModuleConfigOptions<[
|
|
8
8
|
DidCommCredentialV2Protocol<[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AskarModuleConfigStoreOptions } from '@credo-ts/askar';
|
|
2
2
|
import { AgentDependencies, InitConfig, LogLevel } from '@credo-ts/core';
|
|
3
|
-
import { VeranaChainService } from '../blockchain';
|
|
3
|
+
import { VeranaChainService } from '../blockchain/VeranaChainService';
|
|
4
4
|
import { Plugin } from '../types';
|
|
5
5
|
import { BaseAgentModules, VsAgent } from './VsAgent';
|
|
6
6
|
type MergePluginModules<T extends Plugin[]> = T extends [infer First, ...infer Rest] ? First extends {
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { VsAgent } from '../agent/VsAgent';
|
|
2
|
+
import { IndexerHandlerRegistry } from './handlers/IndexerHandlerRegistry';
|
|
3
|
+
export interface IndexerWebSocketServiceOptions {
|
|
4
|
+
indexerUrl: string;
|
|
5
|
+
agent: VsAgent;
|
|
6
|
+
handlerRegistry?: IndexerHandlerRegistry;
|
|
7
|
+
}
|
|
8
|
+
export declare class IndexerWebSocketService {
|
|
9
|
+
private readonly options;
|
|
10
|
+
private ws;
|
|
11
|
+
private reconnectAttempt;
|
|
12
|
+
private stopped;
|
|
13
|
+
private syncing;
|
|
14
|
+
private pendingEvents;
|
|
15
|
+
private readonly indexer;
|
|
16
|
+
private readonly handlerRegistry;
|
|
17
|
+
constructor(options: IndexerWebSocketServiceOptions);
|
|
18
|
+
start(): Promise<void>;
|
|
19
|
+
stop(): void;
|
|
20
|
+
private get logger();
|
|
21
|
+
/**
|
|
22
|
+
* Connects to the indexer WebSocket, performs an initial sync via REST (use /events endpoint because it returns historical events in a single request)
|
|
23
|
+
* Finally, processes pending events received during the initial sync.
|
|
24
|
+
*/
|
|
25
|
+
private connect;
|
|
26
|
+
private openWebSocket;
|
|
27
|
+
private syncRest;
|
|
28
|
+
private drainPendingEvents;
|
|
29
|
+
private processBlock;
|
|
30
|
+
private applyChanges;
|
|
31
|
+
private scheduleReconnect;
|
|
32
|
+
private fetchInitialEvents;
|
|
33
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.IndexerWebSocketService = void 0;
|
|
7
|
+
const ws_1 = __importDefault(require("ws"));
|
|
8
|
+
const VeranaHelpers_1 = require("./VeranaHelpers");
|
|
9
|
+
const VeranaIndexerService_1 = require("./VeranaIndexerService");
|
|
10
|
+
const handlers_1 = require("./handlers");
|
|
11
|
+
const MAX_RECONNECT_DELAY_MS = 300000;
|
|
12
|
+
const WS_PATHNAME = 'verana/indexer/v1/events';
|
|
13
|
+
class IndexerWebSocketService {
|
|
14
|
+
constructor(options) {
|
|
15
|
+
var _a;
|
|
16
|
+
this.options = options;
|
|
17
|
+
this.ws = null;
|
|
18
|
+
this.reconnectAttempt = 0;
|
|
19
|
+
this.stopped = false;
|
|
20
|
+
this.syncing = false;
|
|
21
|
+
this.pendingEvents = [];
|
|
22
|
+
this.indexer = new VeranaIndexerService_1.VeranaIndexerService({
|
|
23
|
+
baseUrl: options.indexerUrl,
|
|
24
|
+
logger: options.agent.config.logger,
|
|
25
|
+
});
|
|
26
|
+
this.handlerRegistry = (_a = options.handlerRegistry) !== null && _a !== void 0 ? _a : (0, handlers_1.buildDefaultIndexerHandlerRegistry)();
|
|
27
|
+
}
|
|
28
|
+
async start() {
|
|
29
|
+
this.stopped = false;
|
|
30
|
+
await this.connect();
|
|
31
|
+
}
|
|
32
|
+
stop() {
|
|
33
|
+
var _a;
|
|
34
|
+
this.stopped = true;
|
|
35
|
+
(_a = this.ws) === null || _a === void 0 ? void 0 : _a.close();
|
|
36
|
+
this.ws = null;
|
|
37
|
+
}
|
|
38
|
+
get logger() {
|
|
39
|
+
return this.options.agent.config.logger;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Connects to the indexer WebSocket, performs an initial sync via REST (use /events endpoint because it returns historical events in a single request)
|
|
43
|
+
* Finally, processes pending events received during the initial sync.
|
|
44
|
+
*/
|
|
45
|
+
async connect() {
|
|
46
|
+
this.syncing = true;
|
|
47
|
+
this.pendingEvents = [];
|
|
48
|
+
this.openWebSocket();
|
|
49
|
+
await this.syncRest();
|
|
50
|
+
this.syncing = false;
|
|
51
|
+
await this.drainPendingEvents();
|
|
52
|
+
}
|
|
53
|
+
openWebSocket() {
|
|
54
|
+
const url = new URL(this.options.indexerUrl);
|
|
55
|
+
const wsProto = url.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
56
|
+
if (!this.options.agent.did)
|
|
57
|
+
throw new Error('Agent does not have any defined public DID');
|
|
58
|
+
const wsUrl = `${wsProto}//${url.host}/${WS_PATHNAME}?did=${encodeURIComponent(this.options.agent.did)}`;
|
|
59
|
+
this.logger.info(`[IndexerWS] Connecting to ${wsUrl}`);
|
|
60
|
+
const ws = new ws_1.default(wsUrl);
|
|
61
|
+
this.ws = ws;
|
|
62
|
+
ws.on('open', () => {
|
|
63
|
+
this.logger.info(`[IndexerWS] Connected to indexer`);
|
|
64
|
+
this.reconnectAttempt = 0;
|
|
65
|
+
});
|
|
66
|
+
ws.on('message', (data) => {
|
|
67
|
+
var _a;
|
|
68
|
+
try {
|
|
69
|
+
const event = JSON.parse(data.toString());
|
|
70
|
+
const blockHeight = (_a = event['block_height']) !== null && _a !== void 0 ? _a : 0;
|
|
71
|
+
if (blockHeight <= 0)
|
|
72
|
+
return;
|
|
73
|
+
const payload = event['payload'];
|
|
74
|
+
if (!(payload === null || payload === void 0 ? void 0 : payload.sender))
|
|
75
|
+
return;
|
|
76
|
+
const sender = payload.sender;
|
|
77
|
+
if (this.syncing) {
|
|
78
|
+
this.pendingEvents.push({ blockHeight, sender, did: event.did });
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.processBlock(blockHeight, sender, event.did).catch(err => this.logger.error(`[IndexerWS] Handler error: ${err.message}`));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (_b) {
|
|
85
|
+
this.logger.warn(`[IndexerWS] Failed to parse message: ${data}`);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
ws.on('close', () => {
|
|
89
|
+
if (!this.stopped)
|
|
90
|
+
this.scheduleReconnect();
|
|
91
|
+
});
|
|
92
|
+
ws.on('error', (error) => {
|
|
93
|
+
this.logger.error(`[IndexerWS] Error: ${error.message}`);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
async syncRest() {
|
|
97
|
+
this.logger.info(`[IndexerWS] Starting REST initial sync`);
|
|
98
|
+
try {
|
|
99
|
+
const { lastBlockHeight } = await (0, VeranaHelpers_1.loadSyncState)(this.options.agent);
|
|
100
|
+
const data = await this.fetchInitialEvents(lastBlockHeight);
|
|
101
|
+
for (const event of data.events) {
|
|
102
|
+
const blockHeight = event.block_height;
|
|
103
|
+
const sender = event.payload.sender;
|
|
104
|
+
await this.processBlock(blockHeight, sender, event.did);
|
|
105
|
+
}
|
|
106
|
+
this.logger.info(`[IndexerWS] Initial sync complete: ${data.events.length} event(s)`);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
this.logger.error(`[IndexerWS] REST initial sync failed: ${error.message}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async drainPendingEvents() {
|
|
113
|
+
const { lastBlockHeight } = await (0, VeranaHelpers_1.loadSyncState)(this.options.agent);
|
|
114
|
+
const events = this.pendingEvents.splice(0);
|
|
115
|
+
let processed = 0;
|
|
116
|
+
let skipped = 0;
|
|
117
|
+
for (const { blockHeight, sender, did } of events) {
|
|
118
|
+
if (blockHeight <= lastBlockHeight) {
|
|
119
|
+
skipped++;
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
await this.processBlock(blockHeight, sender, did);
|
|
123
|
+
processed++;
|
|
124
|
+
}
|
|
125
|
+
if (skipped + processed > 0) {
|
|
126
|
+
this.logger.info(`[IndexerWS] Drained: ${processed} processed, ${skipped} skipped`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async processBlock(blockHeight, sender, did) {
|
|
130
|
+
try {
|
|
131
|
+
const changes = await this.indexer.getChanges(blockHeight);
|
|
132
|
+
if (changes.activity.length > 0) {
|
|
133
|
+
await this.applyChanges(blockHeight, changes.activity, sender, did);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
this.logger.error(`[IndexerWS] Failed to fetch changes for block ${blockHeight}: ${error.message}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async applyChanges(blockHeight, activity, operatorAddress, did) {
|
|
141
|
+
const state = await (0, VeranaHelpers_1.loadSyncState)(this.options.agent);
|
|
142
|
+
const mine = activity.filter(a => a.account === operatorAddress || did === this.options.agent.did);
|
|
143
|
+
if (mine.length === 0)
|
|
144
|
+
return;
|
|
145
|
+
for (const a of mine) {
|
|
146
|
+
try {
|
|
147
|
+
await this.handlerRegistry.dispatch(a, {
|
|
148
|
+
agent: this.options.agent,
|
|
149
|
+
blockHeight,
|
|
150
|
+
operatorAddress,
|
|
151
|
+
state,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
this.logger.error(`[IndexerWS] Handler ${a.msg} failed at block ${blockHeight}: ${err.message}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
state.lastBlockHeight = Math.max(state.lastBlockHeight, blockHeight);
|
|
159
|
+
await (0, VeranaHelpers_1.saveSyncState)(this.options.agent, state);
|
|
160
|
+
this.logger.debug(`[IndexerWS] Block ${blockHeight}: applied ${mine.length} activity item(s)`);
|
|
161
|
+
}
|
|
162
|
+
scheduleReconnect() {
|
|
163
|
+
const delay = Math.min(1000 * 2 ** this.reconnectAttempt, MAX_RECONNECT_DELAY_MS);
|
|
164
|
+
this.reconnectAttempt++;
|
|
165
|
+
this.logger.info(`[IndexerWS] Reconnecting in ${delay}ms (attempt ${this.reconnectAttempt})`);
|
|
166
|
+
setTimeout(() => {
|
|
167
|
+
if (!this.stopped)
|
|
168
|
+
this.connect();
|
|
169
|
+
}, delay);
|
|
170
|
+
}
|
|
171
|
+
async fetchInitialEvents(afterBlockHeight) {
|
|
172
|
+
this.logger.info(`[IndexerWS] Fetching initial events after block ${afterBlockHeight}`);
|
|
173
|
+
if (!this.options.agent.did)
|
|
174
|
+
throw new Error('Agent does not have any defined public DID');
|
|
175
|
+
const response = await this.indexer.getEvents(this.options.agent.did, afterBlockHeight);
|
|
176
|
+
this.logger.info(`[IndexerWS] Fetched: count=${response.count}, after_block_height=${response.after_block_height}`);
|
|
177
|
+
return response;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.IndexerWebSocketService = IndexerWebSocketService;
|
|
181
|
+
//# sourceMappingURL=IndexerWebSocketService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IndexerWebSocketService.js","sourceRoot":"","sources":["../../src/blockchain/IndexerWebSocketService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadSyncState = loadSyncState;
|
|
4
|
+
exports.saveSyncState = saveSyncState;
|
|
5
|
+
const types_1 = require("./types");
|
|
6
|
+
const emptyState = () => ({
|
|
7
|
+
lastBlockHeight: 0,
|
|
8
|
+
trustRegistries: {},
|
|
9
|
+
credentialSchemas: {},
|
|
10
|
+
permissions: {},
|
|
11
|
+
});
|
|
12
|
+
async function loadSyncState(agent) {
|
|
13
|
+
var _a;
|
|
14
|
+
const record = await agent.genericRecords.findById(types_1.RECORD_ID);
|
|
15
|
+
if (!record)
|
|
16
|
+
return emptyState();
|
|
17
|
+
return (_a = record.content) !== null && _a !== void 0 ? _a : emptyState();
|
|
18
|
+
}
|
|
19
|
+
async function saveSyncState(agent, state) {
|
|
20
|
+
const existing = await agent.genericRecords.findById(types_1.RECORD_ID);
|
|
21
|
+
if (existing) {
|
|
22
|
+
existing.content = state;
|
|
23
|
+
await agent.genericRecords.update(existing);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
await agent.genericRecords.save({ id: types_1.RECORD_ID, content: state });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=VeranaHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VeranaHelpers.js","sourceRoot":"","sources":["../../src/blockchain/VeranaHelpers.ts"],"names":[],"mappings":";;AAaA,sCAIC;AAED,sCAQC;AAvBD,mCAAoD;AAEpD,MAAM,UAAU,GAAG,GAAoB,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,CAAC;IAClB,eAAe,EAAE,EAAE;IACnB,iBAAiB,EAAE,EAAE;IACrB,WAAW,EAAE,EAAE;CAChB,CAAC,CAAA;AAEK,KAAK,UAAU,aAAa,CAAC,KAAc;;IAChD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,iBAAS,CAAC,CAAA;IAC7D,IAAI,CAAC,MAAM;QAAE,OAAO,UAAU,EAAE,CAAA;IAChC,OAAO,MAAC,MAAM,CAAC,OAAsC,mCAAI,UAAU,EAAE,CAAA;AACvE,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,KAAc,EAAE,KAAsB;IACxE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,iBAAS,CAAC,CAAA;IAC/D,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,OAAO,GAAG,KAA8B,CAAA;QACjD,MAAM,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC7C,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,iBAAS,EAAE,OAAO,EAAE,KAA8B,EAAE,CAAC,CAAA;IAC7F,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IndexerChangesResponse, IndexerEventsResponse, VeranaIdxConfig } from './types';
|
|
2
|
+
export declare class VeranaIndexerService {
|
|
3
|
+
private readonly config;
|
|
4
|
+
private readonly baseUrl;
|
|
5
|
+
constructor(config: VeranaIdxConfig);
|
|
6
|
+
getChanges(blockHeight: number): Promise<IndexerChangesResponse>;
|
|
7
|
+
getEvents(agentDid: string, afterBlockHeight?: number, limit?: number): Promise<IndexerEventsResponse>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VeranaIndexerService = void 0;
|
|
4
|
+
const util_1 = require("../utils/util");
|
|
5
|
+
class VeranaIndexerService {
|
|
6
|
+
constructor(config) {
|
|
7
|
+
this.config = config;
|
|
8
|
+
this.baseUrl = config.baseUrl.replace(/\/$/, '');
|
|
9
|
+
}
|
|
10
|
+
async getChanges(blockHeight) {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
this.config.logger.debug(`[VeranaIndexer] getChanges block=${blockHeight}`);
|
|
13
|
+
const url = `${this.baseUrl}/verana/indexer/v1/changes/${blockHeight}`;
|
|
14
|
+
const data = await (0, util_1.fetchJson)(url);
|
|
15
|
+
return {
|
|
16
|
+
block_height: Number((_a = data['block_height']) !== null && _a !== void 0 ? _a : blockHeight),
|
|
17
|
+
next_change_at: data['next_change_at'] != null ? Number(data['next_change_at']) : null,
|
|
18
|
+
activity: ((_b = data['activity']) !== null && _b !== void 0 ? _b : []),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
async getEvents(agentDid, afterBlockHeight = 0, limit = 500) {
|
|
22
|
+
this.config.logger.debug(`[VeranaIndexer] getEvents after_block=${afterBlockHeight}`);
|
|
23
|
+
const url = `${this.baseUrl}/verana/indexer/v1/events?did=${encodeURIComponent(agentDid)}&after_block_height=${afterBlockHeight}&limit=${limit}`;
|
|
24
|
+
return (0, util_1.fetchJson)(url);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.VeranaIndexerService = VeranaIndexerService;
|
|
28
|
+
//# sourceMappingURL=VeranaIndexerService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VeranaIndexerService.js","sourceRoot":"","sources":["../../src/blockchain/VeranaIndexerService.ts"],"names":[],"mappings":";;;AAAA,wCAAyC;AAIzC,MAAa,oBAAoB;IAG/B,YAA6B,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;QAClD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAmB;;QAClC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAA;QAC3E,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,8BAA8B,WAAW,EAAE,CAAA;QACtE,MAAM,IAAI,GAAG,MAAM,IAAA,gBAAS,EAA0B,GAAG,CAAC,CAAA;QAC1D,OAAO;YACL,YAAY,EAAE,MAAM,CAAC,MAAA,IAAI,CAAC,cAAc,CAAC,mCAAI,WAAW,CAAC;YACzD,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YACtF,QAAQ,EAAE,CAAC,MAAA,IAAI,CAAC,UAAU,CAAC,mCAAI,EAAE,CAAsB;SACxD,CAAA;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,gBAAgB,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG;QACjE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,gBAAgB,EAAE,CAAC,CAAA;QACrF,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,iCAAiC,kBAAkB,CAAC,QAAQ,CAAC,uBAAuB,gBAAgB,UAAU,KAAK,EAAE,CAAA;QAChJ,OAAO,IAAA,gBAAS,EAAwB,GAAG,CAAC,CAAA;IAC9C,CAAC;CACF;AAvBD,oDAuBC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { VsAgent } from '../../agent';
|
|
2
|
+
import { IndexerActivity, VeranaSyncState } from '../types';
|
|
3
|
+
interface IndexerHandlerContext {
|
|
4
|
+
agent: VsAgent;
|
|
5
|
+
blockHeight: number;
|
|
6
|
+
operatorAddress: string;
|
|
7
|
+
state: VeranaSyncState;
|
|
8
|
+
}
|
|
9
|
+
export interface IndexerEventHandler<TMsg extends string = string> {
|
|
10
|
+
readonly msg: TMsg;
|
|
11
|
+
handle(activity: IndexerActivity, ctx: IndexerHandlerContext): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Registry for handlers of indexer events. Handlers can be registered/unregistered at runtime
|
|
15
|
+
* and are looked up by the `msg` field of indexer activities.
|
|
16
|
+
*/
|
|
17
|
+
export declare class IndexerHandlerRegistry {
|
|
18
|
+
private handlers;
|
|
19
|
+
register(handler: IndexerEventHandler): void;
|
|
20
|
+
unregister(msg: string): void;
|
|
21
|
+
get(msg: string): IndexerEventHandler | undefined;
|
|
22
|
+
has(msg: string): boolean;
|
|
23
|
+
dispatch(activity: IndexerActivity, ctx: IndexerHandlerContext): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IndexerHandlerRegistry = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Registry for handlers of indexer events. Handlers can be registered/unregistered at runtime
|
|
6
|
+
* and are looked up by the `msg` field of indexer activities.
|
|
7
|
+
*/
|
|
8
|
+
class IndexerHandlerRegistry {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.handlers = new Map();
|
|
11
|
+
}
|
|
12
|
+
register(handler) {
|
|
13
|
+
this.handlers.set(handler.msg, handler);
|
|
14
|
+
}
|
|
15
|
+
unregister(msg) {
|
|
16
|
+
this.handlers.delete(msg);
|
|
17
|
+
}
|
|
18
|
+
get(msg) {
|
|
19
|
+
return this.handlers.get(msg);
|
|
20
|
+
}
|
|
21
|
+
has(msg) {
|
|
22
|
+
return this.handlers.has(msg);
|
|
23
|
+
}
|
|
24
|
+
async dispatch(activity, ctx) {
|
|
25
|
+
const h = this.handlers.get(activity.msg);
|
|
26
|
+
if (!h) {
|
|
27
|
+
ctx.agent.config.logger.debug(`[IndexerWS] No handler for msg=${activity.msg}`);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
await h.handle(activity, ctx);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.IndexerHandlerRegistry = IndexerHandlerRegistry;
|
|
34
|
+
//# sourceMappingURL=IndexerHandlerRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IndexerHandlerRegistry.js","sourceRoot":"","sources":["../../../src/blockchain/handlers/IndexerHandlerRegistry.ts"],"names":[],"mappings":";;;AAeA;;;GAGG;AACH,MAAa,sBAAsB;IAAnC;QACU,aAAQ,GAAG,IAAI,GAAG,EAA+B,CAAA;IA0B3D,CAAC;IAxBC,QAAQ,CAAC,OAA4B;QACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACzC,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAyB,EAAE,GAA0B;QAClE,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACzC,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAA;YAC/E,OAAM;QACR,CAAC;QACD,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;CACF;AA3BD,wDA2BC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IndexerEventHandler, IndexerHandlerRegistry } from './IndexerHandlerRegistry';
|
|
2
|
+
/**
|
|
3
|
+
* Default handlers for indexer events emitted by the Verana blockchain.
|
|
4
|
+
*/
|
|
5
|
+
export declare const defaultHandlers: IndexerEventHandler[];
|
|
6
|
+
export declare function buildDefaultIndexerHandlerRegistry(): IndexerHandlerRegistry;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultHandlers = void 0;
|
|
4
|
+
exports.buildDefaultIndexerHandlerRegistry = buildDefaultIndexerHandlerRegistry;
|
|
5
|
+
const IndexerHandlerRegistry_1 = require("./IndexerHandlerRegistry");
|
|
6
|
+
const stateMutations_1 = require("./stateMutations");
|
|
7
|
+
/**
|
|
8
|
+
* Default handlers for indexer events emitted by the Verana blockchain.
|
|
9
|
+
*/
|
|
10
|
+
exports.defaultHandlers = [
|
|
11
|
+
{
|
|
12
|
+
msg: 'CreateNewTrustRegistry',
|
|
13
|
+
handle: async (activity, ctx) => {
|
|
14
|
+
(0, stateMutations_1.upsertTrustRegistry)(ctx.state, activity);
|
|
15
|
+
ctx.agent.config.logger.info(`[IndexerWS] CreateNewTrustRegistry entity=${activity.entity_id} block=${ctx.blockHeight}`);
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
msg: 'UpdateTrustRegistry',
|
|
20
|
+
handle: async (activity, ctx) => {
|
|
21
|
+
(0, stateMutations_1.upsertTrustRegistry)(ctx.state, activity);
|
|
22
|
+
ctx.agent.config.logger.info(`[IndexerWS] UpdateTrustRegistry entity=${activity.entity_id} block=${ctx.blockHeight}`);
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
msg: 'AddGovernanceFrameworkDocument',
|
|
27
|
+
handle: async (activity, ctx) => {
|
|
28
|
+
(0, stateMutations_1.upsertTrustRegistry)(ctx.state, activity);
|
|
29
|
+
ctx.agent.config.logger.info(`[IndexerWS] AddGovernanceFrameworkDocument entity=${activity.entity_id} block=${ctx.blockHeight}`);
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
msg: 'IncreaseActiveGFVersion',
|
|
34
|
+
handle: async (activity, ctx) => {
|
|
35
|
+
(0, stateMutations_1.bumpActiveGfVersion)(ctx.state, activity);
|
|
36
|
+
ctx.agent.config.logger.info(`[IndexerWS] IncreaseActiveGFVersion entity=${activity.entity_id} block=${ctx.blockHeight}`);
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
msg: 'CreateNewCredentialSchema',
|
|
41
|
+
handle: async (activity, ctx) => {
|
|
42
|
+
(0, stateMutations_1.upsertCredentialSchema)(ctx.state, activity);
|
|
43
|
+
ctx.agent.config.logger.info(`[IndexerWS] CreateNewCredentialSchema entity=${activity.entity_id} block=${ctx.blockHeight} — TODO §6: generate VTJSC + publish Linked VP`);
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
msg: 'UpdateCredentialSchema',
|
|
48
|
+
handle: async (activity, ctx) => {
|
|
49
|
+
(0, stateMutations_1.upsertCredentialSchema)(ctx.state, activity);
|
|
50
|
+
ctx.agent.config.logger.info(`[IndexerWS] UpdateCredentialSchema entity=${activity.entity_id} block=${ctx.blockHeight}`);
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
msg: 'ArchiveCredentialSchema',
|
|
55
|
+
handle: async (activity, ctx) => {
|
|
56
|
+
(0, stateMutations_1.upsertCredentialSchema)(ctx.state, activity, { toggleArchived: true });
|
|
57
|
+
ctx.agent.config.logger.info(`[IndexerWS] ArchiveCredentialSchema entity=${activity.entity_id} block=${ctx.blockHeight}`);
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
msg: 'StartPermissionVP',
|
|
62
|
+
handle: async (activity, ctx) => {
|
|
63
|
+
(0, stateMutations_1.upsertPermission)(ctx.state, activity, { vpState: 'PENDING' });
|
|
64
|
+
ctx.agent.config.logger.info(`[IndexerWS] StartPermissionVP entity=${activity.entity_id} block=${ctx.blockHeight} — TODO §5.1: progress credential acquisition flow (applicant)`);
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
msg: 'RenewPermissionVP',
|
|
69
|
+
handle: async (activity, ctx) => {
|
|
70
|
+
(0, stateMutations_1.upsertPermission)(ctx.state, activity, { vpState: 'PENDING' });
|
|
71
|
+
ctx.agent.config.logger.info(`[IndexerWS] RenewPermissionVP entity=${activity.entity_id} block=${ctx.blockHeight} — TODO §5.1: progress credential acquisition flow (applicant renewal)`);
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
msg: 'SetPermissionVPToValidated',
|
|
76
|
+
handle: async (activity, ctx) => {
|
|
77
|
+
(0, stateMutations_1.upsertPermission)(ctx.state, activity, { vpState: 'VALIDATED' });
|
|
78
|
+
ctx.agent.config.logger.info(`[IndexerWS] SetPermissionVPToValidated entity=${activity.entity_id} block=${ctx.blockHeight} — TODO §5.1: progress credential acquisition flow (validator)`);
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
msg: 'AdjustPermission',
|
|
83
|
+
handle: async (activity, ctx) => {
|
|
84
|
+
var _a;
|
|
85
|
+
(0, stateMutations_1.upsertPermission)(ctx.state, activity, {
|
|
86
|
+
effectiveUntil: String((_a = activity.changes['effective_until']) !== null && _a !== void 0 ? _a : ''),
|
|
87
|
+
});
|
|
88
|
+
ctx.agent.config.logger.info(`[IndexerWS] AdjustPermission entity=${activity.entity_id} block=${ctx.blockHeight}`);
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
msg: 'RevokePermission',
|
|
93
|
+
handle: async (activity, ctx) => {
|
|
94
|
+
(0, stateMutations_1.upsertPermission)(ctx.state, activity, { revoked: true });
|
|
95
|
+
ctx.agent.config.logger.info(`[IndexerWS] RevokePermission entity=${activity.entity_id} block=${ctx.blockHeight} — TODO §7.2: remove linked VP from DID doc + delete credential`);
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
msg: 'SlashPermissionTrustDeposit',
|
|
100
|
+
handle: async (activity, ctx) => {
|
|
101
|
+
(0, stateMutations_1.upsertPermission)(ctx.state, activity, { slashed: true });
|
|
102
|
+
ctx.agent.config.logger.info(`[IndexerWS] SlashPermissionTrustDeposit entity=${activity.entity_id} block=${ctx.blockHeight} — TODO §7.2: clean up associated flow state`);
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
msg: 'RepayPermissionSlashedTrustDeposit',
|
|
107
|
+
handle: async (activity, ctx) => {
|
|
108
|
+
(0, stateMutations_1.upsertPermission)(ctx.state, activity, { slashed: false });
|
|
109
|
+
ctx.agent.config.logger.info(`[IndexerWS] RepayPermissionSlashedTrustDeposit entity=${activity.entity_id} block=${ctx.blockHeight}`);
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
msg: 'CancelPermissionVPLastRequest',
|
|
114
|
+
handle: async (activity, ctx) => {
|
|
115
|
+
(0, stateMutations_1.upsertPermission)(ctx.state, activity, {});
|
|
116
|
+
ctx.agent.config.logger.info(`[IndexerWS] CancelPermissionVPLastRequest entity=${activity.entity_id} block=${ctx.blockHeight} — TODO §7.2: clean up associated flow state`);
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
];
|
|
120
|
+
function buildDefaultIndexerHandlerRegistry() {
|
|
121
|
+
const r = new IndexerHandlerRegistry_1.IndexerHandlerRegistry();
|
|
122
|
+
exports.defaultHandlers.forEach(h => r.register(h));
|
|
123
|
+
return r;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=defaultHandlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaultHandlers.js","sourceRoot":"","sources":["../../../src/blockchain/handlers/defaultHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./defaultHandlers"), exports);
|
|
18
|
+
__exportStar(require("./IndexerHandlerRegistry"), exports);
|
|
19
|
+
__exportStar(require("./stateMutations"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/blockchain/handlers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAiC;AACjC,2DAAwC;AACxC,mDAAgC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IndexerActivity, VeranaSyncState } from '../types';
|
|
2
|
+
export declare function upsertTrustRegistry(state: VeranaSyncState, activity: IndexerActivity): void;
|
|
3
|
+
export declare function bumpActiveGfVersion(state: VeranaSyncState, activity: IndexerActivity): void;
|
|
4
|
+
export declare function upsertCredentialSchema(state: VeranaSyncState, activity: IndexerActivity, opts?: {
|
|
5
|
+
toggleArchived?: boolean;
|
|
6
|
+
}): void;
|
|
7
|
+
export declare function upsertPermission(state: VeranaSyncState, activity: IndexerActivity, overrides?: {
|
|
8
|
+
vpState?: string;
|
|
9
|
+
revoked?: boolean;
|
|
10
|
+
slashed?: boolean;
|
|
11
|
+
effectiveUntil?: string;
|
|
12
|
+
}): void;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.upsertTrustRegistry = upsertTrustRegistry;
|
|
4
|
+
exports.bumpActiveGfVersion = bumpActiveGfVersion;
|
|
5
|
+
exports.upsertCredentialSchema = upsertCredentialSchema;
|
|
6
|
+
exports.upsertPermission = upsertPermission;
|
|
7
|
+
function upsertTrustRegistry(state, activity) {
|
|
8
|
+
var _a, _b, _c, _d, _e, _f;
|
|
9
|
+
const block = Number(activity.block_height) || 0;
|
|
10
|
+
const id = String(activity.entity_id);
|
|
11
|
+
const c = activity.changes;
|
|
12
|
+
const existing = state.trustRegistries[id];
|
|
13
|
+
state.trustRegistries[id] = {
|
|
14
|
+
id: Number(id),
|
|
15
|
+
did: String((_b = (_a = c['did']) !== null && _a !== void 0 ? _a : existing === null || existing === void 0 ? void 0 : existing.did) !== null && _b !== void 0 ? _b : ''),
|
|
16
|
+
controller: String((_d = (_c = c['controller']) !== null && _c !== void 0 ? _c : existing === null || existing === void 0 ? void 0 : existing.controller) !== null && _d !== void 0 ? _d : ''),
|
|
17
|
+
archived: Boolean((_f = (_e = c['archived']) !== null && _e !== void 0 ? _e : existing === null || existing === void 0 ? void 0 : existing.archived) !== null && _f !== void 0 ? _f : false),
|
|
18
|
+
activeGfVersion: existing === null || existing === void 0 ? void 0 : existing.activeGfVersion,
|
|
19
|
+
lastModifiedBlock: block,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function bumpActiveGfVersion(state, activity) {
|
|
23
|
+
var _a, _b, _c, _d;
|
|
24
|
+
const block = Number(activity.block_height) || 0;
|
|
25
|
+
const id = String(activity.entity_id);
|
|
26
|
+
const existing = state.trustRegistries[id];
|
|
27
|
+
state.trustRegistries[id] = {
|
|
28
|
+
id: Number(id),
|
|
29
|
+
did: String((_a = existing === null || existing === void 0 ? void 0 : existing.did) !== null && _a !== void 0 ? _a : ''),
|
|
30
|
+
controller: String((_b = existing === null || existing === void 0 ? void 0 : existing.controller) !== null && _b !== void 0 ? _b : ''),
|
|
31
|
+
archived: (_c = existing === null || existing === void 0 ? void 0 : existing.archived) !== null && _c !== void 0 ? _c : false,
|
|
32
|
+
activeGfVersion: ((_d = existing === null || existing === void 0 ? void 0 : existing.activeGfVersion) !== null && _d !== void 0 ? _d : 0) + 1,
|
|
33
|
+
lastModifiedBlock: block,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function upsertCredentialSchema(state, activity, opts = {}) {
|
|
37
|
+
var _a, _b, _c, _d, _e, _f;
|
|
38
|
+
const block = Number(activity.block_height) || 0;
|
|
39
|
+
const id = String(activity.entity_id);
|
|
40
|
+
const c = activity.changes;
|
|
41
|
+
const existing = state.credentialSchemas[id];
|
|
42
|
+
state.credentialSchemas[id] = {
|
|
43
|
+
id: Number(id),
|
|
44
|
+
trId: Number((_b = (_a = c['tr_id']) !== null && _a !== void 0 ? _a : existing === null || existing === void 0 ? void 0 : existing.trId) !== null && _b !== void 0 ? _b : 0),
|
|
45
|
+
jsonSchema: String((_d = (_c = c['json_schema']) !== null && _c !== void 0 ? _c : existing === null || existing === void 0 ? void 0 : existing.jsonSchema) !== null && _d !== void 0 ? _d : ''),
|
|
46
|
+
issuerMode: c['issuer_perm_management_mode']
|
|
47
|
+
? String(c['issuer_perm_management_mode'])
|
|
48
|
+
: existing === null || existing === void 0 ? void 0 : existing.issuerMode,
|
|
49
|
+
verifierMode: c['verifier_perm_management_mode']
|
|
50
|
+
? String(c['verifier_perm_management_mode'])
|
|
51
|
+
: existing === null || existing === void 0 ? void 0 : existing.verifierMode,
|
|
52
|
+
archived: opts.toggleArchived ? !((_e = existing === null || existing === void 0 ? void 0 : existing.archived) !== null && _e !== void 0 ? _e : false) : ((_f = existing === null || existing === void 0 ? void 0 : existing.archived) !== null && _f !== void 0 ? _f : false),
|
|
53
|
+
lastModifiedBlock: block,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function upsertPermission(state, activity, overrides = {}) {
|
|
57
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
58
|
+
const block = Number(activity.block_height) || 0;
|
|
59
|
+
const id = String(activity.entity_id);
|
|
60
|
+
const c = activity.changes;
|
|
61
|
+
const existing = state.permissions[id];
|
|
62
|
+
state.permissions[id] = {
|
|
63
|
+
id: Number(id),
|
|
64
|
+
schemaId: Number((_b = (_a = c['schema_id']) !== null && _a !== void 0 ? _a : existing === null || existing === void 0 ? void 0 : existing.schemaId) !== null && _b !== void 0 ? _b : 0),
|
|
65
|
+
did: String((_d = (_c = c['did']) !== null && _c !== void 0 ? _c : existing === null || existing === void 0 ? void 0 : existing.did) !== null && _d !== void 0 ? _d : ''),
|
|
66
|
+
type: Number((_f = (_e = c['type']) !== null && _e !== void 0 ? _e : existing === null || existing === void 0 ? void 0 : existing.type) !== null && _f !== void 0 ? _f : 0),
|
|
67
|
+
vpState: (_g = overrides.vpState) !== null && _g !== void 0 ? _g : String((_j = (_h = c['vp_state']) !== null && _h !== void 0 ? _h : existing === null || existing === void 0 ? void 0 : existing.vpState) !== null && _j !== void 0 ? _j : ''),
|
|
68
|
+
effectiveUntil: (_l = (_k = overrides.effectiveUntil) !== null && _k !== void 0 ? _k : existing === null || existing === void 0 ? void 0 : existing.effectiveUntil) !== null && _l !== void 0 ? _l : '',
|
|
69
|
+
revoked: (_o = (_m = overrides.revoked) !== null && _m !== void 0 ? _m : existing === null || existing === void 0 ? void 0 : existing.revoked) !== null && _o !== void 0 ? _o : false,
|
|
70
|
+
slashed: (_q = (_p = overrides.slashed) !== null && _p !== void 0 ? _p : existing === null || existing === void 0 ? void 0 : existing.slashed) !== null && _q !== void 0 ? _q : false,
|
|
71
|
+
lastModifiedBlock: block,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=stateMutations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateMutations.js","sourceRoot":"","sources":["../../../src/blockchain/handlers/stateMutations.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./IndexerWebSocketService"), exports);
|
|
18
|
+
__exportStar(require("./VeranaHelpers"), exports);
|
|
17
19
|
__exportStar(require("./VeranaChainService"), exports);
|
|
20
|
+
__exportStar(require("./VeranaIndexerService"), exports);
|
|
18
21
|
__exportStar(require("./types"), exports);
|
|
22
|
+
__exportStar(require("./handlers"), exports);
|
|
19
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blockchain/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAoC;AACpC,0CAAuB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blockchain/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4DAAyC;AACzC,kDAA+B;AAC/B,uDAAoC;AACpC,yDAAsC;AACtC,0CAAuB;AACvB,6CAA0B"}
|
|
@@ -1,5 +1,64 @@
|
|
|
1
|
-
import { BaseLogger } from '@credo-ts/core';
|
|
1
|
+
import { BaseLogger, JsonObject } from '@credo-ts/core';
|
|
2
2
|
export declare const VERANA_BECH32_PREFIX = "verana";
|
|
3
|
+
export declare const RECORD_ID = "verana-blockchain-sync-state";
|
|
4
|
+
export interface IndexerEventsResponse {
|
|
5
|
+
events: JsonObject[];
|
|
6
|
+
count: number;
|
|
7
|
+
after_block_height: number;
|
|
8
|
+
}
|
|
9
|
+
export type IndexerEntityType = 'TrustRegistry' | 'CredentialSchema' | 'Permission' | 'PermissionSession' | 'TrustDeposit';
|
|
10
|
+
export interface IndexerActivity {
|
|
11
|
+
timestamp: string;
|
|
12
|
+
block_height: string | number;
|
|
13
|
+
entity_type: IndexerEntityType | string;
|
|
14
|
+
entity_id: string;
|
|
15
|
+
msg: string;
|
|
16
|
+
changes: Record<string, unknown>;
|
|
17
|
+
account?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface IndexerChangesResponse {
|
|
20
|
+
block_height: number;
|
|
21
|
+
next_change_at: number | null;
|
|
22
|
+
activity: IndexerActivity[];
|
|
23
|
+
}
|
|
24
|
+
export interface VeranaIdxConfig {
|
|
25
|
+
baseUrl: string;
|
|
26
|
+
logger: BaseLogger;
|
|
27
|
+
}
|
|
28
|
+
export interface SyncedTrustRegistry {
|
|
29
|
+
id: number;
|
|
30
|
+
did: string;
|
|
31
|
+
controller: string;
|
|
32
|
+
archived: boolean;
|
|
33
|
+
activeGfVersion?: number;
|
|
34
|
+
lastModifiedBlock: number;
|
|
35
|
+
}
|
|
36
|
+
export interface SyncedCredentialSchema {
|
|
37
|
+
id: number;
|
|
38
|
+
trId: number;
|
|
39
|
+
jsonSchema: string;
|
|
40
|
+
issuerMode?: string;
|
|
41
|
+
verifierMode?: string;
|
|
42
|
+
archived: boolean;
|
|
43
|
+
lastModifiedBlock: number;
|
|
44
|
+
}
|
|
45
|
+
export interface SyncedPermission {
|
|
46
|
+
id: number;
|
|
47
|
+
schemaId: number;
|
|
48
|
+
did: string;
|
|
49
|
+
type: number;
|
|
50
|
+
vpState?: string;
|
|
51
|
+
effectiveUntil?: string;
|
|
52
|
+
revoked: boolean;
|
|
53
|
+
slashed: boolean;
|
|
54
|
+
lastModifiedBlock: number;
|
|
55
|
+
}
|
|
56
|
+
export interface VeranaSyncState {
|
|
57
|
+
lastBlockHeight: number;
|
|
58
|
+
trustRegistries: Record<string, SyncedTrustRegistry>;
|
|
59
|
+
credentialSchemas: Record<string, SyncedCredentialSchema>;
|
|
60
|
+
permissions: Record<string, SyncedPermission>;
|
|
61
|
+
}
|
|
3
62
|
export interface PermQueryClient {
|
|
4
63
|
GetPermission(req: {
|
|
5
64
|
id: Long;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VERANA_BECH32_PREFIX = void 0;
|
|
3
|
+
exports.RECORD_ID = exports.VERANA_BECH32_PREFIX = void 0;
|
|
4
4
|
exports.VERANA_BECH32_PREFIX = 'verana';
|
|
5
|
+
exports.RECORD_ID = 'verana-blockchain-sync-state';
|
|
5
6
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/blockchain/types.ts"],"names":[],"mappings":";;;AAEa,QAAA,oBAAoB,GAAG,QAAQ,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/blockchain/types.ts"],"names":[],"mappings":";;;AAEa,QAAA,oBAAoB,GAAG,QAAQ,CAAA;AAC/B,QAAA,SAAS,GAAG,8BAA8B,CAAA"}
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"default": "./build/index.js"
|
|
10
10
|
}
|
|
11
11
|
},
|
|
12
|
-
"version": "1.11.0-dev.
|
|
12
|
+
"version": "1.11.0-dev.14",
|
|
13
13
|
"repository": {
|
|
14
14
|
"type": "git",
|
|
15
15
|
"url": "https://github.com/verana-labs/vs-agent"
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"didwebvh-ts": "^2.5.6",
|
|
39
39
|
"express": "^4.18.1",
|
|
40
40
|
"tsyringe": "4.8.0",
|
|
41
|
-
"@verana-labs/vs-agent-model": "1.11.0-dev.
|
|
41
|
+
"@verana-labs/vs-agent-model": "1.11.0-dev.14"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"@credo-ts/core": "0.7.0-alpha-20260410113934",
|