import { MediumAccount } from './medium.classes.account.js'; import { type IPostData, MediumPost } from './medium.classes.post.js'; import * as plugins from './medium.plugins.js'; export interface IMediumPublication { id: string; name: string; description: string; url: string; imageUrl: string; } export class MediumPublication implements IMediumPublication { // STATIC public static async getAllPublications(mediumAccount: MediumAccount): Promise { await mediumAccount.readyDeferred.promise; const response = await mediumAccount.request(`/users/${mediumAccount.id}/publications`, 'GET'); const publicationsDataArray: IMediumPublication[] = response.data; return publicationsDataArray.map(publicationData => new MediumPublication(mediumAccount, publicationData)); } public static async getOwnPublications(mediumAccount: MediumAccount): Promise { await mediumAccount.readyDeferred.promise; const allPublications = await this.getAllPublications(mediumAccount); const ownPublications: MediumPublication[] = []; for (const publication of allPublications) { const response = await mediumAccount.request(`/publications/${publication.id}/contributors`, 'GET'); const contributors: { publicationId: string; userId: string; role: string; }[] = response.data; if (contributors.some(contributor => contributor.userId === mediumAccount.id)) { ownPublications.push(publication); } } return ownPublications; } public static async getPublicationByName(mediumAccount: MediumAccount, publicationName: string): Promise { const publications = await this.getAllPublications(mediumAccount); return publications.find(publication => publication.name === publicationName); } // INSTANCE public mediumAccountRef: MediumAccount; id: string; name: string; description: string; url: string; imageUrl: string; constructor(mediumAccount: MediumAccount, data: IMediumPublication) { this.mediumAccountRef = mediumAccount; Object.assign(this, data); } public async createPost(data: IPostData): Promise { const result = await MediumPost.createPost(this, data); return result; } }