@@ -37,6 +37,12 @@ class EntitlementManager extends CachedManager {
3737 * @typedef {SKU|Snowflake } SKUResolvable
3838 */
3939
40+ /**
41+ * Options used to fetch an entitlement
42+ * @typedef {BaseFetchOptions } FetchEntitlementOptions
43+ * @property {EntitlementResolvable } entitlement The entitlement to fetch
44+ */
45+
4046 /**
4147 * Options used to fetch entitlements
4248 * @typedef {Object } FetchEntitlementsOptions
@@ -45,6 +51,7 @@ class EntitlementManager extends CachedManager {
4551 * @property {UserResolvable } [user] The user to fetch entitlements for
4652 * @property {SKUResolvable[] } [skus] The SKUs to fetch entitlements for
4753 * @property {boolean } [excludeEnded] Whether to exclude ended entitlements
54+ * @property {boolean } [excludeDeleted] Whether to exclude deleted entitlements
4855 * @property {boolean } [cache=true] Whether to cache the fetched entitlements
4956 * @property {Snowflake } [before] Consider only entitlements before this entitlement id
5057 * @property {Snowflake } [after] Consider only entitlements after this entitlement id
@@ -53,21 +60,49 @@ class EntitlementManager extends CachedManager {
5360
5461 /**
5562 * Fetches entitlements for this application
56- * @param {FetchEntitlementsOptions } [options={}] Options for fetching the entitlements
57- * @returns {Promise<Collection<Snowflake, Entitlement>> }
63+ * @param {EntitlementResolvable|FetchEntitlementOptions|FetchEntitlementsOptions } [options]
64+ * Options for fetching the entitlements
65+ * @returns {Promise<Entitlement|Collection<Snowflake, Entitlement>> }
5866 */
59- async fetch ( { limit, guild, user, skus, excludeEnded, cache = true , before, after } = { } ) {
67+ async fetch ( options ) {
68+ if ( ! options ) return this . _fetchMany ( options ) ;
69+ const { entitlement, cache, force } = options ;
70+ const resolvedEntitlement = this . resolveId ( entitlement ?? options ) ;
71+
72+ if ( resolvedEntitlement ) {
73+ return this . _fetchSingle ( { entitlement : resolvedEntitlement , cache, force } ) ;
74+ }
75+
76+ return this . _fetchMany ( options ) ;
77+ }
78+
79+ async _fetchSingle ( { entitlement, cache, force = false } ) {
80+ if ( ! force ) {
81+ const existing = this . cache . get ( entitlement ) ;
82+
83+ if ( existing ) {
84+ return existing ;
85+ }
86+ }
87+
88+ const data = await this . client . rest . get ( Routes . entitlement ( this . client . application . id , entitlement ) ) ;
89+ return this . _add ( data , cache ) ;
90+ }
91+
92+ async _fetchMany ( { limit, guild, user, skus, excludeEnded, excludeDeleted, cache, before, after } = { } ) {
6093 const query = makeURLSearchParams ( {
6194 limit,
6295 guild_id : guild && this . client . guilds . resolveId ( guild ) ,
6396 user_id : user && this . client . users . resolveId ( user ) ,
6497 sku_ids : skus ?. map ( sku => resolveSKUId ( sku ) ) . join ( ',' ) ,
6598 exclude_ended : excludeEnded ,
99+ exclude_deleted : excludeDeleted ,
66100 before,
67101 after,
68102 } ) ;
69103
70104 const entitlements = await this . client . rest . get ( Routes . entitlements ( this . client . application . id ) , { query } ) ;
105+
71106 return entitlements . reduce (
72107 ( coll , entitlement ) => coll . set ( entitlement . id , this . _add ( entitlement , cache ) ) ,
73108 new Collection ( ) ,
0 commit comments