detritus-client
Version:
A Typescript NodeJS library to interact with Discord's API, both Rest and Gateway.
235 lines (234 loc) • 8.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.StoreApplicationAsset = exports.keysStoreApplicationAsset = exports.Sku = exports.StoreListingAsset = exports.StoreListing = void 0;
const detritus_client_rest_1 = require("detritus-client-rest");
const basecollection_1 = require("../collections/basecollection");
const baseset_1 = require("../collections/baseset");
const constants_1 = require("../constants");
const utils_1 = require("../utils");
const basestructure_1 = require("./basestructure");
const application_1 = require("./application");
const keysStore = new baseset_1.BaseSet([
constants_1.DiscordKeys.ASSETS,
constants_1.DiscordKeys.BOX_ART,
constants_1.DiscordKeys.CAROUSEL_ITEMS,
constants_1.DiscordKeys.DESCRIPTION,
constants_1.DiscordKeys.ENTITLEMENT_BRANCH_ID,
constants_1.DiscordKeys.HEADER_BACKGROUND,
constants_1.DiscordKeys.HEADER_LOGO_DARK_THEME,
constants_1.DiscordKeys.HEADER_LOGO_LIGHT_THEME,
constants_1.DiscordKeys.HERO_BACKGROUND,
constants_1.DiscordKeys.HERO_VIDEO,
constants_1.DiscordKeys.ID,
constants_1.DiscordKeys.PREVIEW_VIDEO,
constants_1.DiscordKeys.SKU,
constants_1.DiscordKeys.SUMMARY,
constants_1.DiscordKeys.TAGLINE,
constants_1.DiscordKeys.THUMBNAIL,
]);
/**
* Store Listing Structure
* Used for Store Channels ([ChannelGuildStore])
* @category Structure
*/
class StoreListing extends basestructure_1.BaseStructure {
constructor(client, data, isClone) {
super(client, undefined, isClone);
this._keys = keysStore;
this.assets = new basecollection_1.BaseCollection();
this.id = '';
this.summary = '';
this.merge(data);
}
get url() {
return this.sku.url;
}
mergeValue(key, value) {
if (value !== undefined) {
switch (key) {
case constants_1.DiscordKeys.ASSETS:
{
this.assets.clear();
for (let raw of value) {
this.assets.set(raw.id, new StoreListingAsset(this, raw));
}
}
;
return;
case constants_1.DiscordKeys.SKU:
{
value = new Sku(this.client, value);
}
;
break;
case constants_1.DiscordKeys.BOX_ART:
case constants_1.DiscordKeys.HEADER_BACKGROUND:
case constants_1.DiscordKeys.HEADER_LOGO_DARK_THEME:
case constants_1.DiscordKeys.HEADER_LOGO_LIGHT_THEME:
case constants_1.DiscordKeys.HERO_BACKGROUND:
case constants_1.DiscordKeys.HERO_VIDEO:
case constants_1.DiscordKeys.PREVIEW_VIDEO:
case constants_1.DiscordKeys.THUMBNAIL:
{
value = new StoreListingAsset(this, value);
}
;
break;
}
return super.mergeValue(key, value);
}
}
}
exports.StoreListing = StoreListing;
const keysStoreListingAsset = new baseset_1.BaseSet([
constants_1.DiscordKeys.HEIGHT,
constants_1.DiscordKeys.ID,
constants_1.DiscordKeys.MIME_TYPE,
constants_1.DiscordKeys.SIZE,
constants_1.DiscordKeys.WIDTH,
]);
/**
* Store Listing Asset Structure, used in [StoreListing]
* @category Structure
*/
class StoreListingAsset extends basestructure_1.BaseStructure {
constructor(storeListing, data) {
super(storeListing.client, undefined, storeListing._clone);
this._uncloneable = true;
this._keys = keysStoreListingAsset;
this.height = 0;
this.id = '';
this.mimeType = '';
this.size = 0;
this.width = 0;
this.storeListing = storeListing;
this.merge(data);
Object.defineProperty(this, 'storeListing', { enumerable: false, writable: false });
}
}
exports.StoreListingAsset = StoreListingAsset;
const keysSku = new baseset_1.BaseSet([
constants_1.DiscordKeys.ACCESS_TYPE,
constants_1.DiscordKeys.APPLICATION,
constants_1.DiscordKeys.APPLICATION_ID,
constants_1.DiscordKeys.CONTENT_RATING,
constants_1.DiscordKeys.CONTENT_RATING_AGENCY,
constants_1.DiscordKeys.DEPENDENT_SKU_ID,
constants_1.DiscordKeys.FEATURES,
constants_1.DiscordKeys.FLAGS,
constants_1.DiscordKeys.GENRES,
constants_1.DiscordKeys.ID,
constants_1.DiscordKeys.LEGAL_NOTICE,
constants_1.DiscordKeys.LOCALES,
constants_1.DiscordKeys.MANIFEST_LABELS,
constants_1.DiscordKeys.NAME,
constants_1.DiscordKeys.PREMIUM,
constants_1.DiscordKeys.PRICE,
constants_1.DiscordKeys.RELEASE_DATE,
constants_1.DiscordKeys.SHOW_AGE_GATE,
constants_1.DiscordKeys.SLUG,
constants_1.DiscordKeys.SYSTEM_REQUIREMENTS,
constants_1.DiscordKeys.TYPE,
]);
/**
* Sku Structure, used in [Gift] and [StoreListing]
* @category Structure
*/
class Sku extends basestructure_1.BaseStructure {
constructor(client, data, isClone) {
super(client, undefined, isClone);
this._keys = keysSku;
this.accessType = 0;
this.applicationId = '';
this.contentRatingAgency = 0;
this.dependentSkuId = null;
this.flags = 0;
this.id = '';
this.legalNotice = '';
this.name = '';
this.showAgeGate = false;
this.slug = '';
this.type = constants_1.SkuTypes.BASE;
this.merge(data);
}
get url() {
return detritus_client_rest_1.Endpoints.Routes.URL + detritus_client_rest_1.Endpoints.Routes.APPLICATION_STORE_LISTING_SKU(this.id, this.slug);
}
mergeValue(key, value) {
if (value !== undefined) {
switch (key) {
case constants_1.DiscordKeys.APPLICATION_ID:
{
if (!this.application) {
if (this.client.applications.has(value)) {
this.application = this.client.applications.get(value);
if (this.isClone) {
this.application = this.application.clone();
}
}
}
}
;
break;
case constants_1.DiscordKeys.APPLICATION:
{
let application;
if (this.isClone) {
application = new application_1.Application(this.client, value, this.isClone);
}
else {
if (this.client.applications.has(value.id)) {
application = this.client.applications.get(value.id);
application.merge(value);
}
else {
application = new application_1.Application(this.client, value);
}
}
value = application;
}
;
break;
}
return super.mergeValue(key, value);
}
}
}
exports.Sku = Sku;
exports.keysStoreApplicationAsset = new baseset_1.BaseSet([
constants_1.DiscordKeys.APPLICATION_ID,
constants_1.DiscordKeys.FILENAME,
constants_1.DiscordKeys.HEIGHT,
constants_1.DiscordKeys.ID,
constants_1.DiscordKeys.MIME_TYPE,
constants_1.DiscordKeys.SIZE,
constants_1.DiscordKeys.WIDTH,
]);
class StoreApplicationAsset extends basestructure_1.BaseStructure {
constructor(client, data, isClone) {
super(client, undefined, isClone);
this._keys = exports.keysStoreApplicationAsset;
this.applicationId = '';
this.filename = '';
this.height = 0;
this.id = '';
this.mimeType = '';
this.size = 0;
this.width = '';
this.merge(data);
}
get url() {
return this.urlFormat();
}
urlFormat(format, query) {
format = utils_1.getFormatFromHash(this.id, format, this.client.imageFormat);
if (this.mimeType.startsWith('video/')) {
format = 'mp4';
}
return utils_1.addQuery(detritus_client_rest_1.Endpoints.CDN.URL + detritus_client_rest_1.Endpoints.CDN.APP_ASSET_STORE(this.applicationId, this.id, format), query);
}
async delete() {
return this.client.rest.deleteStoreApplicationAsset(this.applicationId, this.id);
}
}
exports.StoreApplicationAsset = StoreApplicationAsset;