Skip to content

Commit ffd1bdd

Browse files
committed
Add addons helper, rerun types
1 parent d7fa728 commit ffd1bdd

File tree

7 files changed

+260
-2
lines changed

7 files changed

+260
-2
lines changed
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
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;

src/helpers/resources/ResourcesHelper.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const { PurchasesHelper } = require("./PurchasesHelper.js");
77
const { ReviewsHelper } = require("./ReviewsHelper.js");
88
const { UpdatesHelper } = require("./UpdatesHelper.js");
99
const { VersionsHelper } = require("./VersionsHelper.js");
10+
const { AddonsHelper } = require("./AddonsHelper.js");
1011

1112
const { SortOptions } = require("../../SortOptions");
1213

@@ -260,6 +261,14 @@ class ResourcesHelper {
260261
versions() {
261262
return new VersionsHelper(this.#wrapper);
262263
}
264+
265+
/** Access addon-related helper functions.
266+
*
267+
* @return {AddonsHelper} A newly-constructed addon helper instance.
268+
*/
269+
addons() {
270+
return new AddonsHelper(this.#wrapper);
271+
}
263272
}
264273

265274
exports.ResourcesHelper = ResourcesHelper;

types/Wrapper.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/** The primary wrapping type for interactions with BuiltByBit's API. */
22
export class Wrapper {
33
/** The base API URL and version which will be prepended to non-absolute paths by axios. */
4-
static "__#18@#BASE_URL": string;
4+
static "__#19@#BASE_URL": string;
55
/** Initialise this wrapper with a provided API token.
66
*
77
* <br><br>
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
export type AddonPurchase = {
2+
purchase_id: number;
3+
purchaser_id: number;
4+
renewal: boolean;
5+
status: string;
6+
price: number;
7+
currency: string;
8+
purchase_date: number;
9+
validation_date: number;
10+
};
11+
export type AddonLicense = {
12+
license_id: number;
13+
purchase_id: number;
14+
issued_to: number;
15+
issued_by: number;
16+
issued_at: number;
17+
active: boolean;
18+
};
19+
/**
20+
* @typedef {object} AddonPurchase
21+
* @property {number} purchase_id
22+
* @property {number} purchaser_id
23+
* @property {boolean} renewal
24+
* @property {string} status
25+
* @property {number} price
26+
* @property {string} currency
27+
* @property {number} purchase_date
28+
* @property {number} validation_date
29+
*/
30+
/**
31+
* @typedef {object} AddonLicense
32+
* @property {number} license_id
33+
* @property {number} purchase_id
34+
* @property {number} issued_to
35+
* @property {number} issued_by
36+
* @property {number} issued_at
37+
* @property {boolean} active
38+
*/
39+
/** A helper type for resource addon-related API endpoints. */
40+
export class AddonsHelper {
41+
constructor(wrapper: any);
42+
/** List a page of purchases for a given addon.
43+
*
44+
* @param {number} addonId The identifier of the addon.
45+
* @param {SortOptions | undefined} sort An optional set of sort options.
46+
*
47+
* @return {Array<AddonPurchase>} An array of raw data objects.
48+
*/
49+
listPurchases(addonId: number, sort: SortOptions | undefined): Array<AddonPurchase>;
50+
/** List all pages of purchases for a given addon.
51+
*
52+
* @param {number} addonId The identifier of the addon.
53+
* @param {SortOptions | undefined} sort An optional set of sort options.
54+
*
55+
* @return {Array<AddonPurchase>} An array of raw data objects.
56+
*/
57+
listAllPurchases(addonId: number, sort: SortOptions | undefined): Array<AddonPurchase>;
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+
listPurchasesUntil(addonId: number, shouldContinue: (arg0: AddonPurchase) => boolean, sort: SortOptions | undefined): Array<AddonPurchase>;
67+
/** List a page of purchases by member for a given addon.
68+
*
69+
* @param {number} addonId The identifier of the addon.
70+
* @param {number} memberId The identifier of the member.
71+
* @param {SortOptions | undefined} sort An optional set of sort options.
72+
*
73+
* @return {Array<AddonPurchase>} An array of raw data objects.
74+
*/
75+
listPurchasesByMember(addonId: number, memberId: number, sort: SortOptions | undefined): Array<AddonPurchase>;
76+
/** List a page of licenses for a given addon.
77+
*
78+
* @param {number} addonId The identifier of the addon.
79+
* @param {SortOptions | undefined} sort An optional set of sort options.
80+
*
81+
* @return {Array<AddonLicense>} An array of raw data objects.
82+
*/
83+
listLicenses(addonId: number, sort: SortOptions | undefined): Array<AddonLicense>;
84+
/** List all pages of licenses for a given addon.
85+
*
86+
* @param {number} addonId The identifier of the addon.
87+
* @param {SortOptions | undefined} sort An optional set of sort options.
88+
*
89+
* @return {Array<AddonLicense>} An array of raw data objects.
90+
*/
91+
listAllLicenses(addonId: number, sort: SortOptions | undefined): Array<AddonLicense>;
92+
/** List multiple pages of licenses for a given addon until a condition is no longer met.
93+
*
94+
* @param {number} addonId The identifier of the addon.
95+
* @param {function(AddonLicense):boolean} shouldContinue A fn which determines if further pages are requested.
96+
* @param {SortOptions | undefined} sort An optional set of sort options.
97+
*
98+
* @return {Array<AddonLicense>} An array of raw data objects.
99+
*/
100+
listLicensesUntil(addonId: number, shouldContinue: (arg0: AddonLicense) => boolean, sort: SortOptions | undefined): Array<AddonLicense>;
101+
/** List a page of licenses by member for a given addon.
102+
*
103+
* @param {number} addonId The identifier of the addon.
104+
* @param {number} memberId The identifier of the member.
105+
* @param {SortOptions | undefined} sort An optional set of sort options.
106+
*
107+
* @return {Array<AddonLicense>} An array of raw data objects.
108+
*/
109+
listLicensesByMember(addonId: number, memberId: number, sort: SortOptions | undefined): Array<AddonLicense>;
110+
#private;
111+
}
112+
import { SortOptions } from "../../SortOptions";
113+
//# sourceMappingURL=AddonsHelper.d.ts.map

types/helpers/resources/AddonsHelper.d.ts.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

types/helpers/resources/ResourcesHelper.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,11 @@ export class ResourcesHelper {
211211
* @return {VersionsHelper} A newly-constructed version helper instance.
212212
*/
213213
versions(): VersionsHelper;
214+
/** Access addon-related helper functions.
215+
*
216+
* @return {AddonsHelper} A newly-constructed addon helper instance.
217+
*/
218+
addons(): AddonsHelper;
214219
#private;
215220
}
216221
import { SortOptions } from "../../SortOptions";
@@ -220,4 +225,5 @@ import { PurchasesHelper } from "./PurchasesHelper.js";
220225
import { ReviewsHelper } from "./ReviewsHelper.js";
221226
import { UpdatesHelper } from "./UpdatesHelper.js";
222227
import { VersionsHelper } from "./VersionsHelper.js";
228+
import { AddonsHelper } from "./AddonsHelper.js";
223229
//# sourceMappingURL=ResourcesHelper.d.ts.map

types/helpers/resources/ResourcesHelper.d.ts.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)