diff --git a/src/exporters/stat.ink.ts b/src/exporters/stat.ink.ts index 6dc9f71..8167364 100644 --- a/src/exporters/stat.ink.ts +++ b/src/exporters/stat.ink.ts @@ -36,6 +36,7 @@ import { b64Number, gameId, nonNullable, + s3sCoopGameId, s3siGameId, urlSimplify, } from "../utils.ts"; @@ -309,8 +310,12 @@ export class StatInkExporter implements GameExporter { for (const id of list) { const s3sId = await gameId(id); const s3siId = await s3siGameId(id); + const s3sCoopId = await s3sCoopGameId(id); - if (!uuid.includes(s3sId) && !uuid.includes(s3siId)) { + if ( + !uuid.includes(s3sId) && !uuid.includes(s3siId) && + !uuid.includes(s3sCoopId) + ) { out.push(id); } } diff --git a/src/utils.test.ts b/src/utils.test.ts index 6602390..16be848 100644 --- a/src/utils.test.ts +++ b/src/utils.test.ts @@ -1,6 +1,9 @@ import { base64 } from "../deps.ts"; import { assertEquals } from "../dev_deps.ts"; -import { gameId } from "./utils.ts"; +import { gameId, s3sCoopGameId } from "./utils.ts"; + +const COOP_ID = + `CoopHistoryDetail-u-asdf:20220101T012345_12345678-abcd-1234-5678-0123456789ab`; Deno.test("gameId", async () => { assertEquals( @@ -13,11 +16,12 @@ Deno.test("gameId", async () => { ); assertEquals( - await gameId( - base64.encode( - `"CoopHistoryDetail-u-asdf:20220101T012345_12345678-abcd-1234-5678-0123456789ab`, - ), - ), - "175af427-e83b-5bac-b02c-9539cc1fd684", + await gameId(base64.encode(COOP_ID)), + "58329d62-737d-5b43-ac22-e35e6e44b077", ); }); + +Deno.test("s3sCoopGameId", async () => { + const S3S_COOP_UUID = "be4435b1-0ac5-577b-81bb-766585bec028"; + assertEquals(await s3sCoopGameId(base64.encode(COOP_ID)), S3S_COOP_UUID); +}); diff --git a/src/utils.ts b/src/utils.ts index c224cfe..53dd34e 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -115,6 +115,18 @@ export function s3siGameId(id: string) { return uuid.v5.generate(S3SI_NAMESPACE, tsUuid); } +/** + * https://github.com/spacemeowx2/s3si.ts/issues/45 + * + * @param id id of CoopHistoryDetail + * @returns uuid used in stat.ink + */ +export function s3sCoopGameId(id: string) { + const fullId = base64.decode(id); + const tsUuid = fullId.slice(fullId.length - 52, fullId.length); + return uuid.v5.generate(COOP_NAMESPACE, tsUuid); +} + /** * @param id VsHistoryDetail id or CoopHistoryDetail id */