mirror of
https://gitea.tendokyu.moe/ppc/amnet.git
synced 2026-09-28 17:58:10 +03:00
1 line
5.6 KiB
Plaintext
1 line
5.6 KiB
Plaintext
{"version":3,"sources":["../src/api.ts","../src/card.ts","../src/gameIds.ts"],"sourcesContent":["/**\r\n * The latest version of the AMNet API this library supports\r\n */\r\nexport const AMNET_API_VERSION = 1;\r\n\r\n/**\r\n * The minimum version of the AMNet API this library supports\r\n */\r\nexport const MIN_AMNET_API_VERSION = 1;\r\n\r\nexport interface AMCardInRequest {\r\n cardId: string;\r\n physicalCardIDm?: string;\r\n}\r\n\r\n/**\r\n * Server connection info (api version, address, etc.)\r\n */\r\nexport interface AMServerConnectionInfo {\r\n apiVersion: number;\r\n serverAddress: string;\r\n}\r\n\r\n/**\r\n * User-definable server metadata\r\n */\r\nexport interface AMServerMetadata {\r\n serverName: string;\r\n gameId?: string | null | undefined;\r\n}\r\n\r\n/**\r\n * Metrics about the current game session\r\n */\r\nexport interface AMServerInstanceMetrics {\r\n timeSinceLastPoll?: number;\r\n sessionUptime?: number;\r\n}\r\n\r\n/**\r\n * The response from an AMNet server's info endpoint\r\n */\r\nexport type AMServerInfo = AMServerMetadata & AMServerConnectionInfo & AMServerInstanceMetrics;\r\n\r\n/**\r\n * Performs the card-in request to the specified server\r\n * @param server The server to perform the request against\r\n * @param request The card-in request to send\r\n * @param signal The abort signal to use for the request\r\n */\r\nexport async function performCardIn(server: AMServerConnectionInfo, request: AMCardInRequest, signal: AbortSignal): Promise<boolean> {\r\n if (server.apiVersion < MIN_AMNET_API_VERSION || server.apiVersion > AMNET_API_VERSION) {\r\n throw new Error(\"Unsupported server API version\");\r\n }\r\n\r\n try {\r\n const response = await fetch(`${new URL(server.serverAddress).origin}/amnet/signin`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify(request),\r\n signal: signal\r\n });\r\n\r\n return response.ok;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Attempts to connect to the specified server and fetch its info\r\n * @param serverAddress The origin address of the server to connect to\r\n * @param abort The abort signal to use for the request (for cancellation)\r\n */\r\nexport async function fetchServerInfo(serverAddress: string, abort: AbortSignal): Promise<AMServerInfo | null> {\r\n try {\r\n const response = await fetch(`${new URL(serverAddress).origin}/amnet/info`, {\r\n signal: abort\r\n });\r\n\r\n if (!response.ok) {\r\n return null;\r\n }\r\n\r\n return {\r\n ...await response.json(),\r\n serverAddress: serverAddress\r\n } satisfies AMServerMetadata;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n","export const CARD_ID_REGEX = /^(?:[0-9]{4} ?){5}$/i;\r\n\r\nexport function generateCardNumber(): string {\r\n let cardId = '';\r\n\r\n while (true) {\r\n // don't start with a 3\r\n const firstDigit = Math.floor(Math.random() * 10);\r\n\r\n if (firstDigit !== 3) {\r\n cardId = firstDigit.toString();\r\n break;\r\n }\r\n }\r\n\r\n for (let i = 0; i < 19; i++) {\r\n cardId += Math.floor(Math.random() * 10).toString();\r\n }\r\n\r\n return cardId;\r\n}\r\n\r\n/**\r\n * Validates the provided card id by known parameters\r\n * @param id The card id to validate\r\n */\r\nexport function validateCardId(id: string): boolean {\r\n return id[0] !== '3' && CARD_ID_REGEX.test(id);\r\n}\r\n","/**\r\n * Get the game name from the game identifier (4-letter code)\r\n * @param id\r\n */\r\nexport function getGameName(id: string): string | null {\r\n switch (id?.toUpperCase()) {\r\n case \"SDGT\":\r\n return \"Initial D The Arcade\";\r\n case \"SDHD\":\r\n case \"SDBT\":\r\n return \"CHUNITHM\";\r\n case \"SDDT\":\r\n return \"O.N.G.E.K.I.\";\r\n case \"SDEZ\":\r\n return \"maimai DX\";\r\n case \"SBZV\":\r\n return \"Project DIVA Future Tone\";\r\n \r\n default:\r\n return null;\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,IAAM,oBAAoB;AAK1B,IAAM,wBAAwB;AA0CrC,SAAsB,cAAc,QAAgC,SAA0B,QAAuC;AAAA;AACjI,QAAI,OAAO,aAAa,yBAAyB,OAAO,aAAa,mBAAmB;AACpF,YAAM,IAAI,MAAM,gCAAgC;AAAA,IACpD;AAEA,QAAI;AACA,YAAM,WAAW,MAAM,MAAM,GAAG,IAAI,IAAI,OAAO,aAAa,EAAE,MAAM,iBAAiB;AAAA,QACjF,QAAQ;AAAA,QACR,SAAS;AAAA,UACL,gBAAgB;AAAA,QACpB;AAAA,QACA,MAAM,KAAK,UAAU,OAAO;AAAA,QAC5B;AAAA,MACJ,CAAC;AAED,aAAO,SAAS;AAAA,IACpB,SAAQ;AACJ,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;AAOA,SAAsB,gBAAgB,eAAuB,OAAkD;AAAA;AAC3G,QAAI;AACA,YAAM,WAAW,MAAM,MAAM,GAAG,IAAI,IAAI,aAAa,EAAE,MAAM,eAAe;AAAA,QACxE,QAAQ;AAAA,MACZ,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AACd,eAAO;AAAA,MACX;AAEA,aAAO,iCACA,MAAM,SAAS,KAAK,IADpB;AAAA,QAEH;AAAA,MACJ;AAAA,IACJ,SAAQ;AACJ,aAAO;AAAA,IACX;AAAA,EACJ;AAAA;;;AC7FO,IAAM,gBAAgB;AAEtB,SAAS,qBAA6B;AACzC,MAAI,SAAS;AAEb,SAAO,MAAM;AAET,UAAM,aAAa,KAAK,MAAM,KAAK,OAAO,IAAI,EAAE;AAEhD,QAAI,eAAe,GAAG;AAClB,eAAS,WAAW,SAAS;AAC7B;AAAA,IACJ;AAAA,EACJ;AAEA,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,cAAU,KAAK,MAAM,KAAK,OAAO,IAAI,EAAE,EAAE,SAAS;AAAA,EACtD;AAEA,SAAO;AACX;AAMO,SAAS,eAAe,IAAqB;AAChD,SAAO,GAAG,CAAC,MAAM,OAAO,cAAc,KAAK,EAAE;AACjD;;;ACxBO,SAAS,YAAY,IAA2B;AACnD,UAAQ,yBAAI,eAAe;AAAA,IACvB,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IAEX;AACI,aAAO;AAAA,EACf;AACJ;","names":[]} |