@enbox/dwn-server 0.0.2 → 0.0.4
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 +115 -215
- 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 +124 -9
- package/dist/esm/src/config.d.ts.map +1 -1
- package/dist/esm/src/config.js +155 -13
- package/dist/esm/src/config.js.map +1 -1
- package/dist/esm/src/connection/connection-manager.d.ts +32 -9
- package/dist/esm/src/connection/connection-manager.d.ts.map +1 -1
- package/dist/esm/src/connection/connection-manager.js +38 -5
- 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 +54 -18
- package/dist/esm/src/connection/socket-connection.d.ts.map +1 -1
- package/dist/esm/src/connection/socket-connection.js +102 -40
- 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 +13 -6
- package/dist/esm/src/dwn-server.d.ts.map +1 -1
- package/dist/esm/src/dwn-server.js +199 -24
- package/dist/esm/src/dwn-server.js.map +1 -1
- package/dist/esm/src/http-api.d.ts +28 -13
- package/dist/esm/src/http-api.d.ts.map +1 -1
- package/dist/esm/src/http-api.js +649 -374
- 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 +109 -7
- 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 +25 -8
- 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 +14 -2
- 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/proof-of-work-manager.js +3 -3
- package/dist/esm/src/registration/proof-of-work-manager.js.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 +28 -5
- package/dist/esm/src/registration/registration-manager.d.ts.map +1 -1
- package/dist/esm/src/registration/registration-manager.js +83 -12
- 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 +5 -5
- package/dist/esm/src/storage.d.ts.map +1 -1
- package/dist/esm/src/storage.js +105 -24
- 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 +11 -3
- package/dist/esm/src/web5-connect/sql-ttl-cache.js.map +1 -1
- package/dist/esm/src/web5-connect/web5-connect-server.d.ts.map +1 -1
- package/dist/esm/src/web5-connect/web5-connect-server.js +2 -2
- package/dist/esm/src/web5-connect/web5-connect-server.js.map +1 -1
- package/dist/esm/src/ws-api.d.ts +18 -4
- package/dist/esm/src/ws-api.d.ts.map +1 -1
- package/dist/esm/src/ws-api.js +12 -16
- package/dist/esm/src/ws-api.js.map +1 -1
- package/package.json +34 -53
- 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 +190 -22
- package/src/connection/connection-manager.ts +67 -17
- package/src/connection/flow-controller.ts +117 -0
- package/src/connection/socket-connection.ts +144 -67
- package/src/delivery-service.ts +740 -0
- package/src/dwn-error.ts +11 -2
- package/src/dwn-server.ts +254 -39
- package/src/http-api.ts +736 -392
- package/src/index.ts +13 -2
- package/src/json-rpc-api.ts +2 -1
- package/src/json-rpc-handlers/dwn/process-message.ts +149 -15
- package/src/json-rpc-handlers/subscription/ack.ts +63 -0
- package/src/json-rpc-handlers/subscription/close.ts +5 -9
- package/src/json-rpc-handlers/subscription/index.ts +1 -0
- package/src/lib/json-rpc-router.ts +26 -11
- 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 +57 -8
- package/src/plugins/event-log-nats.ts +466 -0
- package/src/process-handlers.ts +5 -5
- 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 +11 -10
- package/src/registration/provider-auth-plugin.ts +84 -0
- package/src/registration/registration-manager.ts +129 -31
- package/src/registration/registration-store.ts +332 -22
- package/src/storage.ts +136 -40
- package/src/web5-connect/sql-ttl-cache.ts +12 -5
- package/src/web5-connect/web5-connect-server.ts +9 -8
- package/src/ws-api.ts +39 -26
- package/dist/cjs/index.js +0 -6811
- package/dist/cjs/package.json +0 -1
- 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/http-server-shutdown-handler.d.ts +0 -10
- package/dist/esm/src/lib/http-server-shutdown-handler.d.ts.map +0 -1
- package/dist/esm/src/lib/http-server-shutdown-handler.js +0 -65
- package/dist/esm/src/lib/http-server-shutdown-handler.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 -114
- 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 -47
- 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 -125
- 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 -49
- 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 -775
- 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 -225
- 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 -157
- 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 -73
- 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 -507
- 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 -137
- 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 -34
- package/dist/esm/tests/test-dwn.js.map +0 -1
- package/dist/esm/tests/utils.d.ts +0 -46
- package/dist/esm/tests/utils.d.ts.map +0 -1
- package/dist/esm/tests/utils.js +0 -116
- 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 -327
- package/dist/esm/tests/ws-api.spec.js.map +0 -1
- package/src/json-rpc-socket.ts +0 -155
- package/src/lib/http-server-shutdown-handler.ts +0 -79
- 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/config.d.ts
CHANGED
|
@@ -2,9 +2,6 @@ export type DwnServerConfig = typeof config;
|
|
|
2
2
|
export declare const config: {
|
|
3
3
|
/**
|
|
4
4
|
* Used to populate the `server` property returned by the `/info` endpoint.
|
|
5
|
-
*
|
|
6
|
-
* If running using `npm` the `process.env.npm_package_name` variable exists and we use that,
|
|
7
|
-
* otherwise we fall back on the use defined `DWN_SERVER_PACKAGE_NAME` or `@enbox/dwn-server`.
|
|
8
5
|
*/
|
|
9
6
|
serverName: string;
|
|
10
7
|
/**
|
|
@@ -30,26 +27,144 @@ export declare const config: {
|
|
|
30
27
|
* Used to populate the `version` and `sdkVersion` properties returned by the `/info` endpoint.
|
|
31
28
|
*
|
|
32
29
|
* The `version` and `sdkVersion` are pulled from `package.json` at runtime.
|
|
33
|
-
* If
|
|
34
|
-
* Otherwise we
|
|
35
|
-
* Finally if both of those options don't exist we resort to the path within the docker server image, located at `/dwn-server/package.json`
|
|
30
|
+
* If `DWN_SERVER_PACKAGE_JSON` is set, we use that path.
|
|
31
|
+
* Otherwise we resort to the path within the docker server image, located at `/dwn-server/package.json`.
|
|
36
32
|
*/
|
|
37
33
|
packageJsonPath: string;
|
|
34
|
+
/**
|
|
35
|
+
* Maximum size of data that can be provided with a RecordsWrite.
|
|
36
|
+
* Request bodies up to this size are buffered fully into memory, so the
|
|
37
|
+
* default should be conservative enough to prevent memory exhaustion from
|
|
38
|
+
* concurrent large uploads. Operators can raise the limit via the
|
|
39
|
+
* `MAX_RECORD_DATA_SIZE` env var (e.g. `'1gb'`).
|
|
40
|
+
*/
|
|
38
41
|
maxRecordDataSize: number;
|
|
42
|
+
/**
|
|
43
|
+
* Maximum number of unacknowledged subscription events the server will send
|
|
44
|
+
* per subscription before pausing delivery. Clients must send `rpc.ack` to
|
|
45
|
+
* advance the window. Configurable via `DWN_MAX_IN_FLIGHT` env var.
|
|
46
|
+
*/
|
|
47
|
+
maxInFlight: number;
|
|
39
48
|
webSocketSupport: boolean;
|
|
40
49
|
/**
|
|
41
|
-
* Path to DWN
|
|
50
|
+
* Path to DWN EventLog plugin to use. Default in-memory implementation will be used if left empty.
|
|
51
|
+
* Also accepts the legacy `DWN_EVENT_STREAM_PLUGIN_PATH` env var for backward compatibility.
|
|
42
52
|
*/
|
|
43
|
-
|
|
53
|
+
eventLogPluginPath: string;
|
|
44
54
|
messageStore: string;
|
|
45
55
|
dataStore: string;
|
|
46
|
-
|
|
56
|
+
stateIndex: string;
|
|
47
57
|
resumableTaskStore: string;
|
|
58
|
+
/**
|
|
59
|
+
* PostgreSQL connection pool tuning. When multiple DWN stores share the same
|
|
60
|
+
* Postgres connection URL, a single shared pool is used instead of one pool
|
|
61
|
+
* per store (which would be 4 pools x 10 default connections = 40 connections).
|
|
62
|
+
*/
|
|
63
|
+
pgPoolMin: number;
|
|
64
|
+
pgPoolMax: number;
|
|
65
|
+
pgPoolIdleTimeout: number;
|
|
48
66
|
registrationStoreUrl: string;
|
|
49
67
|
registrationProofOfWorkSeed: string;
|
|
50
68
|
registrationProofOfWorkEnabled: boolean;
|
|
51
69
|
registrationProofOfWorkInitialMaxHash: string;
|
|
52
70
|
termsOfServiceFilePath: string;
|
|
71
|
+
providerAuthEnabled: boolean;
|
|
72
|
+
providerAuthAuthorizeUrl: string;
|
|
73
|
+
providerAuthTokenUrl: string;
|
|
74
|
+
providerAuthRefreshUrl: string;
|
|
75
|
+
providerAuthManagementUrl: string;
|
|
76
|
+
providerAuthPluginPath: string;
|
|
77
|
+
providerAuthJwtSecret: string;
|
|
78
|
+
providerAuthJwtJwksUrl: string;
|
|
53
79
|
logLevel: string;
|
|
80
|
+
/**
|
|
81
|
+
* Bearer token for the admin API. If unset (or empty), the admin API is disabled entirely.
|
|
82
|
+
* Can also be read from a file path via `DWN_ADMIN_TOKEN_FILE` (useful for Docker secrets).
|
|
83
|
+
*/
|
|
84
|
+
adminToken: string;
|
|
85
|
+
/**
|
|
86
|
+
* Maximum number of recent DWN activity events retained in the in-memory
|
|
87
|
+
* ring buffer for the admin `/events` endpoint. Defaults to 10,000.
|
|
88
|
+
*/
|
|
89
|
+
adminActivityLogCapacity: number;
|
|
90
|
+
/**
|
|
91
|
+
* Interval (in seconds) at which Prometheus gauge metrics are updated from
|
|
92
|
+
* the admin store. Defaults to 30 seconds.
|
|
93
|
+
*/
|
|
94
|
+
adminMetricsUpdateIntervalSeconds: number;
|
|
95
|
+
/**
|
|
96
|
+
* Default maximum number of messages a tenant may store. 0 = unlimited (default).
|
|
97
|
+
* Per-tenant overrides are managed via the admin API.
|
|
98
|
+
*/
|
|
99
|
+
quotaMaxMessages: number;
|
|
100
|
+
/**
|
|
101
|
+
* Default maximum data storage in bytes a tenant may use. 0 = unlimited (default).
|
|
102
|
+
* Per-tenant overrides are managed via the admin API.
|
|
103
|
+
*/
|
|
104
|
+
quotaMaxStorageBytes: number;
|
|
105
|
+
/**
|
|
106
|
+
* Maximum age of audit log entries in days. Entries older than this are purged.
|
|
107
|
+
* 0 = no age limit (default: 90 days).
|
|
108
|
+
*
|
|
109
|
+
* @see https://github.com/enboxorg/enbox/issues/394
|
|
110
|
+
*/
|
|
111
|
+
auditLogMaxAgeDays: number;
|
|
112
|
+
/**
|
|
113
|
+
* Maximum number of audit log rows to retain. Oldest entries are purged when exceeded.
|
|
114
|
+
* 0 = no row limit (default: 100000).
|
|
115
|
+
*
|
|
116
|
+
* @see https://github.com/enboxorg/enbox/issues/394
|
|
117
|
+
*/
|
|
118
|
+
auditLogMaxRows: number;
|
|
119
|
+
/**
|
|
120
|
+
* Maximum HTTP requests per second per IP address. Set to 0 to disable.
|
|
121
|
+
* Defaults to 30 req/s which is generous for normal usage while limiting abuse.
|
|
122
|
+
* Can be reconfigured at runtime via the admin `PATCH /config` endpoint.
|
|
123
|
+
*/
|
|
124
|
+
rateLimitRequestsPerSecond: number;
|
|
125
|
+
/**
|
|
126
|
+
* Maximum burst size for per-IP rate limiting. Allows short spikes above the
|
|
127
|
+
* sustained rate without triggering 429s. Defaults to 50.
|
|
128
|
+
*/
|
|
129
|
+
rateLimitBurst: number;
|
|
130
|
+
/**
|
|
131
|
+
* Maximum DWN requests per second per tenant DID. Set to 0 to disable.
|
|
132
|
+
* Defaults to 20 req/s. Applies to both HTTP and WebSocket transports.
|
|
133
|
+
* Can be reconfigured at runtime via the admin `PATCH /config` endpoint.
|
|
134
|
+
*/
|
|
135
|
+
rateLimitTenantRequestsPerSecond: number;
|
|
136
|
+
/**
|
|
137
|
+
* Maximum burst size for per-tenant rate limiting. Defaults to 50.
|
|
138
|
+
*/
|
|
139
|
+
rateLimitTenantBurst: number;
|
|
140
|
+
/**
|
|
141
|
+
* Enable endpoint forwarding: when a RecordsWrite/RecordsDelete is processed,
|
|
142
|
+
* forward the original signed message to the tenant's other DWN service
|
|
143
|
+
* endpoints (discovered via DID resolution). Disabled by default.
|
|
144
|
+
*/
|
|
145
|
+
forwardingEnabled: boolean;
|
|
146
|
+
/**
|
|
147
|
+
* Enable protocol-aware record delivery: when a RecordsWrite/RecordsDelete is
|
|
148
|
+
* processed at a protocol path with `$delivery`, proactively deliver to
|
|
149
|
+
* participants' DWN endpoints. Disabled by default.
|
|
150
|
+
*/
|
|
151
|
+
deliveryEnabled: boolean;
|
|
152
|
+
/**
|
|
153
|
+
* Maximum number of concurrent outbound delivery/forwarding requests.
|
|
154
|
+
* Prevents unbounded parallelism when delivering to many providers.
|
|
155
|
+
* Defaults to 10.
|
|
156
|
+
*/
|
|
157
|
+
deliveryMaxConcurrency: number;
|
|
158
|
+
/**
|
|
159
|
+
* TTL in seconds for caching DID document service endpoint resolution results.
|
|
160
|
+
* Avoids resolving the same DID document on every delivery. Defaults to 300 (5 min).
|
|
161
|
+
*/
|
|
162
|
+
deliveryEndpointCacheTtlSeconds: number;
|
|
163
|
+
/**
|
|
164
|
+
* TTL in seconds for the recently-forwarded messageCid deduplication cache.
|
|
165
|
+
* Messages with CIDs in this cache are not forwarded again, reducing redundant
|
|
166
|
+
* outbound requests between peer endpoints. Defaults to 60.
|
|
167
|
+
*/
|
|
168
|
+
forwardingDeduplicationTtlSeconds: number;
|
|
54
169
|
};
|
|
55
170
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG,OAAO,MAAM,CAAC;AAE5C,eAAO,MAAM,MAAM;IACjB;;OAEG;;IAGH;;;;OAIG;;IAGH;;OAEG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;OAMG;;IAEH;;;;;;OAMG;;IAGH;;;;OAIG;;;IAMH;;;OAGG;;;;;;IASH;;;;OAIG;;;;;;;;;;;;;;;;;;IAyBH;;;OAGG;;IAOH;;;OAGG;;IAGH;;;OAGG;;IAOH;;;OAGG;;IAGH;;;OAGG;;IAOH;;;;;OAKG;;IAGH;;;;;OAKG;;IAOH;;;;OAIG;;IAGH;;;OAGG;;IAGH;;;;OAIG;;IAGH;;OAEG;;IAOH;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;;OAIG;;IAGH;;;OAGG;;IAGH;;;;OAIG;;CAEJ,CAAC"}
|
package/dist/esm/src/config.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
1
2
|
import bytes from 'bytes';
|
|
2
3
|
export const config = {
|
|
3
4
|
/**
|
|
4
5
|
* Used to populate the `server` property returned by the `/info` endpoint.
|
|
5
|
-
*
|
|
6
|
-
* If running using `npm` the `process.env.npm_package_name` variable exists and we use that,
|
|
7
|
-
* otherwise we fall back on the use defined `DWN_SERVER_PACKAGE_NAME` or `@enbox/dwn-server`.
|
|
8
6
|
*/
|
|
9
|
-
serverName: process.env.
|
|
7
|
+
serverName: process.env.DWN_SERVER_PACKAGE_NAME || '@enbox/dwn-server',
|
|
10
8
|
/**
|
|
11
9
|
* The base external URL of this DWN.
|
|
12
10
|
* This is used to construct URL paths such as the `Request URI` in the Web5 Connect flow.
|
|
@@ -30,31 +28,175 @@ export const config = {
|
|
|
30
28
|
* Used to populate the `version` and `sdkVersion` properties returned by the `/info` endpoint.
|
|
31
29
|
*
|
|
32
30
|
* The `version` and `sdkVersion` are pulled from `package.json` at runtime.
|
|
33
|
-
* If
|
|
34
|
-
* Otherwise we
|
|
35
|
-
|
|
31
|
+
* If `DWN_SERVER_PACKAGE_JSON` is set, we use that path.
|
|
32
|
+
* Otherwise we resort to the path within the docker server image, located at `/dwn-server/package.json`.
|
|
33
|
+
*/
|
|
34
|
+
packageJsonPath: process.env.DWN_SERVER_PACKAGE_JSON || '/dwn-server/package.json',
|
|
35
|
+
/**
|
|
36
|
+
* Maximum size of data that can be provided with a RecordsWrite.
|
|
37
|
+
* Request bodies up to this size are buffered fully into memory, so the
|
|
38
|
+
* default should be conservative enough to prevent memory exhaustion from
|
|
39
|
+
* concurrent large uploads. Operators can raise the limit via the
|
|
40
|
+
* `MAX_RECORD_DATA_SIZE` env var (e.g. `'1gb'`).
|
|
36
41
|
*/
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
maxRecordDataSize: bytes(process.env.MAX_RECORD_DATA_SIZE || '100mb'),
|
|
43
|
+
/**
|
|
44
|
+
* Maximum number of unacknowledged subscription events the server will send
|
|
45
|
+
* per subscription before pausing delivery. Clients must send `rpc.ack` to
|
|
46
|
+
* advance the window. Configurable via `DWN_MAX_IN_FLIGHT` env var.
|
|
47
|
+
*/
|
|
48
|
+
maxInFlight: parseInt(process.env.DWN_MAX_IN_FLIGHT || '32'),
|
|
40
49
|
// whether to enable 'ws:'
|
|
41
50
|
webSocketSupport: { on: true, off: false }[process.env.DS_WEBSOCKET_SERVER] ?? true,
|
|
42
51
|
/**
|
|
43
|
-
* Path to DWN
|
|
52
|
+
* Path to DWN EventLog plugin to use. Default in-memory implementation will be used if left empty.
|
|
53
|
+
* Also accepts the legacy `DWN_EVENT_STREAM_PLUGIN_PATH` env var for backward compatibility.
|
|
44
54
|
*/
|
|
45
|
-
|
|
55
|
+
eventLogPluginPath: process.env.DWN_EVENT_LOG_PLUGIN_PATH || process.env.DWN_EVENT_STREAM_PLUGIN_PATH,
|
|
46
56
|
// where to store persistent data
|
|
47
57
|
messageStore: process.env.DWN_STORAGE_MESSAGES || process.env.DWN_STORAGE || 'level://data',
|
|
48
58
|
dataStore: process.env.DWN_STORAGE_DATA || process.env.DWN_STORAGE || 'level://data',
|
|
49
|
-
|
|
59
|
+
stateIndex: process.env.DWN_STORAGE_STATE_INDEX || process.env.DWN_STORAGE || 'level://data',
|
|
50
60
|
resumableTaskStore: process.env.DWN_STORAGE_RESUMABLE_TASKS || process.env.DWN_STORAGE || 'level://data',
|
|
61
|
+
/**
|
|
62
|
+
* PostgreSQL connection pool tuning. When multiple DWN stores share the same
|
|
63
|
+
* Postgres connection URL, a single shared pool is used instead of one pool
|
|
64
|
+
* per store (which would be 4 pools x 10 default connections = 40 connections).
|
|
65
|
+
*/
|
|
66
|
+
pgPoolMin: parseInt(process.env.DWN_PG_POOL_MIN || '5'),
|
|
67
|
+
pgPoolMax: parseInt(process.env.DWN_PG_POOL_MAX || '30'),
|
|
68
|
+
pgPoolIdleTimeout: parseInt(process.env.DWN_PG_POOL_IDLE_TIMEOUT || '30000'),
|
|
51
69
|
// tenant registration feature configuration
|
|
52
70
|
registrationStoreUrl: process.env.DWN_REGISTRATION_STORE_URL || process.env.DWN_STORAGE,
|
|
53
71
|
registrationProofOfWorkSeed: process.env.DWN_REGISTRATION_PROOF_OF_WORK_SEED,
|
|
54
72
|
registrationProofOfWorkEnabled: process.env.DWN_REGISTRATION_PROOF_OF_WORK_ENABLED === 'true',
|
|
55
73
|
registrationProofOfWorkInitialMaxHash: process.env.DWN_REGISTRATION_PROOF_OF_WORK_INITIAL_MAX_HASH,
|
|
56
74
|
termsOfServiceFilePath: process.env.DWN_TERMS_OF_SERVICE_FILE_PATH,
|
|
75
|
+
// Provider auth configuration for paid DWN registration
|
|
76
|
+
providerAuthEnabled: process.env.DWN_PROVIDER_AUTH_ENABLED === 'true',
|
|
77
|
+
providerAuthAuthorizeUrl: process.env.DWN_PROVIDER_AUTH_AUTHORIZE_URL,
|
|
78
|
+
providerAuthTokenUrl: process.env.DWN_PROVIDER_AUTH_TOKEN_URL,
|
|
79
|
+
providerAuthRefreshUrl: process.env.DWN_PROVIDER_AUTH_REFRESH_URL,
|
|
80
|
+
providerAuthManagementUrl: process.env.DWN_PROVIDER_AUTH_MANAGEMENT_URL,
|
|
81
|
+
providerAuthPluginPath: process.env.DWN_PROVIDER_AUTH_PLUGIN_PATH,
|
|
82
|
+
providerAuthJwtSecret: process.env.DWN_PROVIDER_AUTH_JWT_SECRET,
|
|
83
|
+
providerAuthJwtJwksUrl: process.env.DWN_PROVIDER_AUTH_JWT_JWKS_URL,
|
|
57
84
|
// log level - trace/debug/info/warn/error
|
|
58
85
|
logLevel: process.env.DWN_SERVER_LOG_LEVEL || 'INFO',
|
|
86
|
+
/**
|
|
87
|
+
* Bearer token for the admin API. If unset (or empty), the admin API is disabled entirely.
|
|
88
|
+
* Can also be read from a file path via `DWN_ADMIN_TOKEN_FILE` (useful for Docker secrets).
|
|
89
|
+
*/
|
|
90
|
+
adminToken: process.env.DWN_ADMIN_TOKEN || (process.env.DWN_ADMIN_TOKEN_FILE
|
|
91
|
+
? readAdminTokenFromFile(process.env.DWN_ADMIN_TOKEN_FILE)
|
|
92
|
+
: undefined),
|
|
93
|
+
/**
|
|
94
|
+
* Maximum number of recent DWN activity events retained in the in-memory
|
|
95
|
+
* ring buffer for the admin `/events` endpoint. Defaults to 10,000.
|
|
96
|
+
*/
|
|
97
|
+
adminActivityLogCapacity: parseInt(process.env.DWN_ADMIN_ACTIVITY_LOG_CAPACITY || '10000'),
|
|
98
|
+
/**
|
|
99
|
+
* Interval (in seconds) at which Prometheus gauge metrics are updated from
|
|
100
|
+
* the admin store. Defaults to 30 seconds.
|
|
101
|
+
*/
|
|
102
|
+
adminMetricsUpdateIntervalSeconds: parseInt(process.env.DWN_ADMIN_METRICS_UPDATE_INTERVAL || '30'),
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
// Per-tenant storage quotas
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
/**
|
|
107
|
+
* Default maximum number of messages a tenant may store. 0 = unlimited (default).
|
|
108
|
+
* Per-tenant overrides are managed via the admin API.
|
|
109
|
+
*/
|
|
110
|
+
quotaMaxMessages: parseInt(process.env.DWN_QUOTA_MAX_MESSAGES || '0'),
|
|
111
|
+
/**
|
|
112
|
+
* Default maximum data storage in bytes a tenant may use. 0 = unlimited (default).
|
|
113
|
+
* Per-tenant overrides are managed via the admin API.
|
|
114
|
+
*/
|
|
115
|
+
quotaMaxStorageBytes: parseInt(process.env.DWN_QUOTA_MAX_STORAGE_BYTES || '0'),
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
// Audit log retention
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
/**
|
|
120
|
+
* Maximum age of audit log entries in days. Entries older than this are purged.
|
|
121
|
+
* 0 = no age limit (default: 90 days).
|
|
122
|
+
*
|
|
123
|
+
* @see https://github.com/enboxorg/enbox/issues/394
|
|
124
|
+
*/
|
|
125
|
+
auditLogMaxAgeDays: parseInt(process.env.DWN_AUDIT_LOG_MAX_AGE_DAYS || '90'),
|
|
126
|
+
/**
|
|
127
|
+
* Maximum number of audit log rows to retain. Oldest entries are purged when exceeded.
|
|
128
|
+
* 0 = no row limit (default: 100000).
|
|
129
|
+
*
|
|
130
|
+
* @see https://github.com/enboxorg/enbox/issues/394
|
|
131
|
+
*/
|
|
132
|
+
auditLogMaxRows: parseInt(process.env.DWN_AUDIT_LOG_MAX_ROWS || '100000'),
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
134
|
+
// Rate limiting
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
/**
|
|
137
|
+
* Maximum HTTP requests per second per IP address. Set to 0 to disable.
|
|
138
|
+
* Defaults to 30 req/s which is generous for normal usage while limiting abuse.
|
|
139
|
+
* Can be reconfigured at runtime via the admin `PATCH /config` endpoint.
|
|
140
|
+
*/
|
|
141
|
+
rateLimitRequestsPerSecond: parseInt(process.env.DWN_RATE_LIMIT_REQUESTS_PER_SECOND || '30'),
|
|
142
|
+
/**
|
|
143
|
+
* Maximum burst size for per-IP rate limiting. Allows short spikes above the
|
|
144
|
+
* sustained rate without triggering 429s. Defaults to 50.
|
|
145
|
+
*/
|
|
146
|
+
rateLimitBurst: parseInt(process.env.DWN_RATE_LIMIT_BURST || '50'),
|
|
147
|
+
/**
|
|
148
|
+
* Maximum DWN requests per second per tenant DID. Set to 0 to disable.
|
|
149
|
+
* Defaults to 20 req/s. Applies to both HTTP and WebSocket transports.
|
|
150
|
+
* Can be reconfigured at runtime via the admin `PATCH /config` endpoint.
|
|
151
|
+
*/
|
|
152
|
+
rateLimitTenantRequestsPerSecond: parseInt(process.env.DWN_RATE_LIMIT_TENANT_REQUESTS_PER_SECOND || '20'),
|
|
153
|
+
/**
|
|
154
|
+
* Maximum burst size for per-tenant rate limiting. Defaults to 50.
|
|
155
|
+
*/
|
|
156
|
+
rateLimitTenantBurst: parseInt(process.env.DWN_RATE_LIMIT_TENANT_BURST || '50'),
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
// Record delivery & endpoint forwarding
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
/**
|
|
161
|
+
* Enable endpoint forwarding: when a RecordsWrite/RecordsDelete is processed,
|
|
162
|
+
* forward the original signed message to the tenant's other DWN service
|
|
163
|
+
* endpoints (discovered via DID resolution). Disabled by default.
|
|
164
|
+
*/
|
|
165
|
+
forwardingEnabled: process.env.DWN_FORWARDING_ENABLED === 'true',
|
|
166
|
+
/**
|
|
167
|
+
* Enable protocol-aware record delivery: when a RecordsWrite/RecordsDelete is
|
|
168
|
+
* processed at a protocol path with `$delivery`, proactively deliver to
|
|
169
|
+
* participants' DWN endpoints. Disabled by default.
|
|
170
|
+
*/
|
|
171
|
+
deliveryEnabled: process.env.DWN_DELIVERY_ENABLED === 'true',
|
|
172
|
+
/**
|
|
173
|
+
* Maximum number of concurrent outbound delivery/forwarding requests.
|
|
174
|
+
* Prevents unbounded parallelism when delivering to many providers.
|
|
175
|
+
* Defaults to 10.
|
|
176
|
+
*/
|
|
177
|
+
deliveryMaxConcurrency: parseInt(process.env.DWN_DELIVERY_MAX_CONCURRENCY || '10'),
|
|
178
|
+
/**
|
|
179
|
+
* TTL in seconds for caching DID document service endpoint resolution results.
|
|
180
|
+
* Avoids resolving the same DID document on every delivery. Defaults to 300 (5 min).
|
|
181
|
+
*/
|
|
182
|
+
deliveryEndpointCacheTtlSeconds: parseInt(process.env.DWN_DELIVERY_ENDPOINT_CACHE_TTL || '300'),
|
|
183
|
+
/**
|
|
184
|
+
* TTL in seconds for the recently-forwarded messageCid deduplication cache.
|
|
185
|
+
* Messages with CIDs in this cache are not forwarded again, reducing redundant
|
|
186
|
+
* outbound requests between peer endpoints. Defaults to 60.
|
|
187
|
+
*/
|
|
188
|
+
forwardingDeduplicationTtlSeconds: parseInt(process.env.DWN_FORWARDING_DEDUP_TTL || '60'),
|
|
59
189
|
};
|
|
190
|
+
/**
|
|
191
|
+
* Reads the admin token from a file path, trimming whitespace.
|
|
192
|
+
* Returns `undefined` if the file cannot be read.
|
|
193
|
+
*/
|
|
194
|
+
function readAdminTokenFromFile(filePath) {
|
|
195
|
+
try {
|
|
196
|
+
return readFileSync(filePath).toString().trim() || undefined;
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
60
202
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,48 @@
|
|
|
1
|
-
import type { Dwn } from
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import {
|
|
1
|
+
import type { Dwn } from '@enbox/dwn-sdk-js';
|
|
2
|
+
import type { ServerWebSocket } from 'bun';
|
|
3
|
+
import type { ActivityLog } from '../admin/activity-log.js';
|
|
4
|
+
import type { AdminConnectionSnapshot } from '../admin/types.js';
|
|
5
|
+
import type { AdminStore } from '../admin/admin-store.js';
|
|
6
|
+
import type { DwnServerConfig } from '../config.js';
|
|
7
|
+
import type { MessageProcessedHook } from '../message-processed-hook.js';
|
|
8
|
+
import type { RateLimiter } from '../rate-limiter.js';
|
|
9
|
+
import type { RegistrationStore } from '../registration/registration-store.js';
|
|
10
|
+
import type { WsData } from '../http-api.js';
|
|
11
|
+
import { SocketConnection } from './socket-connection.js';
|
|
5
12
|
/**
|
|
6
13
|
* Interface for managing `WebSocket` connections as they arrive.
|
|
7
14
|
*/
|
|
8
15
|
export interface ConnectionManager {
|
|
9
|
-
/** connect handler
|
|
10
|
-
connect(socket:
|
|
16
|
+
/** connect handler invoked when a new WebSocket connection is established. */
|
|
17
|
+
connect(socket: ServerWebSocket<WsData>): Promise<void>;
|
|
11
18
|
/** closes all of the connections */
|
|
12
19
|
closeAll(): Promise<void>;
|
|
20
|
+
/** Returns the number of active connections. */
|
|
21
|
+
getConnectionCount(): number;
|
|
22
|
+
/** Returns the total number of active subscriptions across all connections. */
|
|
23
|
+
getSubscriptionCount(): number;
|
|
24
|
+
/** Returns serializable snapshots of all active connections. */
|
|
25
|
+
getConnectionSnapshots(): AdminConnectionSnapshot[];
|
|
13
26
|
}
|
|
14
27
|
/**
|
|
15
28
|
* A Simple In Memory ConnectionManager implementation.
|
|
16
|
-
* It uses a `Map<
|
|
29
|
+
* It uses a `Map<ServerWebSocket, SocketConnection>` to manage connections.
|
|
17
30
|
*/
|
|
18
31
|
export declare class InMemoryConnectionManager implements ConnectionManager {
|
|
19
32
|
private dwn;
|
|
20
33
|
private connections;
|
|
21
|
-
|
|
22
|
-
|
|
34
|
+
private maxInFlight?;
|
|
35
|
+
private activityLog?;
|
|
36
|
+
private adminStore?;
|
|
37
|
+
private registrationStore?;
|
|
38
|
+
private serverConfig?;
|
|
39
|
+
private tenantRateLimiter?;
|
|
40
|
+
private messageProcessedHooks?;
|
|
41
|
+
constructor(dwn: Dwn, connections?: Map<ServerWebSocket<WsData>, SocketConnection>, maxInFlight?: number, activityLog?: ActivityLog, adminStore?: AdminStore, registrationStore?: RegistrationStore, serverConfig?: DwnServerConfig, tenantRateLimiter?: RateLimiter, messageProcessedHooks?: MessageProcessedHook[]);
|
|
42
|
+
connect(socket: ServerWebSocket<WsData>): Promise<void>;
|
|
23
43
|
closeAll(): Promise<void>;
|
|
44
|
+
getConnectionCount(): number;
|
|
45
|
+
getSubscriptionCount(): number;
|
|
46
|
+
getConnectionSnapshots(): AdminConnectionSnapshot[];
|
|
24
47
|
}
|
|
25
48
|
//# sourceMappingURL=connection-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../../../src/connection/connection-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../../../src/connection/connection-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,oCAAoC;IACpC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,gDAAgD;IAChD,kBAAkB,IAAI,MAAM,CAAC;IAC7B,+EAA+E;IAC/E,oBAAoB,IAAI,MAAM,CAAC;IAC/B,gEAAgE;IAChE,sBAAsB,IAAI,uBAAuB,EAAE,CAAC;CACrD;AAED;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,iBAAiB;IAE/D,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,UAAU,CAAC;IACnB,OAAO,CAAC,iBAAiB,CAAC;IAC1B,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,iBAAiB,CAAC;IAC1B,OAAO,CAAC,qBAAqB,CAAC;gBARtB,GAAG,EAAE,GAAG,EACR,WAAW,GAAE,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAa,EACvE,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,UAAU,EACvB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,YAAY,CAAC,EAAE,eAAe,EAC9B,iBAAiB,CAAC,EAAE,WAAW,EAC/B,qBAAqB,CAAC,EAAE,oBAAoB,EAAE;IAGlD,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,kBAAkB,IAAI,MAAM;IAI5B,oBAAoB,IAAI,MAAM;IAQ9B,sBAAsB,IAAI,uBAAuB,EAAE;CAOpD"}
|
|
@@ -1,26 +1,59 @@
|
|
|
1
|
-
import { SocketConnection } from
|
|
1
|
+
import { SocketConnection } from './socket-connection.js';
|
|
2
2
|
/**
|
|
3
3
|
* A Simple In Memory ConnectionManager implementation.
|
|
4
|
-
* It uses a `Map<
|
|
4
|
+
* It uses a `Map<ServerWebSocket, SocketConnection>` to manage connections.
|
|
5
5
|
*/
|
|
6
6
|
export class InMemoryConnectionManager {
|
|
7
7
|
dwn;
|
|
8
8
|
connections;
|
|
9
|
-
|
|
9
|
+
maxInFlight;
|
|
10
|
+
activityLog;
|
|
11
|
+
adminStore;
|
|
12
|
+
registrationStore;
|
|
13
|
+
serverConfig;
|
|
14
|
+
tenantRateLimiter;
|
|
15
|
+
messageProcessedHooks;
|
|
16
|
+
constructor(dwn, connections = new Map(), maxInFlight, activityLog, adminStore, registrationStore, serverConfig, tenantRateLimiter, messageProcessedHooks) {
|
|
10
17
|
this.dwn = dwn;
|
|
11
18
|
this.connections = connections;
|
|
19
|
+
this.maxInFlight = maxInFlight;
|
|
20
|
+
this.activityLog = activityLog;
|
|
21
|
+
this.adminStore = adminStore;
|
|
22
|
+
this.registrationStore = registrationStore;
|
|
23
|
+
this.serverConfig = serverConfig;
|
|
24
|
+
this.tenantRateLimiter = tenantRateLimiter;
|
|
25
|
+
this.messageProcessedHooks = messageProcessedHooks;
|
|
12
26
|
}
|
|
13
27
|
async connect(socket) {
|
|
14
28
|
const connection = new SocketConnection(socket, this.dwn, () => {
|
|
15
29
|
// this is the onClose handler to clean up any closed connections.
|
|
16
30
|
this.connections.delete(socket);
|
|
17
|
-
});
|
|
31
|
+
}, this.maxInFlight, this.activityLog, this.adminStore, this.registrationStore, this.serverConfig, this.tenantRateLimiter, this.messageProcessedHooks);
|
|
32
|
+
// Attach the connection to the ws.data so Bun's websocket handlers can delegate to it.
|
|
33
|
+
socket.data.connection = connection;
|
|
18
34
|
this.connections.set(socket, connection);
|
|
19
35
|
}
|
|
20
36
|
async closeAll() {
|
|
21
37
|
const closePromises = [];
|
|
22
|
-
this.connections.forEach(connection => closePromises.push(connection.close()));
|
|
38
|
+
this.connections.forEach((connection) => closePromises.push(connection.close()));
|
|
23
39
|
await Promise.all(closePromises);
|
|
24
40
|
}
|
|
41
|
+
getConnectionCount() {
|
|
42
|
+
return this.connections.size;
|
|
43
|
+
}
|
|
44
|
+
getSubscriptionCount() {
|
|
45
|
+
let count = 0;
|
|
46
|
+
this.connections.forEach((conn) => {
|
|
47
|
+
count += conn.subscriptionCount;
|
|
48
|
+
});
|
|
49
|
+
return count;
|
|
50
|
+
}
|
|
51
|
+
getConnectionSnapshots() {
|
|
52
|
+
const snapshots = [];
|
|
53
|
+
this.connections.forEach((conn) => {
|
|
54
|
+
snapshots.push(conn.toSnapshot());
|
|
55
|
+
});
|
|
56
|
+
return snapshots;
|
|
57
|
+
}
|
|
25
58
|
}
|
|
26
59
|
//# sourceMappingURL=connection-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-manager.js","sourceRoot":"","sources":["../../../../src/connection/connection-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connection-manager.js","sourceRoot":"","sources":["../../../../src/connection/connection-manager.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAkB1D;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IAE1B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IATV,YACU,GAAQ,EACR,cAA8D,IAAI,GAAG,EAAE,EACvE,WAAoB,EACpB,WAAyB,EACzB,UAAuB,EACvB,iBAAqC,EACrC,YAA8B,EAC9B,iBAA+B,EAC/B,qBAA8C;QAR9C,QAAG,GAAH,GAAG,CAAK;QACR,gBAAW,GAAX,WAAW,CAA4D;QACvE,gBAAW,GAAX,WAAW,CAAS;QACpB,gBAAW,GAAX,WAAW,CAAc;QACzB,eAAU,GAAV,UAAU,CAAa;QACvB,sBAAiB,GAAjB,iBAAiB,CAAoB;QACrC,iBAAY,GAAZ,YAAY,CAAkB;QAC9B,sBAAiB,GAAjB,iBAAiB,CAAc;QAC/B,0BAAqB,GAArB,qBAAqB,CAAyB;IACrD,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,MAA+B;QAC3C,MAAM,UAAU,GAAG,IAAI,gBAAgB,CACrC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE;YACrB,kEAAkE;YAClE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,EACD,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAClC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,qBAAqB,CAC/G,CAAC;QAEF,uFAAuF;QACvF,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAEpC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,aAAa,GAAoB,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACjF,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,oBAAoB;QAClB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAChC,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sBAAsB;QACpB,MAAM,SAAS,GAA8B,EAAE,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAChC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { SubscriptionMessage } from '@enbox/dwn-sdk-js';
|
|
2
|
+
import type { JsonRpcId, JsonRpcSuccessResponse } from '@enbox/dwn-clients';
|
|
3
|
+
/** Default maximum number of unacknowledged events before pausing delivery. */
|
|
4
|
+
export declare const DEFAULT_MAX_IN_FLIGHT = 32;
|
|
5
|
+
/** Maximum buffer size before the subscription is force-closed to prevent OOM. */
|
|
6
|
+
export declare const MAX_BUFFER_SIZE = 1000;
|
|
7
|
+
/**
|
|
8
|
+
* Per-subscription flow controller that enforces a sliding window of
|
|
9
|
+
* unacknowledged events. When the window is full, incoming events are
|
|
10
|
+
* buffered. When the client sends `rpc.ack` with a cursor, events up
|
|
11
|
+
* to that cursor are acknowledged and buffered events are flushed.
|
|
12
|
+
*
|
|
13
|
+
* If the buffer exceeds {@link MAX_BUFFER_SIZE}, the subscription is
|
|
14
|
+
* closed via the provided `onOverflow` callback to prevent unbounded
|
|
15
|
+
* memory growth.
|
|
16
|
+
*/
|
|
17
|
+
export declare class FlowController {
|
|
18
|
+
private readonly subscriptionId;
|
|
19
|
+
private readonly maxInFlight;
|
|
20
|
+
private readonly send;
|
|
21
|
+
private readonly onOverflow;
|
|
22
|
+
/** Ordered list of cursors for events that have been sent but not yet acknowledged. */
|
|
23
|
+
private unacked;
|
|
24
|
+
/** Buffer of events waiting to be sent once the window opens. */
|
|
25
|
+
private buffer;
|
|
26
|
+
/** Whether the controller has been closed due to overflow. */
|
|
27
|
+
private closed;
|
|
28
|
+
constructor(subscriptionId: JsonRpcId, maxInFlight: number, send: (response: JsonRpcSuccessResponse) => void, onOverflow: () => void);
|
|
29
|
+
/**
|
|
30
|
+
* Accept an incoming {@link SubscriptionMessage} from the EventLog listener.
|
|
31
|
+
* If the window has room, send immediately. Otherwise buffer.
|
|
32
|
+
*/
|
|
33
|
+
push(message: SubscriptionMessage): void;
|
|
34
|
+
/**
|
|
35
|
+
* Process an `rpc.ack` for this subscription. Acknowledges all events up
|
|
36
|
+
* to and including the given cursor, then flushes buffered events into the
|
|
37
|
+
* newly opened window slots.
|
|
38
|
+
*/
|
|
39
|
+
ack(cursor: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Returns the number of events currently in flight (sent but unacknowledged).
|
|
42
|
+
*/
|
|
43
|
+
get inFlightCount(): number;
|
|
44
|
+
/**
|
|
45
|
+
* Returns the number of events currently buffered (waiting to be sent).
|
|
46
|
+
*/
|
|
47
|
+
get bufferCount(): number;
|
|
48
|
+
/**
|
|
49
|
+
* Sends a single message over the wire and tracks its cursor.
|
|
50
|
+
*/
|
|
51
|
+
private sendMessage;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=flow-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-controller.d.ts","sourceRoot":"","sources":["../../../../src/connection/flow-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAM5E,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,kFAAkF;AAClF,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;;;;;;;;GASG;AACH,qBAAa,cAAc;IAWvB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAb7B,uFAAuF;IACvF,OAAO,CAAC,OAAO,CAAgB;IAE/B,iEAAiE;IACjE,OAAO,CAAC,MAAM,CAA6B;IAE3C,8DAA8D;IAC9D,OAAO,CAAC,MAAM,CAAS;gBAGJ,cAAc,EAAE,SAAS,EACzB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,EAChD,UAAU,EAAE,MAAM,IAAI;IAGzC;;;OAGG;IACI,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAuB/C;;;;OAIG;IACI,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAsBhC;;OAEG;IACH,IAAW,aAAa,IAAI,MAAM,CAEjC;IAED;;OAEG;IACH,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED;;OAEG;IACH,OAAO,CAAC,WAAW;CAKpB"}
|