summaryrefslogtreecommitdiff
path: root/includes/external/pair/reference.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/external/pair/reference.js')
-rw-r--r--includes/external/pair/reference.js78
1 files changed, 0 insertions, 78 deletions
diff --git a/includes/external/pair/reference.js b/includes/external/pair/reference.js
deleted file mode 100644
index 9b7b61e..0000000
--- a/includes/external/pair/reference.js
+++ /dev/null
@@ -1,78 +0,0 @@
-"use strict";
-
-const { WebSocket } = require('ws');
-
-// Create a WebSocket to the pairing endpoint
-const ws = new WebSocket("wss://ponies.equestria.horse/_PairingServices-WebSocket-EntryPoint/socket");
-
-// In case there is an error, the connection should be reset and the pairing process will have to be initiated again
-ws.on('error', (e) => {
- console.error(e);
-});
-
-ws.on('message', (raw) => {
- // The server always sends JSON data
- let data = JSON.parse(raw.toString());
-
- // All data objects have a "type" value
- switch (data.type) {
- case "init":
- // The 'init' event is the first event sent after the connection is established
- // Note: future implementations can read 'data.version' to get the protocol version (as an integer)
- ws.send(JSON.stringify({
- type: "init",
- name: "Ponycule pairing reference client" // Replace this with the name of your application
- // The 'name' value must be a string between 2 and 50 characters, additional requirements might get
- // added in future protocol versions.
- }));
- break;
-
- case "preflight":
- // The 'preflight' event is sent before the user confirms the request. It contains identifiable information.
- // On a real implementation, this should make a sound/show a message to let the user know they are working
- // with the right device.
- console.log(`Attempting to pair with: '${data.identity.name}' using '${data.identity.platform}'`);
- // 'data.identity.name' contains the display name of the user doing the pairing process.
- // 'data.identity.platform' contains the platform (browser + OS) the pairing process is being done from.
- break;
-
- case "confirm":
- // The 'confirm' event is sent once the user has accepted the request. At this point, the paired device is
- // in possession of a valid authentication token (a different one than the one used by the pairing device).
- // The paired device should now store this authentication token in a safe place and send it back to the
- // server as the 'PEH2_SESSION_TOKEN' cookie when making an authenticated request.
- console.log(`Token: ${data.token.substring(0, 10)}${"*".repeat(data.token.length - 10)}`);
- // The token is stored in 'data.token', the code above censors all but the first 10 characters.
- // Once you have the token, you can make authenticated requests:
- fetch("https://ponies.equestria.horse/api/session", {
- // The 'session' endpoint returns information about the current session (name, IPs, dates, ...)
- headers: {
- Cookie: "PEH2_SESSION_TOKEN=" + data.token // Passing the token as a cookie
- }
- }).then((res) => {
- res.json().then((data) => { // Most (if not all) endpoints return JSON data
- console.log(data);
- process.exit();
- });
- });
- break;
-
- case "reject":
- // The 'reject' event is sent if the user has rejected the request. This should be considered an error by
- // a client implementation, and the pairing process should not attempt to continue any further after this
- // event occurs. No token is sent.
- console.log(`Pairing rejected`);
- process.exit();
- break;
-
- case "waiting":
- // The 'waiting' event is sent after the connection has been initialized. It's at this point that you can
- // consider the connection to be established and the device to be ready.
- console.log(`Pairing code: ${data.code}`); // 'data.code' contains the 5-character pairing code.
- break;
-
- default:
- // An unrecognised type should be considered to be an error
- throw new Error("Invalid type");
- }
-}); \ No newline at end of file