Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,10 @@ const AppsPageContent = (): ReactElement => {

const noInstalledApps = appsResult.phase === AsyncStatePhase.RESOLVED && !isMarketplace && appsResult.value?.totalAppsLength === 0;

const unsupportedVersion = appsResult.phase === AsyncStatePhase.REJECTED && appsResult.error.message === 'unsupported version';
// TODO: Introduce error codes, so we can avoid using error message strings for this kind of logic
// whenever we change the error message, this code ends up breaking.
const unsupportedVersion =
appsResult.phase === AsyncStatePhase.REJECTED && appsResult.error.message === 'Marketplace_Unsupported_Version';

const noMarketplaceOrInstalledAppMatches =
appsResult.phase === AsyncStatePhase.RESOLVED && (isMarketplace || isPremium) && appsResult.value?.count === 0;
Expand Down
10 changes: 5 additions & 5 deletions apps/meteor/ee/server/apps/communication/rest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import { formatAppInstanceForRest } from '../../../lib/misc/formatAppInstanceFor
import { notifyAppInstall } from '../marketplace/appInstall';
import { fetchMarketplaceApps } from '../marketplace/fetchMarketplaceApps';
import { fetchMarketplaceCategories } from '../marketplace/fetchMarketplaceCategories';
import { MarketplaceConnectionError, MarketplaceAppsError } from '../marketplace/marketplaceErrors';
import { MarketplaceConnectionError, MarketplaceAppsError, MarketplaceUnsupportedVersionError } from '../marketplace/marketplaceErrors';
import type { AppServerOrchestrator } from '../orchestrator';
import { Apps } from '../orchestrator';

Expand Down Expand Up @@ -122,7 +122,7 @@ export class AppsRestApi {
return handleError('Unable to access Marketplace. Does the server has access to the internet?', err);
}

if (err instanceof MarketplaceAppsError) {
if (err instanceof MarketplaceAppsError || err instanceof MarketplaceUnsupportedVersionError) {
return API.v1.failure({ error: err.message });
}

Expand Down Expand Up @@ -151,7 +151,7 @@ export class AppsRestApi {
return handleError('Unable to access Marketplace. Does the server has access to the internet?', err);
}

if (err instanceof MarketplaceAppsError) {
if (err instanceof MarketplaceAppsError || err instanceof MarketplaceUnsupportedVersionError) {
return API.v1.failure({ error: err.message });
}

Expand Down Expand Up @@ -229,7 +229,7 @@ export class AppsRestApi {
return handleError('Unable to access Marketplace. Does the server has access to the internet?', e);
}

if (e instanceof MarketplaceAppsError) {
if (e instanceof MarketplaceAppsError || e instanceof MarketplaceUnsupportedVersionError) {
return API.v1.failure({ error: e.message });
}

Expand All @@ -253,7 +253,7 @@ export class AppsRestApi {
return handleError('Unable to access Marketplace. Does the server has access to the internet?', err);
}

if (err instanceof MarketplaceAppsError) {
if (err instanceof MarketplaceAppsError || err instanceof MarketplaceUnsupportedVersionError) {
return API.v1.failure({ error: err.message });
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { z } from 'zod';
import { getMarketplaceHeaders } from './getMarketplaceHeaders';
import { getWorkspaceAccessToken } from '../../../../app/cloud/server';
import { Apps } from '../orchestrator';
import { MarketplaceAppsError, MarketplaceConnectionError } from './marketplaceErrors';
import { MarketplaceAppsError, MarketplaceConnectionError, MarketplaceUnsupportedVersionError } from './marketplaceErrors';

type FetchMarketplaceAppsParams = {
endUserID?: string;
Expand Down Expand Up @@ -160,6 +160,11 @@ export async function fetchMarketplaceApps({ endUserID }: FetchMarketplaceAppsPa

Apps.getRocketChatLogger().error('Failed to fetch marketplace apps', response);

// TODO: Refactor cloud to return a proper error code on unsupported version
if (request.status === 426 && 'errorMsg' in response && response.errorMsg === 'unsupported version') {
throw new MarketplaceUnsupportedVersionError();
}

if (request.status === 400 && response.code === 200) {
throw new MarketplaceAppsError('Marketplace_Invalid_Apps_Engine_Version');
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { z } from 'zod';
import { getMarketplaceHeaders } from './getMarketplaceHeaders';
import { getWorkspaceAccessToken } from '../../../../app/cloud/server';
import { Apps } from '../orchestrator';
import { MarketplaceAppsError, MarketplaceConnectionError } from './marketplaceErrors';
import { MarketplaceAppsError, MarketplaceConnectionError, MarketplaceUnsupportedVersionError } from './marketplaceErrors';

const fetchMarketplaceCategoriesSchema = z.array(
z.object({
Expand Down Expand Up @@ -40,6 +40,14 @@ export async function fetchMarketplaceCategories(): Promise<AppCategory[]> {
}

const response = await request.json();

Apps.getRocketChatLogger().error('Failed to fetch marketplace categories', response);

// TODO: Refactor cloud to return a proper error code on unsupported version
if (request.status === 426 && 'errorMsg' in response && response.errorMsg === 'unsupported version') {
throw new MarketplaceUnsupportedVersionError();
}

const INTERNAL_MARKETPLACE_ERROR_CODES = [189, 266];

if (request.status === 500 && INTERNAL_MARKETPLACE_ERROR_CODES.includes(response.code)) {
Expand Down
8 changes: 6 additions & 2 deletions apps/meteor/ee/server/apps/marketplace/marketplaceErrors.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
export class MarketplaceAppsError extends Error {
constructor(message: string) {
super(message);
this.name = 'MarketplaceAppsError';
}
}

export class MarketplaceConnectionError extends Error {
constructor(message: string) {
super(message);
this.name = 'MarketplaceConnectionError';
}
}

export class MarketplaceUnsupportedVersionError extends Error {
constructor() {
super('Marketplace_Unsupported_Version');
}
}
Loading