@omujs/omu 0.9.50 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/api/dashboard/apps.d.ts +25 -0
  2. package/dist/api/dashboard/apps.js +2 -0
  3. package/dist/api/dashboard/apps.js.map +7 -0
  4. package/dist/api/dashboard/constants.d.ts +59 -0
  5. package/dist/api/dashboard/constants.js +2 -0
  6. package/dist/api/dashboard/constants.js.map +7 -0
  7. package/dist/api/dashboard/dragdrop.d.ts +78 -0
  8. package/dist/api/dashboard/dragdrop.js +2 -0
  9. package/dist/api/dashboard/dragdrop.js.map +7 -0
  10. package/dist/api/dashboard/extension.d.ts +9 -159
  11. package/dist/api/dashboard/extension.js +1 -1
  12. package/dist/api/dashboard/extension.js.map +3 -3
  13. package/dist/api/dashboard/handler.d.ts +6 -2
  14. package/dist/api/dashboard/index.d.ts +5 -2
  15. package/dist/api/dashboard/index.js +1 -1
  16. package/dist/api/dashboard/index.js.map +3 -3
  17. package/dist/api/dashboard/packets.d.ts +48 -59
  18. package/dist/api/dashboard/packets.js +1 -1
  19. package/dist/api/dashboard/packets.js.map +3 -3
  20. package/dist/api/dashboard/prompt.d.ts +0 -0
  21. package/dist/api/dashboard/prompt.js +1 -0
  22. package/dist/api/dashboard/prompt.js.map +7 -0
  23. package/dist/api/dashboard/webview.d.ts +101 -0
  24. package/dist/api/dashboard/webview.js +2 -0
  25. package/dist/api/dashboard/webview.js.map +7 -0
  26. package/dist/api/registry/extension.js +1 -1
  27. package/dist/api/registry/extension.js.map +2 -2
  28. package/dist/api/table/extension.js +1 -1
  29. package/dist/api/table/extension.js.map +3 -3
  30. package/dist/index.d.ts +3 -3
  31. package/dist/index.js +1 -1
  32. package/dist/index.js.map +3 -3
  33. package/dist/network/network.js +1 -1
  34. package/dist/network/network.js.map +2 -2
  35. package/dist/serialize/bytebuffer.d.ts +1 -1
  36. package/dist/serialize/bytebuffer.js.map +2 -2
  37. package/dist/version.d.ts +2 -2
  38. package/dist/version.js +1 -1
  39. package/dist/version.js.map +1 -1
  40. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/api/table/extension.ts"],
4
- "sourcesContent": ["import type { Unlisten } from '../../event';\nimport { EventEmitter } from '../../event';\nimport { Identifier, IdentifierMap } from '../../identifier';\nimport { PacketType } from '../../network/packet/packet.js';\nimport { Omu } from '../../omu';\nimport type { JsonType, Serializable } from '../../serialize';\nimport { Serializer } from '../../serialize';\nimport { EndpointType } from '../endpoint/endpoint.js';\nimport type { Extension } from '../extension.js';\nimport { ExtensionType } from '../extension.js';\n\nimport {\n SetConfigPacket,\n SetPermissionPacket,\n TableFetchPacket,\n TableFetchRangePacket,\n TableItemsPacket,\n TableKeysPacket,\n TablePacket,\n TableProxyPacket,\n} from './packets.js';\nimport type { Table, TableConfig, TableEvents, TablePermissions } from './table.js';\nimport { TableType } from './table.js';\n\nexport const TABLE_EXTENSION_TYPE: ExtensionType<TableExtension> = new ExtensionType(\n 'table',\n (client) => new TableExtension(client),\n);\nexport const TABLE_PERMISSION_ID: Identifier = TABLE_EXTENSION_TYPE.join('permission');\n\nconst TABLE_SET_PERMISSION_PACKET = PacketType.createSerialized<SetPermissionPacket>(TABLE_EXTENSION_TYPE, {\n name: 'set_permission',\n serializer: SetPermissionPacket,\n});\nconst TABLE_SET_CONFIG_PACKET = PacketType.createSerialized<SetConfigPacket>(TABLE_EXTENSION_TYPE, {\n name: 'set_config',\n serializer: SetConfigPacket,\n});\nconst TABLE_LISTEN_PACKET = PacketType.createJson<Identifier>(TABLE_EXTENSION_TYPE, {\n name: 'listen',\n serializer: Identifier,\n});\nconst TABLE_PROXY_LISTEN_PACKET = PacketType.createJson<Identifier>(TABLE_EXTENSION_TYPE, {\n name: 'proxy_listen',\n serializer: Identifier,\n});\nconst TABLE_PROXY_PACKET = PacketType.createSerialized<TableProxyPacket>(TABLE_EXTENSION_TYPE, {\n name: 'proxy',\n serializer: TableProxyPacket,\n});\nconst TABLE_ITEM_ADD_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_add',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_UPDATE_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_update',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_REMOVE_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_remove',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_GET_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_get',\n requestSerializer: TableKeysPacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, Record<string, boolean>>(TABLE_EXTENSION_TYPE, {\n name: 'item_has',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ALL_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, boolean>(TABLE_EXTENSION_TYPE, {\n name: 'item_has_all',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ANY_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, boolean>(TABLE_EXTENSION_TYPE, {\n name: 'item_has_any',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_ENDPOINT = EndpointType.createSerialized<TableFetchPacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch',\n requestSerializer: TableFetchPacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_RANGE_ENDPOINT = EndpointType.createSerialized<TableFetchRangePacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch_range',\n requestSerializer: TableFetchRangePacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_ALL_ENDPOINT = EndpointType.createSerialized<TablePacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch_all',\n requestSerializer: TablePacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_SIZE_ENDPOINT = EndpointType.createSerialized<TablePacket, number>(TABLE_EXTENSION_TYPE, {\n name: 'size',\n requestSerializer: TablePacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_CLEAR_PACKET = PacketType.createSerialized<TablePacket>(TABLE_EXTENSION_TYPE, {\n name: 'clear',\n serializer: TablePacket,\n});\n\nexport class TableExtension implements Extension {\n public readonly type: ExtensionType<TableExtension> = TABLE_EXTENSION_TYPE;\n private readonly tableMap = new IdentifierMap<Table<unknown>>();\n\n constructor(private readonly omu: Omu) {\n omu.network.registerPacket(\n TABLE_SET_PERMISSION_PACKET,\n TABLE_SET_CONFIG_PACKET,\n TABLE_LISTEN_PACKET,\n TABLE_PROXY_LISTEN_PACKET,\n TABLE_PROXY_PACKET,\n TABLE_ITEM_ADD_PACKET,\n TABLE_ITEM_UPDATE_PACKET,\n TABLE_ITEM_REMOVE_PACKET,\n TABLE_ITEM_CLEAR_PACKET,\n );\n }\n\n private createTable<T>(tableType: TableType<T>): Table<T> {\n this.omu.permissions.require(TABLE_PERMISSION_ID);\n if (this.has(tableType.id)) {\n throw new Error('Table already exists');\n }\n const table = new TableImpl<T>(this.omu, tableType);\n this.tableMap.set(tableType.id, table as Table<unknown>);\n return table;\n }\n\n public json<T, D extends JsonType = JsonType>(name: string, options: { key: (item: T) => string; serializer?: Serializable<T, D> }): Table<T> {\n const tableType = new TableType<T>(\n this.omu.app.id.base.join(name),\n Serializer.pipe<T, JsonType, Uint8Array>(options.serializer ?? Serializer.noop(), Serializer.json()),\n options.key,\n );\n return this.createTable(tableType);\n }\n\n public serialized<T>(name: string, options: { key: (item: T) => string; serializer: Serializable<T, Uint8Array> }): Table<T> {\n const tableType = new TableType<T>(\n this.omu.app.id.base.join(name),\n options.serializer,\n options.key,\n );\n return this.createTable(tableType);\n }\n\n public get<T>(type: TableType<T>): Table<T> {\n if (this.has(type.id)) {\n return this.tableMap.get(type.id) as Table<T>;\n }\n return this.createTable(type);\n }\n\n public has(identifier: Identifier): boolean {\n return this.tableMap.has(identifier);\n }\n}\n\nclass TableImpl<T> implements Table<T> {\n public cache: Map<string, T>;\n public readonly event: TableEvents<T>;\n private readonly promiseMap: Map<string, Promise<T | undefined>>;\n private readonly proxies: Array<(item: T) => T | undefined>;\n private id: Identifier;\n private serializer: Serializable<T, Uint8Array>;\n private keyFunction: (item: T) => string;\n private listening: boolean;\n private cacheSize?: number;\n private config?: TableConfig;\n private permissions?: TablePermissions;\n\n constructor(\n private readonly omu: Omu,\n tableType: TableType<T>,\n ) {\n this.id = tableType.id;\n this.serializer = tableType.serializer;\n this.keyFunction = tableType.keyFunction;\n this.cache = new Map();\n this.event = {\n add: new EventEmitter<[Map<string, T>]>(),\n update: new EventEmitter<[Map<string, T>]>(),\n remove: new EventEmitter<[Map<string, T>]>(),\n clear: new EventEmitter<[]>(),\n cacheUpdate: new EventEmitter<[Map<string, T>]>(),\n };\n this.promiseMap = new Map();\n this.proxies = [];\n this.listening = false;\n\n omu.network.addPacketHandler(TABLE_PROXY_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n let items = this.deserializeItems(packet.items);\n this.proxies.forEach((proxy) => {\n items = new Map(\n [...items.entries()]\n .map(([key, item]) => {\n const proxyItem = proxy(item);\n if (proxyItem !== undefined) {\n return [key, proxyItem as T];\n }\n return undefined;\n })\n .filter((item): item is [string, T] => {\n return typeof item !== 'undefined';\n }),\n );\n });\n omu.send(TABLE_PROXY_PACKET, {\n id: this.id,\n key: packet.key,\n items: Object.fromEntries(\n [...items.entries()].map(([key, item]) => {\n return [key, this.serializer.serialize(item)];\n }),\n ),\n });\n });\n omu.network.addPacketHandler(TABLE_ITEM_ADD_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n this.updateCache(items);\n this.event.add.emit(items);\n });\n omu.network.addPacketHandler(TABLE_ITEM_UPDATE_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n this.updateCache(items);\n this.event.update.emit(items);\n });\n omu.network.addPacketHandler(TABLE_ITEM_REMOVE_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n items.forEach((_, key) => {\n this.cache.delete(key);\n });\n this.event.remove.emit(items);\n this.event.cacheUpdate.emit(this.cache);\n });\n omu.network.addPacketHandler(TABLE_ITEM_CLEAR_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n this.cache = new Map();\n this.event.clear.emit();\n this.event.cacheUpdate.emit(this.cache);\n });\n omu.event.ready.listen(() => this.onReady());\n }\n\n private updateCache(items: Map<string, T>): void {\n if (!this.cacheSize) {\n this.cache = items;\n } else {\n const cache = new Map([...this.cache, ...items].slice(-this.cacheSize));\n this.cache = cache;\n }\n this.event.cacheUpdate.emit(this.cache);\n }\n\n public listen(listener?: (items: Map<string, T>) => void): Unlisten {\n if (!this.listening) {\n this.omu.onReady(() => {\n this.omu.send(TABLE_LISTEN_PACKET, this.id);\n });\n this.listening = true;\n }\n if (listener) {\n return this.event.cacheUpdate.listen(listener);\n }\n return () => {};\n }\n\n public proxy(callback: (item: T) => T | undefined): Unlisten {\n if (this.proxies.length === 0) {\n let cancel = (): void => {};\n cancel = this.omu.onReady(() => {\n if (this.proxies.length === 0) {\n cancel();\n return;\n }\n this.omu.send(TABLE_PROXY_LISTEN_PACKET, this.id);\n });\n }\n this.proxies.push(callback);\n return () => {\n this.proxies.splice(this.proxies.indexOf(callback), 1);\n };\n }\n\n private onReady(): void {\n if (this.config) {\n this.omu.send(TABLE_SET_CONFIG_PACKET, {\n id: this.id,\n config: this.config,\n });\n }\n }\n\n public async get(key: string): Promise<T | undefined> {\n if (this.cache.has(key)) {\n return this.cache.get(key);\n }\n if (this.promiseMap.has(key)) {\n return await this.promiseMap.get(key);\n }\n const promise = this.omu.endpoints\n .call(TABLE_ITEM_GET_ENDPOINT, {\n id: this.id,\n keys: [key],\n })\n .then((res) => {\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return this.cache.get(key);\n });\n this.promiseMap.set(key, promise);\n return await promise.then((item) => {\n this.promiseMap.delete(key);\n return item;\n });\n }\n\n public async getMany(...keys: string[]): Promise<Map<string, T>> {\n const filteredKeys = keys\n .filter((key) => !this.cache.has(key))\n .filter((key) => !this.promiseMap.has(key));\n if (filteredKeys.length === 0) {\n return new Map([...this.cache].filter(([key]) => keys.includes(key)));\n }\n const promise = this.omu.endpoints\n .call(TABLE_ITEM_GET_ENDPOINT, {\n id: this.id,\n keys: filteredKeys,\n })\n .then((res) => {\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n });\n for (const key of filteredKeys) {\n this.promiseMap.set(\n key,\n promise.then((items) => items.get(key)),\n );\n }\n const items = await promise;\n for (const key of filteredKeys) {\n this.promiseMap.delete(key);\n }\n return new Map([...this.cache, ...items].filter(([key]) => keys.includes(key)));\n }\n\n public async add(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n this.omu.send(TABLE_ITEM_ADD_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async update(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n this.omu.send(TABLE_ITEM_UPDATE_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async remove(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n const keys = Object.keys(data);\n this.cache = new Map([...this.cache].filter(([key]) => !keys.includes(key)));\n this.omu.send(TABLE_ITEM_REMOVE_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async clear(): Promise<void> {\n this.omu.send(TABLE_ITEM_CLEAR_PACKET, {\n id: this.id,\n });\n }\n\n public async has(key: string): Promise<boolean> {\n if (this.cache.has(key)) {\n return true;\n }\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ENDPOINT, {\n id: this.id,\n keys: [key],\n });\n return res[key] ?? false;\n }\n\n public async hasMany<T extends Record<string, unknown>>(...keys: (keyof T)[]): Promise<{ [key in keyof T]: boolean }> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ENDPOINT, {\n id: this.id,\n keys: keys,\n });\n return res as { [key in keyof T]: boolean };\n }\n\n public async hasAll(...keys: string[]): Promise<boolean> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ALL_ENDPOINT, {\n id: this.id,\n keys,\n });\n return res;\n }\n\n public async hasAny(...keys: string[]): Promise<boolean> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ANY_ENDPOINT, {\n id: this.id,\n keys,\n });\n return res;\n }\n\n public async fetchItems({\n limit,\n backward,\n cursor,\n }: {\n limit: number;\n backward?: boolean;\n cursor?: string;\n }): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(\n TABLE_FETCH_ENDPOINT,\n new TableFetchPacket(this.id, limit, backward, cursor),\n );\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async fetchRange({\n start,\n end,\n }: {\n start: string;\n end: string;\n }): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(TABLE_FETCH_RANGE_ENDPOINT, {\n id: this.id,\n start,\n end,\n });\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async fetchAll(): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(TABLE_FETCH_ALL_ENDPOINT, {\n id: this.id,\n });\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async *iterate({\n backward,\n cursor,\n }: {\n backward?: boolean;\n cursor?: string;\n }): AsyncIterable<T> {\n while (true) {\n const items = await this.fetchItems({\n limit: this.cacheSize ?? 100,\n backward,\n cursor,\n });\n if (items.size === 0) {\n break;\n }\n yield* items.values();\n if (cursor !== undefined) {\n items.delete(cursor);\n }\n const cursorItem = backward ? items.values().next().value : [...items.values()].pop();\n if (!cursorItem) {\n break;\n }\n cursor = this.keyFunction(cursorItem);\n }\n }\n\n public async size(): Promise<number> {\n return await this.omu.endpoints.call(TABLE_SIZE_ENDPOINT, {\n id: this.id,\n });\n }\n\n private deserializeItems(items: Record<string, Uint8Array>): Map<string, T> {\n return new Map(\n Object.entries(items).map(([key, data]) => {\n const item = this.serializer.deserialize(data);\n this.cache.set(key, item);\n return [key, item];\n }),\n );\n }\n\n private serializeItems(items: T[]): Record<string, Uint8Array> {\n return Object.fromEntries(\n items.map((item) => {\n return [this.keyFunction(item), this.serializer.serialize(item)];\n }),\n );\n }\n\n public setCacheSize(size: number): void {\n this.cacheSize = size;\n }\n\n public setConfig(config: TableConfig): void {\n if (this.omu.running) {\n throw new Error('Cannot set config after client has started');\n }\n this.config = config;\n }\n\n public setPermissions(permissions: TablePermissions): void {\n this.permissions = permissions;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["EventEmitter", "Identifier", "IdentifierMap", "PacketType", "Serializer", "EndpointType", "ExtensionType", "SetConfigPacket", "SetPermissionPacket", "TableFetchPacket", "TableFetchRangePacket", "TableItemsPacket", "TableKeysPacket", "TablePacket", "TableProxyPacket", "TableType", "TABLE_EXTENSION_TYPE", "client", "TableExtension", "TABLE_PERMISSION_ID", "TABLE_SET_PERMISSION_PACKET", "TABLE_SET_CONFIG_PACKET", "TABLE_LISTEN_PACKET", "TABLE_PROXY_LISTEN_PACKET", "TABLE_PROXY_PACKET", "TABLE_ITEM_ADD_PACKET", "TABLE_ITEM_UPDATE_PACKET", "TABLE_ITEM_REMOVE_PACKET", "TABLE_ITEM_GET_ENDPOINT", "TABLE_ITEM_HAS_ENDPOINT", "TABLE_ITEM_HAS_ALL_ENDPOINT", "TABLE_ITEM_HAS_ANY_ENDPOINT", "TABLE_FETCH_ENDPOINT", "TABLE_FETCH_RANGE_ENDPOINT", "TABLE_FETCH_ALL_ENDPOINT", "TABLE_SIZE_ENDPOINT", "TABLE_ITEM_CLEAR_PACKET", "omu", "tableType", "table", "TableImpl", "name", "options", "type", "identifier", "packet", "items", "proxy", "key", "item", "proxyItem", "_", "cache", "listener", "callback", "cancel", "promise", "res", "keys", "filteredKeys", "data", "limit", "backward", "cursor", "start", "end", "cursorItem", "size", "config", "permissions"]
4
+ "sourcesContent": ["import type { Unlisten } from '../../event';\nimport { EventEmitter } from '../../event';\nimport { Identifier, IdentifierMap } from '../../identifier';\nimport { PacketType } from '../../network/packet/packet.js';\nimport { Omu } from '../../omu';\nimport type { JsonType, Serializable } from '../../serialize';\nimport { Serializer } from '../../serialize';\nimport { EndpointType } from '../endpoint/endpoint.js';\nimport type { Extension } from '../extension.js';\nimport { ExtensionType } from '../extension.js';\n\nimport {\n SetConfigPacket,\n SetPermissionPacket,\n TableFetchPacket,\n TableFetchRangePacket,\n TableItemsPacket,\n TableKeysPacket,\n TablePacket,\n TableProxyPacket,\n} from './packets.js';\nimport type { Table, TableConfig, TableEvents, TablePermissions } from './table.js';\nimport { TableType } from './table.js';\n\nexport const TABLE_EXTENSION_TYPE: ExtensionType<TableExtension> = new ExtensionType(\n 'table',\n (client) => new TableExtension(client),\n);\nexport const TABLE_PERMISSION_ID: Identifier = TABLE_EXTENSION_TYPE.join('permission');\n\nconst TABLE_SET_PERMISSION_PACKET = PacketType.createSerialized<SetPermissionPacket>(TABLE_EXTENSION_TYPE, {\n name: 'set_permission',\n serializer: SetPermissionPacket,\n});\nconst TABLE_SET_CONFIG_PACKET = PacketType.createSerialized<SetConfigPacket>(TABLE_EXTENSION_TYPE, {\n name: 'set_config',\n serializer: SetConfigPacket,\n});\nconst TABLE_LISTEN_PACKET = PacketType.createJson<Identifier>(TABLE_EXTENSION_TYPE, {\n name: 'listen',\n serializer: Identifier,\n});\nconst TABLE_PROXY_LISTEN_PACKET = PacketType.createJson<Identifier>(TABLE_EXTENSION_TYPE, {\n name: 'proxy_listen',\n serializer: Identifier,\n});\nconst TABLE_PROXY_PACKET = PacketType.createSerialized<TableProxyPacket>(TABLE_EXTENSION_TYPE, {\n name: 'proxy',\n serializer: TableProxyPacket,\n});\nconst TABLE_ITEM_ADD_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_add',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_UPDATE_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_update',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_REMOVE_PACKET = PacketType.createSerialized<TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_remove',\n serializer: TableItemsPacket,\n});\nconst TABLE_ITEM_GET_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'item_get',\n requestSerializer: TableKeysPacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, Record<string, boolean>>(TABLE_EXTENSION_TYPE, {\n name: 'item_has',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ALL_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, boolean>(TABLE_EXTENSION_TYPE, {\n name: 'item_has_all',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_HAS_ANY_ENDPOINT = EndpointType.createSerialized<TableKeysPacket, boolean>(TABLE_EXTENSION_TYPE, {\n name: 'item_has_any',\n requestSerializer: TableKeysPacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_ENDPOINT = EndpointType.createSerialized<TableFetchPacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch',\n requestSerializer: TableFetchPacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_RANGE_ENDPOINT = EndpointType.createSerialized<TableFetchRangePacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch_range',\n requestSerializer: TableFetchRangePacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_FETCH_ALL_ENDPOINT = EndpointType.createSerialized<TablePacket, TableItemsPacket>(TABLE_EXTENSION_TYPE, {\n name: 'fetch_all',\n requestSerializer: TablePacket,\n responseSerializer: TableItemsPacket,\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_SIZE_ENDPOINT = EndpointType.createSerialized<TablePacket, number>(TABLE_EXTENSION_TYPE, {\n name: 'size',\n requestSerializer: TablePacket,\n responseSerializer: Serializer.json(),\n permissionId: TABLE_PERMISSION_ID,\n});\nconst TABLE_ITEM_CLEAR_PACKET = PacketType.createSerialized<TablePacket>(TABLE_EXTENSION_TYPE, {\n name: 'clear',\n serializer: TablePacket,\n});\n\nexport class TableExtension implements Extension {\n public readonly type: ExtensionType<TableExtension> = TABLE_EXTENSION_TYPE;\n private readonly tableMap = new IdentifierMap<Table<unknown>>();\n\n constructor(private readonly omu: Omu) {\n omu.network.registerPacket(\n TABLE_SET_PERMISSION_PACKET,\n TABLE_SET_CONFIG_PACKET,\n TABLE_LISTEN_PACKET,\n TABLE_PROXY_LISTEN_PACKET,\n TABLE_PROXY_PACKET,\n TABLE_ITEM_ADD_PACKET,\n TABLE_ITEM_UPDATE_PACKET,\n TABLE_ITEM_REMOVE_PACKET,\n TABLE_ITEM_CLEAR_PACKET,\n );\n }\n\n private createTable<T>(tableType: TableType<T>): Table<T> {\n this.omu.permissions.require(TABLE_PERMISSION_ID);\n const existing = this.tableMap.get(tableType.id);\n if (existing) {\n return existing as Table<T>;\n }\n const table = new TableImpl<T>(this.omu, tableType);\n this.tableMap.set(tableType.id, table as Table<unknown>);\n return table;\n }\n\n public json<T, D extends JsonType = JsonType>(name: string, options: { key: (item: T) => string; serializer?: Serializable<T, D> }): Table<T> {\n const tableType = new TableType<T>(\n this.omu.app.id.base.join(name),\n Serializer.pipe<T, JsonType, Uint8Array>(options.serializer ?? Serializer.noop(), Serializer.json()),\n options.key,\n );\n return this.createTable(tableType);\n }\n\n public serialized<T>(name: string, options: { key: (item: T) => string; serializer: Serializable<T, Uint8Array> }): Table<T> {\n const tableType = new TableType<T>(\n this.omu.app.id.base.join(name),\n options.serializer,\n options.key,\n );\n return this.createTable(tableType);\n }\n\n public get<T>(type: TableType<T>): Table<T> {\n if (this.has(type.id)) {\n return this.tableMap.get(type.id) as Table<T>;\n }\n return this.createTable(type);\n }\n\n public has(identifier: Identifier): boolean {\n return this.tableMap.has(identifier);\n }\n}\n\nclass TableImpl<T> implements Table<T> {\n public cache: Map<string, T>;\n public readonly event: TableEvents<T>;\n private readonly promiseMap: Map<string, Promise<T | undefined>>;\n private readonly proxies: Array<(item: T) => T | undefined>;\n private id: Identifier;\n private serializer: Serializable<T, Uint8Array>;\n private keyFunction: (item: T) => string;\n private listening: boolean;\n private cacheSize?: number;\n private config?: TableConfig;\n private permissions?: TablePermissions;\n\n constructor(\n private readonly omu: Omu,\n tableType: TableType<T>,\n ) {\n this.id = tableType.id;\n this.serializer = tableType.serializer;\n this.keyFunction = tableType.keyFunction;\n this.cache = new Map();\n this.event = {\n add: new EventEmitter<[Map<string, T>]>(),\n update: new EventEmitter<[Map<string, T>]>(),\n remove: new EventEmitter<[Map<string, T>]>(),\n clear: new EventEmitter<[]>(),\n cacheUpdate: new EventEmitter<[Map<string, T>]>(),\n };\n this.promiseMap = new Map();\n this.proxies = [];\n this.listening = false;\n\n omu.network.addPacketHandler(TABLE_PROXY_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n let items = this.deserializeItems(packet.items);\n this.proxies.forEach((proxy) => {\n items = new Map(\n [...items.entries()]\n .map(([key, item]) => {\n const proxyItem = proxy(item);\n if (proxyItem !== undefined) {\n return [key, proxyItem as T];\n }\n return undefined;\n })\n .filter((item): item is [string, T] => {\n return typeof item !== 'undefined';\n }),\n );\n });\n omu.send(TABLE_PROXY_PACKET, {\n id: this.id,\n key: packet.key,\n items: Object.fromEntries(\n [...items.entries()].map(([key, item]) => {\n return [key, this.serializer.serialize(item)];\n }),\n ),\n });\n });\n omu.network.addPacketHandler(TABLE_ITEM_ADD_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n this.updateCache(items);\n this.event.add.emit(items);\n });\n omu.network.addPacketHandler(TABLE_ITEM_UPDATE_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n this.updateCache(items);\n this.event.update.emit(items);\n });\n omu.network.addPacketHandler(TABLE_ITEM_REMOVE_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n const items = this.deserializeItems(packet.items);\n items.forEach((_, key) => {\n this.cache.delete(key);\n });\n this.event.remove.emit(items);\n this.event.cacheUpdate.emit(this.cache);\n });\n omu.network.addPacketHandler(TABLE_ITEM_CLEAR_PACKET, (packet) => {\n if (!packet.id.isEqual(this.id)) {\n return;\n }\n this.cache = new Map();\n this.event.clear.emit();\n this.event.cacheUpdate.emit(this.cache);\n });\n omu.event.ready.listen(() => this.onReady());\n }\n\n private updateCache(items: Map<string, T>): void {\n if (!this.cacheSize) {\n this.cache = items;\n } else {\n const cache = new Map([...this.cache, ...items].slice(-this.cacheSize));\n this.cache = cache;\n }\n this.event.cacheUpdate.emit(this.cache);\n }\n\n public listen(listener?: (items: Map<string, T>) => void): Unlisten {\n if (!this.listening) {\n this.omu.onReady(() => {\n this.omu.send(TABLE_LISTEN_PACKET, this.id);\n });\n this.listening = true;\n }\n if (listener) {\n return this.event.cacheUpdate.listen(listener);\n }\n return () => {};\n }\n\n public proxy(callback: (item: T) => T | undefined): Unlisten {\n if (this.proxies.length === 0) {\n let cancel = (): void => {};\n cancel = this.omu.onReady(() => {\n if (this.proxies.length === 0) {\n cancel();\n return;\n }\n this.omu.send(TABLE_PROXY_LISTEN_PACKET, this.id);\n });\n }\n this.proxies.push(callback);\n return () => {\n this.proxies.splice(this.proxies.indexOf(callback), 1);\n };\n }\n\n private onReady(): void {\n if (this.config) {\n this.omu.send(TABLE_SET_CONFIG_PACKET, {\n id: this.id,\n config: this.config,\n });\n }\n }\n\n public async get(key: string): Promise<T | undefined> {\n if (this.cache.has(key)) {\n return this.cache.get(key);\n }\n if (this.promiseMap.has(key)) {\n return await this.promiseMap.get(key);\n }\n const promise = this.omu.endpoints\n .call(TABLE_ITEM_GET_ENDPOINT, {\n id: this.id,\n keys: [key],\n })\n .then((res) => {\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return this.cache.get(key);\n });\n this.promiseMap.set(key, promise);\n return await promise.then((item) => {\n this.promiseMap.delete(key);\n return item;\n });\n }\n\n public async getMany(...keys: string[]): Promise<Map<string, T>> {\n const filteredKeys = keys\n .filter((key) => !this.cache.has(key))\n .filter((key) => !this.promiseMap.has(key));\n if (filteredKeys.length === 0) {\n return new Map([...this.cache].filter(([key]) => keys.includes(key)));\n }\n const promise = this.omu.endpoints\n .call(TABLE_ITEM_GET_ENDPOINT, {\n id: this.id,\n keys: filteredKeys,\n })\n .then((res) => {\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n });\n for (const key of filteredKeys) {\n this.promiseMap.set(\n key,\n promise.then((items) => items.get(key)),\n );\n }\n const items = await promise;\n for (const key of filteredKeys) {\n this.promiseMap.delete(key);\n }\n return new Map([...this.cache, ...items].filter(([key]) => keys.includes(key)));\n }\n\n public async add(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n this.omu.send(TABLE_ITEM_ADD_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async update(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n this.omu.send(TABLE_ITEM_UPDATE_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async remove(...items: T[]): Promise<void> {\n const data = this.serializeItems(items);\n const keys = Object.keys(data);\n this.cache = new Map([...this.cache].filter(([key]) => !keys.includes(key)));\n this.omu.send(TABLE_ITEM_REMOVE_PACKET, {\n id: this.id,\n items: data,\n });\n }\n\n public async clear(): Promise<void> {\n this.omu.send(TABLE_ITEM_CLEAR_PACKET, {\n id: this.id,\n });\n }\n\n public async has(key: string): Promise<boolean> {\n if (this.cache.has(key)) {\n return true;\n }\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ENDPOINT, {\n id: this.id,\n keys: [key],\n });\n return res[key] ?? false;\n }\n\n public async hasMany<T extends Record<string, unknown>>(...keys: (keyof T)[]): Promise<{ [key in keyof T]: boolean }> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ENDPOINT, {\n id: this.id,\n keys: keys,\n });\n return res as { [key in keyof T]: boolean };\n }\n\n public async hasAll(...keys: string[]): Promise<boolean> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ALL_ENDPOINT, {\n id: this.id,\n keys,\n });\n return res;\n }\n\n public async hasAny(...keys: string[]): Promise<boolean> {\n const res = await this.omu.endpoints.call(TABLE_ITEM_HAS_ANY_ENDPOINT, {\n id: this.id,\n keys,\n });\n return res;\n }\n\n public async fetchItems({\n limit,\n backward,\n cursor,\n }: {\n limit: number;\n backward?: boolean;\n cursor?: string;\n }): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(\n TABLE_FETCH_ENDPOINT,\n new TableFetchPacket(this.id, limit, backward, cursor),\n );\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async fetchRange({\n start,\n end,\n }: {\n start: string;\n end: string;\n }): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(TABLE_FETCH_RANGE_ENDPOINT, {\n id: this.id,\n start,\n end,\n });\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async fetchAll(): Promise<Map<string, T>> {\n const res = await this.omu.endpoints.call(TABLE_FETCH_ALL_ENDPOINT, {\n id: this.id,\n });\n const items = this.deserializeItems(res.items);\n this.updateCache(items);\n return items;\n }\n\n public async *iterate({\n backward,\n cursor,\n }: {\n backward?: boolean;\n cursor?: string;\n }): AsyncIterable<T> {\n while (true) {\n const items = await this.fetchItems({\n limit: this.cacheSize ?? 100,\n backward,\n cursor,\n });\n if (items.size === 0) {\n break;\n }\n yield* items.values();\n if (cursor !== undefined) {\n items.delete(cursor);\n }\n const cursorItem = backward ? items.values().next().value : [...items.values()].pop();\n if (!cursorItem) {\n break;\n }\n cursor = this.keyFunction(cursorItem);\n }\n }\n\n public async size(): Promise<number> {\n return await this.omu.endpoints.call(TABLE_SIZE_ENDPOINT, {\n id: this.id,\n });\n }\n\n private deserializeItems(items: Record<string, Uint8Array>): Map<string, T> {\n return new Map(\n Object.entries(items).map(([key, data]) => {\n const item = this.serializer.deserialize(data);\n this.cache.set(key, item);\n return [key, item];\n }),\n );\n }\n\n private serializeItems(items: T[]): Record<string, Uint8Array> {\n return Object.fromEntries(\n items.map((item) => {\n return [this.keyFunction(item), this.serializer.serialize(item)];\n }),\n );\n }\n\n public setCacheSize(size: number): void {\n this.cacheSize = size;\n }\n\n public setConfig(config: TableConfig): void {\n if (this.omu.running) {\n throw new Error('Cannot set config after client has started');\n }\n this.config = config;\n }\n\n public setPermissions(permissions: TablePermissions): void {\n this.permissions = permissions;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["EventEmitter", "Identifier", "IdentifierMap", "PacketType", "Serializer", "EndpointType", "ExtensionType", "SetConfigPacket", "SetPermissionPacket", "TableFetchPacket", "TableFetchRangePacket", "TableItemsPacket", "TableKeysPacket", "TablePacket", "TableProxyPacket", "TableType", "TABLE_EXTENSION_TYPE", "client", "TableExtension", "TABLE_PERMISSION_ID", "TABLE_SET_PERMISSION_PACKET", "TABLE_SET_CONFIG_PACKET", "TABLE_LISTEN_PACKET", "TABLE_PROXY_LISTEN_PACKET", "TABLE_PROXY_PACKET", "TABLE_ITEM_ADD_PACKET", "TABLE_ITEM_UPDATE_PACKET", "TABLE_ITEM_REMOVE_PACKET", "TABLE_ITEM_GET_ENDPOINT", "TABLE_ITEM_HAS_ENDPOINT", "TABLE_ITEM_HAS_ALL_ENDPOINT", "TABLE_ITEM_HAS_ANY_ENDPOINT", "TABLE_FETCH_ENDPOINT", "TABLE_FETCH_RANGE_ENDPOINT", "TABLE_FETCH_ALL_ENDPOINT", "TABLE_SIZE_ENDPOINT", "TABLE_ITEM_CLEAR_PACKET", "omu", "tableType", "existing", "table", "TableImpl", "name", "options", "type", "identifier", "packet", "items", "proxy", "key", "item", "proxyItem", "_", "cache", "listener", "callback", "cancel", "promise", "res", "keys", "filteredKeys", "data", "limit", "backward", "cursor", "start", "end", "cursorItem", "size", "config", "permissions"]
7
7
  }
package/dist/index.d.ts CHANGED
@@ -11,13 +11,13 @@ import { Identifier } from './identifier';
11
11
  export declare const OmuPermissions: {
12
12
  readonly ASSET_PERMISSION_ID: Identifier;
13
13
  readonly DASHBOARD_APP_INSTALL_PERMISSION_ID: Identifier;
14
- readonly DAShBOARD_DRAG_DROP_PERMISSION_ID: Identifier;
14
+ readonly DASHBOARD_DRAG_DROP_PERMISSION_ID: Identifier;
15
15
  readonly DASHBOARD_OPEN_APP_PERMISSION_ID: Identifier;
16
16
  readonly DASHBOARD_SET_PERMISSION_ID: Identifier;
17
17
  readonly DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID: Identifier;
18
18
  readonly DASHBOARD_WEBVIEW_PERMISSION_ID: Identifier;
19
- readonly DASHOBARD_APP_EDIT_PERMISSION_ID: Identifier;
20
- readonly DASHOBARD_APP_READ_PERMISSION_ID: Identifier;
19
+ readonly DASHBOARD_APP_STARTUP_PERMISSION_ID: Identifier;
20
+ readonly DASHBOARD_APP_CLOSE_PERMISSION_ID: Identifier;
21
21
  readonly HTTP_REQUEST_PERMISSION_ID: Identifier;
22
22
  readonly I18N_GET_LOCALES_PERMISSION_ID: Identifier;
23
23
  readonly I18N_SET_LOCALES_PERMISSION_ID: Identifier;
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{AppIndexRegistry as g}from"./api/server";import{App as k}from"./app.js";import{DisconnectReason as w}from"./errors.js";import{Identifier as b,IdentifierMap as v,IdentifierSet as J}from"./identifier";import*as j from"./network";import{Omu as F}from"./omu.js";import{Serializer as Z}from"./serialize";import{BrowserSession as II}from"./token";import{ASSET_PERMISSION_ID as I}from"./api/asset";import{DASHBOARD_APP_INSTALL_PERMISSION_ID as S,DAShBOARD_DRAG_DROP_PERMISSION_ID as _,DASHBOARD_OPEN_APP_PERMISSION_ID as E,DASHBOARD_SET_PERMISSION_ID as e,DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID as R,DASHBOARD_WEBVIEW_PERMISSION_ID as r,DASHOBARD_APP_EDIT_PERMISSION_ID as D,DASHOBARD_APP_READ_PERMISSION_ID as O}from"./api/dashboard";import{HTTP_REQUEST_PERMISSION_ID as P}from"./api/http";import{I18N_GET_LOCALES_PERMISSION_ID as A,I18N_SET_LOCALES_PERMISSION_ID as i}from"./api/i18n";import{LOGGER_LOG_PERMISSION_ID as N}from"./api/logger";import{PLUGIN_MANAGE_PACKAGE_PERMISSION_ID as o,PLUGIN_READ_PACKAGE_PERMISSION_ID as n}from"./api/plugin";import{REGISTRY_PERMISSION_ID as t}from"./api/registry";import{SERVER_APPS_READ_PERMISSION_ID as d,SERVER_SHUTDOWN_PERMISSION_ID as M,TRUSTED_ORIGINS_GET_PERMISSION_ID as f,TRUSTED_ORIGINS_SET_PERMISSION_ID as T}from"./api/server";import{GENERATE_TOKEN_PERMISSION_ID as a,REMOTE_APP_REQUEST_PERMISSION_ID as p,SESSIONS_READ_PERMISSION_ID as m}from"./api/session";import{TABLE_PERMISSION_ID as y}from"./api/table";const c={ASSET_PERMISSION_ID:I,DASHBOARD_APP_INSTALL_PERMISSION_ID:S,DAShBOARD_DRAG_DROP_PERMISSION_ID:_,DASHBOARD_OPEN_APP_PERMISSION_ID:E,DASHBOARD_SET_PERMISSION_ID:e,DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID:R,DASHBOARD_WEBVIEW_PERMISSION_ID:r,DASHOBARD_APP_EDIT_PERMISSION_ID:D,DASHOBARD_APP_READ_PERMISSION_ID:O,HTTP_REQUEST_PERMISSION_ID:P,I18N_GET_LOCALES_PERMISSION_ID:A,I18N_SET_LOCALES_PERMISSION_ID:i,LOGGER_LOG_PERMISSION_ID:N,PLUGIN_MANAGE_PACKAGE_PERMISSION_ID:o,PLUGIN_READ_PACKAGE_PERMISSION_ID:n,REGISTRY_PERMISSION_ID:t,SERVER_APPS_READ_PERMISSION_ID:d,SERVER_SHUTDOWN_PERMISSION_ID:M,TRUSTED_ORIGINS_GET_PERMISSION_ID:f,TRUSTED_ORIGINS_SET_PERMISSION_ID:T,GENERATE_TOKEN_PERMISSION_ID:a,REMOTE_APP_REQUEST_PERMISSION_ID:p,SESSIONS_READ_PERMISSION_ID:m,TABLE_PERMISSION_ID:y};export{k as App,g as AppIndexRegistry,II as BrowserSession,w as DisconnectReason,b as Identifier,v as IdentifierMap,J as IdentifierSet,F as Omu,c as OmuPermissions,Z as Serializer,j as network};
1
+ import{AppIndexRegistry as k}from"./api/server";import{App as w}from"./app.js";import{DisconnectReason as b}from"./errors.js";import{Identifier as J,IdentifierMap as h,IdentifierSet as j}from"./identifier";import*as q from"./network";import{Omu as X}from"./omu.js";import{Serializer as $}from"./serialize";import{BrowserSession as SI}from"./token";import{ASSET_PERMISSION_ID as I}from"./api/asset";import{DASHBOARD_APP_INSTALL_PERMISSION_ID as S,DASHBOARD_DRAG_DROP_PERMISSION_ID as _,DASHBOARD_OPEN_APP_PERMISSION_ID as E,DASHBOARD_SET_PERMISSION_ID as e,DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID as R,DASHBOARD_WEBVIEW_PERMISSION_ID as r}from"./api/dashboard";import{DASHBOARD_APP_CLOSE_PERMISSION_ID as D,DASHBOARD_APP_STARTUP_PERMISSION_ID as O}from"./api/dashboard/apps";import{HTTP_REQUEST_PERMISSION_ID as P}from"./api/http";import{I18N_GET_LOCALES_PERMISSION_ID as i,I18N_SET_LOCALES_PERMISSION_ID as A}from"./api/i18n";import{LOGGER_LOG_PERMISSION_ID as o}from"./api/logger";import{PLUGIN_MANAGE_PACKAGE_PERMISSION_ID as N,PLUGIN_READ_PACKAGE_PERMISSION_ID as t}from"./api/plugin";import{REGISTRY_PERMISSION_ID as n}from"./api/registry";import{SERVER_APPS_READ_PERMISSION_ID as d,SERVER_SHUTDOWN_PERMISSION_ID as M,TRUSTED_ORIGINS_GET_PERMISSION_ID as f,TRUSTED_ORIGINS_SET_PERMISSION_ID as T}from"./api/server";import{GENERATE_TOKEN_PERMISSION_ID as a,REMOTE_APP_REQUEST_PERMISSION_ID as m,SESSIONS_READ_PERMISSION_ID as p}from"./api/session";import{TABLE_PERMISSION_ID as y}from"./api/table";const Q={ASSET_PERMISSION_ID:I,DASHBOARD_APP_INSTALL_PERMISSION_ID:S,DASHBOARD_DRAG_DROP_PERMISSION_ID:_,DASHBOARD_OPEN_APP_PERMISSION_ID:E,DASHBOARD_SET_PERMISSION_ID:e,DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID:R,DASHBOARD_WEBVIEW_PERMISSION_ID:r,DASHBOARD_APP_STARTUP_PERMISSION_ID:O,DASHBOARD_APP_CLOSE_PERMISSION_ID:D,HTTP_REQUEST_PERMISSION_ID:P,I18N_GET_LOCALES_PERMISSION_ID:i,I18N_SET_LOCALES_PERMISSION_ID:A,LOGGER_LOG_PERMISSION_ID:o,PLUGIN_MANAGE_PACKAGE_PERMISSION_ID:N,PLUGIN_READ_PACKAGE_PERMISSION_ID:t,REGISTRY_PERMISSION_ID:n,SERVER_APPS_READ_PERMISSION_ID:d,SERVER_SHUTDOWN_PERMISSION_ID:M,TRUSTED_ORIGINS_GET_PERMISSION_ID:f,TRUSTED_ORIGINS_SET_PERMISSION_ID:T,GENERATE_TOKEN_PERMISSION_ID:a,REMOTE_APP_REQUEST_PERMISSION_ID:m,SESSIONS_READ_PERMISSION_ID:p,TABLE_PERMISSION_ID:y};export{w as App,k as AppIndexRegistry,SI as BrowserSession,b as DisconnectReason,J as Identifier,h as IdentifierMap,j as IdentifierSet,X as Omu,Q as OmuPermissions,$ as Serializer,q as network};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["export { AppIndexRegistry, type AppIndexRegistryJSON } from './api/server';\nexport { App, type AppMetadata } from './app.js';\nexport { DisconnectReason } from './errors.js';\nexport { Identifier, IdentifierMap, IdentifierSet, type IntoId } from './identifier';\nexport * as network from './network';\nexport { Omu } from './omu.js';\nexport { Serializer } from './serialize';\nexport type { Serializable } from './serialize';\nexport { BrowserSession, type SessionParam, type SessioTokenProvider } from './token';\n\nimport { ASSET_PERMISSION_ID } from './api/asset';\nimport {\n DASHBOARD_APP_INSTALL_PERMISSION_ID,\n DAShBOARD_DRAG_DROP_PERMISSION_ID,\n DASHBOARD_OPEN_APP_PERMISSION_ID,\n DASHBOARD_SET_PERMISSION_ID,\n DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,\n DASHBOARD_WEBVIEW_PERMISSION_ID,\n DASHOBARD_APP_EDIT_PERMISSION_ID,\n DASHOBARD_APP_READ_PERMISSION_ID,\n} from './api/dashboard';\nimport { HTTP_REQUEST_PERMISSION_ID } from './api/http';\nimport { I18N_GET_LOCALES_PERMISSION_ID, I18N_SET_LOCALES_PERMISSION_ID } from './api/i18n';\nimport { LOGGER_LOG_PERMISSION_ID } from './api/logger';\nimport { PLUGIN_MANAGE_PACKAGE_PERMISSION_ID, PLUGIN_READ_PACKAGE_PERMISSION_ID } from './api/plugin';\nimport { REGISTRY_PERMISSION_ID } from './api/registry';\nimport { SERVER_APPS_READ_PERMISSION_ID, SERVER_SHUTDOWN_PERMISSION_ID, TRUSTED_ORIGINS_GET_PERMISSION_ID, TRUSTED_ORIGINS_SET_PERMISSION_ID } from './api/server';\nimport { GENERATE_TOKEN_PERMISSION_ID, REMOTE_APP_REQUEST_PERMISSION_ID, SESSIONS_READ_PERMISSION_ID } from './api/session';\nimport { TABLE_PERMISSION_ID } from './api/table';\nimport { Identifier } from './identifier';\n\nexport const OmuPermissions: {\n // Asset API\n readonly ASSET_PERMISSION_ID: Identifier;\n // Dashboard API\n readonly DASHBOARD_APP_INSTALL_PERMISSION_ID: Identifier; readonly DAShBOARD_DRAG_DROP_PERMISSION_ID: Identifier; readonly DASHBOARD_OPEN_APP_PERMISSION_ID: Identifier; readonly DASHBOARD_SET_PERMISSION_ID: Identifier; readonly DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID: Identifier; readonly DASHBOARD_WEBVIEW_PERMISSION_ID: Identifier; readonly DASHOBARD_APP_EDIT_PERMISSION_ID: Identifier; readonly DASHOBARD_APP_READ_PERMISSION_ID: Identifier;\n // HTTP API\n readonly HTTP_REQUEST_PERMISSION_ID: Identifier;\n // I18n API\n readonly I18N_GET_LOCALES_PERMISSION_ID: Identifier; readonly I18N_SET_LOCALES_PERMISSION_ID: Identifier;\n // Logger API\n readonly LOGGER_LOG_PERMISSION_ID: Identifier;\n // Plugin API\n readonly PLUGIN_MANAGE_PACKAGE_PERMISSION_ID: Identifier; readonly PLUGIN_READ_PACKAGE_PERMISSION_ID: Identifier;\n // Registry API\n readonly REGISTRY_PERMISSION_ID: Identifier;\n // Server API\n readonly SERVER_APPS_READ_PERMISSION_ID: Identifier; readonly SERVER_SHUTDOWN_PERMISSION_ID: Identifier; readonly TRUSTED_ORIGINS_GET_PERMISSION_ID: Identifier; readonly TRUSTED_ORIGINS_SET_PERMISSION_ID: Identifier;\n // Session API\n readonly GENERATE_TOKEN_PERMISSION_ID: Identifier; readonly REMOTE_APP_REQUEST_PERMISSION_ID: Identifier; readonly SESSIONS_READ_PERMISSION_ID: Identifier;\n // Table API\n readonly TABLE_PERMISSION_ID: Identifier;\n} = {\n // Asset API\n ASSET_PERMISSION_ID: ASSET_PERMISSION_ID,\n // Dashboard API\n DASHBOARD_APP_INSTALL_PERMISSION_ID,\n DAShBOARD_DRAG_DROP_PERMISSION_ID,\n DASHBOARD_OPEN_APP_PERMISSION_ID,\n DASHBOARD_SET_PERMISSION_ID,\n DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,\n DASHBOARD_WEBVIEW_PERMISSION_ID,\n DASHOBARD_APP_EDIT_PERMISSION_ID,\n DASHOBARD_APP_READ_PERMISSION_ID,\n // HTTP API\n HTTP_REQUEST_PERMISSION_ID,\n // I18n API\n I18N_GET_LOCALES_PERMISSION_ID,\n I18N_SET_LOCALES_PERMISSION_ID,\n // Logger API\n LOGGER_LOG_PERMISSION_ID,\n // Plugin API\n PLUGIN_MANAGE_PACKAGE_PERMISSION_ID,\n PLUGIN_READ_PACKAGE_PERMISSION_ID,\n // Registry API\n REGISTRY_PERMISSION_ID,\n // Server API\n SERVER_APPS_READ_PERMISSION_ID,\n SERVER_SHUTDOWN_PERMISSION_ID,\n TRUSTED_ORIGINS_GET_PERMISSION_ID,\n TRUSTED_ORIGINS_SET_PERMISSION_ID,\n // Session API\n GENERATE_TOKEN_PERMISSION_ID,\n REMOTE_APP_REQUEST_PERMISSION_ID,\n SESSIONS_READ_PERMISSION_ID,\n // Table API\n TABLE_PERMISSION_ID,\n} as const;\n"],
5
- "mappings": "AAAA,OAAS,oBAAAA,MAAmD,eAC5D,OAAS,OAAAC,MAA6B,WACtC,OAAS,oBAAAC,MAAwB,cACjC,OAAS,cAAAC,EAAY,iBAAAC,EAAe,iBAAAC,MAAkC,eACtE,UAAYC,MAAa,YACzB,OAAS,OAAAC,MAAW,WACpB,OAAS,cAAAC,MAAkB,cAE3B,OAAS,kBAAAC,OAAmE,UAE5E,OAAS,uBAAAC,MAA2B,cACpC,OACI,uCAAAC,EACA,qCAAAC,EACA,oCAAAC,EACA,+BAAAC,EACA,8CAAAC,EACA,mCAAAC,EACA,oCAAAC,EACA,oCAAAC,MACG,kBACP,OAAS,8BAAAC,MAAkC,aAC3C,OAAS,kCAAAC,EAAgC,kCAAAC,MAAsC,aAC/E,OAAS,4BAAAC,MAAgC,eACzC,OAAS,uCAAAC,EAAqC,qCAAAC,MAAyC,eACvF,OAAS,0BAAAC,MAA8B,iBACvC,OAAS,kCAAAC,EAAgC,iCAAAC,EAA+B,qCAAAC,EAAmC,qCAAAC,MAAyC,eACpJ,OAAS,gCAAAC,EAA8B,oCAAAC,EAAkC,+BAAAC,MAAmC,gBAC5G,OAAS,uBAAAC,MAA2B,cAG7B,MAAMC,EAqBT,CAEA,oBAAqBxB,EAErB,oCAAAC,EACA,kCAAAC,EACA,iCAAAC,EACA,4BAAAC,EACA,2CAAAC,EACA,gCAAAC,EACA,iCAAAC,EACA,iCAAAC,EAEA,2BAAAC,EAEA,+BAAAC,EACA,+BAAAC,EAEA,yBAAAC,EAEA,oCAAAC,EACA,kCAAAC,EAEA,uBAAAC,EAEA,+BAAAC,EACA,8BAAAC,EACA,kCAAAC,EACA,kCAAAC,EAEA,6BAAAC,EACA,iCAAAC,EACA,4BAAAC,EAEA,oBAAAC,CACJ",
6
- "names": ["AppIndexRegistry", "App", "DisconnectReason", "Identifier", "IdentifierMap", "IdentifierSet", "network", "Omu", "Serializer", "BrowserSession", "ASSET_PERMISSION_ID", "DASHBOARD_APP_INSTALL_PERMISSION_ID", "DAShBOARD_DRAG_DROP_PERMISSION_ID", "DASHBOARD_OPEN_APP_PERMISSION_ID", "DASHBOARD_SET_PERMISSION_ID", "DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID", "DASHBOARD_WEBVIEW_PERMISSION_ID", "DASHOBARD_APP_EDIT_PERMISSION_ID", "DASHOBARD_APP_READ_PERMISSION_ID", "HTTP_REQUEST_PERMISSION_ID", "I18N_GET_LOCALES_PERMISSION_ID", "I18N_SET_LOCALES_PERMISSION_ID", "LOGGER_LOG_PERMISSION_ID", "PLUGIN_MANAGE_PACKAGE_PERMISSION_ID", "PLUGIN_READ_PACKAGE_PERMISSION_ID", "REGISTRY_PERMISSION_ID", "SERVER_APPS_READ_PERMISSION_ID", "SERVER_SHUTDOWN_PERMISSION_ID", "TRUSTED_ORIGINS_GET_PERMISSION_ID", "TRUSTED_ORIGINS_SET_PERMISSION_ID", "GENERATE_TOKEN_PERMISSION_ID", "REMOTE_APP_REQUEST_PERMISSION_ID", "SESSIONS_READ_PERMISSION_ID", "TABLE_PERMISSION_ID", "OmuPermissions"]
4
+ "sourcesContent": ["export { AppIndexRegistry, type AppIndexRegistryJSON } from './api/server';\nexport { App, type AppMetadata } from './app.js';\nexport { DisconnectReason } from './errors.js';\nexport { Identifier, IdentifierMap, IdentifierSet, type IntoId } from './identifier';\nexport * as network from './network';\nexport { Omu } from './omu.js';\nexport { Serializer } from './serialize';\nexport type { Serializable } from './serialize';\nexport { BrowserSession, type SessionParam, type SessioTokenProvider } from './token';\n\nimport { ASSET_PERMISSION_ID } from './api/asset';\nimport {\n DASHBOARD_APP_INSTALL_PERMISSION_ID,\n DASHBOARD_DRAG_DROP_PERMISSION_ID,\n DASHBOARD_OPEN_APP_PERMISSION_ID,\n DASHBOARD_SET_PERMISSION_ID,\n DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,\n DASHBOARD_WEBVIEW_PERMISSION_ID,\n} from './api/dashboard';\nimport { DASHBOARD_APP_CLOSE_PERMISSION_ID, DASHBOARD_APP_STARTUP_PERMISSION_ID } from './api/dashboard/apps';\nimport { HTTP_REQUEST_PERMISSION_ID } from './api/http';\nimport { I18N_GET_LOCALES_PERMISSION_ID, I18N_SET_LOCALES_PERMISSION_ID } from './api/i18n';\nimport { LOGGER_LOG_PERMISSION_ID } from './api/logger';\nimport { PLUGIN_MANAGE_PACKAGE_PERMISSION_ID, PLUGIN_READ_PACKAGE_PERMISSION_ID } from './api/plugin';\nimport { REGISTRY_PERMISSION_ID } from './api/registry';\nimport { SERVER_APPS_READ_PERMISSION_ID, SERVER_SHUTDOWN_PERMISSION_ID, TRUSTED_ORIGINS_GET_PERMISSION_ID, TRUSTED_ORIGINS_SET_PERMISSION_ID } from './api/server';\nimport { GENERATE_TOKEN_PERMISSION_ID, REMOTE_APP_REQUEST_PERMISSION_ID, SESSIONS_READ_PERMISSION_ID } from './api/session';\nimport { TABLE_PERMISSION_ID } from './api/table';\nimport { Identifier } from './identifier';\n\nexport const OmuPermissions: {\n // Asset API\n readonly ASSET_PERMISSION_ID: Identifier;\n // Dashboard API\n readonly DASHBOARD_APP_INSTALL_PERMISSION_ID: Identifier; readonly DASHBOARD_DRAG_DROP_PERMISSION_ID: Identifier; readonly DASHBOARD_OPEN_APP_PERMISSION_ID: Identifier; readonly DASHBOARD_SET_PERMISSION_ID: Identifier; readonly DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID: Identifier; readonly DASHBOARD_WEBVIEW_PERMISSION_ID: Identifier;\n readonly DASHBOARD_APP_STARTUP_PERMISSION_ID: Identifier;\n readonly DASHBOARD_APP_CLOSE_PERMISSION_ID: Identifier;\n // HTTP API\n readonly HTTP_REQUEST_PERMISSION_ID: Identifier;\n // I18n API\n readonly I18N_GET_LOCALES_PERMISSION_ID: Identifier; readonly I18N_SET_LOCALES_PERMISSION_ID: Identifier;\n // Logger API\n readonly LOGGER_LOG_PERMISSION_ID: Identifier;\n // Plugin API\n readonly PLUGIN_MANAGE_PACKAGE_PERMISSION_ID: Identifier; readonly PLUGIN_READ_PACKAGE_PERMISSION_ID: Identifier;\n // Registry API\n readonly REGISTRY_PERMISSION_ID: Identifier;\n // Server API\n readonly SERVER_APPS_READ_PERMISSION_ID: Identifier; readonly SERVER_SHUTDOWN_PERMISSION_ID: Identifier; readonly TRUSTED_ORIGINS_GET_PERMISSION_ID: Identifier; readonly TRUSTED_ORIGINS_SET_PERMISSION_ID: Identifier;\n // Session API\n readonly GENERATE_TOKEN_PERMISSION_ID: Identifier; readonly REMOTE_APP_REQUEST_PERMISSION_ID: Identifier; readonly SESSIONS_READ_PERMISSION_ID: Identifier;\n // Table API\n readonly TABLE_PERMISSION_ID: Identifier;\n} = {\n // Asset API\n ASSET_PERMISSION_ID,\n // Dashboard API\n DASHBOARD_APP_INSTALL_PERMISSION_ID,\n DASHBOARD_DRAG_DROP_PERMISSION_ID,\n DASHBOARD_OPEN_APP_PERMISSION_ID,\n DASHBOARD_SET_PERMISSION_ID,\n DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID,\n DASHBOARD_WEBVIEW_PERMISSION_ID,\n DASHBOARD_APP_STARTUP_PERMISSION_ID,\n DASHBOARD_APP_CLOSE_PERMISSION_ID,\n // HTTP API\n HTTP_REQUEST_PERMISSION_ID,\n // I18n API\n I18N_GET_LOCALES_PERMISSION_ID,\n I18N_SET_LOCALES_PERMISSION_ID,\n // Logger API\n LOGGER_LOG_PERMISSION_ID,\n // Plugin API\n PLUGIN_MANAGE_PACKAGE_PERMISSION_ID,\n PLUGIN_READ_PACKAGE_PERMISSION_ID,\n // Registry API\n REGISTRY_PERMISSION_ID,\n // Server API\n SERVER_APPS_READ_PERMISSION_ID,\n SERVER_SHUTDOWN_PERMISSION_ID,\n TRUSTED_ORIGINS_GET_PERMISSION_ID,\n TRUSTED_ORIGINS_SET_PERMISSION_ID,\n // Session API\n GENERATE_TOKEN_PERMISSION_ID,\n REMOTE_APP_REQUEST_PERMISSION_ID,\n SESSIONS_READ_PERMISSION_ID,\n // Table API\n TABLE_PERMISSION_ID,\n} as const;\n"],
5
+ "mappings": "AAAA,OAAS,oBAAAA,MAAmD,eAC5D,OAAS,OAAAC,MAA6B,WACtC,OAAS,oBAAAC,MAAwB,cACjC,OAAS,cAAAC,EAAY,iBAAAC,EAAe,iBAAAC,MAAkC,eACtE,UAAYC,MAAa,YACzB,OAAS,OAAAC,MAAW,WACpB,OAAS,cAAAC,MAAkB,cAE3B,OAAS,kBAAAC,OAAmE,UAE5E,OAAS,uBAAAC,MAA2B,cACpC,OACI,uCAAAC,EACA,qCAAAC,EACA,oCAAAC,EACA,+BAAAC,EACA,8CAAAC,EACA,mCAAAC,MACG,kBACP,OAAS,qCAAAC,EAAmC,uCAAAC,MAA2C,uBACvF,OAAS,8BAAAC,MAAkC,aAC3C,OAAS,kCAAAC,EAAgC,kCAAAC,MAAsC,aAC/E,OAAS,4BAAAC,MAAgC,eACzC,OAAS,uCAAAC,EAAqC,qCAAAC,MAAyC,eACvF,OAAS,0BAAAC,MAA8B,iBACvC,OAAS,kCAAAC,EAAgC,iCAAAC,EAA+B,qCAAAC,EAAmC,qCAAAC,MAAyC,eACpJ,OAAS,gCAAAC,EAA8B,oCAAAC,EAAkC,+BAAAC,MAAmC,gBAC5G,OAAS,uBAAAC,MAA2B,cAG7B,MAAMC,EAuBT,CAEA,oBAAAxB,EAEA,oCAAAC,EACA,kCAAAC,EACA,iCAAAC,EACA,4BAAAC,EACA,2CAAAC,EACA,gCAAAC,EACA,oCAAAE,EACA,kCAAAD,EAEA,2BAAAE,EAEA,+BAAAC,EACA,+BAAAC,EAEA,yBAAAC,EAEA,oCAAAC,EACA,kCAAAC,EAEA,uBAAAC,EAEA,+BAAAC,EACA,8BAAAC,EACA,kCAAAC,EACA,kCAAAC,EAEA,6BAAAC,EACA,iCAAAC,EACA,4BAAAC,EAEA,oBAAAC,CACJ",
6
+ "names": ["AppIndexRegistry", "App", "DisconnectReason", "Identifier", "IdentifierMap", "IdentifierSet", "network", "Omu", "Serializer", "BrowserSession", "ASSET_PERMISSION_ID", "DASHBOARD_APP_INSTALL_PERMISSION_ID", "DASHBOARD_DRAG_DROP_PERMISSION_ID", "DASHBOARD_OPEN_APP_PERMISSION_ID", "DASHBOARD_SET_PERMISSION_ID", "DASHBOARD_SPEECH_RECOGNITION_PERMISSION_ID", "DASHBOARD_WEBVIEW_PERMISSION_ID", "DASHBOARD_APP_CLOSE_PERMISSION_ID", "DASHBOARD_APP_STARTUP_PERMISSION_ID", "HTTP_REQUEST_PERMISSION_ID", "I18N_GET_LOCALES_PERMISSION_ID", "I18N_SET_LOCALES_PERMISSION_ID", "LOGGER_LOG_PERMISSION_ID", "PLUGIN_MANAGE_PACKAGE_PERMISSION_ID", "PLUGIN_READ_PACKAGE_PERMISSION_ID", "REGISTRY_PERMISSION_ID", "SERVER_APPS_READ_PERMISSION_ID", "SERVER_SHUTDOWN_PERMISSION_ID", "TRUSTED_ORIGINS_GET_PERMISSION_ID", "TRUSTED_ORIGINS_SET_PERMISSION_ID", "GENERATE_TOKEN_PERMISSION_ID", "REMOTE_APP_REQUEST_PERMISSION_ID", "SESSIONS_READ_PERMISSION_ID", "TABLE_PERMISSION_ID", "OmuPermissions"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{AnotherConnection as l,AppRemoved as m,DisconnectReason as w,InternalError as k,InvalidOrigin as E,InvalidPacket as h,InvalidToken as y,InvalidVersion as v,PermissionDenied as f,ServerRestart as T}from"../errors.js";import{EventEmitter as d}from"../event";import{IdentifierMap as P}from"../identifier";import{VERSION as R}from"../version.js";import{PacketMapper as S}from"./connection.js";import{AES as N,Decryptor as A,ENCRYPTION_AVAILABLE as C,Encryptor as D}from"./encryption.js";import{ConnectPacket as I,DisconnectType as t,PACKET_TYPES as s}from"./packet/packet-types.js";class j{constructor(e,i,n,r,a,c){this.omu=e;this.address=i;this.tokenProvider=n;this.transport=r;this.connection=a;this.aes=c;this.registerPacket(s.SERVER_META,s.CONNECT,s.DISCONNECT,s.TOKEN,s.READY,s.ENCRYPTED_PACKET),this.addPacketHandler(s.DISCONNECT,async o=>{if(o.type===t.SHUTDOWN||o.type===t.CLOSE){this.setStatus({type:"disconnected"});return}const u={[t.ANOTHER_CONNECTION]:l,[t.PERMISSION_DENIED]:f,[t.APP_REMOVED]:m,[t.INVALID_TOKEN]:y,[t.INVALID_ORIGIN]:E,[t.INVALID_VERSION]:v,[t.INTERNAL_ERROR]:k,[t.INVALID_PACKET]:h,[t.INVALID_PACKET_TYPE]:h,[t.INVALID_PACKET_DATA]:h,[t.SERVER_RESTART]:T,[t.CLOSE]:void 0,[t.SHUTDOWN]:void 0}[o.type];u&&(this.reason=new u(o.message??""))}),this.addPacketHandler(s.READY,()=>{if(this.status.type==="ready")throw new Error("Received READY packet when already ready");this.setStatus({type:"ready"}),this.attempt=0})}status={type:"disconnected"};event={connected:new d,disconnected:new d,packet:new d,status:new d};tasks=[];packetMapper=new S;packetHandlers=new P;listenTask=void 0;reason=void 0;attempt=0;setConnection(e){if(this.status.type!=="disconnected")throw new Error("Cannot change connection while connected");this.connection=e}registerPacket(...e){this.packetMapper.register(...e);for(const i of e)this.packetHandlers.set(i.id,{type:i,event:new d})}addPacketHandler(e,i){const n=this.packetHandlers.get(e.id);if(!n)throw new Error(`Packet type ${e.id.key()} not registered`);n.event.listen(i)}async scheduleReconnect(e){const i=Math.min(3e4,2e3*(Math.pow(1.5,e)-1)+2e3),n=new Date;let r=!1;const a={type:"reconnecting",attempt:e,timeout:i,date:n,cancel:()=>{r=!0}};if(await this.setStatus(a),r)return!1;const c=a.timeout-(new Date().getTime()-n.getTime());return await new Promise(o=>setTimeout(o,c)),!0}async connect(e=!0){if(!this.isState("disconnected"))throw new Error(`Cannot connect while ${this.status.type}`);if(this.listenTask)throw new Error("Cannot connect while already connecting");for(this.attempt=0;this.omu.running;){this.attempt++;try{this.aes=void 0,this.connection=await this.transport.connect(),await this.setStatus({type:"connecting"});const n=await this.connection.receive(this.packetMapper);if(!n)throw new Error("Connection closed before receiving server meta");if(!s.SERVER_META.match(n))throw new Error("First packet received was not server meta");const{data:r}=n;this.address.hash=r.hash;let a=await this.tokenProvider.get(this.address,this.omu.app);if(!a)throw new y(`No token available for app ${this.omu.app.id.key()} at ${this.address.host}:${this.address.port}:${this.address.hash}`);let c;if(this.omu.app.type==="remote"&&C&&r.encryption){const o=await A.new(),p=await D.new(r.encryption.rsa);a&&(a=await p.encryptString(a)),this.aes=await N.new(),c={kind:"v1",rsa:await o.toRequest(),aes:await this.aes.serialize(p)}}this.connection.send({type:s.CONNECT,data:new I({app:this.omu.app,protocol:{version:R},encryption:c,token:a})},this.packetMapper),this.listenTask=this.listen(),await this.setStatus({type:"connected"}),await this.event.connected.emit(),this.dispatchTasks().then(()=>{this.send({type:s.READY,data:null})}),await this.listenTask}catch(n){if(n instanceof w&&(this.reason=n),!e)throw n}finally{this.event.disconnected.emit(this.reason),this.status.type!=="disconnected"&&this.status.type!=="reconnecting"&&this.setStatus({type:"disconnected",attempt:this.attempt,reason:this.reason}),this.connection?.close(),this.connection=void 0,this.listenTask=void 0}if(this.reason&&![t.SHUTDOWN,t.SERVER_RESTART].includes(this.reason.type)||(this.reason=void 0,!e)||!await this.scheduleReconnect(this.attempt))break}await this.setStatus({type:"disconnected",reason:this.reason}),this.connection?.close(),this.connection=void 0}isState(e){return this.status.type===e}async send(e){if(!this.connection)throw new Error("No connection established");if(this.aes){const i=this.packetMapper.serialize(e);e=await this.aes.encrypt(i)}this.connection.send(e,this.packetMapper)}async listen(){for(;this.connection;){const e=await this.connection.receive(this.packetMapper);if(!e)break;await this.dispatchPacket(e)}}async dispatchPacket(e){if(s.ENCRYPTED_PACKET.match(e)){if(!this.aes)throw new Error("Received encrypted packet before encryption was established");const n=await this.aes.decrypt(e);e=this.packetMapper.deserialize(n)}await this.event.packet.emit(e);const i=this.packetHandlers.get(e.type.id);i&&await i.event.emit(e.data)}addTask(e){if(this.omu.running)throw new Error("Cannot add task after client is ready");this.tasks.push(e)}removeTask(e){this.tasks.splice(this.tasks.indexOf(e),1)}async dispatchTasks(){for(const e of this.tasks)await e()}async setStatus(e){if(this.status===e)throw new Error(`Cannot set status to ${e} when already ${e}`);this.status=e,await this.event.status.emit(e)}close(){this.setStatus({type:"disconnected"}),this.attempt=0}}export{j as Network};
1
+ import{AnotherConnection as l,AppRemoved as m,DisconnectReason as w,InternalError as k,InvalidOrigin as E,InvalidPacket as h,InvalidToken as y,InvalidVersion as v,PermissionDenied as f,ServerRestart as T}from"../errors.js";import{EventEmitter as d}from"../event";import{IdentifierMap as P}from"../identifier";import{VERSION as R}from"../version.js";import{PacketMapper as S}from"./connection.js";import{AES as N,Decryptor as A,ENCRYPTION_AVAILABLE as C,Encryptor as D}from"./encryption.js";import{ConnectPacket as I,DisconnectType as t,PACKET_TYPES as s}from"./packet/packet-types.js";class j{constructor(e,i,n,r,a,c){this.omu=e;this.address=i;this.tokenProvider=n;this.transport=r;this.connection=a;this.aes=c;this.registerPacket(s.SERVER_META,s.CONNECT,s.DISCONNECT,s.TOKEN,s.READY,s.ENCRYPTED_PACKET),this.addPacketHandler(s.DISCONNECT,async o=>{if(o.type===t.SHUTDOWN||o.type===t.CLOSE){this.setStatus({type:"disconnected"});return}const u={[t.ANOTHER_CONNECTION]:l,[t.PERMISSION_DENIED]:f,[t.APP_REMOVED]:m,[t.INVALID_TOKEN]:y,[t.INVALID_ORIGIN]:E,[t.INVALID_VERSION]:v,[t.INTERNAL_ERROR]:k,[t.INVALID_PACKET]:h,[t.INVALID_PACKET_TYPE]:h,[t.INVALID_PACKET_DATA]:h,[t.SERVER_RESTART]:T,[t.CLOSE]:void 0,[t.SHUTDOWN]:void 0}[o.type];u&&(this.reason=new u(o.message??""))}),this.addPacketHandler(s.READY,()=>{if(this.status.type==="ready")throw new Error("Received READY packet when already ready");this.setStatus({type:"ready"}),this.attempt=0})}status={type:"disconnected"};event={connected:new d,disconnected:new d,packet:new d,status:new d};tasks=[];packetMapper=new S;packetHandlers=new P;listenTask=void 0;reason=void 0;attempt=0;setConnection(e){if(this.status.type!=="disconnected")throw new Error("Cannot change connection while connected");this.connection=e}registerPacket(...e){this.packetMapper.register(...e);for(const i of e)this.packetHandlers.set(i.id,{type:i,event:new d})}addPacketHandler(e,i){const n=this.packetHandlers.get(e.id);if(!n)throw new Error(`Packet type ${e.id.key()} not registered`);n.event.listen(i)}async scheduleReconnect(e){const i=Math.min(3e4,2e3*(Math.pow(1.5,e)-1)+2e3),n=new Date;let r=!1;const a={type:"reconnecting",attempt:e,timeout:i,date:n,cancel:()=>{r=!0}};if(await this.setStatus(a),r)return!1;const c=a.timeout-(new Date().getTime()-n.getTime());return await new Promise(o=>setTimeout(o,c)),!0}async connect(e=!0){if(!this.isState("disconnected"))throw new Error(`Cannot connect while ${this.status.type}`);if(this.listenTask)throw new Error("Cannot connect while already connecting");for(this.attempt=0;this.omu.running;){this.attempt++;try{this.aes=void 0,this.connection=await this.transport.connect(),await this.setStatus({type:"connecting"});const n=await this.connection.receive(this.packetMapper);if(!n)throw new Error("Connection closed before receiving server meta");if(!s.SERVER_META.match(n))throw new Error("First packet received was not server meta");const{data:r}=n;this.address.hash=r.hash;let a=await this.tokenProvider.get(this.address,this.omu.app);if(!a)throw new y(`No token available for app ${this.omu.app.id.key()} at ${this.address.host}:${this.address.port}:${this.address.hash}`);let c;if(this.omu.app.type==="remote"&&C&&r.encryption){const o=await A.new(),p=await D.new(r.encryption.rsa);a&&(a=await p.encryptString(a)),this.aes=await N.new(),c={kind:"v1",rsa:await o.toRequest(),aes:await this.aes.serialize(p)}}this.connection.send({type:s.CONNECT,data:new I({app:this.omu.app,protocol:{version:R},encryption:c,token:a})},this.packetMapper),this.listenTask=this.listen(),await this.setStatus({type:"connected"}),await this.event.connected.emit(),this.dispatchTasks().then(()=>{this.send({type:s.READY,data:null})}),await this.listenTask}catch(n){if(n instanceof w&&(this.reason=n),!e)throw n}finally{this.event.disconnected.emit(this.reason),this.status.type!=="disconnected"&&this.status.type!=="reconnecting"&&this.setStatus({type:"disconnected",attempt:this.attempt,reason:this.reason}),this.connection?.close(),this.connection=void 0,this.listenTask=void 0}if(this.reason&&![t.SHUTDOWN,t.SERVER_RESTART].includes(this.reason.type)||(this.reason=void 0,!e)||!await this.scheduleReconnect(this.attempt))break}await this.setStatus({type:"disconnected",reason:this.reason}),this.connection?.close(),this.connection=void 0}isState(e){return this.status.type===e}async send(e){if(!this.connection)throw new Error("No connection established");if(this.aes){const i=this.packetMapper.serialize(e);e=await this.aes.encrypt(i)}this.connection.send(e,this.packetMapper)}async listen(){for(;this.connection;){const e=await this.connection.receive(this.packetMapper);if(!e)break;await this.dispatchPacket(e)}}async dispatchPacket(e){if(s.ENCRYPTED_PACKET.match(e)){if(!this.aes)throw new Error("Received encrypted packet before encryption was established");const n=await this.aes.decrypt(e);e=this.packetMapper.deserialize(n)}await this.event.packet.emit(e);const i=this.packetHandlers.get(e.type.id);i&&await i.event.emit(e.data)}addTask(e){this.tasks.push(e)}removeTask(e){this.tasks.splice(this.tasks.indexOf(e),1)}async dispatchTasks(){for(const e of this.tasks)await e()}async setStatus(e){if(this.status===e)throw new Error(`Cannot set status to ${e} when already ${e}`);this.status=e,await this.event.status.emit(e)}close(){this.setStatus({type:"disconnected"}),this.attempt=0}}export{j as Network};
2
2
  //# sourceMappingURL=network.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/network/network.ts"],
4
- "sourcesContent": ["import type { Address } from '../address.js';\nimport {\n AnotherConnection, AppRemoved, DisconnectReason, InternalError,\n InvalidOrigin,\n InvalidPacket,\n InvalidToken,\n InvalidVersion,\n PermissionDenied,\n ServerRestart,\n} from '../errors.js';\nimport { EventEmitter } from '../event';\nimport { IdentifierMap } from '../identifier';\nimport { Omu } from '../omu.js';\nimport type { SessioTokenProvider } from '../token.js';\nimport { VERSION } from '../version.js';\n\nimport type { Connection, Transport } from './connection.js';\nimport { PacketMapper } from './connection.js';\nimport { AES, Decryptor, ENCRYPTION_AVAILABLE, EncryptionResponse, Encryptor } from './encryption.js';\nimport { ConnectPacket, DisconnectType, PACKET_TYPES } from './packet/packet-types.js';\nimport type { Packet, PacketType } from './packet/packet.js';\n\ntype PacketHandler<T> = {\n readonly type: PacketType<T>;\n event: EventEmitter<[T]>;\n};\n\ntype StatusType<T> = {\n type: T;\n};\n\nexport type NetworkStatus = StatusType<'connecting'> | StatusType<'connected'> | StatusType<'ready'> | {\n type: 'disconnected';\n attempt?: number;\n reason?: DisconnectReason;\n} | {\n type: 'reconnecting';\n attempt: number;\n timeout: number;\n date: Date;\n cancel: () => void;\n};\n\nexport class Network {\n public status: NetworkStatus = { type: 'disconnected' };\n public readonly event: { connected: EventEmitter<[]>; disconnected: EventEmitter<[DisconnectReason | undefined]>; packet: EventEmitter<[Packet<unknown>]>; status: EventEmitter<[NetworkStatus]> } = {\n connected: new EventEmitter(),\n disconnected: new EventEmitter(),\n packet: new EventEmitter(),\n status: new EventEmitter(),\n };\n private readonly tasks: Array<() => Promise<void> | void> = [];\n private readonly packetMapper = new PacketMapper();\n private readonly packetHandlers = new IdentifierMap<PacketHandler<unknown>>();\n private listenTask: Promise<void> | undefined = undefined;\n public reason: DisconnectReason | undefined = undefined;\n private attempt = 0;\n\n constructor(\n private readonly omu: Omu,\n public address: Address,\n private readonly tokenProvider: SessioTokenProvider,\n private transport: Transport,\n private connection?: Connection | undefined,\n private aes?: AES | undefined,\n ) {\n this.registerPacket(\n PACKET_TYPES.SERVER_META,\n PACKET_TYPES.CONNECT,\n PACKET_TYPES.DISCONNECT,\n PACKET_TYPES.TOKEN,\n PACKET_TYPES.READY,\n PACKET_TYPES.ENCRYPTED_PACKET,\n );\n this.addPacketHandler(PACKET_TYPES.DISCONNECT, async (reason) => {\n if (reason.type === DisconnectType.SHUTDOWN\n || reason.type === DisconnectType.CLOSE) {\n this.setStatus({ type: 'disconnected' });\n return;\n }\n const ERROR_MAP = {\n [DisconnectType.ANOTHER_CONNECTION]: AnotherConnection,\n [DisconnectType.PERMISSION_DENIED]: PermissionDenied,\n [DisconnectType.APP_REMOVED]: AppRemoved,\n [DisconnectType.INVALID_TOKEN]: InvalidToken,\n [DisconnectType.INVALID_ORIGIN]: InvalidOrigin,\n [DisconnectType.INVALID_VERSION]: InvalidVersion,\n [DisconnectType.INTERNAL_ERROR]: InternalError,\n [DisconnectType.INVALID_PACKET]: InvalidPacket,\n [DisconnectType.INVALID_PACKET_TYPE]: InvalidPacket,\n [DisconnectType.INVALID_PACKET_DATA]: InvalidPacket,\n [DisconnectType.SERVER_RESTART]: ServerRestart,\n [DisconnectType.CLOSE]: undefined,\n [DisconnectType.SHUTDOWN]: undefined,\n };\n const error = ERROR_MAP[reason.type];\n if (error) {\n this.reason = new error(reason.message ?? '');\n }\n });\n this.addPacketHandler(PACKET_TYPES.READY, () => {\n if (this.status.type === 'ready') {\n throw new Error('Received READY packet when already ready');\n }\n this.setStatus({ type: 'ready' });\n this.attempt = 0;\n });\n }\n\n public setConnection(connection: Connection): void {\n if (this.status.type !== 'disconnected') {\n throw new Error('Cannot change connection while connected');\n }\n this.connection = connection;\n }\n\n public registerPacket(...packetTypes: PacketType<unknown>[]): void {\n this.packetMapper.register(...packetTypes);\n for (const type of packetTypes) {\n this.packetHandlers.set(type.id, {\n type,\n event: new EventEmitter(),\n });\n }\n }\n\n public addPacketHandler<T>(type: PacketType<T>, handler: (packet: T) => void): void {\n const listeners = this.packetHandlers.get(type.id) as PacketHandler<unknown> | undefined;\n if (!listeners) {\n throw new Error(`Packet type ${type.id.key()} not registered`);\n }\n listeners.event.listen(handler as (packet: unknown) => void);\n }\n\n private async scheduleReconnect(attempt: number): Promise<boolean> {\n const timeout = Math.min(30000, 2000 * (Math.pow(1.5, attempt) - 1) + 2000);\n const date = new Date();\n let cancelled = false;\n const status: Extract<NetworkStatus, { type: 'reconnecting' }> = {\n type: 'reconnecting',\n attempt,\n timeout,\n date,\n cancel: () => {cancelled = true;},\n };\n await this.setStatus(status);\n if (cancelled) {\n return false;\n }\n const remaining = status.timeout - (new Date().getTime() - date.getTime());\n await new Promise((resolve) => setTimeout(resolve, remaining));\n return true;\n }\n\n public async connect(reconnect = true): Promise<void> {\n if (!this.isState('disconnected')) {\n throw new Error(`Cannot connect while ${this.status.type}`);\n }\n if (this.listenTask) {\n throw new Error('Cannot connect while already connecting');\n }\n\n this.attempt = 0;\n while (this.omu.running) {\n this.attempt++;\n try {\n this.aes = undefined;\n this.connection = await this.transport.connect();\n await this.setStatus({ type: 'connecting' });\n const metaReceived = await this.connection.receive(this.packetMapper);\n if (!metaReceived) {\n throw new Error('Connection closed before receiving server meta');\n }\n if (!PACKET_TYPES.SERVER_META.match(metaReceived)) {\n throw new Error('First packet received was not server meta');\n }\n const { data: meta } = metaReceived;\n this.address.hash = meta.hash;\n let token = await this.tokenProvider.get(this.address, this.omu.app);\n if (!token) {\n throw new InvalidToken(`No token available for app ${this.omu.app.id.key()} at ${this.address.host}:${this.address.port}:${this.address.hash}`);\n }\n let encryptionResp: EncryptionResponse | undefined = undefined;\n if (this.omu.app.type === 'remote' && ENCRYPTION_AVAILABLE && meta.encryption) {\n const decryptor = await Decryptor.new();\n const encryptor = await Encryptor.new(meta.encryption.rsa);\n if (token) {\n token = await encryptor.encryptString(token);\n }\n this.aes = await AES.new();\n encryptionResp = {\n kind: 'v1',\n rsa: await decryptor.toRequest(),\n aes: await this.aes.serialize(encryptor),\n };\n }\n this.connection.send({\n type: PACKET_TYPES.CONNECT,\n data: new ConnectPacket({\n app: this.omu.app,\n protocol: { version: VERSION },\n encryption: encryptionResp,\n token,\n }),\n }, this.packetMapper);\n this.listenTask = this.listen();\n await this.setStatus({ type: 'connected' });\n await this.event.connected.emit();\n this.dispatchTasks().then(() => {\n this.send({\n type: PACKET_TYPES.READY,\n data: null,\n });\n });\n await this.listenTask;\n } catch (error) {\n if (error instanceof DisconnectReason) {\n this.reason = error;\n }\n if (!reconnect) {\n throw error;\n }\n } finally {\n this.event.disconnected.emit(this.reason);\n if (this.status.type !== 'disconnected' && this.status.type !== 'reconnecting') {\n this.setStatus({ type: 'disconnected', attempt: this.attempt, reason: this.reason });\n }\n this.connection?.close();\n this.connection = undefined;\n this.listenTask = undefined;\n }\n if (this.reason && ![\n DisconnectType.SHUTDOWN,\n DisconnectType.SERVER_RESTART,\n ].includes(this.reason.type)) {\n break;\n }\n this.reason = undefined;\n if (!reconnect) {\n break;\n }\n const shouldReconnect = await this.scheduleReconnect(this.attempt);\n if (!shouldReconnect) {\n break;\n }\n }\n await this.setStatus({ type: 'disconnected', reason: this.reason });\n this.connection?.close();\n this.connection = undefined;\n }\n\n private isState(state: NetworkStatus['type']): boolean {\n return this.status.type === state;\n }\n\n public async send(packet: Packet): Promise<void> {\n if (!this.connection) {\n throw new Error('No connection established');\n }\n if (this.aes) {\n const serialized = this.packetMapper.serialize(packet);\n packet = await this.aes.encrypt(serialized);\n }\n this.connection.send(packet, this.packetMapper);\n }\n\n private async listen(): Promise<void> {\n while (this.connection) {\n const packet = await this.connection.receive(this.packetMapper);\n if (!packet) {\n break;\n }\n await this.dispatchPacket(packet);\n }\n }\n\n private async dispatchPacket(packet: Packet): Promise<void> {\n if (PACKET_TYPES.ENCRYPTED_PACKET.match(packet)) {\n if (!this.aes) {\n throw new Error('Received encrypted packet before encryption was established');\n }\n const decrypted = await this.aes.decrypt(packet);\n packet = this.packetMapper.deserialize(decrypted);\n }\n await this.event.packet.emit(packet);\n const packetHandler = this.packetHandlers.get(packet.type.id);\n if (!packetHandler) {\n return;\n }\n await packetHandler.event.emit(packet.data);\n }\n\n public addTask(task: () => Promise<void> | void): void {\n if (this.omu.running) {\n throw new Error('Cannot add task after client is ready');\n }\n this.tasks.push(task);\n }\n\n public removeTask(task: () => Promise<void> | void): void {\n this.tasks.splice(this.tasks.indexOf(task), 1);\n }\n\n private async dispatchTasks(): Promise<void> {\n for (const task of this.tasks) {\n await task();\n }\n }\n\n private async setStatus(status: NetworkStatus): Promise<void> {\n if (this.status === status) {\n throw new Error(`Cannot set status to ${status} when already ${status}`);\n }\n this.status = status;\n await this.event.status.emit(status);\n }\n\n public close(): void {\n this.setStatus({ type: 'disconnected' });\n this.attempt = 0;\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { Address } from '../address.js';\nimport {\n AnotherConnection, AppRemoved, DisconnectReason, InternalError,\n InvalidOrigin,\n InvalidPacket,\n InvalidToken,\n InvalidVersion,\n PermissionDenied,\n ServerRestart,\n} from '../errors.js';\nimport { EventEmitter } from '../event';\nimport { IdentifierMap } from '../identifier';\nimport { Omu } from '../omu.js';\nimport type { SessioTokenProvider } from '../token.js';\nimport { VERSION } from '../version.js';\n\nimport type { Connection, Transport } from './connection.js';\nimport { PacketMapper } from './connection.js';\nimport { AES, Decryptor, ENCRYPTION_AVAILABLE, EncryptionResponse, Encryptor } from './encryption.js';\nimport { ConnectPacket, DisconnectType, PACKET_TYPES } from './packet/packet-types.js';\nimport type { Packet, PacketType } from './packet/packet.js';\n\ntype PacketHandler<T> = {\n readonly type: PacketType<T>;\n event: EventEmitter<[T]>;\n};\n\ntype StatusType<T> = {\n type: T;\n};\n\nexport type NetworkStatus = StatusType<'connecting'> | StatusType<'connected'> | StatusType<'ready'> | {\n type: 'disconnected';\n attempt?: number;\n reason?: DisconnectReason;\n} | {\n type: 'reconnecting';\n attempt: number;\n timeout: number;\n date: Date;\n cancel: () => void;\n};\n\nexport class Network {\n public status: NetworkStatus = { type: 'disconnected' };\n public readonly event: { connected: EventEmitter<[]>; disconnected: EventEmitter<[DisconnectReason | undefined]>; packet: EventEmitter<[Packet<unknown>]>; status: EventEmitter<[NetworkStatus]> } = {\n connected: new EventEmitter(),\n disconnected: new EventEmitter(),\n packet: new EventEmitter(),\n status: new EventEmitter(),\n };\n private readonly tasks: Array<() => Promise<void> | void> = [];\n private readonly packetMapper = new PacketMapper();\n private readonly packetHandlers = new IdentifierMap<PacketHandler<unknown>>();\n private listenTask: Promise<void> | undefined = undefined;\n public reason: DisconnectReason | undefined = undefined;\n private attempt = 0;\n\n constructor(\n private readonly omu: Omu,\n public address: Address,\n private readonly tokenProvider: SessioTokenProvider,\n private transport: Transport,\n private connection?: Connection | undefined,\n private aes?: AES | undefined,\n ) {\n this.registerPacket(\n PACKET_TYPES.SERVER_META,\n PACKET_TYPES.CONNECT,\n PACKET_TYPES.DISCONNECT,\n PACKET_TYPES.TOKEN,\n PACKET_TYPES.READY,\n PACKET_TYPES.ENCRYPTED_PACKET,\n );\n this.addPacketHandler(PACKET_TYPES.DISCONNECT, async (reason) => {\n if (reason.type === DisconnectType.SHUTDOWN\n || reason.type === DisconnectType.CLOSE) {\n this.setStatus({ type: 'disconnected' });\n return;\n }\n const ERROR_MAP = {\n [DisconnectType.ANOTHER_CONNECTION]: AnotherConnection,\n [DisconnectType.PERMISSION_DENIED]: PermissionDenied,\n [DisconnectType.APP_REMOVED]: AppRemoved,\n [DisconnectType.INVALID_TOKEN]: InvalidToken,\n [DisconnectType.INVALID_ORIGIN]: InvalidOrigin,\n [DisconnectType.INVALID_VERSION]: InvalidVersion,\n [DisconnectType.INTERNAL_ERROR]: InternalError,\n [DisconnectType.INVALID_PACKET]: InvalidPacket,\n [DisconnectType.INVALID_PACKET_TYPE]: InvalidPacket,\n [DisconnectType.INVALID_PACKET_DATA]: InvalidPacket,\n [DisconnectType.SERVER_RESTART]: ServerRestart,\n [DisconnectType.CLOSE]: undefined,\n [DisconnectType.SHUTDOWN]: undefined,\n };\n const error = ERROR_MAP[reason.type];\n if (error) {\n this.reason = new error(reason.message ?? '');\n }\n });\n this.addPacketHandler(PACKET_TYPES.READY, () => {\n if (this.status.type === 'ready') {\n throw new Error('Received READY packet when already ready');\n }\n this.setStatus({ type: 'ready' });\n this.attempt = 0;\n });\n }\n\n public setConnection(connection: Connection): void {\n if (this.status.type !== 'disconnected') {\n throw new Error('Cannot change connection while connected');\n }\n this.connection = connection;\n }\n\n public registerPacket(...packetTypes: PacketType<unknown>[]): void {\n this.packetMapper.register(...packetTypes);\n for (const type of packetTypes) {\n this.packetHandlers.set(type.id, {\n type,\n event: new EventEmitter(),\n });\n }\n }\n\n public addPacketHandler<T>(type: PacketType<T>, handler: (packet: T) => void): void {\n const listeners = this.packetHandlers.get(type.id) as PacketHandler<unknown> | undefined;\n if (!listeners) {\n throw new Error(`Packet type ${type.id.key()} not registered`);\n }\n listeners.event.listen(handler as (packet: unknown) => void);\n }\n\n private async scheduleReconnect(attempt: number): Promise<boolean> {\n const timeout = Math.min(30000, 2000 * (Math.pow(1.5, attempt) - 1) + 2000);\n const date = new Date();\n let cancelled = false;\n const status: Extract<NetworkStatus, { type: 'reconnecting' }> = {\n type: 'reconnecting',\n attempt,\n timeout,\n date,\n cancel: () => {cancelled = true;},\n };\n await this.setStatus(status);\n if (cancelled) {\n return false;\n }\n const remaining = status.timeout - (new Date().getTime() - date.getTime());\n await new Promise((resolve) => setTimeout(resolve, remaining));\n return true;\n }\n\n public async connect(reconnect = true): Promise<void> {\n if (!this.isState('disconnected')) {\n throw new Error(`Cannot connect while ${this.status.type}`);\n }\n if (this.listenTask) {\n throw new Error('Cannot connect while already connecting');\n }\n\n this.attempt = 0;\n while (this.omu.running) {\n this.attempt++;\n try {\n this.aes = undefined;\n this.connection = await this.transport.connect();\n await this.setStatus({ type: 'connecting' });\n const metaReceived = await this.connection.receive(this.packetMapper);\n if (!metaReceived) {\n throw new Error('Connection closed before receiving server meta');\n }\n if (!PACKET_TYPES.SERVER_META.match(metaReceived)) {\n throw new Error('First packet received was not server meta');\n }\n const { data: meta } = metaReceived;\n this.address.hash = meta.hash;\n let token = await this.tokenProvider.get(this.address, this.omu.app);\n if (!token) {\n throw new InvalidToken(`No token available for app ${this.omu.app.id.key()} at ${this.address.host}:${this.address.port}:${this.address.hash}`);\n }\n let encryptionResp: EncryptionResponse | undefined = undefined;\n if (this.omu.app.type === 'remote' && ENCRYPTION_AVAILABLE && meta.encryption) {\n const decryptor = await Decryptor.new();\n const encryptor = await Encryptor.new(meta.encryption.rsa);\n if (token) {\n token = await encryptor.encryptString(token);\n }\n this.aes = await AES.new();\n encryptionResp = {\n kind: 'v1',\n rsa: await decryptor.toRequest(),\n aes: await this.aes.serialize(encryptor),\n };\n }\n this.connection.send({\n type: PACKET_TYPES.CONNECT,\n data: new ConnectPacket({\n app: this.omu.app,\n protocol: { version: VERSION },\n encryption: encryptionResp,\n token,\n }),\n }, this.packetMapper);\n this.listenTask = this.listen();\n await this.setStatus({ type: 'connected' });\n await this.event.connected.emit();\n this.dispatchTasks().then(() => {\n this.send({\n type: PACKET_TYPES.READY,\n data: null,\n });\n });\n await this.listenTask;\n } catch (error) {\n if (error instanceof DisconnectReason) {\n this.reason = error;\n }\n if (!reconnect) {\n throw error;\n }\n } finally {\n this.event.disconnected.emit(this.reason);\n if (this.status.type !== 'disconnected' && this.status.type !== 'reconnecting') {\n this.setStatus({ type: 'disconnected', attempt: this.attempt, reason: this.reason });\n }\n this.connection?.close();\n this.connection = undefined;\n this.listenTask = undefined;\n }\n if (this.reason && ![\n DisconnectType.SHUTDOWN,\n DisconnectType.SERVER_RESTART,\n ].includes(this.reason.type)) {\n break;\n }\n this.reason = undefined;\n if (!reconnect) {\n break;\n }\n const shouldReconnect = await this.scheduleReconnect(this.attempt);\n if (!shouldReconnect) {\n break;\n }\n }\n await this.setStatus({ type: 'disconnected', reason: this.reason });\n this.connection?.close();\n this.connection = undefined;\n }\n\n private isState(state: NetworkStatus['type']): boolean {\n return this.status.type === state;\n }\n\n public async send(packet: Packet): Promise<void> {\n if (!this.connection) {\n throw new Error('No connection established');\n }\n if (this.aes) {\n const serialized = this.packetMapper.serialize(packet);\n packet = await this.aes.encrypt(serialized);\n }\n this.connection.send(packet, this.packetMapper);\n }\n\n private async listen(): Promise<void> {\n while (this.connection) {\n const packet = await this.connection.receive(this.packetMapper);\n if (!packet) {\n break;\n }\n await this.dispatchPacket(packet);\n }\n }\n\n private async dispatchPacket(packet: Packet): Promise<void> {\n if (PACKET_TYPES.ENCRYPTED_PACKET.match(packet)) {\n if (!this.aes) {\n throw new Error('Received encrypted packet before encryption was established');\n }\n const decrypted = await this.aes.decrypt(packet);\n packet = this.packetMapper.deserialize(decrypted);\n }\n await this.event.packet.emit(packet);\n const packetHandler = this.packetHandlers.get(packet.type.id);\n if (!packetHandler) {\n return;\n }\n await packetHandler.event.emit(packet.data);\n }\n\n public addTask(task: () => Promise<void> | void): void {\n this.tasks.push(task);\n }\n\n public removeTask(task: () => Promise<void> | void): void {\n this.tasks.splice(this.tasks.indexOf(task), 1);\n }\n\n private async dispatchTasks(): Promise<void> {\n for (const task of this.tasks) {\n await task();\n }\n }\n\n private async setStatus(status: NetworkStatus): Promise<void> {\n if (this.status === status) {\n throw new Error(`Cannot set status to ${status} when already ${status}`);\n }\n this.status = status;\n await this.event.status.emit(status);\n }\n\n public close(): void {\n this.setStatus({ type: 'disconnected' });\n this.attempt = 0;\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["AnotherConnection", "AppRemoved", "DisconnectReason", "InternalError", "InvalidOrigin", "InvalidPacket", "InvalidToken", "InvalidVersion", "PermissionDenied", "ServerRestart", "EventEmitter", "IdentifierMap", "VERSION", "PacketMapper", "AES", "Decryptor", "ENCRYPTION_AVAILABLE", "Encryptor", "ConnectPacket", "DisconnectType", "PACKET_TYPES", "Network", "omu", "address", "tokenProvider", "transport", "connection", "aes", "reason", "error", "packetTypes", "type", "handler", "listeners", "attempt", "timeout", "date", "cancelled", "status", "remaining", "resolve", "reconnect", "metaReceived", "meta", "token", "encryptionResp", "decryptor", "encryptor", "state", "packet", "serialized", "decrypted", "packetHandler", "task"]
7
7
  }
@@ -39,7 +39,7 @@ export declare class ByteWriter {
39
39
  writeString(value: string): ByteWriter;
40
40
  writeJSON(value: JsonType): ByteWriter;
41
41
  writeFlags(flags: Flags): ByteWriter;
42
- finish(): Uint8Array;
42
+ finish(): Uint8Array<ArrayBuffer>;
43
43
  toUint8Array(): Uint8Array;
44
44
  toArrayBuffer(): ArrayBuffer;
45
45
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/serialize/bytebuffer.ts"],
4
- "sourcesContent": ["import { textDecoder, textEncoder } from '../const.js';\nimport { JsonType } from './serializer.js';\n\nexport class Flags {\n private value: number;\n private length: number;\n\n constructor(options: { value?: number; length?: number }) {\n this.value = options.value ?? 0;\n this.length = options.length ?? 32;\n }\n\n public has(position: number): boolean {\n return (this.value & (1 << position)) !== 0;\n }\n\n public get(position: number): boolean {\n return (this.value & (1 << position)) !== 0;\n }\n\n public ifSet<T>(position: number, callback: () => T): T | undefined {\n if (this.has(position)) {\n return callback();\n }\n return undefined;\n }\n\n public set(position: number, value: boolean): void {\n if (value) {\n this.value |= 1 << position;\n } else {\n this.value &= ~(1 << position);\n }\n }\n\n public write(writer: ByteWriter): void {\n const bits = new Uint8Array((this.length + 7) / 8);\n for (let i = 0; i < bits.length; i++) {\n bits[i] = (this.value >> (i * 8)) & 0xff;\n }\n writer.write(bits);\n }\n\n public static read(reader: ByteReader, length: number): Flags {\n let value = 0;\n for (let i = 0; i < (length + 7) / 8; i++) {\n value |= reader.readUint8() << (i * 8);\n }\n return new Flags({ value, length });\n }\n}\n\nfunction readFloat16(dataView: DataView, offset: number): number {\n const sign = (dataView.getUint16(offset) & 0x8000) ? -1 : 1;\n const exponent = (dataView.getUint16(offset) & 0x7c00) >> 10;\n const mantissa = (dataView.getUint16(offset) & 0x03ff);\n if (exponent === 0 && mantissa === 0) {\n return 0;\n } else if (exponent === 0x1f) {\n return mantissa === 0 ? Infinity * sign : NaN;\n } else {\n const normalizedExponent = exponent - 15;\n const normalizedMantissa = mantissa / 1024;\n return sign * Math.pow(2, normalizedExponent) * (1 + normalizedMantissa);\n }\n}\n\nfunction writeFloat16(dataView: DataView, offset: number, value: number): void {\n if (value === 0) {\n dataView.setUint16(offset, 0);\n return;\n }\n const sign = value < 0 ? 1 : 0;\n value = Math.abs(value);\n if (!isFinite(value)) {\n dataView.setUint16(offset, 0x7c00 | (sign << 15));\n return;\n }\n const exponent = Math.floor(Math.log2(value));\n const mantissa = value / Math.pow(2, exponent) - 1;\n const normalizedExponent = exponent + 15;\n const normalizedMantissa = Math.round(mantissa * 1024);\n if (normalizedExponent <= 0) {\n dataView.setUint16(offset, sign << 15);\n } else if (normalizedExponent >= 0x1f) {\n dataView.setUint16(offset, 0x7c00 | (sign << 15));\n } else {\n dataView.setUint16(offset, (sign << 15) | (normalizedExponent << 10) | normalizedMantissa);\n }\n}\n\nexport class ByteWriter {\n private dataView: DataView;\n private buffer: ArrayBuffer;\n private offset = 0;\n private finished = false;\n\n constructor(init?: ArrayBuffer, offset?: number) {\n this.offset = offset ?? 0;\n this.buffer = init ?? new ArrayBuffer(1024);\n this.dataView = new DataView(this.buffer);\n }\n\n public static fromUint8Array(buffer: Uint8Array): ByteWriter {\n const arrayBuffer = new ArrayBuffer(buffer.byteLength);\n const uint8Array = new Uint8Array(arrayBuffer);\n uint8Array.set(new Uint8Array(buffer));\n return new ByteWriter(arrayBuffer, buffer.byteLength);\n }\n\n private allocate(length: number): void {\n if (this.offset + length > this.buffer.byteLength) {\n const newByteLength = Math.max(this.buffer.byteLength * 2, this.offset + length);\n const newBuffer = new ArrayBuffer(newByteLength);\n new Uint8Array(newBuffer).set(new Uint8Array(this.buffer));\n this.buffer = newBuffer;\n this.dataView = new DataView(this.buffer);\n }\n }\n\n public write(data: Uint8Array): ByteWriter {\n if (this.finished) {\n throw new Error('Buffer already finished');\n }\n this.allocate(data.length);\n new Uint8Array(this.buffer).set(data, this.offset);\n this.offset += data.length;\n return this;\n }\n\n public writeBoolean(value: boolean): ByteWriter {\n this.allocate(1);\n this.dataView.setInt8(this.offset, value ? 1 : 0);\n this.offset += 1;\n return this;\n }\n\n public writeInt8(value: number): ByteWriter {\n this.allocate(1);\n this.dataView.setInt8(this.offset, value);\n this.offset += 1;\n return this;\n }\n\n public writeUint8(value: number): ByteWriter {\n this.allocate(1);\n this.dataView.setUint8(this.offset, value);\n this.offset += 1;\n return this;\n }\n\n public writeInt16(value: number): ByteWriter {\n this.allocate(2);\n this.dataView.setInt16(this.offset, value);\n this.offset += 2;\n return this;\n }\n\n public writeUint16(value: number): ByteWriter {\n this.allocate(2);\n this.dataView.setUint16(this.offset, value);\n this.offset += 2;\n return this;\n }\n\n public writeInt32(value: number): ByteWriter {\n this.allocate(4);\n this.dataView.setInt32(this.offset, value);\n this.offset += 4;\n return this;\n }\n\n public writeUint32(value: number): ByteWriter {\n this.allocate(4);\n this.dataView.setUint32(this.offset, value);\n this.offset += 4;\n return this;\n }\n\n public writeInt64(value: bigint): ByteWriter {\n this.allocate(8);\n this.dataView.setBigInt64(this.offset, value);\n this.offset += 8;\n return this;\n }\n\n public writeUint64(value: bigint): ByteWriter {\n this.allocate(8);\n this.dataView.setBigUint64(this.offset, value);\n this.offset += 8;\n return this;\n }\n\n public writeULEB128(value: number): ByteWriter {\n // Unsigned LEB128\n if (value < 0) {\n throw new Error('Value must be non-negative');\n }\n while (value > 0x7f) {\n this.allocate(1);\n this.dataView.setUint8(this.offset, (value & 0x7f) | 0x80);\n this.offset += 1;\n value >>= 7;\n }\n this.allocate(1);\n this.dataView.setUint8(this.offset, value & 0x7f);\n this.offset += 1;\n return this;\n }\n\n public writeFloat16(value: number): ByteWriter {\n this.allocate(2);\n writeFloat16(this.dataView, this.offset, value);\n this.offset += 2;\n return this;\n }\n\n public writeFloat32(value: number): ByteWriter {\n this.allocate(4);\n this.dataView.setFloat32(this.offset, value);\n this.offset += 4;\n return this;\n }\n\n public writeFloat64(value: number): ByteWriter {\n this.allocate(4);\n this.dataView.setFloat64(this.offset, value);\n this.offset += 4;\n return this;\n }\n\n public writeUint8Array(value: Uint8Array): ByteWriter {\n this.writeULEB128(value.byteLength);\n this.write(value);\n return this;\n }\n\n public writeString(value: string): ByteWriter {\n this.writeUint8Array(textEncoder.encode(value));\n return this;\n }\n\n public writeJSON(value: JsonType): ByteWriter {\n this.writeString(JSON.stringify(value));\n return this;\n }\n\n public writeFlags(flags: Flags): ByteWriter {\n flags.write(this);\n return this;\n }\n\n public finish(): Uint8Array {\n if (this.finished) {\n throw new Error('Buffer already finished');\n }\n this.finished = true;\n return new Uint8Array(this.buffer, 0, this.offset);\n }\n\n public toUint8Array(): Uint8Array {\n return new Uint8Array(this.buffer, 0, this.offset);\n }\n\n public toArrayBuffer(): ArrayBuffer {\n return this.buffer.slice(0, this.offset);\n }\n}\n\nexport class ByteReader {\n private dataView: DataView;\n private offset: number;\n private finished: boolean;\n\n private constructor(data: DataView) {\n this.dataView = data;\n this.offset = 0;\n this.finished = false;\n }\n\n public static fromUint8Array(buffer: Uint8Array): ByteReader {\n const arrayBuffer = new ArrayBuffer(buffer.byteLength);\n const uint8Array = new Uint8Array(arrayBuffer);\n uint8Array.set(new Uint8Array(buffer));\n const dataView = new DataView(arrayBuffer);\n return new ByteReader(dataView);\n }\n\n public static fromArrayBuffer(buffer: ArrayBuffer): ByteReader {\n const dataView = new DataView(buffer);\n return new ByteReader(dataView);\n }\n\n public static async fromBlob(blob: Blob): Promise<ByteReader> {\n const arrayBuffer = await blob.arrayBuffer();\n const dataView = new DataView(arrayBuffer);\n return new ByteReader(dataView);\n }\n\n public read(size: number): Uint8Array {\n if (this.finished) {\n throw new Error('Buffer already finished');\n }\n if (size < 0) {\n throw new Error('Size must be positive');\n }\n if (this.offset + size > this.dataView.byteLength) {\n throw new Error('Buffer not fully read');\n }\n const value = new Uint8Array(this.dataView.buffer.slice(this.offset, this.offset + size));\n this.offset += size;\n return value;\n }\n\n public readBoolean(): boolean {\n const value = this.dataView.getInt8(this.offset);\n this.offset += 1;\n return value !== 0;\n }\n\n public readInt8(): number {\n const value = this.dataView.getInt8(this.offset);\n this.offset += 1;\n return value;\n }\n\n public readUint8(): number {\n const value = this.dataView.getUint8(this.offset);\n this.offset += 1;\n return value;\n }\n\n public readInt16(): number {\n const value = this.dataView.getInt16(this.offset);\n this.offset += 2;\n return value;\n }\n\n public readUint16(): number {\n const value = this.dataView.getUint16(this.offset);\n this.offset += 2;\n return value;\n }\n\n public readInt32(): number {\n const value = this.dataView.getInt32(this.offset);\n this.offset += 4;\n return value;\n }\n\n public readUint32(): number {\n const value = this.dataView.getUint32(this.offset);\n this.offset += 4;\n return value;\n }\n\n public readInt64(): bigint {\n const value = this.dataView.getBigInt64(this.offset);\n this.offset += 8;\n return value;\n }\n\n public readUint64(): bigint {\n const value = this.dataView.getBigUint64(this.offset);\n this.offset += 8;\n return value;\n }\n\n public readULEB128(): number {\n // Unsigned LEB128\n let value = 0;\n let shift = 0;\n let byte: number;\n do {\n if (this.offset >= this.dataView.byteLength) {\n throw new Error('Buffer not fully read');\n }\n byte = this.dataView.getUint8(this.offset);\n this.offset += 1;\n value |= (byte & 0b01111111) << shift;\n shift += 7;\n }\n while ((byte & 0b10000000) !== 0);\n return value;\n }\n\n public readFloat16(): number {\n const value = readFloat16(this.dataView, this.offset);\n this.offset += 2;\n return value;\n }\n\n public readFloat32(): number {\n const value = this.dataView.getFloat32(this.offset);\n this.offset += 4;\n return value;\n }\n\n public readFloat64(): number {\n const value = this.dataView.getFloat64(this.offset);\n this.offset += 8;\n return value;\n }\n\n public readUint8Array(): Uint8Array {\n const length = this.readULEB128();\n return this.read(length);\n }\n\n public readString(): string {\n const byteArray = this.readUint8Array();\n return textDecoder.decode(byteArray);\n }\n\n public readJSON<T extends JsonType>(): T {\n return JSON.parse(this.readString());\n }\n\n public readFlags(length: number): Flags {\n return Flags.read(this, length);\n }\n\n public finish(): void {\n if (this.finished) {\n throw new Error('Buffer already finished');\n }\n this.finished = true;\n if (this.offset !== this.dataView.byteLength) {\n throw new Error('Buffer not fully read');\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { textDecoder, textEncoder } from '../const.js';\nimport { JsonType } from './serializer.js';\n\nexport class Flags {\n private value: number;\n private length: number;\n\n constructor(options: { value?: number; length?: number }) {\n this.value = options.value ?? 0;\n this.length = options.length ?? 32;\n }\n\n public has(position: number): boolean {\n return (this.value & (1 << position)) !== 0;\n }\n\n public get(position: number): boolean {\n return (this.value & (1 << position)) !== 0;\n }\n\n public ifSet<T>(position: number, callback: () => T): T | undefined {\n if (this.has(position)) {\n return callback();\n }\n return undefined;\n }\n\n public set(position: number, value: boolean): void {\n if (value) {\n this.value |= 1 << position;\n } else {\n this.value &= ~(1 << position);\n }\n }\n\n public write(writer: ByteWriter): void {\n const bits = new Uint8Array((this.length + 7) / 8);\n for (let i = 0; i < bits.length; i++) {\n bits[i] = (this.value >> (i * 8)) & 0xff;\n }\n writer.write(bits);\n }\n\n public static read(reader: ByteReader, length: number): Flags {\n let value = 0;\n for (let i = 0; i < (length + 7) / 8; i++) {\n value |= reader.readUint8() << (i * 8);\n }\n return new Flags({ value, length });\n }\n}\n\nfunction readFloat16(dataView: DataView, offset: number): number {\n const sign = (dataView.getUint16(offset) & 0x8000) ? -1 : 1;\n const exponent = (dataView.getUint16(offset) & 0x7c00) >> 10;\n const mantissa = (dataView.getUint16(offset) & 0x03ff);\n if (exponent === 0 && mantissa === 0) {\n return 0;\n } else if (exponent === 0x1f) {\n return mantissa === 0 ? Infinity * sign : NaN;\n } else {\n const normalizedExponent = exponent - 15;\n const normalizedMantissa = mantissa / 1024;\n return sign * Math.pow(2, normalizedExponent) * (1 + normalizedMantissa);\n }\n}\n\nfunction writeFloat16(dataView: DataView, offset: number, value: number): void {\n if (value === 0) {\n dataView.setUint16(offset, 0);\n return;\n }\n const sign = value < 0 ? 1 : 0;\n value = Math.abs(value);\n if (!isFinite(value)) {\n dataView.setUint16(offset, 0x7c00 | (sign << 15));\n return;\n }\n const exponent = Math.floor(Math.log2(value));\n const mantissa = value / Math.pow(2, exponent) - 1;\n const normalizedExponent = exponent + 15;\n const normalizedMantissa = Math.round(mantissa * 1024);\n if (normalizedExponent <= 0) {\n dataView.setUint16(offset, sign << 15);\n } else if (normalizedExponent >= 0x1f) {\n dataView.setUint16(offset, 0x7c00 | (sign << 15));\n } else {\n dataView.setUint16(offset, (sign << 15) | (normalizedExponent << 10) | normalizedMantissa);\n }\n}\n\nexport class ByteWriter {\n private dataView: DataView;\n private buffer: ArrayBuffer;\n private offset = 0;\n private finished = false;\n\n constructor(init?: ArrayBuffer, offset?: number) {\n this.offset = offset ?? 0;\n this.buffer = init ?? new ArrayBuffer(1024);\n this.dataView = new DataView(this.buffer);\n }\n\n public static fromUint8Array(buffer: Uint8Array): ByteWriter {\n const arrayBuffer = new ArrayBuffer(buffer.byteLength);\n const uint8Array = new Uint8Array(arrayBuffer);\n uint8Array.set(new Uint8Array(buffer));\n return new ByteWriter(arrayBuffer, buffer.byteLength);\n }\n\n private allocate(length: number): void {\n if (this.offset + length > this.buffer.byteLength) {\n const newByteLength = Math.max(this.buffer.byteLength * 2, this.offset + length);\n const newBuffer = new ArrayBuffer(newByteLength);\n new Uint8Array(newBuffer).set(new Uint8Array(this.buffer));\n this.buffer = newBuffer;\n this.dataView = new DataView(this.buffer);\n }\n }\n\n public write(data: Uint8Array): ByteWriter {\n if (this.finished) {\n throw new Error('Buffer already finished');\n }\n this.allocate(data.length);\n new Uint8Array(this.buffer).set(data, this.offset);\n this.offset += data.length;\n return this;\n }\n\n public writeBoolean(value: boolean): ByteWriter {\n this.allocate(1);\n this.dataView.setInt8(this.offset, value ? 1 : 0);\n this.offset += 1;\n return this;\n }\n\n public writeInt8(value: number): ByteWriter {\n this.allocate(1);\n this.dataView.setInt8(this.offset, value);\n this.offset += 1;\n return this;\n }\n\n public writeUint8(value: number): ByteWriter {\n this.allocate(1);\n this.dataView.setUint8(this.offset, value);\n this.offset += 1;\n return this;\n }\n\n public writeInt16(value: number): ByteWriter {\n this.allocate(2);\n this.dataView.setInt16(this.offset, value);\n this.offset += 2;\n return this;\n }\n\n public writeUint16(value: number): ByteWriter {\n this.allocate(2);\n this.dataView.setUint16(this.offset, value);\n this.offset += 2;\n return this;\n }\n\n public writeInt32(value: number): ByteWriter {\n this.allocate(4);\n this.dataView.setInt32(this.offset, value);\n this.offset += 4;\n return this;\n }\n\n public writeUint32(value: number): ByteWriter {\n this.allocate(4);\n this.dataView.setUint32(this.offset, value);\n this.offset += 4;\n return this;\n }\n\n public writeInt64(value: bigint): ByteWriter {\n this.allocate(8);\n this.dataView.setBigInt64(this.offset, value);\n this.offset += 8;\n return this;\n }\n\n public writeUint64(value: bigint): ByteWriter {\n this.allocate(8);\n this.dataView.setBigUint64(this.offset, value);\n this.offset += 8;\n return this;\n }\n\n public writeULEB128(value: number): ByteWriter {\n // Unsigned LEB128\n if (value < 0) {\n throw new Error('Value must be non-negative');\n }\n while (value > 0x7f) {\n this.allocate(1);\n this.dataView.setUint8(this.offset, (value & 0x7f) | 0x80);\n this.offset += 1;\n value >>= 7;\n }\n this.allocate(1);\n this.dataView.setUint8(this.offset, value & 0x7f);\n this.offset += 1;\n return this;\n }\n\n public writeFloat16(value: number): ByteWriter {\n this.allocate(2);\n writeFloat16(this.dataView, this.offset, value);\n this.offset += 2;\n return this;\n }\n\n public writeFloat32(value: number): ByteWriter {\n this.allocate(4);\n this.dataView.setFloat32(this.offset, value);\n this.offset += 4;\n return this;\n }\n\n public writeFloat64(value: number): ByteWriter {\n this.allocate(4);\n this.dataView.setFloat64(this.offset, value);\n this.offset += 4;\n return this;\n }\n\n public writeUint8Array(value: Uint8Array): ByteWriter {\n this.writeULEB128(value.byteLength);\n this.write(value);\n return this;\n }\n\n public writeString(value: string): ByteWriter {\n this.writeUint8Array(textEncoder.encode(value));\n return this;\n }\n\n public writeJSON(value: JsonType): ByteWriter {\n this.writeString(JSON.stringify(value));\n return this;\n }\n\n public writeFlags(flags: Flags): ByteWriter {\n flags.write(this);\n return this;\n }\n\n public finish(): Uint8Array<ArrayBuffer> {\n if (this.finished) {\n throw new Error('Buffer already finished');\n }\n this.finished = true;\n return new Uint8Array(this.buffer, 0, this.offset);\n }\n\n public toUint8Array(): Uint8Array {\n return new Uint8Array(this.buffer, 0, this.offset);\n }\n\n public toArrayBuffer(): ArrayBuffer {\n return this.buffer.slice(0, this.offset);\n }\n}\n\nexport class ByteReader {\n private dataView: DataView;\n private offset: number;\n private finished: boolean;\n\n private constructor(data: DataView) {\n this.dataView = data;\n this.offset = 0;\n this.finished = false;\n }\n\n public static fromUint8Array(buffer: Uint8Array): ByteReader {\n const arrayBuffer = new ArrayBuffer(buffer.byteLength);\n const uint8Array = new Uint8Array(arrayBuffer);\n uint8Array.set(new Uint8Array(buffer));\n const dataView = new DataView(arrayBuffer);\n return new ByteReader(dataView);\n }\n\n public static fromArrayBuffer(buffer: ArrayBuffer): ByteReader {\n const dataView = new DataView(buffer);\n return new ByteReader(dataView);\n }\n\n public static async fromBlob(blob: Blob): Promise<ByteReader> {\n const arrayBuffer = await blob.arrayBuffer();\n const dataView = new DataView(arrayBuffer);\n return new ByteReader(dataView);\n }\n\n public read(size: number): Uint8Array {\n if (this.finished) {\n throw new Error('Buffer already finished');\n }\n if (size < 0) {\n throw new Error('Size must be positive');\n }\n if (this.offset + size > this.dataView.byteLength) {\n throw new Error('Buffer not fully read');\n }\n const value = new Uint8Array(this.dataView.buffer.slice(this.offset, this.offset + size));\n this.offset += size;\n return value;\n }\n\n public readBoolean(): boolean {\n const value = this.dataView.getInt8(this.offset);\n this.offset += 1;\n return value !== 0;\n }\n\n public readInt8(): number {\n const value = this.dataView.getInt8(this.offset);\n this.offset += 1;\n return value;\n }\n\n public readUint8(): number {\n const value = this.dataView.getUint8(this.offset);\n this.offset += 1;\n return value;\n }\n\n public readInt16(): number {\n const value = this.dataView.getInt16(this.offset);\n this.offset += 2;\n return value;\n }\n\n public readUint16(): number {\n const value = this.dataView.getUint16(this.offset);\n this.offset += 2;\n return value;\n }\n\n public readInt32(): number {\n const value = this.dataView.getInt32(this.offset);\n this.offset += 4;\n return value;\n }\n\n public readUint32(): number {\n const value = this.dataView.getUint32(this.offset);\n this.offset += 4;\n return value;\n }\n\n public readInt64(): bigint {\n const value = this.dataView.getBigInt64(this.offset);\n this.offset += 8;\n return value;\n }\n\n public readUint64(): bigint {\n const value = this.dataView.getBigUint64(this.offset);\n this.offset += 8;\n return value;\n }\n\n public readULEB128(): number {\n // Unsigned LEB128\n let value = 0;\n let shift = 0;\n let byte: number;\n do {\n if (this.offset >= this.dataView.byteLength) {\n throw new Error('Buffer not fully read');\n }\n byte = this.dataView.getUint8(this.offset);\n this.offset += 1;\n value |= (byte & 0b01111111) << shift;\n shift += 7;\n }\n while ((byte & 0b10000000) !== 0);\n return value;\n }\n\n public readFloat16(): number {\n const value = readFloat16(this.dataView, this.offset);\n this.offset += 2;\n return value;\n }\n\n public readFloat32(): number {\n const value = this.dataView.getFloat32(this.offset);\n this.offset += 4;\n return value;\n }\n\n public readFloat64(): number {\n const value = this.dataView.getFloat64(this.offset);\n this.offset += 8;\n return value;\n }\n\n public readUint8Array(): Uint8Array {\n const length = this.readULEB128();\n return this.read(length);\n }\n\n public readString(): string {\n const byteArray = this.readUint8Array();\n return textDecoder.decode(byteArray);\n }\n\n public readJSON<T extends JsonType>(): T {\n return JSON.parse(this.readString());\n }\n\n public readFlags(length: number): Flags {\n return Flags.read(this, length);\n }\n\n public finish(): void {\n if (this.finished) {\n throw new Error('Buffer already finished');\n }\n this.finished = true;\n if (this.offset !== this.dataView.byteLength) {\n throw new Error('Buffer not fully read');\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["textDecoder", "textEncoder", "Flags", "options", "position", "callback", "value", "writer", "bits", "reader", "length", "i", "readFloat16", "dataView", "offset", "sign", "exponent", "mantissa", "normalizedExponent", "normalizedMantissa", "writeFloat16", "ByteWriter", "init", "buffer", "arrayBuffer", "newByteLength", "newBuffer", "data", "flags", "ByteReader", "blob", "size", "shift", "byte", "byteArray"]
7
7
  }
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.9.50";
2
- export declare const VERSION_MINOR = "0.9.0";
1
+ export declare const VERSION = "0.10.1";
2
+ export declare const VERSION_MINOR = "0.10.0";
package/dist/version.js CHANGED
@@ -1,2 +1,2 @@
1
- const o="0.9.50",t="0.9.0";export{o as VERSION,t as VERSION_MINOR};
1
+ const o="0.10.1",t="0.10.0";export{o as VERSION,t as VERSION_MINOR};
2
2
  //# sourceMappingURL=version.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/version.ts"],
4
- "sourcesContent": ["export const VERSION = '0.9.50';\nexport const VERSION_MINOR = '0.9.0';\n"],
4
+ "sourcesContent": ["export const VERSION = '0.10.1';\nexport const VERSION_MINOR = '0.10.0';\n"],
5
5
  "mappings": "AAAO,MAAMA,EAAU,SACVC,EAAgB",
6
6
  "names": ["VERSION", "VERSION_MINOR"]
7
7
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@omujs/omu",
4
- "version": "0.9.50",
4
+ "version": "0.10.1",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "exports": {