From 77b83f51ddb73f40cf220ab1b519bf2935da19bf Mon Sep 17 00:00:00 2001 From: David Ball Date: Sun, 25 Aug 2024 17:35:58 -0400 Subject: [PATCH] Migrated to release candidate Squidex SDK --- astro.config.mjs | 4 +- .../catalog/amazon/amazon-append-images.ts | 8 +- src/apps/catalog/common/catalog-helpers.ts | 86 ++++++++++--------- src/components/Brand.astro | 6 +- src/components/BrandCard.astro | 2 +- src/components/ComponentRouter.astro | 16 ++-- src/components/ImageCarousel.astro | 2 +- src/components/Product.astro | 2 +- src/data/api-client.ts | 13 ++- src/data/core/client.ts | 13 ++- src/data/internals/ContentDtoT.ts | 6 +- src/data/internals/ContentsDtoT.ts | 4 +- src/layouts/Layout.astro | 2 +- src/pages/404.astro | 4 +- src/pages/[...routeLookup].astro | 9 +- src/pages/view/brands/[...brandLookup].astro | 6 +- .../marketplaces/[...marketplaceLookup].astro | 6 +- src/pages/view/pages/[...pageLookup].astro | 6 +- .../[...productCategoryLookup].astro | 6 +- .../view/products/[...productLookup].astro | 6 +- .../view/sellers/[...sellerLookup].astro | 6 +- 21 files changed, 108 insertions(+), 105 deletions(-) diff --git a/astro.config.mjs b/astro.config.mjs index 192d181..17ae452 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -44,7 +44,7 @@ export default defineConfig({ transformMixedEsModules: true, }, rollupOptions: { - external: ['@squidex/squidex', '../squidex-node-sdk'], + // external: ['@squidex/squidex', '../squidex-node-sdk'], } }, vite: { @@ -52,7 +52,7 @@ export default defineConfig({ commonjs(/**/) ], optimizeDeps: { - exclude: ['@squidex/squidex', '../squidex-node-sdk'], + // exclude: ['@squidex/squidex', '../squidex-node-sdk'], } // resolve: { // alias: [ diff --git a/src/apps/catalog/amazon/amazon-append-images.ts b/src/apps/catalog/amazon/amazon-append-images.ts index df31505..3edfec7 100644 --- a/src/apps/catalog/amazon/amazon-append-images.ts +++ b/src/apps/catalog/amazon/amazon-append-images.ts @@ -97,11 +97,11 @@ export const amazonAppendImagesCommand = (amazonCommand: Command) => } if (didUpdate) { log(`Listing did update, updating product listing with appended images.`); - let updatedDto = await core.client.contents.putContent(SCHEMAS.LISTINGS, listingDto.id, { + let updatedDto = await core.client.contents.putContent({ + schema: SCHEMAS.LISTINGS, + id: listingDto.id, unpublished: false, - body: listing as any, - }, { - timeoutInSeconds: core.TIMEOUT_IN_SECONDS + requestBody: listing as any, }); log(`Listing version ${updatedDto.version} stored.`); } diff --git a/src/apps/catalog/common/catalog-helpers.ts b/src/apps/catalog/common/catalog-helpers.ts index f7720c3..593847b 100644 --- a/src/apps/catalog/common/catalog-helpers.ts +++ b/src/apps/catalog/common/catalog-helpers.ts @@ -20,13 +20,15 @@ import axios from 'axios'; import ollama from 'ollama'; import slugify from 'slugify'; import type { Offer } from '../../../data/models/multis/Offer.ts'; +// import { Blob } from 'buffer'; +import { lookup as mimeLookup } from 'mime-types'; export function isValidASIN(asinOrNot: string) { return asinOrNot.match(/[A-Z0-9]{10}/g) ? true : false; } export async function getAmazonGetItemsRequestSchemaDto() { - return await client.schemas.getSchema('amazon-pa-get-items-request'); + return await client.schemas.getSchema({ schema: 'amazon-pa-get-items-request' }); } export async function lookupAmazonASINs(asins: string[]) { @@ -46,20 +48,21 @@ export async function lookupAmazonASINs(asins: string[]) { ] } }, requestDate: { iv: requestDate } } - let amazonGetItemDto = await client.contents.postContent(SCHEMAS.AMAZON_GET_ITEMS, { + let amazonGetItemDto = await client.contents.postContent({ + schema: SCHEMAS.AMAZON_GET_ITEMS, publish: true, - body: amazonGetItem as any, + requestBody: amazonGetItem as any, }) let amazonGetItemsDto = await getContentsByIds(SCHEMAS.AMAZON_GET_ITEMS, amazonGetItemDto.id); return amazonGetItemsDto; } export async function getMarketplaceConnectionSchemaDto() { - return await client.schemas.getSchema('product-marketplace-connection'); + return await client.schemas.getSchema({ schema: 'product-marketplace-connection' }); } export async function getAmazonMarketplaceConnectionSchemaDto() { - return await client.schemas.getSchema('product-marketplace-connection-amazon') + return await client.schemas.getSchema({ schema: 'product-marketplace-connection-amazon' }) } export async function getAmazonMarketplaceDto() { @@ -97,8 +100,9 @@ export async function getBrandDtoByName(brandName: string) { } export async function getAddNewBrandDtoByName(brandName: string) { - let brandDto = await client.contents.postContent(SCHEMAS.BRANDS, { - body: { + let brandDto = await client.contents.postContent({ + schema: SCHEMAS.BRANDS, + requestBody: { brandName: { "en-US": brandName!, "es-US": brandName!, @@ -110,10 +114,8 @@ export async function getAddNewBrandDtoByName(brandName: string) { "fr-CA": `fr-CA/${slugify(brandName!, { lower: true, trim: true })}` }, } - }, { - timeoutInSeconds: TIMEOUT_IN_SECONDS, }); - let brandsDto = await client.contents.getContents(SCHEMAS.BRANDS, { unpublished: true, ids: brandDto.id }, { timeoutInSeconds: TIMEOUT_IN_SECONDS }) as ContentsDto; + let brandsDto = await client.contents.getContents({ schema: SCHEMAS.BRANDS, unpublished: true, ids: brandDto.id }) as ContentsDto; return brandsDto; } @@ -128,8 +130,9 @@ export async function getSellerDtoByName(sellerName: string) { } export async function getAddNewSellerDtoByName(sellerName: string) { - let sellerDto = await client.contents.postContent(SCHEMAS.SELLERS, { - body: { + let sellerDto = await client.contents.postContent({ + schema: SCHEMAS.SELLERS, + requestBody: { sellerName: { "en-US": sellerName!, "es-US": sellerName!, @@ -141,10 +144,8 @@ export async function getAddNewSellerDtoByName(sellerName: string) { "fr-CA": `fr-CA/${slugify(sellerName!, { lower: true, trim: true })}` }, } - }, { - timeoutInSeconds: TIMEOUT_IN_SECONDS, }); - let sellersDto = await client.contents.getContents(SCHEMAS.SELLERS, { unpublished: true, ids: sellerDto.id }, {timeoutInSeconds: TIMEOUT_IN_SECONDS}) as ContentsDto; + let sellersDto = await client.contents.getContents({ schema: SCHEMAS.SELLERS, unpublished: true, ids: sellerDto.id }) as ContentsDto; return sellersDto; } @@ -407,17 +408,16 @@ export async function translateTags_from_en_US_to_fr_CA(tags_en_US: string[]) { } export async function getAddNewProductSubCategoryDto(parentProductCategoryId: NonLocalized, categoryName: Localized, description: Localized) { - let productCategoryDto = await client.contents.postContent(SCHEMAS.PRODUCT_CATEGORIES, { + let productCategoryDto = await client.contents.postContent({ + schema: SCHEMAS.PRODUCT_CATEGORIES, publish: false, - body: { + requestBody: { categoryName, description, parentCategory: parentProductCategoryId, }, - }, { - timeoutInSeconds: TIMEOUT_IN_SECONDS, }); - let productCategoriesDto = await client.contents.getContents(SCHEMAS.PRODUCT_CATEGORIES, { unpublished: true, ids: productCategoryDto.id }, {timeoutInSeconds: TIMEOUT_IN_SECONDS}) as ContentsDto; + let productCategoriesDto = await client.contents.getContents({ schema: SCHEMAS.PRODUCT_CATEGORIES, unpublished: true, ids: productCategoryDto.id }) as ContentsDto; return productCategoriesDto; } @@ -448,28 +448,26 @@ export async function translateAmazonDescription_from_en_US_to_fr_CA(brandName: } export async function getAddNewProductDtoByProduct(product: Product) { - let productDto = await client.contents.postContent(SCHEMAS.PRODUCTS, { + let productDto = await client.contents.postContent({ + schema: SCHEMAS.PRODUCTS, publish: false, - body: { + requestBody: { ...product }, - }, { - timeoutInSeconds: TIMEOUT_IN_SECONDS, }); - let productsDto = await client.contents.getContents(SCHEMAS.PRODUCTS, { unpublished: true, ids: productDto.id }, {timeoutInSeconds: TIMEOUT_IN_SECONDS}) as ContentsDto; + let productsDto = await client.contents.getContents({ schema: SCHEMAS.PRODUCTS, unpublished: true, ids: productDto.id }) as ContentsDto; return productsDto; } export async function getAddNewProductListingDtoByProduct(listing: Listing) { - let listingDto = await client.contents.postContent(SCHEMAS.LISTINGS, { + let listingDto = await client.contents.postContent({ + schema: SCHEMAS.LISTINGS, publish: true, - body: { + requestBody: { ...listing } - }, { - timeoutInSeconds: TIMEOUT_IN_SECONDS, }); - let listingsDto = await client.contents.getContents(SCHEMAS.LISTINGS, { unpublished: true, ids: listingDto.id }, {timeoutInSeconds: TIMEOUT_IN_SECONDS}) as ContentsDto; + let listingsDto = await client.contents.getContents({ schema: SCHEMAS.LISTINGS, unpublished: true, ids: listingDto.id }) as ContentsDto; return listingsDto; } @@ -482,11 +480,11 @@ export function removeQuotes(str: string) { } export async function upsertAssetFolder(folderName: string, parentFolderId?: string|undefined) { - const assetFolders = await client.assets.getAssetFolders({ scope: 'Items', parentId: parentFolderId }, { timeoutInSeconds: TIMEOUT_IN_SECONDS }); + const assetFolders = await client.assets.getAssetFolders({ scope: 'Items', parentId: parentFolderId }); let assetFolder; let assetFolderLookup = assetFolders.items.filter(folder => folder.folderName === folderName); if (assetFolderLookup.length === 0) { - assetFolder = await client.assets.postAssetFolder({ folderName: folderName, parentId: parentFolderId }, { timeoutInSeconds: TIMEOUT_IN_SECONDS }); + assetFolder = await client.assets.postAssetFolder({ createAssetFolderDto: { folderName: folderName, parentId: parentFolderId }}); } else { assetFolder = assetFolderLookup[0]; @@ -500,21 +498,27 @@ export async function getAllAssetsInFolder(assetFolderId: string) { } export async function uploadDownloadedImageToSquidexAsAsset(downloadUrl: string, assetFolderId: string) { - let filename = downloadUrl.substring(downloadUrl.lastIndexOf('/')+1); + let filename = downloadUrl.substring(downloadUrl.lastIndexOf('/')+1);//.replace(/[A-Z0-9\.-_]*, '$0'); let response = await axios.get(downloadUrl, { timeout: TIMEOUT_IN_SECONDS * 1000, responseType: 'arraybuffer' }); - let assetDto = await client.assets.postAsset({ readable: response.data, fileName: filename }, { timeoutInSeconds: TIMEOUT_IN_SECONDS }); - assetDto = await client.assets.putAsset(assetDto.id, { fileName: filename, metadata: { ...assetDto.metadata, 'amazon-url': downloadUrl }, tags: ['amazon', 'product'] }) - assetDto = await client.assets.putAssetParent(assetDto.id, { parentId: assetFolderId }); + let form = new FormData(); + let blob = new Blob(response.data, {type: mimeLookup(filename) as string}); + form.append('fileName', filename); + form.append('file', blob, filename); + form.append('parentId', assetFolderId); + let assetDto = await client.assets.postAsset({ file: blob, fileName: filename, fileUrl: filename, parentId: assetFolderId }, { + body: form + }); + assetDto = await client.assets.putAsset({ id: assetDto.id, annotateAssetDto: { metadata: { ...assetDto.metadata, 'amazon-url': downloadUrl }, tags: ['amazon', 'product'] } }) + // assetDto = await client.assets.putAssetParent({ id: assetDto.id, moveAssetDto: { parentId: assetFolderId } }); return assetDto; } export async function getAddNewOfferDto(offer: Offer) { - let offerDto = await client.contents.postContent(SCHEMAS.OFFERS, { + let offerDto = await client.contents.postContent({ + schema: SCHEMAS.OFFERS, publish: true, - body: offer as any, - }, { - timeoutInSeconds: TIMEOUT_IN_SECONDS, + requestBody: offer as any, }); - let offersDto = await client.contents.getContents(SCHEMAS.OFFERS, { unpublished: true, ids: offerDto.id }, {timeoutInSeconds: TIMEOUT_IN_SECONDS}) as ContentsDto; + let offersDto = await client.contents.getContents({ schema: SCHEMAS.OFFERS, unpublished: true, ids: offerDto.id }) as ContentsDto; return offersDto; } diff --git a/src/components/Brand.astro b/src/components/Brand.astro index 541cf34..4d173a2 100644 --- a/src/components/Brand.astro +++ b/src/components/Brand.astro @@ -11,7 +11,7 @@ interface Props extends Multilingual, SquidexEditable { const { brand, editToken, locale } = Astro.props; -let brandLogoImage = path.posix.join('/img', (await getAssetById(brand.logoImage[locale])) +let brandLogoImage = path.posix.join('/img', (await getAssetById(brand.logoImage![locale])) .links['content'] .href .split('/') @@ -27,10 +27,10 @@ let brandLogoImage = path.posix.join('/img', (await getAssetById(brand.logoImage {brand.brandName[locale]} }
- {getLocaleField(locale, brand.shortDescription) &&
} + {getLocaleField(locale, brand.shortDescription!) &&
}
- {getLocaleField(locale, brand.longDescription) &&
} + {getLocaleField(locale, brand.longDescription!) &&
}