Skip to content

Commit

Permalink
feat: add subscriptions
Browse files Browse the repository at this point in the history
  • Loading branch information
sdanialraza committed Sep 17, 2024
1 parent cda8d88 commit 567c3e7
Showing 1 changed file with 44 additions and 5 deletions.
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

0 comments on commit 567c3e7

Please sign in to comment.