@enbox/dwn-server 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +353 -0
- package/dist/cjs/index.js +6811 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/src/config.d.ts +55 -0
- package/dist/esm/src/config.d.ts.map +1 -0
- package/dist/esm/src/config.js +60 -0
- package/dist/esm/src/config.js.map +1 -0
- package/dist/esm/src/connection/connection-manager.d.ts +25 -0
- package/dist/esm/src/connection/connection-manager.d.ts.map +1 -0
- package/dist/esm/src/connection/connection-manager.js +26 -0
- package/dist/esm/src/connection/connection-manager.js.map +1 -0
- package/dist/esm/src/connection/socket-connection.d.ts +65 -0
- package/dist/esm/src/connection/socket-connection.d.ts.map +1 -0
- package/dist/esm/src/connection/socket-connection.js +180 -0
- package/dist/esm/src/connection/socket-connection.js.map +1 -0
- package/dist/esm/src/dwn-error.d.ts +29 -0
- package/dist/esm/src/dwn-error.d.ts.map +1 -0
- package/dist/esm/src/dwn-error.js +36 -0
- package/dist/esm/src/dwn-error.js.map +1 -0
- package/dist/esm/src/dwn-server.d.ts +60 -0
- package/dist/esm/src/dwn-server.d.ts.map +1 -0
- package/dist/esm/src/dwn-server.js +130 -0
- package/dist/esm/src/dwn-server.js.map +1 -0
- package/dist/esm/src/http-api.d.ts +26 -0
- package/dist/esm/src/http-api.d.ts.map +1 -0
- package/dist/esm/src/http-api.js +474 -0
- package/dist/esm/src/http-api.js.map +1 -0
- package/dist/esm/src/index.d.ts +7 -0
- package/dist/esm/src/index.d.ts.map +1 -0
- package/dist/esm/src/index.js +6 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/json-rpc-api.d.ts +3 -0
- package/dist/esm/src/json-rpc-api.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-api.js +8 -0
- package/dist/esm/src/json-rpc-api.js.map +1 -0
- package/dist/esm/src/json-rpc-handlers/dwn/index.d.ts +2 -0
- package/dist/esm/src/json-rpc-handlers/dwn/index.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-handlers/dwn/index.js +2 -0
- package/dist/esm/src/json-rpc-handlers/dwn/index.js.map +1 -0
- package/dist/esm/src/json-rpc-handlers/dwn/process-message.d.ts +3 -0
- package/dist/esm/src/json-rpc-handlers/dwn/process-message.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-handlers/dwn/process-message.js +73 -0
- package/dist/esm/src/json-rpc-handlers/dwn/process-message.js.map +1 -0
- package/dist/esm/src/json-rpc-handlers/subscription/close.d.ts +10 -0
- package/dist/esm/src/json-rpc-handlers/subscription/close.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-handlers/subscription/close.js +39 -0
- package/dist/esm/src/json-rpc-handlers/subscription/close.js.map +1 -0
- package/dist/esm/src/json-rpc-handlers/subscription/index.d.ts +2 -0
- package/dist/esm/src/json-rpc-handlers/subscription/index.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-handlers/subscription/index.js +2 -0
- package/dist/esm/src/json-rpc-handlers/subscription/index.js.map +1 -0
- package/dist/esm/src/json-rpc-socket.d.ts +39 -0
- package/dist/esm/src/json-rpc-socket.d.ts.map +1 -0
- package/dist/esm/src/json-rpc-socket.js +125 -0
- package/dist/esm/src/json-rpc-socket.js.map +1 -0
- package/dist/esm/src/lib/http-server-shutdown-handler.d.ts +10 -0
- package/dist/esm/src/lib/http-server-shutdown-handler.d.ts.map +1 -0
- package/dist/esm/src/lib/http-server-shutdown-handler.js +65 -0
- package/dist/esm/src/lib/http-server-shutdown-handler.js.map +1 -0
- package/dist/esm/src/lib/json-rpc-router.d.ts +30 -0
- package/dist/esm/src/lib/json-rpc-router.d.ts.map +1 -0
- package/dist/esm/src/lib/json-rpc-router.js +14 -0
- package/dist/esm/src/lib/json-rpc-router.js.map +1 -0
- package/dist/esm/src/lib/json-rpc.d.ts +54 -0
- package/dist/esm/src/lib/json-rpc.d.ts.map +1 -0
- package/dist/esm/src/lib/json-rpc.js +60 -0
- package/dist/esm/src/lib/json-rpc.js.map +1 -0
- package/dist/esm/src/main.d.ts +3 -0
- package/dist/esm/src/main.d.ts.map +1 -0
- package/dist/esm/src/main.js +11 -0
- package/dist/esm/src/main.js.map +1 -0
- package/dist/esm/src/metrics.d.ts +4 -0
- package/dist/esm/src/metrics.d.ts.map +1 -0
- package/dist/esm/src/metrics.js +13 -0
- package/dist/esm/src/metrics.js.map +1 -0
- package/dist/esm/src/plugin-loader.d.ts +10 -0
- package/dist/esm/src/plugin-loader.d.ts.map +1 -0
- package/dist/esm/src/plugin-loader.js +19 -0
- package/dist/esm/src/plugin-loader.js.map +1 -0
- package/dist/esm/src/process-handlers.d.ts +11 -0
- package/dist/esm/src/process-handlers.d.ts.map +1 -0
- package/dist/esm/src/process-handlers.js +40 -0
- package/dist/esm/src/process-handlers.js.map +1 -0
- package/dist/esm/src/registration/proof-of-work-manager.d.ts +93 -0
- package/dist/esm/src/registration/proof-of-work-manager.d.ts.map +1 -0
- package/dist/esm/src/registration/proof-of-work-manager.js +243 -0
- package/dist/esm/src/registration/proof-of-work-manager.js.map +1 -0
- package/dist/esm/src/registration/proof-of-work-types.d.ts +8 -0
- package/dist/esm/src/registration/proof-of-work-types.d.ts.map +1 -0
- package/dist/esm/src/registration/proof-of-work-types.js +2 -0
- package/dist/esm/src/registration/proof-of-work-types.js.map +1 -0
- package/dist/esm/src/registration/proof-of-work.d.ts +41 -0
- package/dist/esm/src/registration/proof-of-work.d.ts.map +1 -0
- package/dist/esm/src/registration/proof-of-work.js +69 -0
- package/dist/esm/src/registration/proof-of-work.js.map +1 -0
- package/dist/esm/src/registration/registration-manager.d.ts +55 -0
- package/dist/esm/src/registration/registration-manager.d.ts.map +1 -0
- package/dist/esm/src/registration/registration-manager.js +121 -0
- package/dist/esm/src/registration/registration-manager.js.map +1 -0
- package/dist/esm/src/registration/registration-store.d.ts +24 -0
- package/dist/esm/src/registration/registration-store.d.ts.map +1 -0
- package/dist/esm/src/registration/registration-store.js +56 -0
- package/dist/esm/src/registration/registration-store.js.map +1 -0
- package/dist/esm/src/registration/registration-types.d.ts +18 -0
- package/dist/esm/src/registration/registration-types.d.ts.map +1 -0
- package/dist/esm/src/registration/registration-types.js +2 -0
- package/dist/esm/src/registration/registration-types.js.map +1 -0
- package/dist/esm/src/storage.d.ts +24 -0
- package/dist/esm/src/storage.d.ts.map +1 -0
- package/dist/esm/src/storage.js +146 -0
- package/dist/esm/src/storage.js.map +1 -0
- package/dist/esm/src/web5-connect/sql-ttl-cache.d.ts +39 -0
- package/dist/esm/src/web5-connect/sql-ttl-cache.d.ts.map +1 -0
- package/dist/esm/src/web5-connect/sql-ttl-cache.js +106 -0
- package/dist/esm/src/web5-connect/sql-ttl-cache.js.map +1 -0
- package/dist/esm/src/web5-connect/web5-connect-server.d.ts +58 -0
- package/dist/esm/src/web5-connect/web5-connect-server.d.ts.map +1 -0
- package/dist/esm/src/web5-connect/web5-connect-server.js +77 -0
- package/dist/esm/src/web5-connect/web5-connect-server.js.map +1 -0
- package/dist/esm/src/ws-api.d.ts +13 -0
- package/dist/esm/src/ws-api.d.ts.map +1 -0
- package/dist/esm/src/ws-api.js +31 -0
- package/dist/esm/src/ws-api.js.map +1 -0
- package/dist/esm/tests/common-scenario-validator.d.ts +11 -0
- package/dist/esm/tests/common-scenario-validator.d.ts.map +1 -0
- package/dist/esm/tests/common-scenario-validator.js +114 -0
- package/dist/esm/tests/common-scenario-validator.js.map +1 -0
- package/dist/esm/tests/connection/connection-manager.spec.d.ts +2 -0
- package/dist/esm/tests/connection/connection-manager.spec.d.ts.map +1 -0
- package/dist/esm/tests/connection/connection-manager.spec.js +47 -0
- package/dist/esm/tests/connection/connection-manager.spec.js.map +1 -0
- package/dist/esm/tests/connection/socket-connection.spec.d.ts +2 -0
- package/dist/esm/tests/connection/socket-connection.spec.d.ts.map +1 -0
- package/dist/esm/tests/connection/socket-connection.spec.js +125 -0
- package/dist/esm/tests/connection/socket-connection.spec.js.map +1 -0
- package/dist/esm/tests/cors/http-api.browser.d.ts +2 -0
- package/dist/esm/tests/cors/http-api.browser.d.ts.map +1 -0
- package/dist/esm/tests/cors/http-api.browser.js +60 -0
- package/dist/esm/tests/cors/http-api.browser.js.map +1 -0
- package/dist/esm/tests/cors/ping.browser.d.ts +2 -0
- package/dist/esm/tests/cors/ping.browser.d.ts.map +1 -0
- package/dist/esm/tests/cors/ping.browser.js +7 -0
- package/dist/esm/tests/cors/ping.browser.js.map +1 -0
- package/dist/esm/tests/dwn-process-message.spec.d.ts +2 -0
- package/dist/esm/tests/dwn-process-message.spec.d.ts.map +1 -0
- package/dist/esm/tests/dwn-process-message.spec.js +172 -0
- package/dist/esm/tests/dwn-process-message.spec.js.map +1 -0
- package/dist/esm/tests/dwn-server.spec.d.ts +2 -0
- package/dist/esm/tests/dwn-server.spec.d.ts.map +1 -0
- package/dist/esm/tests/dwn-server.spec.js +49 -0
- package/dist/esm/tests/dwn-server.spec.js.map +1 -0
- package/dist/esm/tests/http-api.spec.d.ts +2 -0
- package/dist/esm/tests/http-api.spec.d.ts.map +1 -0
- package/dist/esm/tests/http-api.spec.js +775 -0
- package/dist/esm/tests/http-api.spec.js.map +1 -0
- package/dist/esm/tests/json-rpc-socket.spec.d.ts +2 -0
- package/dist/esm/tests/json-rpc-socket.spec.d.ts.map +1 -0
- package/dist/esm/tests/json-rpc-socket.spec.js +225 -0
- package/dist/esm/tests/json-rpc-socket.spec.js.map +1 -0
- package/dist/esm/tests/plugins/data-store-sqlite.d.ts +17 -0
- package/dist/esm/tests/plugins/data-store-sqlite.d.ts.map +1 -0
- package/dist/esm/tests/plugins/data-store-sqlite.js +23 -0
- package/dist/esm/tests/plugins/data-store-sqlite.js.map +1 -0
- package/dist/esm/tests/plugins/event-log-sqlite.d.ts +17 -0
- package/dist/esm/tests/plugins/event-log-sqlite.d.ts.map +1 -0
- package/dist/esm/tests/plugins/event-log-sqlite.js +23 -0
- package/dist/esm/tests/plugins/event-log-sqlite.js.map +1 -0
- package/dist/esm/tests/plugins/event-stream-in-memory.d.ts +17 -0
- package/dist/esm/tests/plugins/event-stream-in-memory.d.ts.map +1 -0
- package/dist/esm/tests/plugins/event-stream-in-memory.js +21 -0
- package/dist/esm/tests/plugins/event-stream-in-memory.js.map +1 -0
- package/dist/esm/tests/plugins/message-store-sqlite.d.ts +17 -0
- package/dist/esm/tests/plugins/message-store-sqlite.d.ts.map +1 -0
- package/dist/esm/tests/plugins/message-store-sqlite.js +23 -0
- package/dist/esm/tests/plugins/message-store-sqlite.js.map +1 -0
- package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts +17 -0
- package/dist/esm/tests/plugins/resumable-task-store-sqlite.d.ts.map +1 -0
- package/dist/esm/tests/plugins/resumable-task-store-sqlite.js +23 -0
- package/dist/esm/tests/plugins/resumable-task-store-sqlite.js.map +1 -0
- package/dist/esm/tests/process-handler.spec.d.ts +2 -0
- package/dist/esm/tests/process-handler.spec.d.ts.map +1 -0
- package/dist/esm/tests/process-handler.spec.js +60 -0
- package/dist/esm/tests/process-handler.spec.js.map +1 -0
- package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts +2 -0
- package/dist/esm/tests/registration/proof-of-work-manager.spec.d.ts.map +1 -0
- package/dist/esm/tests/registration/proof-of-work-manager.spec.js +157 -0
- package/dist/esm/tests/registration/proof-of-work-manager.spec.js.map +1 -0
- package/dist/esm/tests/rpc-subscribe-close.spec.d.ts +2 -0
- package/dist/esm/tests/rpc-subscribe-close.spec.d.ts.map +1 -0
- package/dist/esm/tests/rpc-subscribe-close.spec.js +81 -0
- package/dist/esm/tests/rpc-subscribe-close.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts +2 -0
- package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.d.ts.map +1 -0
- package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js +73 -0
- package/dist/esm/tests/scenarios/dynamic-plugin-loading.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/registration.spec.d.ts +2 -0
- package/dist/esm/tests/scenarios/registration.spec.d.ts.map +1 -0
- package/dist/esm/tests/scenarios/registration.spec.js +507 -0
- package/dist/esm/tests/scenarios/registration.spec.js.map +1 -0
- package/dist/esm/tests/scenarios/web5-connect.spec.d.ts +2 -0
- package/dist/esm/tests/scenarios/web5-connect.spec.d.ts.map +1 -0
- package/dist/esm/tests/scenarios/web5-connect.spec.js +137 -0
- package/dist/esm/tests/scenarios/web5-connect.spec.js.map +1 -0
- package/dist/esm/tests/test-dwn.d.ts +7 -0
- package/dist/esm/tests/test-dwn.d.ts.map +1 -0
- package/dist/esm/tests/test-dwn.js +34 -0
- package/dist/esm/tests/test-dwn.js.map +1 -0
- package/dist/esm/tests/utils.d.ts +46 -0
- package/dist/esm/tests/utils.d.ts.map +1 -0
- package/dist/esm/tests/utils.js +116 -0
- package/dist/esm/tests/utils.js.map +1 -0
- package/dist/esm/tests/ws-api.spec.d.ts +2 -0
- package/dist/esm/tests/ws-api.spec.d.ts.map +1 -0
- package/dist/esm/tests/ws-api.spec.js +327 -0
- package/dist/esm/tests/ws-api.spec.js.map +1 -0
- package/package.json +119 -0
- package/src/config.ts +71 -0
- package/src/connection/connection-manager.ts +39 -0
- package/src/connection/socket-connection.ts +221 -0
- package/src/dwn-error.ts +38 -0
- package/src/dwn-server.ts +178 -0
- package/src/http-api.ts +541 -0
- package/src/index.ts +6 -0
- package/src/json-rpc-api.ts +11 -0
- package/src/json-rpc-handlers/dwn/index.ts +1 -0
- package/src/json-rpc-handlers/dwn/process-message.ts +123 -0
- package/src/json-rpc-handlers/subscription/close.ts +59 -0
- package/src/json-rpc-handlers/subscription/index.ts +1 -0
- package/src/json-rpc-socket.ts +155 -0
- package/src/lib/http-server-shutdown-handler.ts +79 -0
- package/src/lib/json-rpc-router.ts +52 -0
- package/src/lib/json-rpc.ts +126 -0
- package/src/main.ts +14 -0
- package/src/metrics.ts +14 -0
- package/src/plugin-loader.ts +17 -0
- package/src/process-handlers.ts +65 -0
- package/src/registration/proof-of-work-manager.ts +317 -0
- package/src/registration/proof-of-work-types.ts +7 -0
- package/src/registration/proof-of-work.ts +100 -0
- package/src/registration/registration-manager.ts +153 -0
- package/src/registration/registration-store.ts +79 -0
- package/src/registration/registration-types.ts +18 -0
- package/src/storage.ts +213 -0
- package/src/web5-connect/sql-ttl-cache.ts +137 -0
- package/src/web5-connect/web5-connect-server.ts +122 -0
- package/src/ws-api.ts +45 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-api.js","sourceRoot":"","sources":["../../../src/http-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAElG,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAQpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,OAAO,OAAO;IAClB,OAAO,CAAkB;IACzB,YAAY,CAA4D;IACxE,IAAI,CAAU;IACd,OAAO,CAAc;IACrB,iBAAiB,CAAoB;IACrC,mBAAmB,CAAsB;IACzC,GAAG,CAAM;IAET,gBAAwB,CAAC;IAElB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAuB,EAAE,GAAQ,EAAE,mBAAyC;QACrG,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAE9B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjB,OAAO,CAAC,YAAY,GAAG;YACrB,MAAM,EAAE,MAAM,CAAC,UAAU;SAC1B,CAAC;QAEF,IAAI,CAAC;YACH,sFAAsF;YACtF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChF,OAAO,CAAC,YAAY,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;YACnD,OAAO,CAAC,YAAY,CAAC,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,GAAG,CAAC,IAAI,CAAC,gDAAgD,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC;QACzB,OAAO,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;QACzB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;QAElB,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QACpD,CAAC;QAED,iCAAiC;QACjC,OAAO,CAAC,iBAAiB,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC;YACzD,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,cAAc,EAAE,MAAM,CAAC,WAAW;SACnC,CAAC,CAAC;QAEH,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC3B,OAAO,CAAC,YAAY,EAAE,CAAC;QAEvB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAE9B,4EAA4E;QAC5E,iFAAiF;QACjF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,GAAG,CACX,YAAY,CAAC,CAAC,GAAY,EAAE,GAAa,EAAE,IAAI,EAAE,EAAE;YACjD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;YACnD,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;iBAC7B,WAAW,EAAE;iBACb,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;iBACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAEvB,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC7C,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3D,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY;QAEV,MAAM,kBAAkB,GAAG,SAAS,CAAC;QAErC,SAAS,gBAAgB,CAAC,GAAG,EAAE,KAAuB;YACpD,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC9B,IAAI,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;oBACvB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;oBAEhC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAC9E,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;oBAErD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACrC,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YACrC,gBAAgB;YAChB,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAC3C,IAAI,CAAC;gBACH,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAC9C,GAAG,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,oHAAoH;QACpH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACnE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC3D,CAAC;YAED,oEAAoE;YACpE,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,EAAE,MAAM,EAAE,EAAE,EAAS,CAAC;gBAC3C,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,CAAA;oBAC1F,eAAe,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9C,CAAC;gBAED,kFAAkF;gBAClF,gEAAgE;gBAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;gBAClE,YAAY,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACxC,YAAY,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;gBAEjF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC;oBACtC,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;oBACxB,QAAQ,EAAE,QAAQ,CAAC,mBAAmB;iBACvC,CAAC,CAAC;gBAEH,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBAEzF,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;oBACxB,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;wBACf,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC;4BACtC,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;yBAC1C,CAAC,CAAC;wBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;wBAC7E,OAAO,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACtC,CAAC;yBAAM,CAAC;wBACN,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;qBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;oBAC/B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YAAC,OAAM,KAAK,EAAE,CAAC;gBACd,GAAG,CAAC,KAAK,CAAC,6BAA6B,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACjE,oEAAoE;YACpE,IAAI,CAAC;gBAEH,6EAA6E;gBAC7E,gEAAgE;gBAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;gBAClE,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC;oBACxC,MAAM,EAAE,EAAE,QAAQ,EAAE;iBACrB,CAAC,CAAC;gBACH,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACzF,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;oBACxB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;wBACnB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBACxB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvB,CAAC;yBAAM,CAAC;wBACN,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBAC7B,CAAC;gBACH,CAAC;qBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;oBAC/B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;YAAC,OAAM,KAAK,EAAE,CAAC;gBACd,GAAG,CAAC,KAAK,CAAC,6BAA6B,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpE,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,kBAAkB,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAgB,EAAE;YAC1D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC;gBACtC,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE;aACpC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5E,OAAO,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC,CAAA;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,kBAAkB,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;QAEvD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACxD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACzF,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACxB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACxB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC/B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAE9C,IAAI,CAAC;gBACH,+FAA+F;gBAC/F,+EAA+E;gBAC/E,IAAI;gBACJ,cAAc;gBACd,uBAAuB;gBACvB,0BAA0B;gBAC1B,MAAM;gBACN,IAAI;gBACJ,MAAM,mBAAmB,GAAG,EAAS,CAAC;gBACtC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,mBAAmB,CAAC,CAAA;oBACjG,eAAe,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9C,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC;oBAC7C,MAAM,EAAE,mBAAmB,CAAC,MAAM;oBAClC,UAAU,EAAE,mBAAmB,CAAC,UAAU;oBAC1C,QAAQ,EAAE,mBAAmB,CAAC,QAAQ;iBACvC,CAAC,CAAC;gBAEH,8DAA8D;gBAC9D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;gBAElF,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;gBAClD,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,qHAAqH;gBACrH,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC/B,6BAA6B;YAC7B,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAC5C,OAAO,GAAG,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;QACpG,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAY,EAAE,GAAG,EAAE,EAAE;YAC9C,MAAM,mBAAmB,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAW,CAAC;YAEjE,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,0BAA0B,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;gBAE9G,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;YAED,IAAI,aAA6B,CAAC;YAClC,IAAI,CAAC;gBACH,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAClD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,KAAK,GAAG,0BAA0B,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;gBAE5F,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;YAED,sDAAsD;YACtD,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YACpD,MAAM,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAC1D,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAE1G,MAAM,cAAc,GAAmB;gBACrC,GAAG,EAAU,IAAI,CAAC,GAAG;gBACrB,SAAS,EAAI,MAAM;gBACnB,UAAU,EAAG,iBAAiB;aAC/B,CAAC;YACF,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,cAAgC,CAAC,CAAC;YAExI,wGAAwG;YACxG,oDAAoD;YACpD,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC1B,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC/D,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC/C,CAAC;YAED,cAAc,CAAC,GAAG,CAAC;gBACjB,MAAM,EAAG,aAAa,CAAC,MAAM;gBAC7B,MAAM,EAAG,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC;aAC3D,CAAC,CAAC;YACH,IAAI,kBAAkB,EAAE,CAAC;gBACvB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;gBAC1D,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;gBAE/D,OAAO,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEhC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAClC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAClD,MAAM,wBAAwB,GAAa,EAAE,CAAC;YAC9C,IAAI,MAAM,CAAC,8BAA8B,EAAE,CAAC;gBAC1C,wBAAwB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,MAAM,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;gBAChD,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACpD,CAAC;YAED,GAAG,CAAC,IAAI,CAAC;gBACP,GAAG,EAAwB,MAAM,CAAC,OAAO;gBACzC,MAAM,EAAqB,IAAI,CAAC,YAAY,CAAC,MAAM;gBACnD,WAAW,EAAgB,MAAM,CAAC,iBAAiB;gBACnD,wBAAwB,EAAG,wBAAwB;gBACnD,OAAO,EAAoB,IAAI,CAAC,YAAY,CAAC,OAAO;gBACpD,UAAU,EAAiB,IAAI,CAAC,YAAY,CAAC,UAAU;gBACvD,gBAAgB,EAAW,MAAM,CAAC,gBAAgB;aACnD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,6BAA6B,EAAE,CAAC;IACvC,CAAC;IAED,wBAAwB;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,8BAA8B,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,6BAA6B,EAAE,KAAK,EAAE,IAAa,EAAE,GAAa,EAAE,EAAE;gBAClF,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,CAAC;gBAChF,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,EAAE,CAAC,IAAa,EAAE,GAAa,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAC5I,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACpD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;gBACpE,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;gBAE/C,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,mBAAmB,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;oBACtE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,cAAc,GAAG,KAAuB,CAAC;oBAE/C,IAAI,cAAc,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBACtC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBACvC,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;wBACxD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,6BAA6B;QAC3B;;;;;UAKE;QACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAChD,GAAG,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YAEpE,4GAA4G;YAC5G,4GAA4G;YAE1G,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC1B,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE;wBACN,IAAI,EAAE,GAAG;wBACT,OAAO,EAAE,0CAA0C;qBACpD;iBACF,CAAC,CAAC;YACL,CAAC;YAED,+CAA+C;YAC/C,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;gBACnC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC1B,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE;wBACN,IAAI,EAAE,GAAG;wBACT,OAAO,EAAE,4DAA4D;qBACtE;iBACF,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH;;UAEE;QACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mCAAmC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACpE,GAAG,CAAC,IAAI,CAAC,iDAAiD,GAAG,CAAC,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC;YAErF,qDAAqD;YACrD,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAElG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,EAAE,EAAO,KAAK;oBACd,MAAM,EAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE;iBAC7C,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;gBAC3C,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;UAEE;QACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACrD,GAAG,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;YAEhF,sBAAsB;YACtB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YAClC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAE7B,IAAI,OAAO,KAAK,SAAS,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;gBAEhD,MAAM,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAEpE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,EAAE,EAAO,IAAI;oBACb,MAAM,EAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE;iBAC3C,CAAC,CAAC;YAEL,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,EAAE,EAAO,KAAK;oBACd,MAAM,EAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE;iBAC/C,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;UAEE;QACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAC5D,GAAG,CAAC,IAAI,CAAC,kCAAkC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC;YAElE,wBAAwB;YACxB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEtF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,EAAE,EAAO,KAAK;oBACd,MAAM,EAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE;iBAC7C,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;gBAC3C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,iDAAiD;QACjD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,gDAAgD;QAChD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAW,EAAE,EAAE;gBACjC,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { DwnServerConfig } from './config.js';
|
|
2
|
+
export { DwnServer, DwnServerOptions } from './dwn-server.js';
|
|
3
|
+
export { HttpApi } from './http-api.js';
|
|
4
|
+
export { jsonRpcRouter } from './json-rpc-api.js';
|
|
5
|
+
export { StoreType, BackendTypes, DwnStore } from './storage.js';
|
|
6
|
+
export { WsApi } from './ws-api.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { DwnServer } from './dwn-server.js';
|
|
2
|
+
export { HttpApi } from './http-api.js';
|
|
3
|
+
export { jsonRpcRouter } from './json-rpc-api.js';
|
|
4
|
+
export { StoreType, BackendTypes } from './storage.js';
|
|
5
|
+
export { WsApi } from './ws-api.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAoB,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAY,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-rpc-api.d.ts","sourceRoot":"","sources":["../../../src/json-rpc-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAKzD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { JsonRpcRouter } from './lib/json-rpc-router.js';
|
|
2
|
+
import { handleDwnProcessMessage } from './json-rpc-handlers/dwn/index.js';
|
|
3
|
+
import { handleSubscriptionsClose } from './json-rpc-handlers/subscription/index.js';
|
|
4
|
+
export const jsonRpcRouter = new JsonRpcRouter();
|
|
5
|
+
jsonRpcRouter.on('dwn.processMessage', handleDwnProcessMessage);
|
|
6
|
+
jsonRpcRouter.on('rpc.subscribe.dwn.processMessage', handleDwnProcessMessage);
|
|
7
|
+
jsonRpcRouter.on('rpc.subscribe.close', handleSubscriptionsClose);
|
|
8
|
+
//# sourceMappingURL=json-rpc-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-rpc-api.js","sourceRoot":"","sources":["../../../src/json-rpc-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAErF,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;AAEjD,aAAa,CAAC,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,CAAC;AAChE,aAAa,CAAC,EAAE,CAAC,kCAAkC,EAAE,uBAAuB,CAAC,CAAC;AAE9E,aAAa,CAAC,EAAE,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/json-rpc-handlers/dwn/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/json-rpc-handlers/dwn/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-message.d.ts","sourceRoot":"","sources":["../../../../../src/json-rpc-handlers/dwn/process-message.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,8BAA8B,CAAC;AAStC,eAAO,MAAM,uBAAuB,EAAE,cAsGrC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { DwnInterfaceName, DwnMethodName } from '@enbox/dwn-sdk-js';
|
|
2
|
+
import log from 'loglevel';
|
|
3
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
4
|
+
import { createJsonRpcErrorResponse, createJsonRpcSuccessResponse, JsonRpcErrorCodes, } from '../../lib/json-rpc.js';
|
|
5
|
+
export const handleDwnProcessMessage = async (dwnRequest, context) => {
|
|
6
|
+
const { dwn, dataStream, subscriptionRequest, socketConnection, transport } = context;
|
|
7
|
+
const { target, message } = dwnRequest.params;
|
|
8
|
+
const requestId = dwnRequest.id ?? uuidv4();
|
|
9
|
+
try {
|
|
10
|
+
// RecordsWrite is only supported on 'http' to support data stream for large data
|
|
11
|
+
// TODO: https://github.com/TBD54566975/dwn-server/issues/108
|
|
12
|
+
if (transport !== 'http' &&
|
|
13
|
+
message.descriptor.interface === DwnInterfaceName.Records &&
|
|
14
|
+
message.descriptor.method === DwnMethodName.Write) {
|
|
15
|
+
const jsonRpcResponse = createJsonRpcErrorResponse(requestId, JsonRpcErrorCodes.InvalidParams, `RecordsWrite is not supported via ${context.transport}`);
|
|
16
|
+
return { jsonRpcResponse };
|
|
17
|
+
}
|
|
18
|
+
// subscribe methods must come with a subscriptionRequest context
|
|
19
|
+
if (message.descriptor.method === DwnMethodName.Subscribe && subscriptionRequest === undefined) {
|
|
20
|
+
const jsonRpcResponse = createJsonRpcErrorResponse(requestId, JsonRpcErrorCodes.InvalidRequest, `subscribe methods must contain a subscriptionRequest context`);
|
|
21
|
+
return { jsonRpcResponse };
|
|
22
|
+
}
|
|
23
|
+
// Subscribe methods are only supported on 'ws' (WebSockets)
|
|
24
|
+
if (transport !== 'ws' && subscriptionRequest !== undefined) {
|
|
25
|
+
const jsonRpcResponse = createJsonRpcErrorResponse(requestId, JsonRpcErrorCodes.InvalidParams, `subscriptions are not supported via ${context.transport}`);
|
|
26
|
+
return { jsonRpcResponse };
|
|
27
|
+
}
|
|
28
|
+
// if this is a subscription request, we first check if the connection has a subscription with this Id
|
|
29
|
+
// we do this ahead of time to prevent opening a subscription on the dwn only to close it after attempting to add it to the subscription manager
|
|
30
|
+
// otherwise the subscription manager would throw an error that the Id is already in use and we would close the open subscription on the DWN.
|
|
31
|
+
if (subscriptionRequest !== undefined && socketConnection?.hasSubscription(subscriptionRequest.id)) {
|
|
32
|
+
const jsonRpcResponse = createJsonRpcErrorResponse(requestId, JsonRpcErrorCodes.InvalidParams, `the subscribe id: ${subscriptionRequest.id} is in use by an active subscription`);
|
|
33
|
+
return { jsonRpcResponse };
|
|
34
|
+
}
|
|
35
|
+
const reply = await dwn.processMessage(target, message, {
|
|
36
|
+
dataStream: dataStream,
|
|
37
|
+
subscriptionHandler: subscriptionRequest?.subscriptionHandler,
|
|
38
|
+
});
|
|
39
|
+
const { entry } = reply;
|
|
40
|
+
// RecordsRead or MessagesRead messages optionally return data as a stream to accommodate large amounts of data
|
|
41
|
+
// we remove the data stream from the reply that will be serialized and return it as a separate property in the response payload.
|
|
42
|
+
let recordDataStream;
|
|
43
|
+
if (entry !== undefined && entry.data !== undefined) {
|
|
44
|
+
recordDataStream = entry.data;
|
|
45
|
+
delete reply.entry.data; // not serializable via JSON
|
|
46
|
+
}
|
|
47
|
+
if (subscriptionRequest && reply.subscription) {
|
|
48
|
+
const { close } = reply.subscription;
|
|
49
|
+
// Subscribe messages return a close function to facilitate closing the subscription
|
|
50
|
+
// we add a reference to the close function for this subscription request to the socket connection.
|
|
51
|
+
// this will facilitate closing the subscription later.
|
|
52
|
+
const subscriptionReply = {
|
|
53
|
+
id: subscriptionRequest.id,
|
|
54
|
+
close,
|
|
55
|
+
};
|
|
56
|
+
await socketConnection.addSubscription(subscriptionReply);
|
|
57
|
+
delete reply.subscription.close; // delete the close method from the reply as it's not JSON serializable and has a held reference.
|
|
58
|
+
}
|
|
59
|
+
const jsonRpcResponse = createJsonRpcSuccessResponse(requestId, { reply });
|
|
60
|
+
const responsePayload = { jsonRpcResponse };
|
|
61
|
+
if (recordDataStream) {
|
|
62
|
+
responsePayload.dataStream = recordDataStream;
|
|
63
|
+
}
|
|
64
|
+
return responsePayload;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const jsonRpcResponse = createJsonRpcErrorResponse(requestId, JsonRpcErrorCodes.InternalError, error.message);
|
|
68
|
+
// log the unhandled error response
|
|
69
|
+
log.error('handleDwnProcessMessage error', jsonRpcResponse, dwnRequest, error);
|
|
70
|
+
return { jsonRpcResponse };
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=process-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-message.js","sourceRoot":"","sources":["../../../../../src/json-rpc-handlers/dwn/process-message.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { JsonRpcHandler } from '../../lib/json-rpc-router.js';
|
|
2
|
+
/**
|
|
3
|
+
* Closes a subscription tied to a specific `SocketConnection`.
|
|
4
|
+
*
|
|
5
|
+
* @param jsonRpcRequest must include JsonRpcId of the subscription request within a `subscription object`.
|
|
6
|
+
* @param context must include the associated `SocketConnection`.
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
export declare const handleSubscriptionsClose: JsonRpcHandler;
|
|
10
|
+
//# sourceMappingURL=close.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"close.d.ts","sourceRoot":"","sources":["../../../../../src/json-rpc-handlers/subscription/close.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,8BAA8B,CAAC;AAStC;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,EAAE,cAoCtC,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
+
import { DwnServerErrorCode } from '../../dwn-error.js';
|
|
3
|
+
import { createJsonRpcErrorResponse, createJsonRpcSuccessResponse, JsonRpcErrorCodes, } from '../../lib/json-rpc.js';
|
|
4
|
+
/**
|
|
5
|
+
* Closes a subscription tied to a specific `SocketConnection`.
|
|
6
|
+
*
|
|
7
|
+
* @param jsonRpcRequest must include JsonRpcId of the subscription request within a `subscription object`.
|
|
8
|
+
* @param context must include the associated `SocketConnection`.
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
export const handleSubscriptionsClose = async (jsonRpcRequest, context) => {
|
|
12
|
+
const requestId = jsonRpcRequest.id ?? uuidv4();
|
|
13
|
+
if (context.socketConnection === undefined) {
|
|
14
|
+
const jsonRpcResponse = createJsonRpcErrorResponse(requestId, JsonRpcErrorCodes.InvalidRequest, 'socket connection does not exist');
|
|
15
|
+
return { jsonRpcResponse };
|
|
16
|
+
}
|
|
17
|
+
if (jsonRpcRequest.subscription === undefined) {
|
|
18
|
+
const jsonRpcResponse = createJsonRpcErrorResponse(requestId, JsonRpcErrorCodes.InvalidRequest, 'subscribe options do not exist');
|
|
19
|
+
return { jsonRpcResponse };
|
|
20
|
+
}
|
|
21
|
+
const { socketConnection } = context;
|
|
22
|
+
const { id } = jsonRpcRequest.subscription;
|
|
23
|
+
let jsonRpcResponse;
|
|
24
|
+
try {
|
|
25
|
+
// closing the subscription and cleaning up the reference within the given connection.
|
|
26
|
+
await socketConnection.closeSubscription(id);
|
|
27
|
+
jsonRpcResponse = createJsonRpcSuccessResponse(requestId, { reply: { status: 200, detail: 'Accepted' } });
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (error.code === DwnServerErrorCode.ConnectionSubscriptionJsonRpcIdNotFound) {
|
|
31
|
+
jsonRpcResponse = createJsonRpcErrorResponse(requestId, JsonRpcErrorCodes.InvalidParams, `subscription ${id} does not exist.`);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
jsonRpcResponse = createJsonRpcErrorResponse(requestId, JsonRpcErrorCodes.InternalError, `unknown subscription close error for ${id}: ${error.message}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return { jsonRpcResponse };
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=close.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"close.js","sourceRoot":"","sources":["../../../../../src/json-rpc-handlers/subscription/close.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAOxD,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAmB,KAAK,EAC3D,cAAc,EACd,OAAO,EACP,EAAE;IACF,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC;IAChD,IAAI,OAAO,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QAC3C,MAAM,eAAe,GAAG,0BAA0B,CAAC,SAAS,EAAE,iBAAiB,CAAC,cAAc,EAAE,kCAAkC,CAAC,CAAC;QACpI,OAAO,EAAE,eAAe,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,cAAc,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,eAAe,GAAG,0BAA0B,CAAC,SAAS,EAAE,iBAAiB,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC;QAClI,OAAO,EAAE,eAAe,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;IACrC,MAAM,EAAE,EAAE,EAAE,GAAG,cAAc,CAAC,YAAiC,CAAC;IAEhE,IAAI,eAA+B,CAAC;IACpC,IAAI,CAAC;QACH,sFAAsF;QACtF,MAAM,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC7C,eAAe,GAAG,4BAA4B,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAC5G,CAAC;IAAC,OAAM,KAAK,EAAE,CAAC;QACd,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,CAAC,uCAAuC,EAAE,CAAC;YAC9E,eAAe,GAAG,0BAA0B,CAAC,SAAS,EAAE,iBAAiB,CAAC,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QACjI,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,0BAA0B,CAC1C,SAAS,EACT,iBAAiB,CAAC,aAAa,EAC/B,wCAAwC,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE,CAC/D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,eAAe,EAAqB,CAAC;AAChD,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/json-rpc-handlers/subscription/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/json-rpc-handlers/subscription/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { JsonRpcRequest, JsonRpcResponse } from "./lib/json-rpc.js";
|
|
2
|
+
export interface JsonRpcSocketOptions {
|
|
3
|
+
/** socket connection timeout in milliseconds */
|
|
4
|
+
connectTimeout?: number;
|
|
5
|
+
/** response timeout for rpc requests in milliseconds */
|
|
6
|
+
responseTimeout?: number;
|
|
7
|
+
/** optional connection close handler */
|
|
8
|
+
onclose?: () => void;
|
|
9
|
+
/** optional socket error handler */
|
|
10
|
+
onerror?: (error?: any) => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* JSON RPC Socket Client for WebSocket request/response and long-running subscriptions.
|
|
14
|
+
*/
|
|
15
|
+
export declare class JsonRpcSocket {
|
|
16
|
+
private socket;
|
|
17
|
+
private responseTimeout;
|
|
18
|
+
private constructor();
|
|
19
|
+
static connect(url: string, options?: JsonRpcSocketOptions): Promise<JsonRpcSocket>;
|
|
20
|
+
close(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Sends a JSON-RPC request through the socket and waits for a single response.
|
|
23
|
+
*/
|
|
24
|
+
request(request: JsonRpcRequest): Promise<JsonRpcResponse>;
|
|
25
|
+
/**
|
|
26
|
+
* Sends a JSON-RPC request through the socket and keeps a listener open to read associated responses as they arrive.
|
|
27
|
+
* Returns a close method to clean up the listener.
|
|
28
|
+
*/
|
|
29
|
+
subscribe(request: JsonRpcRequest, listener: (response: JsonRpcResponse) => void): Promise<{
|
|
30
|
+
response: JsonRpcResponse;
|
|
31
|
+
close?: () => Promise<void>;
|
|
32
|
+
}>;
|
|
33
|
+
private closeSubscription;
|
|
34
|
+
/**
|
|
35
|
+
* Sends a JSON-RPC request through the socket. You must subscribe to a message listener separately to capture the response.
|
|
36
|
+
*/
|
|
37
|
+
send(request: JsonRpcRequest): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=json-rpc-socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-rpc-socket.d.ts","sourceRoot":"","sources":["../../../src/json-rpc-socket.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAa,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOpF,MAAM,WAAW,oBAAoB;IACnC,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,aAAa;IACJ,OAAO,CAAC,MAAM;IAAa,OAAO,CAAC,eAAe;IAAtE,OAAO;WAEM,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC;IAkC7F,KAAK,IAAI,IAAI;IAIb;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAwBhE;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC;QAC/F,QAAQ,EAAE,eAAe,CAAC;QAC1B,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;KAC5B,CAAC;IA0CH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,cAAc,GAAE,IAAI;CAGnC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import log from 'loglevel';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
3
|
+
import WebSocket from 'ws';
|
|
4
|
+
import { createJsonRpcSubscriptionRequest } from "./lib/json-rpc.js";
|
|
5
|
+
// These were arbitrarily chosen, but can be modified via connect options
|
|
6
|
+
const CONNECT_TIMEOUT = 3_000;
|
|
7
|
+
const RESPONSE_TIMEOUT = 30_000;
|
|
8
|
+
/**
|
|
9
|
+
* JSON RPC Socket Client for WebSocket request/response and long-running subscriptions.
|
|
10
|
+
*/
|
|
11
|
+
export class JsonRpcSocket {
|
|
12
|
+
socket;
|
|
13
|
+
responseTimeout;
|
|
14
|
+
constructor(socket, responseTimeout) {
|
|
15
|
+
this.socket = socket;
|
|
16
|
+
this.responseTimeout = responseTimeout;
|
|
17
|
+
}
|
|
18
|
+
static async connect(url, options = {}) {
|
|
19
|
+
const { connectTimeout = CONNECT_TIMEOUT, responseTimeout = RESPONSE_TIMEOUT, onclose, onerror } = options;
|
|
20
|
+
const socket = new WebSocket(url);
|
|
21
|
+
if (!onclose) {
|
|
22
|
+
socket.onclose = () => {
|
|
23
|
+
log.info(`JSON RPC Socket close ${url}`);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
socket.onclose = onclose;
|
|
28
|
+
}
|
|
29
|
+
if (!onerror) {
|
|
30
|
+
socket.onerror = (error) => {
|
|
31
|
+
log.error(`JSON RPC Socket error ${url}`, error);
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
socket.onerror = onerror;
|
|
36
|
+
}
|
|
37
|
+
return new Promise((resolve, reject) => {
|
|
38
|
+
socket.addEventListener('open', () => {
|
|
39
|
+
resolve(new JsonRpcSocket(socket, responseTimeout));
|
|
40
|
+
});
|
|
41
|
+
socket.addEventListener('error', (error) => {
|
|
42
|
+
reject(error);
|
|
43
|
+
});
|
|
44
|
+
setTimeout(() => reject, connectTimeout);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
close() {
|
|
48
|
+
this.socket.close();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Sends a JSON-RPC request through the socket and waits for a single response.
|
|
52
|
+
*/
|
|
53
|
+
async request(request) {
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
request.id ??= uuidv4();
|
|
56
|
+
const handleResponse = (event) => {
|
|
57
|
+
const jsonRpsResponse = JSON.parse(event.data);
|
|
58
|
+
if (jsonRpsResponse.id === request.id) {
|
|
59
|
+
// if the incoming response id matches the request id, we will remove the listener and resolve the response
|
|
60
|
+
this.socket.removeEventListener('message', handleResponse);
|
|
61
|
+
return resolve(jsonRpsResponse);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
// subscribe to the listener before sending the request
|
|
65
|
+
this.socket.addEventListener('message', handleResponse);
|
|
66
|
+
this.send(request);
|
|
67
|
+
// reject this promise if we don't receive any response back within the timeout period
|
|
68
|
+
setTimeout(() => {
|
|
69
|
+
this.socket.removeEventListener('message', handleResponse);
|
|
70
|
+
reject(new Error('request timed out'));
|
|
71
|
+
}, this.responseTimeout);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Sends a JSON-RPC request through the socket and keeps a listener open to read associated responses as they arrive.
|
|
76
|
+
* Returns a close method to clean up the listener.
|
|
77
|
+
*/
|
|
78
|
+
async subscribe(request, listener) {
|
|
79
|
+
if (!request.method.startsWith('rpc.subscribe.')) {
|
|
80
|
+
throw new Error('subscribe rpc requests must include the `rpc.subscribe` prefix');
|
|
81
|
+
}
|
|
82
|
+
if (!request.subscription) {
|
|
83
|
+
throw new Error('subscribe rpc requests must include subscribe options');
|
|
84
|
+
}
|
|
85
|
+
const subscriptionId = request.subscription.id;
|
|
86
|
+
const socketEventListener = (event) => {
|
|
87
|
+
const jsonRpcResponse = JSON.parse(event.data.toString());
|
|
88
|
+
if (jsonRpcResponse.id === subscriptionId) {
|
|
89
|
+
if (jsonRpcResponse.error !== undefined) {
|
|
90
|
+
// remove the event listener upon receipt of a JSON RPC Error.
|
|
91
|
+
this.socket.removeEventListener('message', socketEventListener);
|
|
92
|
+
this.closeSubscription(subscriptionId);
|
|
93
|
+
}
|
|
94
|
+
listener(jsonRpcResponse);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
this.socket.addEventListener('message', socketEventListener);
|
|
98
|
+
const response = await this.request(request);
|
|
99
|
+
if (response.error) {
|
|
100
|
+
this.socket.removeEventListener('message', socketEventListener);
|
|
101
|
+
return { response };
|
|
102
|
+
}
|
|
103
|
+
// clean up listener and create a `rpc.subscribe.close` message to use when closing this JSON RPC subscription
|
|
104
|
+
const close = async () => {
|
|
105
|
+
this.socket.removeEventListener('message', socketEventListener);
|
|
106
|
+
await this.closeSubscription(subscriptionId);
|
|
107
|
+
};
|
|
108
|
+
return {
|
|
109
|
+
response,
|
|
110
|
+
close
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
closeSubscription(id) {
|
|
114
|
+
const requestId = uuidv4();
|
|
115
|
+
const request = createJsonRpcSubscriptionRequest(requestId, 'rpc.subscribe.close', {}, id);
|
|
116
|
+
return this.request(request);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Sends a JSON-RPC request through the socket. You must subscribe to a message listener separately to capture the response.
|
|
120
|
+
*/
|
|
121
|
+
send(request) {
|
|
122
|
+
this.socket.send(JSON.stringify(request));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=json-rpc-socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-rpc-socket.js","sourceRoot":"","sources":["../../../src/json-rpc-socket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Server } from 'http';
|
|
2
|
+
export declare class HttpServerShutdownHandler {
|
|
3
|
+
private tcpSockets;
|
|
4
|
+
private tcpSocketId;
|
|
5
|
+
private server;
|
|
6
|
+
private stopping;
|
|
7
|
+
constructor(server: Server);
|
|
8
|
+
stop(callback: any): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=http-server-shutdown-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server-shutdown-handler.d.ts","sourceRoot":"","sources":["../../../../src/lib/http-server-shutdown-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAKnC,qBAAa,yBAAyB;IACpC,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAU;gBAEd,MAAM,EAAE,MAAM;IA4C1B,IAAI,CAAC,QAAQ,KAAA,GAAG,IAAI;CAuBrB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const SOCKET_IDLE_SYMBOL = Symbol('idle');
|
|
2
|
+
export class HttpServerShutdownHandler {
|
|
3
|
+
tcpSockets;
|
|
4
|
+
tcpSocketId;
|
|
5
|
+
server;
|
|
6
|
+
stopping;
|
|
7
|
+
constructor(server) {
|
|
8
|
+
this.tcpSockets = {};
|
|
9
|
+
this.tcpSocketId = 1;
|
|
10
|
+
this.server = server;
|
|
11
|
+
this.stopping = false;
|
|
12
|
+
// This event is emitted when a new TCP stream is established
|
|
13
|
+
this.server.on('connection', (socket) => {
|
|
14
|
+
// set socket to idle. this same socket will be accessible within the `http.on('request', (req, res))` event listener
|
|
15
|
+
// as `request.connection`
|
|
16
|
+
socket[SOCKET_IDLE_SYMBOL] = true;
|
|
17
|
+
const tcpSocketId = this.tcpSocketId++;
|
|
18
|
+
this.tcpSockets[tcpSocketId] = socket;
|
|
19
|
+
// This event is emitted when a tcp stream is `destroy`ed
|
|
20
|
+
socket.on('close', () => {
|
|
21
|
+
delete this.tcpSockets[tcpSocketId];
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
// Emitted each time there is a request. There may be multiple requests
|
|
25
|
+
// per connection (in the case of HTTP Keep-Alive connections).
|
|
26
|
+
this.server.on('request', (request, response) => {
|
|
27
|
+
const { socket } = request;
|
|
28
|
+
// set __idle to false because this socket is being used for an incoming request
|
|
29
|
+
socket[SOCKET_IDLE_SYMBOL] = false;
|
|
30
|
+
// Emitted when the response has been sent. More specifically, this event is emitted
|
|
31
|
+
// when the last segment of the response headers and body have been handed off to the
|
|
32
|
+
// operating system for transmission over the network.
|
|
33
|
+
// It does not imply that the client has received anything yet.
|
|
34
|
+
response.on('finish', () => {
|
|
35
|
+
// set __idle back to true because the socket has finished facilitating a request. This socket may be used again without being
|
|
36
|
+
// destroyed if keep-alive is being leveraged
|
|
37
|
+
socket[SOCKET_IDLE_SYMBOL] = true;
|
|
38
|
+
if (this.stopping) {
|
|
39
|
+
socket.destroy();
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
stop(callback) {
|
|
45
|
+
this.stopping = true;
|
|
46
|
+
// Stops the server from accepting new connections and keeps existing connections. This function is asynchronous,
|
|
47
|
+
// the server is finally closed when all connections are ended and the server emits a 'close' event.
|
|
48
|
+
// The optional callback will be called once the 'close' event occurs.
|
|
49
|
+
// The callback will be called with an Error as its only argument if the server was not open when close is called.
|
|
50
|
+
this.server.close(() => {
|
|
51
|
+
this.tcpSocketId = 0;
|
|
52
|
+
this.stopping = false;
|
|
53
|
+
callback();
|
|
54
|
+
});
|
|
55
|
+
// close all idle sockets. the remaining sockets facilitating active requests
|
|
56
|
+
// will be closed after they've served responses back.
|
|
57
|
+
for (const tcpSocketId in this.tcpSockets) {
|
|
58
|
+
const socket = this.tcpSockets[tcpSocketId];
|
|
59
|
+
if (socket[SOCKET_IDLE_SYMBOL]) {
|
|
60
|
+
socket.destroy();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=http-server-shutdown-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-server-shutdown-handler.js","sourceRoot":"","sources":["../../../../src/lib/http-server-shutdown-handler.ts"],"names":[],"mappings":"AAGA,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE1C,MAAM,OAAO,yBAAyB;IAC5B,UAAU,CAAiC;IAC3C,WAAW,CAAS;IACpB,MAAM,CAAS;IACf,QAAQ,CAAU;IAE1B,YAAY,MAAc;QACxB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEtB,6DAA6D;QAC7D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;YACtC,qHAAqH;YACrH,0BAA0B;YAC1B,MAAM,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;YAClC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;YAEtC,yDAAyD;YACzD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACtB,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,uEAAuE;QACvE,+DAA+D;QAC/D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;YAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;YAE3B,gFAAgF;YAChF,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC;YAEnC,oFAAoF;YACpF,qFAAqF;YACrF,sDAAsD;YACtD,+DAA+D;YAC/D,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACzB,8HAA8H;gBAC9H,6CAA6C;gBAC7C,MAAM,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;gBAElC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAClB,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,QAAQ;QACX,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,iHAAiH;QACjH,oGAAoG;QACpG,sEAAsE;QACtE,kHAAkH;QAClH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;YACrB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,QAAQ,EAAE,CAAC;QACb,CAAC,CAAC,CAAC;QAEH,6EAA6E;QAC7E,sDAAsD;QACtD,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAE5C,IAAI,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Dwn, MessageSubscriptionHandler } from '@enbox/dwn-sdk-js';
|
|
2
|
+
import type { Readable } from 'node:stream';
|
|
3
|
+
import type { JsonRpcId, JsonRpcRequest, JsonRpcResponse } from './json-rpc.js';
|
|
4
|
+
import type { SocketConnection } from '../connection/socket-connection.js';
|
|
5
|
+
export type RequestContext = {
|
|
6
|
+
transport: 'http' | 'ws';
|
|
7
|
+
dwn: Dwn;
|
|
8
|
+
/** the socket connection associated with this request if over sockets */
|
|
9
|
+
socketConnection?: SocketConnection;
|
|
10
|
+
subscriptionRequest?: {
|
|
11
|
+
/** The JsonRpcId of the subscription handler */
|
|
12
|
+
id: JsonRpcId;
|
|
13
|
+
/** The `MessageEvent` handler associated with a subscription request, only used in `ws` requests */
|
|
14
|
+
subscriptionHandler: MessageSubscriptionHandler;
|
|
15
|
+
};
|
|
16
|
+
/** The `Readable` stream associated with a `RecordsWrite` request only used in `http` requests */
|
|
17
|
+
dataStream?: Readable;
|
|
18
|
+
};
|
|
19
|
+
export type HandlerResponse = {
|
|
20
|
+
jsonRpcResponse: JsonRpcResponse;
|
|
21
|
+
dataStream?: Readable;
|
|
22
|
+
};
|
|
23
|
+
export type JsonRpcHandler = (JsonRpcRequest: JsonRpcRequest, context: RequestContext) => Promise<HandlerResponse>;
|
|
24
|
+
export declare class JsonRpcRouter {
|
|
25
|
+
private methodHandlers;
|
|
26
|
+
constructor();
|
|
27
|
+
on(methodName: string, handler: JsonRpcHandler): void;
|
|
28
|
+
handle(rpcRequest: JsonRpcRequest, context: RequestContext): Promise<HandlerResponse>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=json-rpc-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-rpc-router.d.ts","sourceRoot":"","sources":["../../../../src/lib/json-rpc-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,GAAG,EAAE,GAAG,CAAC;IACT,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,mBAAmB,CAAC,EAAE;QACpB,gDAAgD;QAChD,EAAE,EAAE,SAAS,CAAC;QACd,oGAAoG;QACpG,mBAAmB,EAAE,0BAA0B,CAAC;KACjD,CAAA;IACD,kGAAkG;IAClG,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,CAC3B,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,eAAe,CAAC,CAAC;AAE9B,qBAAa,aAAa;IACxB,OAAO,CAAC,cAAc,CAAuC;;IAM7D,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAI/C,MAAM,CACV,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,eAAe,CAAC;CAK5B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export class JsonRpcRouter {
|
|
2
|
+
methodHandlers;
|
|
3
|
+
constructor() {
|
|
4
|
+
this.methodHandlers = {};
|
|
5
|
+
}
|
|
6
|
+
on(methodName, handler) {
|
|
7
|
+
this.methodHandlers[methodName] = handler;
|
|
8
|
+
}
|
|
9
|
+
async handle(rpcRequest, context) {
|
|
10
|
+
const handler = this.methodHandlers[rpcRequest.method];
|
|
11
|
+
return await handler(rpcRequest, context);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=json-rpc-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-rpc-router.js","sourceRoot":"","sources":["../../../../src/lib/json-rpc-router.ts"],"names":[],"mappings":"AAgCA,MAAM,OAAO,aAAa;IAChB,cAAc,CAAuC;IAE7D;QACE,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,EAAE,CAAC,UAAkB,EAAE,OAAuB;QAC5C,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM,CACV,UAA0B,EAC1B,OAAuB;QAEvB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEvD,OAAO,MAAM,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;CACF"}
|