diff --git a/packages/pl-api/README.md b/packages/pl-api/README.md index 076455420..010a8eeaf 100644 --- a/packages/pl-api/README.md +++ b/packages/pl-api/README.md @@ -10,7 +10,14 @@ A JavaScript library for interacting with Mastodon API-compatible servers, focus Example: ```ts -import { PlApiClient, type CreateApplicationParams } from 'pl-api'; +import { + ALL_SCHEMAS, + importSchemas, + PlApiClient, + type CreateApplicationParams, +} from 'pl-api'; + +importSchemas(ALL_SCHEMAS); const { ACCESS_TOKEN } = process.env; diff --git a/packages/pl-api/lib/client.ts b/packages/pl-api/lib/client.ts index 79975e388..0d5ffdc9e 100644 --- a/packages/pl-api/lib/client.ts +++ b/packages/pl-api/lib/client.ts @@ -3,83 +3,10 @@ import omit from 'lodash.omit'; import pick from 'lodash.pick'; import * as v from 'valibot'; -import { - accountSchema, - adminAccountSchema, - adminAnnouncementSchema, - adminCanonicalEmailBlockSchema, - adminCohortSchema, - adminDimensionSchema, - adminDomainAllowSchema, - adminDomainBlockSchema, - adminDomainSchema, - adminEmailDomainBlockSchema, - adminIpBlockSchema, - adminMeasureSchema, - adminModerationLogEntrySchema, - adminRelaySchema, - adminReportSchema, - adminRuleSchema, - adminTagSchema, - announcementSchema, - antennaSchema, - applicationSchema, - backupSchema, - bookmarkFolderSchema, - chatMessageSchema, - chatSchema, - contextSchema, - conversationSchema, - credentialAccountSchema, - credentialApplicationSchema, - customEmojiSchema, - domainBlockSchema, - emojiReactionSchema, - extendedDescriptionSchema, - familiarFollowersSchema, - featuredTagSchema, - filterKeywordSchema, - filterSchema, - filterStatusSchema, - groupMemberSchema, - groupRelationshipSchema, - groupSchema, - instanceSchema, - interactionPoliciesSchema, - interactionRequestSchema, - listSchema, - locationSchema, - markersSchema, - mediaAttachmentSchema, - mutedAccountSchema, - notificationPolicySchema, - notificationRequestSchema, - notificationSchema, - oauthTokenSchema, - pleromaConfigSchema, - pollSchema, - relationshipSchema, - reportSchema, - ruleSchema, - scheduledStatusSchema, - scrobbleSchema, - searchSchema, - statusEditSchema, - statusSchema, - statusSourceSchema, - streamingEventSchema, - suggestionSchema, - tagSchema, - tokenSchema, - translationSchema, - trendsLinkSchema, - webPushSubscriptionSchema, -} from './entities'; -import { circleSchema } from './entities/circle'; -import { type GroupedNotificationsResults, groupedNotificationsResultsSchema, type NotificationGroup } from './entities/grouped-notifications-results'; import { filteredArray } from './entities/utils'; import { AKKOMA, type Features, getFeatures, GOTOSOCIAL, MITRA, PIXELFED } from './features'; import request, { getNextLink, getPrevLink, type RequestBody, type RequestMeta } from './request'; +import { SCHEMAS } from './schemas'; import { buildFullPath } from './utils/url'; import type { @@ -95,6 +22,7 @@ import type { Status, StreamingEvent, } from './entities'; +import type { GroupedNotificationsResults, NotificationGroup } from './entities/grouped-notifications-results'; import type { PlApiResponse } from './main'; import type { CreateScrobbleParams, @@ -270,7 +198,7 @@ class PlApiClient { baseURL: string; #accessToken?: string; - #instance: Instance = v.parse(instanceSchema, {}); + #instance: Instance = v.parse(SCHEMAS.instanceSchema, {}); public request = request.bind(this) as typeof request; public features: Features = getFeatures(this.#instance); #socket?: { @@ -344,7 +272,7 @@ class PlApiClient { next: response.json?.count > (params.page_size * ((params.page || 1) - 1) + response.json?.users?.length) ? () => this.#paginatedPleromaAccounts({ ...params, page: (params.page || 0) + 1 }) : null, - items: v.parse(filteredArray(adminAccountSchema), response.json?.users), + items: v.parse(filteredArray(SCHEMAS.adminAccountSchema), response.json?.users), partial: response.status === 206, total: response.json?.total, }; @@ -363,7 +291,7 @@ class PlApiClient { next: response.json?.total > (params.page_size * ((params.page || 1) - 1) + response.json?.reports?.length) ? () => this.#paginatedPleromaReports({ ...params, page: (params.page || 0) + 1 }) : null, - items: v.parse(filteredArray(adminReportSchema), response.json?.reports), + items: v.parse(filteredArray(SCHEMAS.adminReportSchema), response.json?.reports), partial: response.status === 206, total: response.json?.total, }; @@ -383,7 +311,7 @@ class PlApiClient { next: response.json?.length ? () => this.#paginatedPleromaStatuses({ ...params, page: (params.page || 0) + 1 }) : null, - items: v.parse(filteredArray(statusSchema), response.json), + items: v.parse(filteredArray(SCHEMAS.statusSchema), response.json), partial: response.status === 206, }; }; @@ -457,7 +385,7 @@ class PlApiClient { createApplication: async (params: CreateApplicationParams) => { const response = await this.request('/api/v1/apps', { method: 'POST', body: params }); - return v.parse(credentialApplicationSchema, response.json); + return v.parse(SCHEMAS.credentialApplicationSchema, response.json); }, /** @@ -468,7 +396,7 @@ class PlApiClient { verifyApplication: async () => { const response = await this.request('/api/v1/apps/verify_credentials'); - return v.parse(applicationSchema, response.json); + return v.parse(SCHEMAS.applicationSchema, response.json); }, }; @@ -492,7 +420,7 @@ class PlApiClient { getToken: async (params: GetTokenParams) => { const response = await this.request('/oauth/token', { method: 'POST', body: params }); - return v.parse(tokenSchema, { scope: params.scope || '', ...response.json }); + return v.parse(SCHEMAS.tokenSchema, { scope: params.scope || '', ...response.json }); }, /** @@ -523,7 +451,7 @@ class PlApiClient { mfaChallenge: async (params: MfaChallengeParams) => { const response = await this.request('/oauth/mfa/challenge', { method: 'POST', body: params }); - return v.parse(tokenSchema, response.json); + return v.parse(SCHEMAS.tokenSchema, response.json); }, }; @@ -544,7 +472,7 @@ class PlApiClient { getAccount: async (accountId: string, params?: GetAccountParams) => { const response = await this.request(`/api/v1/accounts/${accountId}`, { params }); - return v.parse(accountSchema, response.json); + return v.parse(SCHEMAS.accountSchema, response.json); }, /** @@ -557,7 +485,7 @@ class PlApiClient { getAccounts: async (accountId: string[]) => { const response = await this.request('/api/v1/accounts', { params: { id: accountId } }); - return v.parse(filteredArray(accountSchema), response.json); + return v.parse(filteredArray(SCHEMAS.accountSchema), response.json); }, /** @@ -566,7 +494,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/accounts/#statuses} */ getAccountStatuses: async (accountId: string, params?: GetAccountStatusesParams) => - this.#paginatedGet(`/api/v1/accounts/${accountId}/statuses`, { params }, statusSchema), + this.#paginatedGet(`/api/v1/accounts/${accountId}/statuses`, { params }, SCHEMAS.statusSchema), /** * Get account’s followers @@ -574,7 +502,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/accounts/#followers} */ getAccountFollowers: async (accountId: string, params?: GetAccountFollowersParams) => - this.#paginatedGet(`/api/v1/accounts/${accountId}/followers`, { params }, accountSchema), + this.#paginatedGet(`/api/v1/accounts/${accountId}/followers`, { params }, SCHEMAS.accountSchema), /** * Get account’s following @@ -582,7 +510,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/accounts/#following} */ getAccountFollowing: async (accountId: string, params?: GetAccountFollowingParams) => - this.#paginatedGet(`/api/v1/accounts/${accountId}/following`, { params }, accountSchema), + this.#paginatedGet(`/api/v1/accounts/${accountId}/following`, { params }, SCHEMAS.accountSchema), /** * Get account’s featured tags @@ -594,7 +522,7 @@ class PlApiClient { getAccountFeaturedTags: async (accountId: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/featured_tags`); - return v.parse(filteredArray(featuredTagSchema), response.json); + return v.parse(filteredArray(SCHEMAS.featuredTagSchema), response.json); }, /** @@ -605,7 +533,7 @@ class PlApiClient { getAccountLists: async (accountId: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/lists`); - return v.parse(filteredArray(listSchema), response.json); + return v.parse(filteredArray(SCHEMAS.listSchema), response.json); }, /** @@ -616,7 +544,7 @@ class PlApiClient { getAccountAntennas: async (accountId: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/antennas`); - return v.parse(filteredArray(antennaSchema), response.json); + return v.parse(filteredArray(SCHEMAS.antennaSchema), response.json); }, /** @@ -626,7 +554,7 @@ class PlApiClient { getAccountExcludeAntennas: async (accountId: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/circles`); - return v.parse(filteredArray(circleSchema), response.json); + return v.parse(filteredArray(SCHEMAS.circleSchema), response.json); }, /** @@ -637,7 +565,7 @@ class PlApiClient { getAccountCircles: async (accountId: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/exclude_antennas`); - return v.parse(filteredArray(antennaSchema), response.json); + return v.parse(filteredArray(SCHEMAS.antennaSchema), response.json); }, /** @@ -648,7 +576,7 @@ class PlApiClient { followAccount: async (accountId: string, params?: FollowAccountParams) => { const response = await this.request(`/api/v1/accounts/${accountId}/follow`, { method: 'POST', body: params }); - return v.parse(relationshipSchema, response.json); + return v.parse(SCHEMAS.relationshipSchema, response.json); }, /** @@ -659,7 +587,7 @@ class PlApiClient { unfollowAccount: async (accountId: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/unfollow`, { method: 'POST' }); - return v.parse(relationshipSchema, response.json); + return v.parse(SCHEMAS.relationshipSchema, response.json); }, /** @@ -670,7 +598,7 @@ class PlApiClient { removeAccountFromFollowers: async (accountId: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/remove_from_followers`, { method: 'POST' }); - return v.parse(relationshipSchema, response.json); + return v.parse(SCHEMAS.relationshipSchema, response.json); }, /** @@ -681,7 +609,7 @@ class PlApiClient { pinAccount: async (accountId: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/pin`, { method: 'POST' }); - return v.parse(relationshipSchema, response.json); + return v.parse(SCHEMAS.relationshipSchema, response.json); }, /** @@ -692,7 +620,7 @@ class PlApiClient { unpinAccount: async (accountId: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/unpin`, { method: 'POST' }); - return v.parse(relationshipSchema, response.json); + return v.parse(SCHEMAS.relationshipSchema, response.json); }, /** @@ -703,7 +631,7 @@ class PlApiClient { updateAccountNote: async (accountId: string, comment: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/note`, { method: 'POST', body: { comment } }); - return v.parse(relationshipSchema, response.json); + return v.parse(SCHEMAS.relationshipSchema, response.json); }, /** @@ -714,7 +642,7 @@ class PlApiClient { getRelationships: async (accountIds: string[], params?: GetRelationshipsParams) => { const response = await this.request('/api/v1/accounts/relationships', { params: { ...params, id: accountIds } }); - return v.parse(filteredArray(relationshipSchema), response.json); + return v.parse(filteredArray(SCHEMAS.relationshipSchema), response.json); }, /** @@ -740,7 +668,7 @@ class PlApiClient { response = (await this.request('/api/v1/accounts/familiar_followers', { params: { id: accountIds } })).json; } - return v.parse(filteredArray(familiarFollowersSchema), response); + return v.parse(filteredArray(SCHEMAS.familiarFollowersSchema), response); }, /** @@ -751,7 +679,7 @@ class PlApiClient { searchAccounts: async (q: string, params?: SearchAccountParams, meta?: RequestMeta) => { const response = await this.request('/api/v1/accounts/search', { ...meta, params: { ...params, q } }); - return v.parse(filteredArray(accountSchema), response.json); + return v.parse(filteredArray(SCHEMAS.accountSchema), response.json); }, /** @@ -764,7 +692,7 @@ class PlApiClient { lookupAccount: async (acct: string, meta?: RequestMeta) => { const response = await this.request('/api/v1/accounts/lookup', { ...meta, params: { acct } }); - return v.parse(accountSchema, response.json); + return v.parse(SCHEMAS.accountSchema, response.json); }, /** @@ -777,7 +705,7 @@ class PlApiClient { body: { ...params, account_id: accountId }, }); - return v.parse(reportSchema, response.json); + return v.parse(SCHEMAS.reportSchema, response.json); }, /** @@ -790,7 +718,7 @@ class PlApiClient { getAccountEndorsements: async (accountId: string, params?: GetAccountEndorsementsParams) => { const response = await this.request(`/api/v1/pleroma/accounts/${accountId}/endorsements`, { params }); - return v.parse(filteredArray(accountSchema), response.json); + return v.parse(filteredArray(SCHEMAS.accountSchema), response.json); }, /** @@ -802,7 +730,7 @@ class PlApiClient { getBirthdays: async (day: number, month: number) => { const response = await this.request('/api/v1/pleroma/birthdays', { params: { day, month } }); - return v.parse(filteredArray(accountSchema), response.json); + return v.parse(filteredArray(SCHEMAS.accountSchema), response.json); }, /** @@ -812,7 +740,7 @@ class PlApiClient { * @see {@link https://docs.pleroma.social/backend/development/API/pleroma_api/#apiv1pleromaaccountsidfavourites} */ getAccountFavourites: async (accountId: string, params?: GetAccountFavouritesParams) => - this.#paginatedGet(`/api/v1/pleroma/accounts/${accountId}/favourites`, { params }, statusSchema), + this.#paginatedGet(`/api/v1/pleroma/accounts/${accountId}/favourites`, { params }, SCHEMAS.statusSchema), /** * Interact with profile or status from remote account @@ -851,7 +779,7 @@ class PlApiClient { * @see {@link https://docs.pleroma.social/backend/development/API/pleroma_api/#get-apiv1pleromaaccountsidscrobbles} */ getScrobbles: async (accountId: string, params?: GetScrobblesParams) => - this.#paginatedGet(`/api/v1/pleroma/accounts/${accountId}/scrobbles`, { params }, scrobbleSchema), + this.#paginatedGet(`/api/v1/pleroma/accounts/${accountId}/scrobbles`, { params }, SCHEMAS.scrobbleSchema), /** * Creates a new Listen activity for an account @@ -864,7 +792,7 @@ class PlApiClient { const response = await this.request('/api/v1/pleroma/scrobble', { body: params }); - return v.parse(scrobbleSchema, response.json); + return v.parse(SCHEMAS.scrobbleSchema, response.json); }, }; @@ -875,7 +803,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/bookmarks/#get} */ getBookmarks: async (params?: GetBookmarksParams) => - this.#paginatedGet('/api/v1/bookmarks', { params }, statusSchema), + this.#paginatedGet('/api/v1/bookmarks', { params }, SCHEMAS.statusSchema), /** * View favourited statuses @@ -883,14 +811,14 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/favourites/#get} */ getFavourites: async (params?: GetFavouritesParams) => - this.#paginatedGet('/api/v1/favourites', { params }, statusSchema), + this.#paginatedGet('/api/v1/favourites', { params }, SCHEMAS.statusSchema), /** * View pending follow requests * @see {@link https://docs.joinmastodon.org/methods/follow_requests/#get} */ getFollowRequests: async (params?: GetFollowRequestsParams) => - this.#paginatedGet('/api/v1/follow_requests', { params }, accountSchema), + this.#paginatedGet('/api/v1/follow_requests', { params }, SCHEMAS.accountSchema), /** * Accept follow request @@ -899,7 +827,7 @@ class PlApiClient { acceptFollowRequest: async (accountId: string) => { const response = await this.request(`/api/v1/follow_requests/${accountId}/authorize`, { method: 'POST' }); - return v.parse(relationshipSchema, response.json); + return v.parse(SCHEMAS.relationshipSchema, response.json); }, /** @@ -909,7 +837,7 @@ class PlApiClient { rejectFollowRequest: async (accountId: string) => { const response = await this.request(`/api/v1/follow_requests/${accountId}/reject`, { method: 'POST' }); - return v.parse(relationshipSchema, response.json); + return v.parse(SCHEMAS.relationshipSchema, response.json); }, /** @@ -918,7 +846,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/endorsements/#get} */ getEndorsements: async (params?: GetEndorsementsParams) => - this.#paginatedGet('/api/v1/endorsements', { params }, accountSchema), + this.#paginatedGet('/api/v1/endorsements', { params }, SCHEMAS.accountSchema), /** * View your featured tags @@ -930,7 +858,7 @@ class PlApiClient { getFeaturedTags: async () => { const response = await this.request('/api/v1/featured_tags'); - return v.parse(filteredArray(featuredTagSchema), response.json); + return v.parse(filteredArray(SCHEMAS.featuredTagSchema), response.json); }, /** @@ -946,7 +874,7 @@ class PlApiClient { body: { name }, }); - return v.parse(filteredArray(featuredTagSchema), response.json); + return v.parse(filteredArray(SCHEMAS.featuredTagSchema), response.json); }, /** @@ -975,7 +903,7 @@ class PlApiClient { getFeaturedTagsSuggestions: async () => { const response = await this.request('/api/v1/featured_tags/suggestions'); - return v.parse(filteredArray(tagSchema), response.json); + return v.parse(filteredArray(SCHEMAS.tagSchema), response.json); }, /** @@ -986,7 +914,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/followed_tags/#get} */ getFollowedTags: async (params?: GetFollowedTagsParams) => - this.#paginatedGet('/api/v1/followed_tags', { params }, tagSchema), + this.#paginatedGet('/api/v1/followed_tags', { params }, SCHEMAS.tagSchema), /** * View information about a single tag @@ -996,7 +924,7 @@ class PlApiClient { getTag: async (tagId: string) => { const response = await this.request(`/api/v1/tags/${tagId}`); - return v.parse(tagSchema, response.json); + return v.parse(SCHEMAS.tagSchema, response.json); }, /** @@ -1007,7 +935,7 @@ class PlApiClient { followTag: async (tagId: string) => { const response = await this.request(`/api/v1/tags/${tagId}/follow`, { method: 'POST' }); - return v.parse(tagSchema, response.json); + return v.parse(SCHEMAS.tagSchema, response.json); }, /** @@ -1018,7 +946,7 @@ class PlApiClient { unfollowTag: async (tagId: string) => { const response = await this.request(`/api/v1/tags/${tagId}/unfollow`, { method: 'POST' }); - return v.parse(tagSchema, response.json); + return v.parse(SCHEMAS.tagSchema, response.json); }, /** @@ -1038,7 +966,7 @@ class PlApiClient { { params: { limit } }, ); - return v.parse(filteredArray(suggestionSchema), response.json); + return v.parse(filteredArray(SCHEMAS.suggestionSchema), response.json); }, /** @@ -1063,7 +991,7 @@ class PlApiClient { getBookmarkFolders: async () => { const response = await this.request('/api/v1/pleroma/bookmark_folders'); - return v.parse(filteredArray(bookmarkFolderSchema), response.json); + return v.parse(filteredArray(SCHEMAS.bookmarkFolderSchema), response.json); }, /** @@ -1075,7 +1003,7 @@ class PlApiClient { createBookmarkFolder: async (params: CreateBookmarkFolderParams) => { const response = await this.request('/api/v1/pleroma/bookmark_folders', { method: 'POST', body: params }); - return v.parse(bookmarkFolderSchema, response.json); + return v.parse(SCHEMAS.bookmarkFolderSchema, response.json); }, /** @@ -1087,7 +1015,7 @@ class PlApiClient { updateBookmarkFolder: async (bookmarkFolderId: string, params: UpdateBookmarkFolderParams) => { const response = await this.request(`/api/v1/pleroma/bookmark_folders/${bookmarkFolderId}`, { method: 'PATCH', body: params }); - return v.parse(bookmarkFolderSchema, response.json); + return v.parse(SCHEMAS.bookmarkFolderSchema, response.json); }, /** @@ -1099,7 +1027,7 @@ class PlApiClient { deleteBookmarkFolder: async (bookmarkFolderId: string) => { const response = await this.request(`/api/v1/pleroma/bookmark_folders/${bookmarkFolderId}`, { method: 'DELETE' }); - return v.parse(bookmarkFolderSchema, response.json); + return v.parse(SCHEMAS.bookmarkFolderSchema, response.json); }, }; @@ -1117,7 +1045,7 @@ class PlApiClient { body: { language: params.locale, ...params }, }); - return v.parse(tokenSchema, response.json); + return v.parse(SCHEMAS.tokenSchema, response.json); }, /** @@ -1128,7 +1056,7 @@ class PlApiClient { verifyCredentials: async () => { const response = await this.request('/api/v1/accounts/verify_credentials'); - return v.parse(credentialAccountSchema, response.json); + return v.parse(SCHEMAS.credentialAccountSchema, response.json); }, /** @@ -1153,7 +1081,7 @@ class PlApiClient { body: params, }); - return v.parse(credentialAccountSchema, response.json); + return v.parse(SCHEMAS.credentialAccountSchema, response.json); }, /** @@ -1164,7 +1092,7 @@ class PlApiClient { deleteAvatar: async () => { const response = await this.request('/api/v1/profile/avatar', { method: 'DELETE' }); - return v.parse(credentialAccountSchema, response.json); + return v.parse(SCHEMAS.credentialAccountSchema, response.json); }, /** @@ -1175,7 +1103,7 @@ class PlApiClient { deleteHeader: async () => { const response = await this.request('/api/v1/profile/header', { method: 'DELETE' }); - return v.parse(credentialAccountSchema, response.json); + return v.parse(SCHEMAS.credentialAccountSchema, response.json); }, /** @@ -1197,7 +1125,7 @@ class PlApiClient { createBackup: async () => { const response = await this.request('/api/v1/pleroma/backups', { method: 'POST' }); - return v.parse(backupSchema, response.json); + return v.parse(SCHEMAS.backupSchema, response.json); }, /** @@ -1208,7 +1136,7 @@ class PlApiClient { getBackups: async () => { const response = await this.request('/api/v1/pleroma/backups'); - return v.parse(filteredArray(backupSchema), response.json); + return v.parse(filteredArray(SCHEMAS.backupSchema), response.json); }, /** @@ -1258,7 +1186,7 @@ class PlApiClient { getOauthTokens: async () => { const response = await this.request('/api/oauth_tokens'); - return v.parse(filteredArray(oauthTokenSchema), response.json); + return v.parse(filteredArray(SCHEMAS.oauthTokenSchema), response.json); }, /** @@ -1587,7 +1515,7 @@ class PlApiClient { getInteractionPolicies: async () => { const response = await this.request('/api/v1/interaction_policies/defaults'); - return v.parse(interactionPoliciesSchema, response.json); + return v.parse(SCHEMAS.interactionPoliciesSchema, response.json); }, /** @@ -1599,7 +1527,7 @@ class PlApiClient { updateInteractionPolicies: async (params: UpdateInteractionPoliciesParams) => { const response = await this.request('/api/v1/interaction_policies/defaults', { method: 'PATCH', body: params }); - return v.parse(interactionPoliciesSchema, response.json); + return v.parse(SCHEMAS.interactionPoliciesSchema, response.json); }, /** @@ -1636,7 +1564,7 @@ class PlApiClient { blockAccount: async (accountId: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/block`, { method: 'POST' }); - return v.parse(relationshipSchema, response.json); + return v.parse(SCHEMAS.relationshipSchema, response.json); }, /** @@ -1647,7 +1575,7 @@ class PlApiClient { unblockAccount: async (accountId: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/unblock`, { method: 'POST' }); - return v.parse(relationshipSchema, response.json); + return v.parse(SCHEMAS.relationshipSchema, response.json); }, /** @@ -1660,7 +1588,7 @@ class PlApiClient { muteAccount: async (accountId: string, params?: MuteAccountParams) => { const response = await this.request(`/api/v1/accounts/${accountId}/mute`, { method: 'POST', body: params }); - return v.parse(relationshipSchema, response.json); + return v.parse(SCHEMAS.relationshipSchema, response.json); }, /** @@ -1673,7 +1601,7 @@ class PlApiClient { unmuteAccount: async (accountId: string) => { const response = await this.request(`/api/v1/accounts/${accountId}/unmute`, { method: 'POST' }); - return v.parse(relationshipSchema, response.json); + return v.parse(SCHEMAS.relationshipSchema, response.json); }, /** @@ -1684,14 +1612,14 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/mutes/#get} */ getMutes: async (params?: GetMutesParams) => - this.#paginatedGet('/api/v1/mutes', { params }, mutedAccountSchema), + this.#paginatedGet('/api/v1/mutes', { params }, SCHEMAS.mutedAccountSchema), /** * View blocked users * @see {@link https://docs.joinmastodon.org/methods/blocks/#get} */ getBlocks: async (params?: GetBlocksParams) => - this.#paginatedGet('/api/v1/blocks', { params }, accountSchema), + this.#paginatedGet('/api/v1/blocks', { params }, SCHEMAS.accountSchema), /** * Get domain blocks @@ -1740,7 +1668,7 @@ class PlApiClient { getFilters: async () => { const response = await this.request(this.features.filtersV2 ? '/api/v2/filters' : '/api/v1/filters'); - return v.parse(filteredArray(filterSchema), response.json); + return v.parse(filteredArray(SCHEMAS.filterSchema), response.json); }, /** @@ -1757,7 +1685,7 @@ class PlApiClient { : `/api/v1/filters/${filterId}`, ); - return v.parse(filterSchema, response.json); + return v.parse(SCHEMAS.filterSchema, response.json); }, /** @@ -1783,7 +1711,7 @@ class PlApiClient { }, ); - return v.parse(filterSchema, response.json); + return v.parse(SCHEMAS.filterSchema, response.json); }, /** @@ -1809,7 +1737,7 @@ class PlApiClient { }, ); - return v.parse(filterSchema, response.json); + return v.parse(SCHEMAS.filterSchema, response.json); }, /** @@ -1840,7 +1768,7 @@ class PlApiClient { getFilterKeywords: async (filterId: string) => { const response = await this.request(`/api/v2/filters/${filterId}/keywords`); - return v.parse(filteredArray(filterKeywordSchema), response.json); + return v.parse(filteredArray(SCHEMAS.filterKeywordSchema), response.json); }, /** @@ -1856,7 +1784,7 @@ class PlApiClient { body: { keyword, whole_word }, }); - return v.parse(filterKeywordSchema, response.json); + return v.parse(SCHEMAS.filterKeywordSchema, response.json); }, /** @@ -1869,7 +1797,7 @@ class PlApiClient { getFilterKeyword: async (filterId: string) => { const response = await this.request(`/api/v2/filters/keywords/${filterId}`); - return v.parse(filterKeywordSchema, response.json); + return v.parse(SCHEMAS.filterKeywordSchema, response.json); }, /** @@ -1885,7 +1813,7 @@ class PlApiClient { body: { keyword, whole_word }, }); - return v.parse(filterKeywordSchema, response.json); + return v.parse(SCHEMAS.filterKeywordSchema, response.json); }, /** @@ -1911,7 +1839,7 @@ class PlApiClient { getFilterStatuses: async (filterId: string) => { const response = await this.request(`/api/v2/filters/${filterId}/statuses`); - return v.parse(filteredArray(filterStatusSchema), response.json); + return v.parse(filteredArray(SCHEMAS.filterStatusSchema), response.json); }, /** @@ -1927,7 +1855,7 @@ class PlApiClient { body: { status_id: statusId }, }); - return v.parse(filterStatusSchema, response.json); + return v.parse(SCHEMAS.filterStatusSchema, response.json); }, /** @@ -1940,7 +1868,7 @@ class PlApiClient { getFilterStatus: async (statusId: string) => { const response = await this.request(`/api/v2/filters/statuses/${statusId}`); - return v.parse(filterStatusSchema, response.json); + return v.parse(SCHEMAS.filterStatusSchema, response.json); }, /** @@ -1985,8 +1913,8 @@ class PlApiClient { body: fixedParams, }); - if (response.json?.scheduled_at) return v.parse(scheduledStatusSchema, response.json); - return v.parse(statusSchema, response.json); + if (response.json?.scheduled_at) return v.parse(SCHEMAS.scheduledStatusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -1997,7 +1925,7 @@ class PlApiClient { getStatus: async (statusId: string, params?: GetStatusParams) => { const response = await this.request(`/api/v1/statuses/${statusId}`, { params }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2010,7 +1938,7 @@ class PlApiClient { getStatuses: async (statusIds: string[], params?: GetStatusesParams) => { const response = await this.request('/api/v1/statuses', { params: { ...params, id: statusIds } }); - return v.parse(filteredArray(statusSchema), response.json); + return v.parse(filteredArray(SCHEMAS.statusSchema), response.json); }, /** @@ -2021,7 +1949,7 @@ class PlApiClient { deleteStatus: async (statusId: string) => { const response = await this.request(`/api/v1/statuses/${statusId}`, { method: 'DELETE' }); - return v.parse(statusSourceSchema, response.json); + return v.parse(SCHEMAS.statusSourceSchema, response.json); }, /** @@ -2032,7 +1960,7 @@ class PlApiClient { getContext: async (statusId: string, params?: GetStatusContextParams) => { const response = await this.request(`/api/v1/statuses/${statusId}/context`, { params }); - return v.parse(contextSchema, response.json); + return v.parse(SCHEMAS.contextSchema, response.json); }, /** @@ -2049,7 +1977,7 @@ class PlApiClient { response = await this.request(`/api/v1/statuses/${statusId}/translate`, { method: 'POST', body: { lang } }); } - return v.parse(translationSchema, response.json); + return v.parse(SCHEMAS.translationSchema, response.json); }, /** @@ -2060,7 +1988,7 @@ class PlApiClient { translateStatuses: async (statusIds: Array, lang: string) => { const response = await this.request('/api/v1/pl/statuses/translate', { method: 'POST', body: { ids: statusIds, lang } }); - return v.parse(filteredArray(translationSchema), response.json); + return v.parse(filteredArray(SCHEMAS.translationSchema), response.json); }, /** @@ -2069,7 +1997,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/statuses/#reblogged_by} */ getRebloggedBy: async (statusId: string, params?: GetRebloggedByParams) => - this.#paginatedGet(`/api/v1/statuses/${statusId}/reblogged_by`, { params }, accountSchema), + this.#paginatedGet(`/api/v1/statuses/${statusId}/reblogged_by`, { params }, SCHEMAS.accountSchema), /** * See who favourited a status @@ -2077,7 +2005,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/statuses/#favourited_by} */ getFavouritedBy: async (statusId: string, params?: GetFavouritedByParams) => - this.#paginatedGet(`/api/v1/statuses/${statusId}/favourited_by`, { params }, accountSchema), + this.#paginatedGet(`/api/v1/statuses/${statusId}/favourited_by`, { params }, SCHEMAS.accountSchema), /** * Favourite a status @@ -2087,7 +2015,7 @@ class PlApiClient { favouriteStatus: async (statusId: string) => { const response = await this.request(`/api/v1/statuses/${statusId}/favourite`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2098,7 +2026,7 @@ class PlApiClient { unfavouriteStatus: async (statusId: string) => { const response = await this.request(`/api/v1/statuses/${statusId}/unfavourite`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2109,7 +2037,7 @@ class PlApiClient { reblogStatus: async (statusId: string, visibility?: string) => { const response = await this.request(`/api/v1/statuses/${statusId}/reblog`, { method: 'POST', body: { visibility } }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2120,7 +2048,7 @@ class PlApiClient { unreblogStatus: async (statusId: string) => { const response = await this.request(`/api/v1/statuses/${statusId}/unreblog`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2131,7 +2059,7 @@ class PlApiClient { bookmarkStatus: async (statusId: string, folderId?: string) => { const response = await this.request(`/api/v1/statuses/${statusId}/bookmark`, { method: 'POST', body: { folder_id: folderId } }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2142,7 +2070,7 @@ class PlApiClient { unbookmarkStatus: async (statusId: string) => { const response = await this.request(`/api/v1/statuses/${statusId}/unbookmark`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2153,7 +2081,7 @@ class PlApiClient { muteStatus: async (statusId: string) => { const response = await this.request(`/api/v1/statuses/${statusId}/mute`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2164,7 +2092,7 @@ class PlApiClient { unmuteStatus: async (statusId: string) => { const response = await this.request(`/api/v1/statuses/${statusId}/unmute`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2175,7 +2103,7 @@ class PlApiClient { pinStatus: async (statusId: string) => { const response = await this.request(`/api/v1/statuses/${statusId}/pin`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2186,7 +2114,7 @@ class PlApiClient { unpinStatus: async (statusId: string) => { const response = await this.request(`/api/v1/statuses/${statusId}/unpin`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2207,7 +2135,7 @@ class PlApiClient { const response = await this.request(`/api/v1/statuses/${statusId}`, { method: 'PUT', body: params }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2218,7 +2146,7 @@ class PlApiClient { getStatusHistory: async (statusId: string) => { const response = await this.request(`/api/v1/statuses/${statusId}/history`); - return v.parse(filteredArray(statusEditSchema), response.json); + return v.parse(filteredArray(SCHEMAS.statusEditSchema), response.json); }, /** @@ -2229,7 +2157,7 @@ class PlApiClient { getStatusSource: async (statusId: string) => { const response = await this.request(`/api/v1/statuses/${statusId}/source`); - return v.parse(statusSourceSchema, response.json); + return v.parse(SCHEMAS.statusSourceSchema, response.json); }, /** @@ -2262,7 +2190,7 @@ class PlApiClient { }, []); } - return v.parse(filteredArray(emojiReactionSchema), response?.json || []); + return v.parse(filteredArray(SCHEMAS.emojiReactionSchema), response?.json || []); }, /** @@ -2282,7 +2210,7 @@ class PlApiClient { response = await this.request(`/api/v1/statuses/${statusId}/react/${encodeURIComponent(emoji)}`, { method: 'POST' }); } - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2301,7 +2229,7 @@ class PlApiClient { response = await this.request(`/api/v1/statuses/${statusId}/unreact/${encodeURIComponent(emoji)}`, { method: 'POST' }); } - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2310,7 +2238,7 @@ class PlApiClient { * Requires features{@link Features['quotePosts']}. */ getStatusQuotes: async (statusId: string, params?: GetStatusQuotesParams) => - this.#paginatedGet(`/api/v1/pleroma/statuses/${statusId}/quotes`, { params }, statusSchema), + this.#paginatedGet(`/api/v1/pleroma/statuses/${statusId}/quotes`, { params }, SCHEMAS.statusSchema), /** * Returns the list of accounts that have disliked the status as known by the current server @@ -2319,7 +2247,7 @@ class PlApiClient { * @see {@link https://github.com/friendica/friendica/blob/2024.06-rc/doc/API-Friendica.md#get-apifriendicastatusesiddisliked_by} */ getDislikedBy: async (statusId: string) => - this.#paginatedGet(`/api/v1/statuses/${statusId}/disliked_by`, {}, accountSchema), + this.#paginatedGet(`/api/v1/statuses/${statusId}/disliked_by`, {}, SCHEMAS.accountSchema), /** * Marks the given status as disliked by this user @@ -2328,7 +2256,7 @@ class PlApiClient { dislikeStatus: async (statusId: string) => { const response = await this.request(`/api/friendica/statuses/${statusId}/dislike`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -2338,14 +2266,14 @@ class PlApiClient { undislikeStatus: async (statusId: string) => { const response = await this.request(`/api/friendica/statuses/${statusId}/undislike`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, getStatusReferences: async (statusId: string, params?: GetStatusReferencesParams) => - this.#paginatedGet(`/api/v1/statuses/${statusId}/referred_by`, { params }, statusSchema), + this.#paginatedGet(`/api/v1/statuses/${statusId}/referred_by`, { params }, SCHEMAS.statusSchema), getStatusMentionedUsers: async (statusId: string, params?: GetStatusMentionedUsersParams) => - this.#paginatedGet(`/api/v1/statuses/${statusId}/mentioned_by`, { params }, accountSchema), + this.#paginatedGet(`/api/v1/statuses/${statusId}/mentioned_by`, { params }, SCHEMAS.accountSchema), }; public readonly media = { @@ -2360,7 +2288,7 @@ class PlApiClient { { ...meta, method: 'POST', body: params, contentType: '' }, ); - return v.parse(mediaAttachmentSchema, response.json); + return v.parse(SCHEMAS.mediaAttachmentSchema, response.json); }, /** @@ -2371,7 +2299,7 @@ class PlApiClient { getMedia: async (attachmentId: string) => { const response = await this.request(`/api/v1/media/${attachmentId}`); - return v.parse(mediaAttachmentSchema, response.json); + return v.parse(SCHEMAS.mediaAttachmentSchema, response.json); }, /** @@ -2385,7 +2313,7 @@ class PlApiClient { body: params, contentType: params.thumbnail ? '' : undefined, }); - return v.parse(mediaAttachmentSchema, response.json); + return v.parse(SCHEMAS.mediaAttachmentSchema, response.json); }, }; @@ -2398,7 +2326,7 @@ class PlApiClient { getPoll: async (pollId: string) => { const response = await this.request(`/api/v1/polls/${pollId}`); - return v.parse(pollSchema, response.json); + return v.parse(SCHEMAS.pollSchema, response.json); }, /** @@ -2409,7 +2337,7 @@ class PlApiClient { vote: async (pollId: string, choices: number[]) => { const response = await this.request(`/api/v1/polls/${pollId}/votes`, { method: 'POST', body: { choices } }); - return v.parse(pollSchema, response.json); + return v.parse(SCHEMAS.pollSchema, response.json); }, }; @@ -2419,7 +2347,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/scheduled_statuses/#get} */ getScheduledStatuses: async (params?: GetScheduledStatusesParams) => - this.#paginatedGet('/api/v1/scheduled_statuses', { params }, scheduledStatusSchema), + this.#paginatedGet('/api/v1/scheduled_statuses', { params }, SCHEMAS.scheduledStatusSchema), /** * View a single scheduled status @@ -2428,7 +2356,7 @@ class PlApiClient { getScheduledStatus: async (scheduledStatusId: string) => { const response = await this.request(`/api/v1/scheduled_statuses/${scheduledStatusId}`); - return v.parse(scheduledStatusSchema, response.json); + return v.parse(SCHEMAS.scheduledStatusSchema, response.json); }, /** @@ -2441,7 +2369,7 @@ class PlApiClient { body: { scheduled_at }, }); - return v.parse(scheduledStatusSchema, response.json); + return v.parse(SCHEMAS.scheduledStatusSchema, response.json); }, /** @@ -2462,7 +2390,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/timelines/#public} */ publicTimeline: (params?: PublicTimelineParams) => - this.#paginatedGet('/api/v1/timelines/public', { params }, statusSchema), + this.#paginatedGet('/api/v1/timelines/public', { params }, SCHEMAS.statusSchema), /** * View hashtag timeline @@ -2470,7 +2398,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/timelines/#tag} */ hashtagTimeline: (hashtag: string, params?: HashtagTimelineParams) => - this.#paginatedGet(`/api/v1/timelines/tag/${hashtag}`, { params }, statusSchema), + this.#paginatedGet(`/api/v1/timelines/tag/${hashtag}`, { params }, SCHEMAS.statusSchema), /** * View home timeline @@ -2478,7 +2406,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/timelines/#home} */ homeTimeline: (params?: HomeTimelineParams) => - this.#paginatedGet('/api/v1/timelines/home', { params }, statusSchema), + this.#paginatedGet('/api/v1/timelines/home', { params }, SCHEMAS.statusSchema), /** * View link timeline @@ -2486,7 +2414,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/timelines/#link} */ linkTimeline: (url: string, params?: LinkTimelineParams) => - this.#paginatedGet('/api/v1/timelines/link', { params: { ...params, url } }, statusSchema), + this.#paginatedGet('/api/v1/timelines/link', { params: { ...params, url } }, SCHEMAS.statusSchema), /** * View list timeline @@ -2494,14 +2422,14 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/timelines/#list} */ listTimeline: (listId: string, params?: ListTimelineParams) => - this.#paginatedGet(`/api/v1/timelines/list/${listId}`, { params }, statusSchema), + this.#paginatedGet(`/api/v1/timelines/list/${listId}`, { params }, SCHEMAS.statusSchema), /** * View all conversations * @see {@link https://docs.joinmastodon.org/methods/conversations/#get} */ getConversations: (params?: GetConversationsParams) => - this.#paginatedGet('/api/v1/conversations', { params }, conversationSchema), + this.#paginatedGet('/api/v1/conversations', { params }, SCHEMAS.conversationSchema), /** * Remove a conversation @@ -2521,7 +2449,7 @@ class PlApiClient { markConversationRead: async (conversationId: string) => { const response = await this.request(`/api/v1/conversations/${conversationId}/read`, { method: 'POST' }); - return v.parse(conversationSchema, response.json); + return v.parse(SCHEMAS.conversationSchema, response.json); }, /** @@ -2532,7 +2460,7 @@ class PlApiClient { getMarkers: async (timelines?: string[]) => { const response = await this.request('/api/v1/markers', { params: { timeline: timelines } }); - return v.parse(markersSchema, response.json); + return v.parse(SCHEMAS.markersSchema, response.json); }, /** @@ -2543,7 +2471,7 @@ class PlApiClient { saveMarkers: async (params: SaveMarkersParams) => { const response = await this.request('/api/v1/markers', { method: 'POST', body: params }); - return v.parse(markersSchema, response.json); + return v.parse(SCHEMAS.markersSchema, response.json); }, /** @@ -2553,21 +2481,21 @@ class PlApiClient { this.#paginatedGet( this.features.version.software === PIXELFED ? `/api/v0/groups/${groupId}/feed` : `/api/v1/timelines/group/${groupId}`, { params }, - statusSchema, + SCHEMAS.statusSchema, ), /** * Requires features{@link Features['bubbleTimeline']}. */ bubbleTimeline: async (params?: BubbleTimelineParams) => - this.#paginatedGet('/api/v1/timelines/bubble', { params }, statusSchema), + this.#paginatedGet('/api/v1/timelines/bubble', { params }, SCHEMAS.statusSchema), /** * View antennatimeline * Requires features{@link Features['antennas']}. */ antennaTimeline: (antennaId: string, params?: AntennaTimelineParams) => - this.#paginatedGet(`/api/v1/timelines/list/${antennaId}`, { params }, statusSchema), + this.#paginatedGet(`/api/v1/timelines/list/${antennaId}`, { params }, SCHEMAS.statusSchema), }; public readonly lists = { @@ -2579,7 +2507,7 @@ class PlApiClient { getLists: async () => { const response = await this.request('/api/v1/lists'); - return v.parse(filteredArray(listSchema), response.json); + return v.parse(filteredArray(SCHEMAS.listSchema), response.json); }, /** @@ -2590,7 +2518,7 @@ class PlApiClient { getList: async (listId: string) => { const response = await this.request(`/api/v1/lists/${listId}`); - return v.parse(listSchema, response.json); + return v.parse(SCHEMAS.listSchema, response.json); }, /** @@ -2601,7 +2529,7 @@ class PlApiClient { createList: async (params: CreateListParams) => { const response = await this.request('/api/v1/lists', { method: 'POST', body: params }); - return v.parse(listSchema, response.json); + return v.parse(SCHEMAS.listSchema, response.json); }, /** @@ -2612,7 +2540,7 @@ class PlApiClient { updateList: async (listId: string, params: UpdateListParams) => { const response = await this.request(`/api/v1/lists/${listId}`, { method: 'PUT', body: params }); - return v.parse(listSchema, response.json); + return v.parse(SCHEMAS.listSchema, response.json); }, /** @@ -2630,7 +2558,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/lists/#accounts} */ getListAccounts: async (listId: string, params?: GetListAccountsParams) => - this.#paginatedGet(`/api/v1/lists/${listId}/accounts`, { params }, accountSchema), + this.#paginatedGet(`/api/v1/lists/${listId}/accounts`, { params }, SCHEMAS.accountSchema), /** * Add accounts to a list @@ -2666,7 +2594,7 @@ class PlApiClient { favouriteList: async (listId: string) => { const response = await this.request(`/api/v1/lists/${listId}/favourite`, { method: 'POST' }); - return v.parse(listSchema, response.json); + return v.parse(SCHEMAS.listSchema, response.json); }, /** @@ -2677,7 +2605,7 @@ class PlApiClient { unfavouriteList: async (listId: string) => { const response = await this.request(`/api/v1/lists/${listId}/unfavourite`, { method: 'POST' }); - return v.parse(listSchema, response.json); + return v.parse(SCHEMAS.listSchema, response.json); }, }; @@ -2711,7 +2639,7 @@ class PlApiClient { const enqueue = (fn: () => any) => ws.readyState === WebSocket.CONNECTING ? queue.push(fn) : fn(); ws.onmessage = (event) => { - const message = v.parse(streamingEventSchema, JSON.parse(event.data as string)); + const message = v.parse(SCHEMAS.streamingEventSchema, JSON.parse(event.data as string)); listeners.filter(({ listener, stream }) => (!stream || message.stream.includes(stream)) && listener(message)); }; @@ -2758,7 +2686,7 @@ class PlApiClient { ...params.exclude_types.filter(type => PLEROMA_TYPES.includes(type)).map(type => `pleroma:${type}`), ]; - return this.#paginatedGet('/api/v1/notifications', { ...meta, params }, notificationSchema); + return this.#paginatedGet('/api/v1/notifications', { ...meta, params }, SCHEMAS.notificationSchema); }, /** @@ -2769,7 +2697,7 @@ class PlApiClient { getNotification: async (notificationId: string) => { const response = await this.request(`/api/v1/notifications/${notificationId}`); - return v.parse(notificationSchema, response.json); + return v.parse(SCHEMAS.notificationSchema, response.json); }, /** @@ -2819,7 +2747,7 @@ class PlApiClient { getNotificationPolicy: async () => { const response = await this.request('/api/v2/notifications/policy'); - return v.parse(notificationPolicySchema, response.json); + return v.parse(SCHEMAS.notificationPolicySchema, response.json); }, /** @@ -2832,7 +2760,7 @@ class PlApiClient { updateNotificationPolicy: async (params: UpdateNotificationPolicyRequest) => { const response = await this.request('/api/v2/notifications/policy', { method: 'PATCH', body: params }); - return v.parse(notificationPolicySchema, response.json); + return v.parse(SCHEMAS.notificationPolicySchema, response.json); }, /** @@ -2841,7 +2769,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/notifications/#get-requests} */ getNotificationRequests: async (params?: GetNotificationRequestsParams) => - this.#paginatedGet('/api/v1/notifications/requests', { params }, notificationRequestSchema), + this.#paginatedGet('/api/v1/notifications/requests', { params }, SCHEMAS.notificationRequestSchema), /** * Get a single notification request @@ -2851,7 +2779,7 @@ class PlApiClient { getNotificationRequest: async (notificationRequestId: string) => { const response = await this.request(`/api/v1/notifications/requests/${notificationRequestId}`); - return v.parse(notificationRequestSchema, response.json); + return v.parse(SCHEMAS.notificationRequestSchema, response.json); }, /** @@ -2943,7 +2871,7 @@ class PlApiClient { */ getGroupedNotifications: async (params: GetGroupedNotificationsParams, meta?: RequestMeta) => { if (this.features.groupedNotifications) { - return this.#paginatedGet('/api/v2/notifications', { ...meta, params }, groupedNotificationsResultsSchema, false); + return this.#paginatedGet('/api/v2/notifications', { ...meta, params }, SCHEMAS.groupedNotificationsResultsSchema, false); } else { const response = await this.notifications.getNotifications( pick(params, ['max_id', 'since_id', 'limit', 'min_id', 'types', 'exclude_types', 'account_id', 'include_filtered']), @@ -2964,7 +2892,7 @@ class PlApiClient { if (this.features.groupedNotifications) { const response = await this.request(`/api/v2/notifications/${groupKey}`); - return v.parse(groupedNotificationsResultsSchema, response.json); + return v.parse(SCHEMAS.groupedNotificationsResultsSchema, response.json); } else { const response = await this.request(`/api/v1/notifications/${groupKey}`); @@ -3004,7 +2932,7 @@ class PlApiClient { if (this.features.groupedNotifications) { const response = await this.request(`/api/v2/notifications/${groupKey}/accounts`); - return v.parse(filteredArray(accountSchema), response.json); + return v.parse(filteredArray(SCHEMAS.accountSchema), response.json); } else { return (await (this.groupedNotifications.getNotificationGroup(groupKey))).accounts; } @@ -3041,7 +2969,7 @@ class PlApiClient { createSubscription: async (params: CreatePushNotificationsSubscriptionParams) => { const response = await this.request('/api/v1/push/subscription', { method: 'POST', body: params }); - return v.parse(webPushSubscriptionSchema, response.json); + return v.parse(SCHEMAS.webPushSubscriptionSchema, response.json); }, /** @@ -3052,7 +2980,7 @@ class PlApiClient { getSubscription: async () => { const response = await this.request('/api/v1/push/subscription'); - return v.parse(webPushSubscriptionSchema, response.json); + return v.parse(SCHEMAS.webPushSubscriptionSchema, response.json); }, /** @@ -3063,7 +2991,7 @@ class PlApiClient { updateSubscription: async (params: UpdatePushNotificationsSubscriptionParams) => { const response = await this.request('/api/v1/push/subscription', { method: 'PUT', body: params }); - return v.parse(webPushSubscriptionSchema, response.json); + return v.parse(SCHEMAS.webPushSubscriptionSchema, response.json); }, /** @@ -3086,7 +3014,7 @@ class PlApiClient { search: async (q: string, params?: SearchParams, meta?: RequestMeta) => { const response = await this.request('/api/v2/search', { ...meta, params: { ...params, q } }); - return v.parse(searchSchema, response.json); + return v.parse(SCHEMAS.searchSchema, response.json); }, /** @@ -3098,7 +3026,7 @@ class PlApiClient { searchLocation: async (q: string, meta?: RequestMeta) => { const response = await this.request('/api/v1/pleroma/search/location', { ...meta, params: { q } }); - return v.parse(filteredArray(locationSchema), response.json); + return v.parse(filteredArray(SCHEMAS.locationSchema), response.json); }, }; @@ -3116,7 +3044,7 @@ class PlApiClient { response = await this.request('/api/v1/instance'); } - const instance = v.parse(v.pipe(instanceSchema, v.readonly()), response.json); + const instance = v.parse(v.pipe(SCHEMAS.instanceSchema, v.readonly()), response.json); this.#setInstance(instance); return instance; @@ -3157,7 +3085,7 @@ class PlApiClient { getInstanceRules: async () => { const response = await this.request('/api/v1/instance/rules'); - return v.parse(filteredArray(ruleSchema), response.json); + return v.parse(filteredArray(SCHEMAS.ruleSchema), response.json); }, /** @@ -3168,7 +3096,7 @@ class PlApiClient { getInstanceDomainBlocks: async () => { const response = await this.request('/api/v1/instance/rules'); - return v.parse(filteredArray(domainBlockSchema), response.json); + return v.parse(filteredArray(SCHEMAS.domainBlockSchema), response.json); }, /** @@ -3179,7 +3107,7 @@ class PlApiClient { getInstanceExtendedDescription: async () => { const response = await this.request('/api/v1/instance/extended_description'); - return v.parse(extendedDescriptionSchema, response.json); + return v.parse(SCHEMAS.extendedDescriptionSchema, response.json); }, /** @@ -3213,7 +3141,7 @@ class PlApiClient { profileDirectory: async (params?: ProfileDirectoryParams) => { const response = await this.request('/api/v1/directory', { params }); - return v.parse(filteredArray(accountSchema), response.json); + return v.parse(filteredArray(SCHEMAS.accountSchema), response.json); }, /** @@ -3224,7 +3152,7 @@ class PlApiClient { getCustomEmojis: async () => { const response = await this.request('/api/v1/custom_emojis'); - return v.parse(filteredArray(customEmojiSchema), response.json); + return v.parse(filteredArray(SCHEMAS.customEmojiSchema), response.json); }, /** @@ -3251,7 +3179,7 @@ class PlApiClient { { params }, ); - return v.parse(filteredArray(tagSchema), response.json); + return v.parse(filteredArray(SCHEMAS.tagSchema), response.json); }, /** @@ -3265,7 +3193,7 @@ class PlApiClient { { params }, ); - return v.parse(filteredArray(statusSchema), response.json); + return v.parse(filteredArray(SCHEMAS.statusSchema), response.json); }, /** @@ -3276,7 +3204,7 @@ class PlApiClient { getTrendingLinks: async (params?: GetTrendingLinks) => { const response = await this.request('/api/v1/trends/links', { params }); - return v.parse(filteredArray(trendsLinkSchema), response.json); + return v.parse(filteredArray(SCHEMAS.trendsLinkSchema), response.json); }, }; @@ -3289,7 +3217,7 @@ class PlApiClient { getAnnouncements: async () => { const response = await this.request('/api/v1/announcements'); - return v.parse(filteredArray(announcementSchema), response.json); + return v.parse(filteredArray(SCHEMAS.announcementSchema), response.json); }, /** @@ -3336,7 +3264,7 @@ class PlApiClient { */ getAccounts: async (params?: AdminGetAccountsParams) => { if (this.features.mastodonAdminV2) { - return this.#paginatedGet('/api/v2/admin/accounts', { params }, adminAccountSchema); + return this.#paginatedGet('/api/v2/admin/accounts', { params }, SCHEMAS.adminAccountSchema); } else { return this.#paginatedPleromaAccounts(params ? { query: params.username, @@ -3370,7 +3298,7 @@ class PlApiClient { response = await this.request(`/api/v1/admin/users/${accountId}`); } - return v.parse(adminAccountSchema, response.json); + return v.parse(SCHEMAS.adminAccountSchema, response.json); }, /** @@ -3390,7 +3318,7 @@ class PlApiClient { response.json = response.json?.users?.[0]; } - return v.parse(adminAccountSchema, response.json); + return v.parse(SCHEMAS.adminAccountSchema, response.json); }, /** @@ -3412,7 +3340,7 @@ class PlApiClient { } }); } - return v.safeParse(adminAccountSchema, response.json).output || {}; + return v.safeParse(SCHEMAS.adminAccountSchema, response.json).output || {}; }, /** @@ -3423,7 +3351,7 @@ class PlApiClient { deleteAccount: async (accountId: string) => { const response = await this.request(`/api/v1/admin/accounts/${accountId}`, { method: 'DELETE' }); - return v.parse(adminAccountSchema, response.json); + return v.parse(SCHEMAS.adminAccountSchema, response.json); }, /** @@ -3471,7 +3399,7 @@ class PlApiClient { response.json = response.json?.users?.[0]; } - return v.parse(adminAccountSchema, response.json); + return v.parse(SCHEMAS.adminAccountSchema, response.json); }, /** @@ -3482,7 +3410,7 @@ class PlApiClient { unsilenceAccount: async (accountId: string) => { const response = await this.request(`/api/v1/admin/accounts/${accountId}/unsilence`, { method: 'POST' }); - return v.parse(adminAccountSchema, response.json); + return v.parse(SCHEMAS.adminAccountSchema, response.json); }, /** @@ -3502,7 +3430,7 @@ class PlApiClient { response.json = response.json?.users?.[0]; } - return v.parse(adminAccountSchema, response.json); + return v.parse(SCHEMAS.adminAccountSchema, response.json); }, /** @@ -3513,7 +3441,7 @@ class PlApiClient { unsensitiveAccount: async (accountId: string) => { const response = await this.request(`/api/v1/admin/accounts/${accountId}/unsensitive`, { method: 'POST' }); - return v.parse(adminAccountSchema, response.json); + return v.parse(SCHEMAS.adminAccountSchema, response.json); }, /** @@ -3643,7 +3571,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/admin/domain_blocks/#get} */ getDomainBlocks: (params?: AdminGetDomainBlocksParams) => - this.#paginatedGet('/api/v1/admin/domain_blocks', { params }, adminDomainBlockSchema), + this.#paginatedGet('/api/v1/admin/domain_blocks', { params }, SCHEMAS.adminDomainBlockSchema), /** * Get a single blocked domain @@ -3653,7 +3581,7 @@ class PlApiClient { getDomainBlock: async (domainBlockId: string) => { const response = await this.request(`/api/v1/admin/domain_blocks/${domainBlockId}`); - return v.parse(adminDomainBlockSchema, response.json); + return v.parse(SCHEMAS.adminDomainBlockSchema, response.json); }, /** @@ -3667,7 +3595,7 @@ class PlApiClient { body: { ...params, domain }, }); - return v.parse(adminDomainBlockSchema, response.json); + return v.parse(SCHEMAS.adminDomainBlockSchema, response.json); }, /** @@ -3681,7 +3609,7 @@ class PlApiClient { body: params, }); - return v.parse(adminDomainBlockSchema, response.json); + return v.parse(SCHEMAS.adminDomainBlockSchema, response.json); }, /** @@ -3707,7 +3635,7 @@ class PlApiClient { */ getReports: async (params?: AdminGetReportsParams) => { if (this.features.mastodonAdmin) { - return this.#paginatedGet('/api/v1/admin/reports', { params }, adminReportSchema); + return this.#paginatedGet('/api/v1/admin/reports', { params }, SCHEMAS.adminReportSchema); } else { return this.#paginatedPleromaReports({ state: params?.resolved === true ? 'resolved' : params?.resolved === false ? 'open' : undefined, @@ -3728,7 +3656,7 @@ class PlApiClient { response = await this.request(`/api/v1/pleroma/admin/reports/${reportId}`); } - return v.parse(adminReportSchema, response.json); + return v.parse(SCHEMAS.adminReportSchema, response.json); }, /** @@ -3739,7 +3667,7 @@ class PlApiClient { updateReport: async (reportId: string, params: AdminUpdateReportParams) => { const response = await this.request(`/api/v1/admin/reports/${reportId}`, { method: 'PUT', body: params }); - return v.parse(adminReportSchema, response.json); + return v.parse(SCHEMAS.adminReportSchema, response.json); }, /** @@ -3750,7 +3678,7 @@ class PlApiClient { assignReportToSelf: async (reportId: string) => { const response = await this.request(`/api/v1/admin/reports/${reportId}/assign_to_self`, { method: 'POST' }); - return v.parse(adminReportSchema, response.json); + return v.parse(SCHEMAS.adminReportSchema, response.json); }, /** @@ -3761,7 +3689,7 @@ class PlApiClient { unassignReport: async (reportId: string) => { const response = await this.request(`/api/v1/admin/reports/${reportId}/unassign`, { method: 'POST' }); - return v.parse(adminReportSchema, response.json); + return v.parse(SCHEMAS.adminReportSchema, response.json); }, /** @@ -3780,7 +3708,7 @@ class PlApiClient { }); } - return v.parse(adminReportSchema, response.json); + return v.parse(SCHEMAS.adminReportSchema, response.json); }, /** @@ -3799,7 +3727,7 @@ class PlApiClient { }); } - return v.parse(adminReportSchema, response.json); + return v.parse(SCHEMAS.adminReportSchema, response.json); }, }, @@ -3829,7 +3757,7 @@ class PlApiClient { getStatus: async (statusId: string) => { const response = await this.request(`/api/v1/pleroma/admin/statuses/${statusId}`); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -3841,7 +3769,7 @@ class PlApiClient { updateStatus: async (statusId: string, params: AdminUpdateStatusParams) => { const response = await this.request(`/api/v1/pleroma/admin/statuses/${statusId}`, { method: 'PUT', body: params }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -3866,7 +3794,7 @@ class PlApiClient { getTrendingLinks: async () => { const response = await this.request('/api/v1/admin/trends/links'); - return v.parse(filteredArray(trendsLinkSchema), response.json); + return v.parse(filteredArray(SCHEMAS.trendsLinkSchema), response.json); }, /** @@ -3877,7 +3805,7 @@ class PlApiClient { getTrendingStatuses: async () => { const response = await this.request('/api/v1/admin/trends/statuses'); - return v.parse(filteredArray(statusSchema), response.json); + return v.parse(filteredArray(SCHEMAS.statusSchema), response.json); }, /** @@ -3888,7 +3816,7 @@ class PlApiClient { getTrendingTags: async () => { const response = await this.request('/api/v1/admin/trends/links'); - return v.parse(filteredArray(adminTagSchema), response.json); + return v.parse(filteredArray(SCHEMAS.adminTagSchema), response.json); }, }, @@ -3899,7 +3827,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/admin/canonical_email_blocks/#get} */ getCanonicalEmailBlocks: async (params?: AdminGetCanonicalEmailBlocks) => - this.#paginatedGet('/api/v1/admin/canonical_email_blocks', { params }, adminCanonicalEmailBlockSchema), + this.#paginatedGet('/api/v1/admin/canonical_email_blocks', { params }, SCHEMAS.adminCanonicalEmailBlockSchema), /** * Show a single canonical email block @@ -3908,7 +3836,7 @@ class PlApiClient { getCanonicalEmailBlock: async (canonicalEmailBlockId: string) => { const response = await this.request(`/api/v1/admin/canonical_email_blocks/${canonicalEmailBlockId}`); - return v.parse(adminCanonicalEmailBlockSchema, response.json); + return v.parse(SCHEMAS.adminCanonicalEmailBlockSchema, response.json); }, /** @@ -3919,7 +3847,7 @@ class PlApiClient { testCanonicalEmailBlock: async (email: string) => { const response = await this.request('/api/v1/admin/canonical_email_blocks/test', { method: 'POST', body: { email } }); - return v.parse(filteredArray(adminCanonicalEmailBlockSchema), response.json); + return v.parse(filteredArray(SCHEMAS.adminCanonicalEmailBlockSchema), response.json); }, /** @@ -3929,7 +3857,7 @@ class PlApiClient { createCanonicalEmailBlock: async (email: string, canonical_email_hash?: string) => { const response = await this.request('/api/v1/admin/canonical_email_blocks', { method: 'POST', body: { email, canonical_email_hash } }); - return v.parse(filteredArray(adminCanonicalEmailBlockSchema), response.json); + return v.parse(filteredArray(SCHEMAS.adminCanonicalEmailBlockSchema), response.json); }, /** @@ -3953,7 +3881,7 @@ class PlApiClient { getDimensions: async (keys: AdminDimensionKey[], params?: AdminGetDimensionsParams) => { const response = await this.request('/api/v1/admin/dimensions', { params: { ...params, keys } }); - return v.parse(filteredArray(adminDimensionSchema), response.json); + return v.parse(filteredArray(SCHEMAS.adminDimensionSchema), response.json); }, }, @@ -3965,7 +3893,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/admin/domain_allows/#get} */ getDomainAllows: (params?: AdminGetDomainAllowsParams) => - this.#paginatedGet('/api/v1/admin/domain_allows', { params }, adminDomainAllowSchema), + this.#paginatedGet('/api/v1/admin/domain_allows', { params }, SCHEMAS.adminDomainAllowSchema), /** * Get a single allowed domain @@ -3975,7 +3903,7 @@ class PlApiClient { getDomainAllow: async (domainAllowId: string) => { const response = await this.request(`/api/v1/admin/domain_allows/${domainAllowId}`); - return v.parse(adminDomainAllowSchema, response.json); + return v.parse(SCHEMAS.adminDomainAllowSchema, response.json); }, /** @@ -3986,7 +3914,7 @@ class PlApiClient { createDomainAllow: async (domain: string) => { const response = await this.request('/api/v1/admin/domain_allows', { method: 'POST', body: { domain } }); - return v.parse(adminDomainAllowSchema, response.json); + return v.parse(SCHEMAS.adminDomainAllowSchema, response.json); }, /** @@ -4009,7 +3937,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/admin/email_domain_blocks/#get} */ getEmailDomainBlocks: (params?: AdminGetEmailDomainBlocksParams) => - this.#paginatedGet('/api/v1/admin/email_domain_blocks', { params }, adminEmailDomainBlockSchema), + this.#paginatedGet('/api/v1/admin/email_domain_blocks', { params }, SCHEMAS.adminEmailDomainBlockSchema), /** * Get a single blocked email domain @@ -4019,7 +3947,7 @@ class PlApiClient { getEmailDomainBlock: async (emailDomainBlockId: string) => { const response = await this.request(`/api/v1/admin/email_domain_blocks/${emailDomainBlockId}`); - return v.parse(adminEmailDomainBlockSchema, response.json); + return v.parse(SCHEMAS.adminEmailDomainBlockSchema, response.json); }, /** @@ -4030,7 +3958,7 @@ class PlApiClient { createEmailDomainBlock: async (domain: string) => { const response = await this.request('/api/v1/admin/email_domain_blocks', { method: 'POST', body: { domain } }); - return v.parse(adminEmailDomainBlockSchema, response.json); + return v.parse(SCHEMAS.adminEmailDomainBlockSchema, response.json); }, /** @@ -4053,7 +3981,7 @@ class PlApiClient { * @see {@link https://docs.joinmastodon.org/methods/admin/ip_blocks/#get} */ getIpBlocks: (params?: AdminGetIpBlocksParams) => - this.#paginatedGet('/api/v1/admin/ip_blocks', { params }, adminIpBlockSchema), + this.#paginatedGet('/api/v1/admin/ip_blocks', { params }, SCHEMAS.adminIpBlockSchema), /** * Get a single IP block @@ -4063,7 +3991,7 @@ class PlApiClient { getIpBlock: async (ipBlockId: string) => { const response = await this.request(`/api/v1/admin/ip_blocks/${ipBlockId}`); - return v.parse(adminIpBlockSchema, response.json); + return v.parse(SCHEMAS.adminIpBlockSchema, response.json); }, /** @@ -4074,7 +4002,7 @@ class PlApiClient { createIpBlock: async (params: AdminCreateIpBlockParams) => { const response = await this.request('/api/v1/admin/ip_blocks', { method: 'POST', body: params }); - return v.parse(adminIpBlockSchema, response.json); + return v.parse(SCHEMAS.adminIpBlockSchema, response.json); }, /** @@ -4085,7 +4013,7 @@ class PlApiClient { updateIpBlock: async (ipBlockId: string, params: AdminCreateIpBlockParams) => { const response = await this.request(`/api/v1/admin/ip_blocks/${ipBlockId}`, { method: 'POST', body: params }); - return v.parse(adminIpBlockSchema, response.json); + return v.parse(SCHEMAS.adminIpBlockSchema, response.json); }, /** @@ -4110,7 +4038,7 @@ class PlApiClient { getMeasures: async (keys: AdminMeasureKey[], start_at: string, end_at: string, params?: AdminGetMeasuresParams) => { const response = await this.request('/api/v1/admin/measures', { params: { ...params, keys, start_at, end_at } }); - return v.parse(filteredArray(adminMeasureSchema), response.json); + return v.parse(filteredArray(SCHEMAS.adminMeasureSchema), response.json); }, }, @@ -4125,7 +4053,7 @@ class PlApiClient { getRetention: async (start_at: string, end_at: string, frequency: 'day' | 'month') => { const response = await this.request('/api/v1/admin/retention', { params: { start_at, end_at, frequency } }); - return v.parse(adminCohortSchema, response.json); + return v.parse(SCHEMAS.adminCohortSchema, response.json); }, }, @@ -4139,7 +4067,7 @@ class PlApiClient { getAnnouncements: async (params?: AdminGetAnnouncementsParams): Promise> => { const response = await this.request('/api/v1/pleroma/admin/announcements', { params }); - const items = v.parse(filteredArray(adminAnnouncementSchema), response.json); + const items = v.parse(filteredArray(SCHEMAS.adminAnnouncementSchema), response.json); return { previous: null, @@ -4158,7 +4086,7 @@ class PlApiClient { getAnnouncement: async (announcementId: string) => { const response = await this.request(`/api/v1/pleroma/admin/announcements/${announcementId}`); - return v.parse(adminAnnouncementSchema, response.json); + return v.parse(SCHEMAS.adminAnnouncementSchema, response.json); }, /** @@ -4170,7 +4098,7 @@ class PlApiClient { createAnnouncement: async (params: AdminCreateAnnouncementParams) => { const response = await this.request('/api/v1/pleroma/admin/announcements', { method: 'POST', body: params }); - return v.parse(adminAnnouncementSchema, response.json); + return v.parse(SCHEMAS.adminAnnouncementSchema, response.json); }, /** @@ -4182,7 +4110,7 @@ class PlApiClient { updateAnnouncement: async (announcementId: string, params: AdminUpdateAnnouncementParams) => { const response = await this.request(`/api/v1/pleroma/admin/announcements/${announcementId}`, { method: 'PATCH', body: params }); - return v.parse(adminAnnouncementSchema, response.json); + return v.parse(SCHEMAS.adminAnnouncementSchema, response.json); }, /** @@ -4207,7 +4135,7 @@ class PlApiClient { getDomains: async () => { const response = await this.request('/api/v1/pleroma/admin/domains'); - return v.parse(filteredArray(adminDomainSchema), response.json); + return v.parse(filteredArray(SCHEMAS.adminDomainSchema), response.json); }, /** @@ -4218,7 +4146,7 @@ class PlApiClient { createDomain: async (params: AdminCreateDomainParams) => { const response = await this.request('/api/v1/pleroma/admin/domains', { method: 'POST', body: params }); - return v.parse(adminDomainSchema, response.json); + return v.parse(SCHEMAS.adminDomainSchema, response.json); }, /** @@ -4229,7 +4157,7 @@ class PlApiClient { updateDomain: async (domainId: string, isPublic: boolean) => { const response = await this.request(`/api/v1/pleroma/admin/domains/${domainId}`, { method: 'PATCH', body: { public: isPublic } }); - return v.parse(adminDomainSchema, response.json); + return v.parse(SCHEMAS.adminDomainSchema, response.json); }, /** @@ -4254,7 +4182,7 @@ class PlApiClient { getModerationLog: async ({ limit, ...params }: AdminGetModerationLogParams = {}): Promise> => { const response = await this.request('/api/v1/pleroma/admin/moderation_log', { params: { page_size: limit, ...params } }); - const items = v.parse(filteredArray(adminModerationLogEntrySchema), response.json.items); + const items = v.parse(filteredArray(SCHEMAS.adminModerationLogEntrySchema), response.json.items); return { previous: (params.page && params.page > 1) ? () => this.admin.moderationLog.getModerationLog({ ...params, page: params.page! - 1 }) : null, @@ -4275,7 +4203,7 @@ class PlApiClient { getRelays: async () => { const response = await this.request('/api/v1/pleroma/admin/relay'); - return v.parse(filteredArray(adminRelaySchema), response.json); + return v.parse(filteredArray(SCHEMAS.adminRelaySchema), response.json); }, /** @@ -4287,7 +4215,7 @@ class PlApiClient { followRelay: async (relayUrl: string) => { const response = await this.request('/api/v1/pleroma/admin/relay', { method: 'POST', body: { relay_url: relayUrl } }); - return v.parse(adminRelaySchema, response.json); + return v.parse(SCHEMAS.adminRelaySchema, response.json); }, /** @@ -4299,7 +4227,7 @@ class PlApiClient { unfollowRelay: async (relayUrl: string, force = false) => { const response = await this.request('/api/v1/pleroma/admin/relay', { method: 'DELETE', body: { relay_url: relayUrl, force } }); - return v.parse(adminRelaySchema, response.json); + return v.parse(SCHEMAS.adminRelaySchema, response.json); }, }, @@ -4313,7 +4241,7 @@ class PlApiClient { getRules: async () => { const response = await this.request('/api/v1/pleroma/admin/rules'); - return v.parse(filteredArray(adminRuleSchema), response.json); + return v.parse(filteredArray(SCHEMAS.adminRuleSchema), response.json); }, /** @@ -4325,7 +4253,7 @@ class PlApiClient { createRule: async (params: AdminCreateRuleParams) => { const response = await this.request('/api/v1/pleroma/admin/rules', { method: 'POST', body: params }); - return v.parse(adminRuleSchema, response.json); + return v.parse(SCHEMAS.adminRuleSchema, response.json); }, /** @@ -4337,7 +4265,7 @@ class PlApiClient { updateRule: async (ruleId: string, params: AdminUpdateRuleParams) => { const response = await this.request(`/api/v1/pleroma/admin/rules/${ruleId}`, { method: 'PATCH', body: params }); - return v.parse(adminRuleSchema, response.json); + return v.parse(SCHEMAS.adminRuleSchema, response.json); }, /** @@ -4357,13 +4285,13 @@ class PlApiClient { getPleromaConfig: async () => { const response = await this.request('/api/v1/pleroma/admin/config'); - return v.parse(pleromaConfigSchema, response.json); + return v.parse(SCHEMAS.pleromaConfigSchema, response.json); }, updatePleromaConfig: async (params: PleromaConfig['configs']) => { const response = await this.request('/api/v1/pleroma/admin/config', { method: 'POST', body: { configs: params } }); - return v.parse(pleromaConfigSchema, response.json); + return v.parse(SCHEMAS.pleromaConfigSchema, response.json); }, }, }; @@ -4400,7 +4328,7 @@ class PlApiClient { createChat: async (accountId: string) => { const response = await this.request(`/api/v1/pleroma/chats/by-account-id/${accountId}`, { method: 'POST' }); - return v.parse(chatSchema, response.json); + return v.parse(SCHEMAS.chatSchema, response.json); }, /** @@ -4409,7 +4337,7 @@ class PlApiClient { getChat: async (chatId: string) => { const response = await this.request(`/api/v1/pleroma/chats/${chatId}`); - return v.parse(chatSchema, response.json); + return v.parse(SCHEMAS.chatSchema, response.json); }, /** @@ -4420,7 +4348,7 @@ class PlApiClient { markChatAsRead: async (chatId: string, last_read_id: string) => { const response = await this.request(`/api/v1/pleroma/chats/${chatId}/read`, { method: 'POST', body: { last_read_id } }); - return v.parse(chatSchema, response.json); + return v.parse(SCHEMAS.chatSchema, response.json); }, /** @@ -4431,7 +4359,7 @@ class PlApiClient { markChatMessageAsRead: async (chatId: string, chatMessageId: string) => { const response = await this.request(`/api/v1/pleroma/chats/${chatId}/messages/${chatMessageId}/read`, { method: 'POST' }); - return v.parse(chatSchema, response.json); + return v.parse(SCHEMAS.chatSchema, response.json); }, /** @@ -4440,14 +4368,14 @@ class PlApiClient { * @see {@link https://docs.pleroma.social/backend/development/API/chats/#getting-a-list-of-chats} */ getChats: async (params?: GetChatsParams) => - this.#paginatedGet('/api/v2/pleroma/chats', { params }, chatSchema), + this.#paginatedGet('/api/v2/pleroma/chats', { params }, SCHEMAS.chatSchema), /** * Getting the messages for a Chat * For a given Chat id, you can get the associated messages with */ getChatMessages: async (chatId: string, params?: GetChatMessagesParams) => - this.#paginatedGet(`/api/v1/pleroma/chats/${chatId}/messages`, { params }, chatMessageSchema), + this.#paginatedGet(`/api/v1/pleroma/chats/${chatId}/messages`, { params }, SCHEMAS.chatMessageSchema), /** * Posting a chat message @@ -4457,7 +4385,7 @@ class PlApiClient { createChatMessage: async (chatId: string, params: CreateChatMessageParams) => { const response = await this.request(`/api/v1/pleroma/chats/${chatId}/messages`, { method: 'POST', body: params }); - return v.parse(chatMessageSchema, response.json); + return v.parse(SCHEMAS.chatMessageSchema, response.json); }, /** @@ -4468,7 +4396,7 @@ class PlApiClient { deleteChatMessage: async (chatId: string, messageId: string) => { const response = await this.request(`/api/v1/pleroma/chats/${chatId}/messages/${messageId}`, { method: 'DELETE' }); - return v.parse(chatMessageSchema, response.json); + return v.parse(SCHEMAS.chatMessageSchema, response.json); }, /** @@ -4479,7 +4407,7 @@ class PlApiClient { deleteChat: async (chatId: string) => { const response = await this.request(`/api/v1/pleroma/chats/${chatId}`, { method: 'DELETE' }); - return v.parse(chatSchema, response.json); + return v.parse(SCHEMAS.chatSchema, response.json); }, }; @@ -4491,7 +4419,7 @@ class PlApiClient { createEvent: async (params: CreateEventParams) => { const response = await this.request('/api/v1/pleroma/events', { method: 'POST', body: params }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -4501,7 +4429,7 @@ class PlApiClient { editEvent: async (statusId: string, params: EditEventParams) => { const response = await this.request(`/api/v1/pleroma/events/${statusId}`, { method: 'PUT', body: params }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -4509,14 +4437,14 @@ class PlApiClient { * @see {@link https://github.com/mkljczk/pl/blob/fork/docs/development/API/pleroma_api.md#apiv1pleromaeventsjoined_events} */ getJoinedEvents: async (state?: 'pending' | 'reject' | 'accept', params?: GetJoinedEventsParams) => - this.#paginatedGet('/api/v1/pleroma/events/joined_events', { params: { ...params, state } }, statusSchema), + this.#paginatedGet('/api/v1/pleroma/events/joined_events', { params: { ...params, state } }, SCHEMAS.statusSchema), /** * Gets event participants * @see {@link https://github.com/mkljczk/pl/blob/fork/docs/development/API/pleroma_api.md#apiv1pleromaeventsidparticipations} */ getEventParticipations: async (statusId: string, params?: GetEventParticipationsParams) => - this.#paginatedGet(`/api/v1/pleroma/events/${statusId}/participations`, { params }, accountSchema), + this.#paginatedGet(`/api/v1/pleroma/events/${statusId}/participations`, { params }, SCHEMAS.accountSchema), /** * Gets event participation requests @@ -4524,7 +4452,7 @@ class PlApiClient { */ getEventParticipationRequests: async (statusId: string, params?: GetEventParticipationRequestsParams) => this.#paginatedGet(`/api/v1/pleroma/events/${statusId}/participation_requests`, { params }, v.object({ - account: accountSchema, + account: SCHEMAS.accountSchema, participation_message: v.fallback(v.string(), ''), })), @@ -4535,7 +4463,7 @@ class PlApiClient { acceptEventParticipationRequest: async (statusId: string, accountId: string) => { const response = await this.request(`/api/v1/pleroma/events/${statusId}/participation_requests/${accountId}/authorize`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -4545,7 +4473,7 @@ class PlApiClient { rejectEventParticipationRequest: async (statusId: string, accountId: string) => { const response = await this.request(`/api/v1/pleroma/events/${statusId}/participation_requests/${accountId}/reject`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -4555,7 +4483,7 @@ class PlApiClient { joinEvent: async (statusId: string, participation_message?: string) => { const response = await this.request(`/api/v1/pleroma/events/${statusId}/join`, { method: 'POST', body: { participation_message } }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -4565,7 +4493,7 @@ class PlApiClient { leaveEvent: async (statusId: string) => { const response = await this.request(`/api/v1/pleroma/events/${statusId}/leave`, { method: 'POST' }); - return v.parse(statusSchema, response.json); + return v.parse(SCHEMAS.statusSchema, response.json); }, /** @@ -4586,7 +4514,7 @@ class PlApiClient { * Requires features{@link Features['interactionRequests']}. */ getInteractionRequests: async (params?: GetInteractionRequestsParams) => - this.#paginatedGet('/api/v1/interaction_requests', { params }, interactionRequestSchema), + this.#paginatedGet('/api/v1/interaction_requests', { params }, SCHEMAS.interactionRequestSchema), /** * Get interaction request with the given ID. @@ -4596,7 +4524,7 @@ class PlApiClient { getInteractionRequest: async (interactionRequestId: string) => { const response = await this.request(`/api/v1/interaction_requests/${interactionRequestId}`); - return v.parse(interactionRequestSchema, response.json); + return v.parse(SCHEMAS.interactionRequestSchema, response.json); }, /** @@ -4607,7 +4535,7 @@ class PlApiClient { authorizeInteractionRequest: async (interactionRequestId: string) => { const response = await this.request(`/api/v1/interaction_requests/${interactionRequestId}/authorize`, { method: 'POST' }); - return v.parse(interactionRequestSchema, response.json); + return v.parse(SCHEMAS.interactionRequestSchema, response.json); }, /** @@ -4618,7 +4546,7 @@ class PlApiClient { rejectInteractionRequest: async (interactionRequestId: string) => { const response = await this.request(`/api/v1/interaction_requests/${interactionRequestId}/authorize`, { method: 'POST' }); - return v.parse(interactionRequestSchema, response.json); + return v.parse(SCHEMAS.interactionRequestSchema, response.json); }, }; @@ -4629,7 +4557,7 @@ class PlApiClient { fetchAntennas: async () => { const response = await this.request('/api/v1/antennas'); - return v.parse(filteredArray(antennaSchema), response.json); + return v.parse(filteredArray(SCHEMAS.antennaSchema), response.json); }, /** @@ -4638,7 +4566,7 @@ class PlApiClient { getAntennas: async (antennaId: string) => { const response = await this.request(`/api/v1/antennas/${antennaId}`); - return v.parse(antennaSchema, response.json); + return v.parse(SCHEMAS.antennaSchema, response.json); }, /** @@ -4647,7 +4575,7 @@ class PlApiClient { createAntenna: async (params: CreateAntennaParams) => { const response = await this.request('/api/v1/antennas', { method: 'POST', body: params }); - return v.parse(antennaSchema, response.json); + return v.parse(SCHEMAS.antennaSchema, response.json); }, /** @@ -4656,7 +4584,7 @@ class PlApiClient { updateAntenna: async (antennaId: string, params: UpdateAntennaParams) => { const response = await this.request(`/api/v1/antennas/${antennaId}`, { method: 'PUT', body: params }); - return v.parse(antennaSchema, response.json); + return v.parse(SCHEMAS.antennaSchema, response.json); }, /** @@ -4674,7 +4602,7 @@ class PlApiClient { getAntennaAccounts: async (antennaId: string) => { const response = await this.request(`/api/v1/antennas/${antennaId}/accounts`); - return v.parse(filteredArray(accountSchema), response.json); + return v.parse(filteredArray(SCHEMAS.accountSchema), response.json); }, /** @@ -4707,7 +4635,7 @@ class PlApiClient { getAntennaExcludeAccounts: async (antennaId: string) => { const response = await this.request(`/api/v1/antennas/${antennaId}/exclude_accounts`); - return v.parse(filteredArray(accountSchema), response.json); + return v.parse(filteredArray(SCHEMAS.accountSchema), response.json); }, /** @@ -4922,7 +4850,7 @@ class PlApiClient { fetchCircles: async () => { const response = await this.request('/api/v1/circles'); - return v.parse(filteredArray(circleSchema), response.json); + return v.parse(filteredArray(SCHEMAS.circleSchema), response.json); }, /** @@ -4931,7 +4859,7 @@ class PlApiClient { getCircles: async (circleId: string) => { const response = await this.request(`/api/v1/circles/${circleId}`); - return v.parse(circleSchema, response.json); + return v.parse(SCHEMAS.circleSchema, response.json); }, /** @@ -4940,7 +4868,7 @@ class PlApiClient { createCircle: async (title: string) => { const response = await this.request('/api/v1/circles', { method: 'POST', body: { title } }); - return v.parse(circleSchema, response.json); + return v.parse(SCHEMAS.circleSchema, response.json); }, /** @@ -4949,7 +4877,7 @@ class PlApiClient { updateCircle: async (circleId: string, title: string) => { const response = await this.request(`/api/v1/circles/${circleId}`, { method: 'PUT', body: { title } }); - return v.parse(circleSchema, response.json); + return v.parse(SCHEMAS.circleSchema, response.json); }, /** @@ -4962,7 +4890,7 @@ class PlApiClient { }, getCircleStatuses: (circleId: string, params: GetCircleStatusesParams) => - this.#paginatedGet(`/api/v1/circles/${circleId}/statuses`, { params }, statusSchema), + this.#paginatedGet(`/api/v1/circles/${circleId}/statuses`, { params }, SCHEMAS.statusSchema), }; /** Routes that are not part of any stable release */ @@ -4974,35 +4902,35 @@ class PlApiClient { getGroups: async (params?: AdminGetGroupsParams) => { const response = await this.request('/api/v1/admin/groups', { params }); - return v.parse(filteredArray(groupSchema), response.json); + return v.parse(filteredArray(SCHEMAS.groupSchema), response.json); }, /** return basic group information */ getGroup: async (groupId: string) => { const response = await this.request(`/api/v1/admin/groups/${groupId}`); - return v.parse(groupSchema, response.json); + return v.parse(SCHEMAS.groupSchema, response.json); }, /** suspends a group */ suspendGroup: async (groupId: string) => { const response = await this.request(`/api/v1/admin/groups/${groupId}/suspend`, { method: 'POST' }); - return v.parse(groupSchema, response.json); + return v.parse(SCHEMAS.groupSchema, response.json); }, /** lift a suspension */ unsuspendGroup: async (groupId: string) => { const response = await this.request(`/api/v1/admin/groups/${groupId}/unsuspend`, { method: 'POST' }); - return v.parse(groupSchema, response.json); + return v.parse(SCHEMAS.groupSchema, response.json); }, /** deletes an already-suspended group */ deleteGroup: async (groupId: string) => { const response = await this.request(`/api/v1/admin/groups/${groupId}`, { method: 'DELETE' }); - return v.parse(groupSchema, response.json); + return v.parse(SCHEMAS.groupSchema, response.json); }, }, }, @@ -5018,7 +4946,7 @@ class PlApiClient { response = await this.request('/api/v1/groups'); } - return v.parse(filteredArray(groupSchema), response.json); + return v.parse(filteredArray(SCHEMAS.groupSchema), response.json); }, /** create a group with the given attributes (`display_name`, `note`, `avatar` and `header`). Sets the user who made the request as group administrator */ @@ -5043,7 +4971,7 @@ class PlApiClient { }); } - return v.parse(groupSchema, response.json); + return v.parse(SCHEMAS.groupSchema, response.json); }, /** returns the `Group` entity describing a given group */ @@ -5056,7 +4984,7 @@ class PlApiClient { response = await this.request(`/api/v1/groups/${groupId}`); } - return v.parse(groupSchema, response.json); + return v.parse(SCHEMAS.groupSchema, response.json); }, /** update group attributes (`display_name`, `note`, `avatar` and `header`) */ @@ -5067,7 +4995,7 @@ class PlApiClient { contentType: params.avatar || params.header ? '' : undefined, }); - return v.parse(groupSchema, response.json); + return v.parse(SCHEMAS.groupSchema, response.json); }, /** irreversibly deletes the group */ @@ -5088,7 +5016,7 @@ class PlApiClient { this.#paginatedGet( this.features.version.software === PIXELFED ? `/api/v0/groups/members/list?gid=${groupId}` : `/api/v1/groups/${groupId}/memberships`, { params: { ...params, role } }, - groupMemberSchema, + SCHEMAS.groupMemberSchema, ), /** returns an array of `Account` entities representing pending requests to join a group */ @@ -5096,7 +5024,7 @@ class PlApiClient { this.#paginatedGet( this.features.version.software === PIXELFED ? `/api/v0/groups/members/requests?gid=${groupId}` : `/api/v1/groups/${groupId}/membership_requests`, { params }, - accountSchema, + SCHEMAS.accountSchema, ), /** accept a pending request to become a group member */ @@ -5122,7 +5050,7 @@ class PlApiClient { /** list accounts blocked from interacting with the group */ getGroupBlocks: async (groupId: string, params?: GetGroupBlocksParams) => - this.#paginatedGet(`/api/v1/groups/${groupId}/blocks`, { params }, accountSchema), + this.#paginatedGet(`/api/v1/groups/${groupId}/blocks`, { params }, SCHEMAS.accountSchema), /** block one or more users. If they were in the group, they are also kicked of it */ blockGroupUsers: async (groupId: string, accountIds: string[]) => { @@ -5142,14 +5070,14 @@ class PlApiClient { joinGroup: async (groupId: string) => { const response = await this.request(`/api/v1/groups/${groupId}/join`, { method: 'POST' }); - return v.parse(groupRelationshipSchema, response.json); + return v.parse(SCHEMAS.groupRelationshipSchema, response.json); }, /** leaves a given group */ leaveGroup: async (groupId: string) => { const response = await this.request(`/api/v1/groups/${groupId}/leave`, { method: 'POST' }); - return v.parse(groupRelationshipSchema, response.json); + return v.parse(SCHEMAS.groupRelationshipSchema, response.json); }, /** kick one or more group members */ @@ -5163,20 +5091,20 @@ class PlApiClient { promoteGroupUsers: async (groupId: string, accountIds: string[], role: GroupRole) => { const response = await this.request(`/api/v1/groups/${groupId}/promote`, { method: 'POST', params: { account_ids: accountIds, role } }); - return v.parse(filteredArray(groupMemberSchema), response.json); + return v.parse(filteredArray(SCHEMAS.groupMemberSchema), response.json); }, /** demote one or more accounts to role `new_role`. Returns an error unless every of the target account has a strictly lower role than the user (you cannot demote someone with the same role as you), or if any target account already has a role lower than `new_role`. Valid roles are `admin`, `moderator` and `user`. */ demoteGroupUsers: async (groupId: string, accountIds: string[], role: GroupRole) => { const response = await this.request(`/api/v1/groups/${groupId}/demote`, { method: 'POST', params: { account_ids: accountIds, role } }); - return v.parse(filteredArray(groupMemberSchema), response.json); + return v.parse(filteredArray(SCHEMAS.groupMemberSchema), response.json); }, getGroupRelationships: async (groupIds: string[]) => { const response = await this.request('/api/v1/groups/relationships', { params: { id: groupIds } }); - return v.parse(filteredArray(groupRelationshipSchema), response.json); + return v.parse(filteredArray(SCHEMAS.groupRelationshipSchema), response.json); }, }, }; diff --git a/packages/pl-api/lib/entities/index.ts b/packages/pl-api/lib/entities/index.ts index f379e6397..06807d3fd 100644 --- a/packages/pl-api/lib/entities/index.ts +++ b/packages/pl-api/lib/entities/index.ts @@ -26,6 +26,7 @@ export * from './backup'; export * from './bookmark-folder'; export * from './chat'; export * from './chat-message'; +export * from './circle'; export * from './context'; export * from './conversation'; export * from './custom-emoji'; @@ -57,6 +58,7 @@ export * from './notification-request'; export * from './oauth-token'; export * from './poll'; export * from './preview-card'; +export * from './preview-card-author'; export * from './relationship'; export * from './relationship-severance-event'; export * from './report'; diff --git a/packages/pl-api/lib/main.ts b/packages/pl-api/lib/main.ts index 9d4abc3d4..c3402b659 100644 --- a/packages/pl-api/lib/main.ts +++ b/packages/pl-api/lib/main.ts @@ -5,3 +5,5 @@ export * from './entities'; export * from './features'; export * from './params'; export * from './responses'; +export * from './schemas'; +export * from './schemas/all-schemas'; diff --git a/packages/pl-api/lib/schemas/all-schemas.ts b/packages/pl-api/lib/schemas/all-schemas.ts new file mode 100644 index 000000000..a314bd79b --- /dev/null +++ b/packages/pl-api/lib/schemas/all-schemas.ts @@ -0,0 +1,193 @@ +import { + accountSchema, + accountWarningSchema, + adminAccountSchema, + adminAnnouncementSchema, + adminCanonicalEmailBlockSchema, + adminCohortSchema, + adminDimensionSchema, + adminDomainAllowSchema, + adminDomainBlockSchema, + adminDomainSchema, + adminEmailDomainBlockSchema, + adminIpBlockSchema, + adminIpSchema, + adminMeasureSchema, + adminModerationLogEntrySchema, + adminRelaySchema, + adminReportSchema, + adminRuleSchema, + adminTagSchema, + announcementReactionSchema, + announcementSchema, + antennaSchema, + applicationSchema, + backupSchema, + blurhashSchema, + bookmarkFolderSchema, + chatMessageSchema, + chatSchema, + circleSchema, + contextSchema, + conversationSchema, + credentialAccountSchema, + credentialApplicationSchema, + customEmojiSchema, + domainBlockSchema, + emojiReactionSchema, + extendedDescriptionSchema, + familiarFollowersSchema, + featuredTagSchema, + filterKeywordSchema, + filterSchema, + filterStatusSchema, + followRelationshipUpdateSchema, + groupedNotificationsResultsSchema, + groupMemberSchema, + groupRelationshipSchema, + groupSchema, + historySchema, + instanceSchema, + interactionPoliciesSchema, + interactionPolicySchema, + interactionRequestSchema, + listSchema, + locationSchema, + markerSchema, + markersSchema, + mediaAttachmentSchema, + mentionSchema, + mutedAccountSchema, + notificationGroupSchema, + notificationPolicySchema, + notificationRequestSchema, + notificationSchema, + oauthTokenSchema, + pleromaConfigSchema, + pollSchema, + previewCardAuthorSchema, + previewCardSchema, + relationshipSchema, + relationshipSeveranceEventSchema, + reportSchema, + roleSchema, + ruleSchema, + scheduledStatusSchema, + scrobbleSchema, + searchSchema, + statusEditSchema, + statusSchema, + statusSourceSchema, + statusWithoutAccountSchema, + streamingEventSchema, + suggestionSchema, + tagSchema, + tokenSchema, + translationSchema, + trendsLinkSchema, + webPushSubscriptionSchema, +} from '../entities'; + +const NON_ADMIN_SCHEMAS = { + accountSchema, + accountWarningSchema, + announcementReactionSchema, + announcementSchema, + antennaSchema, + applicationSchema, + backupSchema, + blurhashSchema, + bookmarkFolderSchema, + chatMessageSchema, + chatSchema, + circleSchema, + contextSchema, + conversationSchema, + credentialAccountSchema, + credentialApplicationSchema, + customEmojiSchema, + domainBlockSchema, + emojiReactionSchema, + extendedDescriptionSchema, + familiarFollowersSchema, + featuredTagSchema, + filterKeywordSchema, + filterSchema, + filterStatusSchema, + followRelationshipUpdateSchema, + groupedNotificationsResultsSchema, + groupMemberSchema, + groupRelationshipSchema, + groupSchema, + historySchema, + instanceSchema, + interactionPoliciesSchema, + interactionPolicySchema, + interactionRequestSchema, + listSchema, + locationSchema, + markerSchema, + markersSchema, + mediaAttachmentSchema, + mentionSchema, + mutedAccountSchema, + notificationGroupSchema, + notificationPolicySchema, + notificationRequestSchema, + notificationSchema, + oauthTokenSchema, + pollSchema, + previewCardAuthorSchema, + previewCardSchema, + relationshipSchema, + relationshipSeveranceEventSchema, + reportSchema, + roleSchema, + ruleSchema, + scheduledStatusSchema, + scrobbleSchema, + searchSchema, + statusEditSchema, + statusSchema, + statusSourceSchema, + statusWithoutAccountSchema, + streamingEventSchema, + suggestionSchema, + tagSchema, + tokenSchema, + translationSchema, + trendsLinkSchema, + webPushSubscriptionSchema, +}; + +const ADMIN_SCHEMAS = { + adminAccountSchema, + adminAnnouncementSchema, + adminCanonicalEmailBlockSchema, + adminCohortSchema, + adminDimensionSchema, + adminDomainAllowSchema, + adminDomainBlockSchema, + adminDomainSchema, + adminEmailDomainBlockSchema, + adminIpBlockSchema, + adminIpSchema, + adminMeasureSchema, + adminModerationLogEntrySchema, + adminRelaySchema, + adminReportSchema, + adminRuleSchema, + adminTagSchema, + pleromaConfigSchema, +}; + +const ALL_SCHEMAS = { + ...ADMIN_SCHEMAS, + ...NON_ADMIN_SCHEMAS, +}; + +export { + ALL_SCHEMAS, + ADMIN_SCHEMAS, + NON_ADMIN_SCHEMAS, +}; diff --git a/packages/pl-api/lib/schemas/index.ts b/packages/pl-api/lib/schemas/index.ts new file mode 100644 index 000000000..5a89ec5da --- /dev/null +++ b/packages/pl-api/lib/schemas/index.ts @@ -0,0 +1,17 @@ +import * as v from 'valibot'; + +import type { ALL_SCHEMAS } from './all-schemas'; + +const nullSchema = v.fallback(v.null(), null); + +const IMPORTED_SCHEMAS = {} as typeof ALL_SCHEMAS; + +const SCHEMAS = new Proxy(IMPORTED_SCHEMAS, { + get: (target, p: keyof typeof ALL_SCHEMAS) => p in target ? target[p] : nullSchema, +}); + +const importSchemas = (schemas: Partial) => + // @ts-ignore + Object.entries(schemas).forEach(([key, value]) => IMPORTED_SCHEMAS[key] = value); + +export { SCHEMAS, importSchemas }; diff --git a/packages/pl-api/package.json b/packages/pl-api/package.json index c2e37a7b4..0a2c694f2 100644 --- a/packages/pl-api/package.json +++ b/packages/pl-api/package.json @@ -1,6 +1,6 @@ { "name": "pl-api", - "version": "1.0.0-rc.10", + "version": "1.0.0-rc.11", "type": "module", "homepage": "https://github.com/mkljczk/pl-fe/tree/develop/packages/pl-api", "repository": { diff --git a/packages/pl-fe/src/main.tsx b/packages/pl-fe/src/main.tsx index 7c2fb376e..fa288ed3f 100644 --- a/packages/pl-fe/src/main.tsx +++ b/packages/pl-fe/src/main.tsx @@ -1,3 +1,4 @@ +import './schemas'; import './polyfills'; import React from 'react'; diff --git a/packages/pl-fe/src/schemas.ts b/packages/pl-fe/src/schemas.ts new file mode 100644 index 000000000..beae4f4dd --- /dev/null +++ b/packages/pl-fe/src/schemas.ts @@ -0,0 +1,3 @@ +import { ALL_SCHEMAS, importSchemas } from 'pl-api'; + +importSchemas(ALL_SCHEMAS); diff --git a/packages/pl-hooks/package.json b/packages/pl-hooks/package.json index 73432ccd2..8000ab03c 100644 --- a/packages/pl-hooks/package.json +++ b/packages/pl-hooks/package.json @@ -1,6 +1,6 @@ { "name": "pl-hooks", - "version": "0.0.6", + "version": "0.0.7", "type": "module", "homepage": "https://github.com/mkljczk/pl-fe/tree/develop/packages/pl-hooks", "repository": { @@ -35,9 +35,9 @@ "dependencies": { "@tanstack/react-query": "^5.59.16", "lodash": "^4.17.21", - "pl-api": "^1.0.0-rc.1", + "pl-api": "^1.0.0-rc.11", "react": "^18.3.1", - "valibot": "^0.42.1" + "valibot": "^1.0.0-beta.9" }, "module": "./dist/main.es.js", "types": "dist/main.d.ts", diff --git a/packages/pl-hooks/yarn.lock b/packages/pl-hooks/yarn.lock index 0fd13bda8..d9660033b 100644 --- a/packages/pl-hooks/yarn.lock +++ b/packages/pl-hooks/yarn.lock @@ -2158,10 +2158,10 @@ pkg-types@^1.0.3, pkg-types@^1.1.1: mlly "^1.7.1" pathe "^1.1.2" -pl-api@^1.0.0-rc.1: - version "1.0.0-rc.1" - resolved "https://registry.yarnpkg.com/pl-api/-/pl-api-1.0.0-rc.1.tgz#e5b1ead42230ed86e57ebaf020f3a2114da3bce0" - integrity sha512-bwV831HoATajRlmZg4USIzQvHgZC9MBAg0/sN/T5uXrM5tcUzfM+qU5ZQIzk+r5gSQ0ZCwqkjbajvhbn9tRcBA== +pl-api@^1.0.0-rc.11: + version "1.0.0-rc.11" + resolved "https://registry.yarnpkg.com/pl-api/-/pl-api-1.0.0-rc.11.tgz#57336fa1907ad62daf46c641e75bc32a93126554" + integrity sha512-7trd+istbYdDYC8lXE7soUVOJGBMlKdYM0RLuBSzdV6UnL8h0TOgJKQ6lD/hc8bFYKXbN0i/vJYW6GDgcuAEAQ== dependencies: blurhash "^2.0.5" http-link-header "^1.1.3" @@ -2171,7 +2171,7 @@ pl-api@^1.0.0-rc.1: object-to-formdata "^4.5.1" query-string "^9.1.1" semver "^7.6.3" - valibot "^0.42.1" + valibot "^1.0.0-beta.9" possible-typed-array-names@^1.0.0: version "1.0.0" @@ -2613,10 +2613,10 @@ uri-js@^4.2.2, uri-js@^4.4.1: dependencies: punycode "^2.1.0" -valibot@^0.42.1: - version "0.42.1" - resolved "https://registry.yarnpkg.com/valibot/-/valibot-0.42.1.tgz#a31183d8e9d7552f98e22ca0977172cab8815188" - integrity sha512-3keXV29Ar5b//Hqi4MbSdV7lfVp6zuYLZuA9V1PvQUsXqogr+u5lvLPLk3A4f74VUXDnf/JfWMN6sB+koJ/FFw== +valibot@^1.0.0-beta.9: + version "1.0.0-beta.9" + resolved "https://registry.yarnpkg.com/valibot/-/valibot-1.0.0-beta.9.tgz#8ae38ca53429a5c4c4cce4378e3c87cca708a287" + integrity sha512-yEX8gMAZ2R1yI2uwOO4NCtVnJQx36zn3vD0omzzj9FhcoblvPukENIiRZXKZwCnqSeV80bMm8wNiGhQ0S8fiww== vite-plugin-dts@^4.2.1: version "4.2.1"