feat: add subscriptions (#10486)

* feat: add subscriptions

* docs: requested changes

Co-authored-by: Almeida <github@almeidx.dev>

---------

Co-authored-by: Almeida <github@almeidx.dev>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
Danial Raza
2024-11-04 11:48:41 +01:00
committed by Jiralite
parent 5c5b545c38
commit 2deea25e97
2 changed files with 52 additions and 5 deletions

View File

@@ -6,6 +6,9 @@ import {
type RESTGetAPIEntitlementsQuery, type RESTGetAPIEntitlementsQuery,
type RESTGetAPIEntitlementsResult, type RESTGetAPIEntitlementsResult,
type RESTGetAPISKUsResult, type RESTGetAPISKUsResult,
type RESTGetAPISKUSubscriptionResult,
type RESTGetAPISKUSubscriptionsQuery,
type RESTGetAPISKUSubscriptionsResult,
type RESTPostAPIEntitlementJSONBody, type RESTPostAPIEntitlementJSONBody,
type RESTPostAPIEntitlementResult, type RESTPostAPIEntitlementResult,
type Snowflake, type Snowflake,
@@ -17,17 +20,55 @@ export class MonetizationAPI {
/** /**
* Fetches the SKUs for an application. * 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. * @param options - The options for fetching the SKUs.
*/ */
public async getSKUs(applicationId: Snowflake, { signal }: Pick<RequestData, 'signal'> = {}) { public async getSKUs(applicationId: Snowflake, { signal }: Pick<RequestData, 'signal'> = {}) {
return this.rest.get(Routes.skus(applicationId), { signal }) as Promise<RESTGetAPISKUsResult>; return this.rest.get(Routes.skus(applicationId), { signal }) as Promise<RESTGetAPISKUsResult>;
} }
/**
* 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<RequestData, 'signal'> = {},
) {
return this.rest.get(Routes.skuSubscriptions(skuId), {
signal,
query: makeURLSearchParams(query),
}) as Promise<RESTGetAPISKUSubscriptionsResult>;
}
/**
* 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<RequestData, 'signal'> = {},
) {
return this.rest.get(Routes.skuSubscription(skuId, subscriptionId), {
signal,
}) as Promise<RESTGetAPISKUSubscriptionResult>;
}
/** /**
* Fetches the entitlements for an application. * 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 applicationId - The application id to fetch entitlements for
* @param query - The query options for fetching entitlements * @param query - The query options for fetching entitlements
* @param options - The 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. * 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 applicationId - The application id to create the entitlement for
* @param body - The data for creating the entitlement * @param body - The data for creating the entitlement
* @param options - The options 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. * 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 applicationId - The application id to delete the entitlement for
* @param entitlementId - The entitlement id to delete * @param entitlementId - The entitlement id to delete
* @param options - The options for deleting the entitlement * @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. * 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 applicationId - The application id to consume the entitlement for
* @param entitlementId - The entitlement id to consume * @param entitlementId - The entitlement id to consume
* @param options - The options for consuming the entitlement * @param options - The options for consuming the entitlement

View File

@@ -63,6 +63,9 @@ import {
type GatewayStageInstanceCreateDispatchData, type GatewayStageInstanceCreateDispatchData,
type GatewayStageInstanceDeleteDispatchData, type GatewayStageInstanceDeleteDispatchData,
type GatewayStageInstanceUpdateDispatchData, type GatewayStageInstanceUpdateDispatchData,
type GatewaySubscriptionCreateDispatchData,
type GatewaySubscriptionDeleteDispatchData,
type GatewaySubscriptionUpdateDispatchData,
type GatewayThreadCreateDispatchData, type GatewayThreadCreateDispatchData,
type GatewayThreadDeleteDispatchData, type GatewayThreadDeleteDispatchData,
type GatewayThreadListSyncDispatchData, type GatewayThreadListSyncDispatchData,
@@ -157,6 +160,9 @@ export interface MappedEvents {
[GatewayDispatchEvents.StageInstanceCreate]: [ToEventProps<GatewayStageInstanceCreateDispatchData>]; [GatewayDispatchEvents.StageInstanceCreate]: [ToEventProps<GatewayStageInstanceCreateDispatchData>];
[GatewayDispatchEvents.StageInstanceDelete]: [ToEventProps<GatewayStageInstanceDeleteDispatchData>]; [GatewayDispatchEvents.StageInstanceDelete]: [ToEventProps<GatewayStageInstanceDeleteDispatchData>];
[GatewayDispatchEvents.StageInstanceUpdate]: [ToEventProps<GatewayStageInstanceUpdateDispatchData>]; [GatewayDispatchEvents.StageInstanceUpdate]: [ToEventProps<GatewayStageInstanceUpdateDispatchData>];
[GatewayDispatchEvents.SubscriptionCreate]: [ToEventProps<GatewaySubscriptionCreateDispatchData>];
[GatewayDispatchEvents.SubscriptionDelete]: [ToEventProps<GatewaySubscriptionDeleteDispatchData>];
[GatewayDispatchEvents.SubscriptionUpdate]: [ToEventProps<GatewaySubscriptionUpdateDispatchData>];
[GatewayDispatchEvents.ThreadCreate]: [ToEventProps<GatewayThreadCreateDispatchData>]; [GatewayDispatchEvents.ThreadCreate]: [ToEventProps<GatewayThreadCreateDispatchData>];
[GatewayDispatchEvents.ThreadDelete]: [ToEventProps<GatewayThreadDeleteDispatchData>]; [GatewayDispatchEvents.ThreadDelete]: [ToEventProps<GatewayThreadDeleteDispatchData>];
[GatewayDispatchEvents.ThreadListSync]: [ToEventProps<GatewayThreadListSyncDispatchData>]; [GatewayDispatchEvents.ThreadListSync]: [ToEventProps<GatewayThreadListSyncDispatchData>];