1+ // Copyright (c) 2021-2022 BuiltByBit (Mick Capital Pty. Ltd.)
2+ // MIT License (https://github.com/BuiltByBit/js-api-wrapper/blob/main/LICENSE)
3+
4+ const { SortOptions } = require ( "../../SortOptions" ) ;
5+
6+ /**
7+ * @typedef {object } AddonPurchase
8+ * @property {number } purchase_id
9+ * @property {number } purchaser_id
10+ * @property {boolean } renewal
11+ * @property {string } status
12+ * @property {number } price
13+ * @property {string } currency
14+ * @property {number } purchase_date
15+ * @property {number } validation_date
16+ */
17+
18+ /**
19+ * @typedef {object } AddonLicense
20+ * @property {number } license_id
21+ * @property {number } purchase_id
22+ * @property {number } issued_to
23+ * @property {number } issued_by
24+ * @property {number } issued_at
25+ * @property {boolean } active
26+ */
27+
28+ /** A helper type for resource addon-related API endpoints. */
29+ class AddonsHelper {
30+ #wrapper;
31+
32+ constructor ( wrapper ) {
33+ this . #wrapper = wrapper ;
34+ }
35+
36+ /** List a page of purchases for a given addon.
37+ *
38+ * @param {number } addonId The identifier of the addon.
39+ * @param {SortOptions | undefined } sort An optional set of sort options.
40+ *
41+ * @return {Array<AddonPurchase> } An array of raw data objects.
42+ */
43+ async listPurchases ( addonId , sort ) {
44+ return await this . #wrapper. http ( ) . get ( `/addons/${ addonId } /purchases/` , sort ) ;
45+ }
46+
47+ /** List all pages of purchases for a given addon.
48+ *
49+ * @param {number } addonId The identifier of the addon.
50+ * @param {SortOptions | undefined } sort An optional set of sort options.
51+ *
52+ * @return {Array<AddonPurchase> } An array of raw data objects.
53+ */
54+ async listAllPurchases ( addonId , sort ) {
55+ return await this . #wrapper. http ( ) . listUntil ( `/addons/${ addonId } /purchases/` , ( ) => true , sort ) ;
56+ }
57+
58+ /** List multiple pages of purchases for a given addon until a condition is no longer met.
59+ *
60+ * @param {number } addonId The identifier of the addon.
61+ * @param {function(AddonPurchase):boolean } shouldContinue A fn which determines if further pages are requested.
62+ * @param {SortOptions | undefined } sort An optional set of sort options.
63+ *
64+ * @return {Array<AddonPurchase> } An array of raw data objects.
65+ */
66+ async listPurchasesUntil ( addonId , shouldContinue , sort ) {
67+ return await this . #wrapper. http ( ) . listUntil ( `/addons/${ addonId } /purchases/` , shouldContinue , sort ) ;
68+ }
69+
70+ /** List a page of purchases by member for a given addon.
71+ *
72+ * @param {number } addonId The identifier of the addon.
73+ * @param {number } memberId The identifier of the member.
74+ * @param {SortOptions | undefined } sort An optional set of sort options.
75+ *
76+ * @return {Array<AddonPurchase> } An array of raw data objects.
77+ */
78+ async listPurchasesByMember ( addonId , memberId , sort ) {
79+ return await this . #wrapper. http ( ) . get ( `/addons/${ addonId } /purchases/member/${ memberId } /` , sort ) ;
80+ }
81+
82+ /** List a page of licenses for a given addon.
83+ *
84+ * @param {number } addonId The identifier of the addon.
85+ * @param {SortOptions | undefined } sort An optional set of sort options.
86+ *
87+ * @return {Array<AddonLicense> } An array of raw data objects.
88+ */
89+ async listLicenses ( addonId , sort ) {
90+ return await this . #wrapper. http ( ) . get ( `/addons/${ addonId } /licenses/` , sort ) ;
91+ }
92+
93+ /** List all pages of licenses for a given addon.
94+ *
95+ * @param {number } addonId The identifier of the addon.
96+ * @param {SortOptions | undefined } sort An optional set of sort options.
97+ *
98+ * @return {Array<AddonLicense> } An array of raw data objects.
99+ */
100+ async listAllLicenses ( addonId , sort ) {
101+ return await this . #wrapper. http ( ) . listUntil ( `/addons/${ addonId } /licenses/` , ( ) => true , sort ) ;
102+ }
103+
104+ /** List multiple pages of licenses for a given addon until a condition is no longer met.
105+ *
106+ * @param {number } addonId The identifier of the addon.
107+ * @param {function(AddonLicense):boolean } shouldContinue A fn which determines if further pages are requested.
108+ * @param {SortOptions | undefined } sort An optional set of sort options.
109+ *
110+ * @return {Array<AddonLicense> } An array of raw data objects.
111+ */
112+ async listLicensesUntil ( addonId , shouldContinue , sort ) {
113+ return await this . #wrapper. http ( ) . listUntil ( `/addons/${ addonId } /licenses/` , shouldContinue , sort ) ;
114+ }
115+
116+ /** List a page of licenses by member for a given addon.
117+ *
118+ * @param {number } addonId The identifier of the addon.
119+ * @param {number } memberId The identifier of the member.
120+ * @param {SortOptions | undefined } sort An optional set of sort options.
121+ *
122+ * @return {Array<AddonLicense> } An array of raw data objects.
123+ */
124+ async listLicensesByMember ( addonId , memberId , sort ) {
125+ return await this . #wrapper. http ( ) . get ( `/addons/${ addonId } /licenses/member/${ memberId } /` , sort ) ;
126+ }
127+ }
128+
129+ exports . AddonsHelper = AddonsHelper ;
0 commit comments