From 122c5fbd6a8478e2a2d64eb74a5b64011119e9bb Mon Sep 17 00:00:00 2001 From: Conrad306 Date: Thu, 22 Jan 2026 21:40:35 -0500 Subject: [PATCH 01/13] feat(structures): add Application structure --- .../structures/src/application/Application.ts | 261 ++++++++++++++++++ packages/structures/src/application/index.ts | 1 + .../src/bitfields/ApplicationFlagsBitField.ts | 16 ++ packages/structures/src/bitfields/index.ts | 1 + 4 files changed, 279 insertions(+) create mode 100644 packages/structures/src/application/Application.ts create mode 100644 packages/structures/src/application/index.ts create mode 100644 packages/structures/src/bitfields/ApplicationFlagsBitField.ts diff --git a/packages/structures/src/application/Application.ts b/packages/structures/src/application/Application.ts new file mode 100644 index 000000000000..8515893d5ca3 --- /dev/null +++ b/packages/structures/src/application/Application.ts @@ -0,0 +1,261 @@ +import type { APIApplication, ApplicationFlags } from 'discord-api-types/v10'; +import { Structure } from '../Structure'; +import { ApplicationFlagsBitField } from '../bitfields'; +import { kData } from '../utils/symbols'; +import type { Partialize } from '../utils/types'; + +/** + * Represents an application on Discord. + * + * @typeParam Omitted - Specify the properties that will not be stored in the raw data field as a union, implement via `DataTemplate` + */ +export class Application extends Structure { + /** + * @param data - The raw data from the API for the application. + */ + public constructor(data: Partialize) { + super(data); + } + + /** + * The ID of the application. + */ + public get id() { + return this[kData].id; + } + + /** + * The name of the application. + */ + public get name() { + return this[kData].name; + } + + /** + * The icon hash of the application. + * + * @see https://discord.com/developers/docs/reference#image-formatting + */ + public get icon() { + return this[kData].icon; + } + + /** + * The description of the application. + */ + public get description() { + return this[kData].description; + } + + /** + * A list of RPC origin URLs, if RPC is enabled. + */ + public get rpcOrigins() { + return this[kData].rpc_origins; + } + + /** + * Whether the application is public. + * + * @remarks If `false`, only the app owner can add the app to guilds. + */ + public get botPublic() { + return this[kData].bot_public; + } + + /** + * Whether the application requires a code grant. + * + * @remarks When `true`, the app's bot will only join upon completion of the full OAuth2 grant flow. + */ + public get botRequiresCodeGrant() { + return this[kData].bot_require_code_grant; + } + + /** + * Partial user object for the bot user associated with the application. + */ + public get bot() { + return this[kData].bot; + } + + /** + * The URL of the app's Terms and Service. + */ + public get termsOfServiceURL() { + return this[kData].terms_of_service_url; + } + + /** + * The URL of the app's Privacy Policy. + */ + public get privacyPolicyURL() { + return this[kData].privacy_policy_url; + } + + /** + * Partial user object containing the owner of the application. + * + * @see https://discord.com/developers/docs/resources/user#user-object + */ + public get owner() { + return this[kData].owner; + } + + /** + * Hexadecimal encoded key for verification in interactions and the GameSDK's GetTicket function. + * + * @see https://discord.com/developers/docs/game-sdk/applications#getticket + */ + public get verifyKey() { + return this[kData].verify_key; + } + + /** + * The team this application belongs to. + * + * @see https://discord.com/developers/docs/topics/teams#data-models-team-object + */ + public get team() { + return this[kData].team; + } + + /** + * The ID of the guild associated with the app. + */ + public get guildId() { + return this[kData].guild_id; + } + + /** + * A partial object of the guild associated with the app. + */ + public get guild() { + return this[kData].guild; + } + + /** + * The id of the "Game SKU" that is created, if this application is a game sold on Discord, . + */ + public get primarySKUId() { + return this[kData].primary_sku_id; + } + + /** + * The URL that links to the store page, if the application is a game sold on Discord. + */ + public get slug() { + return this[kData].slug; + } + + /** + * The application's default rich presence invite cover image hash. + * + * @see https://discord.com/developers/docs/reference#image-formatting + */ + public get coverImage() { + return this[kData].cover_image; + } + + /** + * The application's public flags. + * + * @see https://discord.com/developers/docs/resources/application#application-object-application-flags + */ + public get flags() { + const flags = this[kData].flags; + return flags ? new ApplicationFlagsBitField(this[kData].flags as ApplicationFlags) : null; + } + + /** + * Approximate count of guilds the application has been added to. + */ + public get approximateGuildCount() { + return this[kData].approximate_guild_count; + } + + /** + * Approximate count of users that have installed the application + * (authorized with `application.commands` as a scope) + */ + public get approximateUserInstallCount() { + return this[kData].approximate_user_install_count; + } + + /** + * Approximate count of users that have OAuth2 authorizations for the app. + */ + public get approximateUserAuthorizationCount() { + return this[kData].approximate_user_authorization_count; + } + + /** + * An array of redirect URIs for the application. + */ + public get redirectURIs() { + return this[kData].redirect_uris; + } + + /** + * The interaction's endpoint URL for the application. + */ + public get interactionsEndpointURL() { + return this[kData].interactions_endpoint_url; + } + + /** + * The application's role connection verification entry point, which when configured will render the app as a verification method in the guild role verification configuration + */ + public get roleConnectionsVerificationURL() { + return this[kData].role_connections_verification_url; + } + + /** + * The event webhooks URL for the application to receive webhook events. + */ + public get eventWebhooksURL() { + return this[kData].event_webhooks_url; + } + + /** + * If webhook events are enabled for the app + */ + public get eventsWebhookStatus() { + return this[kData].event_webhooks_status; + } + + /** + * List of webhook event types the application subscribes to. + */ + public get eventWebhooksTypes() { + return this[kData].event_webhooks_types; + } + + /** + * Up to 5 tags of 20 maximum characters, used to describe the content and functionality of the application. + */ + public get tags() { + return this[kData].tags; + } + + /** + * Settings for the app's default in-app authorization link, if enabled. + */ + public get installParams() { + return this[kData].install_params; + } + + /** + * Default scopes and permissions for each supported installation context. Value for each key is an integration type configuration object. + */ + public get integrationTypesConfig() { + return this[kData].integration_types_config; + } + + /** + * Default custom authorization URL for the application, if enabled. + */ + public get customInstallURL() { + return this[kData].custom_install_url; + } +} diff --git a/packages/structures/src/application/index.ts b/packages/structures/src/application/index.ts new file mode 100644 index 000000000000..42e05d0760b1 --- /dev/null +++ b/packages/structures/src/application/index.ts @@ -0,0 +1 @@ +export * from './Application.js'; diff --git a/packages/structures/src/bitfields/ApplicationFlagsBitField.ts b/packages/structures/src/bitfields/ApplicationFlagsBitField.ts new file mode 100644 index 000000000000..7dcd138ed0fa --- /dev/null +++ b/packages/structures/src/bitfields/ApplicationFlagsBitField.ts @@ -0,0 +1,16 @@ +import { ApplicationFlags } from 'discord-api-types/v10'; +import { BitField } from './BitField'; + +/** + * Data structure that makes it easy to interact with a {@link Application#flags} bitfield. + */ +export class ApplicationFlagsBitField extends BitField { + /** + * Numeric application flags. + */ + public static override readonly Flags = ApplicationFlags; + + public override toJSON() { + return super.toJSON(true); + } +} diff --git a/packages/structures/src/bitfields/index.ts b/packages/structures/src/bitfields/index.ts index 9598b8090b84..60cf1a4460d8 100644 --- a/packages/structures/src/bitfields/index.ts +++ b/packages/structures/src/bitfields/index.ts @@ -1,5 +1,6 @@ export * from './BitField.js'; +export * from './ApplicationFlagsBitField.js'; export * from './AttachmentFlagsBitField.js'; export * from './ChannelFlagsBitField.js'; export * from './MessageFlagsBitField.js'; From 5528ccf14e4534a555200bdd96d1f10593c78298 Mon Sep 17 00:00:00 2001 From: Conrad306 Date: Thu, 22 Jan 2026 21:57:38 -0500 Subject: [PATCH 02/13] feat(structures): rename eventsWebhookStatus to eventWebhooksStatus --- packages/structures/src/application/Application.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/structures/src/application/Application.ts b/packages/structures/src/application/Application.ts index 8515893d5ca3..2c675b3929ae 100644 --- a/packages/structures/src/application/Application.ts +++ b/packages/structures/src/application/Application.ts @@ -220,7 +220,7 @@ export class Application extends /** * If webhook events are enabled for the app */ - public get eventsWebhookStatus() { + public get eventsWebhooksStatus() { return this[kData].event_webhooks_status; } From d2240eecbef672693e8a6fc1f7842ad844b29d0e Mon Sep 17 00:00:00 2001 From: Conrad306 Date: Thu, 22 Jan 2026 21:59:55 -0500 Subject: [PATCH 03/13] feat(structures): add application to index.ts --- packages/structures/src/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/structures/src/index.ts b/packages/structures/src/index.ts index 97ad34d052a2..f285972ea52e 100644 --- a/packages/structures/src/index.ts +++ b/packages/structures/src/index.ts @@ -1,3 +1,4 @@ +export * from './application/index.js'; export * from './bitfields/index.js'; export * from './channels/index.js'; export * from './emojis/index.js'; From 18c735ac56d3ae661413b1d8086f87fd9cdf80a7 Mon Sep 17 00:00:00 2001 From: Conrad306 Date: Fri, 23 Jan 2026 10:36:27 -0500 Subject: [PATCH 04/13] feat(structures): fix casing and remove substructures --- .../structures/src/application/Application.ts | 35 ++++--------------- packages/structures/src/messages/Message.ts | 2 -- 2 files changed, 7 insertions(+), 30 deletions(-) diff --git a/packages/structures/src/application/Application.ts b/packages/structures/src/application/Application.ts index 2c675b3929ae..6a492ad10983 100644 --- a/packages/structures/src/application/Application.ts +++ b/packages/structures/src/application/Application.ts @@ -4,10 +4,12 @@ import { ApplicationFlagsBitField } from '../bitfields'; import { kData } from '../utils/symbols'; import type { Partialize } from '../utils/types'; +// TODO: missing "Team" substructure /** * Represents an application on Discord. * * @typeParam Omitted - Specify the properties that will not be stored in the raw data field as a union, implement via `DataTemplate` + * @remarks Has substructure `User`, `Guild` and `Team`, which need to be instantiated and stored by an extending class using it. */ export class Application extends Structure { /** @@ -18,7 +20,7 @@ export class Application extends } /** - * The ID of the application. + * The id of the application. */ public get id() { return this[kData].id; @@ -73,35 +75,19 @@ export class Application extends } /** - * Partial user object for the bot user associated with the application. - */ - public get bot() { - return this[kData].bot; - } - - /** - * The URL of the app's Terms and Service. + * The URL of the app's terms and service. */ public get termsOfServiceURL() { return this[kData].terms_of_service_url; } /** - * The URL of the app's Privacy Policy. + * The URL of the app's privacy policy. */ public get privacyPolicyURL() { return this[kData].privacy_policy_url; } - /** - * Partial user object containing the owner of the application. - * - * @see https://discord.com/developers/docs/resources/user#user-object - */ - public get owner() { - return this[kData].owner; - } - /** * Hexadecimal encoded key for verification in interactions and the GameSDK's GetTicket function. * @@ -121,19 +107,12 @@ export class Application extends } /** - * The ID of the guild associated with the app. + * The id of the guild associated with the app. */ public get guildId() { return this[kData].guild_id; } - /** - * A partial object of the guild associated with the app. - */ - public get guild() { - return this[kData].guild; - } - /** * The id of the "Game SKU" that is created, if this application is a game sold on Discord, . */ @@ -220,7 +199,7 @@ export class Application extends /** * If webhook events are enabled for the app */ - public get eventsWebhooksStatus() { + public get eventWebhooksStatus() { return this[kData].event_webhooks_status; } diff --git a/packages/structures/src/messages/Message.ts b/packages/structures/src/messages/Message.ts index 7fa33895def5..5ac11b5159c4 100644 --- a/packages/structures/src/messages/Message.ts +++ b/packages/structures/src/messages/Message.ts @@ -7,8 +7,6 @@ import { kData, kEditedTimestamp } from '../utils/symbols.js'; import { isIdSet } from '../utils/type-guards.js'; import type { Partialize } from '../utils/types.js'; -// TODO: missing substructures: application - /** * Represents a message on Discord. * From aeefabb2bdf61a78c5c6815df35d22ff87c38ce4 Mon Sep 17 00:00:00 2001 From: Conrad306 Date: Fri, 23 Jan 2026 10:38:33 -0500 Subject: [PATCH 05/13] feat(structures): remove team substructure --- packages/structures/src/application/Application.ts | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/structures/src/application/Application.ts b/packages/structures/src/application/Application.ts index 6a492ad10983..449c744e3769 100644 --- a/packages/structures/src/application/Application.ts +++ b/packages/structures/src/application/Application.ts @@ -4,7 +4,8 @@ import { ApplicationFlagsBitField } from '../bitfields'; import { kData } from '../utils/symbols'; import type { Partialize } from '../utils/types'; -// TODO: missing "Team" substructure +// TODO: missing "team" substructure + /** * Represents an application on Discord. * @@ -97,15 +98,6 @@ export class Application extends return this[kData].verify_key; } - /** - * The team this application belongs to. - * - * @see https://discord.com/developers/docs/topics/teams#data-models-team-object - */ - public get team() { - return this[kData].team; - } - /** * The id of the guild associated with the app. */ From e06156cfadcc98c4965479650db4e34c6656175f Mon Sep 17 00:00:00 2001 From: Conrad306 Date: Fri, 23 Jan 2026 14:09:34 -0500 Subject: [PATCH 06/13] feat(structures): add createdAt and createdTimestamp to Application --- .../structures/src/application/Application.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/structures/src/application/Application.ts b/packages/structures/src/application/Application.ts index 449c744e3769..8b84459cb92a 100644 --- a/packages/structures/src/application/Application.ts +++ b/packages/structures/src/application/Application.ts @@ -1,7 +1,9 @@ +import { DiscordSnowflake } from '@sapphire/snowflake'; import type { APIApplication, ApplicationFlags } from 'discord-api-types/v10'; import { Structure } from '../Structure'; import { ApplicationFlagsBitField } from '../bitfields'; import { kData } from '../utils/symbols'; +import { isIdSet } from '../utils/type-guards'; import type { Partialize } from '../utils/types'; // TODO: missing "team" substructure @@ -229,4 +231,19 @@ export class Application extends public get customInstallURL() { return this[kData].custom_install_url; } + + /** + * The timestamp the application was created at. + */ + public get createdTimestamp() { + return isIdSet(this.id) ? DiscordSnowflake.timestampFrom(this.id) : null; + } + + /** + * The time the application was created at + */ + public get createdAt() { + const createdTimestamp = this.createdTimestamp; + return createdTimestamp ? new Date(createdTimestamp) : null; + } } From 0f77519c0979965ef4c8fca41c5e1648b610b0f5 Mon Sep 17 00:00:00 2001 From: Conrad306 Date: Sat, 24 Jan 2026 16:46:12 -0500 Subject: [PATCH 07/13] feat(structures): fix bitfield to use typeof and repair jsdoc links --- packages/structures/src/application/Application.ts | 8 ++++---- .../structures/src/bitfields/ApplicationFlagsBitField.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/structures/src/application/Application.ts b/packages/structures/src/application/Application.ts index 8b84459cb92a..9b3b8fde8a4d 100644 --- a/packages/structures/src/application/Application.ts +++ b/packages/structures/src/application/Application.ts @@ -39,7 +39,7 @@ export class Application extends /** * The icon hash of the application. * - * @see https://discord.com/developers/docs/reference#image-formatting + * @see {@link https://discord.com/developers/docs/reference#image-formatting} */ public get icon() { return this[kData].icon; @@ -94,7 +94,7 @@ export class Application extends /** * Hexadecimal encoded key for verification in interactions and the GameSDK's GetTicket function. * - * @see https://discord.com/developers/docs/game-sdk/applications#getticket + * @see {@link https://discord.com/developers/docs/game-sdk/applications#getticket} */ public get verifyKey() { return this[kData].verify_key; @@ -124,7 +124,7 @@ export class Application extends /** * The application's default rich presence invite cover image hash. * - * @see https://discord.com/developers/docs/reference#image-formatting + * @see {@link https://discord.com/developers/docs/reference#image-formatting} */ public get coverImage() { return this[kData].cover_image; @@ -133,7 +133,7 @@ export class Application extends /** * The application's public flags. * - * @see https://discord.com/developers/docs/resources/application#application-object-application-flags + * @see {@link https://discord.com/developers/docs/resources/application#application-object-application-flags} */ public get flags() { const flags = this[kData].flags; diff --git a/packages/structures/src/bitfields/ApplicationFlagsBitField.ts b/packages/structures/src/bitfields/ApplicationFlagsBitField.ts index 7dcd138ed0fa..c7cda3ce8855 100644 --- a/packages/structures/src/bitfields/ApplicationFlagsBitField.ts +++ b/packages/structures/src/bitfields/ApplicationFlagsBitField.ts @@ -4,7 +4,7 @@ import { BitField } from './BitField'; /** * Data structure that makes it easy to interact with a {@link Application#flags} bitfield. */ -export class ApplicationFlagsBitField extends BitField { +export class ApplicationFlagsBitField extends BitField { /** * Numeric application flags. */ From dc11d9e0c1fc2f01b26086bf2029e4f2e7df2edd Mon Sep 17 00:00:00 2001 From: keston-dev Date: Sun, 25 Jan 2026 09:51:01 -0500 Subject: [PATCH 08/13] feat(structures): repair JSDoc and property casing --- packages/structures/src/application/Application.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/structures/src/application/Application.ts b/packages/structures/src/application/Application.ts index 9b3b8fde8a4d..76db7efbbcf2 100644 --- a/packages/structures/src/application/Application.ts +++ b/packages/structures/src/application/Application.ts @@ -94,7 +94,7 @@ export class Application extends /** * Hexadecimal encoded key for verification in interactions and the GameSDK's GetTicket function. * - * @see {@link https://discord.com/developers/docs/game-sdk/applications#getticket} + * @see {@link https://github.com/discord/discord-api-docs/blob/legacy-gamesdk/docs/game_sdk/Applications.md#getticket} */ public get verifyKey() { return this[kData].verify_key; @@ -110,7 +110,7 @@ export class Application extends /** * The id of the "Game SKU" that is created, if this application is a game sold on Discord, . */ - public get primarySKUId() { + public get primarySkuId() { return this[kData].primary_sku_id; } From bced135d90c7536d770fe4e7ca4161bcaea4521c Mon Sep 17 00:00:00 2001 From: keston-dev Date: Thu, 29 Jan 2026 12:38:39 -0500 Subject: [PATCH 09/13] feat(structures): fix import extensions and match new flag check --- .../structures/src/application/Application.ts | 17 +++++++++-------- .../src/bitfields/ApplicationFlagsBitField.ts | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/structures/src/application/Application.ts b/packages/structures/src/application/Application.ts index 76db7efbbcf2..9da6c1568236 100644 --- a/packages/structures/src/application/Application.ts +++ b/packages/structures/src/application/Application.ts @@ -1,10 +1,10 @@ import { DiscordSnowflake } from '@sapphire/snowflake'; import type { APIApplication, ApplicationFlags } from 'discord-api-types/v10'; -import { Structure } from '../Structure'; -import { ApplicationFlagsBitField } from '../bitfields'; -import { kData } from '../utils/symbols'; -import { isIdSet } from '../utils/type-guards'; -import type { Partialize } from '../utils/types'; +import { Structure } from '../Structure.js'; +import { ApplicationFlagsBitField } from '../bitfields/ApplicationFlagsBitField.js'; +import { kData } from '../utils/symbols.js'; +import { isIdSet } from '../utils/type-guards.js'; +import type { Partialize } from '../utils/types.js'; // TODO: missing "team" substructure @@ -108,7 +108,7 @@ export class Application extends } /** - * The id of the "Game SKU" that is created, if this application is a game sold on Discord, . + * The id of the "Game SKU" that is created, if this application is a game sold on Discord. */ public get primarySkuId() { return this[kData].primary_sku_id; @@ -136,8 +136,9 @@ export class Application extends * @see {@link https://discord.com/developers/docs/resources/application#application-object-application-flags} */ public get flags() { - const flags = this[kData].flags; - return flags ? new ApplicationFlagsBitField(this[kData].flags as ApplicationFlags) : null; + return 'flags' in this[kData] && typeof this[kData].flags === 'number' + ? new ApplicationFlagsBitField(this[kData].flags as ApplicationFlags) + : null; } /** diff --git a/packages/structures/src/bitfields/ApplicationFlagsBitField.ts b/packages/structures/src/bitfields/ApplicationFlagsBitField.ts index c7cda3ce8855..846819ceb914 100644 --- a/packages/structures/src/bitfields/ApplicationFlagsBitField.ts +++ b/packages/structures/src/bitfields/ApplicationFlagsBitField.ts @@ -1,5 +1,5 @@ import { ApplicationFlags } from 'discord-api-types/v10'; -import { BitField } from './BitField'; +import { BitField } from './BitField.js'; /** * Data structure that makes it easy to interact with a {@link Application#flags} bitfield. From 5debdbe6f2a29e844ec8f40f0a9fb816a954cf5a Mon Sep 17 00:00:00 2001 From: keston-dev Date: Thu, 29 Jan 2026 13:41:03 -0500 Subject: [PATCH 10/13] feat(structures): use isFieldSet and add image URL getters --- .../structures/src/application/Application.ts | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/packages/structures/src/application/Application.ts b/packages/structures/src/application/Application.ts index 9da6c1568236..7f2b09ba1beb 100644 --- a/packages/structures/src/application/Application.ts +++ b/packages/structures/src/application/Application.ts @@ -1,13 +1,19 @@ import { DiscordSnowflake } from '@sapphire/snowflake'; -import type { APIApplication, ApplicationFlags } from 'discord-api-types/v10'; +import { + type ApplicationIconFormat, + type APIApplication, + type ApplicationCoverFormat, + type ApplicationFlags, + CDNRoutes, + ImageFormat, + RouteBases, +} from 'discord-api-types/v10'; import { Structure } from '../Structure.js'; import { ApplicationFlagsBitField } from '../bitfields/ApplicationFlagsBitField.js'; import { kData } from '../utils/symbols.js'; -import { isIdSet } from '../utils/type-guards.js'; +import { isFieldSet, isIdSet } from '../utils/type-guards.js'; import type { Partialize } from '../utils/types.js'; -// TODO: missing "team" substructure - /** * Represents an application on Discord. * @@ -45,6 +51,17 @@ export class Application extends return this[kData].icon; } + /** + * Get the URL to the icon. + * + * @param format - the file format to use + */ + public iconURL(format: ApplicationIconFormat = ImageFormat.WebP) { + return isIdSet(this[kData].id) && isFieldSet(this[kData], 'icon', 'string') + ? `${RouteBases.cdn}${CDNRoutes.applicationCover(this[kData].id.toString(), this[kData].icon, format)}` + : null; + } + /** * The description of the application. */ @@ -130,13 +147,24 @@ export class Application extends return this[kData].cover_image; } + /** + * Get the URL to the cover image. + * + * @param format - the file format to use + */ + public coverImageURL(format: ApplicationCoverFormat = ImageFormat.WebP) { + return isIdSet(this[kData].id) && isFieldSet(this[kData], 'cover_image', 'string') + ? `${RouteBases.cdn}${CDNRoutes.applicationCover(this[kData].id.toString(), this[kData].cover_image, format)}` + : null; + } + /** * The application's public flags. * * @see {@link https://discord.com/developers/docs/resources/application#application-object-application-flags} */ public get flags() { - return 'flags' in this[kData] && typeof this[kData].flags === 'number' + return isFieldSet(this[kData], 'flags', 'number') ? new ApplicationFlagsBitField(this[kData].flags as ApplicationFlags) : null; } From 05f5d2b811228509e8dc6552abf6e11589e565e4 Mon Sep 17 00:00:00 2001 From: keston-dev Date: Thu, 29 Jan 2026 13:42:10 -0500 Subject: [PATCH 11/13] feat(structures): fix wrong CDN route --- packages/structures/src/application/Application.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/structures/src/application/Application.ts b/packages/structures/src/application/Application.ts index 7f2b09ba1beb..ab4983d2404f 100644 --- a/packages/structures/src/application/Application.ts +++ b/packages/structures/src/application/Application.ts @@ -58,7 +58,7 @@ export class Application extends */ public iconURL(format: ApplicationIconFormat = ImageFormat.WebP) { return isIdSet(this[kData].id) && isFieldSet(this[kData], 'icon', 'string') - ? `${RouteBases.cdn}${CDNRoutes.applicationCover(this[kData].id.toString(), this[kData].icon, format)}` + ? `${RouteBases.cdn}${CDNRoutes.applicationIcon(this[kData].id.toString(), this[kData].icon, format)}` : null; } From 3c87423b748b197d0fe68e7c64dd95e4a95f49f3 Mon Sep 17 00:00:00 2001 From: keston-dev Date: Thu, 5 Feb 2026 11:52:43 -0500 Subject: [PATCH 12/13] fix(structures): add missing datatemplate --- packages/structures/src/application/Application.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/structures/src/application/Application.ts b/packages/structures/src/application/Application.ts index ab4983d2404f..766f02dce661 100644 --- a/packages/structures/src/application/Application.ts +++ b/packages/structures/src/application/Application.ts @@ -21,6 +21,8 @@ import type { Partialize } from '../utils/types.js'; * @remarks Has substructure `User`, `Guild` and `Team`, which need to be instantiated and stored by an extending class using it. */ export class Application extends Structure { + public static override readonly DataTemplate: Partial = {}; + /** * @param data - The raw data from the API for the application. */ From 7f6cc1f7d9390039d295007e702cb1ec6f31ce42 Mon Sep 17 00:00:00 2001 From: keston-dev Date: Sat, 21 Feb 2026 12:12:24 -0500 Subject: [PATCH 13/13] fix: change createdAt to proposed createdDate structure --- packages/structures/src/application/Application.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/structures/src/application/Application.ts b/packages/structures/src/application/Application.ts index 766f02dce661..6be57c222668 100644 --- a/packages/structures/src/application/Application.ts +++ b/packages/structures/src/application/Application.ts @@ -271,9 +271,9 @@ export class Application extends } /** - * The time the application was created at + * The date the application was created on */ - public get createdAt() { + public get createdDate() { const createdTimestamp = this.createdTimestamp; return createdTimestamp ? new Date(createdTimestamp) : null; }