@enbox/dwn-server 0.0.3 → 0.0.5
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/LICENSE +3 -2
- package/README.md +112 -212
- package/dist/esm/src/admin/activity-log.d.ts +44 -0
- package/dist/esm/src/admin/activity-log.d.ts.map +1 -0
- package/dist/esm/src/admin/activity-log.js +85 -0
- package/dist/esm/src/admin/activity-log.js.map +1 -0
- package/dist/esm/src/admin/admin-api.d.ts +61 -0
- package/dist/esm/src/admin/admin-api.d.ts.map +1 -0
- package/dist/esm/src/admin/admin-api.js +1047 -0
- package/dist/esm/src/admin/admin-api.js.map +1 -0
- package/dist/esm/src/admin/admin-auth.d.ts +9 -0
- package/dist/esm/src/admin/admin-auth.d.ts.map +1 -0
- package/dist/esm/src/admin/admin-auth.js +45 -0
- package/dist/esm/src/admin/admin-auth.js.map +1 -0
- package/dist/esm/src/admin/admin-store.d.ts +111 -0
- package/dist/esm/src/admin/admin-store.d.ts.map +1 -0
- package/dist/esm/src/admin/admin-store.js +376 -0
- package/dist/esm/src/admin/admin-store.js.map +1 -0
- package/dist/esm/src/admin/audit-log.d.ts +94 -0
- package/dist/esm/src/admin/audit-log.d.ts.map +1 -0
- package/dist/esm/src/admin/audit-log.js +220 -0
- package/dist/esm/src/admin/audit-log.js.map +1 -0
- package/dist/esm/src/admin/index.d.ts +10 -0
- package/dist/esm/src/admin/index.d.ts.map +1 -0
- package/dist/esm/src/admin/index.js +7 -0
- package/dist/esm/src/admin/index.js.map +1 -0
- package/dist/esm/src/admin/types.d.ts +306 -0
- package/dist/esm/src/admin/types.d.ts.map +1 -0
- package/dist/esm/src/admin/types.js +2 -0
- package/dist/esm/src/admin/types.js.map +1 -0
- package/dist/esm/src/admin/webhook-manager.d.ts +55 -0
- package/dist/esm/src/admin/webhook-manager.d.ts.map +1 -0
- package/dist/esm/src/admin/webhook-manager.js +184 -0
- package/dist/esm/src/admin/webhook-manager.js.map +1 -0
- package/dist/esm/src/config.d.ts +122 -3
- package/dist/esm/src/config.d.ts.map +1 -1
- package/dist/esm/src/config.js +151 -5
- package/dist/esm/src/config.js.map +1 -1
- package/dist/esm/src/connection/connection-manager.d.ts +24 -1
- package/dist/esm/src/connection/connection-manager.d.ts.map +1 -1
- package/dist/esm/src/connection/connection-manager.js +33 -2
- package/dist/esm/src/connection/connection-manager.js.map +1 -1
- package/dist/esm/src/connection/flow-controller.d.ts +53 -0
- package/dist/esm/src/connection/flow-controller.d.ts.map +1 -0
- package/dist/esm/src/connection/flow-controller.js +101 -0
- package/dist/esm/src/connection/flow-controller.js.map +1 -0
- package/dist/esm/src/connection/socket-connection.d.ts +39 -4
- package/dist/esm/src/connection/socket-connection.d.ts.map +1 -1
- package/dist/esm/src/connection/socket-connection.js +80 -9
- package/dist/esm/src/connection/socket-connection.js.map +1 -1
- package/dist/esm/src/delivery-service.d.ts +43 -0
- package/dist/esm/src/delivery-service.d.ts.map +1 -0
- package/dist/esm/src/delivery-service.js +574 -0
- package/dist/esm/src/delivery-service.js.map +1 -0
- package/dist/esm/src/dwn-error.d.ts +10 -1
- package/dist/esm/src/dwn-error.d.ts.map +1 -1
- package/dist/esm/src/dwn-error.js +9 -0
- package/dist/esm/src/dwn-error.js.map +1 -1
- package/dist/esm/src/dwn-server.d.ts +8 -0
- package/dist/esm/src/dwn-server.d.ts.map +1 -1
- package/dist/esm/src/dwn-server.js +198 -12
- package/dist/esm/src/dwn-server.js.map +1 -1
- package/dist/esm/src/http-api.d.ts +19 -2
- package/dist/esm/src/http-api.d.ts.map +1 -1
- package/dist/esm/src/http-api.js +219 -19
- package/dist/esm/src/http-api.js.map +1 -1
- package/dist/esm/src/index.d.ts +6 -2
- package/dist/esm/src/index.d.ts.map +1 -1
- package/dist/esm/src/index.js +4 -1
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/json-rpc-api.js +2 -1
- package/dist/esm/src/json-rpc-api.js.map +1 -1
- package/dist/esm/src/json-rpc-handlers/dwn/process-message.d.ts.map +1 -1
- package/dist/esm/src/json-rpc-handlers/dwn/process-message.js +106 -4
- package/dist/esm/src/json-rpc-handlers/dwn/process-message.js.map +1 -1
- package/dist/esm/src/json-rpc-handlers/subscription/ack.d.ts +20 -0
- package/dist/esm/src/json-rpc-handlers/subscription/ack.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-handlers/subscription/ack.js +41 -0
- package/dist/esm/src/json-rpc-handlers/subscription/ack.js.map +1 -0
- package/dist/esm/src/json-rpc-handlers/subscription/close.d.ts.map +1 -1
- package/dist/esm/src/json-rpc-handlers/subscription/close.js +1 -1
- package/dist/esm/src/json-rpc-handlers/subscription/close.js.map +1 -1
- package/dist/esm/src/json-rpc-handlers/subscription/index.d.ts +1 -0
- package/dist/esm/src/json-rpc-handlers/subscription/index.d.ts.map +1 -1
- package/dist/esm/src/json-rpc-handlers/subscription/index.js +1 -0
- package/dist/esm/src/json-rpc-handlers/subscription/index.js.map +1 -1
- package/dist/esm/src/lib/json-rpc-router.d.ts +22 -4
- package/dist/esm/src/lib/json-rpc-router.d.ts.map +1 -1
- package/dist/esm/src/lib/json-rpc-router.js.map +1 -1
- package/dist/esm/src/lib/sql-utils.d.ts +6 -0
- package/dist/esm/src/lib/sql-utils.d.ts.map +1 -0
- package/dist/esm/src/lib/sql-utils.js +8 -0
- package/dist/esm/src/lib/sql-utils.js.map +1 -0
- package/dist/esm/src/main.js +0 -6
- package/dist/esm/src/main.js.map +1 -1
- package/dist/esm/src/message-processed-hook.d.ts +35 -0
- package/dist/esm/src/message-processed-hook.d.ts.map +1 -0
- package/dist/esm/src/message-processed-hook.js +2 -0
- package/dist/esm/src/message-processed-hook.js.map +1 -0
- package/dist/esm/src/metrics.d.ts +13 -1
- package/dist/esm/src/metrics.d.ts.map +1 -1
- package/dist/esm/src/metrics.js +41 -1
- package/dist/esm/src/metrics.js.map +1 -1
- package/dist/esm/src/plugins/event-log-nats.d.ts +25 -0
- package/dist/esm/src/plugins/event-log-nats.d.ts.map +1 -0
- package/dist/esm/src/plugins/event-log-nats.js +379 -0
- package/dist/esm/src/plugins/event-log-nats.js.map +1 -0
- package/dist/esm/src/rate-limiter.d.ts +60 -0
- package/dist/esm/src/rate-limiter.d.ts.map +1 -0
- package/dist/esm/src/rate-limiter.js +116 -0
- package/dist/esm/src/rate-limiter.js.map +1 -0
- package/dist/esm/src/registration/jwt-provider-auth-plugin.d.ts +53 -0
- package/dist/esm/src/registration/jwt-provider-auth-plugin.d.ts.map +1 -0
- package/dist/esm/src/registration/jwt-provider-auth-plugin.js +90 -0
- package/dist/esm/src/registration/jwt-provider-auth-plugin.js.map +1 -0
- package/dist/esm/src/registration/open-auth-handler.d.ts +37 -0
- package/dist/esm/src/registration/open-auth-handler.d.ts.map +1 -0
- package/dist/esm/src/registration/open-auth-handler.js +214 -0
- package/dist/esm/src/registration/open-auth-handler.js.map +1 -0
- package/dist/esm/src/registration/proof-of-work-manager.d.ts +1 -1
- package/dist/esm/src/registration/proof-of-work-manager.d.ts.map +1 -1
- package/dist/esm/src/registration/provider-auth-plugin.d.ts +46 -0
- package/dist/esm/src/registration/provider-auth-plugin.d.ts.map +1 -0
- package/dist/esm/src/registration/provider-auth-plugin.js +29 -0
- package/dist/esm/src/registration/provider-auth-plugin.js.map +1 -0
- package/dist/esm/src/registration/registration-manager.d.ts +27 -4
- package/dist/esm/src/registration/registration-manager.d.ts.map +1 -1
- package/dist/esm/src/registration/registration-manager.js +77 -6
- package/dist/esm/src/registration/registration-manager.js.map +1 -1
- package/dist/esm/src/registration/registration-store.d.ts +83 -3
- package/dist/esm/src/registration/registration-store.d.ts.map +1 -1
- package/dist/esm/src/registration/registration-store.js +248 -11
- package/dist/esm/src/registration/registration-store.js.map +1 -1
- package/dist/esm/src/storage.d.ts +4 -4
- package/dist/esm/src/storage.d.ts.map +1 -1
- package/dist/esm/src/storage.js +100 -20
- package/dist/esm/src/storage.js.map +1 -1
- package/dist/esm/src/web5-connect/sql-ttl-cache.d.ts.map +1 -1
- package/dist/esm/src/web5-connect/sql-ttl-cache.js +8 -1
- package/dist/esm/src/web5-connect/sql-ttl-cache.js.map +1 -1
- package/dist/esm/src/ws-api.d.ts +17 -1
- package/dist/esm/src/ws-api.d.ts.map +1 -1
- package/dist/esm/src/ws-api.js +9 -2
- package/dist/esm/src/ws-api.js.map +1 -1
- package/package.json +18 -16
- package/src/admin/activity-log.ts +100 -0
- package/src/admin/admin-api.ts +1308 -0
- package/src/admin/admin-auth.ts +56 -0
- package/src/admin/admin-store.ts +515 -0
- package/src/admin/audit-log.ts +327 -0
- package/src/admin/index.ts +34 -0
- package/src/admin/types.ts +352 -0
- package/src/admin/webhook-manager.ts +245 -0
- package/src/config.ts +177 -5
- package/src/connection/connection-manager.ts +50 -6
- package/src/connection/flow-controller.ts +117 -0
- package/src/connection/socket-connection.ts +103 -21
- package/src/delivery-service.ts +740 -0
- package/src/dwn-error.ts +9 -0
- package/src/dwn-server.ts +242 -14
- package/src/http-api.ts +271 -30
- package/src/index.ts +13 -2
- package/src/json-rpc-api.ts +2 -1
- package/src/json-rpc-handlers/dwn/process-message.ts +140 -5
- package/src/json-rpc-handlers/subscription/ack.ts +63 -0
- package/src/json-rpc-handlers/subscription/close.ts +2 -6
- package/src/json-rpc-handlers/subscription/index.ts +1 -0
- package/src/lib/json-rpc-router.ts +22 -6
- package/src/lib/sql-utils.ts +7 -0
- package/src/main.ts +0 -8
- package/src/message-processed-hook.ts +33 -0
- package/src/metrics.ts +50 -1
- package/src/plugins/event-log-nats.ts +466 -0
- package/src/rate-limiter.ts +143 -0
- package/src/registration/jwt-provider-auth-plugin.ts +119 -0
- package/src/registration/open-auth-handler.ts +263 -0
- package/src/registration/proof-of-work-manager.ts +1 -1
- package/src/registration/provider-auth-plugin.ts +84 -0
- package/src/registration/registration-manager.ts +108 -12
- package/src/registration/registration-store.ts +326 -17
- package/src/storage.ts +121 -27
- package/src/web5-connect/sql-ttl-cache.ts +7 -1
- package/src/ws-api.ts +30 -2
- package/dist/esm/src/json-rpc-socket.d.ts +0 -39
- package/dist/esm/src/json-rpc-socket.d.ts.map +0 -1
- package/dist/esm/src/json-rpc-socket.js +0 -125
- package/dist/esm/src/json-rpc-socket.js.map +0 -1
- package/dist/esm/src/lib/json-rpc.d.ts +0 -54
- package/dist/esm/src/lib/json-rpc.d.ts.map +0 -1
- package/dist/esm/src/lib/json-rpc.js +0 -60
- package/dist/esm/src/lib/json-rpc.js.map +0 -1
- package/dist/esm/src/registration/proof-of-work-types.d.ts +0 -8
- package/dist/esm/src/registration/proof-of-work-types.d.ts.map +0 -1
- package/dist/esm/src/registration/proof-of-work-types.js +0 -2
- package/dist/esm/src/registration/proof-of-work-types.js.map +0 -1
- package/dist/esm/src/registration/registration-types.d.ts +0 -18
- package/dist/esm/src/registration/registration-types.d.ts.map +0 -1
- package/dist/esm/src/registration/registration-types.js +0 -2
- package/dist/esm/src/registration/registration-types.js.map +0 -1
- package/dist/esm/tests/common-scenario-validator.d.ts +0 -11
- package/dist/esm/tests/common-scenario-validator.d.ts.map +0 -1
- package/dist/esm/tests/common-scenario-validator.js +0 -113
- package/dist/esm/tests/common-scenario-validator.js.map +0 -1
- package/dist/esm/tests/connection/connection-manager.spec.d.ts +0 -2
- package/dist/esm/tests/connection/connection-manager.spec.d.ts.map +0 -1
- package/dist/esm/tests/connection/connection-manager.spec.js +0 -49
- package/dist/esm/tests/connection/connection-manager.spec.js.map +0 -1
- package/dist/esm/tests/connection/socket-connection.spec.d.ts +0 -2
- package/dist/esm/tests/connection/socket-connection.spec.d.ts.map +0 -1
- package/dist/esm/tests/connection/socket-connection.spec.js +0 -147
- package/dist/esm/tests/connection/socket-connection.spec.js.map +0 -1
- package/dist/esm/tests/cors/http-api.browser.d.ts +0 -2
- package/dist/esm/tests/cors/http-api.browser.d.ts.map +0 -1
- package/dist/esm/tests/cors/http-api.browser.js +0 -60
- package/dist/esm/tests/cors/http-api.browser.js.map +0 -1
- package/dist/esm/tests/cors/ping.browser.d.ts +0 -2
- package/dist/esm/tests/cors/ping.browser.d.ts.map +0 -1
- package/dist/esm/tests/cors/ping.browser.js +0 -7
- package/dist/esm/tests/cors/ping.browser.js.map +0 -1
- package/dist/esm/tests/dwn-process-message.spec.d.ts +0 -2
- package/dist/esm/tests/dwn-process-message.spec.d.ts.map +0 -1
- package/dist/esm/tests/dwn-process-message.spec.js +0 -172
- package/dist/esm/tests/dwn-process-message.spec.js.map +0 -1
- package/dist/esm/tests/dwn-server.spec.d.ts +0 -2
- package/dist/esm/tests/dwn-server.spec.d.ts.map +0 -1
- package/dist/esm/tests/dwn-server.spec.js +0 -48
- package/dist/esm/tests/dwn-server.spec.js.map +0 -1
- package/dist/esm/tests/http-api.spec.d.ts +0 -2
- package/dist/esm/tests/http-api.spec.d.ts.map +0 -1
- package/dist/esm/tests/http-api.spec.js +0 -782
- package/dist/esm/tests/http-api.spec.js.map +0 -1
- package/dist/esm/tests/json-rpc-socket.spec.d.ts +0 -2
- package/dist/esm/tests/json-rpc-socket.spec.d.ts.map +0 -1
- package/dist/esm/tests/json-rpc-socket.spec.js +0 -227
- package/dist/esm/tests/json-rpc-socket.spec.js.map +0 -1
- package/dist/esm/tests/plugins/data-store-sqlite.d.ts +0 -17
- package/dist/esm/tests/plugins/data-store-sqlite.d.ts.map +0 -1
- package/dist/esm/tests/plugins/data-store-sqlite.js +0 -23
- package/dist/esm/tests/plugins/data-store-sqlite.js.map +0 -1
- package/dist/esm/tests/plugins/event-log-sqlite.d.ts +0 -17
- package/dist/esm/tests/plugins/event-log-sqlite.d.ts.map +0 -1
- package/dist/esm/tests/plugins/event-log-sqlite.js +0 -23
- package/dist/esm/tests/plugins/event-log-sqlite.js.map +0 -1
- package/dist/esm/tests/plugins/event-stream-in-memory.d.ts +0 -17
- package/dist/esm/tests/plugins/event-stream-in-memory.d.ts.map +0 -1
- package/dist/esm/tests/plugins/event-stream-in-memory.js +0 -21
- package/dist/esm/tests/plugins/event-stream-in-memory.js.map +0 -1
- package/dist/esm/tests/plugins/message-store-sqlite.d.ts +0 -17
- package/dist/esm/tests/plugins/message-store-sqlite.d.ts.map +0 -1
- package/dist/esm/tests/plugins/message-store-sqlite.js +0 -23
- package/dist/esm/tests/plugins/message-store-sqlite.js.map +0 -1
- package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts +0 -17
- package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts.map +0 -1
- package/dist/esm/tests/plugins/resumable-task-store-sqlite.js +0 -23
- package/dist/esm/tests/plugins/resumable-task-store-sqlite.js.map +0 -1
- package/dist/esm/tests/process-handler.spec.d.ts +0 -2
- package/dist/esm/tests/process-handler.spec.d.ts.map +0 -1
- package/dist/esm/tests/process-handler.spec.js +0 -60
- package/dist/esm/tests/process-handler.spec.js.map +0 -1
- package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts +0 -2
- package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts.map +0 -1
- package/dist/esm/tests/registration/proof-of-work-manager.spec.js +0 -156
- package/dist/esm/tests/registration/proof-of-work-manager.spec.js.map +0 -1
- package/dist/esm/tests/rpc-subscribe-close.spec.d.ts +0 -2
- package/dist/esm/tests/rpc-subscribe-close.spec.d.ts.map +0 -1
- package/dist/esm/tests/rpc-subscribe-close.spec.js +0 -81
- package/dist/esm/tests/rpc-subscribe-close.spec.js.map +0 -1
- package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts +0 -2
- package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts.map +0 -1
- package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js +0 -74
- package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js.map +0 -1
- package/dist/esm/tests/scenarios/registration.spec.d.ts +0 -2
- package/dist/esm/tests/scenarios/registration.spec.d.ts.map +0 -1
- package/dist/esm/tests/scenarios/registration.spec.js +0 -511
- package/dist/esm/tests/scenarios/registration.spec.js.map +0 -1
- package/dist/esm/tests/scenarios/web5-connect.spec.d.ts +0 -2
- package/dist/esm/tests/scenarios/web5-connect.spec.d.ts.map +0 -1
- package/dist/esm/tests/scenarios/web5-connect.spec.js +0 -141
- package/dist/esm/tests/scenarios/web5-connect.spec.js.map +0 -1
- package/dist/esm/tests/test-dwn.d.ts +0 -7
- package/dist/esm/tests/test-dwn.d.ts.map +0 -1
- package/dist/esm/tests/test-dwn.js +0 -28
- package/dist/esm/tests/test-dwn.js.map +0 -1
- package/dist/esm/tests/utils.d.ts +0 -43
- package/dist/esm/tests/utils.d.ts.map +0 -1
- package/dist/esm/tests/utils.js +0 -107
- package/dist/esm/tests/utils.js.map +0 -1
- package/dist/esm/tests/ws-api.spec.d.ts +0 -2
- package/dist/esm/tests/ws-api.spec.d.ts.map +0 -1
- package/dist/esm/tests/ws-api.spec.js +0 -332
- package/dist/esm/tests/ws-api.spec.js.map +0 -1
- package/src/json-rpc-socket.ts +0 -156
- package/src/lib/json-rpc.ts +0 -126
- package/src/registration/proof-of-work-types.ts +0 -7
- package/src/registration/registration-types.ts +0 -18
package/dist/esm/src/storage.js
CHANGED
|
@@ -2,15 +2,16 @@ import * as fs from 'fs';
|
|
|
2
2
|
import Cursor from 'pg-cursor';
|
|
3
3
|
import { createPool as MySQLCreatePool } from 'mysql2';
|
|
4
4
|
import pg from 'pg';
|
|
5
|
+
import { Kysely } from 'kysely';
|
|
5
6
|
import { createBunSqliteDatabase } from '@enbox/dwn-sql-store';
|
|
6
7
|
import { PluginLoader } from './plugin-loader.js';
|
|
7
|
-
import { DataStoreLevel,
|
|
8
|
-
import { DataStoreSql,
|
|
8
|
+
import { DataStoreLevel, MessageStoreLevel, ResumableTaskStoreLevel, StateIndexLevel, } from '@enbox/dwn-sdk-js';
|
|
9
|
+
import { DataStoreSql, MessageStoreSql, MysqlDialect, PostgresDialect, ResumableTaskStoreSql, runDwnStoreMigrations, SqliteDialect, StateIndexSql, } from '@enbox/dwn-sql-store';
|
|
9
10
|
export var StoreType;
|
|
10
11
|
(function (StoreType) {
|
|
11
12
|
StoreType[StoreType["DataStore"] = 0] = "DataStore";
|
|
12
13
|
StoreType[StoreType["MessageStore"] = 1] = "MessageStore";
|
|
13
|
-
StoreType[StoreType["
|
|
14
|
+
StoreType[StoreType["StateIndex"] = 2] = "StateIndex";
|
|
14
15
|
StoreType[StoreType["ResumableTaskStore"] = 3] = "ResumableTaskStore";
|
|
15
16
|
})(StoreType || (StoreType = {}));
|
|
16
17
|
export var BackendTypes;
|
|
@@ -20,13 +21,92 @@ export var BackendTypes;
|
|
|
20
21
|
BackendTypes["MYSQL"] = "mysql";
|
|
21
22
|
BackendTypes["POSTGRES"] = "postgres";
|
|
22
23
|
})(BackendTypes || (BackendTypes = {}));
|
|
24
|
+
/**
|
|
25
|
+
* Cache of shared PostgreSQL dialects keyed by connection URL. When multiple
|
|
26
|
+
* DWN stores share the same Postgres URL, they reuse a single dialect (and
|
|
27
|
+
* thus a single `pg.Pool`) instead of each creating their own. This reduces
|
|
28
|
+
* connection count from 4 × pool_max to 1 × pool_max per DWN process.
|
|
29
|
+
*/
|
|
30
|
+
const sharedDialectCache = new Map();
|
|
31
|
+
/**
|
|
32
|
+
* Returns a (potentially cached) dialect for the given Postgres connection URL.
|
|
33
|
+
* Non-Postgres URLs always return a fresh dialect (no caching).
|
|
34
|
+
*/
|
|
35
|
+
function getOrCreateDialect(connectionUrl, config) {
|
|
36
|
+
const protocol = connectionUrl.protocol.slice(0, -1);
|
|
37
|
+
if (protocol !== BackendTypes.POSTGRES) {
|
|
38
|
+
return getDialectFromUrl(connectionUrl);
|
|
39
|
+
}
|
|
40
|
+
const key = connectionUrl.toString();
|
|
41
|
+
const cached = sharedDialectCache.get(key);
|
|
42
|
+
if (cached !== undefined) {
|
|
43
|
+
return cached;
|
|
44
|
+
}
|
|
45
|
+
// Create a single pg.Pool instance with configurable sizing.
|
|
46
|
+
const pool = new pg.Pool({
|
|
47
|
+
connectionString: connectionUrl.toString(),
|
|
48
|
+
min: config.pgPoolMin,
|
|
49
|
+
max: config.pgPoolMax,
|
|
50
|
+
idleTimeoutMillis: config.pgPoolIdleTimeout,
|
|
51
|
+
});
|
|
52
|
+
const dialect = new PostgresDialect({
|
|
53
|
+
pool: async () => pool,
|
|
54
|
+
cursor: Cursor,
|
|
55
|
+
});
|
|
56
|
+
sharedDialectCache.set(key, dialect);
|
|
57
|
+
return dialect;
|
|
58
|
+
}
|
|
23
59
|
export async function getDwnConfig(config, options) {
|
|
24
|
-
const { tenantGate,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
60
|
+
const { tenantGate, eventLog, didResolver } = options;
|
|
61
|
+
// Run SQL schema migrations before creating stores. Uses the data store
|
|
62
|
+
// connection to determine the dialect — all SQL stores typically share the
|
|
63
|
+
// same database. Non-SQL backends (level://) are skipped.
|
|
64
|
+
await runSqlMigrationsIfNeeded(config);
|
|
65
|
+
const dataStore = await getStore(config, config.dataStore, StoreType.DataStore);
|
|
66
|
+
const stateIndex = await getStore(config, config.stateIndex, StoreType.StateIndex);
|
|
67
|
+
const messageStore = await getStore(config, config.messageStore, StoreType.MessageStore);
|
|
68
|
+
const resumableTaskStore = await getStore(config, config.resumableTaskStore, StoreType.ResumableTaskStore);
|
|
69
|
+
return { didResolver, eventLog, stateIndex, dataStore, messageStore, resumableTaskStore, tenantGate };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Runs DWN SQL schema migrations if the data store is configured with a SQL
|
|
73
|
+
* backend. Creates a temporary Kysely instance, runs all pending migrations,
|
|
74
|
+
* then destroys it. The subsequent store `open()` calls will reuse the shared
|
|
75
|
+
* dialect/pool and find the schema already in place.
|
|
76
|
+
*/
|
|
77
|
+
async function runSqlMigrationsIfNeeded(config) {
|
|
78
|
+
// Skip if the data store config is a file path (plugin) or non-SQL backend
|
|
79
|
+
if (isFilePath(config.dataStore)) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
let storeUrl;
|
|
83
|
+
try {
|
|
84
|
+
storeUrl = new URL(config.dataStore);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return; // Not a valid URL — skip
|
|
88
|
+
}
|
|
89
|
+
const protocol = storeUrl.protocol.slice(0, -1);
|
|
90
|
+
const sqlBackends = [BackendTypes.SQLITE, BackendTypes.MYSQL, BackendTypes.POSTGRES];
|
|
91
|
+
if (!sqlBackends.includes(protocol)) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const dialect = getOrCreateDialect(storeUrl, config);
|
|
95
|
+
const db = new Kysely({ dialect });
|
|
96
|
+
try {
|
|
97
|
+
const applied = await runDwnStoreMigrations(db, dialect);
|
|
98
|
+
if (applied.length > 0) {
|
|
99
|
+
console.log(`DWN migrations applied: ${applied.join(', ')}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
// Don't destroy the Kysely instance if using a shared Postgres pool —
|
|
104
|
+
// the pool is cached in sharedDialectCache and will be reused by stores.
|
|
105
|
+
// Only destroy for non-cached dialects (SQLite, MySQL).
|
|
106
|
+
if (protocol !== BackendTypes.POSTGRES) {
|
|
107
|
+
await db.destroy();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
30
110
|
}
|
|
31
111
|
function getLevelStore(storeURI, storeType) {
|
|
32
112
|
switch (storeType) {
|
|
@@ -39,9 +119,9 @@ function getLevelStore(storeURI, storeType) {
|
|
|
39
119
|
blockstoreLocation: storeURI.host + storeURI.pathname + '/MESSAGESTORE',
|
|
40
120
|
indexLocation: storeURI.host + storeURI.pathname + '/INDEX',
|
|
41
121
|
});
|
|
42
|
-
case StoreType.
|
|
43
|
-
return new
|
|
44
|
-
location: storeURI.host + storeURI.pathname + '/
|
|
122
|
+
case StoreType.StateIndex:
|
|
123
|
+
return new StateIndexLevel({
|
|
124
|
+
location: storeURI.host + storeURI.pathname + '/STATEINDEX',
|
|
45
125
|
});
|
|
46
126
|
case StoreType.ResumableTaskStore:
|
|
47
127
|
return new ResumableTaskStoreLevel({
|
|
@@ -51,15 +131,15 @@ function getLevelStore(storeURI, storeType) {
|
|
|
51
131
|
throw new Error('Unexpected level store type');
|
|
52
132
|
}
|
|
53
133
|
}
|
|
54
|
-
function getSqlStore(connectionUrl, storeType) {
|
|
55
|
-
const dialect =
|
|
134
|
+
function getSqlStore(config, connectionUrl, storeType) {
|
|
135
|
+
const dialect = getOrCreateDialect(connectionUrl, config);
|
|
56
136
|
switch (storeType) {
|
|
57
137
|
case StoreType.DataStore:
|
|
58
138
|
return new DataStoreSql(dialect);
|
|
59
139
|
case StoreType.MessageStore:
|
|
60
140
|
return new MessageStoreSql(dialect);
|
|
61
|
-
case StoreType.
|
|
62
|
-
return new
|
|
141
|
+
case StoreType.StateIndex:
|
|
142
|
+
return new StateIndexSql(dialect);
|
|
63
143
|
case StoreType.ResumableTaskStore:
|
|
64
144
|
return new ResumableTaskStoreSql(dialect);
|
|
65
145
|
default:
|
|
@@ -73,7 +153,7 @@ function isFilePath(configString) {
|
|
|
73
153
|
const filePathPrefixes = ['/', './', '../'];
|
|
74
154
|
return filePathPrefixes.some(prefix => configString.startsWith(prefix));
|
|
75
155
|
}
|
|
76
|
-
async function getStore(storeConfigString, storeType) {
|
|
156
|
+
async function getStore(config, storeConfigString, storeType) {
|
|
77
157
|
if (isFilePath(storeConfigString)) {
|
|
78
158
|
return await loadStoreFromFilePath(storeConfigString, storeType);
|
|
79
159
|
}
|
|
@@ -85,7 +165,7 @@ async function getStore(storeConfigString, storeType) {
|
|
|
85
165
|
case BackendTypes.SQLITE:
|
|
86
166
|
case BackendTypes.MYSQL:
|
|
87
167
|
case BackendTypes.POSTGRES:
|
|
88
|
-
return getSqlStore(storeURI, storeType);
|
|
168
|
+
return getSqlStore(config, storeURI, storeType);
|
|
89
169
|
default:
|
|
90
170
|
throw invalidStorageSchemeMessage(storeURI.protocol);
|
|
91
171
|
}
|
|
@@ -97,7 +177,7 @@ async function loadStoreFromFilePath(filePath, storeType) {
|
|
|
97
177
|
switch (storeType) {
|
|
98
178
|
case StoreType.DataStore:
|
|
99
179
|
return await PluginLoader.loadPlugin(filePath);
|
|
100
|
-
case StoreType.
|
|
180
|
+
case StoreType.StateIndex:
|
|
101
181
|
return await PluginLoader.loadPlugin(filePath);
|
|
102
182
|
case StoreType.MessageStore:
|
|
103
183
|
return await PluginLoader.loadPlugin(filePath);
|
|
@@ -139,7 +219,7 @@ function invalidStorageSchemeMessage(protocol) {
|
|
|
139
219
|
schemes.push(value);
|
|
140
220
|
}
|
|
141
221
|
return ('Unknown storage protocol ' +
|
|
142
|
-
protocol.slice(0, 1) +
|
|
222
|
+
protocol.slice(0, -1) +
|
|
143
223
|
'! Please use one of: ' +
|
|
144
224
|
schemes.join(', ') +
|
|
145
225
|
'. For details, see README');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/storage.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EACL,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-ttl-cache.d.ts","sourceRoot":"","sources":["../../../../src/web5-connect/sql-ttl-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAkB;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAM;IAEtD,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,EAAE,CAAwB;IAClC,OAAO,CAAC,YAAY,CAAiB;IAErC,OAAO;IAKP;;OAEG;WACiB,MAAM,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;YAQvD,UAAU;IA0BxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;;OAGG;IACU,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3E;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"sql-ttl-cache.d.ts","sourceRoot":"","sources":["../../../../src/web5-connect/sql-ttl-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAkB;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAM;IAEtD,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,EAAE,CAAwB;IAClC,OAAO,CAAC,YAAY,CAAiB;IAErC,OAAO;IAKP;;OAEG;WACiB,MAAM,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;YAQvD,UAAU;IA0BxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;;OAGG;IACU,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3E;;OAEG;IACU,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA+B1D;;OAEG;IACU,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C;;OAEG;IACU,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CAMpD"}
|
|
@@ -83,7 +83,14 @@ export class SqlTtlCache {
|
|
|
83
83
|
this.delete(key); // no need to await
|
|
84
84
|
return undefined;
|
|
85
85
|
}
|
|
86
|
-
|
|
86
|
+
try {
|
|
87
|
+
return JSON.parse(entry.value);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Corrupt entry — remove it and return undefined.
|
|
91
|
+
this.delete(key); // no need to await
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
87
94
|
}
|
|
88
95
|
/**
|
|
89
96
|
* Deletes a cache entry.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-ttl-cache.js","sourceRoot":"","sources":["../../../../src/web5-connect/sql-ttl-cache.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sql-ttl-cache.js","sourceRoot":"","sources":["../../../../src/web5-connect/sql-ttl-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/src/ws-api.d.ts
CHANGED
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
import type { Dwn } from '@enbox/dwn-sdk-js';
|
|
2
|
+
import type { ActivityLog } from './admin/activity-log.js';
|
|
3
|
+
import type { AdminStore } from './admin/admin-store.js';
|
|
2
4
|
import type { ConnectionManager } from './connection/connection-manager.js';
|
|
5
|
+
import type { DwnServerConfig } from './config.js';
|
|
6
|
+
import type { MessageProcessedHook } from './message-processed-hook.js';
|
|
7
|
+
import type { RateLimiter } from './rate-limiter.js';
|
|
8
|
+
import type { RegistrationStore } from './registration/registration-store.js';
|
|
3
9
|
import type { HttpApi } from './http-api.js';
|
|
4
10
|
export declare class WsApi {
|
|
5
11
|
#private;
|
|
6
12
|
dwn: Dwn;
|
|
7
|
-
constructor(httpApi: HttpApi, dwn: Dwn, connectionManager?: ConnectionManager
|
|
13
|
+
constructor(httpApi: HttpApi, dwn: Dwn, connectionManager?: ConnectionManager, maxInFlight?: number, activityLog?: ActivityLog, options?: {
|
|
14
|
+
adminStore?: AdminStore;
|
|
15
|
+
registrationStore?: RegistrationStore;
|
|
16
|
+
config?: DwnServerConfig;
|
|
17
|
+
tenantRateLimiter?: RateLimiter;
|
|
18
|
+
messageProcessedHooks?: MessageProcessedHook[];
|
|
19
|
+
});
|
|
8
20
|
start(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Returns the connection manager. Used by the admin API for connection introspection.
|
|
23
|
+
*/
|
|
24
|
+
get connectionManager(): ConnectionManager;
|
|
9
25
|
close(): Promise<void>;
|
|
10
26
|
}
|
|
11
27
|
//# sourceMappingURL=ws-api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-api.d.ts","sourceRoot":"","sources":["../../../src/ws-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;AAIrD,qBAAa,KAAK;;IAChB,GAAG,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"ws-api.d.ts","sourceRoot":"","sources":["../../../src/ws-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,eAAe,CAAC;AAIrD,qBAAa,KAAK;;IAChB,GAAG,EAAE,GAAG,CAAC;gBAIP,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,EACjE,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,EAC/C,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAG,UAAU,CAAC;QACzB,iBAAiB,CAAC,EAAG,iBAAiB,CAAC;QACvC,MAAM,CAAC,EAAG,eAAe,CAAC;QAC1B,iBAAiB,CAAC,EAAG,WAAW,CAAC;QACjC,qBAAqB,CAAC,EAAG,oBAAoB,EAAE,CAAC;KACjD;IAgBH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,iBAAiB,IAAI,iBAAiB,CAEzC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
package/dist/esm/src/ws-api.js
CHANGED
|
@@ -2,9 +2,10 @@ import { InMemoryConnectionManager } from './connection/connection-manager.js';
|
|
|
2
2
|
export class WsApi {
|
|
3
3
|
dwn;
|
|
4
4
|
#connectionManager;
|
|
5
|
-
constructor(httpApi, dwn, connectionManager) {
|
|
5
|
+
constructor(httpApi, dwn, connectionManager, maxInFlight, activityLog, options) {
|
|
6
6
|
this.dwn = dwn;
|
|
7
|
-
this.#connectionManager = connectionManager ||
|
|
7
|
+
this.#connectionManager = connectionManager ||
|
|
8
|
+
new InMemoryConnectionManager(dwn, new Map(), maxInFlight, activityLog, options?.adminStore, options?.registrationStore, options?.config, options?.tenantRateLimiter, options?.messageProcessedHooks);
|
|
8
9
|
// Wire up the WebSocket open event from Bun.serve() to the connection manager.
|
|
9
10
|
httpApi.onWebSocketConnection = (ws) => {
|
|
10
11
|
this.#connectionManager.connect(ws);
|
|
@@ -13,6 +14,12 @@ export class WsApi {
|
|
|
13
14
|
start() {
|
|
14
15
|
// No additional setup needed — Bun.serve() handles WebSocket lifecycle.
|
|
15
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns the connection manager. Used by the admin API for connection introspection.
|
|
19
|
+
*/
|
|
20
|
+
get connectionManager() {
|
|
21
|
+
return this.#connectionManager;
|
|
22
|
+
}
|
|
16
23
|
async close() {
|
|
17
24
|
await this.#connectionManager.closeAll();
|
|
18
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-api.js","sourceRoot":"","sources":["../../../src/ws-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ws-api.js","sourceRoot":"","sources":["../../../src/ws-api.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAE/E,MAAM,OAAO,KAAK;IAChB,GAAG,CAAM;IACT,kBAAkB,CAAoB;IAEtC,YACE,OAAgB,EAAE,GAAQ,EAAE,iBAAqC,EACjE,WAAoB,EAAE,WAAyB,EAC/C,OAMC;QAED,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,kBAAkB,GAAG,iBAAiB;YACzC,IAAI,yBAAyB,CAC3B,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,WAAW,EAAE,WAAW,EACxC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAC5F,OAAO,EAAE,qBAAqB,CAC/B,CAAC;QAEJ,+EAA+E;QAC/E,OAAO,CAAC,qBAAqB,GAAG,CAAC,EAA2B,EAAQ,EAAE;YACpE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC;IAED,KAAK;QACH,wEAAwE;IAC1E,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enbox/dwn-server",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.5",
|
|
5
|
+
"license": "Apache-2.0",
|
|
5
6
|
"files": [
|
|
6
7
|
"dist",
|
|
7
8
|
"src"
|
|
@@ -29,12 +30,16 @@
|
|
|
29
30
|
"access": "public"
|
|
30
31
|
},
|
|
31
32
|
"dependencies": {
|
|
32
|
-
"@enbox/common": "
|
|
33
|
-
"@enbox/crypto": "
|
|
34
|
-
"@enbox/dids": "
|
|
35
|
-
"@enbox/dwn-
|
|
36
|
-
"@enbox/dwn-
|
|
33
|
+
"@enbox/common": "0.0.5",
|
|
34
|
+
"@enbox/crypto": "0.0.6",
|
|
35
|
+
"@enbox/dids": "0.0.7",
|
|
36
|
+
"@enbox/dwn-clients": "0.0.7",
|
|
37
|
+
"@enbox/dwn-sdk-js": "0.1.0",
|
|
38
|
+
"@enbox/dwn-sql-store": "0.0.9",
|
|
39
|
+
"@nats-io/jetstream": "^3.3.1",
|
|
40
|
+
"@nats-io/transport-node": "^3.3.1",
|
|
37
41
|
"bytes": "3.1.2",
|
|
42
|
+
"jose": "^6.1.3",
|
|
38
43
|
"kysely": "^0.26.3",
|
|
39
44
|
"loglevel": "^1.8.1",
|
|
40
45
|
"loglevel-plugin-prefix": "^0.8.4",
|
|
@@ -45,24 +50,21 @@
|
|
|
45
50
|
"uuid": "9.0.0",
|
|
46
51
|
"ws": "8.18.0"
|
|
47
52
|
},
|
|
53
|
+
"optionalDependencies": {
|
|
54
|
+
"@enbox/dwn-server-admin-ui": "0.1.0"
|
|
55
|
+
},
|
|
48
56
|
"devDependencies": {
|
|
49
57
|
"@types/bun": "^1.3.9",
|
|
50
58
|
"@types/bytes": "3.1.1",
|
|
51
|
-
"@types/
|
|
52
|
-
"@types/chai-as-promised": "7.1.5",
|
|
53
|
-
"@types/mocha": "10.0.1",
|
|
54
|
-
"@types/node": "18.11.18",
|
|
59
|
+
"@types/node": "20.14.8",
|
|
55
60
|
"@types/sinon": "17.0.3",
|
|
56
61
|
"@types/ws": "8.5.10",
|
|
57
62
|
"@typescript-eslint/eslint-plugin": "8.32.1",
|
|
58
63
|
"@typescript-eslint/parser": "8.32.1",
|
|
59
|
-
"
|
|
60
|
-
"chai": "4.3.6",
|
|
61
|
-
"chai-as-promised": "7.1.1",
|
|
64
|
+
"bun-types": "^1.2.4",
|
|
62
65
|
"crypto-browserify": "^3.12.0",
|
|
63
66
|
"esbuild": "0.16.17",
|
|
64
67
|
"eslint": "9.7.0",
|
|
65
|
-
"eslint-plugin-mocha": "^10.4.3",
|
|
66
68
|
"eslint-plugin-todo-plz": "^1.3.0",
|
|
67
69
|
"http-proxy": "^1.18.1",
|
|
68
70
|
"husky": "^8.0.0",
|
|
@@ -71,7 +73,6 @@
|
|
|
71
73
|
"karma-esbuild": "2.2.5",
|
|
72
74
|
"karma-mocha": "^2.0.1",
|
|
73
75
|
"lint-staged": "^15.2.9",
|
|
74
|
-
"mocha": "^10.2.0",
|
|
75
76
|
"multiformats": "11.0.2",
|
|
76
77
|
"puppeteer": "^22.11.2",
|
|
77
78
|
"rimraf": "^5.0.0",
|
|
@@ -84,7 +85,8 @@
|
|
|
84
85
|
"clean": "rimraf dist && rimraf generated/*",
|
|
85
86
|
"lint": "eslint . --max-warnings 0",
|
|
86
87
|
"lint:fix": "eslint . --fix",
|
|
87
|
-
"test": "bun
|
|
88
|
+
"test:node": "bun test .test.ts",
|
|
89
|
+
"test:node:coverage": "bun test --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir=coverage .test.ts",
|
|
88
90
|
"server": "bun run build:esm && bun dist/esm/src/main.js"
|
|
89
91
|
},
|
|
90
92
|
"husky": {
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { AdminActivityEvent } from './types.js';
|
|
2
|
+
|
|
3
|
+
/** Default maximum number of events retained in the ring buffer. */
|
|
4
|
+
export const DEFAULT_ACTIVITY_LOG_CAPACITY = 10_000;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* In-memory ring buffer that captures recent DWN request activity.
|
|
8
|
+
*
|
|
9
|
+
* Events are assigned a monotonically increasing `id` that acts as a cursor.
|
|
10
|
+
* When the buffer reaches capacity, the oldest events are evicted. This is
|
|
11
|
+
* **not** a persistent audit log — it is designed for real-time admin
|
|
12
|
+
* observability.
|
|
13
|
+
*/
|
|
14
|
+
export class ActivityLog {
|
|
15
|
+
readonly #capacity: number;
|
|
16
|
+
readonly #buffer: AdminActivityEvent[];
|
|
17
|
+
#nextId = 1;
|
|
18
|
+
|
|
19
|
+
constructor(capacity: number = DEFAULT_ACTIVITY_LOG_CAPACITY) {
|
|
20
|
+
this.#capacity = Math.max(1, capacity);
|
|
21
|
+
this.#buffer = [];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Records a new activity event. If the buffer is full, the oldest event is
|
|
26
|
+
* evicted.
|
|
27
|
+
*/
|
|
28
|
+
public record(event: Omit<AdminActivityEvent, 'id' | 'timestamp'>): void {
|
|
29
|
+
const entry: AdminActivityEvent = {
|
|
30
|
+
id : this.#nextId++,
|
|
31
|
+
timestamp : new Date().toISOString(),
|
|
32
|
+
tenant : event.tenant,
|
|
33
|
+
interface : event.interface,
|
|
34
|
+
method : event.method,
|
|
35
|
+
statusCode : event.statusCode,
|
|
36
|
+
transport : event.transport,
|
|
37
|
+
dataSizeBytes : event.dataSizeBytes,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
if (this.#buffer.length >= this.#capacity) {
|
|
41
|
+
this.#buffer.shift();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
this.#buffer.push(entry);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Returns recent events, optionally filtered by a cursor (returns events
|
|
49
|
+
* with `id > since`) and limited to `limit` entries.
|
|
50
|
+
*/
|
|
51
|
+
public getEvents(options?: {
|
|
52
|
+
since? : number;
|
|
53
|
+
limit? : number;
|
|
54
|
+
}): { events: AdminActivityEvent[]; cursor?: number } {
|
|
55
|
+
const since = options?.since ?? 0;
|
|
56
|
+
const limit = options?.limit ?? 50;
|
|
57
|
+
|
|
58
|
+
// Binary search for the start index (events are ordered by id).
|
|
59
|
+
let startIdx = 0;
|
|
60
|
+
if (since > 0 && this.#buffer.length > 0) {
|
|
61
|
+
let lo = 0;
|
|
62
|
+
let hi = this.#buffer.length;
|
|
63
|
+
while (lo < hi) {
|
|
64
|
+
const mid = (lo + hi) >>> 1;
|
|
65
|
+
if (this.#buffer[mid].id <= since) {
|
|
66
|
+
lo = mid + 1;
|
|
67
|
+
} else {
|
|
68
|
+
hi = mid;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
startIdx = lo;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const events = this.#buffer.slice(startIdx, startIdx + limit);
|
|
75
|
+
const cursor = events.length > 0 ? events[events.length - 1].id : undefined;
|
|
76
|
+
|
|
77
|
+
return { events, cursor };
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Returns the current number of events in the buffer.
|
|
82
|
+
*/
|
|
83
|
+
public get size(): number {
|
|
84
|
+
return this.#buffer.length;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Returns the configured capacity of the ring buffer.
|
|
89
|
+
*/
|
|
90
|
+
public get capacity(): number {
|
|
91
|
+
return this.#capacity;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Clears all events from the buffer.
|
|
96
|
+
*/
|
|
97
|
+
public clear(): void {
|
|
98
|
+
this.#buffer.length = 0;
|
|
99
|
+
}
|
|
100
|
+
}
|