@4players/odin-plugin-web 1.0.0-alpha.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 (43) hide show
  1. package/README.md +28 -0
  2. package/backend/lib/audioController.d.ts +102 -0
  3. package/backend/lib/audioController.d.ts.map +1 -0
  4. package/backend/lib/audioController.js +422 -0
  5. package/backend/lib/audioController.js.map +1 -0
  6. package/backend/lib/config.d.ts +11 -0
  7. package/backend/lib/config.d.ts.map +1 -0
  8. package/backend/lib/config.js +11 -0
  9. package/backend/lib/config.js.map +1 -0
  10. package/backend/lib/connectionPool.d.ts +17 -0
  11. package/backend/lib/connectionPool.d.ts.map +1 -0
  12. package/backend/lib/connectionPool.js +111 -0
  13. package/backend/lib/connectionPool.js.map +1 -0
  14. package/backend/lib/index.d.ts +53 -0
  15. package/backend/lib/index.d.ts.map +1 -0
  16. package/backend/lib/index.js +291 -0
  17. package/backend/lib/index.js.map +1 -0
  18. package/backend/lib/mainConnection.d.ts +40 -0
  19. package/backend/lib/mainConnection.d.ts.map +1 -0
  20. package/backend/lib/mainConnection.js +294 -0
  21. package/backend/lib/mainConnection.js.map +1 -0
  22. package/backend/lib/roomConnection.d.ts +37 -0
  23. package/backend/lib/roomConnection.d.ts.map +1 -0
  24. package/backend/lib/roomConnection.js +299 -0
  25. package/backend/lib/roomConnection.js.map +1 -0
  26. package/backend/lib/rpcConnection.d.ts +49 -0
  27. package/backend/lib/rpcConnection.d.ts.map +1 -0
  28. package/backend/lib/rpcConnection.js +235 -0
  29. package/backend/lib/rpcConnection.js.map +1 -0
  30. package/backend/lib/token.d.ts +16 -0
  31. package/backend/lib/token.d.ts.map +1 -0
  32. package/backend/lib/token.js +67 -0
  33. package/backend/lib/token.js.map +1 -0
  34. package/backend/package.json +13 -0
  35. package/package.json +48 -0
  36. package/wasm/lib/index.d.ts +97 -0
  37. package/wasm/lib/index.js +19 -0
  38. package/wasm/package.json +14 -0
  39. package/worker/lib/common.d.ts +27 -0
  40. package/worker/lib/index.d.ts +46 -0
  41. package/worker/lib/index.js +2 -0
  42. package/worker/lib/messages.d.ts +93 -0
  43. package/worker/package.json +13 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roomConnection.js","sourceRoot":"","sources":["../src/roomConnection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import * as z from 'zod';
2
+ import { Result, RpcMessage } from '@4players/odin-common';
3
+ export declare function connect(url: URL, signal: AbortSignal): Promise<Result<WebSocket>>;
4
+ export declare function connectOnce(url: URL, signal: AbortSignal): Promise<Result<WebSocket>>;
5
+ export declare class RpcConnection {
6
+ readonly webSocket: WebSocket;
7
+ private readonly _SendQueue;
8
+ private readonly _RecvQueue;
9
+ private readonly _Requests;
10
+ private readonly _Close;
11
+ private _NextId;
12
+ get closed(): boolean;
13
+ get closeSignal(): AbortSignal;
14
+ constructor(webSocket: WebSocket);
15
+ request(name: string, properties: unknown): Promise<Result<unknown> | 'closed'>;
16
+ request(name: string, properties: unknown, timeout: number): Promise<Result<unknown> | 'closed' | 'timeout'>;
17
+ notify(name: string, properties: unknown): void;
18
+ recv(): Promise<RpcMessage | 'closed'>;
19
+ close(): void;
20
+ private _TimeoutRequest;
21
+ private _Send;
22
+ private _OnWebSocketOpen;
23
+ private _OnWebSocketMessage;
24
+ private _OnResponse;
25
+ private _OnEvent;
26
+ private _Cleanup;
27
+ }
28
+ export type Commands = Record<string, {
29
+ request: z.ZodTypeAny;
30
+ response: z.ZodTypeAny;
31
+ }>;
32
+ export type Events = Record<string, z.ZodTypeAny>;
33
+ export interface TypedRpcMessage<Name extends string, Properties> extends RpcMessage {
34
+ name: Name;
35
+ properties: Properties;
36
+ }
37
+ export type RealizedEvents<E extends Events> = {
38
+ [Name in Extract<keyof E, string>]: TypedRpcMessage<Name, z.infer<E[Name]>>;
39
+ }[Extract<keyof E, string>];
40
+ export declare class TypedRpcConnection<C extends Commands, E extends Events> extends RpcConnection {
41
+ readonly _Commands: C;
42
+ readonly _Events: E;
43
+ constructor(webSocket: WebSocket, _Commands: C, _Events: E);
44
+ request<Name extends Extract<keyof C, string>>(name: Name, properties: z.infer<C[Name]['request']>): Promise<Result<z.infer<C[Name]['response']>> | 'closed'>;
45
+ request<Name extends Extract<keyof C, string>>(name: Name, properties: z.infer<C[Name]['request']>, timeout: number): Promise<Result<z.infer<C[Name]['response']>> | 'closed' | 'timeout'>;
46
+ notify<Name extends Extract<keyof C, string>>(name: Name, properties: z.infer<C[Name]['request']>): void;
47
+ recv(): Promise<RealizedEvents<E> | 'closed'>;
48
+ }
49
+ //# sourceMappingURL=rpcConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpcConnection.d.ts","sourceRoot":"","sources":["../src/rpcConnection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,235 @@
1
+ /* eslint-disable no-dupe-class-members */
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ import * as msgpack from '@msgpack/msgpack';
12
+ import { failure, success, isKnownRpcMessage, parseRpc, parseRpcMessage, abortableSleep, } from '@4players/odin-common';
13
+ import { ConnectInterval } from './config';
14
+ export function connect(url, signal) {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ console.debug(`connecting to ${url}`);
17
+ const start = performance.now();
18
+ let connection = failure('no connection was attempted');
19
+ for (let failures = 0; failures < ConnectInterval.length && signal.aborted === false; failures++) {
20
+ const nextReconnectAt = start + whenToConnect(failures);
21
+ if ((yield abortableSleep(nextReconnectAt - performance.now(), signal)) ===
22
+ 'aborted') {
23
+ return failure('aborted');
24
+ }
25
+ connection = yield connectOnce(url, signal);
26
+ if (connection.type === 'Success') {
27
+ return connection;
28
+ }
29
+ }
30
+ return connection;
31
+ });
32
+ }
33
+ export function connectOnce(url, signal) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ let webSocket;
36
+ try {
37
+ webSocket = new WebSocket(url);
38
+ }
39
+ catch (reason) {
40
+ return failure(`unable to create websocket; ${reason}`);
41
+ }
42
+ const abort = new AbortController();
43
+ const onOpen = new Promise((accept) => webSocket.addEventListener('open', () => accept(success(webSocket)), {
44
+ signal: abort.signal,
45
+ }));
46
+ const onClose = new Promise((accept) => webSocket.addEventListener('close', (event) => accept(failure(event.reason)), { signal: abort.signal }));
47
+ const onAbort = new Promise((accept) => signal.addEventListener('abort', () => accept(failure('aborted')), {
48
+ signal: abort.signal,
49
+ }));
50
+ const result = yield Promise.race([onOpen, onClose, onAbort]);
51
+ abort.abort();
52
+ return result;
53
+ });
54
+ }
55
+ function whenToConnect(failures) {
56
+ const past_connects = ConnectInterval.slice(0, failures).reduce((a, b) => a + b, 0);
57
+ const interval = ConnectInterval[failures] * Math.random();
58
+ return past_connects + interval;
59
+ }
60
+ export class RpcConnection {
61
+ get closed() {
62
+ return this._Close.signal.aborted;
63
+ }
64
+ get closeSignal() {
65
+ return this._Close.signal;
66
+ }
67
+ constructor(webSocket) {
68
+ this.webSocket = webSocket;
69
+ this._SendQueue = [];
70
+ this._RecvQueue = [];
71
+ this._Requests = new Map();
72
+ this._Close = new AbortController();
73
+ this._NextId = 1;
74
+ this.webSocket.addEventListener('open', this._OnWebSocketOpen.bind(this));
75
+ this.webSocket.addEventListener('close', this.close.bind(this));
76
+ this.webSocket.addEventListener('message', this._OnWebSocketMessage.bind(this));
77
+ this.webSocket.binaryType = 'arraybuffer';
78
+ this._Close.signal.addEventListener('abort', this._Cleanup.bind(this), {
79
+ once: true,
80
+ });
81
+ }
82
+ request(name, properties, timeout) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ if (this.closed) {
85
+ return Promise.resolve('closed');
86
+ }
87
+ const id = this._NextId;
88
+ const timeoutId = timeout === undefined
89
+ ? undefined
90
+ : setTimeout(() => this._TimeoutRequest(id), timeout);
91
+ this._Send([0, id, name, properties]);
92
+ return new Promise((accept) => {
93
+ this._Requests.set(id, { accept, timeoutId });
94
+ this._NextId += 1;
95
+ });
96
+ });
97
+ }
98
+ notify(name, properties) {
99
+ if (this.closed === false) {
100
+ this._Send([2, name, properties]);
101
+ }
102
+ }
103
+ recv() {
104
+ if (this.closed === false) {
105
+ return new Promise((accept) => this._RecvQueue.push(accept));
106
+ }
107
+ else {
108
+ return Promise.resolve('closed');
109
+ }
110
+ }
111
+ close() {
112
+ this._Close.abort();
113
+ }
114
+ _TimeoutRequest(requestId) {
115
+ const request = this._Requests.get(requestId);
116
+ if (request === undefined)
117
+ return;
118
+ this._Requests.delete(requestId);
119
+ clearTimeout(request.timeoutId);
120
+ request.accept('timeout');
121
+ }
122
+ _Send(message) {
123
+ this.webSocket.send(msgpack.encode(message));
124
+ }
125
+ _OnWebSocketOpen(ev) {
126
+ for (const data in this._SendQueue) {
127
+ this.webSocket.send(data);
128
+ }
129
+ this._SendQueue.length = 0;
130
+ }
131
+ _OnWebSocketMessage(ev) {
132
+ const rpc = parseRpc(ev.data);
133
+ if (rpc.type !== 'Success') {
134
+ this.webSocket.close();
135
+ return;
136
+ }
137
+ switch (rpc.value[0]) {
138
+ case 0:
139
+ this._Send([1, rpc.value[1], 'not supported', undefined]);
140
+ break;
141
+ case 1:
142
+ this._OnResponse(rpc.value[1], rpc.value[2], rpc.value[3]);
143
+ break;
144
+ case 2:
145
+ this._OnEvent(rpc.value[1], rpc.value[2]);
146
+ break;
147
+ }
148
+ }
149
+ _OnResponse(id, error, result) {
150
+ const request = this._Requests.get(id);
151
+ if (request === undefined)
152
+ return;
153
+ clearTimeout(request.timeoutId);
154
+ request.accept(error === null ? success(result) : failure(error));
155
+ }
156
+ _OnEvent(name, properties) {
157
+ console.log('event', name, properties);
158
+ const receiver = this._RecvQueue.shift();
159
+ if (receiver !== undefined) {
160
+ receiver({ name, properties });
161
+ }
162
+ }
163
+ _Cleanup() {
164
+ console.log(`cleanup ${this.webSocket.url}`);
165
+ for (const request of this._Requests.values()) {
166
+ clearTimeout(request.timeoutId);
167
+ request.accept('closed');
168
+ }
169
+ this._Requests.clear();
170
+ for (const accept of this._RecvQueue) {
171
+ accept('closed');
172
+ }
173
+ this._RecvQueue.length = 0;
174
+ this._SendQueue.length = 0;
175
+ this.webSocket.close();
176
+ }
177
+ }
178
+ export class TypedRpcConnection extends RpcConnection {
179
+ constructor(webSocket, _Commands, _Events) {
180
+ super(webSocket);
181
+ this._Commands = _Commands;
182
+ this._Events = _Events;
183
+ }
184
+ request(name, properties, timeout) {
185
+ const _super = Object.create(null, {
186
+ request: { get: () => super.request }
187
+ });
188
+ return __awaiter(this, void 0, void 0, function* () {
189
+ properties = this._Commands[name].request.parse(properties);
190
+ const response = yield (timeout !== undefined
191
+ ? _super.request.call(this, name, properties, timeout)
192
+ : _super.request.call(this, name, properties));
193
+ if (response === 'closed' ||
194
+ response === 'timeout' ||
195
+ response.type === 'Failure') {
196
+ return response;
197
+ }
198
+ const parsed = this._Commands[name].response.safeParse(response.value);
199
+ if (parsed.success) {
200
+ response.value = parsed.data;
201
+ return response;
202
+ }
203
+ else {
204
+ return failure(`response schema failed validation: ${parsed.error}`);
205
+ }
206
+ });
207
+ }
208
+ notify(name, properties) {
209
+ properties = this._Commands[name].request.parse(properties);
210
+ super.notify(name, properties);
211
+ }
212
+ recv() {
213
+ const _super = Object.create(null, {
214
+ recv: { get: () => super.recv }
215
+ });
216
+ return __awaiter(this, void 0, void 0, function* () {
217
+ const event = yield _super.recv.call(this);
218
+ if (event === 'closed')
219
+ return event;
220
+ const parsed = parseRpcMessage(this._Events, event);
221
+ if (parsed !== undefined) {
222
+ return parsed;
223
+ }
224
+ if (!isKnownRpcMessage(this._Events, event.name)) {
225
+ console.warn(`dropping unknown event ${event.name}`);
226
+ }
227
+ else {
228
+ console.error(`schema validation for ${event.name} failed; closing connection`);
229
+ this.close();
230
+ }
231
+ return 'closed';
232
+ });
233
+ }
234
+ }
235
+ //# sourceMappingURL=rpcConnection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpcConnection.js","sourceRoot":"","sources":["../src/rpcConnection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import * as z from 'zod';
2
+ import { TokenAudienceSchema, TokenClaimsSchema, Result } from '@4players/odin-common';
3
+ export type TokenClaims = z.infer<typeof TokenClaimsSchema>;
4
+ export declare class Token {
5
+ readonly text: string;
6
+ readonly claims: TokenClaims;
7
+ static parse(token: string): Result<Token>;
8
+ private readonly _Address;
9
+ protected constructor(text: string, claims: TokenClaims);
10
+ get timeLeft(): number;
11
+ get address(): URL | undefined;
12
+ get defaultRoomId(): string | undefined;
13
+ hasAudience(audience: z.infer<typeof TokenAudienceSchema>): boolean;
14
+ toString(): string;
15
+ }
16
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,EAIP,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,qBAAa,KAAK;IAuBM,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW;IAtBzE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;IAoB1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAE3C,SAAS,aAAsB,IAAI,EAAE,MAAM,EAAW,MAAM,EAAE,WAAW;IAazE,IAAI,QAAQ,IAAI,MAAM,CAGrB;IAED,IAAI,OAAO,IAAI,GAAG,GAAG,SAAS,CAE7B;IAED,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAMtC;IAED,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,GAAG,OAAO;IASnE,QAAQ,IAAI,MAAM;CAGnB"}
@@ -0,0 +1,67 @@
1
+ import { TokenClaimsSchema, failure, fromBase64Url, success, } from '@4players/odin-common';
2
+ export class Token {
3
+ static parse(token) {
4
+ const segments = token.split('.');
5
+ if (segments.length !== 3)
6
+ return failure('expected three segments');
7
+ const body = fromBase64Url(segments[1]);
8
+ if (body.type === 'Failure') {
9
+ return failure(`invalid token; ${body.reason}`);
10
+ }
11
+ let json;
12
+ try {
13
+ json = JSON.parse(body.value);
14
+ }
15
+ catch (reason) {
16
+ return failure(`invalid token; ${reason}`);
17
+ }
18
+ const parsed = TokenClaimsSchema.safeParse(json);
19
+ if (parsed.success === false) {
20
+ return failure(`invalid token; ${parsed.error}`);
21
+ }
22
+ return success(new Token(token, parsed.data));
23
+ }
24
+ constructor(text, claims) {
25
+ this.text = text;
26
+ this.claims = claims;
27
+ const address = claims.adr;
28
+ if (address !== undefined) {
29
+ try {
30
+ this._Address = new URL(`wss://${address}`);
31
+ }
32
+ catch (error) {
33
+ console.error(`address in token(${address}) can not be parsed; ${error}`);
34
+ }
35
+ }
36
+ }
37
+ get timeLeft() {
38
+ if (this.claims.exp === undefined)
39
+ return Infinity;
40
+ return this.claims.exp * 1000 - Date.now();
41
+ }
42
+ get address() {
43
+ return this._Address;
44
+ }
45
+ get defaultRoomId() {
46
+ if (Array.isArray(this.claims.rid)) {
47
+ return this.claims.rid.length === 1 ? this.claims.rid[0] : undefined;
48
+ }
49
+ else {
50
+ return this.claims.rid;
51
+ }
52
+ }
53
+ hasAudience(audience) {
54
+ if (this.claims.aud === undefined)
55
+ return true;
56
+ if (Array.isArray(this.claims.aud)) {
57
+ return this.claims.aud.includes(audience);
58
+ }
59
+ else {
60
+ return this.claims.aud === audience;
61
+ }
62
+ }
63
+ toString() {
64
+ return this.text;
65
+ }
66
+ }
67
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "@4players/odin-plugin-web-backend",
3
+ "version": "0.0.0",
4
+ "author": "Maximilian Münchow <maximilian.muenchow@4players.io>",
5
+ "private": true,
6
+ "license": "UNLICENSED",
7
+ "main": "./lib/index.js",
8
+ "types": "./lib/index.d.ts",
9
+ "scripts": {
10
+ "clean": "rm -rf lib",
11
+ "build": "tsc"
12
+ }
13
+ }
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@4players/odin-plugin-web",
3
+ "version": "1.0.0-alpha.1",
4
+ "description": "A backend plugin providing the custom WebAssembly audio processing module for ODIN web clients",
5
+ "homepage": "https://www.4players.io",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/4Players/odin-sdk-web.git"
9
+ },
10
+ "license": "UNLICENSED",
11
+ "main": "backend/lib/index.js",
12
+ "types": "backend/lib/index.d.ts",
13
+ "scripts": {
14
+ "clean": "npm run clean --workspaces --if-present",
15
+ "build": "npm run build --workspaces --if-present",
16
+ "lint": "eslint . --ext .ts",
17
+ "test": "npm --prefix test run serve"
18
+ },
19
+ "dependencies": {
20
+ "@4players/odin-common": "~1.2.0",
21
+ "@4players/odin-plugin-web-backend": "file:./backend/",
22
+ "@4players/odin-plugin-web-wasm": "file:./wasm/",
23
+ "@4players/odin-plugin-web-worker": "file:./worker/",
24
+ "@msgpack/msgpack": "~3.0.0-beta2",
25
+ "uuid": "~9.0.0",
26
+ "zod": "~3.22.0"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "~20.10.0",
30
+ "@types/uuid": "~9.0.0",
31
+ "@typescript-eslint/eslint-plugin": "~6.18.0",
32
+ "@typescript-eslint/parser": "~6.18.0",
33
+ "esbuild": "~0.19.0",
34
+ "eslint": "~8.56.0",
35
+ "eslint-config-semistandard": "~17.0.0",
36
+ "eslint-plugin-import": "~2.29.0",
37
+ "eslint-plugin-node": "~11.1.0",
38
+ "eslint-plugin-promise": "~6.1.0",
39
+ "ts-node": "~10.9.0",
40
+ "typescript": "~5.3.0"
41
+ },
42
+ "workspaces": [
43
+ "wasm",
44
+ "worker",
45
+ "backend",
46
+ "test"
47
+ ]
48
+ }
@@ -0,0 +1,97 @@
1
+ export declare namespace OdinWasm {
2
+ function _malloc(size: number): number;
3
+ function _free(ptr: number): void;
4
+
5
+ const ready: Promise<typeof OdinWasm>;
6
+
7
+ const HEAP8: Int8Array;
8
+ const HEAPU8: Uint8Array;
9
+ const HEAP16: Int16Array;
10
+ const HEAPU16: Uint16Array;
11
+ const HEAP32: Int32Array;
12
+ const HEAPU32: Uint32Array;
13
+ const HEAPF32: Float32Array;
14
+ const HEAPF64: Float64Array;
15
+
16
+ interface BindInfo {
17
+ count: {
18
+ value: number;
19
+ };
20
+ ptr: number;
21
+ }
22
+
23
+ class Encoder {
24
+ '$$': BindInfo;
25
+
26
+ constructor(
27
+ sample_rate: number,
28
+ fec_packet_loss: number,
29
+ voip: boolean,
30
+ vad_preload: number
31
+ );
32
+
33
+ complexity: number;
34
+
35
+ readonly speech_probability: boolean;
36
+ readonly rms_dbfs: boolean;
37
+ readonly active: boolean;
38
+ set_speech_detection(
39
+ enabled: boolean,
40
+ going_active: number,
41
+ going_inactive: number
42
+ ): void;
43
+
44
+ set_volume_gate(
45
+ enabled: boolean,
46
+ going_active: number,
47
+ going_inactive: number
48
+ ): void;
49
+
50
+ push(samples: number, information: number): void;
51
+ pop(bytes: number, bytes_length: number): number;
52
+
53
+ delete(): void;
54
+ }
55
+
56
+ class Decoder {
57
+ '$$': BindInfo;
58
+
59
+ constructor();
60
+
61
+ volume: number;
62
+
63
+ readonly packets_seen: number;
64
+ readonly packets_invalid: number;
65
+ readonly packets_too_late: number;
66
+ readonly packets_too_early: number;
67
+ readonly packets_repeated: number;
68
+ readonly packets_processed: number;
69
+ readonly packets_lost: number;
70
+ readonly rewinds: number;
71
+ readonly cache_length: number;
72
+
73
+ push(
74
+ sequence_number: number,
75
+ timestamp: number,
76
+ is_end_of_spurt: boolean,
77
+ payload: number,
78
+ length: number
79
+ ): number;
80
+
81
+ pop(samples: number): boolean;
82
+
83
+ delete(): void;
84
+ isDeleted(): boolean;
85
+ }
86
+
87
+ function pop_many(
88
+ decoders: number,
89
+ activities: number,
90
+ count: number,
91
+ samples: number
92
+ ): boolean;
93
+ }
94
+
95
+ declare function LoadOdinWasm(): typeof OdinWasm;
96
+
97
+ export default LoadOdinWasm;