Compare commits

...

6 commits
main ... envs

Author SHA1 Message Date
Lukasz Ostrowski
d9350dd5dd Restore proper app skd version after conflicts 2023-07-03 11:26:42 +02:00
Lukasz Ostrowski
99166f6aa9 Link docs 2023-07-03 11:25:17 +02:00
Lukasz Ostrowski
e7a3df4777 Merge branch 'main' into envs 2023-07-03 11:21:17 +02:00
Lukasz Ostrowski
1e0c1cc818 sort manifest 2023-07-03 11:07:38 +02:00
Lukasz Ostrowski
5b576fa8d3 Add docker envs 2023-06-28 16:13:05 +02:00
Lukasz Ostrowski
04cf93ca22 Add development envs 2023-06-28 15:36:07 +02:00
40 changed files with 512 additions and 206 deletions

View file

@ -0,0 +1,15 @@
---
"saleor-app-emails-and-messages": minor
"saleor-app-data-importer": minor
"saleor-app-products-feed": minor
"saleor-app-monitoring": minor
"saleor-app-invoices": minor
"saleor-app-klaviyo": minor
"saleor-app-search": minor
"saleor-app-slack": minor
"saleor-app-taxes": minor
"saleor-app-cms": minor
"saleor-app-crm": minor
---
Added additional ENV variables (see each app's .env.example), that can overwrite app base URL. This change allows easy apps development using Docker

View file

@ -8,3 +8,11 @@ REST_APL_ENDPOINT=
REST_APL_TOKEN=
APP_LOG_LEVEL=info
# Local development variables. When developped locally with Saleor inside docker, these can be set to:
# APP_IFRAME_BASE_URL = http://localhost:3000, so Dashboard on host can access iframe
# APP_API_BASE_URL=http://host.docker.internal:3000 - so Saleor can reach App running on host, from the container.
# If developped with tunnels, set this empty, it will fallback to default Next's localhost:3000
# https://docs.saleor.io/docs/3.x/developer/extending/apps/local-app-development
APP_IFRAME_BASE_URL=
APP_API_BASE_URL=

View file

@ -8,15 +8,18 @@ import { productVariantDeletedWebhook } from "./webhooks/product-variant-deleted
import { productUpdatedWebhook } from "./webhooks/product-updated";
export default createManifestHandler({
async manifestFactory(context) {
async manifestFactory({ appBaseUrl }) {
const iframeBaseUrl = process.env.APP_IFRAME_BASE_URL ?? appBaseUrl;
const apiBaseURL = process.env.APP_API_BASE_URL ?? appBaseUrl;
const manifest: AppManifest = {
about:
"CMS App is a multi-integration app that connects Saleor with popular Content Management Systems.",
appUrl: context.appBaseUrl,
appUrl: iframeBaseUrl,
author: "Saleor Commerce",
brand: {
logo: {
default: `${context.appBaseUrl}/logo.png`,
default: `${apiBaseURL}/logo.png`,
},
},
dataPrivacyUrl: "https://saleor.io/legal/privacy/",
@ -26,13 +29,13 @@ export default createManifestHandler({
name: "CMS",
permissions: ["MANAGE_PRODUCTS"],
supportUrl: "https://github.com/saleor/apps/discussions",
tokenTargetUrl: `${context.appBaseUrl}/api/register`,
tokenTargetUrl: `${apiBaseURL}/api/register`,
version: packageJson.version,
webhooks: [
productVariantCreatedWebhook.getWebhookManifest(context.appBaseUrl),
productVariantUpdatedWebhook.getWebhookManifest(context.appBaseUrl),
productVariantDeletedWebhook.getWebhookManifest(context.appBaseUrl),
productUpdatedWebhook.getWebhookManifest(context.appBaseUrl),
productVariantCreatedWebhook.getWebhookManifest(apiBaseURL),
productVariantUpdatedWebhook.getWebhookManifest(apiBaseURL),
productVariantDeletedWebhook.getWebhookManifest(apiBaseURL),
productUpdatedWebhook.getWebhookManifest(apiBaseURL),
],
};

View file

@ -18,7 +18,9 @@
"SENTRY_PROJECT",
"SENTRY_ORG",
"SENTRY_AUTH_TOKEN",
"SENTRY_ENVIRONMENT"
"SENTRY_ENVIRONMENT",
"APP_IFRAME_BASE_URL",
"APP_API_BASE_URL"
]
}
}

View file

@ -9,4 +9,12 @@ REST_APL_TOKEN=
MAILCHIMP_CLIENT_ID=
MAILCHIMP_CLIENT_SECRET=
APP_LOG_LEVEL=info
APP_LOG_LEVEL=info
# Local development variables. When developped locally with Saleor inside docker, these can be set to:
# APP_IFRAME_BASE_URL = http://localhost:3000, so Dashboard on host can access iframe
# APP_API_BASE_URL=http://host.docker.internal:3000 - so Saleor can reach App running on host, from the container.
# If developped with tunnels, set this empty, it will fallback to default Next's localhost:3000
# https://docs.saleor.io/docs/3.x/developer/extending/apps/local-app-development
APP_IFRAME_BASE_URL=
APP_API_BASE_URL=

View file

@ -6,14 +6,17 @@ import { customerCreatedWebhook } from "./webhooks/customer-created";
import { customerMetadataUpdatedWebhook } from "./webhooks/customer-updated";
export default createManifestHandler({
async manifestFactory(context) {
async manifestFactory({ appBaseUrl }) {
const iframeBaseUrl = process.env.APP_IFRAME_BASE_URL ?? appBaseUrl;
const apiBaseURL = process.env.APP_API_BASE_URL ?? appBaseUrl;
const manifest: AppManifest = {
about: "CRM App allows synchronization of customers from Saleor to other platforms",
appUrl: context.appBaseUrl,
appUrl: iframeBaseUrl,
author: "Saleor Commerce",
brand: {
logo: {
default: `${context.appBaseUrl}/logo.png`,
default: `${apiBaseURL}/logo.png`,
},
},
dataPrivacyUrl: "https://saleor.io/legal/privacy/",
@ -34,11 +37,11 @@ export default createManifestHandler({
*/
],
supportUrl: "https://github.com/saleor/apps/discussions",
tokenTargetUrl: `${context.appBaseUrl}/api/register`,
tokenTargetUrl: `${apiBaseURL}/api/register`,
version: packageJson.version,
webhooks: [
customerCreatedWebhook.getWebhookManifest(context.appBaseUrl),
customerMetadataUpdatedWebhook.getWebhookManifest(context.appBaseUrl),
customerCreatedWebhook.getWebhookManifest(apiBaseURL),
customerMetadataUpdatedWebhook.getWebhookManifest(apiBaseURL),
],
};

View file

@ -19,7 +19,9 @@
"SENTRY_PROJECT",
"SENTRY_AUTH_TOKEN",
"SENTRY_ORG",
"SENTRY_ENVIRONMENT"
"SENTRY_ENVIRONMENT",
"APP_IFRAME_BASE_URL",
"APP_API_BASE_URL"
]
}
}

View file

@ -2,4 +2,12 @@
NEXT_PUBLIC_NUVO_LICENSE_KEY=
NEXT_PUBLIC_NUVO_PROD_MODE=false
APP_LOG_LEVEL=info
APP_LOG_LEVEL=info
# Local development variables. When developped locally with Saleor inside docker, these can be set to:
# APP_IFRAME_BASE_URL = http://localhost:3000, so Dashboard on host can access iframe
# APP_API_BASE_URL=http://host.docker.internal:3000 - so Saleor can reach App running on host, from the container.
# If developped with tunnels, set this empty, it will fallback to default Next's localhost:3000
# https://docs.saleor.io/docs/3.x/developer/extending/apps/local-app-development
APP_IFRAME_BASE_URL=
APP_API_BASE_URL=

View file

@ -4,15 +4,18 @@ import { AppManifest } from "@saleor/app-sdk/types";
import packageJson from "../../../package.json";
export default createManifestHandler({
async manifestFactory(context) {
async manifestFactory({ appBaseUrl }) {
const iframeBaseUrl = process.env.APP_IFRAME_BASE_URL ?? appBaseUrl;
const apiBaseURL = process.env.APP_API_BASE_URL ?? appBaseUrl;
const manifest: AppManifest = {
about:
"Data Importer allows batch import of shop data to Saleor from sources like CSV or Excel",
appUrl: context.appBaseUrl,
appUrl: iframeBaseUrl,
author: "Saleor Commerce",
brand: {
logo: {
default: `${context.appBaseUrl}/logo.png`,
default: `${apiBaseURL}/logo.png`,
},
},
dataPrivacyUrl: "https://saleor.io/legal/privacy/",
@ -27,7 +30,7 @@ export default createManifestHandler({
name: "Data Importer",
permissions: ["MANAGE_USERS"],
supportUrl: "https://github.com/saleor/apps/discussions",
tokenTargetUrl: `${context.appBaseUrl}/api/register`,
tokenTargetUrl: `${apiBaseURL}/api/register`,
version: packageJson.version,
webhooks: [
/**

View file

@ -22,7 +22,9 @@
"SENTRY_ORG",
"SENTRY_DSN",
"SENTRY_ENVIRONMENT",
"NEXT_PUBLIC_SENTRY_DSN"
"NEXT_PUBLIC_SENTRY_DSN",
"APP_IFRAME_BASE_URL",
"APP_API_BASE_URL"
]
}
}

View file

@ -7,4 +7,12 @@ APL=
REST_APL_ENDPOINT=
REST_APL_TOKEN=
APP_LOG_LEVEL=info
APP_LOG_LEVEL=info
# Local development variables. When developped locally with Saleor inside docker, these can be set to:
# APP_IFRAME_BASE_URL = http://localhost:3000, so Dashboard on host can access iframe
# APP_API_BASE_URL=http://host.docker.internal:3000 - so Saleor can reach App running on host, from the container.
# If developped with tunnels, set this empty, it will fallback to default Next's localhost:3000
# https://docs.saleor.io/docs/3.x/developer/extending/apps/local-app-development
APP_IFRAME_BASE_URL=
APP_API_BASE_URL=

View file

@ -4,15 +4,18 @@ import { AppManifest } from "@saleor/app-sdk/types";
import packageJson from "../../../package.json";
export default createManifestHandler({
async manifestFactory(context) {
async manifestFactory({ appBaseUrl }) {
const iframeBaseUrl = process.env.APP_IFRAME_BASE_URL ?? appBaseUrl;
const apiBaseURL = process.env.APP_API_BASE_URL ?? appBaseUrl;
const manifest: AppManifest = {
about:
"Emails & Messages App is a multi-vendor Saleor app that integrates with notification services.",
appUrl: context.appBaseUrl,
appUrl: iframeBaseUrl,
author: "Saleor Commerce",
brand: {
logo: {
default: `${context.appBaseUrl}/logo.png`,
default: `${apiBaseURL}/logo.png`,
},
},
dataPrivacyUrl: "https://saleor.io/legal/privacy/",
@ -31,7 +34,7 @@ export default createManifestHandler({
*/
requiredSaleorVersion: ">=3.10 <4",
supportUrl: "https://github.com/saleor/apps/discussions",
tokenTargetUrl: `${context.appBaseUrl}/api/register`,
tokenTargetUrl: `${apiBaseURL}/api/register`,
version: packageJson.version,
};

View file

@ -19,7 +19,9 @@
"SENTRY_DSN",
"SENTRY_AUTH_TOKEN",
"NEXT_PUBLIC_SENTRY_DSN",
"SENTRY_ENVIRONMENT"
"SENTRY_ENVIRONMENT",
"APP_IFRAME_BASE_URL",
"APP_API_BASE_URL"
]
}
}

View file

@ -8,4 +8,12 @@ APP_LOG_LEVEL=info
# See api/register.tsx
# Leave empty to allow all domains
# Example: "https:\/\/.*.saleor.cloud\/graphql\/" to enable Saleor Cloud APIs
ALLOWED_DOMAIN_PATTERN=
ALLOWED_DOMAIN_PATTERN=
# Local development variables. When developped locally with Saleor inside docker, these can be set to:
# APP_IFRAME_BASE_URL = http://localhost:3000, so Dashboard on host can access iframe
# APP_API_BASE_URL=http://host.docker.internal:3000 - so Saleor can reach App running on host, from the container.
# If developped with tunnels, set this empty, it will fallback to default Next's localhost:3000
# https://docs.saleor.io/docs/3.x/developer/extending/apps/local-app-development
APP_IFRAME_BASE_URL=
APP_API_BASE_URL=

View file

@ -6,12 +6,20 @@ import { invoiceRequestedWebhook } from "./webhooks/invoice-requested";
import { REQUIRED_SALEOR_VERSION } from "../../saleor-app";
export default createManifestHandler({
async manifestFactory(context) {
async manifestFactory({ appBaseUrl }) {
const iframeBaseUrl = process.env.APP_IFRAME_BASE_URL ?? appBaseUrl;
const apiBaseURL = process.env.APP_API_BASE_URL ?? appBaseUrl;
const manifest: AppManifest = {
about:
"An app that generates PDF invoices for Orders and stores them in Saleor file storage.",
appUrl: context.appBaseUrl,
appUrl: iframeBaseUrl,
author: "Saleor Commerce",
brand: {
logo: {
default: `${apiBaseURL}/logo.png`,
},
},
dataPrivacyUrl: "https://saleor.io/legal/privacy/",
extensions: [],
homepageUrl: "https://github.com/saleor/apps",
@ -23,14 +31,9 @@ export default createManifestHandler({
*/
requiredSaleorVersion: REQUIRED_SALEOR_VERSION,
supportUrl: "https://github.com/saleor/apps/discussions",
tokenTargetUrl: `${context.appBaseUrl}/api/register`,
tokenTargetUrl: `${apiBaseURL}/api/register`,
version: packageJson.version,
webhooks: [invoiceRequestedWebhook.getWebhookManifest(context.appBaseUrl)],
brand: {
logo: {
default: `${context.appBaseUrl}/logo.png`,
},
},
webhooks: [invoiceRequestedWebhook.getWebhookManifest(apiBaseURL)],
};
return manifest;

View file

@ -20,7 +20,9 @@
"SENTRY_ORG",
"SENTRY_AUTH_TOKEN",
"NEXT_PUBLIC_SENTRY_DSN",
"SENTRY_ENVIRONMENT"
"SENTRY_ENVIRONMENT",
"APP_IFRAME_BASE_URL",
"APP_API_BASE_URL"
]
}
}

View file

@ -8,4 +8,12 @@ ALLOWED_DOMAIN_PATTERN=
# Encryption key used by the EncryptedSettingsManager. Required by the production builds
SECRET_KEY=
APP_LOG_LEVEL=info
APP_LOG_LEVEL=info
# Local development variables. When developped locally with Saleor inside docker, these can be set to:
# APP_IFRAME_BASE_URL = http://localhost:3000, so Dashboard on host can access iframe
# APP_API_BASE_URL=http://host.docker.internal:3000 - so Saleor can reach App running on host, from the container.
# If developped with tunnels, set this empty, it will fallback to default Next's localhost:3000
# https://docs.saleor.io/docs/3.x/developer/extending/apps/local-app-development
APP_IFRAME_BASE_URL=
APP_API_BASE_URL=

View file

@ -1,11 +1,5 @@
# saleor-app-klaviyo
## 1.7.1
### Patch Changes
- cbd763b: Prevent Server-side rendering in Klaviyo app to avoid hydration errors
## 1.7.0
### Minor Changes

View file

@ -1,6 +1,6 @@
{
"name": "saleor-app-klaviyo",
"version": "1.7.1",
"version": "1.7.0",
"scripts": {
"build": "pnpm generate && next build",
"dev": "pnpm generate && NODE_OPTIONS='--inspect' next dev",

View file

@ -14,14 +14,12 @@ export const appBridgeInstance = typeof window !== "undefined" ? new AppBridge()
function SaleorApp({ Component, pageProps }: AppProps) {
return (
<NoSSRWrapper>
<AppBridgeProvider appBridgeInstance={appBridgeInstance}>
<ThemeProvider>
<ThemeSynchronizer />
<Component {...pageProps} />
</ThemeProvider>
</AppBridgeProvider>
</NoSSRWrapper>
<AppBridgeProvider appBridgeInstance={appBridgeInstance}>
<ThemeProvider>
<ThemeSynchronizer />
<Component {...pageProps} />
</ThemeProvider>
</AppBridgeProvider>
);
}

View file

@ -11,14 +11,16 @@ const handler = createManifestHandler({
async manifestFactory(context): Promise<AppManifest> {
const { appBaseUrl } = context;
const iframeBaseUrl = process.env.APP_IFRAME_BASE_URL ?? appBaseUrl;
const apiBaseURL = process.env.APP_API_BASE_URL ?? appBaseUrl;
return {
about:
"Klaviyo integration allows sending Klaviyo notifications on Saleor events.",
appUrl: appBaseUrl,
about: "Klaviyo integration allows sending Klaviyo notifications on Saleor events.",
appUrl: iframeBaseUrl,
author: "Saleor Commerce",
brand: {
logo: {
default: `${context.appBaseUrl}/logo.png`,
default: `${apiBaseURL}/logo.png`,
},
},
dataPrivacyUrl: "https://saleor.io/legal/privacy/",
@ -27,13 +29,13 @@ const handler = createManifestHandler({
name: "Klaviyo",
permissions: ["MANAGE_USERS", "MANAGE_ORDERS"],
supportUrl: "https://github.com/saleor/apps/discussions",
tokenTargetUrl: `${appBaseUrl}/api/register`,
tokenTargetUrl: `${apiBaseURL}/api/register`,
version: pkg.version,
webhooks: [
customerCreatedWebhook.getWebhookManifest(appBaseUrl),
fulfillmentCreatedWebhook.getWebhookManifest(appBaseUrl),
orderCreatedWebhook.getWebhookManifest(appBaseUrl),
orderFullyPaidWebhook.getWebhookManifest(appBaseUrl),
customerCreatedWebhook.getWebhookManifest(apiBaseURL),
fulfillmentCreatedWebhook.getWebhookManifest(apiBaseURL),
orderCreatedWebhook.getWebhookManifest(apiBaseURL),
orderFullyPaidWebhook.getWebhookManifest(apiBaseURL),
],
};
},

View file

@ -18,7 +18,9 @@
"SENTRY_PROJECT",
"SENTRY_AUTH_TOKEN",
"NEXT_PUBLIC_VERCEL_ENV",
"SENTRY_ENVIRONMENT"
"SENTRY_ENVIRONMENT",
"APP_IFRAME_BASE_URL",
"APP_API_BASE_URL"
]
}
}

View file

@ -1 +1,9 @@
MONITORING_APP_API_URL=
MONITORING_APP_API_URL=
# Local development variables. When developped locally with Saleor inside docker, these can be set to:
# APP_IFRAME_BASE_URL = http://localhost:3000, so Dashboard on host can access iframe
# APP_API_BASE_URL=http://host.docker.internal:3000 - so Saleor can reach App running on host, from the container.
# If developped with tunnels, set this empty, it will fallback to default Next's localhost:3000
# https://docs.saleor.io/docs/3.x/developer/extending/apps/local-app-development
APP_IFRAME_BASE_URL=
APP_API_BASE_URL=

View file

@ -18,7 +18,9 @@
"SENTRY_PROJECT",
"SENTRY_AUTH_TOKEN",
"NEXT_PUBLIC_VERCEL_ENV",
"MONITORING_APP_API_URL"
"MONITORING_APP_API_URL",
"APP_IFRAME_BASE_URL",
"APP_API_BASE_URL"
]
}
}

View file

@ -1 +1,19 @@
APP_DEBUG=info
APL=file
# Optional
# Regex pattern consumed conditionally to restrcit app installation to specific urls.
# See api/register.tsx
# Leave empty to allow all domains
# Example: "https:\/\/.*.saleor.cloud\/graphql\/" to enable Saleor Cloud APIs
ALLOWED_DOMAIN_PATTERN=
# Encryption key used by the EncryptedSettingsManager. Required by the production builds
SECRET_KEY=
APP_LOG_LEVEL=info
# Local development variables. When developped locally with Saleor inside docker, these can be set to:
# APP_IFRAME_BASE_URL = http://localhost:3000, so Dashboard on host can access iframe
# APP_API_BASE_URL=http://host.docker.internal:3000 - so Saleor can reach App running on host, from the container.
# If developped with tunnels, set this empty, it will fallback to default Next's localhost:3000
# https://docs.saleor.io/docs/3.x/developer/extending/apps/local-app-development
APP_IFRAME_BASE_URL=
APP_API_BASE_URL=

View file

@ -9,14 +9,17 @@ import { webhookProductVariantDeleted } from "./webhooks/product_variant_deleted
import { webhookProductVariantUpdated } from "./webhooks/product_variant_updated";
export default createManifestHandler({
async manifestFactory(context) {
async manifestFactory({ appBaseUrl }) {
const iframeBaseUrl = process.env.APP_IFRAME_BASE_URL ?? appBaseUrl;
const apiBaseURL = process.env.APP_API_BASE_URL ?? appBaseUrl;
const manifest: AppManifest = {
about: "Generate feeds consumed by Merchant Platforms",
appUrl: context.appBaseUrl,
appUrl: iframeBaseUrl,
author: "Saleor Commerce",
brand: {
logo: {
default: `${context.appBaseUrl}/logo.png`,
default: `${apiBaseURL}/logo.png`,
},
},
dataPrivacyUrl: "https://saleor.io/legal/privacy/",
@ -26,14 +29,14 @@ export default createManifestHandler({
name: "Product Feed",
permissions: ["MANAGE_PRODUCTS"],
supportUrl: "https://github.com/saleor/apps/discussions",
tokenTargetUrl: `${context.appBaseUrl}/api/register`,
tokenTargetUrl: `${apiBaseURL}/api/register`,
version: packageJson.version,
webhooks: [
webhookProductCreated.getWebhookManifest(context.appBaseUrl),
webhookProductDeleted.getWebhookManifest(context.appBaseUrl),
webhookProductVariantCreated.getWebhookManifest(context.appBaseUrl),
webhookProductVariantDeleted.getWebhookManifest(context.appBaseUrl),
webhookProductVariantUpdated.getWebhookManifest(context.appBaseUrl),
webhookProductCreated.getWebhookManifest(apiBaseURL),
webhookProductDeleted.getWebhookManifest(apiBaseURL),
webhookProductVariantCreated.getWebhookManifest(apiBaseURL),
webhookProductVariantDeleted.getWebhookManifest(apiBaseURL),
webhookProductVariantUpdated.getWebhookManifest(apiBaseURL),
],
};

View file

@ -20,7 +20,9 @@
"FEED_CACHE_MAX_AGE",
"VERCEL_URL",
"PORT",
"SENTRY_ENVIRONMENT"
"SENTRY_ENVIRONMENT",
"APP_IFRAME_BASE_URL",
"APP_API_BASE_URL"
]
}
}

View file

@ -1,4 +1,12 @@
# Encryption key used by the EncryptedSettingsManager. Required by the production builds
SECRET_KEY=
APP_LOG_LEVEL=info
APP_LOG_LEVEL=info
# Local development variables. When developped locally with Saleor inside docker, these can be set to:
# APP_IFRAME_BASE_URL = http://localhost:3000, so Dashboard on host can access iframe
# APP_API_BASE_URL=http://host.docker.internal:3000 - so Saleor can reach App running on host, from the container.
# If developped with tunnels, set this empty, it will fallback to default Next's localhost:3000
# https://docs.saleor.io/docs/3.x/developer/extending/apps/local-app-development
APP_IFRAME_BASE_URL=
APP_API_BASE_URL=

View file

@ -10,14 +10,18 @@ import { webhookProductVariantDeleted } from "./webhooks/saleor/product_variant_
import { webhookProductVariantUpdated } from "./webhooks/saleor/product_variant_updated";
export default createManifestHandler({
async manifestFactory(context) {
async manifestFactory({ appBaseUrl }) {
const iframeBaseUrl = process.env.APP_IFRAME_BASE_URL ?? appBaseUrl;
const apiBaseURL = process.env.APP_API_BASE_URL ?? appBaseUrl;
const manifest: AppManifest = {
about:
"Search App is a multi-integration app that connects your Saleor store with search engines.",
appUrl: context.appBaseUrl,
appUrl: iframeBaseUrl,
author: "Saleor Commerce",
brand: {
logo: {
default: `${context.appBaseUrl}/logo.png`,
default: `${apiBaseURL}/logo.png`,
},
},
dataPrivacyUrl: "https://saleor.io/legal/privacy/",
@ -39,7 +43,7 @@ export default createManifestHandler({
"MANAGE_PRODUCT_TYPES_AND_ATTRIBUTES",
],
supportUrl: "https://github.com/saleor/apps/discussions",
tokenTargetUrl: `${context.appBaseUrl}/api/register`,
tokenTargetUrl: `${apiBaseURL}/api/register`,
version: packageJson.version,
webhooks: [
/**
@ -47,12 +51,12 @@ export default createManifestHandler({
* Read more
* https://docs.saleor.io/docs/3.x/developer/api-reference/objects/webhook
*/
webhookProductCreated.getWebhookManifest(context.appBaseUrl),
webhookProductDeleted.getWebhookManifest(context.appBaseUrl),
webhookProductUpdated.getWebhookManifest(context.appBaseUrl),
webhookProductVariantCreated.getWebhookManifest(context.appBaseUrl),
webhookProductVariantDeleted.getWebhookManifest(context.appBaseUrl),
webhookProductVariantUpdated.getWebhookManifest(context.appBaseUrl),
webhookProductCreated.getWebhookManifest(apiBaseURL),
webhookProductDeleted.getWebhookManifest(apiBaseURL),
webhookProductUpdated.getWebhookManifest(apiBaseURL),
webhookProductVariantCreated.getWebhookManifest(apiBaseURL),
webhookProductVariantDeleted.getWebhookManifest(apiBaseURL),
webhookProductVariantUpdated.getWebhookManifest(apiBaseURL),
],
};

View file

@ -6,13 +6,10 @@ import { WebhooksStatus } from "../../components/WebhooksStatus";
import { MainInstructions } from "../../components/MainInstructions";
import { WebhooksStatusInstructions } from "../../components/WebhooksStatusInstructions";
import { TextLink } from "@saleor/apps-ui";
import { useAppBridge } from "@saleor/app-sdk/app-bridge";
const ALGOLIA_DASHBOARD_TOKENS_URL = "https://www.algolia.com/account/api-keys/all";
export const ConfigurationView = () => {
const { appBridgeState } = useAppBridge();
return (
<Box display="flex" flexDirection="column" gap={10}>
<Box>

View file

@ -17,7 +17,9 @@
"SENTRY_ORG",
"NEXT_PUBLIC_VERCEL_ENV",
"NEXT_PUBLIC_SENTRY_DSN",
"SENTRY_ENVIRONMENT"
"SENTRY_ENVIRONMENT",
"APP_IFRAME_BASE_URL",
"APP_API_BASE_URL"
]
}
}

View file

@ -1,4 +1,13 @@
# Encryption key used by the EncryptedSettingsManager. Required by the production builds
SECRET_KEY=
APP_LOG_LEVEL=info
APP_LOG_LEVEL=info
# Local development variables. When developped locally with Saleor inside docker, these can be set to:
# APP_IFRAME_BASE_URL = http://localhost:3000, so Dashboard on host can access iframe
# APP_API_BASE_URL=http://host.docker.internal:3000 - so Saleor can reach App running on host, from the container.
# If developped with tunnels, set this empty, it will fallback to default Next's localhost:3000
# https://docs.saleor.io/docs/3.x/developer/extending/apps/local-app-development
APP_IFRAME_BASE_URL=
APP_API_BASE_URL=

View file

@ -5,15 +5,18 @@ import packageJson from "../../../package.json";
import { orderCreatedWebhook } from "./webhooks/order-created";
const handler = createManifestHandler({
async manifestFactory(context) {
async manifestFactory({ appBaseUrl }) {
const iframeBaseUrl = process.env.APP_IFRAME_BASE_URL ?? appBaseUrl;
const apiBaseURL = process.env.APP_API_BASE_URL ?? appBaseUrl;
const manifest: AppManifest = {
about:
"Saleor Slack integration allows you to get notifications on Slack channel from Saleor events.",
appUrl: context.appBaseUrl,
appUrl: iframeBaseUrl,
author: "Saleor Commerce",
brand: {
logo: {
default: `${context.appBaseUrl}/logo.png`,
default: `${apiBaseURL}/logo.png`,
},
},
dataPrivacyUrl: "https://saleor.io/legal/privacy/",
@ -23,9 +26,9 @@ const handler = createManifestHandler({
name: "Slack",
permissions: ["MANAGE_ORDERS"],
supportUrl: "https://github.com/saleor/apps/discussions",
tokenTargetUrl: `${context.appBaseUrl}/api/register`,
tokenTargetUrl: `${apiBaseURL}/api/register`,
version: packageJson.version,
webhooks: [orderCreatedWebhook.getWebhookManifest(context.appBaseUrl)],
webhooks: [orderCreatedWebhook.getWebhookManifest(apiBaseURL)],
};
return manifest;

View file

@ -18,7 +18,9 @@
"SENTRY_PROJECT",
"SENTRY_AUTH_TOKEN",
"SENTRY_ENVIRONMENT",
"NEXT_PUBLIC_VERCEL_ENV"
"NEXT_PUBLIC_VERCEL_ENV",
"APP_IFRAME_BASE_URL",
"APP_API_BASE_URL"
]
}
}

View file

@ -1,11 +1,12 @@
APL=file
#"fatal" | "error" | "warn" | "info" | "debug" | "trace"
APP_LOG_LEVEL=info
NODE_ENV=
# Encryption key used by the EncryptedSettingsManager. Required by the production builds
SECRET_KEY=
PORT=
VERCEL_URL=
REST_APL_ENDPOINT=
REST_APL_TOKEN=
ALLOWED_DOMAIN_PATTERN=
APP_LOG_LEVEL=info
# Local development variables. When developped locally with Saleor inside docker, these can be set to:
# APP_IFRAME_BASE_URL = http://localhost:3000, so Dashboard on host can access iframe
# APP_API_BASE_URL=http://host.docker.internal:3000 - so Saleor can reach App running on host, from the container.
# If developped with tunnels, set this empty, it will fallback to default Next's localhost:3000
# https://docs.saleor.io/docs/3.x/developer/extending/apps/local-app-development
APP_IFRAME_BASE_URL=
APP_API_BASE_URL=

View file

@ -9,14 +9,17 @@ import { orderFulfilledAsyncWebhook } from "./webhooks/order-fulfilled";
import { REQUIRED_SALEOR_VERSION } from "../../../saleor-app";
export default createManifestHandler({
async manifestFactory(context) {
async manifestFactory({ appBaseUrl }) {
const iframeBaseUrl = process.env.APP_IFRAME_BASE_URL ?? appBaseUrl;
const apiBaseURL = process.env.APP_API_BASE_URL ?? appBaseUrl;
const manifest: AppManifest = {
about: "Taxes App allows dynamic taxes calculations for orders",
appUrl: context.appBaseUrl,
appUrl: iframeBaseUrl,
author: "Saleor Commerce",
brand: {
logo: {
default: `${context.appBaseUrl}/logo.png`,
default: `${apiBaseURL}/logo.png`,
},
},
dataPrivacyUrl: "https://saleor.io/legal/privacy/",
@ -27,13 +30,13 @@ export default createManifestHandler({
permissions: ["HANDLE_TAXES", "MANAGE_ORDERS"],
requiredSaleorVersion: REQUIRED_SALEOR_VERSION,
supportUrl: "https://github.com/saleor/apps/discussions",
tokenTargetUrl: `${context.appBaseUrl}/api/register`,
tokenTargetUrl: `${apiBaseURL}/api/register`,
version: packageJson.version,
webhooks: [
orderCalculateTaxesSyncWebhook.getWebhookManifest(context.appBaseUrl),
checkoutCalculateTaxesSyncWebhook.getWebhookManifest(context.appBaseUrl),
orderCreatedAsyncWebhook.getWebhookManifest(context.appBaseUrl),
orderFulfilledAsyncWebhook.getWebhookManifest(context.appBaseUrl),
orderCalculateTaxesSyncWebhook.getWebhookManifest(apiBaseURL),
checkoutCalculateTaxesSyncWebhook.getWebhookManifest(apiBaseURL),
orderCreatedAsyncWebhook.getWebhookManifest(apiBaseURL),
orderFulfilledAsyncWebhook.getWebhookManifest(apiBaseURL),
],
};

View file

@ -18,7 +18,9 @@
"SENTRY_DSN",
"SENTRY_AUTH_TOKEN",
"SENTRY_ENVIRONMENT",
"NEXT_PUBLIC_SENTRY_DSN"
"NEXT_PUBLIC_SENTRY_DSN",
"APP_IFRAME_BASE_URL",
"APP_API_BASE_URL"
]
}
}

View file

@ -9,7 +9,7 @@
},
"devDependencies": {
"@playwright/test": "^1.35.1",
"@saleor/app-sdk": "0.40.1",
"@saleor/app-sdk": "0.41.0",
"dotenv": "^16.3.1",
"eslint-config-saleor": "workspace:*",
"zod": "3.20.2"

View file

@ -2,7 +2,11 @@
"$schema": "https://turbo.build/schema.json",
"extends": ["//"],
"pipeline": {
"e2e": {},
"e2e:ui": {}
"e2e": {
"env": ["INSTANCE_URL", "DASHBOARD_USER_PASSWORD", "DASHBOARD_USER_EMAIL"]
},
"e2e:ui": {
"env": ["INSTANCE_URL", "DASHBOARD_USER_PASSWORD", "DASHBOARD_USER_EMAIL"]
}
}
}

View file

@ -1552,8 +1552,8 @@ importers:
specifier: ^1.35.1
version: 1.35.1
'@saleor/app-sdk':
specifier: 0.40.1
version: 0.40.1(next@13.3.0)(react-dom@18.2.0)(react@18.2.0)
specifier: 0.41.0
version: 0.41.0(next@13.4.7)(react-dom@18.2.0)(react@18.2.0)
dotenv:
specifier: ^16.3.1
version: 16.3.1
@ -6381,7 +6381,7 @@ packages:
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
'@whatwg-node/fetch': 0.8.8
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
transitivePeerDependencies:
- encoding
dev: true
@ -6394,7 +6394,7 @@ packages:
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
dataloader: 2.2.2
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
value-or-promise: 1.0.12
dev: true
@ -6407,7 +6407,7 @@ packages:
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
globby: 11.1.0
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
unixify: 1.0.0
transitivePeerDependencies:
- '@babel/core'
@ -6425,7 +6425,7 @@ packages:
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
dataloader: 2.2.2
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
value-or-promise: 1.0.12
dev: true
@ -6440,7 +6440,7 @@ packages:
graphql: 16.6.0
graphql-ws: 5.12.1(graphql@16.6.0)
isomorphic-ws: 5.0.0(ws@8.13.0)
tslib: 2.6.0
tslib: 2.5.3
ws: 8.13.0
transitivePeerDependencies:
- bufferutil
@ -6459,7 +6459,7 @@ packages:
extract-files: 11.0.0
graphql: 16.6.0
meros: 1.3.0(@types/node@18.15.3)
tslib: 2.6.0
tslib: 2.5.3
value-or-promise: 1.0.12
transitivePeerDependencies:
- '@types/node'
@ -6474,7 +6474,7 @@ packages:
'@types/ws': 8.5.5
graphql: 16.6.0
isomorphic-ws: 5.0.0(ws@8.13.0)
tslib: 2.6.0
tslib: 2.5.3
ws: 8.13.0
transitivePeerDependencies:
- bufferutil
@ -6490,7 +6490,7 @@ packages:
'@graphql-typed-document-node/core': 3.2.0(graphql@16.6.0)
'@repeaterjs/repeater': 3.0.4
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
value-or-promise: 1.0.12
dev: true
@ -6504,7 +6504,7 @@ packages:
graphql: 16.6.0
is-glob: 4.0.3
micromatch: 4.0.5
tslib: 2.6.0
tslib: 2.5.3
unixify: 1.0.0
transitivePeerDependencies:
- '@babel/core'
@ -6522,7 +6522,7 @@ packages:
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
'@whatwg-node/fetch': 0.8.8
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
value-or-promise: 1.0.12
transitivePeerDependencies:
- '@babel/core'
@ -6540,7 +6540,7 @@ packages:
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
globby: 11.1.0
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
unixify: 1.0.0
dev: true
@ -6555,7 +6555,7 @@ packages:
'@babel/types': 7.22.5
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
transitivePeerDependencies:
- '@babel/core'
- supports-color
@ -6569,7 +6569,7 @@ packages:
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
graphql: 16.6.0
resolve-from: 5.0.0
tslib: 2.6.0
tslib: 2.5.3
dev: true
/@graphql-tools/json-file-loader@7.4.18(graphql@16.6.0):
@ -6580,7 +6580,7 @@ packages:
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
globby: 11.1.0
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
unixify: 1.0.0
dev: true
@ -6593,7 +6593,7 @@ packages:
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
graphql: 16.6.0
p-limit: 3.1.0
tslib: 2.6.0
tslib: 2.5.3
dev: true
/@graphql-tools/merge@8.4.2(graphql@16.6.0):
@ -6603,7 +6603,7 @@ packages:
dependencies:
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
dev: true
/@graphql-tools/optimize@1.4.0(graphql@16.6.0):
@ -6612,7 +6612,7 @@ packages:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
dev: true
/@graphql-tools/prisma-loader@7.2.72(@types/node@18.15.3)(graphql@16.6.0):
@ -6637,7 +6637,7 @@ packages:
json-stable-stringify: 1.0.2
lodash: 4.17.21
scuid: 1.1.0
tslib: 2.6.0
tslib: 2.5.3
yaml-ast-parser: 0.0.43
transitivePeerDependencies:
- '@types/node'
@ -6655,7 +6655,7 @@ packages:
'@ardatan/relay-compiler': 12.0.0(graphql@16.6.0)
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
transitivePeerDependencies:
- encoding
- supports-color
@ -6669,7 +6669,7 @@ packages:
'@graphql-tools/merge': 8.4.2(graphql@16.6.0)
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
value-or-promise: 1.0.12
dev: true
@ -6689,7 +6689,7 @@ packages:
'@whatwg-node/fetch': 0.8.8
graphql: 16.6.0
isomorphic-ws: 5.0.0(ws@8.13.0)
tslib: 2.6.0
tslib: 2.5.3
value-or-promise: 1.0.12
ws: 8.13.0
transitivePeerDependencies:
@ -6705,7 +6705,7 @@ packages:
graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
dependencies:
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.4.1
dev: true
/@graphql-tools/utils@9.2.1(graphql@16.6.0):
@ -6715,7 +6715,7 @@ packages:
dependencies:
'@graphql-typed-document-node/core': 3.2.0(graphql@16.6.0)
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
dev: true
/@graphql-tools/wrap@9.4.2(graphql@16.6.0):
@ -6727,7 +6727,7 @@ packages:
'@graphql-tools/schema': 9.0.19(graphql@16.6.0)
'@graphql-tools/utils': 9.2.1(graphql@16.6.0)
graphql: 16.6.0
tslib: 2.6.0
tslib: 2.5.3
value-or-promise: 1.0.12
dev: true
@ -7151,6 +7151,10 @@ packages:
/@next/env@13.3.0:
resolution: {integrity: sha512-AjppRV4uG3No7L1plinoTQETH+j2F10TEnrMfzbTUYwze5sBUPveeeBAPZPm8OkJZ1epq9OyYKhZrvbD6/9HCQ==}
/@next/env@13.4.7:
resolution: {integrity: sha512-ZlbiFulnwiFsW9UV1ku1OvX/oyIPLtMk9p/nnvDSwI0s7vSoZdRtxXNsaO+ZXrLv/pMbXVGq4lL8TbY9iuGmVw==}
dev: true
/@next/eslint-plugin-next@13.3.4:
resolution: {integrity: sha512-mvS+HafOPy31oJbAi920WJXMdjbyb4v5FAMr9PeGZfRIdEcsLkA3mU/ZvmwzovJgP3nAWw2e2yM8iIFW8VpvIA==}
dependencies:
@ -7165,6 +7169,15 @@ packages:
requiresBuild: true
optional: true
/@next/swc-darwin-arm64@13.4.7:
resolution: {integrity: sha512-VZTxPv1b59KGiv/pZHTO5Gbsdeoxcj2rU2cqJu03btMhHpn3vwzEK0gUSVC/XW96aeGO67X+cMahhwHzef24/w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@next/swc-darwin-x64@13.3.0:
resolution: {integrity: sha512-oQoqFa88OGgwnYlnAGHVct618FRI/749se0N3S8t9Bzdv5CRbscnO0RcX901+YnNK4Q6yeiizfgO3b7kogtsZg==}
engines: {node: '>= 10'}
@ -7173,6 +7186,15 @@ packages:
requiresBuild: true
optional: true
/@next/swc-darwin-x64@13.4.7:
resolution: {integrity: sha512-gO2bw+2Ymmga+QYujjvDz9955xvYGrWofmxTq7m70b9pDPvl7aDFABJOZ2a8SRCuSNB5mXU8eTOmVVwyp/nAew==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@next/swc-linux-arm64-gnu@13.3.0:
resolution: {integrity: sha512-Wzz2p/WqAJUqTVoLo6H18WMeAXo3i+9DkPDae4oQG8LMloJ3if4NEZTnOnTUlro6cq+S/W4pTGa97nWTrOjbGw==}
engines: {node: '>= 10'}
@ -7181,6 +7203,15 @@ packages:
requiresBuild: true
optional: true
/@next/swc-linux-arm64-gnu@13.4.7:
resolution: {integrity: sha512-6cqp3vf1eHxjIDhEOc7Mh/s8z1cwc/l5B6ZNkOofmZVyu1zsbEM5Hmx64s12Rd9AYgGoiCz4OJ4M/oRnkE16/Q==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@next/swc-linux-arm64-musl@13.3.0:
resolution: {integrity: sha512-xPVrIQOQo9WXJYgmoTlMnAD/HlR/1e1ZIWGbwIzEirXBVBqMARUulBEIKdC19zuvoJ477qZJgBDCKtKEykCpyQ==}
engines: {node: '>= 10'}
@ -7189,6 +7220,15 @@ packages:
requiresBuild: true
optional: true
/@next/swc-linux-arm64-musl@13.4.7:
resolution: {integrity: sha512-T1kD2FWOEy5WPidOn1si0rYmWORNch4a/NR52Ghyp4q7KyxOCuiOfZzyhVC5tsLIBDH3+cNdB5DkD9afpNDaOw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@next/swc-linux-x64-gnu@13.3.0:
resolution: {integrity: sha512-jOFlpGuPD7W2tuXVJP4wt9a3cpNxWAPcloq5EfMJRiXsBBOjLVFZA7boXYxEBzSVgUiVVr1V9T0HFM7pULJ1qA==}
engines: {node: '>= 10'}
@ -7197,6 +7237,15 @@ packages:
requiresBuild: true
optional: true
/@next/swc-linux-x64-gnu@13.4.7:
resolution: {integrity: sha512-zaEC+iEiAHNdhl6fuwl0H0shnTzQoAoJiDYBUze8QTntE/GNPfTYpYboxF5LRYIjBwETUatvE0T64W6SKDipvg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@next/swc-linux-x64-musl@13.3.0:
resolution: {integrity: sha512-2OwKlzaBgmuet9XYHc3KwsEilzb04F540rlRXkAcjMHL7eCxB7uZIGtsVvKOnQLvC/elrUegwSw1+5f7WmfyOw==}
engines: {node: '>= 10'}
@ -7205,6 +7254,15 @@ packages:
requiresBuild: true
optional: true
/@next/swc-linux-x64-musl@13.4.7:
resolution: {integrity: sha512-X6r12F8d8SKAtYJqLZBBMIwEqcTRvUdVm+xIq+l6pJqlgT2tNsLLf2i5Cl88xSsIytBICGsCNNHd+siD2fbWBA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@next/swc-win32-arm64-msvc@13.3.0:
resolution: {integrity: sha512-OeHiA6YEvndxT46g+rzFK/MQTfftKxJmzslERMu9LDdC6Kez0bdrgEYed5eXFK2Z1viKZJCGRlhd06rBusyztA==}
engines: {node: '>= 10'}
@ -7213,6 +7271,15 @@ packages:
requiresBuild: true
optional: true
/@next/swc-win32-arm64-msvc@13.4.7:
resolution: {integrity: sha512-NPnmnV+vEIxnu6SUvjnuaWRglZzw4ox5n/MQTxeUhb5iwVWFedolPFebMNwgrWu4AELwvTdGtWjqof53AiWHcw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@next/swc-win32-ia32-msvc@13.3.0:
resolution: {integrity: sha512-4aB7K9mcVK1lYEzpOpqWrXHEZympU3oK65fnNcY1Qc4HLJFLJj8AViuqQd4jjjPNuV4sl8jAwTz3gN5VNGWB7w==}
engines: {node: '>= 10'}
@ -7221,6 +7288,15 @@ packages:
requiresBuild: true
optional: true
/@next/swc-win32-ia32-msvc@13.4.7:
resolution: {integrity: sha512-6Hxijm6/a8XqLQpOOf/XuwWRhcuc/g4rBB2oxjgCMuV9Xlr2bLs5+lXyh8w9YbAUMYR3iC9mgOlXbHa79elmXw==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@next/swc-win32-x64-msvc@13.3.0:
resolution: {integrity: sha512-Reer6rkLLcoOvB0dd66+Y7WrWVFH7sEEkF/4bJCIfsSKnTStTYaHtwIJAwbqnt9I392Tqvku0KkoqZOryWV9LQ==}
engines: {node: '>= 10'}
@ -7229,6 +7305,15 @@ packages:
requiresBuild: true
optional: true
/@next/swc-win32-x64-msvc@13.4.7:
resolution: {integrity: sha512-sW9Yt36Db1nXJL+mTr2Wo0y+VkPWeYhygvcHj1FF0srVtV+VoDjxleKtny21QHaG05zdeZnw2fCtf2+dEqgwqA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@nodelib/fs.scandir@2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@ -7263,13 +7348,13 @@ packages:
dependencies:
asn1js: 3.0.5
pvtsutils: 1.3.2
tslib: 2.6.0
tslib: 2.5.3
/@peculiar/json-schema@1.1.12:
resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==}
engines: {node: '>=8.0.0'}
dependencies:
tslib: 2.6.0
tslib: 2.5.3
/@peculiar/webcrypto@1.4.3:
resolution: {integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==}
@ -7278,7 +7363,7 @@ packages:
'@peculiar/asn1-schema': 2.3.6
'@peculiar/json-schema': 1.1.12
pvtsutils: 1.3.2
tslib: 2.6.0
tslib: 2.5.3
webcrypto-core: 1.7.7
/@pkgjs/parseargs@0.11.0:
@ -7293,7 +7378,7 @@ packages:
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
dependencies:
cross-spawn: 7.0.3
fast-glob: 3.2.12
fast-glob: 3.3.0
is-glob: 4.0.3
open: 9.1.0
picocolors: 1.0.0
@ -8120,28 +8205,6 @@ packages:
resolution: {integrity: sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==}
dev: true
/@saleor/app-sdk@0.40.1(next@13.3.0)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-iZuIxux8vdK08/ZcAluE5EnAH2t8ZhKaOkdRitr/dvxuEYGBxW+j8d3YiK20nQy3Eb7al6KlQRWbyHsnYQAULQ==}
peerDependencies:
next: '>=12'
react: '>=17'
react-dom: '>=17'
dependencies:
'@changesets/cli': 2.26.2
debug: 4.3.4
fast-glob: 3.2.12
graphql: 16.6.0
jose: 4.14.4
next: 13.3.0(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0)
raw-body: 2.5.2
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
retes: 0.33.0
uuid: 8.3.2
transitivePeerDependencies:
- supports-color
dev: true
/@saleor/app-sdk@0.41.0(next@13.3.0)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-9Yc73N8QvqfHlhsPzuWqwlbl+o/gq/VJ+HB2OUro68zTF+rapEssb79OUGLp2JmnTlM4xovCiPwPlDsW8nVSqw==}
peerDependencies:
@ -8151,7 +8214,7 @@ packages:
dependencies:
'@changesets/cli': 2.26.2
debug: 4.3.4
fast-glob: 3.2.12
fast-glob: 3.3.0
graphql: 16.6.0
jose: 4.14.4
next: 13.3.0(@babel/core@7.22.5)(react-dom@18.2.0)(react@18.2.0)
@ -8163,6 +8226,28 @@ packages:
transitivePeerDependencies:
- supports-color
/@saleor/app-sdk@0.41.0(next@13.4.7)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-9Yc73N8QvqfHlhsPzuWqwlbl+o/gq/VJ+HB2OUro68zTF+rapEssb79OUGLp2JmnTlM4xovCiPwPlDsW8nVSqw==}
peerDependencies:
next: '>=12'
react: '>=17'
react-dom: '>=17'
dependencies:
'@changesets/cli': 2.26.2
debug: 4.3.4
fast-glob: 3.3.0
graphql: 16.7.1
jose: 4.14.4
next: 13.4.7(react-dom@18.2.0)(react@18.2.0)
raw-body: 2.5.2
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
retes: 0.33.0
uuid: 8.3.2
transitivePeerDependencies:
- supports-color
dev: true
/@saleor/macaw-ui@0.7.3(@material-ui/core@4.12.4)(@material-ui/icons@4.11.3)(@material-ui/lab@4.0.0-alpha.61)(@types/react@18.2.5)(react-dom@18.2.0)(react-helmet@6.1.0)(react@18.2.0):
resolution: {integrity: sha512-9BPE5cMtBs5x2d9BKiMYroeczXLOQecUP2XPc25EmTFHLyx5L8rlnBv/KPB+YX/BbcwQTfDSRRlmOwR0lcfIFg==}
engines: {node: '>=16 <19'}
@ -9360,6 +9445,12 @@ packages:
dependencies:
tslib: 2.5.3
/@swc/helpers@0.5.1:
resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==}
dependencies:
tslib: 2.6.0
dev: true
/@szmarczak/http-timer@4.0.6:
resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
engines: {node: '>=10'}
@ -10473,7 +10564,7 @@ packages:
busboy: 1.6.0
fast-querystring: 1.1.2
fast-url-parser: 1.1.3
tslib: 2.6.0
tslib: 2.5.3
dev: true
/@xobotyi/scrollbar-width@1.9.5:
@ -10857,7 +10948,7 @@ packages:
dependencies:
pvtsutils: 1.3.2
pvutils: 1.1.3
tslib: 2.6.0
tslib: 2.5.3
/assert-plus@1.0.0:
resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
@ -11441,7 +11532,7 @@ packages:
resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
dependencies:
pascal-case: 3.1.2
tslib: 2.6.0
tslib: 2.5.3
dev: true
/camelcase-keys@6.2.2:
@ -11468,11 +11559,15 @@ packages:
/caniuse-lite@1.0.30001503:
resolution: {integrity: sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==}
/caniuse-lite@1.0.30001511:
resolution: {integrity: sha512-NaWPJawcoedlghN4P7bDNeADD7K+rZaY6V8ZcME7PkEZo/nfOg+lnrUgRWiKbNxcQ4/toFKSxnS4WdbyPZnKkw==}
dev: true
/capital-case@1.0.4:
resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==}
dependencies:
no-case: 3.0.4
tslib: 2.6.0
tslib: 2.5.3
upper-case-first: 2.0.2
dev: true
@ -11572,7 +11667,7 @@ packages:
path-case: 3.0.4
sentence-case: 3.0.4
snake-case: 3.0.4
tslib: 2.6.0
tslib: 2.5.3
dev: true
/character-entities@2.0.2:
@ -11941,7 +12036,7 @@ packages:
resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==}
dependencies:
no-case: 3.0.4
tslib: 2.6.0
tslib: 2.5.3
upper-case: 2.0.2
dev: true
@ -12558,7 +12653,7 @@ packages:
resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
dependencies:
no-case: 3.0.4
tslib: 2.6.0
tslib: 2.5.3
dev: true
/dot-object@2.1.4:
@ -13446,6 +13541,17 @@ packages:
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.5
dev: true
/fast-glob@3.3.0:
resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==}
engines: {node: '>=8.6.0'}
dependencies:
'@nodelib/fs.stat': 2.0.5
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.5
/fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
@ -14093,7 +14199,7 @@ packages:
dependencies:
array-union: 2.1.0
dir-glob: 3.0.1
fast-glob: 3.2.12
fast-glob: 3.3.0
ignore: 5.2.4
merge2: 1.4.1
slash: 3.0.0
@ -14103,7 +14209,7 @@ packages:
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
dir-glob: 3.0.1
fast-glob: 3.2.12
fast-glob: 3.3.0
ignore: 5.2.4
merge2: 1.4.1
slash: 4.0.0
@ -14161,7 +14267,7 @@ packages:
jiti: 1.17.1
minimatch: 4.2.3
string-env-interpolation: 1.0.1
tslib: 2.6.0
tslib: 2.5.3
transitivePeerDependencies:
- '@types/node'
- bufferutil
@ -14203,6 +14309,11 @@ packages:
resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
/graphql@16.7.1:
resolution: {integrity: sha512-DRYR9tf+UGU0KOsMcKAlXeFfX89UiiIZ0dRU3mR0yJfu6OjZqUcp68NnFLnqQU5RexygFoDy1EW+ccOYcPfmHg==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
dev: true
/gtin@1.0.2:
resolution: {integrity: sha512-jEsHMz16c3yz0rlM4TvUUU0022FTniIAcBfCDoch+38RJC32yGkdKFC9ixpBqPskYpCRrb614AjF8O0QQP0gPg==}
engines: {node: '>=10'}
@ -14316,7 +14427,7 @@ packages:
resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==}
dependencies:
capital-case: 1.0.4
tslib: 2.6.0
tslib: 2.5.3
dev: true
/help-me@4.2.0:
@ -14794,7 +14905,7 @@ packages:
/is-lower-case@2.0.2:
resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==}
dependencies:
tslib: 2.6.0
tslib: 2.5.3
dev: true
/is-map@2.0.2:
@ -14946,7 +15057,7 @@ packages:
/is-upper-case@2.0.2:
resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==}
dependencies:
tslib: 2.6.0
tslib: 2.5.3
dev: true
/is-utf8@0.2.1:
@ -15825,7 +15936,7 @@ packages:
/lower-case-first@2.0.2:
resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==}
dependencies:
tslib: 2.6.0
tslib: 2.5.3
dev: true
/lower-case@1.1.4:
@ -15835,7 +15946,7 @@ packages:
/lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
dependencies:
tslib: 2.6.0
tslib: 2.5.3
dev: true
/lowercase-keys@2.0.0:
@ -16900,6 +17011,49 @@ packages:
- '@babel/core'
- babel-plugin-macros
/next@13.4.7(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-M8z3k9VmG51SRT6v5uDKdJXcAqLzP3C+vaKfLIAM0Mhx1um1G7MDnO63+m52qPdZfrTFzMZNzfsgvm3ghuVHIQ==}
engines: {node: '>=16.8.0'}
hasBin: true
peerDependencies:
'@opentelemetry/api': ^1.1.0
fibers: '>= 3.1.0'
react: ^18.2.0
react-dom: ^18.2.0
sass: ^1.3.0
peerDependenciesMeta:
'@opentelemetry/api':
optional: true
fibers:
optional: true
sass:
optional: true
dependencies:
'@next/env': 13.4.7
'@swc/helpers': 0.5.1
busboy: 1.6.0
caniuse-lite: 1.0.30001511
postcss: 8.4.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
styled-jsx: 5.1.1(@babel/core@7.22.5)(react@18.2.0)
watchpack: 2.4.0
zod: 3.21.4
optionalDependencies:
'@next/swc-darwin-arm64': 13.4.7
'@next/swc-darwin-x64': 13.4.7
'@next/swc-linux-arm64-gnu': 13.4.7
'@next/swc-linux-arm64-musl': 13.4.7
'@next/swc-linux-x64-gnu': 13.4.7
'@next/swc-linux-x64-musl': 13.4.7
'@next/swc-win32-arm64-msvc': 13.4.7
'@next/swc-win32-ia32-msvc': 13.4.7
'@next/swc-win32-x64-msvc': 13.4.7
transitivePeerDependencies:
- '@babel/core'
- babel-plugin-macros
dev: true
/no-case@2.3.2:
resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
dependencies:
@ -16910,7 +17064,7 @@ packages:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
dependencies:
lower-case: 2.0.2
tslib: 2.6.0
tslib: 2.5.3
dev: true
/node-addon-api@3.2.1:
@ -17386,7 +17540,7 @@ packages:
resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
dependencies:
dot-case: 3.0.4
tslib: 2.6.0
tslib: 2.5.3
dev: true
/parent-module@1.0.1:
@ -17444,14 +17598,14 @@ packages:
resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
dependencies:
no-case: 3.0.4
tslib: 2.6.0
tslib: 2.5.3
dev: true
/path-case@3.0.4:
resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==}
dependencies:
dot-case: 3.0.4
tslib: 2.6.0
tslib: 2.5.3
dev: true
/path-exists@3.0.0:
@ -17868,7 +18022,7 @@ packages:
/pvtsutils@1.3.2:
resolution: {integrity: sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==}
dependencies:
tslib: 2.6.0
tslib: 2.5.3
/pvutils@1.1.3:
resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==}
@ -18777,7 +18931,7 @@ packages:
resolution: {integrity: sha512-I6V1G2JkJ2JFIFSVuultNXepf7BW8SCaSUOq5IETM2fDjFim5Dg5F1zU/QbplNW0mqkk8QCw+I722v3nPkpRlA==}
dependencies:
busboy: 1.6.0
zod: 3.20.2
zod: 3.21.4
/reusify@1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
@ -18987,7 +19141,7 @@ packages:
resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==}
dependencies:
no-case: 3.0.4
tslib: 2.6.0
tslib: 2.5.3
upper-case-first: 2.0.2
dev: true
@ -19194,7 +19348,7 @@ packages:
resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
dependencies:
dot-case: 3.0.4
tslib: 2.6.0
tslib: 2.5.3
dev: true
/sonic-boom@3.3.0:
@ -19274,7 +19428,7 @@ packages:
/sponge-case@1.0.1:
resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==}
dependencies:
tslib: 2.6.0
tslib: 2.5.3
dev: true
/sprintf-js@1.0.3:
@ -19591,7 +19745,7 @@ packages:
/swap-case@2.0.2:
resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==}
dependencies:
tslib: 2.6.0
tslib: 2.5.3
dev: true
/symbol-tree@3.2.4:
@ -19823,7 +19977,7 @@ packages:
/title-case@3.0.3:
resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==}
dependencies:
tslib: 2.6.0
tslib: 2.5.3
dev: true
/titleize@3.0.0:
@ -20361,7 +20515,7 @@ packages:
/upper-case-first@2.0.2:
resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==}
dependencies:
tslib: 2.6.0
tslib: 2.5.3
dev: true
/upper-case@1.1.3:
@ -20371,7 +20525,7 @@ packages:
/upper-case@2.0.2:
resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==}
dependencies:
tslib: 2.6.0
tslib: 2.5.3
dev: true
/uri-js@4.4.1:
@ -20867,7 +21021,7 @@ packages:
'@peculiar/json-schema': 1.1.12
asn1js: 3.0.5
pvtsutils: 1.3.2
tslib: 2.6.0
tslib: 2.5.3
/webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@ -21264,7 +21418,7 @@ packages:
/zod@3.20.2:
resolution: {integrity: sha512-1MzNQdAvO+54H+EaK5YpyEy0T+Ejo/7YLHS93G3RnYWh5gaotGHwGeN/ZO687qEDU2y4CdStQYXVHIgrUl5UVQ==}
dev: true
/zod@3.21.4:
resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
dev: false