From 1fd662629d24521426c581cd89025e17820ec3e9 Mon Sep 17 00:00:00 2001 From: Danial Raza Date: Mon, 4 Nov 2024 11:48:41 +0100 Subject: [PATCH] feat: add subscriptions (#10486) * feat: add subscriptions * docs: requested changes Co-authored-by: Almeida --------- Co-authored-by: Almeida Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/core/src/api/monetization.ts | 51 ++++++++++++++++++++++++--- packages/core/src/client.ts | 6 ++++ 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/packages/core/src/api/monetization.ts b/packages/core/src/api/monetization.ts index 736b8930a1e5..c4cd8dade6b6 100644 --- a/packages/core/src/api/monetization.ts +++ b/packages/core/src/api/monetization.ts @@ -6,6 +6,9 @@ import { type RESTGetAPIEntitlementsQuery, type RESTGetAPIEntitlementsResult, type RESTGetAPISKUsResult, + type RESTGetAPISKUSubscriptionResult, + type RESTGetAPISKUSubscriptionsQuery, + type RESTGetAPISKUSubscriptionsResult, type RESTPostAPIEntitlementJSONBody, type RESTPostAPIEntitlementResult, type Snowflake, @@ -17,17 +20,55 @@ export class MonetizationAPI { /** * Fetches the SKUs for an application. * - * @see {@link https://discord.com/developers/docs/monetization/skus#list-skus} + * @see {@link https://discord.com/developers/docs/resources/sku#list-skus} + * @param applicationId - The application id to fetch SKUs for * @param options - The options for fetching the SKUs. */ public async getSKUs(applicationId: Snowflake, { signal }: Pick = {}) { return this.rest.get(Routes.skus(applicationId), { signal }) as Promise; } + /** + * Fetches subscriptions for an SKU. + * + * @see {@link https://discord.com/developers/docs/resources/subscription#list-sku-subscriptions} + * @param skuId - The SKU id to fetch subscriptions for + * @param query - The query options for fetching subscriptions + * @param options - The options for fetching subscriptions + */ + public async getSKUSubscriptions( + skuId: Snowflake, + query: RESTGetAPISKUSubscriptionsQuery, + { signal }: Pick = {}, + ) { + return this.rest.get(Routes.skuSubscriptions(skuId), { + signal, + query: makeURLSearchParams(query), + }) as Promise; + } + + /** + * Fetches a subscription for an SKU. + * + * @see {@link https://discord.com/developers/docs/resources/subscription#get-sku-subscription} + * @param skuId - The SKU id to fetch subscription for + * @param subscriptionId - The subscription id to fetch + * @param options - The options for fetching the subscription + */ + public async getSKUSubscription( + skuId: Snowflake, + subscriptionId: Snowflake, + { signal }: Pick = {}, + ) { + return this.rest.get(Routes.skuSubscription(skuId, subscriptionId), { + signal, + }) as Promise; + } + /** * Fetches the entitlements for an application. * - * @see {@link https://discord.com/developers/docs/monetization/entitlements#list-entitlements} + * @see {@link https://discord.com/developers/docs/resources/entitlement#list-entitlements} * @param applicationId - The application id to fetch entitlements for * @param query - The query options for fetching entitlements * @param options - The options for fetching entitlements @@ -46,7 +87,7 @@ export class MonetizationAPI { /** * Creates a test entitlement for an application's SKU. * - * @see {@link https://discord.com/developers/docs/monetization/entitlements#create-test-entitlement} + * @see {@link https://discord.com/developers/docs/resources/entitlement#create-test-entitlement} * @param applicationId - The application id to create the entitlement for * @param body - The data for creating the entitlement * @param options - The options for creating the entitlement @@ -65,7 +106,7 @@ export class MonetizationAPI { /** * Deletes a test entitlement for an application's SKU. * - * @see {@link https://discord.com/developers/docs/monetization/entitlements#delete-test-entitlement} + * @see {@link https://discord.com/developers/docs/resources/entitlement#delete-test-entitlement} * @param applicationId - The application id to delete the entitlement for * @param entitlementId - The entitlement id to delete * @param options - The options for deleting the entitlement @@ -81,7 +122,7 @@ export class MonetizationAPI { /** * Marks a given entitlement for the user as consumed. Only available for One-Time Purchase consumable SKUs. * - * @see {@link https://discord.com/developers/docs/monetization/entitlements#consume-an-entitlement} + * @see {@link https://discord.com/developers/docs/resources/entitlement#consume-an-entitlement} * @param applicationId - The application id to consume the entitlement for * @param entitlementId - The entitlement id to consume * @param options - The options for consuming the entitlement diff --git a/packages/core/src/client.ts b/packages/core/src/client.ts index 23b1110c0ad1..5bb1c96b7322 100644 --- a/packages/core/src/client.ts +++ b/packages/core/src/client.ts @@ -66,6 +66,9 @@ import { type GatewayStageInstanceCreateDispatchData, type GatewayStageInstanceDeleteDispatchData, type GatewayStageInstanceUpdateDispatchData, + type GatewaySubscriptionCreateDispatchData, + type GatewaySubscriptionDeleteDispatchData, + type GatewaySubscriptionUpdateDispatchData, type GatewayThreadCreateDispatchData, type GatewayThreadDeleteDispatchData, type GatewayThreadListSyncDispatchData, @@ -163,6 +166,9 @@ export interface MappedEvents { [GatewayDispatchEvents.StageInstanceCreate]: [ToEventProps]; [GatewayDispatchEvents.StageInstanceDelete]: [ToEventProps]; [GatewayDispatchEvents.StageInstanceUpdate]: [ToEventProps]; + [GatewayDispatchEvents.SubscriptionCreate]: [ToEventProps]; + [GatewayDispatchEvents.SubscriptionDelete]: [ToEventProps]; + [GatewayDispatchEvents.SubscriptionUpdate]: [ToEventProps]; [GatewayDispatchEvents.ThreadCreate]: [ToEventProps]; [GatewayDispatchEvents.ThreadDelete]: [ToEventProps]; [GatewayDispatchEvents.ThreadListSync]: [ToEventProps];