Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add subscriptions #10486

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 44 additions & 5 deletions packages/core/src/api/monetization.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ import {
type RESTGetAPIEntitlementsQuery,
type RESTGetAPIEntitlementsResult,
type RESTGetAPISKUsResult,
type RESTGetAPISKUSubscriptionResult,
type RESTGetAPISKUSubscriptionsQuery,
type RESTGetAPISKUSubscriptionsResult,
type RESTPostAPIEntitlementJSONBody,
type RESTPostAPIEntitlementResult,
type Snowflake,
Expand All @@ -17,17 +20,53 @@ 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 options - The options for fetching the SKUs.
*/
public async getSKUs(applicationId: Snowflake, { signal }: Pick<RequestData, 'signal'> = {}) {
return this.rest.get(Routes.skus(applicationId), { signal }) as Promise<RESTGetAPISKUsResult>;
}

/**
* Fetches the subscriptions for a 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 the subscription for a SKU.
*
* @see {@link https://discord.com/developers/docs/resources/subscription#get-sku-subscription}
* @param skuId - The SKU id to fetch subscription for
* @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.
*
* @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
Expand All @@ -46,7 +85,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
Expand All @@ -65,7 +104,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
Expand All @@ -81,7 +120,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
Expand Down