@omujs/omu 0.6.20 → 0.6.22
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 +16 -0
- package/{built → dist}/dts/bytebuffer.d.ts +4 -1
- package/dist/dts/bytebuffer.d.ts.map +1 -0
- package/{built → dist}/dts/client.d.ts +3 -3
- package/{built → dist}/dts/client.d.ts.map +1 -1
- package/{built → dist}/dts/extension/asset/asset-extension.d.ts +4 -4
- package/dist/dts/extension/asset/asset-extension.d.ts.map +1 -0
- package/dist/dts/extension/dashboard/dashboard-extension.d.ts +29 -0
- package/dist/dts/extension/dashboard/dashboard-extension.d.ts.map +1 -0
- package/dist/dts/extension/dashboard/dashboard.d.ts +10 -0
- package/dist/dts/extension/dashboard/dashboard.d.ts.map +1 -0
- package/dist/dts/extension/dashboard/index.d.ts +3 -0
- package/dist/dts/extension/dashboard/index.d.ts.map +1 -0
- package/{built → dist}/dts/extension/dashboard/packets.d.ts +21 -0
- package/{built → dist}/dts/extension/dashboard/packets.d.ts.map +1 -1
- package/{built → dist}/dts/extension/endpoint/endpoint-extension.d.ts +2 -2
- package/dist/dts/extension/endpoint/endpoint-extension.d.ts.map +1 -0
- package/{built → dist}/dts/extension/endpoint/endpoint.d.ts.map +1 -1
- package/{built → dist}/dts/extension/extension.d.ts +1 -0
- package/dist/dts/extension/extension.d.ts.map +1 -0
- package/{built → dist}/dts/extension/i18n/i18n-extension.d.ts +8 -6
- package/dist/dts/extension/i18n/i18n-extension.d.ts.map +1 -0
- package/{built → dist}/dts/extension/logger/logger-extension.d.ts +3 -3
- package/dist/dts/extension/logger/logger-extension.d.ts.map +1 -0
- package/{built → dist}/dts/extension/permission/permission-extension.d.ts +2 -2
- package/dist/dts/extension/permission/permission-extension.d.ts.map +1 -0
- package/{built → dist}/dts/extension/permission/permission.d.ts +1 -2
- package/dist/dts/extension/permission/permission.d.ts.map +1 -0
- package/{built → dist}/dts/extension/plugin/plugin-extension.d.ts +2 -2
- package/dist/dts/extension/plugin/plugin-extension.d.ts.map +1 -0
- package/dist/dts/extension/registry/registry-extension.d.ts +15 -0
- package/dist/dts/extension/registry/registry-extension.d.ts.map +1 -0
- package/dist/dts/extension/server/server-extension.d.ts +41 -0
- package/dist/dts/extension/server/server-extension.d.ts.map +1 -0
- package/{built → dist}/dts/extension/signal/signal-extension.d.ts +3 -2
- package/dist/dts/extension/signal/signal-extension.d.ts.map +1 -0
- package/{built → dist}/dts/extension/table/packets.d.ts +3 -3
- package/dist/dts/extension/table/packets.d.ts.map +1 -0
- package/{built → dist}/dts/extension/table/table-extension.d.ts +1 -0
- package/dist/dts/extension/table/table-extension.d.ts.map +1 -0
- package/{built → dist}/dts/extension/table/table.d.ts +9 -3
- package/dist/dts/extension/table/table.d.ts.map +1 -0
- package/{built → dist}/dts/identifier.d.ts +1 -0
- package/dist/dts/identifier.d.ts.map +1 -0
- package/{built → dist}/dts/network/network.d.ts.map +1 -1
- package/{built → dist}/dts/network/packet/packet-types.d.ts +6 -0
- package/dist/dts/network/packet/packet-types.d.ts.map +1 -0
- package/{built → dist}/dts/network/packet/packet.d.ts.map +1 -1
- package/{built → dist}/dts/omu.d.ts +3 -3
- package/{built → dist}/dts/omu.d.ts.map +1 -1
- package/dist/dts/version.d.ts +2 -0
- package/dist/dts/version.d.ts.map +1 -0
- package/{built → dist}/esm/bytebuffer.js +6 -6
- package/dist/esm/bytebuffer.js.map +1 -0
- package/{built → dist}/esm/extension/asset/asset-extension.js +1 -0
- package/{built → dist}/esm/extension/asset/asset-extension.js.map +1 -1
- package/{built → dist}/esm/extension/dashboard/dashboard-extension.js +69 -2
- package/dist/esm/extension/dashboard/dashboard-extension.js.map +1 -0
- package/dist/esm/extension/dashboard/index.js +2 -0
- package/{built → dist}/esm/extension/dashboard/index.js.map +1 -1
- package/{built → dist}/esm/extension/dashboard/packets.js +44 -0
- package/{built → dist}/esm/extension/dashboard/packets.js.map +1 -1
- package/{built → dist}/esm/extension/endpoint/endpoint-extension.js +1 -0
- package/dist/esm/extension/endpoint/endpoint-extension.js.map +1 -0
- package/{built → dist}/esm/extension/endpoint/endpoint.js.map +1 -1
- package/{built → dist}/esm/extension/extension.js.map +1 -1
- package/{built → dist}/esm/extension/i18n/i18n-extension.js +15 -6
- package/dist/esm/extension/i18n/i18n-extension.js.map +1 -0
- package/{built → dist}/esm/extension/logger/logger-extension.js +1 -0
- package/dist/esm/extension/logger/logger-extension.js.map +1 -0
- package/{built → dist}/esm/extension/permission/permission-extension.js +1 -0
- package/dist/esm/extension/permission/permission-extension.js.map +1 -0
- package/{built → dist}/esm/extension/plugin/plugin-extension.js +1 -0
- package/dist/esm/extension/plugin/plugin-extension.js.map +1 -0
- package/{built → dist}/esm/extension/registry/registry-extension.js +1 -0
- package/dist/esm/extension/registry/registry-extension.js.map +1 -0
- package/{built → dist}/esm/extension/registry/registry.js +1 -1
- package/dist/esm/extension/registry/registry.js.map +1 -0
- package/dist/esm/extension/server/server-extension.js +138 -0
- package/dist/esm/extension/server/server-extension.js.map +1 -0
- package/{built → dist}/esm/extension/signal/signal-extension.js +1 -0
- package/dist/esm/extension/signal/signal-extension.js.map +1 -0
- package/{built → dist}/esm/extension/signal/signal.js +1 -1
- package/dist/esm/extension/signal/signal.js.map +1 -0
- package/{built → dist}/esm/extension/table/packets.js +31 -33
- package/dist/esm/extension/table/packets.js.map +1 -0
- package/{built → dist}/esm/extension/table/table-extension.js +60 -17
- package/dist/esm/extension/table/table-extension.js.map +1 -0
- package/{built → dist}/esm/extension/table/table.js.map +1 -1
- package/{built → dist}/esm/identifier.js +6 -8
- package/dist/esm/identifier.js.map +1 -0
- package/{built → dist}/esm/network/network.js +2 -0
- package/dist/esm/network/network.js.map +1 -0
- package/{built → dist}/esm/network/packet/packet-types.js +4 -0
- package/dist/esm/network/packet/packet-types.js.map +1 -0
- package/{built → dist}/esm/network/packet/packet.js.map +1 -1
- package/{built → dist}/esm/omu.js +4 -4
- package/{built → dist}/esm/omu.js.map +1 -1
- package/dist/esm/version.js +2 -0
- package/dist/esm/version.js.map +1 -0
- package/eslint.config.js +6 -0
- package/package.json +13 -11
- package/src/bytebuffer.ts +10 -7
- package/src/client.ts +3 -3
- package/src/extension/asset/asset-extension.ts +2 -0
- package/src/extension/dashboard/dashboard-extension.ts +77 -1
- package/src/extension/dashboard/dashboard.ts +3 -1
- package/src/extension/dashboard/index.ts +7 -1
- package/src/extension/dashboard/packets.ts +46 -0
- package/src/extension/endpoint/endpoint-extension.ts +1 -0
- package/src/extension/endpoint/endpoint.ts +1 -1
- package/src/extension/extension.ts +3 -1
- package/src/extension/i18n/i18n-extension.ts +18 -10
- package/src/extension/logger/logger-extension.ts +1 -0
- package/src/extension/permission/permission-extension.ts +1 -0
- package/src/extension/permission/permission.ts +1 -1
- package/src/extension/plugin/plugin-extension.ts +1 -0
- package/src/extension/registry/registry-extension.ts +3 -2
- package/src/extension/registry/registry.ts +1 -1
- package/src/extension/server/server-extension.ts +103 -4
- package/src/extension/signal/signal-extension.ts +2 -1
- package/src/extension/signal/signal.ts +1 -1
- package/src/extension/table/packets.ts +29 -31
- package/src/extension/table/table-extension.ts +79 -28
- package/src/extension/table/table.ts +8 -4
- package/src/identifier.ts +8 -8
- package/src/network/network.ts +2 -0
- package/src/network/packet/packet-types.ts +11 -0
- package/src/network/packet/packet.ts +1 -1
- package/src/omu.ts +5 -5
- package/src/version.ts +1 -0
- package/tsconfig.json +2 -2
- package/.eslintignore +0 -13
- package/.eslintrc.cjs +0 -6
- package/.prettierignore +0 -1
- package/built/dts/bytebuffer.d.ts.map +0 -1
- package/built/dts/extension/asset/asset-extension.d.ts.map +0 -1
- package/built/dts/extension/dashboard/dashboard-extension.d.ts +0 -24
- package/built/dts/extension/dashboard/dashboard-extension.d.ts.map +0 -1
- package/built/dts/extension/dashboard/dashboard.d.ts +0 -8
- package/built/dts/extension/dashboard/dashboard.d.ts.map +0 -1
- package/built/dts/extension/dashboard/index.d.ts +0 -3
- package/built/dts/extension/dashboard/index.d.ts.map +0 -1
- package/built/dts/extension/endpoint/endpoint-extension.d.ts.map +0 -1
- package/built/dts/extension/extension.d.ts.map +0 -1
- package/built/dts/extension/i18n/i18n-extension.d.ts.map +0 -1
- package/built/dts/extension/logger/logger-extension.d.ts.map +0 -1
- package/built/dts/extension/permission/permission-extension.d.ts.map +0 -1
- package/built/dts/extension/permission/permission.d.ts.map +0 -1
- package/built/dts/extension/plugin/plugin-extension.d.ts.map +0 -1
- package/built/dts/extension/registry/registry-extension.d.ts +0 -15
- package/built/dts/extension/registry/registry-extension.d.ts.map +0 -1
- package/built/dts/extension/server/server-extension.d.ts +0 -21
- package/built/dts/extension/server/server-extension.d.ts.map +0 -1
- package/built/dts/extension/signal/signal-extension.d.ts.map +0 -1
- package/built/dts/extension/table/packets.d.ts.map +0 -1
- package/built/dts/extension/table/table-extension.d.ts.map +0 -1
- package/built/dts/extension/table/table.d.ts.map +0 -1
- package/built/dts/identifier.d.ts.map +0 -1
- package/built/dts/network/packet/packet-types.d.ts.map +0 -1
- package/built/esm/bytebuffer.js.map +0 -1
- package/built/esm/extension/dashboard/dashboard-extension.js.map +0 -1
- package/built/esm/extension/dashboard/index.js +0 -2
- package/built/esm/extension/endpoint/endpoint-extension.js.map +0 -1
- package/built/esm/extension/i18n/i18n-extension.js.map +0 -1
- package/built/esm/extension/logger/logger-extension.js.map +0 -1
- package/built/esm/extension/permission/permission-extension.js.map +0 -1
- package/built/esm/extension/plugin/plugin-extension.js.map +0 -1
- package/built/esm/extension/registry/registry-extension.js.map +0 -1
- package/built/esm/extension/registry/registry.js.map +0 -1
- package/built/esm/extension/server/server-extension.js +0 -62
- package/built/esm/extension/server/server-extension.js.map +0 -1
- package/built/esm/extension/signal/signal-extension.js.map +0 -1
- package/built/esm/extension/signal/signal.js.map +0 -1
- package/built/esm/extension/table/packets.js.map +0 -1
- package/built/esm/extension/table/table-extension.js.map +0 -1
- package/built/esm/identifier.js.map +0 -1
- package/built/esm/network/network.js.map +0 -1
- package/built/esm/network/packet/packet-types.js.map +0 -1
- /package/{built → dist}/dts/address.d.ts +0 -0
- /package/{built → dist}/dts/address.d.ts.map +0 -0
- /package/{built → dist}/dts/app.d.ts +0 -0
- /package/{built → dist}/dts/app.d.ts.map +0 -0
- /package/{built → dist}/dts/const.d.ts +0 -0
- /package/{built → dist}/dts/const.d.ts.map +0 -0
- /package/{built → dist}/dts/errors.d.ts +0 -0
- /package/{built → dist}/dts/errors.d.ts.map +0 -0
- /package/{built → dist}/dts/event-emitter.d.ts +0 -0
- /package/{built → dist}/dts/event-emitter.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/asset/index.d.ts +0 -0
- /package/{built → dist}/dts/extension/asset/index.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/endpoint/endpoint.d.ts +0 -0
- /package/{built → dist}/dts/extension/endpoint/index.d.ts +0 -0
- /package/{built → dist}/dts/extension/endpoint/index.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/endpoint/packets.d.ts +0 -0
- /package/{built → dist}/dts/extension/endpoint/packets.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/extension-registry.d.ts +0 -0
- /package/{built → dist}/dts/extension/extension-registry.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/i18n/index.d.ts +0 -0
- /package/{built → dist}/dts/extension/i18n/index.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/index.d.ts +0 -0
- /package/{built → dist}/dts/extension/index.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/logger/index.d.ts +0 -0
- /package/{built → dist}/dts/extension/logger/index.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/logger/packets.d.ts +0 -0
- /package/{built → dist}/dts/extension/logger/packets.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/permission/index.d.ts +0 -0
- /package/{built → dist}/dts/extension/permission/index.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/plugin/index.d.ts +0 -0
- /package/{built → dist}/dts/extension/plugin/index.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/plugin/package-info.d.ts +0 -0
- /package/{built → dist}/dts/extension/plugin/package-info.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/registry/index.d.ts +0 -0
- /package/{built → dist}/dts/extension/registry/index.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/registry/packets.d.ts +0 -0
- /package/{built → dist}/dts/extension/registry/packets.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/registry/registry.d.ts +0 -0
- /package/{built → dist}/dts/extension/registry/registry.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/server/index.d.ts +0 -0
- /package/{built → dist}/dts/extension/server/index.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/signal/index.d.ts +0 -0
- /package/{built → dist}/dts/extension/signal/index.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/signal/packets.d.ts +0 -0
- /package/{built → dist}/dts/extension/signal/packets.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/signal/signal.d.ts +0 -0
- /package/{built → dist}/dts/extension/signal/signal.d.ts.map +0 -0
- /package/{built → dist}/dts/extension/table/index.d.ts +0 -0
- /package/{built → dist}/dts/extension/table/index.d.ts.map +0 -0
- /package/{built → dist}/dts/index.d.ts +0 -0
- /package/{built → dist}/dts/index.d.ts.map +0 -0
- /package/{built → dist}/dts/interface.d.ts +0 -0
- /package/{built → dist}/dts/interface.d.ts.map +0 -0
- /package/{built → dist}/dts/localization/index.d.ts +0 -0
- /package/{built → dist}/dts/localization/index.d.ts.map +0 -0
- /package/{built → dist}/dts/localization/locale.d.ts +0 -0
- /package/{built → dist}/dts/localization/locale.d.ts.map +0 -0
- /package/{built → dist}/dts/localization/localization.d.ts +0 -0
- /package/{built → dist}/dts/localization/localization.d.ts.map +0 -0
- /package/{built → dist}/dts/model.d.ts +0 -0
- /package/{built → dist}/dts/model.d.ts.map +0 -0
- /package/{built → dist}/dts/network/connection.d.ts +0 -0
- /package/{built → dist}/dts/network/connection.d.ts.map +0 -0
- /package/{built → dist}/dts/network/index.d.ts +0 -0
- /package/{built → dist}/dts/network/index.d.ts.map +0 -0
- /package/{built → dist}/dts/network/network.d.ts +0 -0
- /package/{built → dist}/dts/network/packet/index.d.ts +0 -0
- /package/{built → dist}/dts/network/packet/index.d.ts.map +0 -0
- /package/{built → dist}/dts/network/packet/packet.d.ts +0 -0
- /package/{built → dist}/dts/network/websocket-connection.d.ts +0 -0
- /package/{built → dist}/dts/network/websocket-connection.d.ts.map +0 -0
- /package/{built → dist}/dts/serializer.d.ts +0 -0
- /package/{built → dist}/dts/serializer.d.ts.map +0 -0
- /package/{built → dist}/dts/token.d.ts +0 -0
- /package/{built → dist}/dts/token.d.ts.map +0 -0
- /package/{built → dist}/esm/address.js +0 -0
- /package/{built → dist}/esm/address.js.map +0 -0
- /package/{built → dist}/esm/app.js +0 -0
- /package/{built → dist}/esm/app.js.map +0 -0
- /package/{built → dist}/esm/client.js +0 -0
- /package/{built → dist}/esm/client.js.map +0 -0
- /package/{built → dist}/esm/const.js +0 -0
- /package/{built → dist}/esm/const.js.map +0 -0
- /package/{built → dist}/esm/errors.js +0 -0
- /package/{built → dist}/esm/errors.js.map +0 -0
- /package/{built → dist}/esm/event-emitter.js +0 -0
- /package/{built → dist}/esm/event-emitter.js.map +0 -0
- /package/{built → dist}/esm/extension/asset/index.js +0 -0
- /package/{built → dist}/esm/extension/asset/index.js.map +0 -0
- /package/{built → dist}/esm/extension/dashboard/dashboard.js +0 -0
- /package/{built → dist}/esm/extension/dashboard/dashboard.js.map +0 -0
- /package/{built → dist}/esm/extension/endpoint/endpoint.js +0 -0
- /package/{built → dist}/esm/extension/endpoint/index.js +0 -0
- /package/{built → dist}/esm/extension/endpoint/index.js.map +0 -0
- /package/{built → dist}/esm/extension/endpoint/packets.js +0 -0
- /package/{built → dist}/esm/extension/endpoint/packets.js.map +0 -0
- /package/{built → dist}/esm/extension/extension-registry.js +0 -0
- /package/{built → dist}/esm/extension/extension-registry.js.map +0 -0
- /package/{built → dist}/esm/extension/extension.js +0 -0
- /package/{built → dist}/esm/extension/i18n/index.js +0 -0
- /package/{built → dist}/esm/extension/i18n/index.js.map +0 -0
- /package/{built → dist}/esm/extension/index.js +0 -0
- /package/{built → dist}/esm/extension/index.js.map +0 -0
- /package/{built → dist}/esm/extension/logger/index.js +0 -0
- /package/{built → dist}/esm/extension/logger/index.js.map +0 -0
- /package/{built → dist}/esm/extension/logger/packets.js +0 -0
- /package/{built → dist}/esm/extension/logger/packets.js.map +0 -0
- /package/{built → dist}/esm/extension/permission/index.js +0 -0
- /package/{built → dist}/esm/extension/permission/index.js.map +0 -0
- /package/{built → dist}/esm/extension/permission/permission.js +0 -0
- /package/{built → dist}/esm/extension/permission/permission.js.map +0 -0
- /package/{built → dist}/esm/extension/plugin/index.js +0 -0
- /package/{built → dist}/esm/extension/plugin/index.js.map +0 -0
- /package/{built → dist}/esm/extension/plugin/package-info.js +0 -0
- /package/{built → dist}/esm/extension/plugin/package-info.js.map +0 -0
- /package/{built → dist}/esm/extension/registry/index.js +0 -0
- /package/{built → dist}/esm/extension/registry/index.js.map +0 -0
- /package/{built → dist}/esm/extension/registry/packets.js +0 -0
- /package/{built → dist}/esm/extension/registry/packets.js.map +0 -0
- /package/{built → dist}/esm/extension/server/index.js +0 -0
- /package/{built → dist}/esm/extension/server/index.js.map +0 -0
- /package/{built → dist}/esm/extension/signal/index.js +0 -0
- /package/{built → dist}/esm/extension/signal/index.js.map +0 -0
- /package/{built → dist}/esm/extension/signal/packets.js +0 -0
- /package/{built → dist}/esm/extension/signal/packets.js.map +0 -0
- /package/{built → dist}/esm/extension/table/index.js +0 -0
- /package/{built → dist}/esm/extension/table/index.js.map +0 -0
- /package/{built → dist}/esm/extension/table/table.js +0 -0
- /package/{built → dist}/esm/index.js +0 -0
- /package/{built → dist}/esm/index.js.map +0 -0
- /package/{built → dist}/esm/interface.js +0 -0
- /package/{built → dist}/esm/interface.js.map +0 -0
- /package/{built → dist}/esm/localization/index.js +0 -0
- /package/{built → dist}/esm/localization/index.js.map +0 -0
- /package/{built → dist}/esm/localization/locale.js +0 -0
- /package/{built → dist}/esm/localization/locale.js.map +0 -0
- /package/{built → dist}/esm/localization/localization.js +0 -0
- /package/{built → dist}/esm/localization/localization.js.map +0 -0
- /package/{built → dist}/esm/model.js +0 -0
- /package/{built → dist}/esm/model.js.map +0 -0
- /package/{built → dist}/esm/network/connection.js +0 -0
- /package/{built → dist}/esm/network/connection.js.map +0 -0
- /package/{built → dist}/esm/network/index.js +0 -0
- /package/{built → dist}/esm/network/index.js.map +0 -0
- /package/{built → dist}/esm/network/packet/index.js +0 -0
- /package/{built → dist}/esm/network/packet/index.js.map +0 -0
- /package/{built → dist}/esm/network/packet/packet.js +0 -0
- /package/{built → dist}/esm/network/websocket-connection.js +0 -0
- /package/{built → dist}/esm/network/websocket-connection.js.map +0 -0
- /package/{built → dist}/esm/serializer.js +0 -0
- /package/{built → dist}/esm/serializer.js.map +0 -0
- /package/{built → dist}/esm/token.js +0 -0
- /package/{built → dist}/esm/token.js.map +0 -0
|
@@ -9,7 +9,7 @@ import type { Table } from '../table/table.js';
|
|
|
9
9
|
import { TableType } from '../table/table.js';
|
|
10
10
|
|
|
11
11
|
import type { DashboardHandler } from './dashboard.js';
|
|
12
|
-
import { PermissionRequestPacket, PluginRequestPacket } from './packets.js';
|
|
12
|
+
import { AppInstallRequest, AppInstallResponse, AppUpdateRequest, AppUpdateResponse, PermissionRequestPacket, PluginRequestPacket } from './packets.js';
|
|
13
13
|
|
|
14
14
|
export const DASHBOARD_EXTENSION_TYPE = new ExtensionType(
|
|
15
15
|
'dashboard',
|
|
@@ -75,8 +75,41 @@ const DASHBOARD_APP_TABLE_TYPE = TableType.createModel(DASHBOARD_EXTENSION_TYPE,
|
|
|
75
75
|
remove: DASHOBARD_APP_EDIT_PERMISSION_ID,
|
|
76
76
|
},
|
|
77
77
|
});
|
|
78
|
+
export const DASHBOARD_APP_INSTALL_PERMISSION_ID = DASHBOARD_EXTENSION_TYPE.join('app', 'install');
|
|
79
|
+
const DASHBOARD_APP_INSTALL_ENDPOINT = EndpointType.createJson<App, AppInstallResponse>(DASHBOARD_EXTENSION_TYPE, {
|
|
80
|
+
name: 'install_app',
|
|
81
|
+
requestSerializer: Serializer.model(App),
|
|
82
|
+
permissionId: DASHBOARD_APP_INSTALL_PERMISSION_ID,
|
|
83
|
+
});
|
|
84
|
+
const DASHBOARD_APP_INSTALL_PACKET = PacketType.createSerialized<AppInstallRequest>(DASHBOARD_EXTENSION_TYPE, {
|
|
85
|
+
name: 'install_app',
|
|
86
|
+
serializer: AppInstallRequest,
|
|
87
|
+
});
|
|
88
|
+
const DASHBOARD_APP_INSTALL_ACCEPT_PACKET = PacketType.createJson<string>(DASHBOARD_EXTENSION_TYPE, {
|
|
89
|
+
name: 'install_app_accept',
|
|
90
|
+
});
|
|
91
|
+
const DASHBOARD_APP_INSTALL_DENY_PACKET = PacketType.createJson<string>(DASHBOARD_EXTENSION_TYPE, {
|
|
92
|
+
name: 'install_app_deny',
|
|
93
|
+
});
|
|
94
|
+
const DASHBOARD_APP_UPDATE_PERMISSION_ID = DASHBOARD_EXTENSION_TYPE.join('app', 'update');
|
|
95
|
+
const DASHBOARD_APP_UPDATE_ENDPOINT = EndpointType.createJson<App, AppUpdateResponse>(DASHBOARD_EXTENSION_TYPE, {
|
|
96
|
+
name: 'update_app',
|
|
97
|
+
requestSerializer: Serializer.model(App),
|
|
98
|
+
permissionId: DASHBOARD_APP_UPDATE_PERMISSION_ID,
|
|
99
|
+
});
|
|
100
|
+
const DASHBOARD_APP_UPDATE_PACKET = PacketType.createSerialized<AppUpdateRequest>(DASHBOARD_EXTENSION_TYPE, {
|
|
101
|
+
name: 'update_app',
|
|
102
|
+
serializer: AppUpdateRequest,
|
|
103
|
+
});
|
|
104
|
+
const DASHBOARD_APP_UPDATE_ACCEPT_PACKET = PacketType.createJson<string>(DASHBOARD_EXTENSION_TYPE, {
|
|
105
|
+
name: 'update_app_accept',
|
|
106
|
+
});
|
|
107
|
+
const DASHBOARD_APP_UPDATE_DENY_PACKET = PacketType.createJson<string>(DASHBOARD_EXTENSION_TYPE, {
|
|
108
|
+
name: 'update_app_deny',
|
|
109
|
+
});
|
|
78
110
|
|
|
79
111
|
export class DashboardExtension {
|
|
112
|
+
public readonly type = DASHBOARD_EXTENSION_TYPE;
|
|
80
113
|
private dashboard: DashboardHandler | null = null;
|
|
81
114
|
public readonly apps: Table<App>;
|
|
82
115
|
|
|
@@ -89,6 +122,12 @@ export class DashboardExtension {
|
|
|
89
122
|
DASHBOARD_PLUGIN_ACCEPT_PACKET,
|
|
90
123
|
DASHBOARD_PLUGIN_DENY_PACKET,
|
|
91
124
|
DASHBOARD_OPEN_APP_PACKET,
|
|
125
|
+
DASHBOARD_APP_INSTALL_PACKET,
|
|
126
|
+
DASHBOARD_APP_INSTALL_ACCEPT_PACKET,
|
|
127
|
+
DASHBOARD_APP_INSTALL_DENY_PACKET,
|
|
128
|
+
DASHBOARD_APP_UPDATE_PACKET,
|
|
129
|
+
DASHBOARD_APP_UPDATE_ACCEPT_PACKET,
|
|
130
|
+
DASHBOARD_APP_UPDATE_DENY_PACKET,
|
|
92
131
|
);
|
|
93
132
|
client.network.addPacketHandler(DASHBOARD_PERMISSION_REQUEST_PACKET, (request) =>
|
|
94
133
|
this.handlePermissionRequest(request),
|
|
@@ -96,9 +135,16 @@ export class DashboardExtension {
|
|
|
96
135
|
client.network.addPacketHandler(DASHBOARD_PLUGIN_REQUEST_PACKET, (request) =>
|
|
97
136
|
this.handlePluginRequest(request),
|
|
98
137
|
);
|
|
138
|
+
client.network.addPacketHandler(DASHBOARD_APP_INSTALL_PACKET, async (request) => {
|
|
139
|
+
this.handleInstallApp(request);
|
|
140
|
+
});
|
|
141
|
+
client.network.addPacketHandler(DASHBOARD_APP_UPDATE_PACKET, async (request) => {
|
|
142
|
+
this.handleUpdateApp(request);
|
|
143
|
+
});
|
|
99
144
|
client.network.addPacketHandler(DASHBOARD_OPEN_APP_PACKET, (app) =>
|
|
100
145
|
this.handleOpenApp(app),
|
|
101
146
|
);
|
|
147
|
+
|
|
102
148
|
this.apps = client.tables.get(DASHBOARD_APP_TABLE_TYPE);
|
|
103
149
|
}
|
|
104
150
|
|
|
@@ -124,6 +170,28 @@ export class DashboardExtension {
|
|
|
124
170
|
});
|
|
125
171
|
}
|
|
126
172
|
|
|
173
|
+
private async handleInstallApp(request: AppInstallRequest): Promise<void> {
|
|
174
|
+
await this.handleDashboard(async (dashboard) => {
|
|
175
|
+
const response = await dashboard.handleInstallApp(request);
|
|
176
|
+
if (response) {
|
|
177
|
+
this.client.send(DASHBOARD_APP_INSTALL_ACCEPT_PACKET, request.requestId);
|
|
178
|
+
} else {
|
|
179
|
+
this.client.send(DASHBOARD_APP_INSTALL_DENY_PACKET, request.requestId);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
private async handleUpdateApp(request: AppUpdateRequest): Promise<void> {
|
|
185
|
+
await this.handleDashboard(async (dashboard) => {
|
|
186
|
+
const response = await dashboard.handleUpdateApp(request);
|
|
187
|
+
if (response) {
|
|
188
|
+
this.client.send(DASHBOARD_APP_UPDATE_ACCEPT_PACKET, request.requestId);
|
|
189
|
+
} else {
|
|
190
|
+
this.client.send(DASHBOARD_APP_UPDATE_DENY_PACKET, request.requestId);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
|
|
127
195
|
private async handleOpenApp(app: App): Promise<void> {
|
|
128
196
|
await this.handleDashboard(async (dashboard) => {
|
|
129
197
|
await dashboard.handleOpenApp(app);
|
|
@@ -159,4 +227,12 @@ export class DashboardExtension {
|
|
|
159
227
|
public async openApp(app: App): Promise<void> {
|
|
160
228
|
return await this.client.endpoints.call(DASHBOARD_OPEN_APP_ENDPOINT, app);
|
|
161
229
|
}
|
|
230
|
+
|
|
231
|
+
public async installApp(app: App): Promise<AppInstallResponse> {
|
|
232
|
+
return await this.client.endpoints.call(DASHBOARD_APP_INSTALL_ENDPOINT, app);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
public async updateApp(app: App): Promise<AppUpdateResponse> {
|
|
236
|
+
return await this.client.endpoints.call(DASHBOARD_APP_UPDATE_ENDPOINT, app);
|
|
237
|
+
}
|
|
162
238
|
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { App } from '../../app.js';
|
|
2
2
|
|
|
3
|
-
import type { PermissionRequestPacket, PluginRequestPacket } from './packets.js';
|
|
3
|
+
import type { AppInstallRequest, AppUpdateRequest, PermissionRequestPacket, PluginRequestPacket } from './packets.js';
|
|
4
4
|
|
|
5
5
|
export interface DashboardHandler {
|
|
6
6
|
handlePermissionRequest(request: PermissionRequestPacket): Promise<boolean>;
|
|
7
7
|
handlePluginRequest(request: PluginRequestPacket): Promise<boolean>;
|
|
8
|
+
handleInstallApp(request: AppInstallRequest): Promise<boolean>;
|
|
9
|
+
handleUpdateApp(request: AppUpdateRequest): Promise<boolean>;
|
|
8
10
|
handleOpenApp(app: App): Promise<void>;
|
|
9
11
|
}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {
|
|
2
|
+
DASHBOARD_APP_INSTALL_PERMISSION_ID, DASHBOARD_EXTENSION_TYPE,
|
|
3
|
+
DASHBOARD_OPEN_APP_PERMISSION_ID,
|
|
4
|
+
DASHBOARD_SET_PERMISSION_ID,
|
|
5
|
+
DASHOBARD_APP_EDIT_PERMISSION_ID,
|
|
6
|
+
DASHOBARD_APP_READ_PERMISSION_ID, DashboardExtension
|
|
7
|
+
} from './dashboard-extension.js';
|
|
2
8
|
export { DashboardHandler } from './dashboard.js';
|
|
3
9
|
|
|
@@ -50,3 +50,49 @@ export class PluginRequestPacket {
|
|
|
50
50
|
return new PluginRequestPacket(requestId, app, packages);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
+
|
|
54
|
+
export class AppInstallRequest {
|
|
55
|
+
constructor(public readonly requestId: string, public readonly app: App) { }
|
|
56
|
+
|
|
57
|
+
public static serialize(packet: AppInstallRequest): Uint8Array {
|
|
58
|
+
const writer = new ByteWriter();
|
|
59
|
+
writer.writeString(packet.requestId);
|
|
60
|
+
writer.writeString(JSON.stringify(packet.app.toJson()));
|
|
61
|
+
return writer.finish();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public static deserialize(data: Uint8Array): AppInstallRequest {
|
|
65
|
+
const reader = new ByteReader(data);
|
|
66
|
+
const requestId = reader.readString();
|
|
67
|
+
const app = App.fromJson(JSON.parse(reader.readString()));
|
|
68
|
+
return new AppInstallRequest(requestId, app);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export class AppUpdateRequest {
|
|
73
|
+
constructor(public readonly requestId: string, public readonly oldApp: App, public readonly newApp: App) { }
|
|
74
|
+
|
|
75
|
+
public static serialize(packet: AppUpdateRequest): Uint8Array {
|
|
76
|
+
const writer = new ByteWriter();
|
|
77
|
+
writer.writeString(packet.requestId);
|
|
78
|
+
writer.writeString(JSON.stringify(packet.oldApp.toJson()));
|
|
79
|
+
writer.writeString(JSON.stringify(packet.newApp.toJson()));
|
|
80
|
+
return writer.finish();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public static deserialize(data: Uint8Array): AppUpdateRequest {
|
|
84
|
+
const reader = new ByteReader(data);
|
|
85
|
+
const requestId = reader.readString();
|
|
86
|
+
const oldApp = App.fromJson(JSON.parse(reader.readString()));
|
|
87
|
+
const newApp = App.fromJson(JSON.parse(reader.readString()));
|
|
88
|
+
return new AppUpdateRequest(requestId, oldApp, newApp);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export type AppInstallResponse = {
|
|
93
|
+
accepted: boolean;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export type AppUpdateResponse = {
|
|
97
|
+
accepted: boolean;
|
|
98
|
+
}
|
|
@@ -23,6 +23,7 @@ type EndpointHandler = {
|
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
export class EndpointExtension {
|
|
26
|
+
public readonly type = ENDPOINT_EXTENSION_TYPE;
|
|
26
27
|
private readonly registeredEndpoints = new IdentifierMap<EndpointHandler>();
|
|
27
28
|
private readonly promiseMap: Map<number, CallPromise> = new Map();
|
|
28
29
|
private callId: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Identifier } from '../../identifier.js';
|
|
2
|
-
import {
|
|
2
|
+
import { type Serializable, Serializer } from '../../serializer.js';
|
|
3
3
|
|
|
4
4
|
export class EndpointType<Req = unknown, Res = unknown> {
|
|
5
5
|
constructor(
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { type Client } from '../client.js';
|
|
2
2
|
import { Identifier } from '../identifier.js';
|
|
3
3
|
|
|
4
|
-
export interface Extension {
|
|
4
|
+
export interface Extension {
|
|
5
|
+
readonly type: ExtensionType;
|
|
6
|
+
}
|
|
5
7
|
|
|
6
8
|
export class ExtensionType<T extends Extension = Extension> extends Identifier {
|
|
7
9
|
constructor(
|
|
@@ -16,35 +16,43 @@ const I18N_LOCALES_REGISTRY_TYPE = RegistryType.createJson<Locale[]>(I18N_EXTENS
|
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
export class I18nExtension implements Extension {
|
|
19
|
+
public readonly type = I18N_EXTENSION_TYPE;
|
|
19
20
|
public readonly localesRegistry: Registry<Locale[]>;
|
|
20
|
-
|
|
21
|
+
private locales?: Locale[];
|
|
22
|
+
public defaultLocales?: Locale[];
|
|
21
23
|
|
|
22
24
|
constructor(private readonly client: Client) {
|
|
23
25
|
client.permissions.require(I18N_GET_LOCALES_PERMISSION_ID);
|
|
24
|
-
this.localesRegistry = client.
|
|
26
|
+
this.localesRegistry = client.registries.get(I18N_LOCALES_REGISTRY_TYPE);
|
|
25
27
|
this.localesRegistry.listen((locale) => {
|
|
26
28
|
this.locales = locale;
|
|
27
29
|
});
|
|
28
30
|
}
|
|
29
31
|
|
|
30
|
-
public
|
|
31
|
-
if (
|
|
32
|
-
|
|
32
|
+
public getLocales(): readonly Locale[] {
|
|
33
|
+
if (this.locales && this.locales.length > 0) {
|
|
34
|
+
return this.locales;
|
|
35
|
+
}
|
|
36
|
+
if (!this.defaultLocales || this.defaultLocales.length === 0) {
|
|
37
|
+
throw new Error('Default locales are not set');
|
|
33
38
|
}
|
|
39
|
+
return this.defaultLocales;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public translate(localizedText: LocalizedText): string {
|
|
43
|
+
const locales = this.getLocales();
|
|
34
44
|
if (typeof localizedText === 'string') {
|
|
35
45
|
return localizedText;
|
|
36
46
|
}
|
|
37
|
-
const translation = this.selectBestTranslation(
|
|
47
|
+
const translation = this.selectBestTranslation(locales, localizedText);
|
|
38
48
|
if (!translation) {
|
|
39
|
-
|
|
40
|
-
`Missing translation for ${this.locales} in ${JSON.stringify(localizedText)}`,
|
|
41
|
-
);
|
|
49
|
+
return Object.values(localizedText)[0];
|
|
42
50
|
}
|
|
43
51
|
return translation;
|
|
44
52
|
}
|
|
45
53
|
|
|
46
54
|
public selectBestTranslation(
|
|
47
|
-
locales: Locale[],
|
|
55
|
+
locales: readonly Locale[],
|
|
48
56
|
localizedText: LocalizedText,
|
|
49
57
|
): string | undefined {
|
|
50
58
|
if (typeof localizedText === 'string') {
|
|
@@ -26,6 +26,7 @@ export const LOGGER_LISTEN_PACKET = PacketType.createJson<Identifier>(LOGGER_EXT
|
|
|
26
26
|
|
|
27
27
|
type LogListener = (message: LogMessage) => void;
|
|
28
28
|
export class LoggerExtension {
|
|
29
|
+
public readonly type = LOGGER_EXTENSION_TYPE;
|
|
29
30
|
private readonly listeners: IdentifierMap<LogListener[]> = new IdentifierMap();
|
|
30
31
|
|
|
31
32
|
constructor(private readonly client: Client) {
|
|
@@ -35,6 +35,7 @@ const PERMISSION_GRANT_PACKET = PacketType.createJson<PermissionType[]>(PERMISSI
|
|
|
35
35
|
});
|
|
36
36
|
|
|
37
37
|
export class PermissionExtension {
|
|
38
|
+
public readonly type = PERMISSION_EXTENSION_TYPE;
|
|
38
39
|
private permissions = new IdentifierMap<PermissionType>();
|
|
39
40
|
private readonly registeredPermissions = new IdentifierMap<PermissionType>();
|
|
40
41
|
private readonly requiredPermissions = new IdentifierSet();
|
|
@@ -2,7 +2,7 @@ import { Identifier } from '../../identifier.js';
|
|
|
2
2
|
import type { LocalizedText } from '../../localization/localization.js';
|
|
3
3
|
import type { Model } from '../../model.js';
|
|
4
4
|
|
|
5
|
-
type PermissionLevel = 'low' | 'medium' | 'high';
|
|
5
|
+
export type PermissionLevel = 'low' | 'medium' | 'high';
|
|
6
6
|
|
|
7
7
|
export type PermissionMetadata = {
|
|
8
8
|
name: LocalizedText;
|
|
@@ -8,6 +8,7 @@ export const PLUGIN_EXTENSION_TYPE = new ExtensionType(
|
|
|
8
8
|
);
|
|
9
9
|
|
|
10
10
|
export class PluginExtension {
|
|
11
|
+
public readonly type = PLUGIN_EXTENSION_TYPE;
|
|
11
12
|
private readonly requiredPlugins: Map<string, string | null> = new Map();
|
|
12
13
|
|
|
13
14
|
constructor(private readonly client: Client) {
|
|
@@ -5,12 +5,13 @@ import { Identifier, IdentifierMap } from '../../identifier.js';
|
|
|
5
5
|
import { PacketType } from '../../network/packet/index.js';
|
|
6
6
|
import { Serializer } from '../../serializer.js';
|
|
7
7
|
import { EndpointType } from '../endpoint/endpoint.js';
|
|
8
|
-
import {
|
|
8
|
+
import { type Extension, ExtensionType } from '../extension.js';
|
|
9
9
|
|
|
10
10
|
import { RegistryPacket, RegistryRegisterPacket } from './packets.js';
|
|
11
|
-
import {
|
|
11
|
+
import { type Registry, RegistryType } from './registry.js';
|
|
12
12
|
|
|
13
13
|
export class RegistryExtension implements Extension {
|
|
14
|
+
public readonly type = REGISTRY_EXTENSION_TYPE;
|
|
14
15
|
private readonly registries = new IdentifierMap<Registry<unknown>>();
|
|
15
16
|
|
|
16
17
|
constructor(private readonly client: Client) {
|
|
@@ -13,7 +13,7 @@ export class RegistryPermissions {
|
|
|
13
13
|
) { }
|
|
14
14
|
|
|
15
15
|
public serialize(writer: ByteWriter): void {
|
|
16
|
-
const flags = new Flags(
|
|
16
|
+
const flags = new Flags({length: 3});
|
|
17
17
|
flags.set(0, this.all !== undefined);
|
|
18
18
|
flags.set(1, this.read !== undefined);
|
|
19
19
|
flags.set(2, this.write !== undefined);
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { App } from '../../app.js';
|
|
2
2
|
import type { Client } from '../../client.js';
|
|
3
|
-
import { Identifier, IdentifierSet } from '../../identifier.js';
|
|
3
|
+
import { Identifier, IdentifierMap, IdentifierSet } from '../../identifier.js';
|
|
4
4
|
import { PacketType } from '../../network/packet/packet.js';
|
|
5
5
|
import { Serializer } from '../../serializer.js';
|
|
6
6
|
import { EndpointType } from '../endpoint/endpoint.js';
|
|
7
7
|
import type { Extension } from '../extension.js';
|
|
8
8
|
import { ExtensionType } from '../extension.js';
|
|
9
|
+
import { Registry, RegistryPermissions, RegistryType } from '../registry/registry.js';
|
|
9
10
|
import type { Table } from '../table/index.js';
|
|
10
11
|
import { TABLE_EXTENSION_TYPE } from '../table/table-extension.js';
|
|
11
12
|
import { TableType } from '../table/table.js';
|
|
@@ -42,27 +43,110 @@ const REQUIRE_APPS_PACKET_TYPE = PacketType.createJson<Identifier[]>(SERVER_EXTE
|
|
|
42
43
|
name: 'require_apps',
|
|
43
44
|
serializer: Serializer.model(Identifier).toArray(),
|
|
44
45
|
});
|
|
46
|
+
export const TRUSTED_ORIGINS_GET_PERMISSION_ID = SERVER_EXTENSION_TYPE.join('trusted_origins', 'get');
|
|
47
|
+
export const TRUSTED_ORIGINS_SET_PERMISSION_ID = SERVER_EXTENSION_TYPE.join('trusted_origins', 'set');
|
|
48
|
+
const TRUSTED_ORIGINS_REGISTRY_TYPE = RegistryType.createJson<string[]>(SERVER_EXTENSION_TYPE, {
|
|
49
|
+
name: 'trusted_origins',
|
|
50
|
+
defaultValue: [],
|
|
51
|
+
permissions: new RegistryPermissions(
|
|
52
|
+
TRUSTED_ORIGINS_GET_PERMISSION_ID,
|
|
53
|
+
TRUSTED_ORIGINS_SET_PERMISSION_ID,
|
|
54
|
+
),
|
|
55
|
+
});
|
|
56
|
+
const SESSION_OBSERVE_PACKET_TYPE = PacketType.createJson<Identifier[]>(SERVER_EXTENSION_TYPE, {
|
|
57
|
+
name: 'session_observe',
|
|
58
|
+
serializer: Serializer.model(Identifier).toArray(),
|
|
59
|
+
});
|
|
60
|
+
const SESSION_CONNECT_PACKET_TYPE = PacketType.createJson<App>(SERVER_EXTENSION_TYPE, {
|
|
61
|
+
name: 'session_connect',
|
|
62
|
+
serializer: Serializer.model(App),
|
|
63
|
+
});
|
|
64
|
+
const SESSION_DISCONNECT_PACKET_TYPE = PacketType.createJson<App>(SERVER_EXTENSION_TYPE, {
|
|
65
|
+
name: 'session_disconnect',
|
|
66
|
+
serializer: Serializer.model(App),
|
|
67
|
+
});
|
|
45
68
|
|
|
46
69
|
export class ServerExtension implements Extension {
|
|
70
|
+
public readonly type = SERVER_EXTENSION_TYPE;
|
|
47
71
|
public readonly apps: Table<App>;
|
|
48
72
|
public readonly sessions: Table<App>;
|
|
49
|
-
|
|
73
|
+
public readonly trustedOrigins: Registry<string[]>;
|
|
74
|
+
private readonly sessionObservers = new IdentifierMap<SessionObserver>();
|
|
75
|
+
private readonly requiredApps = new IdentifierSet();
|
|
50
76
|
|
|
51
77
|
constructor(private readonly client: Client) {
|
|
52
|
-
client.network.registerPacket(
|
|
78
|
+
client.network.registerPacket(
|
|
79
|
+
REQUIRE_APPS_PACKET_TYPE,
|
|
80
|
+
SESSION_OBSERVE_PACKET_TYPE,
|
|
81
|
+
SESSION_CONNECT_PACKET_TYPE,
|
|
82
|
+
SESSION_DISCONNECT_PACKET_TYPE,
|
|
83
|
+
);
|
|
84
|
+
client.network.addPacketHandler(
|
|
85
|
+
SESSION_CONNECT_PACKET_TYPE, (app) => this.handleSessionConnect(app)
|
|
86
|
+
)
|
|
87
|
+
client.network.addPacketHandler(
|
|
88
|
+
SESSION_DISCONNECT_PACKET_TYPE, (app) => this.handleSessionDisconnect(app)
|
|
89
|
+
)
|
|
53
90
|
this.apps = client.tables.get(APP_TABLE_TYPE);
|
|
54
91
|
this.sessions = client.tables.get(SESSION_TABLE_TYPE);
|
|
92
|
+
this.trustedOrigins = client.registries.get(TRUSTED_ORIGINS_REGISTRY_TYPE);
|
|
55
93
|
client.network.addTask(() => this.onTask());
|
|
94
|
+
client.onReady(() => this.onReady());
|
|
56
95
|
}
|
|
57
96
|
|
|
58
97
|
private async onTask(): Promise<void> {
|
|
59
|
-
|
|
98
|
+
if (this.requiredApps.size > 0) {
|
|
99
|
+
this.client.send(REQUIRE_APPS_PACKET_TYPE, Array.from(this.requiredApps.values()));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
private async onReady(): Promise<void> {
|
|
104
|
+
if (this.sessionObservers.size > 0) {
|
|
105
|
+
this.client.send(SESSION_OBSERVE_PACKET_TYPE, Array.from(this.sessionObservers.keys()));
|
|
106
|
+
}
|
|
60
107
|
}
|
|
61
108
|
|
|
62
109
|
public async shutdown(restart?: boolean): Promise<boolean> {
|
|
63
110
|
return await this.client.endpoints.call(SHUTDOWN_ENDPOINT_TYPE, restart ?? false);
|
|
64
111
|
}
|
|
65
112
|
|
|
113
|
+
public observeSession(appId: Identifier, {
|
|
114
|
+
onConnect,
|
|
115
|
+
onDisconnect
|
|
116
|
+
}: {
|
|
117
|
+
onConnect(app: App): void;
|
|
118
|
+
onDisconnect(app: App): void;
|
|
119
|
+
}): SessionObserver {
|
|
120
|
+
if (this.client.running) {
|
|
121
|
+
throw new Error('Cannot observe sessions after the client has started');
|
|
122
|
+
}
|
|
123
|
+
const observer = this.sessionObservers.get(appId) ?? new SessionObserver([], []);
|
|
124
|
+
observer.onConnect(onConnect);
|
|
125
|
+
observer.onDisconnect(onDisconnect);
|
|
126
|
+
this.sessionObservers.set(appId, observer);
|
|
127
|
+
return observer;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
private async handleSessionConnect(app: App): Promise<void> {
|
|
131
|
+
const observer = this.sessionObservers.get(app.id);
|
|
132
|
+
if (!observer) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
for (const callback of observer.onConnectCallbacks) {
|
|
136
|
+
await callback(app);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private async handleSessionDisconnect(app: App): Promise<void> {
|
|
141
|
+
const observer = this.sessionObservers.get(app.id);
|
|
142
|
+
if (!observer) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
for (const callback of observer.onDisconnectCallbacks) {
|
|
146
|
+
await callback(app);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
66
150
|
public require(...appIds: Identifier[]): void {
|
|
67
151
|
if (this.client.running) {
|
|
68
152
|
throw new Error('Cannot require apps after the client has started');
|
|
@@ -72,3 +156,18 @@ export class ServerExtension implements Extension {
|
|
|
72
156
|
}
|
|
73
157
|
}
|
|
74
158
|
}
|
|
159
|
+
|
|
160
|
+
export class SessionObserver {
|
|
161
|
+
constructor(
|
|
162
|
+
public readonly onConnectCallbacks: Array<(app: App) => Promise<void> | void>,
|
|
163
|
+
public readonly onDisconnectCallbacks: Array<(app: App) => Promise<void> | void>,
|
|
164
|
+
) { }
|
|
165
|
+
|
|
166
|
+
public onConnect(callback: (app: App) => Promise<void> | void): void {
|
|
167
|
+
this.onConnectCallbacks.push(callback);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
public onDisconnect(callback: (app: App) => Promise<void> | void): void {
|
|
171
|
+
this.onDisconnectCallbacks.push(callback);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
@@ -3,7 +3,7 @@ import type { Unlisten } from '../../event-emitter.js';
|
|
|
3
3
|
import { Identifier, IdentifierMap } from '../../identifier.js';
|
|
4
4
|
import { PacketType } from '../../network/packet/index.js';
|
|
5
5
|
import { Serializer } from '../../serializer.js';
|
|
6
|
-
import {
|
|
6
|
+
import { type Extension, ExtensionType } from '../extension.js';
|
|
7
7
|
|
|
8
8
|
import { SignalPacket, SignalRegisterPacket } from './packets.js';
|
|
9
9
|
import type { Signal } from './signal.js';
|
|
@@ -31,6 +31,7 @@ const SIGNAL_NOTIFY_PACKET = PacketType.createSerialized<SignalPacket>(SIGNAL_EX
|
|
|
31
31
|
});
|
|
32
32
|
|
|
33
33
|
export class SignalExtension implements Extension {
|
|
34
|
+
public readonly type = SIGNAL_EXTENSION_TYPE;
|
|
34
35
|
private readonly signals = new IdentifierMap<SignalType<unknown>>();
|
|
35
36
|
|
|
36
37
|
constructor(private readonly client: Client) {
|
|
@@ -13,7 +13,7 @@ export class SignalPermissions {
|
|
|
13
13
|
) {}
|
|
14
14
|
|
|
15
15
|
public serialize(writer: ByteWriter): void {
|
|
16
|
-
const flags = new Flags(
|
|
16
|
+
const flags = new Flags({length: 3});
|
|
17
17
|
flags.set(0, this.all !== undefined);
|
|
18
18
|
flags.set(1, this.listen !== undefined);
|
|
19
19
|
flags.set(2, this.send !== undefined);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ByteReader, ByteWriter } from '../../bytebuffer.js';
|
|
1
|
+
import { ByteReader, ByteWriter, Flags } from '../../bytebuffer.js';
|
|
2
2
|
import { Identifier } from '../../identifier.js';
|
|
3
3
|
|
|
4
4
|
import type { TableConfig } from './table.js';
|
|
@@ -114,31 +114,19 @@ export class TableProxyPacket {
|
|
|
114
114
|
export class TableFetchPacket {
|
|
115
115
|
constructor(
|
|
116
116
|
public readonly id: Identifier,
|
|
117
|
-
public readonly
|
|
118
|
-
public readonly
|
|
119
|
-
public readonly cursor: string | null,
|
|
117
|
+
public readonly limit: number,
|
|
118
|
+
public readonly backward: boolean = false,
|
|
119
|
+
public readonly cursor: string | null = null,
|
|
120
120
|
) {}
|
|
121
121
|
|
|
122
122
|
public static serialize(packet: TableFetchPacket): Uint8Array {
|
|
123
123
|
const writer = new ByteWriter();
|
|
124
124
|
writer.writeString(packet.id.key());
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
flags |= 0b10;
|
|
131
|
-
}
|
|
132
|
-
if (packet.cursor !== null) {
|
|
133
|
-
flags |= 0b100;
|
|
134
|
-
}
|
|
135
|
-
writer.writeByte(flags);
|
|
136
|
-
if (packet.before !== null) {
|
|
137
|
-
writer.writeInt(packet.before);
|
|
138
|
-
}
|
|
139
|
-
if (packet.after !== null) {
|
|
140
|
-
writer.writeInt(packet.after);
|
|
141
|
-
}
|
|
125
|
+
writer.writeInt(packet.limit);
|
|
126
|
+
const flags = new Flags({length: 2});
|
|
127
|
+
flags.set(0, packet.backward);
|
|
128
|
+
flags.set(1, packet.cursor !== null);
|
|
129
|
+
writer.writeFlags(flags);
|
|
142
130
|
if (packet.cursor !== null) {
|
|
143
131
|
writer.writeString(packet.cursor);
|
|
144
132
|
}
|
|
@@ -148,11 +136,11 @@ export class TableFetchPacket {
|
|
|
148
136
|
public static deserialize(data: Uint8Array): TableFetchPacket {
|
|
149
137
|
const reader = new ByteReader(data);
|
|
150
138
|
const id = Identifier.fromKey(reader.readString());
|
|
151
|
-
const
|
|
152
|
-
const
|
|
153
|
-
const
|
|
154
|
-
const cursor = flags
|
|
155
|
-
return new TableFetchPacket(id,
|
|
139
|
+
const limit = reader.readInt();
|
|
140
|
+
const flags = reader.readFlags(2);
|
|
141
|
+
const backward = flags.get(0);
|
|
142
|
+
const cursor = flags.ifSet(1, () => reader.readString());
|
|
143
|
+
return new TableFetchPacket(id, limit, backward, cursor);
|
|
156
144
|
}
|
|
157
145
|
}
|
|
158
146
|
|
|
@@ -231,11 +219,21 @@ export class SetPermissionPacket {
|
|
|
231
219
|
flags |= 0b10000;
|
|
232
220
|
}
|
|
233
221
|
writer.writeByte(flags);
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
222
|
+
if (packet.all) {
|
|
223
|
+
writer.writeString(packet.all.key());
|
|
224
|
+
}
|
|
225
|
+
if (packet.read) {
|
|
226
|
+
writer.writeString(packet.read.key());
|
|
227
|
+
}
|
|
228
|
+
if (packet.write) {
|
|
229
|
+
writer.writeString(packet.write.key());
|
|
230
|
+
}
|
|
231
|
+
if (packet.remove) {
|
|
232
|
+
writer.writeString(packet.remove.key());
|
|
233
|
+
}
|
|
234
|
+
if (packet.proxy) {
|
|
235
|
+
writer.writeString(packet.proxy.key());
|
|
236
|
+
}
|
|
239
237
|
return writer.finish();
|
|
240
238
|
}
|
|
241
239
|
|