Handle Appstore app empty manifest URL (#3177)

This commit is contained in:
Lukasz Ostrowski 2023-02-21 12:50:37 +01:00 committed by GitHub
parent d4d9b1b91c
commit 82071f4b88
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 188 additions and 26 deletions

View file

@ -91,6 +91,9 @@
"PermissionGroupUpdated",
"ProductCreated",
"ProductDeleted",
"ProductMediaCreated",
"ProductMediaDeleted",
"ProductMediaUpdated",
"ProductMetadataUpdated",
"ProductUpdated",
"ProductVariantBackInStock",
@ -115,6 +118,7 @@
"StaffCreated",
"StaffDeleted",
"StaffUpdated",
"ThumbnailCreated",
"TransactionActionRequest",
"TransactionItemMetadataUpdated",
"TranslationCreated",
@ -244,6 +248,7 @@
"PageType",
"Payment",
"Product",
"ProductMedia",
"ProductType",
"ProductVariant",
"Sale",

View file

@ -733,7 +733,7 @@ export type CategoryUpdatedFieldPolicy = {
recipient?: FieldPolicy<any> | FieldReadFunction<any>,
category?: FieldPolicy<any> | FieldReadFunction<any>
};
export type ChannelKeySpecifier = ('id' | 'slug' | 'name' | 'isActive' | 'currencyCode' | 'hasOrders' | 'defaultCountry' | 'warehouses' | 'countries' | 'availableShippingMethodsPerCountry' | 'stockSettings' | ChannelKeySpecifier)[];
export type ChannelKeySpecifier = ('id' | 'slug' | 'name' | 'isActive' | 'currencyCode' | 'hasOrders' | 'defaultCountry' | 'warehouses' | 'countries' | 'availableShippingMethodsPerCountry' | 'stockSettings' | 'orderSettings' | ChannelKeySpecifier)[];
export type ChannelFieldPolicy = {
id?: FieldPolicy<any> | FieldReadFunction<any>,
slug?: FieldPolicy<any> | FieldReadFunction<any>,
@ -745,7 +745,8 @@ export type ChannelFieldPolicy = {
warehouses?: FieldPolicy<any> | FieldReadFunction<any>,
countries?: FieldPolicy<any> | FieldReadFunction<any>,
availableShippingMethodsPerCountry?: FieldPolicy<any> | FieldReadFunction<any>,
stockSettings?: FieldPolicy<any> | FieldReadFunction<any>
stockSettings?: FieldPolicy<any> | FieldReadFunction<any>,
orderSettings?: FieldPolicy<any> | FieldReadFunction<any>
};
export type ChannelActivateKeySpecifier = ('channel' | 'channelErrors' | 'errors' | ChannelActivateKeySpecifier)[];
export type ChannelActivateFieldPolicy = {
@ -3675,14 +3676,21 @@ export type ProductImageFieldPolicy = {
sortOrder?: FieldPolicy<any> | FieldReadFunction<any>,
url?: FieldPolicy<any> | FieldReadFunction<any>
};
export type ProductMediaKeySpecifier = ('id' | 'sortOrder' | 'alt' | 'type' | 'oembedData' | 'url' | ProductMediaKeySpecifier)[];
export type ProductMediaKeySpecifier = ('id' | 'privateMetadata' | 'privateMetafield' | 'privateMetafields' | 'metadata' | 'metafield' | 'metafields' | 'sortOrder' | 'alt' | 'type' | 'oembedData' | 'url' | 'productId' | ProductMediaKeySpecifier)[];
export type ProductMediaFieldPolicy = {
id?: FieldPolicy<any> | FieldReadFunction<any>,
privateMetadata?: FieldPolicy<any> | FieldReadFunction<any>,
privateMetafield?: FieldPolicy<any> | FieldReadFunction<any>,
privateMetafields?: FieldPolicy<any> | FieldReadFunction<any>,
metadata?: FieldPolicy<any> | FieldReadFunction<any>,
metafield?: FieldPolicy<any> | FieldReadFunction<any>,
metafields?: FieldPolicy<any> | FieldReadFunction<any>,
sortOrder?: FieldPolicy<any> | FieldReadFunction<any>,
alt?: FieldPolicy<any> | FieldReadFunction<any>,
type?: FieldPolicy<any> | FieldReadFunction<any>,
oembedData?: FieldPolicy<any> | FieldReadFunction<any>,
url?: FieldPolicy<any> | FieldReadFunction<any>
url?: FieldPolicy<any> | FieldReadFunction<any>,
productId?: FieldPolicy<any> | FieldReadFunction<any>
};
export type ProductMediaBulkDeleteKeySpecifier = ('count' | 'productErrors' | 'errors' | ProductMediaBulkDeleteKeySpecifier)[];
export type ProductMediaBulkDeleteFieldPolicy = {
@ -3697,6 +3705,14 @@ export type ProductMediaCreateFieldPolicy = {
productErrors?: FieldPolicy<any> | FieldReadFunction<any>,
errors?: FieldPolicy<any> | FieldReadFunction<any>
};
export type ProductMediaCreatedKeySpecifier = ('issuedAt' | 'version' | 'issuingPrincipal' | 'recipient' | 'productMedia' | ProductMediaCreatedKeySpecifier)[];
export type ProductMediaCreatedFieldPolicy = {
issuedAt?: FieldPolicy<any> | FieldReadFunction<any>,
version?: FieldPolicy<any> | FieldReadFunction<any>,
issuingPrincipal?: FieldPolicy<any> | FieldReadFunction<any>,
recipient?: FieldPolicy<any> | FieldReadFunction<any>,
productMedia?: FieldPolicy<any> | FieldReadFunction<any>
};
export type ProductMediaDeleteKeySpecifier = ('product' | 'media' | 'productErrors' | 'errors' | ProductMediaDeleteKeySpecifier)[];
export type ProductMediaDeleteFieldPolicy = {
product?: FieldPolicy<any> | FieldReadFunction<any>,
@ -3704,6 +3720,14 @@ export type ProductMediaDeleteFieldPolicy = {
productErrors?: FieldPolicy<any> | FieldReadFunction<any>,
errors?: FieldPolicy<any> | FieldReadFunction<any>
};
export type ProductMediaDeletedKeySpecifier = ('issuedAt' | 'version' | 'issuingPrincipal' | 'recipient' | 'productMedia' | ProductMediaDeletedKeySpecifier)[];
export type ProductMediaDeletedFieldPolicy = {
issuedAt?: FieldPolicy<any> | FieldReadFunction<any>,
version?: FieldPolicy<any> | FieldReadFunction<any>,
issuingPrincipal?: FieldPolicy<any> | FieldReadFunction<any>,
recipient?: FieldPolicy<any> | FieldReadFunction<any>,
productMedia?: FieldPolicy<any> | FieldReadFunction<any>
};
export type ProductMediaReorderKeySpecifier = ('product' | 'media' | 'productErrors' | 'errors' | ProductMediaReorderKeySpecifier)[];
export type ProductMediaReorderFieldPolicy = {
product?: FieldPolicy<any> | FieldReadFunction<any>,
@ -3718,6 +3742,14 @@ export type ProductMediaUpdateFieldPolicy = {
productErrors?: FieldPolicy<any> | FieldReadFunction<any>,
errors?: FieldPolicy<any> | FieldReadFunction<any>
};
export type ProductMediaUpdatedKeySpecifier = ('issuedAt' | 'version' | 'issuingPrincipal' | 'recipient' | 'productMedia' | ProductMediaUpdatedKeySpecifier)[];
export type ProductMediaUpdatedFieldPolicy = {
issuedAt?: FieldPolicy<any> | FieldReadFunction<any>,
version?: FieldPolicy<any> | FieldReadFunction<any>,
issuingPrincipal?: FieldPolicy<any> | FieldReadFunction<any>,
recipient?: FieldPolicy<any> | FieldReadFunction<any>,
productMedia?: FieldPolicy<any> | FieldReadFunction<any>
};
export type ProductMetadataUpdatedKeySpecifier = ('issuedAt' | 'version' | 'issuingPrincipal' | 'recipient' | 'product' | 'category' | ProductMetadataUpdatedKeySpecifier)[];
export type ProductMetadataUpdatedFieldPolicy = {
issuedAt?: FieldPolicy<any> | FieldReadFunction<any>,
@ -4998,6 +5030,17 @@ export type TaxedMoneyRangeFieldPolicy = {
start?: FieldPolicy<any> | FieldReadFunction<any>,
stop?: FieldPolicy<any> | FieldReadFunction<any>
};
export type ThumbnailCreatedKeySpecifier = ('issuedAt' | 'version' | 'issuingPrincipal' | 'recipient' | 'id' | 'url' | 'objectId' | 'mediaUrl' | ThumbnailCreatedKeySpecifier)[];
export type ThumbnailCreatedFieldPolicy = {
issuedAt?: FieldPolicy<any> | FieldReadFunction<any>,
version?: FieldPolicy<any> | FieldReadFunction<any>,
issuingPrincipal?: FieldPolicy<any> | FieldReadFunction<any>,
recipient?: FieldPolicy<any> | FieldReadFunction<any>,
id?: FieldPolicy<any> | FieldReadFunction<any>,
url?: FieldPolicy<any> | FieldReadFunction<any>,
objectId?: FieldPolicy<any> | FieldReadFunction<any>,
mediaUrl?: FieldPolicy<any> | FieldReadFunction<any>
};
export type TimePeriodKeySpecifier = ('amount' | 'type' | TimePeriodKeySpecifier)[];
export type TimePeriodFieldPolicy = {
amount?: FieldPolicy<any> | FieldReadFunction<any>,
@ -7331,10 +7374,18 @@ export type StrictTypedTypePolicies = {
keyFields?: false | ProductMediaCreateKeySpecifier | (() => undefined | ProductMediaCreateKeySpecifier),
fields?: ProductMediaCreateFieldPolicy,
},
ProductMediaCreated?: Omit<TypePolicy, "fields" | "keyFields"> & {
keyFields?: false | ProductMediaCreatedKeySpecifier | (() => undefined | ProductMediaCreatedKeySpecifier),
fields?: ProductMediaCreatedFieldPolicy,
},
ProductMediaDelete?: Omit<TypePolicy, "fields" | "keyFields"> & {
keyFields?: false | ProductMediaDeleteKeySpecifier | (() => undefined | ProductMediaDeleteKeySpecifier),
fields?: ProductMediaDeleteFieldPolicy,
},
ProductMediaDeleted?: Omit<TypePolicy, "fields" | "keyFields"> & {
keyFields?: false | ProductMediaDeletedKeySpecifier | (() => undefined | ProductMediaDeletedKeySpecifier),
fields?: ProductMediaDeletedFieldPolicy,
},
ProductMediaReorder?: Omit<TypePolicy, "fields" | "keyFields"> & {
keyFields?: false | ProductMediaReorderKeySpecifier | (() => undefined | ProductMediaReorderKeySpecifier),
fields?: ProductMediaReorderFieldPolicy,
@ -7343,6 +7394,10 @@ export type StrictTypedTypePolicies = {
keyFields?: false | ProductMediaUpdateKeySpecifier | (() => undefined | ProductMediaUpdateKeySpecifier),
fields?: ProductMediaUpdateFieldPolicy,
},
ProductMediaUpdated?: Omit<TypePolicy, "fields" | "keyFields"> & {
keyFields?: false | ProductMediaUpdatedKeySpecifier | (() => undefined | ProductMediaUpdatedKeySpecifier),
fields?: ProductMediaUpdatedFieldPolicy,
},
ProductMetadataUpdated?: Omit<TypePolicy, "fields" | "keyFields"> & {
keyFields?: false | ProductMetadataUpdatedKeySpecifier | (() => undefined | ProductMetadataUpdatedKeySpecifier),
fields?: ProductMetadataUpdatedFieldPolicy,
@ -7971,6 +8026,10 @@ export type StrictTypedTypePolicies = {
keyFields?: false | TaxedMoneyRangeKeySpecifier | (() => undefined | TaxedMoneyRangeKeySpecifier),
fields?: TaxedMoneyRangeFieldPolicy,
},
ThumbnailCreated?: Omit<TypePolicy, "fields" | "keyFields"> & {
keyFields?: false | ThumbnailCreatedKeySpecifier | (() => undefined | ThumbnailCreatedKeySpecifier),
fields?: ThumbnailCreatedFieldPolicy,
},
TimePeriod?: Omit<TypePolicy, "fields" | "keyFields"> & {
keyFields?: false | TimePeriodKeySpecifier | (() => undefined | TimePeriodKeySpecifier),
fields?: TimePeriodFieldPolicy,

File diff suppressed because one or more lines are too long

View file

@ -28,7 +28,7 @@ export namespace GetV2SaleorAppsResponse {
repositoryUrl: string;
supportUrl: string;
privacyUrl: string;
manifestUrl: string;
manifestUrl: string | null;
githubForkUrl?: string;
};

View file

@ -248,7 +248,7 @@ describe("App utils app details", () => {
appName: releasedApp.name.en,
status: JobStatusEnum.PENDING,
message: "Test message",
manifestUrl: releasedApp.manifestUrl,
manifestUrl: releasedApp.manifestUrl as string,
};
const appInstallationList: AppInstallationFragment[] = [
releasedAppInstallation,

View file

@ -108,7 +108,10 @@ export const getAppDetails = ({
}: GetAppDetailsOpts) => {
const isAppComingSoon = !("manifestUrl" in app);
const isAppInstallable = "manifestUrl" in app && !!navigateToAppInstallPage;
const isAppInstallable =
"manifestUrl" in app &&
app.manifestUrl !== null &&
!!navigateToAppInstallPage;
const isAppForkableOnGithub =
"githubForkUrl" in app && !!navigateToGithubForkPage;
const installationPending =