aboutsummaryrefslogtreecommitdiff
path: root/webAO/client.ts
diff options
context:
space:
mode:
Diffstat (limited to 'webAO/client.ts')
-rw-r--r--webAO/client.ts35
1 files changed, 33 insertions, 2 deletions
diff --git a/webAO/client.ts b/webAO/client.ts
index 50eb18b..43b04f0 100644
--- a/webAO/client.ts
+++ b/webAO/client.ts
@@ -21,6 +21,8 @@ import {
fetchEvidenceList,
fetchCharacterList,
} from "./client/fetchLists";
+import { ExMsgType, handleRegisterCredential, handleAssertCredential, AuthState } from "./ext_packet"
+import { initWebAuthn } from "./auth"
const { ip: serverIP, connect, mode, theme, serverName, char: autoChar, area: autoArea } = queryParser();
export { autoChar, autoArea };
@@ -156,6 +158,7 @@ class Client extends EventEmitter {
emote_extensions: string[];
emotions_extensions: string[];
background_extensions: string[];
+ authState: AuthState;
constructor(connectionString: string) {
super();
@@ -172,6 +175,7 @@ class Client extends EventEmitter {
this.serv.addEventListener("close", this.emit.bind(this, "close"));
this.serv.addEventListener("message", this.emit.bind(this, "message"));
this.serv.addEventListener("error", this.emit.bind(this, "error"));
+ this.serv.binaryType = "arraybuffer";
// If the client is still not connected 5 seconds after attempting to join
// It's fair to assume that the server is not reachable
@@ -215,7 +219,8 @@ class Client extends EventEmitter {
this.charicon_extensions = [".webp", ".png"];
this.emote_extensions = [".webp", ".png", ".apng", ".gif"];
this.emotions_extensions = [".webp", ".png"];
- this.background_extensions = [".webp", ".png", ".apng", ".gif"];;
+ this.background_extensions = [".webp", ".png", ".apng", ".gif"];
+ this.authState = AuthState.None;
}
/**
@@ -269,6 +274,7 @@ class Client extends EventEmitter {
document.getElementById("client_charselect").style.display = "none";
appendICNotice("Connected");
client.joinServer();
+ initWebAuthn();
}
/**
@@ -304,7 +310,13 @@ class Client extends EventEmitter {
const msg = e.data;
console.debug(`S: ${msg}`);
- this.handle_server_packet(msg);
+ if (typeof msg === "string") {
+ this.handle_server_packet(msg);
+ return;
+ }
+
+ const msgBytes = new Uint8Array(msg);
+ this.handle_ext_packet(msgBytes);
}
/**
@@ -413,6 +425,25 @@ class Client extends EventEmitter {
fetchEvidenceList();
fetchCharacterList();
}
+
+ handle_ext_packet(msg: Uint8Array) {
+ if (msg.length === 0) {
+ return;
+ }
+ const type = msg[0];
+ const body = msg.subarray(1);
+ switch (type) {
+ case ExMsgType.RegisterCredential:
+ handleRegisterCredential(body);
+ break;
+ case ExMsgType.AssertCredential:
+ handleAssertCredential(body);
+ break;
+ default:
+ console.log("Invalid message received: ${type}");
+ break;
+ }
+ }
}
export default Client;