From f1ef4f7824ef202338aa8cfa1464710e16ccf932 Mon Sep 17 00:00:00 2001 From: Puyodead1 Date: Fri, 26 Dec 2025 00:33:35 -0500 Subject: [PATCH] add store/sku/entitlement schemas/enums --- assets/schemas.json | Bin 437331 -> 463805 bytes scripts/schemaExclusions.json | 4 + .../routes/quests/#quest_id/claim-reward.ts | 4 +- src/api/routes/quests/@me.ts | 1 + src/api/routes/quests/decision.ts | 12 +- .../EntitlementFulfillmentStatus.ts | 29 + .../api/entitlements/EntitlementGiftStyle.ts | 32 ++ .../EntitlementQuestRewardMetadataSchema.ts | 24 + .../entitlements}/EntitlementSchema.ts | 16 +- .../EntitlementSpecialSourceType.ts | 0 .../EntitlementTenantMetadataSchema.ts | 23 + .../entitlements}/EntitlementType.ts | 0 src/schemas/api/entitlements/index.ts | 24 + .../api/guilds/GuildPremiumFeaturesSchema.ts | 36 ++ src/schemas/api/guilds/index.ts | 1 + src/schemas/api/index.ts | 1 + .../api/store/GuildPowerupCatagoryType.ts | 38 ++ src/schemas/api/store/SKUAccessType.ts | 34 ++ src/schemas/api/store/SKUContentDescriptor.ts | 22 + src/schemas/api/store/SKUContentRating.ts | 22 + .../api/store/SKUContentRatingAgency.ts | 38 ++ .../api/store/SKUContentRatingSchema.ts | 31 ++ .../api/store/SKUESRBContentDescriptor.ts | 321 +++++++++++ src/schemas/api/store/SKUESRBContentRating.ts | 62 +++ .../api/store/SKUExternalSKUStrategySchema.ts | 30 ++ .../api/store/SKUExternalSKUStrategyType.ts | 34 ++ src/schemas/api/store/SKUFeature.ts | 111 ++++ .../SKUGameServerPowerupMetadataSchema.ts | 68 +++ .../api/store/SKUGameServerPowerupProvider.ts | 21 + src/schemas/api/store/SKUGenre.ts | 503 ++++++++++++++++++ .../SKUGuildMonetizationMetadataSchema.ts | 31 ++ .../store/SKUGuildPowerupMetadataSchema.ts | 51 ++ src/schemas/api/store/SKUOperatingSystem.ts | 41 ++ .../api/store/SKUPEGIContentDescriptor.ts | 69 +++ src/schemas/api/store/SKUPEGIContentRating.ts | 55 ++ .../api/store/SKUPremiumPriceSchema.ts | 28 + src/schemas/api/store/SKUPriceSchema.ts | 46 ++ src/schemas/api/store/SKUProductLine.ts | 111 ++++ src/schemas/api/store/SKUSchema.ts | 80 +++ .../api/store/SKUSystemRequirementSchema.ts | 58 ++ .../api/store/SKUSystemRequirementsSchema.ts | 30 ++ .../api/store/SKUTenantMetadataSchema.ts | 31 ++ src/schemas/api/store/SKUType.ts | 62 +++ .../api/store/SocialLayerMetadataSchema.ts | 42 ++ .../api/store/StoreCarouselItemSchema.ts | 44 ++ src/schemas/api/store/index.ts | 46 ++ .../uncategorised/BillingPaymentGateway.ts | 28 + .../uncategorised/LocalizedStringSchema.ts | 22 + src/schemas/uncategorised/index.ts | 6 +- src/util/util/EntitlementGiftCodeFlags.ts | 10 + src/util/util/SKUFlags.ts | 18 + src/util/util/index.ts | 2 + 52 files changed, 2441 insertions(+), 12 deletions(-) create mode 100644 src/schemas/api/entitlements/EntitlementFulfillmentStatus.ts create mode 100644 src/schemas/api/entitlements/EntitlementGiftStyle.ts create mode 100644 src/schemas/api/entitlements/EntitlementQuestRewardMetadataSchema.ts rename src/schemas/{uncategorised => api/entitlements}/EntitlementSchema.ts (70%) rename src/schemas/{uncategorised => api/entitlements}/EntitlementSpecialSourceType.ts (100%) create mode 100644 src/schemas/api/entitlements/EntitlementTenantMetadataSchema.ts rename src/schemas/{uncategorised => api/entitlements}/EntitlementType.ts (100%) create mode 100644 src/schemas/api/entitlements/index.ts create mode 100644 src/schemas/api/guilds/GuildPremiumFeaturesSchema.ts create mode 100644 src/schemas/api/store/GuildPowerupCatagoryType.ts create mode 100644 src/schemas/api/store/SKUAccessType.ts create mode 100644 src/schemas/api/store/SKUContentDescriptor.ts create mode 100644 src/schemas/api/store/SKUContentRating.ts create mode 100644 src/schemas/api/store/SKUContentRatingAgency.ts create mode 100644 src/schemas/api/store/SKUContentRatingSchema.ts create mode 100644 src/schemas/api/store/SKUESRBContentDescriptor.ts create mode 100644 src/schemas/api/store/SKUESRBContentRating.ts create mode 100644 src/schemas/api/store/SKUExternalSKUStrategySchema.ts create mode 100644 src/schemas/api/store/SKUExternalSKUStrategyType.ts create mode 100644 src/schemas/api/store/SKUFeature.ts create mode 100644 src/schemas/api/store/SKUGameServerPowerupMetadataSchema.ts create mode 100644 src/schemas/api/store/SKUGameServerPowerupProvider.ts create mode 100644 src/schemas/api/store/SKUGenre.ts create mode 100644 src/schemas/api/store/SKUGuildMonetizationMetadataSchema.ts create mode 100644 src/schemas/api/store/SKUGuildPowerupMetadataSchema.ts create mode 100644 src/schemas/api/store/SKUOperatingSystem.ts create mode 100644 src/schemas/api/store/SKUPEGIContentDescriptor.ts create mode 100644 src/schemas/api/store/SKUPEGIContentRating.ts create mode 100644 src/schemas/api/store/SKUPremiumPriceSchema.ts create mode 100644 src/schemas/api/store/SKUPriceSchema.ts create mode 100644 src/schemas/api/store/SKUProductLine.ts create mode 100644 src/schemas/api/store/SKUSchema.ts create mode 100644 src/schemas/api/store/SKUSystemRequirementSchema.ts create mode 100644 src/schemas/api/store/SKUSystemRequirementsSchema.ts create mode 100644 src/schemas/api/store/SKUTenantMetadataSchema.ts create mode 100644 src/schemas/api/store/SKUType.ts create mode 100644 src/schemas/api/store/SocialLayerMetadataSchema.ts create mode 100644 src/schemas/api/store/StoreCarouselItemSchema.ts create mode 100644 src/schemas/api/store/index.ts create mode 100644 src/schemas/uncategorised/BillingPaymentGateway.ts create mode 100644 src/schemas/uncategorised/LocalizedStringSchema.ts create mode 100644 src/util/util/EntitlementGiftCodeFlags.ts create mode 100644 src/util/util/SKUFlags.ts diff --git a/assets/schemas.json b/assets/schemas.json index f8c67c15885aaf6e29b51256063df9d9f34e2cbc..07af29b643678a7c8bff8e3f9a92833ab83d53fe 100644 GIT binary patch delta 8779 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 delta 1098 zcmc&zTS!z<6y@x5&mEtmNR)=!Bq&8{`V}FP1!WJ+De@VbLiof-_R_4J4=KacsavzK z4;y+AA%!J+%rHj-NkcSENXZ(djEt!vu)m-&P%`iqaVe?_L!=sn(jHcTk`qiX zD|6XKW*K0F z52Xg(xh!HH`7&(Lq72(=NrgR4=wx>MZ7A@vE0@^!hG*k*N<~*o< zo$!?FI(dMq*-}F-J+4Ff+FT{a#yd4rOavNw`G$o?CqF*tPKNUj)G&U$@Fdm;(kgUz zb8mU7kH2GbE|ZOUFGT1%hMYo&yfDQdW&?}Fnj+RA3yN9tYB@Sdvwaswgd#_TI5fBd z@*BB)H7>$wiFN-P#~Fq%Q{sb+bczFR()H;%OtX!7X-(CtoR}7cZm89%dYQ=7t2g9a fmwG<|e+B+#3B|!sN9i)pTjx;Z;7?J+$>ZEF%6+Kr diff --git a/scripts/schemaExclusions.json b/scripts/schemaExclusions.json index 64e2bbf00..5b9eb6530 100644 --- a/scripts/schemaExclusions.json +++ b/scripts/schemaExclusions.json @@ -410,6 +410,10 @@ { "value": "UserResponse", "reason": "Schema with only uppercase properties" + }, + { + "value": "SKUSchema", + "reason": "Self-reference only schema" } ] } \ No newline at end of file diff --git a/src/api/routes/quests/#quest_id/claim-reward.ts b/src/api/routes/quests/#quest_id/claim-reward.ts index 345380209..555bda937 100644 --- a/src/api/routes/quests/#quest_id/claim-reward.ts +++ b/src/api/routes/quests/#quest_id/claim-reward.ts @@ -18,7 +18,7 @@ import { route } from "@spacebar/api"; import { EntitlementSpecialSourceType, EntitlementType, QuestClaimRewardRequestSchema, QuestClaimRewardResponseSchema } from "@spacebar/schemas/quests"; -import { emitEvent } from "@spacebar/util"; +import { emitEvent, EntitlementGiftCodeFlags } from "@spacebar/util"; import { Request, Response, Router } from "express"; const router = Router({ mergeParams: true }); @@ -74,7 +74,7 @@ router.post( type: EntitlementType.QUEST_REWARD, tenant_metadata: {}, source_type: EntitlementSpecialSourceType.QUEST_REWARD, - gift_code_flags: 0, // PAYMENT_SOURCE_REQUIRED, todo: make a bitfield enum + gift_code_flags: EntitlementGiftCodeFlags.FLAGS.PAYMENT_SOURCE_REQUIRED, promotion_id: null, }, ], diff --git a/src/api/routes/quests/@me.ts b/src/api/routes/quests/@me.ts index 51093b577..630fa1c94 100644 --- a/src/api/routes/quests/@me.ts +++ b/src/api/routes/quests/@me.ts @@ -331,6 +331,7 @@ router.get( }), async (req: Request, res: Response) => { // TODO: implement + console.debug("GET /quests/@me/claimed is incomplete"); res.json({ quests: [], } as ClaimedQuestsResponseSchema); diff --git a/src/api/routes/quests/decision.ts b/src/api/routes/quests/decision.ts index 3d0be82e9..3b28bbf37 100644 --- a/src/api/routes/quests/decision.ts +++ b/src/api/routes/quests/decision.ts @@ -56,7 +56,17 @@ router.get( }); } - res.json({} as QuestPlacementResponseSchema); + // TODO: implement + console.debug(`GET /quests/decision?placement=${placement}&client_heartbeat_session_id=${client_heartbeat_session_id} is incomplete`); + res.json({ + request_id: "unique-request-id-1234", + quest: null, + ad_identifiers: null, + ad_context: null, + response_ttl_seconds: 300, + metadata_raw: "", + metadata_sealed: "", + } as QuestPlacementResponseSchema); }, ); diff --git a/src/schemas/api/entitlements/EntitlementFulfillmentStatus.ts b/src/schemas/api/entitlements/EntitlementFulfillmentStatus.ts new file mode 100644 index 000000000..4416e5b01 --- /dev/null +++ b/src/schemas/api/entitlements/EntitlementFulfillmentStatus.ts @@ -0,0 +1,29 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2023 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum EntitlementFulfillmentStatus { + UNKNOWN = 0, + FULFILLMENT_NOT_NEEDED, + FULFILLMENT_NEEDED, + FULFILLED, + FULFILLMENT_FAILED, + UNFULFILLMENT_NEEDED, + UNFULFILLED, + UNFULFILLMENT_FAILED, + UNFULFILLMENT_NEEDED_MANUAL, +} diff --git a/src/schemas/api/entitlements/EntitlementGiftStyle.ts b/src/schemas/api/entitlements/EntitlementGiftStyle.ts new file mode 100644 index 000000000..3d758145d --- /dev/null +++ b/src/schemas/api/entitlements/EntitlementGiftStyle.ts @@ -0,0 +1,32 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2023 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum EntitlementGiftStyle { + SNOWGLOBE = 1, + BOX, + CUP, + STANDARD_BOX, + CAKE, + CHEST, + COFFEE, + SEASONAL_STANDARD_BOX, + SEASONAL_CAKE, + SEASONAL_CHEST, + SEASONAL_COFFEE, + NITROWEEN_STANDARD, +} diff --git a/src/schemas/api/entitlements/EntitlementQuestRewardMetadataSchema.ts b/src/schemas/api/entitlements/EntitlementQuestRewardMetadataSchema.ts new file mode 100644 index 000000000..69c97bf71 --- /dev/null +++ b/src/schemas/api/entitlements/EntitlementQuestRewardMetadataSchema.ts @@ -0,0 +1,24 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2023 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { QuestRewardCodeSchema, QuestRewardType } from "../../quests"; + +export interface EntitlementQuestRewardMetadataSchema { + tag: QuestRewardType; + reward_code?: QuestRewardCodeSchema; +} diff --git a/src/schemas/uncategorised/EntitlementSchema.ts b/src/schemas/api/entitlements/EntitlementSchema.ts similarity index 70% rename from src/schemas/uncategorised/EntitlementSchema.ts rename to src/schemas/api/entitlements/EntitlementSchema.ts index 3dfc76f9d..481b8335b 100644 --- a/src/schemas/uncategorised/EntitlementSchema.ts +++ b/src/schemas/api/entitlements/EntitlementSchema.ts @@ -17,7 +17,11 @@ */ import { User } from "@spacebar/util"; +import { SKUSchema } from "../store"; +import { EntitlementFulfillmentStatus } from "./EntitlementFulfillmentStatus"; +import { EntitlementGiftStyle } from "./EntitlementGiftStyle"; import { EntitlementSpecialSourceType } from "./EntitlementSpecialSourceType"; +import { EntitlementTenantMetadataSchema } from "./EntitlementTenantMetadataSchema"; import { EntitlementType } from "./EntitlementType"; export interface EntitlementSchema { @@ -36,14 +40,14 @@ export interface EntitlementSchema { ends_at: string | null; promotion_id: string | null; subscription_id?: string; - gift_code_flags: number; + gift_code_flags: bigint; // EntitlementGiftCodeFlags; gift_code_batch_id?: string; gifter_user_id?: string; - gift_style?: number; - fulfillment_status?: number; + gift_style?: EntitlementGiftStyle; + fulfillment_status?: EntitlementFulfillmentStatus; fulfilled_at?: string; source_type?: EntitlementSpecialSourceType; - tenant_metadata?: Record; - sku?: unknown; - subscription_plan?: Partial; + tenant_metadata?: Record; + sku?: SKUSchema; + subscription_plan?: Partial; // TODO: https://docs.discord.food/resources/store#subscription-plan-object } diff --git a/src/schemas/uncategorised/EntitlementSpecialSourceType.ts b/src/schemas/api/entitlements/EntitlementSpecialSourceType.ts similarity index 100% rename from src/schemas/uncategorised/EntitlementSpecialSourceType.ts rename to src/schemas/api/entitlements/EntitlementSpecialSourceType.ts diff --git a/src/schemas/api/entitlements/EntitlementTenantMetadataSchema.ts b/src/schemas/api/entitlements/EntitlementTenantMetadataSchema.ts new file mode 100644 index 000000000..2450730ed --- /dev/null +++ b/src/schemas/api/entitlements/EntitlementTenantMetadataSchema.ts @@ -0,0 +1,23 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2023 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { EntitlementQuestRewardMetadataSchema } from "./EntitlementQuestRewardMetadataSchema"; + +export interface EntitlementTenantMetadataSchema { + quest_rewards: EntitlementQuestRewardMetadataSchema; +} diff --git a/src/schemas/uncategorised/EntitlementType.ts b/src/schemas/api/entitlements/EntitlementType.ts similarity index 100% rename from src/schemas/uncategorised/EntitlementType.ts rename to src/schemas/api/entitlements/EntitlementType.ts diff --git a/src/schemas/api/entitlements/index.ts b/src/schemas/api/entitlements/index.ts new file mode 100644 index 000000000..8d0e2b122 --- /dev/null +++ b/src/schemas/api/entitlements/index.ts @@ -0,0 +1,24 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +export * from "./EntitlementFulfillmentStatus"; +export * from "./EntitlementGiftStyle"; +export * from "./EntitlementQuestRewardMetadataSchema"; +export * from "./EntitlementSchema"; +export * from "./EntitlementSpecialSourceType"; +export * from "./EntitlementTenantMetadataSchema"; +export * from "./EntitlementType"; diff --git a/src/schemas/api/guilds/GuildPremiumFeaturesSchema.ts b/src/schemas/api/guilds/GuildPremiumFeaturesSchema.ts new file mode 100644 index 000000000..d03b7ce91 --- /dev/null +++ b/src/schemas/api/guilds/GuildPremiumFeaturesSchema.ts @@ -0,0 +1,36 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export interface GuildPremiumFeatures { + /** + * Enabled powerup-specific guild features + */ + features: string[]; + /** + * The number of additional emoji slots available to the guild + */ + additional_emoji_slots: number; + /** + * The number of additional sticker slots available to the guild + */ + additional_sticker_slots: number; + /** + * The number of additional soundboard slots available to the guild + */ + additional_sound_slots: number; +} diff --git a/src/schemas/api/guilds/index.ts b/src/schemas/api/guilds/index.ts index eee86bcee..0ea662150 100644 --- a/src/schemas/api/guilds/index.ts +++ b/src/schemas/api/guilds/index.ts @@ -17,6 +17,7 @@ */ export * from "./AuditLog"; export * from "./Automod"; +export * from "./GuildPremiumFeaturesSchema"; export * from "./GuildProfileResponse"; export * from "./GuildSchema"; export * from "./Role"; diff --git a/src/schemas/api/index.ts b/src/schemas/api/index.ts index b0215da1f..f8d9a9357 100644 --- a/src/schemas/api/index.ts +++ b/src/schemas/api/index.ts @@ -18,6 +18,7 @@ export * from "./bots"; export * from "./channels"; export * from "./developers"; +export * from "./entitlements"; export * from "./guilds"; export * from "./messages"; export * from "./users"; diff --git a/src/schemas/api/store/GuildPowerupCatagoryType.ts b/src/schemas/api/store/GuildPowerupCatagoryType.ts new file mode 100644 index 000000000..84ce55c61 --- /dev/null +++ b/src/schemas/api/store/GuildPowerupCatagoryType.ts @@ -0,0 +1,38 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum GuildPowerupCategoryType { + /** + * Guild premium tier + * + * Value: level + */ + level, + /** + * Additional guild perk + * + * Value: perk + */ + perk, + /** + * Game server attached to the guild + * + * Value: game_server + */ + game_server, +} diff --git a/src/schemas/api/store/SKUAccessType.ts b/src/schemas/api/store/SKUAccessType.ts new file mode 100644 index 000000000..5556558b2 --- /dev/null +++ b/src/schemas/api/store/SKUAccessType.ts @@ -0,0 +1,34 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUAccessType { + /** + * SKU is fully accessible + * + * Value: 1 + * Name: FULL + */ + FULL = 1, + /** + * SKU is in early access + * + * Value: 2 + * Name: EARLY_ACCESS + */ + EARLY_ACCESS = 2, +} diff --git a/src/schemas/api/store/SKUContentDescriptor.ts b/src/schemas/api/store/SKUContentDescriptor.ts new file mode 100644 index 000000000..4a2765917 --- /dev/null +++ b/src/schemas/api/store/SKUContentDescriptor.ts @@ -0,0 +1,22 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { SKUESRBContentDescriptor } from "./SKUESRBContentDescriptor"; +import { SKUPEGIContentDescriptor } from "./SKUPEGIContentDescriptor"; + +export type SKUContentDescriptor = SKUESRBContentDescriptor | SKUPEGIContentDescriptor; diff --git a/src/schemas/api/store/SKUContentRating.ts b/src/schemas/api/store/SKUContentRating.ts new file mode 100644 index 000000000..24b972585 --- /dev/null +++ b/src/schemas/api/store/SKUContentRating.ts @@ -0,0 +1,22 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { SKUESRBContentRating } from "./SKUESRBContentRating"; +import { SKUPEGIContentRating } from "./SKUPEGIContentRating"; + +export type SKUContentRating = SKUESRBContentRating | SKUPEGIContentRating; diff --git a/src/schemas/api/store/SKUContentRatingAgency.ts b/src/schemas/api/store/SKUContentRatingAgency.ts new file mode 100644 index 000000000..97aaf6464 --- /dev/null +++ b/src/schemas/api/store/SKUContentRatingAgency.ts @@ -0,0 +1,38 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUContentRatingAgency { + /** + * Entertainment Software Rating Board + * + * Value: 1 + * Name: ESRB + * Content Rating: ESRB Content Rating + * Content Descriptor: ESRB Content Descriptor + */ + ESRB = 1, + /** + * Pan European Game Information + * + * Value: 2 + * Name: PEGI + * Content Rating: PEGI Content Rating + * Content Descriptor: PEGI Content Descriptor + */ + PEGI = 2, +} diff --git a/src/schemas/api/store/SKUContentRatingSchema.ts b/src/schemas/api/store/SKUContentRatingSchema.ts new file mode 100644 index 000000000..897a24508 --- /dev/null +++ b/src/schemas/api/store/SKUContentRatingSchema.ts @@ -0,0 +1,31 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { SKUContentDescriptor } from "./SKUContentDescriptor"; +import { SKUContentRating } from "./SKUContentRating"; + +export interface SKUContentRatingSchema { + /** + * The content rating + */ + rating: SKUContentRating; + /** + * The content descriptors + */ + descriptors: SKUContentDescriptor[]; +} diff --git a/src/schemas/api/store/SKUESRBContentDescriptor.ts b/src/schemas/api/store/SKUESRBContentDescriptor.ts new file mode 100644 index 000000000..1bd874dcf --- /dev/null +++ b/src/schemas/api/store/SKUESRBContentDescriptor.ts @@ -0,0 +1,321 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUESRBContentDescriptor { + /** + * References to alcohol + * + * Value: 1 + * Name: ALCOHOL_REFERENCE + */ + ALCOHOL_REFERENCE = 1, + /** + * Animated blood + * + * Value: 2 + * Name: ANIMATED_BLOOD + */ + ANIMATED_BLOOD = 2, + /** + * Blood + * + * Value: 3 + * Name: BLOOD + */ + BLOOD = 3, + /** + * Blood and gore + * + * Value: 4 + * Name: BLOOD_AND_GORE + */ + BLOOD_AND_GORE = 4, + /** + * Cartoon violence + * + * Value: 5 + * Name: CARTOON_VIOLENCE + */ + CARTOON_VIOLENCE = 5, + /** + * Comic mischief + * + * Value: 6 + * Name: COMIC_MISCHIEF + */ + COMIC_MISCHIEF = 6, + /** + * Crude humor + * + * Value: 7 + * Name: CRUDE_HUMOR + */ + CRUDE_HUMOR = 7, + /** + * References to drugs + * + * Value: 8 + * Name: DRUG_REFERENCE + */ + DRUG_REFERENCE = 8, + /** + * Fantasy violence + * + * Value: 9 + * Name: FANTASY_VIOLENCE + */ + FANTASY_VIOLENCE = 9, + /** + * Intense violence + * + * Value: 10 + * Name: INTENSE_VIOLENCE + */ + INTENSE_VIOLENCE = 10, + /** + * Use of strong language + * + * Value: 11 + * Name: LANGUAGE + */ + LANGUAGE = 11, + /** + * Lyrics + * + * Value: 12 + * Name: LYRICS + */ + LYRICS = 12, + /** + * Mature humor + * + * Value: 13 + * Name: MATURE_HUMOR + */ + MATURE_HUMOR = 13, + /** + * Nudity + * + * Value: 14 + * Name: NUDITY + */ + NUDITY = 14, + /** + * Partial nudity + * + * Value: 15 + * Name: PARTIAL_NUDITY + */ + PARTIAL_NUDITY = 15, + /** + * Real gambling + * + * Value: 16 + * Name: REAL_GAMBLING + */ + REAL_GAMBLING = 16, + /** + * Sexual content + * + * Value: 17 + * Name: SEXUAL_CONTENT + */ + SEXUAL_CONTENT = 17, + /** + * Sexual themes + * + * Value: 18 + * Name: SEXUAL_THEMES + */ + SEXUAL_THEMES = 18, + /** + * Sexual violence + * + * Value: 19 + * Name: SEXUAL_VIOLENCE + */ + SEXUAL_VIOLENCE = 19, + /** + * Simulated gambling + * + * Value: 20 + * Name: SIMULATED_GAMBLING + */ + SIMULATED_GAMBLING = 20, + /** + * Strong language + * + * Value: 21 + * Name: STRONG_LANGUAGE + */ + STRONG_LANGUAGE = 21, + /** + * Strong lyrics + * + * Value: 22 + * Name: STRONG_LYRICS + */ + STRONG_LYRICS = 22, + /** + * Strong sexual content + * + * Value: 23 + * Name: STRONG_SEXUAL_CONTENT + */ + STRONG_SEXUAL_CONTENT = 23, + /** + * Suggestive themes + * + * Value: 24 + * Name: SUGGESTIVE_THEMES + */ + SUGGESTIVE_THEMES = 24, + /** + * References to tobacco + * + * Value: 25 + * Name: TOBACCO_REFERENCE + */ + TOBACCO_REFERENCE = 25, + /** + * Use of alcohol + * + * Value: 26 + * Name: USE_OF_ALCOHOL + */ + USE_OF_ALCOHOL = 26, + /** + * Use of drugs + * + * Value: 27 + * Name: USE_OF_DRUGS + */ + USE_OF_DRUGS = 27, + /** + * Use of tobacco + * + * Value: 28 + * Name: USE_OF_TOBACCO + */ + USE_OF_TOBACCO = 28, + /** + * Violence + * + * Value: 29 + * Name: VIOLENCE + */ + VIOLENCE = 29, + /** + * Violent references + * + * Value: 30 + * Name: VIOLENT_REFERENCES + */ + VIOLENT_REFERENCES = 30, + /** + * In-game purchases + * + * Value: 31 + * Name: IN_GAME_PURCHASES + */ + IN_GAME_PURCHASES = 31, + /** + * User interaction + * + * Value: 32 + * Name: USERS_INTERACT + */ + USERS_INTERACT = 32, + /** + * Location sharing + * + * Value: 33 + * Name: SHARES_LOCATION + */ + SHARES_LOCATION = 33, + /** + * Unrestricted internet access + * + * Value: 34 + * Name: UNRESTRICTED_INTERNET + */ + UNRESTRICTED_INTERNET = 34, + /** + * Mild blood + * + * Value: 35 + * Name: MILD_BLOOD + */ + MILD_BLOOD = 35, + /** + * Mild cartoon violence + * + * Value: 36 + * Name: MILD_CARTOON_VIOLENCE + */ + MILD_CARTOON_VIOLENCE = 36, + /** + * Mild fantasy violence + * + * Value: 37 + * Name: MILD_FANTASY_VIOLENCE + */ + MILD_FANTASY_VIOLENCE = 37, + /** + * Mild language + * + * Value: 38 + * Name: MILD_LANGUAGE + */ + MILD_LANGUAGE = 38, + /** + * Mild lyrics + * + * Value: 39 + * Name: MILD_LYRICS + */ + MILD_LYRICS = 39, + /** + * Mild sexual themes + * + * Value: 40 + * Name: MILD_SEXUAL_THEMES + */ + MILD_SEXUAL_THEMES = 40, + /** + * Mild suggestive themes + * + * Value: 41 + * Name: MILD_SUGGESTIVE_THEMES + */ + MILD_SUGGESTIVE_THEMES = 41, + /** + * Mild violence + * + * Value: 42 + * Name: MILD_VIOLENCE + */ + MILD_VIOLENCE = 42, + /** + * Animated violence + * + * Value: 43 + * Name: ANIMATED_VIOLENCE + */ + ANIMATED_VIOLENCE = 43, +} diff --git a/src/schemas/api/store/SKUESRBContentRating.ts b/src/schemas/api/store/SKUESRBContentRating.ts new file mode 100644 index 000000000..059111454 --- /dev/null +++ b/src/schemas/api/store/SKUESRBContentRating.ts @@ -0,0 +1,62 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUESRBContentRating { + /** + * Suitable for all ages + * + * Value: 1 + * Name: EVERYONE + */ + EVERYONE = 1, + /** + * Suitable for ages 10 and up + * + * Value: 2 + * Name: EVERYONE_TEN_PLUS + */ + EVERYONE_TEN_PLUS = 2, + /** + * Suitable for ages 13 and up + * + * Value: 3 + * Name: TEEN + */ + TEEN = 3, + /** + * Suitable for ages 17 and up + * + * Value: 4 + * Name: MATURE + */ + MATURE = 4, + /** + * Suitable for ages 18 and up + * + * Value: 5 + * Name: ADULTS_ONLY + */ + ADULTS_ONLY = 5, + /** + * Rating is pending + * + * Value: 6 + * Name: RATING_PENDING + */ + RATING_PENDING = 6, +} diff --git a/src/schemas/api/store/SKUExternalSKUStrategySchema.ts b/src/schemas/api/store/SKUExternalSKUStrategySchema.ts new file mode 100644 index 000000000..a513066a1 --- /dev/null +++ b/src/schemas/api/store/SKUExternalSKUStrategySchema.ts @@ -0,0 +1,30 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { SKUExternalSKUStrategyType } from "./SKUExternalSKUStrategyType"; + +export interface SKUExternalSKUStrategySchema { + /** + * The type of external SKU strategy + */ + type: SKUExternalSKUStrategyType; + /** + * Additional metadata for the external SKU strategy + */ + metadata?: Record; +} diff --git a/src/schemas/api/store/SKUExternalSKUStrategyType.ts b/src/schemas/api/store/SKUExternalSKUStrategyType.ts new file mode 100644 index 000000000..93ad0bab4 --- /dev/null +++ b/src/schemas/api/store/SKUExternalSKUStrategyType.ts @@ -0,0 +1,34 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUExternalSKUStrategyType { + /** + * Regular pricing + * + * Value: 1 + * Name: CONSTANT + */ + CONSTANT = 1, + /** + * Apple sticker pack pricing + * + * Value: 2 + * Name: APPLE_STICKER + */ + APPLE_STICKER = 2, +} diff --git a/src/schemas/api/store/SKUFeature.ts b/src/schemas/api/store/SKUFeature.ts new file mode 100644 index 000000000..dc0c637f3 --- /dev/null +++ b/src/schemas/api/store/SKUFeature.ts @@ -0,0 +1,111 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUFeature { + /** + * Single player game + * + * Value: 1 + * Name: SINGLE_PLAYER + */ + SINGLE_PLAYER = 1, + /** + * Online multiplayer game + * + * Value: 2 + * Name: ONLINE_MULTIPLAYER + */ + ONLINE_MULTIPLAYER = 2, + /** + * Local multiplayer game + * + * Value: 3 + * Name: LOCAL_MULTIPLAYER + */ + LOCAL_MULTIPLAYER = 3, + /** + * Player versus player game + * + * Value: 4 + * Name: PVP + */ + PVP = 4, + /** + * Local cooperative multiplayer + * + * Value: 5 + * Name: LOCAL_COOP + */ + LOCAL_COOP = 5, + /** + * Cross-platform play supported + * + * Value: 6 + * Name: CROSS_PLATFORM + */ + CROSS_PLATFORM = 6, + /** + * Rich presence integration + * + * Value: 7 + * Name: RICH_PRESENCE + */ + RICH_PRESENCE = 7, + /** + * Discord game invites supported + * + * Value: 8 + * Name: DISCORD_GAME_INVITES + */ + DISCORD_GAME_INVITES = 8, + /** + * Spectator mode supported + * + * Value: 9 + * Name: SPECTATOR_MODE + */ + SPECTATOR_MODE = 9, + /** + * Controller support + * + * Value: 10 + * Name: CONTROLLER_SUPPORT + */ + CONTROLLER_SUPPORT = 10, + /** + * Cloud saves supported + * + * Value: 11 + * Name: CLOUD_SAVES + */ + CLOUD_SAVES = 11, + /** + * Online cooperative multiplayer + * + * Value: 12 + * Name: ONLINE_COOP + */ + ONLINE_COOP = 12, + /** + * Secure networking supported + * + * Value: 13 + * Name: SECURE_NETWORKING + */ + SECURE_NETWORKING = 13, +} diff --git a/src/schemas/api/store/SKUGameServerPowerupMetadataSchema.ts b/src/schemas/api/store/SKUGameServerPowerupMetadataSchema.ts new file mode 100644 index 000000000..cba676044 --- /dev/null +++ b/src/schemas/api/store/SKUGameServerPowerupMetadataSchema.ts @@ -0,0 +1,68 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { GuildPremiumFeatures } from "../guilds"; +import { GuildPowerupCategoryType } from "./GuildPowerupCatagoryType"; +import { SKUGameServerPowerupProvider } from "./SKUGameServerPowerupProvider"; + +export interface SKUGameServerPowerupMetadataSchema { + /** + * The number of boosts the powerup costs + */ + boost_price: number; + /** + * The maximum number of entitlements a guild can have for the powerup + */ + purchase_limit: number; + /** + * The features granted by the powerup + */ + guild_features: GuildPremiumFeatures; + /** + * The type of guild powerup + */ + category_type: GuildPowerupCategoryType; + /** + * The available providers + */ + available_providers: SKUGameServerPowerupProvider[]; + /** + * The amount of RAM in megabytes that the game server provides + */ + memory: number; + /** + * The amount of CPU cores that the game server provides + */ + cpu: number; + /** + * The amount of storage in gigabytes that the game server provides + */ + storage: number; + /** + * Maximum amount of players that can connect to the game server + */ + max_slots: number; + /** + * Human-readable amount of RAM that the game server provides + */ + memory_string: string; + /** + * Human-readable maximum amount of players that can connect to the game server + */ + player_string: string; +} diff --git a/src/schemas/api/store/SKUGameServerPowerupProvider.ts b/src/schemas/api/store/SKUGameServerPowerupProvider.ts new file mode 100644 index 000000000..7649aeab7 --- /dev/null +++ b/src/schemas/api/store/SKUGameServerPowerupProvider.ts @@ -0,0 +1,21 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUGameServerPowerupProvider { + SHOCKBYTE = "shockbyte", +} diff --git a/src/schemas/api/store/SKUGenre.ts b/src/schemas/api/store/SKUGenre.ts new file mode 100644 index 000000000..4332cf58b --- /dev/null +++ b/src/schemas/api/store/SKUGenre.ts @@ -0,0 +1,503 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUGenre { + /** + * Action + * + * Value: 1 + * Name: ACTION + */ + ACTION = 1, + /** + * Action RPG + * + * Value: 2 + * Name: ACTION_RPG + */ + ACTION_RPG = 2, + /** + * Brawler + * + * Value: 3 + * Name: BRAWLER + */ + BRAWLER = 3, + /** + * Hack and Slash + * + * Value: 4 + * Name: HACK_AND_SLASH + */ + HACK_AND_SLASH = 4, + /** + * Platformer + * + * Value: 5 + * Name: PLATFORMER + */ + PLATFORMER = 5, + /** + * Stealth + * + * Value: 6 + * Name: STEALTH + */ + STEALTH = 6, + /** + * Survival + * + * Value: 7 + * Name: SURVIVAL + */ + SURVIVAL = 7, + /** + * Adventure + * + * Value: 8 + * Name: ADVENTURE + */ + ADVENTURE = 8, + /** + * Action Adventure + * + * Value: 9 + * Name: ACTION_ADVENTURE + */ + ACTION_ADVENTURE = 9, + /** + * Metroidvania + * + * Value: 10 + * Name: METROIDVANIA + */ + METROIDVANIA = 10, + /** + * Open World + * + * Value: 11 + * Name: OPEN_WORLD + */ + OPEN_WORLD = 11, + /** + * Psychological Horror + * + * Value: 12 + * Name: PSYCHOLOGICAL_HORROR + */ + PSYCHOLOGICAL_HORROR = 12, + /** + * Sandbox + * + * Value: 13 + * Name: SANDBOX + */ + SANDBOX = 13, + /** + * Survival Horror + * + * Value: 14 + * Name: SURVIVAL_HORROR + */ + SURVIVAL_HORROR = 14, + /** + * Visual Novel + * + * Value: 15 + * Name: VISUAL_NOVEL + */ + VISUAL_NOVEL = 15, + /** + * Driving / Racing + * + * Value: 16 + * Name: DRIVING_RACING + */ + DRIVING_RACING = 16, + /** + * Vehicular Combat + * + * Value: 17 + * Name: VEHICULAR_COMBAT + */ + VEHICULAR_COMBAT = 17, + /** + * Massively Multiplayer + * + * Value: 18 + * Name: MASSIVELY_MULTIPLAYER + */ + MASSIVELY_MULTIPLAYER = 18, + /** + * MMORPG + * + * Value: 19 + * Name: MMORPG + */ + MMORPG = 19, + /** + * Role-Playing + * + * Value: 20 + * Name: ROLE_PLAYING + */ + ROLE_PLAYING = 20, + /** + * Dungeon Crawler + * + * Value: 21 + * Name: DUNGEON_CRAWLER + */ + DUNGEON_CRAWLER = 21, + /** + * Roguelike + * + * Value: 22 + * Name: ROGUELIKE + */ + ROGUELIKE = 22, + /** + * Shooter + * + * Value: 23 + * Name: SHOOTER + */ + SHOOTER = 23, + /** + * Light Gun + * + * Value: 24 + * Name: LIGHT_GUN + */ + LIGHT_GUN = 24, + /** + * Shoot 'Em Up + * + * Value: 25 + * Name: SHOOT_EM_UP + */ + SHOOT_EM_UP = 25, + /** + * First-Person Shooter + * + * Value: 26 + * Name: FPS + */ + FPS = 26, + /** + * Dual-Joystick Shooter + * + * Value: 27 + * Name: DUAL_JOYSTICK_SHOOTER + */ + DUAL_JOYSTICK_SHOOTER = 27, + /** + * Simulation + * + * Value: 28 + * Name: SIMULATION + */ + SIMULATION = 28, + /** + * Flight Simulator + * + * Value: 29 + * Name: FLIGHT_SIMULATOR + */ + FLIGHT_SIMULATOR = 29, + /** + * Train Simulator + * + * Value: 30 + * Name: TRAIN_SIMULATOR + */ + TRAIN_SIMULATOR = 30, + /** + * Life Simulator + * + * Value: 31 + * Name: LIFE_SIMULATOR + */ + LIFE_SIMULATOR = 31, + /** + * Fishing + * + * Value: 32 + * Name: FISHING + */ + FISHING = 32, + /** + * Sports + * + * Value: 33 + * Name: SPORTS + */ + SPORTS = 33, + /** + * Baseball + * + * Value: 34 + * Name: BASEBALL + */ + BASEBALL = 34, + /** + * Basketball + * + * Value: 35 + * Name: BASKETBALL + */ + BASKETBALL = 35, + /** + * Billiards + * + * Value: 36 + * Name: BILLIARDS + */ + BILLIARDS = 36, + /** + * Bowling + * + * Value: 37 + * Name: BOWLING + */ + BOWLING = 37, + /** + * Boxing + * + * Value: 38 + * Name: BOXING + */ + BOXING = 38, + /** + * Football + * + * Value: 39 + * Name: FOOTBALL + */ + FOOTBALL = 39, + /** + * Golf + * + * Value: 40 + * Name: GOLF + */ + GOLF = 40, + /** + * Hockey + * + * Value: 41 + * Name: HOCKEY + */ + HOCKEY = 41, + /** + * Skateboarding / Skating + * + * Value: 42 + * Name: SKATEBOARDING_SKATING + */ + SKATEBOARDING_SKATING = 42, + /** + * Snowboarding / Skiing + * + * Value: 43 + * Name: SNOWBOARDING_SKIING + */ + SNOWBOARDING_SKIING = 43, + /** + * Soccer + * + * Value: 44 + * Name: SOCCER + */ + SOCCER = 44, + /** + * Track & Field + * + * Value: 45 + * Name: TRACK_FIELD + */ + TRACK_FIELD = 45, + /** + * Surfing / Wakeboarding + * + * Value: 46 + * Name: SURFING_WAKEBOARDING + */ + SURFING_WAKEBOARDING = 46, + /** + * Wrestling + * + * Value: 47 + * Name: WRESTLING + */ + WRESTLING = 47, + /** + * Strategy + * + * Value: 48 + * Name: STRATEGY + */ + STRATEGY = 48, + /** + * 4X (explore, expand, exploit, exterminate) + * + * Value: 49 + * Name: FOUR_X + */ + FOUR_X = 49, + /** + * Artillery + * + * Value: 50 + * Name: ARTILLERY + */ + ARTILLERY = 50, + /** + * Real-Time Strategy + * + * Value: 51 + * Name: RTS + */ + RTS = 51, + /** + * Tower Defense + * + * Value: 52 + * Name: TOWER_DEFENSE + */ + TOWER_DEFENSE = 52, + /** + * Turn-Based Strategy + * + * Value: 53 + * Name: TURN_BASED_STRATEGY + */ + TURN_BASED_STRATEGY = 53, + /** + * Wargame + * + * Value: 54 + * Name: WARGAME + */ + WARGAME = 54, + /** + * Multiplayer Online Battle Arena + * + * Value: 55 + * Name: MOBA + */ + MOBA = 55, + /** + * Fighting + * + * Value: 56 + * Name: FIGHTING + */ + FIGHTING = 56, + /** + * Puzzle + * + * Value: 57 + * Name: PUZZLE + */ + PUZZLE = 57, + /** + * Card Game + * + * Value: 58 + * Name: CARD_GAME + */ + CARD_GAME = 58, + /** + * Education + * + * Value: 59 + * Name: EDUCATION + */ + EDUCATION = 59, + /** + * Fitness + * + * Value: 60 + * Name: FITNESS + */ + FITNESS = 60, + /** + * Gambling + * + * Value: 61 + * Name: GAMBLING + */ + GAMBLING = 61, + /** + * Music / Rhythm + * + * Value: 62 + * Name: MUSIC_RHYTHM + */ + MUSIC_RHYTHM = 62, + /** + * Party / Mini Game + * + * Value: 63 + * Name: PARTY_MINI_GAME + */ + PARTY_MINI_GAME = 63, + /** + * Pinball + * + * Value: 64 + * Name: PINBALL + */ + PINBALL = 64, + /** + * Trivia / Board Game + * + * Value: 65 + * Name: TRIVIA_BOARD_GAME + */ + TRIVIA_BOARD_GAME = 65, + /** + * Tactical + * + * Value: 66 + * Name: TACTICAL + */ + TACTICAL = 66, + /** + * Indie + * + * Value: 67 + * Name: INDIE + */ + INDIE = 67, + /** + * Arcade + * + * Value: 68 + * Name: ARCADE + */ + ARCADE = 68, + /** + * Point-and-Click + * + * Value: 69 + * Name: POINT_AND_CLICK + */ + POINT_AND_CLICK = 69, +} diff --git a/src/schemas/api/store/SKUGuildMonetizationMetadataSchema.ts b/src/schemas/api/store/SKUGuildMonetizationMetadataSchema.ts new file mode 100644 index 000000000..738a2a3cc --- /dev/null +++ b/src/schemas/api/store/SKUGuildMonetizationMetadataSchema.ts @@ -0,0 +1,31 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { SKUGameServerPowerupMetadataSchema } from "./SKUGameServerPowerupMetadataSchema"; +import { SKUGuildPowerupMetadataSchema } from "./SKUGuildPowerupMetadataSchema"; + +export interface SKUGuildMonetizationMetadataSchema { + /** + * Guild powerup metadata + */ + powerup?: SKUGuildPowerupMetadataSchema; + /** + * Game server powerup metadata + */ + game_server?: SKUGameServerPowerupMetadataSchema; +} diff --git a/src/schemas/api/store/SKUGuildPowerupMetadataSchema.ts b/src/schemas/api/store/SKUGuildPowerupMetadataSchema.ts new file mode 100644 index 000000000..3edc00ef5 --- /dev/null +++ b/src/schemas/api/store/SKUGuildPowerupMetadataSchema.ts @@ -0,0 +1,51 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { GuildPremiumFeatures } from "@spacebar/schemas"; +import { GuildPowerupCategoryType } from "./GuildPowerupCatagoryType"; + +export interface SKUGuildPowerupMetadataSchema { + /** + * The number of boosts the powerup costs + */ + boost_price: number; + /** + * The maximum number of entitlements a guild can have for the powerup + */ + purchase_limit: number; + /** + * The features granted by the powerup + */ + guild_features: GuildPremiumFeatures; + /** + * The type of guild powerup + */ + category_type: GuildPowerupCategoryType; + /** + * URL of the static banner image for the powerup + */ + static_image_url: string; + /** + * URL of the animated banner image for the powerup + */ + animated_image_url: string; + /** + * When the powerup will be removed from the store + */ + store_removal_date?: string | null; +} diff --git a/src/schemas/api/store/SKUOperatingSystem.ts b/src/schemas/api/store/SKUOperatingSystem.ts new file mode 100644 index 000000000..628f8be86 --- /dev/null +++ b/src/schemas/api/store/SKUOperatingSystem.ts @@ -0,0 +1,41 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUOperatingSystem { + /** + * Windows OS + * + * Value: 1 + * Name: WINDOWS + */ + WINDOWS = 1, + /** + * macOS + * + * Value: 2 + * Name: MACOS + */ + MACOS = 2, + /** + * Linux + * + * Value: 3 + * Name: LINUX + */ + LINUX = 3, +} diff --git a/src/schemas/api/store/SKUPEGIContentDescriptor.ts b/src/schemas/api/store/SKUPEGIContentDescriptor.ts new file mode 100644 index 000000000..01288d793 --- /dev/null +++ b/src/schemas/api/store/SKUPEGIContentDescriptor.ts @@ -0,0 +1,69 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUPEGIContentDescriptor { + /** + * Depictions of violence + * + * Value: 1 + * Name: VIOLENCE + */ + VIOLENCE = 1, + /** + * Use of bad language + * + * Value: 2 + * Name: BAD_LANGUAGE + */ + BAD_LANGUAGE = 2, + /** + * Scenes that may frighten + * + * Value: 3 + * Name: FEAR + */ + FEAR = 3, + /** + * Depictions of gambling + * + * Value: 4 + * Name: GAMBLING + */ + GAMBLING = 4, + /** + * Depictions of sexual content + * + * Value: 5 + * Name: SEX + */ + SEX = 5, + /** + * Depictions of drugs + * + * Value: 6 + * Name: DRUGS + */ + DRUGS = 6, + /** + * Depictions of discrimination + * + * Value: 7 + * Name: DISCRIMINATION + */ + DISCRIMINATION = 7, +} diff --git a/src/schemas/api/store/SKUPEGIContentRating.ts b/src/schemas/api/store/SKUPEGIContentRating.ts new file mode 100644 index 000000000..cfe60d1a2 --- /dev/null +++ b/src/schemas/api/store/SKUPEGIContentRating.ts @@ -0,0 +1,55 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUPEGIContentRating { + /** + * Suitable for all ages + * + * Value: 1 + * Name: THREE + */ + THREE = 1, + /** + * Suitable for ages 7 and up + * + * Value: 2 + * Name: SEVEN + */ + SEVEN = 2, + /** + * Suitable for ages 12 and up + * + * Value: 3 + * Name: TWELVE + */ + TWELVE = 3, + /** + * Suitable for ages 16 and up + * + * Value: 4 + * Name: SIXTEEN + */ + SIXTEEN = 4, + /** + * Suitable for ages 18 and up + * + * Value: 5 + * Name: EIGHTEEN + */ + EIGHTEEN = 5, +} diff --git a/src/schemas/api/store/SKUPremiumPriceSchema.ts b/src/schemas/api/store/SKUPremiumPriceSchema.ts new file mode 100644 index 000000000..b048626dd --- /dev/null +++ b/src/schemas/api/store/SKUPremiumPriceSchema.ts @@ -0,0 +1,28 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export interface SKUPremiumPriceSchema { + /** + * The price amount in the smallest currency unit + */ + amount: number; + /** + * The percentage discount for premium users + */ + percentage: number; +} diff --git a/src/schemas/api/store/SKUPriceSchema.ts b/src/schemas/api/store/SKUPriceSchema.ts new file mode 100644 index 000000000..9bdb9f65b --- /dev/null +++ b/src/schemas/api/store/SKUPriceSchema.ts @@ -0,0 +1,46 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { SKUPremiumPriceSchema } from "./SKUPremiumPriceSchema"; + +export interface SKUPriceSchema { + /** + * The lower-cased ISO 4217 currency code + */ + currency: string; + /** + * The exponent to convert the amount to the displayed currency unit + */ + currency_exponent: number; + /** + * The price amount in the smallest currency unit + */ + amount: number; + /** + * The sale price amount in the smallest currency unit + */ + sale_amount?: number; + /** + * The percentage discount of the sale price + */ + sale_percentage?: number; + /** + * The price for premium users per premium type + */ + premium?: Record; +} diff --git a/src/schemas/api/store/SKUProductLine.ts b/src/schemas/api/store/SKUProductLine.ts new file mode 100644 index 000000000..483415808 --- /dev/null +++ b/src/schemas/api/store/SKUProductLine.ts @@ -0,0 +1,111 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUProductLine { + /** + * Premium (Nitro) subscription + * + * Value: 1 + * Name: PREMIUM + */ + PREMIUM = 1, + /** + * Premium guild (boosting) subscription + * + * Value: 2 + * Name: PREMIUM_GUILD + */ + PREMIUM_GUILD = 2, + /** + * Embedded activity in-app purchase + * + * Value: 3 + * Name: ACTIVITY_IAP + */ + ACTIVITY_IAP = 3, + /** + * Guild role subscription or ticketed event + * + * Value: 4 + * Name: GUILD_ROLE + */ + GUILD_ROLE = 4, + /** + * Guild product + * + * Value: 5 + * Name: GUILD_PRODUCT + */ + GUILD_PRODUCT = 5, + /** + * Application item + * + * Value: 6 + * Name: APPLICATION + */ + APPLICATION = 6, + /** + * Discord collectible + * + * Value: 7 + * Name: COLLECTIBLES + */ + COLLECTIBLES = 7, + /** + * In-game quest reward + * + * Value: 9 + * Name: QUEST_IN_GAME_REWARD + */ + QUEST_IN_GAME_REWARD = 9, + /** + * Quest reward code + * + * Value: 10 + * Name: QUEST_REWARD_CODE + */ + QUEST_REWARD_CODE = 10, + /** + * Fractional premium subscription + * + * Value: 11 + * Name: FRACTIONAL_PREMIUM + */ + FRACTIONAL_PREMIUM = 11, + /** + * Virtual currency + * + * Value: 12 + * Name: VIRTUAL_CURRENCY + */ + VIRTUAL_CURRENCY = 12, + /** + * Guild powerup + * + * Value: 13 + * Name: GUILD_POWERUP + */ + GUILD_POWERUP = 13, + /** + * Social SDK game item + * + * Value: 14 + * Name: SOCIAL_LAYER_GAME_ITEM + */ + SOCIAL_LAYER_GAME_ITEM = 14, +} diff --git a/src/schemas/api/store/SKUSchema.ts b/src/schemas/api/store/SKUSchema.ts new file mode 100644 index 000000000..49bf0164e --- /dev/null +++ b/src/schemas/api/store/SKUSchema.ts @@ -0,0 +1,80 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { BillingPaymentGateway, LocalizedStringSchema } from "@spacebar/schemas"; +import { Application } from "@spacebar/util"; +import { SKUAccessType } from "./SKUAccessType"; +import { SKUContentRatingAgency } from "./SKUContentRatingAgency"; +import { SKUContentRatingSchema } from "./SKUContentRatingSchema"; +import { SKUExternalSKUStrategySchema } from "./SKUExternalSKUStrategySchema"; +import { SKUFeature } from "./SKUFeature"; +import { SKUGenre } from "./SKUGenre"; +import { SKUGuildPowerupMetadataSchema } from "./SKUGuildPowerupMetadataSchema"; +import { SKUOperatingSystem } from "./SKUOperatingSystem"; +import { SKUPriceSchema } from "./SKUPriceSchema"; +import { SKUProductLine } from "./SKUProductLine"; +import { SKUSystemRequirementsSchema } from "./SKUSystemRequirementsSchema"; +import { SKUTenantMetadataSchema } from "./SKUTenantMetadataSchema"; +import { SKUType } from "./SKUType"; + +export interface SKUSchema { + id: string; + type: SKUType; + application_id: string; + application?: Partial; + product_line: SKUProductLine | null; + product_id?: string; + flags: bigint; // SKUFlags + name: LocalizedStringSchema; + summary?: LocalizedStringSchema; + description?: LocalizedStringSchema; + legal_notice?: LocalizedStringSchema; + slug: string; + thumbnail_asset_id?: string; + dependent_sku_id?: string | null; + bundled_skus?: SKUSchema[]; + bundled_sku_ids?: string[]; + access_type: SKUAccessType; + manifest_labels?: string[] | null; + features: SKUFeature[]; + locales?: string[]; + genres?: SKUGenre[]; + available_regions?: string[]; + content_rating?: SKUContentRatingSchema; + content_rating_agency?: SKUContentRatingAgency; + content_ratings?: Record; + system_requirements?: Record; + price?: SKUPriceSchema | Record; // discord.food says map[string, integer] but i dont think thats true, its probably SKUPriceSchema + sale_price_tier?: number; + sale_price?: Record; // same here, discord.food says map[string, integer] which i dont believe + created_at: string; + updated_at: string; + release_date?: string; + preorder_approximate_release_date?: string; + preorder_released_at?: string; + external_purchase_url?: string; + external_sku_strategies?: Record; + eligible_payment_gateways?: BillingPaymentGateway[]; + premium: boolean; + show_age_gate: boolean; + restricted?: boolean; + exclusive?: boolean; + deleted?: boolean; + tenant_metadata?: SKUTenantMetadataSchema; + powerup_metadata?: SKUGuildPowerupMetadataSchema; +} diff --git a/src/schemas/api/store/SKUSystemRequirementSchema.ts b/src/schemas/api/store/SKUSystemRequirementSchema.ts new file mode 100644 index 000000000..bd11c11e3 --- /dev/null +++ b/src/schemas/api/store/SKUSystemRequirementSchema.ts @@ -0,0 +1,58 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { LocalizedStringSchema } from "../../uncategorised"; + +export interface SKUSystemRequirementSchema { + /** + * The amount of RAM in megabytes + */ + ram?: number; + /** + * The amount of disk space in megabytes + */ + disk?: number; + /** + * The required operating system version + */ + operating_system_version?: LocalizedStringSchema; + /** + * The required CPU + */ + cpu?: LocalizedStringSchema; + /** + * The required GPU + */ + gpu?: LocalizedStringSchema; + /** + * The required sound card + */ + sound_card?: LocalizedStringSchema; + /** + * The required DirectX version + */ + directx?: LocalizedStringSchema; + /** + * The required network connectivity status + */ + network?: LocalizedStringSchema; + /** + * Additional notes + */ + notes?: LocalizedStringSchema; +} diff --git a/src/schemas/api/store/SKUSystemRequirementsSchema.ts b/src/schemas/api/store/SKUSystemRequirementsSchema.ts new file mode 100644 index 000000000..20fc8dd7e --- /dev/null +++ b/src/schemas/api/store/SKUSystemRequirementsSchema.ts @@ -0,0 +1,30 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { SKUSystemRequirementSchema } from "./SKUSystemRequirementSchema"; + +export interface SKUSystemRequirementsSchema { + /** + * The minimum system requirements + */ + minimum?: SKUSystemRequirementSchema; + /** + * The recommended system requirements + */ + recommended?: SKUSystemRequirementSchema; +} diff --git a/src/schemas/api/store/SKUTenantMetadataSchema.ts b/src/schemas/api/store/SKUTenantMetadataSchema.ts new file mode 100644 index 000000000..033b219fb --- /dev/null +++ b/src/schemas/api/store/SKUTenantMetadataSchema.ts @@ -0,0 +1,31 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { SKUGuildMonetizationMetadataSchema } from "./SKUGuildMonetizationMetadataSchema"; +import { SocialLayerMetadataSchema } from "./SocialLayerMetadataSchema"; + +export interface SKUTenantMetadataSchema { + /** + * Guild monetization data + */ + guild_monetization?: SKUGuildMonetizationMetadataSchema; + /** + * Social layer game item data + */ + social_layer?: SocialLayerMetadataSchema; +} diff --git a/src/schemas/api/store/SKUType.ts b/src/schemas/api/store/SKUType.ts new file mode 100644 index 000000000..db7389cce --- /dev/null +++ b/src/schemas/api/store/SKUType.ts @@ -0,0 +1,62 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum SKUType { + /** + * Primary durable item + * + * Value: 1 + * Name: DURABLE_PRIMARY + */ + DURABLE_PRIMARY = 1, + /** + * Durable item + * + * Value: 2 + * Name: DURABLE + */ + DURABLE = 2, + /** + * Consumable item + * + * Value: 3 + * Name: CONSUMABLE + */ + CONSUMABLE = 3, + /** + * Bundle of items + * + * Value: 4 + * Name: BUNDLE + */ + BUNDLE = 4, + /** + * Subscription item + * + * Value: 5 + * Name: SUBSCRIPTION + */ + SUBSCRIPTION = 5, + /** + * Group of subscription items + * + * Value: 6 + * Name: SUBSCRIPTION_GROUP + */ + SUBSCRIPTION_GROUP = 6, +} diff --git a/src/schemas/api/store/SocialLayerMetadataSchema.ts b/src/schemas/api/store/SocialLayerMetadataSchema.ts new file mode 100644 index 000000000..b53a9d1f9 --- /dev/null +++ b/src/schemas/api/store/SocialLayerMetadataSchema.ts @@ -0,0 +1,42 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +import { StoreCarouselItemSchema } from "./StoreCarouselItemSchema"; + +export interface SocialLayerMetadataSchema { + /** + * The carousel items for the listing + */ + carousel_items: StoreCarouselItemSchema[]; + /** + * The label for the listing + */ + label: string; + /** + * When the listing expires + */ + expires_at: string | null; + /** + * The store asset ID for the card image + */ + card_image_asset_id?: string; + /** + * The store asset ID for the card background image + */ + card_background_image_asset_id?: string; +} diff --git a/src/schemas/api/store/StoreCarouselItemSchema.ts b/src/schemas/api/store/StoreCarouselItemSchema.ts new file mode 100644 index 000000000..34d46f635 --- /dev/null +++ b/src/schemas/api/store/StoreCarouselItemSchema.ts @@ -0,0 +1,44 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export interface StoreCarouselItemSchema { + /** + * The YouTube video ID for the item + */ + youtube_video_id?: string; + /** + * The store asset ID for the item + */ + asset_id?: string; + /** + * The store asset ID for the thumbnail + */ + thumbnail_asset_id?: string; + /** + * The store asset ID for the background + */ + background_asset_id?: string; + /** + * The label for the item + */ + label?: string; + /** + * The store asset ID for the label icon + */ + label_icon_asset_id?: string; +} diff --git a/src/schemas/api/store/index.ts b/src/schemas/api/store/index.ts new file mode 100644 index 000000000..ae81256e5 --- /dev/null +++ b/src/schemas/api/store/index.ts @@ -0,0 +1,46 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2025 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export * from "./GuildPowerupCatagoryType"; +export * from "./SKUAccessType"; +export * from "./SKUContentDescriptor"; +export * from "./SKUContentRating"; +export * from "./SKUContentRatingAgency"; +export * from "./SKUContentRatingSchema"; +export * from "./SKUESRBContentDescriptor"; +export * from "./SKUESRBContentRating"; +export * from "./SKUExternalSKUStrategySchema"; +export * from "./SKUExternalSKUStrategyType"; +export * from "./SKUFeature"; +export * from "./SKUGameServerPowerupMetadataSchema"; +export * from "./SKUGameServerPowerupProvider"; +export * from "./SKUGenre"; +export * from "./SKUGuildMonetizationMetadataSchema"; +export * from "./SKUOperatingSystem"; +export * from "./SKUPEGIContentDescriptor"; +export * from "./SKUPEGIContentRating"; +export * from "./SKUPremiumPriceSchema"; +export * from "./SKUPriceSchema"; +export * from "./SKUProductLine"; +export * from "./SKUSchema"; +export * from "./SKUSystemRequirementSchema"; +export * from "./SKUSystemRequirementsSchema"; +export * from "./SKUTenantMetadataSchema"; +export * from "./SKUType"; +export * from "./SocialLayerMetadataSchema"; +export * from "./StoreCarouselItemSchema"; diff --git a/src/schemas/uncategorised/BillingPaymentGateway.ts b/src/schemas/uncategorised/BillingPaymentGateway.ts new file mode 100644 index 000000000..66ccbc4d4 --- /dev/null +++ b/src/schemas/uncategorised/BillingPaymentGateway.ts @@ -0,0 +1,28 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2023 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export enum BillingPaymentGateway { + STRIPE = 1, + BRAINTREE, + APPLE, + GOOGLE, + ADYEN, + APPLE_PARTNER, + VIRTUAL_CURRENCY = 8, + APPLE_ADVANCED_COMMERCE, +} diff --git a/src/schemas/uncategorised/LocalizedStringSchema.ts b/src/schemas/uncategorised/LocalizedStringSchema.ts new file mode 100644 index 000000000..96763f55e --- /dev/null +++ b/src/schemas/uncategorised/LocalizedStringSchema.ts @@ -0,0 +1,22 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2023 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export interface LocalizedStringSchema { + default: string; + localizations?: Record; +} diff --git a/src/schemas/uncategorised/index.ts b/src/schemas/uncategorised/index.ts index 5a63b99c7..410fd7c7a 100644 --- a/src/schemas/uncategorised/index.ts +++ b/src/schemas/uncategorised/index.ts @@ -15,6 +15,7 @@ You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ + export * from "./AckBulkSchema"; export * from "./ActivitySchema"; export * from "./ApplicationAuthorizeSchema"; @@ -23,6 +24,7 @@ export * from "./BackupCodesChallengeSchema"; export * from "./BanCreateSchema"; export * from "./BanModeratorSchema"; export * from "./BanRegistrySchema"; +export * from "./BillingPaymentGateway"; export * from "./BotModifySchema"; export * from "./BulkBanSchema"; export * from "./BulkDeleteSchema"; @@ -38,9 +40,6 @@ export * from "./EmailDomainLookupSchema"; export * from "./EmailDomainLookupVerifyCodeSchema"; export * from "./EmojiCreateSchema"; export * from "./EmojiModifySchema"; -export * from "./EntitlementSchema"; -export * from "./EntitlementSpecialSourceType"; -export * from "./EntitlementType"; export * from "./ForgotPasswordSchema"; export * from "./GreetRequestSchema"; export * from "./GuildCreateSchema"; @@ -50,6 +49,7 @@ export * from "./GuildUpdateSchema"; export * from "./GuildUpdateWelcomeScreenSchema"; export * from "./HubWaitlistSignupSchema"; export * from "./InviteCreateSchema"; +export * from "./LocalizedStringSchema"; export * from "./LoginResponse"; export * from "./LoginSchema"; export * from "./MemberChangeProfileSchema"; diff --git a/src/util/util/EntitlementGiftCodeFlags.ts b/src/util/util/EntitlementGiftCodeFlags.ts new file mode 100644 index 000000000..221e7136b --- /dev/null +++ b/src/util/util/EntitlementGiftCodeFlags.ts @@ -0,0 +1,10 @@ +import { BitField } from "./BitField"; + +export class EntitlementGiftCodeFlags extends BitField { + static FLAGS = { + PAYMENT_SOURCE_REQUIRED: BigInt(1) << BigInt(0), + EXISTING_SUBSCRIPTION_DISALLOWED: BigInt(1) << BigInt(1), + NOT_SELF_REDEEMABLE: BigInt(1) << BigInt(2), + PROMOTION: BigInt(1) << BigInt(3), + }; +} diff --git a/src/util/util/SKUFlags.ts b/src/util/util/SKUFlags.ts new file mode 100644 index 000000000..a04807beb --- /dev/null +++ b/src/util/util/SKUFlags.ts @@ -0,0 +1,18 @@ +import { BitField } from "./BitField"; + +export class SKUFlags extends BitField { + static FLAGS = { + PREMIUM_PURCHASE: BigInt(1) << BigInt(0), + HAS_FREE_PREMIUM_CONTENT: BigInt(1) << BigInt(1), + AVAILABLE: BigInt(1) << BigInt(2), + PREMIUM_AND_DISTRIBUTION: BigInt(1) << BigInt(3), + STICKER: BigInt(1) << BigInt(4), + GUILD_ROLE: BigInt(1) << BigInt(5), + AVAILABLE_FOR_SUBSCRIPTION_GIFTING: BigInt(1) << BigInt(6), + APPLICATION_GUILD_SUBSCRIPTION: BigInt(1) << BigInt(7), + APPLICATION_USER_SUBSCRIPTION: BigInt(1) << BigInt(8), + CREATOR_MONETIZATION: BigInt(1) << BigInt(9), + GUILD_PRODUCT: BigInt(1) << BigInt(10), + AVAILABLE_FOR_APPLICATION_GIFTING: BigInt(1) << BigInt(11), + }; +} diff --git a/src/util/util/index.ts b/src/util/util/index.ts index b2cfc568b..b797e7f39 100644 --- a/src/util/util/index.ts +++ b/src/util/util/index.ts @@ -54,3 +54,5 @@ export * from "../../schemas/HelperTypes"; export * from "./extensions"; export * from "./Random"; export * from "./Url"; +export * from "./SKUFlags"; +export * from "./EntitlementGiftCodeFlags"; \ No newline at end of file