Compare commits
13 Commits
openapi-sd
...
main
Author | SHA1 | Date | |
---|---|---|---|
a76a784032 | |||
8e64c8a8b1 | |||
dbac314256 | |||
712d9bbf26 | |||
2b87f45069 | |||
eb4e0f7f2e | |||
c2a0633f2b | |||
c2ffefe251 | |||
851410fbf0 | |||
1ce08dbe40 | |||
49b59400ec | |||
f7f147cfc1 | |||
eb0e01a4df |
1258
package-lock.json
generated
1258
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
|
@ -21,7 +21,9 @@
|
|||
"@astrojs/sitemap": "^3.1.6",
|
||||
"@fastify/middie": "^8.3.1",
|
||||
"@fastify/static": "^7.0.4",
|
||||
"@squidex/squidex": "^1.2.1",
|
||||
"@langchain/community": "^0.2.31",
|
||||
"@langchain/ollama": "^0.0.4",
|
||||
"@squidex/squidex": "^2.0.0-rc1",
|
||||
"@strapi/blocks-react-renderer": "^1.0.1",
|
||||
"@types/react": "^18.3.3",
|
||||
"@types/react-dom": "^18.3.0",
|
||||
|
@ -39,6 +41,7 @@
|
|||
"markdown-it": "^14.0.0",
|
||||
"markdown-it-attrs": "^4.1.6",
|
||||
"memfs": "^4.11.1",
|
||||
"mime-types": "^2.1.35",
|
||||
"multer": "^1.4.5-lts.1",
|
||||
"ollama": "^0.5.8",
|
||||
"playwright": "*",
|
||||
|
@ -56,6 +59,7 @@
|
|||
"@types/luxon": "^3.4.2",
|
||||
"@types/markdown-it": "^14.1.1",
|
||||
"@types/markdown-it-attrs": "^4.1.3",
|
||||
"@types/mime-types": "^2.1.4",
|
||||
"@types/multer": "^1.4.11",
|
||||
"@types/node": "^20.0.0",
|
||||
"ts-node": "^10.9.2",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import type { Command } from "commander";
|
||||
import { askAiProductSubCategoryEvalQuestionsSet1, askAiProductSubCategoryEvalQuestionsSet2, askAiTopLevelProductCategoryEvalQuestions, generateAIProductDescription, generateAITagsForProduct, getAddNewBrandDtoByName, getAddNewOfferDto, getAddNewProductDtoByProduct, getAddNewProductListingDtoByProduct, getAddNewProductSubCategoryDto, getAddNewSellerDtoByName, getAllAssetsInFolder, getAllTopLevelProductCategories, getAmazonMarketplaceConnectionSchemaDto, getAmazonMarketplaceDto, getBrandDtoByName, getMarketplaceConnectionSchemaDto, getSellerDtoByName, isValidASIN, lookupAmazonASINs, removeQuotes, translateAmazonDescription_from_en_US_to_es_US, translateAmazonDescription_from_en_US_to_fr_CA, translateProductDescription_from_en_US_to_es_US, translateProductDescription_from_en_US_to_fr_CA, translateProductName_from_en_US_to_es_US, translateProductName_from_en_US_to_fr_CA, translateTags_from_en_US_to_es_US, translateTags_from_en_US_to_fr_CA, trimPeriods, uploadDownloadedImageToSquidexAsAsset, upsertAssetFolder } from "../common/catalog-helpers";
|
||||
import { askAiProductSubCategoryEvalQuestionsSet1, askAiProductSubCategoryEvalQuestionsSet2, askAiTopLevelProductCategoryEvalQuestions, doesProductAlreadyExist, generateAIProductDescription, generateAITagsForProduct, getAddNewBrandDtoByName, getAddNewOfferDto, getAddNewProductDtoByProduct, getAddNewProductListingDtoByProduct, getAddNewProductSubCategoryDto, getAddNewSellerDtoByName, getAllAssetsInFolder, getAllTopLevelProductCategories, getAmazonMarketplaceConnectionSchemaDto, getAmazonMarketplaceDto, getBrandDtoByName, getMarketplaceConnectionSchemaDto, getSellerDtoByName, isValidASIN, lookupAmazonASINs, removeQuotes, translateAmazonDescription_from_en_US_to_es_US, translateAmazonDescription_from_en_US_to_fr_CA, translateProductDescription_from_en_US_to_es_US, translateProductDescription_from_en_US_to_fr_CA, translateProductName_from_en_US_to_es_US, translateProductName_from_en_US_to_fr_CA, translateTags_from_en_US_to_es_US, translateTags_from_en_US_to_fr_CA, trimPeriods, uploadDownloadedImageToSquidexAsAsset, upsertAssetFolder } from "../common/catalog-helpers";
|
||||
import type { Localized } from "../../../data/internals/LocalizedT";
|
||||
import type { NonLocalized } from "../../../data/internals/NonLocalizedT";
|
||||
import { getProductCategoriesByIds, performSyncLocalizedSlugs } from "../../../data/api-client";
|
||||
|
@ -51,13 +51,13 @@ export const amazonProcureASINsCommand = (amazonCommand: Command) => {
|
|||
|
||||
apiResponse.ItemsResult!.Items!.forEach(async (amazonItem) => {
|
||||
let asin = amazonItem.ASIN!;
|
||||
log(`Mock data override: product enrollment is for ASIN ${asin}.`);
|
||||
// log(`Mock data override: product enrollment is for ASIN ${asin}.`);
|
||||
|
||||
// enable this if we're saving data:
|
||||
// if (await doesProductAlreadyExist(asin)) {
|
||||
// error(`error: Product with ASIN already exists in the application.`);
|
||||
// return;
|
||||
// }
|
||||
if (await doesProductAlreadyExist(asin)) {
|
||||
error(`error: Product with ASIN already exists in the application.`);
|
||||
return;
|
||||
}
|
||||
|
||||
log(`Amazon PA API Response contains ASIN: ${asin}.`);
|
||||
const amazonProductName_en_US = amazonItem.ItemInfo?.Title?.DisplayValue!;
|
||||
|
|
|
@ -477,14 +477,11 @@ export async function getAllAssetsInFolder(assetFolderId: string) {
|
|||
|
||||
export async function uploadDownloadedImageToSquidexAsAsset(downloadUrl: string, assetFolderId: string) {
|
||||
let url = new URL(downloadUrl);
|
||||
let filename = url.pathname.substring(downloadUrl.lastIndexOf('/')+1);//.replace(/[A-Z0-9\.-_]*, '$0');
|
||||
let response = await axios.get(downloadUrl, { timeout: TIMEOUT_IN_SECONDS * 1000, responseType: 'arraybuffer' });
|
||||
let blob = new Blob(response.data, {type: mimeLookup(filename) as string});
|
||||
let form = new FormData();
|
||||
form.append('fileName', filename);
|
||||
form.append('file', blob, filename);
|
||||
form.append('parentId', assetFolderId);
|
||||
let assetDto = await client.assets.postAsset({ file: blob, name: filename, url: filename, parentId: assetFolderId }, { body: form });
|
||||
let filename = url.pathname.substring(url.pathname.lastIndexOf('/')+1);
|
||||
let res = await fetch(downloadUrl);
|
||||
let ab = await res.arrayBuffer();
|
||||
let file = new File([ab], filename, { type: mimeLookup(filename) as string });
|
||||
let assetDto = await client.assets.postAsset({ file, parentId: assetFolderId });
|
||||
assetDto = await client.assets.putAsset(assetDto.id, { metadata: { ...assetDto.metadata, 'amazon-url': downloadUrl }, tags: ['amazon', 'product'] });
|
||||
return assetDto;
|
||||
}
|
||||
|
|
|
@ -14,7 +14,8 @@ const { editToken, text } = Astro.props;
|
|||
.content {
|
||||
margin-bottom: 2rem;
|
||||
border: 1px solid rgba(var(--accent-light), 25%);
|
||||
background: linear-gradient(rgba(var(--accent-dark), 66%), rgba(var(--accent-dark), 33%));
|
||||
/* background: linear-gradient(rgba(var(--accent-dark), 66%), rgba(var(--accent-dark), 33%)); */
|
||||
background-color: #13151a;
|
||||
padding: 0.5rem;
|
||||
border-radius: 8px;
|
||||
font-family: "Urbanist", sans-serif;
|
||||
|
@ -24,3 +25,9 @@ const { editToken, text } = Astro.props;
|
|||
a, a:link, a:visited { text-decoration: none; color: #fff }
|
||||
a:hover { text-decoration: underline; color: #fff }
|
||||
</style>
|
||||
|
||||
<style is:inline>
|
||||
.content img {
|
||||
max-height: 12em;
|
||||
}
|
||||
</style>
|
|
@ -25,7 +25,7 @@ const formatAsCurrency = (amount: number) => amount.toLocaleString(locale, { sty
|
|||
const { productDto, editToken, locale } = Astro.props;
|
||||
const product = productDto.items[0].data!;
|
||||
|
||||
let amazonConnectorSchemaId = (await core.client.schemas.getSchema({ schema: 'product-marketplace-connection-amazon' })).id;
|
||||
let amazonConnectorSchemaId = (await core.client.schemas.getSchema('product-marketplace-connection-amazon')).id;
|
||||
let brandDto = (await getBrandsByIds(product.brand.iv[0]));
|
||||
let possibleAmazonConnectors = product.marketplaceConnections.iv.filter((connection) => connection.connection.schemaId === amazonConnectorSchemaId);
|
||||
let amazonConnector = possibleAmazonConnectors.length > 0 ? possibleAmazonConnectors[0].connection as AmazonMarketplaceConnection : undefined;
|
||||
|
|
|
@ -78,8 +78,8 @@ export const getWebhookPort = () => env.WEBHOOK_PORT ? parseInt(env.WEBHOOK_PORT
|
|||
export const getSquidexAppName = () => env.SQUIDEX_APP_NAME || undefined;
|
||||
export const getSquidexClientId = () => env.SQUIDEX_CLIENT_ID || undefined;
|
||||
export const getSquidexClientSecret = () => env.SQUIDEX_CLIENT_SECRET || undefined;
|
||||
export const getSquidexEnvironment = () => env.SQUIDEX_ENVIRONMENT || undefined;
|
||||
export const getSquidexPublicUrl = () => env.SQUIDEX_PUBLIC_URL || getSquidexEnvironment();
|
||||
export const getSquidexEnvironment = () => trimSlashes(env.SQUIDEX_ENVIRONMENT||'') || undefined;
|
||||
export const getSquidexPublicUrl = () => trimSlashes(env.SQUIDEX_PUBLIC_URL||'') || getSquidexEnvironment();
|
||||
|
||||
export const config: Config = {
|
||||
// AmazonProductAdvertisingAPIAccessKey: getAmazonProductAdvertisingAPIAccessKey(),
|
||||
|
|
|
@ -3,4 +3,5 @@ import type { NonLocalized } from "../../internals/NonLocalizedT";
|
|||
export interface Redirect {
|
||||
prevSlug: NonLocalized<string>,
|
||||
newContent: NonLocalized<string[]>,
|
||||
newContentSchema: NonLocalized<{ schemaName: string }[]>,
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
import markdownIt from "markdown-it";
|
||||
import markdownItAttrs from "markdown-it-attrs";
|
||||
import vm from 'node:vm';
|
||||
import { config } from "../config";
|
||||
|
||||
export const md = markdownIt().use(markdownItAttrs, {
|
||||
});
|
||||
|
@ -67,9 +68,15 @@ const renderCodeblock = (lang: string, template: string, templateContext?: any)
|
|||
return template;
|
||||
}
|
||||
|
||||
const replaceSquidexAssetPathWithOwn = (html: string) => {
|
||||
let re = new RegExp(`src\\s*=\\s*["']${config.squidexPublicUrl?.replaceAll(`/`, `\\/`).replaceAll(`.`, `\\.`)||''}\\/api\\/assets/${config.squidexAppName||''}/([\\w-\\.\\/]*)["']`, 'g');
|
||||
return html.replaceAll(re, `src="${config.siteUrl}/img/$1"`);
|
||||
}
|
||||
|
||||
export const renderMarkdown = (template: string, templateContext?: any) => {
|
||||
// render code blocks inside of the Markdown
|
||||
template = renderCodeblock('markdown', template, templateContext);
|
||||
template = md.render(interpolateString(template, templateContext));
|
||||
template = replaceSquidexAssetPathWithOwn(template);
|
||||
return template;
|
||||
}
|
|
@ -87,27 +87,24 @@ else {
|
|||
const redirectDto = await getRedirectsByPreviousSlug(routeLookup!);
|
||||
console.log("redirectDto:", redirectDto);
|
||||
if (redirectDto && redirectDto.items && redirectDto.items.length > 0) {
|
||||
console.log("getting redirectReferencesDto for", SCHEMAS.REDIRECTS, redirectDto.items[0].id);
|
||||
console.log("getting redirectReferencesDto for", SCHEMAS.REDIRECTS, redirectDto.items[0].data?.newContentSchema[locale]);
|
||||
// let objectId = redirectDto.items[0].data.newContent[locale];
|
||||
//next line crashes:
|
||||
let redirectReferencesDto = await client.contents.getReferences({ schema: SCHEMAS.REDIRECTS, id: redirectDto.items[0].id });
|
||||
console.log("redirectReferencesDto:", redirectReferencesDto);
|
||||
// let redirectReferencesDto = await client.contents.getReferences({ schema: SCHEMAS.REDIRECTS, id: redirectDto.items[0].id });
|
||||
let schemaName = redirectDto.items[0].data?.newContentSchema[locale][0].schemaName;
|
||||
let whicheverDto = await client.contents.getContent(schemaName, redirectDto.items[0].data?.newContent[locale][0]);
|
||||
// console.log("redirectReferencesDto:", redirectReferencesDto);
|
||||
// client.contents.getConten
|
||||
// switch (redirectDto.items[0].data?.referenceSchema.iv) {
|
||||
// case SCHEMAS.BRANDS:
|
||||
// return Astro.rewrite(`/view/brands/${locale}/${objectId}`);
|
||||
// case SCHEMAS.MARKETPLACES:
|
||||
// return Astro.rewrite(`/view/marketplaces/${locale}/${objectId}`);
|
||||
// case SCHEMAS.PAGES:
|
||||
// return Astro.rewrite(`/view/pages/${locale}/${objectId}`);
|
||||
// case SCHEMAS.PRODUCT_CATEGORIES:
|
||||
// return Astro.rewrite(`/view/product-categories/${locale}/${objectId}`);
|
||||
// case SCHEMAS.PRODUCTS:
|
||||
// return Astro.rewrite(`/view/products/${locale}/${objectId}`);
|
||||
// case SCHEMAS.SELLERS:
|
||||
// return Astro.rewrite(`/view/sellers/${locale}/${objectId}`);
|
||||
// }
|
||||
// Astro.response.headers.set('Vary', 'Accept-Language');
|
||||
// return Astro.redirect(,303)
|
||||
switch (schemaName) {
|
||||
case SCHEMAS.BRANDS:
|
||||
case SCHEMAS.MARKETPLACES:
|
||||
case SCHEMAS.PAGES:
|
||||
case SCHEMAS.PRODUCT_CATEGORIES:
|
||||
case SCHEMAS.PRODUCTS:
|
||||
case SCHEMAS.SELLERS:
|
||||
Astro.response.headers.set('Vary', 'Accept-Language');
|
||||
return Astro.redirect(`/${whicheverDto.data.slug[locale]}`, 303);
|
||||
}
|
||||
}
|
||||
return redirect404NotFound();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user