diff --git a/referee/package.json b/referee/package.json index cb3e0af7..ba95d8c4 100644 --- a/referee/package.json +++ b/referee/package.json @@ -4,6 +4,7 @@ "module": "ES2022", "target": "ES2022", "dependencies": { + "@aws-sdk/client-dynamodb": "^3.705.0", "@aws-sdk/client-kinesis": "^3.696.0", "@blaze-cardano/sdk": "^0.2.11", "@noble/ed25519": "^2.1.0", diff --git a/referee/referee.ts b/referee/referee.ts index fe4923fa..06a60d57 100644 --- a/referee/referee.ts +++ b/referee/referee.ts @@ -7,17 +7,22 @@ import * as bech32 from "bech32-buffer"; import * as ed25519 from "@noble/ed25519"; import { blake2b } from "@noble/hashes/blake2b"; import { KinesisClient, PutRecordsCommand } from "@aws-sdk/client-kinesis"; +import { DynamoDBClient, PutItemCommand } from "@aws-sdk/client-dynamodb"; import { Packet } from "utils/HydraMultiplayer/base.js"; import { fromHex, toHex } from "utils/helpers.js"; const NETWORK_ID = Number(process.env.NETWORK_ID); const HYDRA_NODE = "http://localhost:4001/"; -const DISCORD_BOT = "https://discord.us-east-1.hydra-doom.sundae.fi/match"; // TODO +const DISCORD_BOT = "https://discord.hydra-doom.sundae.fi/match"; // TODO const RECORD_STATS = true; const kinesis = new KinesisClient({ region: "us-east-1", }); +const dynamo = new DynamoDBClient({ + region: "us-east-1", +}); + const encoder = new TextEncoder(); async function sendEvent(gameId, data) { @@ -53,6 +58,13 @@ async function reportResults(gameId, results) { console.log(`Reporting results for game ${gameId}\n`, JSON.stringify(results, null, 2)); for(let i = 0; i < 5; i++) { try { + await dynamo.send(new PutItemCommand({ + TableName: "doom-game-results", + Item: { + pk: { S: gameId }, + results: { S: JSON.stringify(results) }, + }, + })); let resp = await fetch(DISCORD_BOT, { method: "POST", body: JSON.stringify(results), diff --git a/referee/yarn.lock b/referee/yarn.lock index 7200542d..4e23e823 100644 --- a/referee/yarn.lock +++ b/referee/yarn.lock @@ -49,6 +49,57 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.6.2" +"@aws-sdk/client-dynamodb@^3.705.0": + version "3.705.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-dynamodb/-/client-dynamodb-3.705.0.tgz#e25cd3a3bc6884549dfee5003e3b5622ea8cf047" + integrity sha512-uHmjzK4/r6KiXSMofSRmLdGb0N+X42yoTZN9YrQK2PxPMdLjh7JCGv4thlLcZP1NBHPfFxsEh61kqf8+1SfzgQ== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.699.0" + "@aws-sdk/client-sts" "3.699.0" + "@aws-sdk/core" "3.696.0" + "@aws-sdk/credential-provider-node" "3.699.0" + "@aws-sdk/middleware-endpoint-discovery" "3.696.0" + "@aws-sdk/middleware-host-header" "3.696.0" + "@aws-sdk/middleware-logger" "3.696.0" + "@aws-sdk/middleware-recursion-detection" "3.696.0" + "@aws-sdk/middleware-user-agent" "3.696.0" + "@aws-sdk/region-config-resolver" "3.696.0" + "@aws-sdk/types" "3.696.0" + "@aws-sdk/util-endpoints" "3.696.0" + "@aws-sdk/util-user-agent-browser" "3.696.0" + "@aws-sdk/util-user-agent-node" "3.696.0" + "@smithy/config-resolver" "^3.0.12" + "@smithy/core" "^2.5.3" + "@smithy/fetch-http-handler" "^4.1.1" + "@smithy/hash-node" "^3.0.10" + "@smithy/invalid-dependency" "^3.0.10" + "@smithy/middleware-content-length" "^3.0.12" + "@smithy/middleware-endpoint" "^3.2.3" + "@smithy/middleware-retry" "^3.0.27" + "@smithy/middleware-serde" "^3.0.10" + "@smithy/middleware-stack" "^3.0.10" + "@smithy/node-config-provider" "^3.1.11" + "@smithy/node-http-handler" "^3.3.1" + "@smithy/protocol-http" "^4.1.7" + "@smithy/smithy-client" "^3.4.4" + "@smithy/types" "^3.7.1" + "@smithy/url-parser" "^3.0.10" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.27" + "@smithy/util-defaults-mode-node" "^3.0.27" + "@smithy/util-endpoints" "^2.1.6" + "@smithy/util-middleware" "^3.0.10" + "@smithy/util-retry" "^3.0.10" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.1.9" + "@types/uuid" "^9.0.1" + tslib "^2.6.2" + uuid "^9.0.1" + "@aws-sdk/client-kinesis@^3.696.0": version "3.696.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-kinesis/-/client-kinesis-3.696.0.tgz#f4da916e665ab6a3f41d60638bd5a808e3d3a09e" @@ -145,6 +196,51 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/client-sso-oidc@3.699.0": + version "3.699.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.699.0.tgz#a35665e681abd518b56330bc7dab63041fbdaf83" + integrity sha512-u8a1GorY5D1l+4FQAf4XBUC1T10/t7neuwT21r0ymrtMFSK2a9QqVHKMoLkvavAwyhJnARSBM9/UQC797PFOFw== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.696.0" + "@aws-sdk/credential-provider-node" "3.699.0" + "@aws-sdk/middleware-host-header" "3.696.0" + "@aws-sdk/middleware-logger" "3.696.0" + "@aws-sdk/middleware-recursion-detection" "3.696.0" + "@aws-sdk/middleware-user-agent" "3.696.0" + "@aws-sdk/region-config-resolver" "3.696.0" + "@aws-sdk/types" "3.696.0" + "@aws-sdk/util-endpoints" "3.696.0" + "@aws-sdk/util-user-agent-browser" "3.696.0" + "@aws-sdk/util-user-agent-node" "3.696.0" + "@smithy/config-resolver" "^3.0.12" + "@smithy/core" "^2.5.3" + "@smithy/fetch-http-handler" "^4.1.1" + "@smithy/hash-node" "^3.0.10" + "@smithy/invalid-dependency" "^3.0.10" + "@smithy/middleware-content-length" "^3.0.12" + "@smithy/middleware-endpoint" "^3.2.3" + "@smithy/middleware-retry" "^3.0.27" + "@smithy/middleware-serde" "^3.0.10" + "@smithy/middleware-stack" "^3.0.10" + "@smithy/node-config-provider" "^3.1.11" + "@smithy/node-http-handler" "^3.3.1" + "@smithy/protocol-http" "^4.1.7" + "@smithy/smithy-client" "^3.4.4" + "@smithy/types" "^3.7.1" + "@smithy/url-parser" "^3.0.10" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.27" + "@smithy/util-defaults-mode-node" "^3.0.27" + "@smithy/util-endpoints" "^2.1.6" + "@smithy/util-middleware" "^3.0.10" + "@smithy/util-retry" "^3.0.10" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@aws-sdk/client-sso@3.696.0": version "3.696.0" resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.696.0.tgz#a9251e88cdfc91fb14191f760f68baa835e88f1c" @@ -235,6 +331,52 @@ "@smithy/util-utf8" "^3.0.0" tslib "^2.6.2" +"@aws-sdk/client-sts@3.699.0": + version "3.699.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.699.0.tgz#9419be6bbf3809008128117afea8b9129b5a959d" + integrity sha512-++lsn4x2YXsZPIzFVwv3fSUVM55ZT0WRFmPeNilYIhZClxHLmVAWKH4I55cY9ry60/aTKYjzOXkWwyBKGsGvQg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.699.0" + "@aws-sdk/core" "3.696.0" + "@aws-sdk/credential-provider-node" "3.699.0" + "@aws-sdk/middleware-host-header" "3.696.0" + "@aws-sdk/middleware-logger" "3.696.0" + "@aws-sdk/middleware-recursion-detection" "3.696.0" + "@aws-sdk/middleware-user-agent" "3.696.0" + "@aws-sdk/region-config-resolver" "3.696.0" + "@aws-sdk/types" "3.696.0" + "@aws-sdk/util-endpoints" "3.696.0" + "@aws-sdk/util-user-agent-browser" "3.696.0" + "@aws-sdk/util-user-agent-node" "3.696.0" + "@smithy/config-resolver" "^3.0.12" + "@smithy/core" "^2.5.3" + "@smithy/fetch-http-handler" "^4.1.1" + "@smithy/hash-node" "^3.0.10" + "@smithy/invalid-dependency" "^3.0.10" + "@smithy/middleware-content-length" "^3.0.12" + "@smithy/middleware-endpoint" "^3.2.3" + "@smithy/middleware-retry" "^3.0.27" + "@smithy/middleware-serde" "^3.0.10" + "@smithy/middleware-stack" "^3.0.10" + "@smithy/node-config-provider" "^3.1.11" + "@smithy/node-http-handler" "^3.3.1" + "@smithy/protocol-http" "^4.1.7" + "@smithy/smithy-client" "^3.4.4" + "@smithy/types" "^3.7.1" + "@smithy/url-parser" "^3.0.10" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.27" + "@smithy/util-defaults-mode-node" "^3.0.27" + "@smithy/util-endpoints" "^2.1.6" + "@smithy/util-middleware" "^3.0.10" + "@smithy/util-retry" "^3.0.10" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@aws-sdk/core@3.696.0": version "3.696.0" resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.696.0.tgz#bdf306bdc019f485738d91d8838eec877861dd26" @@ -297,6 +439,24 @@ "@smithy/types" "^3.7.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-ini@3.699.0": + version "3.699.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.699.0.tgz#7919a454b05c5446d04a0d3270807046a029ee30" + integrity sha512-dXmCqjJnKmG37Q+nLjPVu22mNkrGHY8hYoOt3Jo9R2zr5MYV7s/NHsCHr+7E+BZ+tfZYLRPeB1wkpTeHiEcdRw== + dependencies: + "@aws-sdk/core" "3.696.0" + "@aws-sdk/credential-provider-env" "3.696.0" + "@aws-sdk/credential-provider-http" "3.696.0" + "@aws-sdk/credential-provider-process" "3.696.0" + "@aws-sdk/credential-provider-sso" "3.699.0" + "@aws-sdk/credential-provider-web-identity" "3.696.0" + "@aws-sdk/types" "3.696.0" + "@smithy/credential-provider-imds" "^3.2.6" + "@smithy/property-provider" "^3.1.9" + "@smithy/shared-ini-file-loader" "^3.1.10" + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-node@3.696.0": version "3.696.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.696.0.tgz#6d8d97a85444bfd3c5a1aded9ce894f68e6d3547" @@ -315,6 +475,24 @@ "@smithy/types" "^3.7.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-node@3.699.0": + version "3.699.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.699.0.tgz#6a1e32a49a7fa71d10c85a927267d1782444def1" + integrity sha512-MmEmNDo1bBtTgRmdNfdQksXu4uXe66s0p1hi1YPrn1h59Q605eq/xiWbGL6/3KdkViH6eGUuABeV2ODld86ylg== + dependencies: + "@aws-sdk/credential-provider-env" "3.696.0" + "@aws-sdk/credential-provider-http" "3.696.0" + "@aws-sdk/credential-provider-ini" "3.699.0" + "@aws-sdk/credential-provider-process" "3.696.0" + "@aws-sdk/credential-provider-sso" "3.699.0" + "@aws-sdk/credential-provider-web-identity" "3.696.0" + "@aws-sdk/types" "3.696.0" + "@smithy/credential-provider-imds" "^3.2.6" + "@smithy/property-provider" "^3.1.9" + "@smithy/shared-ini-file-loader" "^3.1.10" + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-process@3.696.0": version "3.696.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.696.0.tgz#45da7b948aa40987b413c7c0d4a8125bf1433651" @@ -341,6 +519,20 @@ "@smithy/types" "^3.7.1" tslib "^2.6.2" +"@aws-sdk/credential-provider-sso@3.699.0": + version "3.699.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.699.0.tgz#515e2ecd407bace3141b8b192505631de415667e" + integrity sha512-Ekp2cZG4pl9D8+uKWm4qO1xcm8/MeiI8f+dnlZm8aQzizeC+aXYy9GyoclSf6daK8KfRPiRfM7ZHBBL5dAfdMA== + dependencies: + "@aws-sdk/client-sso" "3.696.0" + "@aws-sdk/core" "3.696.0" + "@aws-sdk/token-providers" "3.699.0" + "@aws-sdk/types" "3.696.0" + "@smithy/property-provider" "^3.1.9" + "@smithy/shared-ini-file-loader" "^3.1.10" + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@aws-sdk/credential-provider-web-identity@3.696.0": version "3.696.0" resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.696.0.tgz#3f97c00bd3bc7cfd988e098af67ff7c8392ce188" @@ -352,6 +544,26 @@ "@smithy/types" "^3.7.1" tslib "^2.6.2" +"@aws-sdk/endpoint-cache@3.693.0": + version "3.693.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/endpoint-cache/-/endpoint-cache-3.693.0.tgz#4b3f0bbc16dc2907e1b977e3d8ddfc7ba008fd12" + integrity sha512-/zK0ZZncBf5FbTfo8rJMcQIXXk4Ibhe5zEMiwFNivVPR2uNC0+oqfwXz7vjxwY0t6BPE3Bs4h9uFEz4xuGCY6w== + dependencies: + mnemonist "0.38.3" + tslib "^2.6.2" + +"@aws-sdk/middleware-endpoint-discovery@3.696.0": + version "3.696.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.696.0.tgz#c1a4cf63888fbd6903c3a767355829397e5ae9f3" + integrity sha512-KZvgR3lB9zdLuuO+SxeQQVDn8R46Brlolsbv7JGyR6id0BNy6pqitHdcrZCyp9jaMjrSFcPROceeLy70Cu3pZg== + dependencies: + "@aws-sdk/endpoint-cache" "3.693.0" + "@aws-sdk/types" "3.696.0" + "@smithy/node-config-provider" "^3.1.11" + "@smithy/protocol-http" "^4.1.7" + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@aws-sdk/middleware-host-header@3.696.0": version "3.696.0" resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.696.0.tgz#20aae0efeb973ca1a6db1b1014acbcdd06ad472e" @@ -417,6 +629,17 @@ "@smithy/types" "^3.7.1" tslib "^2.6.2" +"@aws-sdk/token-providers@3.699.0": + version "3.699.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.699.0.tgz#354990dd52d651c1f7a64c4c0894c868cdc81de2" + integrity sha512-kuiEW9DWs7fNos/SM+y58HCPhcIzm1nEZLhe2/7/6+TvAYLuEWURYsbK48gzsxXlaJ2k/jGY3nIsA7RptbMOwA== + dependencies: + "@aws-sdk/types" "3.696.0" + "@smithy/property-provider" "^3.1.9" + "@smithy/shared-ini-file-loader" "^3.1.10" + "@smithy/types" "^3.7.1" + tslib "^2.6.2" + "@aws-sdk/types@3.696.0", "@aws-sdk/types@^3.222.0": version "3.696.0" resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.696.0.tgz#559c3df74dc389b6f40ba6ec6daffeab155330cd" @@ -1496,6 +1719,11 @@ dependencies: undici-types "~6.20.0" +"@types/uuid@^9.0.1": + version "9.0.8" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" + integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== + "@types/ws@^8.5.13": version "8.5.13" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.13.tgz#6414c280875e2691d0d1e080b05addbf5cb91e20" @@ -2749,6 +2977,13 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mnemonist@0.38.3: + version "0.38.3" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.3.tgz#35ec79c1c1f4357cfda2fe264659c2775ccd7d9d" + integrity sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw== + dependencies: + obliterator "^1.6.1" + ms@^2.0.0, ms@^2.1.2, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" @@ -3012,6 +3247,11 @@ npmlog@^7.0.1: gauge "^5.0.0" set-blocking "^2.0.0" +obliterator@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-1.6.1.tgz#dea03e8ab821f6c4d96a299e17aef6a3af994ef3" + integrity sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig== + once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" diff --git a/src/utils/HydraMultiplayer/base.ts b/src/utils/HydraMultiplayer/base.ts index cb3bed2f..c197d9eb 100644 --- a/src/utils/HydraMultiplayer/base.ts +++ b/src/utils/HydraMultiplayer/base.ts @@ -65,7 +65,6 @@ export abstract class HydraMultiplayer { kills: number[], data: Uint8Array, ): Promise { - console.log("SendPacket", kills); const ephemeralKey = this.key.publicKeyHashBytes; this.packetQueue.push({ to, from, ephemeralKey, kills, data }); await this.sendPacketQueue(); diff --git a/src/utils/HydraMultiplayer/dedicated.ts b/src/utils/HydraMultiplayer/dedicated.ts index 1aea2bec..02504bc0 100644 --- a/src/utils/HydraMultiplayer/dedicated.ts +++ b/src/utils/HydraMultiplayer/dedicated.ts @@ -57,8 +57,6 @@ export class HydraMultiplayerDedicated extends HydraMultiplayer { this.clients[packet.from] = this.clients[packet.from] || { kills: [] }; this.clients[packet.from].kills = packet.kills; - console.log("Kills: ", this.clients); - let keys = Object.keys(this.clients); let allAgree = true; for(let i = 0; i < keys.length; i++) { @@ -66,9 +64,6 @@ export class HydraMultiplayerDedicated extends HydraMultiplayer { const clientA = this.clients[keys[i]]; const clientB = this.clients[keys[j]]; if(clientA && clientB) { - console.log(`Comparing ${keys[i]} and ${keys[j]}`); - console.log(`Client A: ${clientA.kills}`); - console.log(`Client B: ${clientB.kills}`); if(clientA.kills.toString() != clientB.kills.toString()) { allAgree = false; }