@omujs/omu 0.9.10 → 0.9.27
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/CHANGELOG.md +154 -0
- package/README.md +0 -1
- package/dist/dts/address.d.ts +4 -4
- package/dist/dts/api/asset/extension.d.ts +25 -0
- package/dist/dts/api/asset/index.d.ts +2 -0
- package/dist/dts/api/dashboard/extension.d.ts +186 -0
- package/dist/dts/api/dashboard/handler.d.ts +21 -0
- package/dist/dts/api/dashboard/index.d.ts +3 -0
- package/dist/dts/api/dashboard/packets.d.ts +73 -0
- package/dist/dts/api/endpoint/endpoint.d.ts +32 -0
- package/dist/dts/api/endpoint/extension.d.ts +23 -0
- package/dist/dts/api/endpoint/index.d.ts +2 -0
- package/dist/dts/api/endpoint/packets.d.ts +51 -0
- package/dist/dts/api/extension-registry.d.ts +8 -0
- package/dist/dts/api/extension.d.ts +11 -0
- package/dist/dts/api/http/extension.d.ts +174 -0
- package/dist/dts/api/http/index.d.ts +1 -0
- package/dist/dts/api/i18n/extension.d.ts +22 -0
- package/dist/dts/api/i18n/index.d.ts +1 -0
- package/dist/dts/api/index.d.ts +2 -0
- package/dist/dts/api/logger/extension.d.ts +25 -0
- package/dist/dts/api/logger/index.d.ts +1 -0
- package/dist/dts/api/logger/packets.d.ts +18 -0
- package/dist/dts/api/permission/extension.d.ts +18 -0
- package/dist/dts/api/permission/index.d.ts +1 -0
- package/dist/dts/api/permission/permission.d.ts +25 -0
- package/dist/dts/api/plugin/extension.d.ts +43 -0
- package/dist/dts/api/plugin/index.d.ts +2 -0
- package/dist/dts/api/plugin/package-info.d.ts +84 -0
- package/dist/dts/api/registry/extension.d.ts +26 -0
- package/dist/dts/api/registry/index.d.ts +2 -0
- package/dist/dts/api/registry/packets.d.ts +20 -0
- package/dist/dts/api/registry/registry.d.ts +44 -0
- package/dist/dts/api/server/extension.d.ts +47 -0
- package/dist/dts/api/server/index.d.ts +1 -0
- package/dist/dts/api/session/extension.d.ts +51 -0
- package/dist/dts/api/session/index.d.ts +1 -0
- package/dist/dts/api/signal/extension.d.ts +22 -0
- package/dist/dts/api/signal/index.d.ts +1 -0
- package/dist/dts/api/signal/packets.d.ts +21 -0
- package/dist/dts/api/signal/signal.d.ts +33 -0
- package/dist/dts/api/table/extension.d.ts +29 -0
- package/dist/dts/api/table/index.d.ts +2 -0
- package/dist/dts/api/table/packets.d.ts +65 -0
- package/dist/dts/api/table/table.d.ts +76 -0
- package/dist/dts/app.d.ts +44 -37
- package/dist/dts/const.d.ts +0 -1
- package/dist/dts/errors.d.ts +18 -13
- package/dist/dts/event/index.d.ts +6 -0
- package/dist/dts/helper.d.ts +13 -0
- package/dist/dts/identifier.d.ts +45 -39
- package/dist/dts/index.d.ts +37 -7
- package/dist/dts/localization/index.d.ts +2 -3
- package/dist/dts/localization/locale.d.ts +732 -733
- package/dist/dts/localization/localization.d.ts +3 -6
- package/dist/dts/lock.d.ts +6 -0
- package/dist/dts/network/connection.d.ts +13 -13
- package/dist/dts/network/encryption.d.ts +38 -0
- package/dist/dts/network/frame-transport.d.ts +22 -0
- package/dist/dts/network/index.d.ts +5 -4
- package/dist/dts/network/network.d.ts +52 -51
- package/dist/dts/network/packet/index.d.ts +2 -3
- package/dist/dts/network/packet/packet-types.d.ts +73 -52
- package/dist/dts/network/packet/packet.d.ts +26 -22
- package/dist/dts/network/websocket-transport.d.ts +24 -0
- package/dist/dts/omu.d.ts +60 -49
- package/dist/dts/serialize/bytebuffer.d.ts +71 -0
- package/dist/dts/serialize/index.d.ts +2 -0
- package/dist/dts/serialize/serializer.d.ts +38 -0
- package/dist/dts/token.d.ts +11 -10
- package/dist/dts/version.d.ts +1 -2
- package/dist/esm/address.js +4 -2
- package/dist/esm/api/asset/extension.js +877 -0
- package/dist/esm/api/asset/index.js +875 -0
- package/dist/esm/api/dashboard/extension.js +1281 -0
- package/dist/esm/api/dashboard/handler.js +4 -0
- package/dist/esm/api/dashboard/index.js +1279 -0
- package/dist/esm/api/dashboard/packets.js +413 -0
- package/dist/esm/api/endpoint/endpoint.js +380 -0
- package/dist/esm/api/endpoint/extension.js +1087 -0
- package/dist/esm/api/endpoint/index.js +380 -0
- package/dist/esm/api/endpoint/packets.js +790 -0
- package/dist/esm/api/extension-registry.js +23 -0
- package/dist/esm/api/extension.js +275 -0
- package/dist/esm/api/http/extension.js +1426 -0
- package/dist/esm/api/http/index.js +1312 -0
- package/dist/esm/api/i18n/extension.js +1237 -0
- package/dist/esm/api/i18n/index.js +1235 -0
- package/dist/esm/api/index.js +292 -0
- package/dist/esm/api/logger/extension.js +847 -0
- package/dist/esm/api/logger/index.js +843 -0
- package/dist/esm/api/logger/packets.js +664 -0
- package/dist/esm/api/permission/extension.js +529 -0
- package/dist/esm/api/permission/index.js +291 -0
- package/dist/esm/api/permission/permission.js +291 -0
- package/dist/esm/api/plugin/extension.js +528 -0
- package/dist/esm/api/plugin/index.js +526 -0
- package/dist/esm/api/plugin/package-info.js +4 -0
- package/dist/esm/api/registry/extension.js +1170 -0
- package/dist/esm/api/registry/index.js +1169 -0
- package/dist/esm/api/registry/packets.js +685 -0
- package/dist/esm/api/registry/registry.js +380 -0
- package/dist/esm/api/server/extension.js +2009 -0
- package/dist/esm/api/server/index.js +1987 -0
- package/dist/esm/api/session/extension.js +2111 -0
- package/dist/esm/api/session/index.js +2111 -0
- package/dist/esm/api/signal/extension.js +1022 -0
- package/dist/esm/api/signal/index.js +376 -0
- package/dist/esm/api/signal/packets.js +681 -0
- package/dist/esm/api/signal/signal.js +376 -0
- package/dist/esm/api/table/extension.js +1544 -0
- package/dist/esm/api/table/index.js +1543 -0
- package/dist/esm/api/table/packets.js +895 -0
- package/dist/esm/api/table/table.js +380 -0
- package/dist/esm/app.js +259 -40
- package/dist/esm/const.js +11 -3
- package/dist/esm/errors.js +533 -40
- package/dist/esm/event/index.js +22 -0
- package/dist/esm/helper.js +15 -0
- package/dist/esm/identifier.js +244 -139
- package/dist/esm/index.js +4837 -6
- package/dist/esm/localization/index.js +742 -2
- package/dist/esm/localization/locale.js +741 -735
- package/dist/esm/localization/localization.js +4 -2
- package/dist/esm/lock.js +46 -0
- package/dist/esm/network/connection.js +288 -27
- package/dist/esm/network/encryption.js +977 -0
- package/dist/esm/network/frame-transport.js +525 -0
- package/dist/esm/network/index.js +1614 -2
- package/dist/esm/network/network.js +1337 -195
- package/dist/esm/network/packet/index.js +482 -2
- package/dist/esm/network/packet/packet-types.js +478 -80
- package/dist/esm/network/packet/packet.js +125 -16
- package/dist/esm/network/websocket-transport.js +487 -0
- package/dist/esm/omu.js +4621 -91
- package/dist/esm/serialize/bytebuffer.js +378 -0
- package/dist/esm/serialize/index.js +465 -0
- package/dist/esm/serialize/serializer.js +97 -0
- package/dist/esm/token.js +42 -18
- package/dist/esm/version.js +9 -2
- package/package.json +26 -33
- package/src/address.ts +1 -0
- package/src/api/asset/extension.ts +159 -0
- package/src/api/asset/index.ts +6 -0
- package/src/api/dashboard/extension.ts +614 -0
- package/src/api/dashboard/handler.ts +23 -0
- package/src/api/dashboard/index.ts +36 -0
- package/src/api/dashboard/packets.ts +126 -0
- package/src/api/endpoint/endpoint.ts +56 -0
- package/src/api/endpoint/extension.ts +133 -0
- package/src/api/endpoint/index.ts +3 -0
- package/src/api/endpoint/packets.ts +176 -0
- package/src/api/extension-registry.ts +17 -0
- package/src/{extension → api}/extension.ts +3 -4
- package/src/api/http/extension.ts +752 -0
- package/src/api/http/index.ts +2 -0
- package/src/{extension/i18n/i18n-extension.ts → api/i18n/extension.ts} +9 -10
- package/src/api/i18n/index.ts +2 -0
- package/src/{extension/logger/logger-extension.ts → api/logger/extension.ts} +16 -17
- package/src/api/logger/index.ts +4 -0
- package/src/{extension → api}/logger/packets.ts +3 -3
- package/src/{extension/permission/permission-extension.ts → api/permission/extension.ts} +24 -23
- package/src/api/permission/index.ts +2 -0
- package/src/{extension → api}/permission/permission.ts +8 -11
- package/src/{extension/plugin/plugin-extension.ts → api/plugin/extension.ts} +32 -19
- package/src/api/plugin/index.ts +3 -0
- package/src/{extension/registry/registry-extension.ts → api/registry/extension.ts} +76 -47
- package/src/api/registry/index.ts +3 -0
- package/src/api/registry/packets.ts +64 -0
- package/src/api/registry/registry.ts +73 -0
- package/src/api/server/extension.ts +126 -0
- package/src/api/server/index.ts +11 -0
- package/src/api/session/extension.ts +196 -0
- package/src/api/session/index.ts +7 -0
- package/src/{extension/signal/signal-extension.ts → api/signal/extension.ts} +42 -35
- package/src/api/signal/index.ts +1 -0
- package/src/api/signal/packets.ts +61 -0
- package/src/api/signal/signal.ts +67 -0
- package/src/{extension/table/table-extension.ts → api/table/extension.ts} +111 -154
- package/src/api/table/index.ts +3 -0
- package/src/{extension → api}/table/packets.ts +28 -27
- package/src/{extension → api}/table/table.ts +24 -18
- package/src/app.ts +43 -25
- package/src/const.ts +2 -2
- package/src/errors.ts +12 -0
- package/src/helper.ts +16 -0
- package/src/identifier.ts +59 -4
- package/src/index.ts +86 -5
- package/src/localization/index.ts +2 -2
- package/src/lock.ts +43 -0
- package/src/network/connection.ts +7 -5
- package/src/network/encryption.ts +221 -0
- package/src/network/frame-transport.ts +186 -0
- package/src/network/index.ts +4 -1
- package/src/network/network.ts +138 -90
- package/src/network/packet/index.ts +3 -2
- package/src/network/packet/packet-types.ts +79 -36
- package/src/network/packet/packet.ts +20 -11
- package/src/network/websocket-transport.ts +123 -0
- package/src/omu.ts +56 -30
- package/src/serialize/bytebuffer.ts +424 -0
- package/src/serialize/index.ts +2 -0
- package/src/serialize/serializer.ts +149 -0
- package/src/token.ts +28 -14
- package/src/version.ts +1 -1
- package/tsconfig.json +8 -2
- package/tsconfig.tsbuildinfo +1 -0
- package/LICENSE +0 -21
- package/dist/dts/address.d.ts.map +0 -1
- package/dist/dts/app.d.ts.map +0 -1
- package/dist/dts/bytebuffer.d.ts +0 -49
- package/dist/dts/bytebuffer.d.ts.map +0 -1
- package/dist/dts/client.d.ts +0 -48
- package/dist/dts/client.d.ts.map +0 -1
- package/dist/dts/const.d.ts.map +0 -1
- package/dist/dts/errors.d.ts.map +0 -1
- package/dist/dts/event-emitter.d.ts +0 -7
- package/dist/dts/event-emitter.d.ts.map +0 -1
- package/dist/dts/extension/asset/asset-extension.d.ts +0 -24
- package/dist/dts/extension/asset/asset-extension.d.ts.map +0 -1
- package/dist/dts/extension/asset/index.d.ts +0 -2
- package/dist/dts/extension/asset/index.d.ts.map +0 -1
- package/dist/dts/extension/dashboard/dashboard-extension.d.ts +0 -29
- package/dist/dts/extension/dashboard/dashboard-extension.d.ts.map +0 -1
- package/dist/dts/extension/dashboard/dashboard.d.ts +0 -10
- package/dist/dts/extension/dashboard/dashboard.d.ts.map +0 -1
- package/dist/dts/extension/dashboard/index.d.ts +0 -3
- package/dist/dts/extension/dashboard/index.d.ts.map +0 -1
- package/dist/dts/extension/dashboard/packets.d.ts +0 -41
- package/dist/dts/extension/dashboard/packets.d.ts.map +0 -1
- package/dist/dts/extension/endpoint/endpoint-extension.d.ts +0 -16
- package/dist/dts/extension/endpoint/endpoint-extension.d.ts.map +0 -1
- package/dist/dts/extension/endpoint/endpoint.d.ts +0 -22
- package/dist/dts/extension/endpoint/endpoint.d.ts.map +0 -1
- package/dist/dts/extension/endpoint/index.d.ts +0 -3
- package/dist/dts/extension/endpoint/index.d.ts.map +0 -1
- package/dist/dts/extension/endpoint/packets.d.ts +0 -24
- package/dist/dts/extension/endpoint/packets.d.ts.map +0 -1
- package/dist/dts/extension/extension-registry.d.ts +0 -12
- package/dist/dts/extension/extension-registry.d.ts.map +0 -1
- package/dist/dts/extension/extension.d.ts +0 -13
- package/dist/dts/extension/extension.d.ts.map +0 -1
- package/dist/dts/extension/i18n/i18n-extension.d.ts +0 -21
- package/dist/dts/extension/i18n/i18n-extension.d.ts.map +0 -1
- package/dist/dts/extension/i18n/index.d.ts +0 -2
- package/dist/dts/extension/i18n/index.d.ts.map +0 -1
- package/dist/dts/extension/index.d.ts +0 -3
- package/dist/dts/extension/index.d.ts.map +0 -1
- package/dist/dts/extension/logger/index.d.ts +0 -2
- package/dist/dts/extension/logger/index.d.ts.map +0 -1
- package/dist/dts/extension/logger/logger-extension.d.ts +0 -25
- package/dist/dts/extension/logger/logger-extension.d.ts.map +0 -1
- package/dist/dts/extension/logger/packets.d.ts +0 -19
- package/dist/dts/extension/logger/packets.d.ts.map +0 -1
- package/dist/dts/extension/permission/index.d.ts +0 -3
- package/dist/dts/extension/permission/index.d.ts.map +0 -1
- package/dist/dts/extension/permission/permission-extension.d.ts +0 -18
- package/dist/dts/extension/permission/permission-extension.d.ts.map +0 -1
- package/dist/dts/extension/permission/permission.d.ts +0 -28
- package/dist/dts/extension/permission/permission.d.ts.map +0 -1
- package/dist/dts/extension/plugin/index.d.ts +0 -2
- package/dist/dts/extension/plugin/index.d.ts.map +0 -1
- package/dist/dts/extension/plugin/package-info.d.ts +0 -85
- package/dist/dts/extension/plugin/package-info.d.ts.map +0 -1
- package/dist/dts/extension/plugin/plugin-extension.d.ts +0 -34
- package/dist/dts/extension/plugin/plugin-extension.d.ts.map +0 -1
- package/dist/dts/extension/registry/index.d.ts +0 -3
- package/dist/dts/extension/registry/index.d.ts.map +0 -1
- package/dist/dts/extension/registry/packets.d.ts +0 -17
- package/dist/dts/extension/registry/packets.d.ts.map +0 -1
- package/dist/dts/extension/registry/registry-extension.d.ts +0 -19
- package/dist/dts/extension/registry/registry-extension.d.ts.map +0 -1
- package/dist/dts/extension/registry/registry.d.ts +0 -40
- package/dist/dts/extension/registry/registry.d.ts.map +0 -1
- package/dist/dts/extension/server/index.d.ts +0 -2
- package/dist/dts/extension/server/index.d.ts.map +0 -1
- package/dist/dts/extension/server/server-extension.d.ts +0 -41
- package/dist/dts/extension/server/server-extension.d.ts.map +0 -1
- package/dist/dts/extension/signal/index.d.ts +0 -3
- package/dist/dts/extension/signal/index.d.ts.map +0 -1
- package/dist/dts/extension/signal/packets.d.ts +0 -17
- package/dist/dts/extension/signal/packets.d.ts.map +0 -1
- package/dist/dts/extension/signal/signal-extension.d.ts +0 -18
- package/dist/dts/extension/signal/signal-extension.d.ts.map +0 -1
- package/dist/dts/extension/signal/signal.d.ts +0 -33
- package/dist/dts/extension/signal/signal.d.ts.map +0 -1
- package/dist/dts/extension/table/index.d.ts +0 -3
- package/dist/dts/extension/table/index.d.ts.map +0 -1
- package/dist/dts/extension/table/packets.d.ts +0 -66
- package/dist/dts/extension/table/packets.d.ts.map +0 -1
- package/dist/dts/extension/table/table-extension.d.ts +0 -31
- package/dist/dts/extension/table/table-extension.d.ts.map +0 -1
- package/dist/dts/extension/table/table.d.ts +0 -79
- package/dist/dts/extension/table/table.d.ts.map +0 -1
- package/dist/dts/identifier.d.ts.map +0 -1
- package/dist/dts/index.d.ts.map +0 -1
- package/dist/dts/interface.d.ts +0 -7
- package/dist/dts/interface.d.ts.map +0 -1
- package/dist/dts/localization/index.d.ts.map +0 -1
- package/dist/dts/localization/locale.d.ts.map +0 -1
- package/dist/dts/localization/localization.d.ts.map +0 -1
- package/dist/dts/model.d.ts +0 -5
- package/dist/dts/model.d.ts.map +0 -1
- package/dist/dts/network/connection.d.ts.map +0 -1
- package/dist/dts/network/index.d.ts.map +0 -1
- package/dist/dts/network/network.d.ts.map +0 -1
- package/dist/dts/network/packet/index.d.ts.map +0 -1
- package/dist/dts/network/packet/packet-types.d.ts.map +0 -1
- package/dist/dts/network/packet/packet.d.ts.map +0 -1
- package/dist/dts/network/websocket-connection.d.ts +0 -20
- package/dist/dts/network/websocket-connection.d.ts.map +0 -1
- package/dist/dts/omu.d.ts.map +0 -1
- package/dist/dts/serializer.d.ts +0 -22
- package/dist/dts/serializer.d.ts.map +0 -1
- package/dist/dts/token.d.ts.map +0 -1
- package/dist/dts/version.d.ts.map +0 -1
- package/dist/esm/address.js.map +0 -1
- package/dist/esm/app.js.map +0 -1
- package/dist/esm/bytebuffer.js +0 -191
- package/dist/esm/bytebuffer.js.map +0 -1
- package/dist/esm/client.js +0 -2
- package/dist/esm/client.js.map +0 -1
- package/dist/esm/const.js.map +0 -1
- package/dist/esm/errors.js.map +0 -1
- package/dist/esm/event-emitter.js +0 -15
- package/dist/esm/event-emitter.js.map +0 -1
- package/dist/esm/extension/asset/asset-extension.js +0 -104
- package/dist/esm/extension/asset/asset-extension.js.map +0 -1
- package/dist/esm/extension/asset/index.js +0 -2
- package/dist/esm/extension/asset/index.js.map +0 -1
- package/dist/esm/extension/dashboard/dashboard-extension.js +0 -186
- package/dist/esm/extension/dashboard/dashboard-extension.js.map +0 -1
- package/dist/esm/extension/dashboard/dashboard.js +0 -2
- package/dist/esm/extension/dashboard/dashboard.js.map +0 -1
- package/dist/esm/extension/dashboard/index.js +0 -2
- package/dist/esm/extension/dashboard/index.js.map +0 -1
- package/dist/esm/extension/dashboard/packets.js +0 -96
- package/dist/esm/extension/dashboard/packets.js.map +0 -1
- package/dist/esm/extension/endpoint/endpoint-extension.js +0 -86
- package/dist/esm/extension/endpoint/endpoint-extension.js.map +0 -1
- package/dist/esm/extension/endpoint/endpoint.js +0 -22
- package/dist/esm/extension/endpoint/endpoint.js.map +0 -1
- package/dist/esm/extension/endpoint/index.js +0 -2
- package/dist/esm/extension/endpoint/index.js.map +0 -1
- package/dist/esm/extension/endpoint/packets.js +0 -77
- package/dist/esm/extension/endpoint/packets.js.map +0 -1
- package/dist/esm/extension/extension-registry.js +0 -34
- package/dist/esm/extension/extension-registry.js.map +0 -1
- package/dist/esm/extension/extension.js +0 -16
- package/dist/esm/extension/extension.js.map +0 -1
- package/dist/esm/extension/i18n/i18n-extension.js +0 -68
- package/dist/esm/extension/i18n/i18n-extension.js.map +0 -1
- package/dist/esm/extension/i18n/index.js +0 -2
- package/dist/esm/extension/i18n/index.js.map +0 -1
- package/dist/esm/extension/index.js +0 -3
- package/dist/esm/extension/index.js.map +0 -1
- package/dist/esm/extension/logger/index.js +0 -2
- package/dist/esm/extension/logger/index.js.map +0 -1
- package/dist/esm/extension/logger/logger-extension.js +0 -60
- package/dist/esm/extension/logger/logger-extension.js.map +0 -1
- package/dist/esm/extension/logger/packets.js +0 -33
- package/dist/esm/extension/logger/packets.js.map +0 -1
- package/dist/esm/extension/permission/index.js +0 -3
- package/dist/esm/extension/permission/index.js.map +0 -1
- package/dist/esm/extension/permission/permission-extension.js +0 -74
- package/dist/esm/extension/permission/permission-extension.js.map +0 -1
- package/dist/esm/extension/permission/permission.js +0 -28
- package/dist/esm/extension/permission/permission.js.map +0 -1
- package/dist/esm/extension/plugin/index.js +0 -2
- package/dist/esm/extension/plugin/index.js.map +0 -1
- package/dist/esm/extension/plugin/package-info.js +0 -2
- package/dist/esm/extension/plugin/package-info.js.map +0 -1
- package/dist/esm/extension/plugin/plugin-extension.js +0 -63
- package/dist/esm/extension/plugin/plugin-extension.js.map +0 -1
- package/dist/esm/extension/registry/index.js +0 -3
- package/dist/esm/extension/registry/index.js.map +0 -1
- package/dist/esm/extension/registry/packets.js +0 -48
- package/dist/esm/extension/registry/packets.js.map +0 -1
- package/dist/esm/extension/registry/registry-extension.js +0 -134
- package/dist/esm/extension/registry/registry-extension.js.map +0 -1
- package/dist/esm/extension/registry/registry.js +0 -55
- package/dist/esm/extension/registry/registry.js.map +0 -1
- package/dist/esm/extension/server/index.js +0 -2
- package/dist/esm/extension/server/index.js.map +0 -1
- package/dist/esm/extension/server/server-extension.js +0 -145
- package/dist/esm/extension/server/server-extension.js.map +0 -1
- package/dist/esm/extension/signal/index.js +0 -3
- package/dist/esm/extension/signal/index.js.map +0 -1
- package/dist/esm/extension/signal/packets.js +0 -44
- package/dist/esm/extension/signal/packets.js.map +0 -1
- package/dist/esm/extension/signal/signal-extension.js +0 -95
- package/dist/esm/extension/signal/signal-extension.js.map +0 -1
- package/dist/esm/extension/signal/signal.js +0 -53
- package/dist/esm/extension/signal/signal.js.map +0 -1
- package/dist/esm/extension/table/index.js +0 -3
- package/dist/esm/extension/table/index.js.map +0 -1
- package/dist/esm/extension/table/packets.js +0 -252
- package/dist/esm/extension/table/packets.js.map +0 -1
- package/dist/esm/extension/table/table-extension.js +0 -454
- package/dist/esm/extension/table/table-extension.js.map +0 -1
- package/dist/esm/extension/table/table.js +0 -20
- package/dist/esm/extension/table/table.js.map +0 -1
- package/dist/esm/identifier.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/interface.js +0 -2
- package/dist/esm/interface.js.map +0 -1
- package/dist/esm/localization/index.js.map +0 -1
- package/dist/esm/localization/locale.js.map +0 -1
- package/dist/esm/localization/localization.js.map +0 -1
- package/dist/esm/model.js +0 -2
- package/dist/esm/model.js.map +0 -1
- package/dist/esm/network/connection.js.map +0 -1
- package/dist/esm/network/index.js.map +0 -1
- package/dist/esm/network/network.js.map +0 -1
- package/dist/esm/network/packet/index.js.map +0 -1
- package/dist/esm/network/packet/packet-types.js.map +0 -1
- package/dist/esm/network/packet/packet.js.map +0 -1
- package/dist/esm/network/websocket-connection.js +0 -95
- package/dist/esm/network/websocket-connection.js.map +0 -1
- package/dist/esm/omu.js.map +0 -1
- package/dist/esm/serializer.js +0 -55
- package/dist/esm/serializer.js.map +0 -1
- package/dist/esm/token.js.map +0 -1
- package/dist/esm/version.js.map +0 -1
- package/eslint.config.js +0 -6
- package/src/bytebuffer.ts +0 -222
- package/src/client.ts +0 -53
- package/src/extension/asset/asset-extension.ts +0 -148
- package/src/extension/asset/index.ts +0 -6
- package/src/extension/dashboard/dashboard-extension.ts +0 -238
- package/src/extension/dashboard/dashboard.ts +0 -11
- package/src/extension/dashboard/index.ts +0 -9
- package/src/extension/dashboard/packets.ts +0 -98
- package/src/extension/endpoint/endpoint-extension.ts +0 -125
- package/src/extension/endpoint/endpoint.ts +0 -58
- package/src/extension/endpoint/index.ts +0 -3
- package/src/extension/endpoint/packets.ts +0 -78
- package/src/extension/extension-registry.ts +0 -39
- package/src/extension/i18n/index.ts +0 -2
- package/src/extension/logger/index.ts +0 -5
- package/src/extension/permission/index.ts +0 -3
- package/src/extension/plugin/index.ts +0 -4
- package/src/extension/registry/index.ts +0 -3
- package/src/extension/registry/packets.ts +0 -50
- package/src/extension/registry/registry.ts +0 -98
- package/src/extension/server/index.ts +0 -6
- package/src/extension/server/server-extension.ts +0 -180
- package/src/extension/signal/index.ts +0 -3
- package/src/extension/signal/packets.ts +0 -46
- package/src/extension/signal/signal.ts +0 -89
- package/src/extension/table/index.ts +0 -3
- package/src/interface.ts +0 -8
- package/src/model.ts +0 -4
- package/src/network/websocket-connection.ts +0 -109
- package/src/serializer.ts +0 -89
- /package/src/{extension → api}/index.ts +0 -0
- /package/src/{extension → api}/plugin/package-info.ts +0 -0
- /package/src/{event-emitter.ts → event/index.ts} +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Identifier } from '../../identifier';
|
|
2
|
+
import { ByteReader, ByteWriter } from '../../serialize';
|
|
3
|
+
import { RegistryPermissions, RegistryPermissionsJSON } from './registry';
|
|
4
|
+
|
|
5
|
+
export class RegistryPacket {
|
|
6
|
+
constructor(
|
|
7
|
+
public readonly id: Identifier,
|
|
8
|
+
public readonly value: Uint8Array | null,
|
|
9
|
+
) { }
|
|
10
|
+
|
|
11
|
+
public static serialize(packet: RegistryPacket): Uint8Array {
|
|
12
|
+
const writer = new ByteWriter();
|
|
13
|
+
writer.writeString(packet.id.key());
|
|
14
|
+
writer.writeBoolean(packet.value !== null);
|
|
15
|
+
if (packet.value !== null) {
|
|
16
|
+
writer.writeUint8Array(packet.value);
|
|
17
|
+
}
|
|
18
|
+
return writer.finish();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public static deserialize(data: Uint8Array): RegistryPacket {
|
|
22
|
+
const reader = ByteReader.fromUint8Array(data);
|
|
23
|
+
const id = Identifier.fromKey(reader.readString());
|
|
24
|
+
const existing = reader.readBoolean();
|
|
25
|
+
const value = existing ? reader.readUint8Array() : null;
|
|
26
|
+
return new RegistryPacket(id, value);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface RegisterPacketJSON {
|
|
31
|
+
id: string;
|
|
32
|
+
permissions: RegistryPermissionsJSON;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export class RegisterPacket {
|
|
36
|
+
constructor(
|
|
37
|
+
public readonly id: Identifier,
|
|
38
|
+
public readonly permissions: RegistryPermissions,
|
|
39
|
+
) {}
|
|
40
|
+
|
|
41
|
+
public static serialize(packet: RegisterPacket): RegisterPacketJSON {
|
|
42
|
+
const { permissions: perms } = packet;
|
|
43
|
+
return {
|
|
44
|
+
id: packet.id.key(),
|
|
45
|
+
permissions: {
|
|
46
|
+
all: perms.all ? Identifier.from(perms.all).key() : undefined,
|
|
47
|
+
read: perms.read ? Identifier.from(perms.read).key() : undefined,
|
|
48
|
+
write: perms.write ? Identifier.from(perms.write).key() : undefined,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public static deserialize(data: RegisterPacketJSON): RegisterPacket {
|
|
54
|
+
const { permissions: perms } = data;
|
|
55
|
+
return new RegisterPacket(
|
|
56
|
+
Identifier.from(data.id),
|
|
57
|
+
{
|
|
58
|
+
all: perms.all ? Identifier.from(perms.all) : undefined,
|
|
59
|
+
read: perms.read ? Identifier.from(perms.read) : undefined,
|
|
60
|
+
write: perms.write ? Identifier.from(perms.write) : undefined,
|
|
61
|
+
},
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { Unlisten } from '../../event';
|
|
2
|
+
import { Identifier, IntoId } from '../../identifier';
|
|
3
|
+
import type { JsonType, Serializable } from '../../serialize';
|
|
4
|
+
import { Serializer } from '../../serialize';
|
|
5
|
+
|
|
6
|
+
export interface RegistryPermissionsJSON {
|
|
7
|
+
all?: string;
|
|
8
|
+
read?: string;
|
|
9
|
+
write?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface RegistryPermissions {
|
|
13
|
+
all?: IntoId;
|
|
14
|
+
read?: IntoId;
|
|
15
|
+
write?: IntoId;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export class RegistryType<T> {
|
|
19
|
+
constructor(
|
|
20
|
+
public readonly id: Identifier,
|
|
21
|
+
public readonly defaultValue: T,
|
|
22
|
+
public readonly serializer: Serializable<T, Uint8Array>,
|
|
23
|
+
public readonly permissions: RegistryPermissions,
|
|
24
|
+
) { }
|
|
25
|
+
|
|
26
|
+
public static createJson<T, D extends JsonType = JsonType>(identifier: IntoId, {
|
|
27
|
+
name,
|
|
28
|
+
defaultValue,
|
|
29
|
+
permissions,
|
|
30
|
+
serializer,
|
|
31
|
+
}: {
|
|
32
|
+
name: string;
|
|
33
|
+
defaultValue: T;
|
|
34
|
+
permissions?: RegistryPermissions;
|
|
35
|
+
serializer?: Serializable<T, D>;
|
|
36
|
+
}): RegistryType<T> {
|
|
37
|
+
return new RegistryType(
|
|
38
|
+
Identifier.from(identifier).join(name),
|
|
39
|
+
defaultValue,
|
|
40
|
+
Serializer.pipe<T, D, Uint8Array>(serializer ?? Serializer.noop(), Serializer.json()),
|
|
41
|
+
permissions ?? {},
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public static createSerialized<T>(identifier: IntoId, {
|
|
46
|
+
name,
|
|
47
|
+
defaultValue,
|
|
48
|
+
serializer,
|
|
49
|
+
permissions,
|
|
50
|
+
}: {
|
|
51
|
+
name: string;
|
|
52
|
+
defaultValue: T;
|
|
53
|
+
serializer: Serializable<T, Uint8Array>;
|
|
54
|
+
permissions?: RegistryPermissions;
|
|
55
|
+
}): RegistryType<T> {
|
|
56
|
+
return new RegistryType(
|
|
57
|
+
Identifier.from(identifier).join(name),
|
|
58
|
+
defaultValue,
|
|
59
|
+
serializer,
|
|
60
|
+
permissions ?? {},
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface Registry<T> {
|
|
66
|
+
readonly type: RegistryType<T>;
|
|
67
|
+
readonly value: T;
|
|
68
|
+
get(): Promise<T>;
|
|
69
|
+
set(value: T): Promise<void>;
|
|
70
|
+
update(fn: (value: T) => PromiseLike<T> | T): Promise<T>;
|
|
71
|
+
modify(fn: (value: T) => PromiseLike<T> | T): Promise<T>;
|
|
72
|
+
listen(fn: (value: T) => void): Unlisten;
|
|
73
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { App, AppJson } from '../../app.js';
|
|
2
|
+
import { Identifier, IdentifierMap } from '../../identifier';
|
|
3
|
+
import { Omu } from '../../omu.js';
|
|
4
|
+
import { EndpointType } from '../endpoint/endpoint.js';
|
|
5
|
+
import { ExtensionType, type Extension } from '../extension.js';
|
|
6
|
+
import { Registry, RegistryType } from '../registry';
|
|
7
|
+
import { TableType, type Table } from '../table';
|
|
8
|
+
|
|
9
|
+
export const SERVER_EXTENSION_TYPE: ExtensionType<ServerExtension> = new ExtensionType(
|
|
10
|
+
'server',
|
|
11
|
+
(omu: Omu) => new ServerExtension(omu),
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
export interface AppIndexEntry {
|
|
15
|
+
url: string;
|
|
16
|
+
added_at: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export interface AppIndex {
|
|
20
|
+
indexes: Record<string, AppIndexEntry>;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const SERVER_APPS_READ_PERMISSION_ID: Identifier = SERVER_EXTENSION_TYPE.join('apps', 'read');
|
|
24
|
+
export const SERVER_APPS_WRITE_PERMISSION_ID: Identifier = SERVER_EXTENSION_TYPE.join('apps', 'write');
|
|
25
|
+
export const SERVER_INDEX_READ_PERMISSION_ID: Identifier = SERVER_EXTENSION_TYPE.join('index', 'read');
|
|
26
|
+
export const SERVER_INDEX_REGISTRY_TYPE: RegistryType<AppIndex> = RegistryType.createJson<AppIndex>(SERVER_EXTENSION_TYPE, {
|
|
27
|
+
name: 'index',
|
|
28
|
+
defaultValue: { 'indexes': {} },
|
|
29
|
+
permissions: {
|
|
30
|
+
write: SERVER_APPS_WRITE_PERMISSION_ID,
|
|
31
|
+
read: SERVER_INDEX_READ_PERMISSION_ID,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
const APP_TABLE_TYPE = TableType.createJson(SERVER_EXTENSION_TYPE, {
|
|
35
|
+
name: 'apps',
|
|
36
|
+
serializer: App,
|
|
37
|
+
key: (app) => app.id.key(),
|
|
38
|
+
permissions: {
|
|
39
|
+
all: SERVER_APPS_WRITE_PERMISSION_ID,
|
|
40
|
+
read: SERVER_APPS_READ_PERMISSION_ID,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
export const SERVER_SHUTDOWN_PERMISSION_ID: Identifier = SERVER_EXTENSION_TYPE.join('shutdown');
|
|
45
|
+
const SHUTDOWN_ENDPOINT_TYPE = EndpointType.createJson<boolean, boolean>(SERVER_EXTENSION_TYPE, {
|
|
46
|
+
name: 'shutdown',
|
|
47
|
+
permissionId: SERVER_SHUTDOWN_PERMISSION_ID,
|
|
48
|
+
});
|
|
49
|
+
export const TRUSTED_ORIGINS_GET_PERMISSION_ID: Identifier = SERVER_EXTENSION_TYPE.join('trusted_origins', 'get');
|
|
50
|
+
export const TRUSTED_ORIGINS_SET_PERMISSION_ID: Identifier = SERVER_EXTENSION_TYPE.join('trusted_origins', 'set');
|
|
51
|
+
const TRUSTED_HOSTS_REGISTRY_TYPE = RegistryType.createJson<Record<string, string>>(SERVER_EXTENSION_TYPE, {
|
|
52
|
+
name: 'trusted_hosts',
|
|
53
|
+
defaultValue: {},
|
|
54
|
+
permissions: {
|
|
55
|
+
read: TRUSTED_ORIGINS_GET_PERMISSION_ID,
|
|
56
|
+
write: TRUSTED_ORIGINS_SET_PERMISSION_ID,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
export class ServerExtension implements Extension {
|
|
61
|
+
public readonly type: ExtensionType<ServerExtension> = SERVER_EXTENSION_TYPE;
|
|
62
|
+
public readonly apps: Table<App>;
|
|
63
|
+
public readonly index: Registry<AppIndex>;
|
|
64
|
+
public readonly trustedHosts: Registry<Record<string, string>>;
|
|
65
|
+
|
|
66
|
+
constructor(private readonly omu: Omu) {
|
|
67
|
+
this.apps = omu.tables.get(APP_TABLE_TYPE);
|
|
68
|
+
this.index = omu.registries.get(SERVER_INDEX_REGISTRY_TYPE);
|
|
69
|
+
this.trustedHosts = omu.registries.get(TRUSTED_HOSTS_REGISTRY_TYPE);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public async shutdown(restart?: boolean): Promise<boolean> {
|
|
73
|
+
this.omu.endpoints.call(SHUTDOWN_ENDPOINT_TYPE, restart ?? false);
|
|
74
|
+
await new Promise<void>((resolve) => {
|
|
75
|
+
const unlisten = this.omu.network.event.disconnected.listen(() => {
|
|
76
|
+
resolve();
|
|
77
|
+
unlisten();
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export class SessionObserver {
|
|
85
|
+
constructor(
|
|
86
|
+
public readonly onConnectCallbacks: Array<(app: App) => Promise<void> | void>,
|
|
87
|
+
public readonly onDisconnectCallbacks: Array<(app: App) => Promise<void> | void>,
|
|
88
|
+
) { }
|
|
89
|
+
|
|
90
|
+
public onConnect(callback: (app: App) => Promise<void> | void): void {
|
|
91
|
+
this.onConnectCallbacks.push(callback);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
public onDisconnect(callback: (app: App) => Promise<void> | void): void {
|
|
95
|
+
this.onDisconnectCallbacks.push(callback);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export interface AppIndexRegistryJSON {
|
|
100
|
+
id: string;
|
|
101
|
+
apps: Record<string, AppJson>;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export class AppIndexRegistry {
|
|
105
|
+
constructor(
|
|
106
|
+
public id: Identifier,
|
|
107
|
+
public apps: IdentifierMap<App>,
|
|
108
|
+
) { }
|
|
109
|
+
|
|
110
|
+
public static fromJSON(json: AppIndexRegistryJSON): AppIndexRegistry {
|
|
111
|
+
const id = Identifier.fromKey(json['id']);
|
|
112
|
+
const apps = new IdentifierMap<App>();
|
|
113
|
+
for (const [idStr, appJSON] of Object.entries(json['apps'])) {
|
|
114
|
+
const id = Identifier.fromKey(idStr);
|
|
115
|
+
const app = App.deserialize(appJSON);
|
|
116
|
+
if (!id.isNamespaceEqual(app.id)) {
|
|
117
|
+
throw new Error(`App ID does not match the ID in the index. ${app.id} != ${id}`);
|
|
118
|
+
}
|
|
119
|
+
apps.set(id, app);
|
|
120
|
+
}
|
|
121
|
+
return new AppIndexRegistry(
|
|
122
|
+
id,
|
|
123
|
+
apps,
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export {
|
|
2
|
+
AppIndexRegistry,
|
|
3
|
+
SERVER_APPS_READ_PERMISSION_ID,
|
|
4
|
+
SERVER_SHUTDOWN_PERMISSION_ID,
|
|
5
|
+
TRUSTED_ORIGINS_GET_PERMISSION_ID,
|
|
6
|
+
TRUSTED_ORIGINS_SET_PERMISSION_ID,
|
|
7
|
+
type AppIndex,
|
|
8
|
+
type AppIndexEntry,
|
|
9
|
+
type AppIndexRegistryJSON,
|
|
10
|
+
} from './extension.js';
|
|
11
|
+
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { App, AppJson } from '../../app';
|
|
2
|
+
import { Identifier, IdentifierMap, IdentifierSet, IntoId } from '../../identifier';
|
|
3
|
+
import { PacketType } from '../../network/packet';
|
|
4
|
+
import { Omu } from '../../omu';
|
|
5
|
+
import { Serializer } from '../../serialize';
|
|
6
|
+
import { EndpointType } from '../endpoint';
|
|
7
|
+
import { Extension, ExtensionType } from '../extension';
|
|
8
|
+
import { SessionObserver } from '../server/extension';
|
|
9
|
+
import { Table, TableType } from '../table';
|
|
10
|
+
|
|
11
|
+
export const SESSION_EXTENSION_TYPE: ExtensionType<SessionExtension> = new ExtensionType('sessions', (omu: Omu) => new SessionExtension(omu));
|
|
12
|
+
|
|
13
|
+
export const SESSIONS_READ_PERMISSION_ID: Identifier = SESSION_EXTENSION_TYPE.join('read');
|
|
14
|
+
const SESSION_TABLE_TYPE = TableType.createJson(SESSION_EXTENSION_TYPE, {
|
|
15
|
+
name: 'sessions',
|
|
16
|
+
serializer: App,
|
|
17
|
+
key: (app) => app.id.key(),
|
|
18
|
+
permissions: {
|
|
19
|
+
read: SESSIONS_READ_PERMISSION_ID,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
const REQUIRE_APPS_PACKET_TYPE = PacketType.createJson<Identifier[]>(SESSION_EXTENSION_TYPE, {
|
|
23
|
+
name: 'require',
|
|
24
|
+
serializer: Serializer.of(Identifier).toArray(),
|
|
25
|
+
});
|
|
26
|
+
const SESSION_OBSERVE_PACKET_TYPE = PacketType.createJson<Identifier[]>(SESSION_EXTENSION_TYPE, {
|
|
27
|
+
name: 'observe',
|
|
28
|
+
serializer: Serializer.of(Identifier).toArray(),
|
|
29
|
+
});
|
|
30
|
+
const SESSION_CONNECTED_PACKET_TYPE = PacketType.createJson<App>(SESSION_EXTENSION_TYPE, {
|
|
31
|
+
name: 'session_connected',
|
|
32
|
+
serializer: App,
|
|
33
|
+
});
|
|
34
|
+
const SESSION_DISCONNECTED_PACKET_TYPE = PacketType.createJson<App>(SESSION_EXTENSION_TYPE, {
|
|
35
|
+
name: 'session_disconnected',
|
|
36
|
+
serializer: App,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
type RemoteAppRequestPayload = {
|
|
40
|
+
app: AppJson;
|
|
41
|
+
permissions: string[];
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export type RequestRemoteAppResponse = {
|
|
45
|
+
type: 'success';
|
|
46
|
+
token: string;
|
|
47
|
+
lan_ip: string;
|
|
48
|
+
} | {
|
|
49
|
+
type: 'error';
|
|
50
|
+
message: string;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export const REMOTE_APP_REQUEST_PERMISSION_ID: Identifier = SESSION_EXTENSION_TYPE.join('remote_app', 'request');
|
|
54
|
+
|
|
55
|
+
const REMOTE_APP_REQUEST_ENDPOINT_TYPE = EndpointType.createJson<RemoteAppRequestPayload, RequestRemoteAppResponse>(SESSION_EXTENSION_TYPE, {
|
|
56
|
+
name: 'remote_app_request',
|
|
57
|
+
permissionId: REMOTE_APP_REQUEST_PERMISSION_ID,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
export type GenerateTokenResponse = {
|
|
61
|
+
type: 'success';
|
|
62
|
+
token: string;
|
|
63
|
+
} | {
|
|
64
|
+
type: 'error';
|
|
65
|
+
message: string;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export const GENERATE_TOKEN_PERMISSION_ID: Identifier = SESSION_EXTENSION_TYPE.join('generate_token');
|
|
69
|
+
|
|
70
|
+
type GenerateTokenPayload = {
|
|
71
|
+
app: AppJson;
|
|
72
|
+
permissions: string[];
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const GENERATE_TOKEN_ENDPOINT_TYPE = EndpointType.createJson<GenerateTokenPayload, GenerateTokenResponse>(SESSION_EXTENSION_TYPE, {
|
|
76
|
+
name: 'generate_token',
|
|
77
|
+
permissionId: GENERATE_TOKEN_PERMISSION_ID,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
export class SessionExtension implements Extension {
|
|
81
|
+
public readonly type: ExtensionType<SessionExtension> = SESSION_EXTENSION_TYPE;
|
|
82
|
+
public readonly sessions: Table<App>;
|
|
83
|
+
private readonly sessionObservers = new IdentifierMap<SessionObserver>();
|
|
84
|
+
private readonly requiredApps = new IdentifierSet();
|
|
85
|
+
|
|
86
|
+
constructor(private readonly omu: Omu) {
|
|
87
|
+
omu.network.registerPacket(
|
|
88
|
+
REQUIRE_APPS_PACKET_TYPE,
|
|
89
|
+
SESSION_OBSERVE_PACKET_TYPE,
|
|
90
|
+
SESSION_CONNECTED_PACKET_TYPE,
|
|
91
|
+
SESSION_DISCONNECTED_PACKET_TYPE,
|
|
92
|
+
);
|
|
93
|
+
omu.network.addPacketHandler(
|
|
94
|
+
SESSION_CONNECTED_PACKET_TYPE, (app) => this.handleSessionConnect(app),
|
|
95
|
+
);
|
|
96
|
+
omu.network.addPacketHandler(
|
|
97
|
+
SESSION_DISCONNECTED_PACKET_TYPE, (app) => this.handleSessionDisconnect(app),
|
|
98
|
+
);
|
|
99
|
+
this.sessions = omu.tables.get(SESSION_TABLE_TYPE);
|
|
100
|
+
omu.network.addTask(() => this.onTask());
|
|
101
|
+
omu.onReady(() => this.onReady());
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
public async has(id: IntoId): Promise<boolean> {
|
|
105
|
+
return await this.sessions.has(Identifier.from(id).key());
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
public observe(appId: IntoId, {
|
|
109
|
+
onConnect,
|
|
110
|
+
onDisconnect,
|
|
111
|
+
}: {
|
|
112
|
+
onConnect(app: App): void;
|
|
113
|
+
onDisconnect(app: App): void;
|
|
114
|
+
}): SessionObserver {
|
|
115
|
+
const id = Identifier.from(appId);
|
|
116
|
+
if (this.omu.running) {
|
|
117
|
+
this.omu.send(SESSION_OBSERVE_PACKET_TYPE, [id]);
|
|
118
|
+
}
|
|
119
|
+
const observer = this.sessionObservers.get(id) ?? new SessionObserver([], []);
|
|
120
|
+
observer.onConnect(onConnect);
|
|
121
|
+
observer.onDisconnect(onDisconnect);
|
|
122
|
+
this.sessionObservers.set(id, observer);
|
|
123
|
+
return observer;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
private async handleSessionConnect(app: App): Promise<void> {
|
|
127
|
+
const observer = this.sessionObservers.get(app.id);
|
|
128
|
+
if (!observer) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
for (const callback of observer.onConnectCallbacks) {
|
|
132
|
+
await callback(app);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
private async handleSessionDisconnect(app: App): Promise<void> {
|
|
137
|
+
const observer = this.sessionObservers.get(app.id);
|
|
138
|
+
if (!observer) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
for (const callback of observer.onDisconnectCallbacks) {
|
|
142
|
+
await callback(app);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
public require(...appIds: IntoId[]): void {
|
|
147
|
+
if (this.omu.running) {
|
|
148
|
+
throw new Error('Cannot require apps after the client has started');
|
|
149
|
+
}
|
|
150
|
+
for (const appId of appIds) {
|
|
151
|
+
this.requiredApps.add(Identifier.from(appId));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
private async onTask(): Promise<void> {
|
|
156
|
+
if (this.requiredApps.size > 0) {
|
|
157
|
+
this.omu.send(REQUIRE_APPS_PACKET_TYPE, Array.from(this.requiredApps.values()));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private async onReady(): Promise<void> {
|
|
162
|
+
if (this.sessionObservers.size > 0) {
|
|
163
|
+
this.omu.send(SESSION_OBSERVE_PACKET_TYPE, Array.from(this.sessionObservers.keys()));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
public async requestRemoteApp(options: {
|
|
168
|
+
app: App;
|
|
169
|
+
permissions: IntoId[];
|
|
170
|
+
}): Promise<RequestRemoteAppResponse> {
|
|
171
|
+
const { app } = options;
|
|
172
|
+
if (!app.url) {
|
|
173
|
+
throw new Error('App must have a URL to request it remotely');
|
|
174
|
+
}
|
|
175
|
+
if (app.type !== 'remote') {
|
|
176
|
+
throw new Error('App must be a remote app to request it remotely');
|
|
177
|
+
}
|
|
178
|
+
if (!app.metadata) {
|
|
179
|
+
throw new Error('App must have metadata to request it remotely');
|
|
180
|
+
}
|
|
181
|
+
return this.omu.endpoints.call(REMOTE_APP_REQUEST_ENDPOINT_TYPE, {
|
|
182
|
+
app: App.serialize(options.app),
|
|
183
|
+
permissions: options.permissions.map(id => Identifier.from(id).key()),
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
public async generateToken(options: {
|
|
188
|
+
app: App;
|
|
189
|
+
permissions: IntoId[];
|
|
190
|
+
}): Promise<GenerateTokenResponse> {
|
|
191
|
+
return this.omu.endpoints.call(GENERATE_TOKEN_ENDPOINT_TYPE, {
|
|
192
|
+
app: App.serialize(options.app),
|
|
193
|
+
permissions: options.permissions.map(id => Identifier.from(id).key()),
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -1,29 +1,24 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { type Extension
|
|
7
|
-
|
|
1
|
+
import type { Unlisten } from '../../event';
|
|
2
|
+
import { Identifier, IdentifierMap } from '../../identifier';
|
|
3
|
+
import { PacketType } from '../../network/packet';
|
|
4
|
+
import { Omu } from '../../omu';
|
|
5
|
+
import { JsonType, Serializable } from '../../serialize';
|
|
6
|
+
import { ExtensionType, type Extension } from '../extension.js';
|
|
8
7
|
import { SignalPacket, SignalRegisterPacket } from './packets.js';
|
|
9
|
-
import type
|
|
10
|
-
import { SignalType } from './signal.js';
|
|
8
|
+
import { SignalType, type Signal } from './signal.js';
|
|
11
9
|
|
|
12
|
-
export const SIGNAL_EXTENSION_TYPE = new ExtensionType(
|
|
10
|
+
export const SIGNAL_EXTENSION_TYPE: ExtensionType<SignalExtension> = new ExtensionType(
|
|
13
11
|
'signal',
|
|
14
|
-
(
|
|
12
|
+
(omu: Omu) => new SignalExtension(omu),
|
|
15
13
|
);
|
|
16
14
|
|
|
17
|
-
const SIGNAL_REGISTER_PACKET = PacketType.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
serializer: SignalRegisterPacket,
|
|
22
|
-
},
|
|
23
|
-
);
|
|
15
|
+
const SIGNAL_REGISTER_PACKET = PacketType.createJson<SignalRegisterPacket>(SIGNAL_EXTENSION_TYPE, {
|
|
16
|
+
name: 'register',
|
|
17
|
+
serializer: SignalRegisterPacket,
|
|
18
|
+
});
|
|
24
19
|
const SIGNAL_LISTEN_PACKET = PacketType.createJson<Identifier>(SIGNAL_EXTENSION_TYPE, {
|
|
25
20
|
name: 'listen',
|
|
26
|
-
serializer:
|
|
21
|
+
serializer: Identifier,
|
|
27
22
|
});
|
|
28
23
|
const SIGNAL_NOTIFY_PACKET = PacketType.createSerialized<SignalPacket>(SIGNAL_EXTENSION_TYPE, {
|
|
29
24
|
name: 'notify',
|
|
@@ -31,11 +26,11 @@ const SIGNAL_NOTIFY_PACKET = PacketType.createSerialized<SignalPacket>(SIGNAL_EX
|
|
|
31
26
|
});
|
|
32
27
|
|
|
33
28
|
export class SignalExtension implements Extension {
|
|
34
|
-
public readonly type = SIGNAL_EXTENSION_TYPE;
|
|
29
|
+
public readonly type: ExtensionType<SignalExtension> = SIGNAL_EXTENSION_TYPE;
|
|
35
30
|
private readonly signals = new IdentifierMap<SignalType<unknown>>();
|
|
36
31
|
|
|
37
|
-
constructor(private readonly
|
|
38
|
-
|
|
32
|
+
constructor(private readonly omu: Omu) {
|
|
33
|
+
omu.network.registerPacket(
|
|
39
34
|
SIGNAL_REGISTER_PACKET,
|
|
40
35
|
SIGNAL_LISTEN_PACKET,
|
|
41
36
|
SIGNAL_NOTIFY_PACKET,
|
|
@@ -46,14 +41,23 @@ export class SignalExtension implements Extension {
|
|
|
46
41
|
if (this.signals.has(signalType.id)) {
|
|
47
42
|
throw new Error(`Signal for key ${signalType.id} already created`);
|
|
48
43
|
}
|
|
49
|
-
return new SignalImpl(this.
|
|
44
|
+
return new SignalImpl(this.omu, signalType);
|
|
50
45
|
}
|
|
51
46
|
|
|
52
|
-
public
|
|
53
|
-
const id = this.
|
|
54
|
-
const type = SignalType.
|
|
47
|
+
public json<T, D extends JsonType = JsonType>(name: string, options?: { serializer?: Serializable<T, D> }): Signal<T> {
|
|
48
|
+
const id = this.omu.app.id.join(name);
|
|
49
|
+
const type = SignalType.createJson<T>(id, {
|
|
55
50
|
name,
|
|
56
|
-
serializer: options?.serializer
|
|
51
|
+
serializer: options?.serializer,
|
|
52
|
+
});
|
|
53
|
+
return this.createSignal(type);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public serialized<T>(name: string, options: { serializer: Serializable<T, Uint8Array> }): Signal<T> {
|
|
57
|
+
const id = this.omu.app.id.join(name);
|
|
58
|
+
const type = SignalType.createSerialized<T>(id, {
|
|
59
|
+
name,
|
|
60
|
+
serializer: options?.serializer,
|
|
57
61
|
});
|
|
58
62
|
return this.createSignal(type);
|
|
59
63
|
}
|
|
@@ -68,25 +72,28 @@ class SignalImpl<T> implements Signal<T> {
|
|
|
68
72
|
private listening = false;
|
|
69
73
|
|
|
70
74
|
constructor(
|
|
71
|
-
private readonly
|
|
75
|
+
private readonly omu: Omu,
|
|
72
76
|
private readonly type: SignalType<T>,
|
|
73
77
|
) {
|
|
74
|
-
|
|
75
|
-
|
|
78
|
+
omu.network.addPacketHandler(SIGNAL_NOTIFY_PACKET, (data) => this.handleBroadcast(data));
|
|
79
|
+
omu.network.addTask(() => this.onTask());
|
|
76
80
|
}
|
|
77
81
|
|
|
78
82
|
public notify(body: T): void {
|
|
79
83
|
const data = this.type.serializer.serialize(body);
|
|
80
|
-
this.
|
|
84
|
+
this.omu.send(SIGNAL_NOTIFY_PACKET, {
|
|
81
85
|
id: this.type.id,
|
|
82
86
|
body: data,
|
|
83
87
|
});
|
|
88
|
+
for (const listener of this.listeners) {
|
|
89
|
+
listener(body);
|
|
90
|
+
}
|
|
84
91
|
}
|
|
85
92
|
|
|
86
93
|
public listen(handler: (value: T) => void): Unlisten {
|
|
87
94
|
if (!this.listening) {
|
|
88
|
-
this.
|
|
89
|
-
this.
|
|
95
|
+
this.omu.onReady(() => {
|
|
96
|
+
this.omu.send(SIGNAL_LISTEN_PACKET, this.type.id);
|
|
90
97
|
});
|
|
91
98
|
this.listening = true;
|
|
92
99
|
}
|
|
@@ -107,10 +114,10 @@ class SignalImpl<T> implements Signal<T> {
|
|
|
107
114
|
}
|
|
108
115
|
|
|
109
116
|
private onTask(): void {
|
|
110
|
-
if (!this.type.id.isSubpathOf(this.
|
|
117
|
+
if (!this.type.id.isSubpathOf(this.omu.app.id)) {
|
|
111
118
|
return;
|
|
112
119
|
}
|
|
113
|
-
this.
|
|
120
|
+
this.omu.send(SIGNAL_REGISTER_PACKET, {
|
|
114
121
|
id: this.type.id,
|
|
115
122
|
permissions: this.type.permissions,
|
|
116
123
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { SignalPermissions, SignalType, type Signal } from './signal.js';
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Identifier } from '../../identifier';
|
|
2
|
+
import { ByteReader, ByteWriter } from '../../serialize';
|
|
3
|
+
|
|
4
|
+
import { SignalPermissions, SignalPermissionsJSON } from './signal.js';
|
|
5
|
+
|
|
6
|
+
export class SignalPacket {
|
|
7
|
+
constructor(
|
|
8
|
+
public readonly id: Identifier,
|
|
9
|
+
public readonly body: Uint8Array,
|
|
10
|
+
) { }
|
|
11
|
+
|
|
12
|
+
public static serialize(packet: SignalPacket): Uint8Array {
|
|
13
|
+
const writer = new ByteWriter();
|
|
14
|
+
writer.writeString(packet.id.key());
|
|
15
|
+
writer.writeUint8Array(packet.body);
|
|
16
|
+
return writer.finish();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
public static deserialize(data: Uint8Array): SignalPacket {
|
|
20
|
+
const reader = ByteReader.fromUint8Array(data);
|
|
21
|
+
const id = Identifier.fromKey(reader.readString());
|
|
22
|
+
const body = reader.readUint8Array();
|
|
23
|
+
return new SignalPacket(id, body);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
interface SignalRegisterPacketJSON {
|
|
28
|
+
id: string;
|
|
29
|
+
permissions: SignalPermissionsJSON;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export class SignalRegisterPacket {
|
|
33
|
+
constructor(
|
|
34
|
+
public readonly id: Identifier,
|
|
35
|
+
public readonly permissions: SignalPermissions,
|
|
36
|
+
) {}
|
|
37
|
+
|
|
38
|
+
public static serialize(packet: SignalRegisterPacket): SignalRegisterPacketJSON {
|
|
39
|
+
const { permissions: perms } = packet;
|
|
40
|
+
return {
|
|
41
|
+
id: packet.id.key(),
|
|
42
|
+
permissions: {
|
|
43
|
+
all: perms.all ? Identifier.from(perms.all).key() : undefined,
|
|
44
|
+
listen: perms.listen ? Identifier.from(perms.listen).key() : undefined,
|
|
45
|
+
send: perms.send ? Identifier.from(perms.send).key() : undefined,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public static deserialize(data: SignalRegisterPacketJSON): SignalRegisterPacket {
|
|
51
|
+
const { permissions: perms } = data;
|
|
52
|
+
return new SignalRegisterPacket(
|
|
53
|
+
Identifier.fromKey(data.id),
|
|
54
|
+
{
|
|
55
|
+
all: perms.all ? Identifier.fromKey(perms.all) : undefined,
|
|
56
|
+
listen: perms.listen ? Identifier.fromKey(perms.listen) : undefined,
|
|
57
|
+
send: perms.send ? Identifier.fromKey(perms.send) : undefined,
|
|
58
|
+
},
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}
|