diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2b7bdb34..df5678b2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## [Unreleased]
+### Added
+
+- Wrap the store around AdsProvider component to allow requesting ads across the store.
+
## [2.144.0] - 2025-10-22 [YANKED]
### Changed
diff --git a/manifest.json b/manifest.json
index f1731b28..8f21b7fc 100644
--- a/manifest.json
+++ b/manifest.json
@@ -90,7 +90,10 @@
"type": "string"
}
},
- "required": ["rel", "href"]
+ "required": [
+ "rel",
+ "href"
+ ]
},
"description": "admin/store.faviconLinks.description"
},
@@ -224,11 +227,11 @@
"type": "boolean",
"default": false
},
- "fetchSponsoredProductsOnSearch": {
- "title": "admin/store.advancedSettings.fetchSponsoredProductsOnSearch.title",
- "description": "admin/store.advancedSettings.fetchSponsoredProductsOnSearch.description",
- "type": "boolean",
- "default": false
+ "publisherId": {
+ "title": "admin/store.advancedSettings.publisherId.title",
+ "description": "admin/store.advancedSettings.publisherId.description",
+ "type": "string",
+ "default": ""
},
"a11ySemanticHtmlMigration": {
"title": "admin/store.advancedSettings.a11ySemanticHtmlMigration.title",
@@ -258,7 +261,10 @@
"description": "admin/store.advancedSettings.customHeader.value.description"
}
},
- "required": ["key", "value"]
+ "required": [
+ "key",
+ "value"
+ ]
}
},
"useDefaultBrowserNavigation": {
@@ -276,14 +282,18 @@
{
"properties": {
"requiresAuthorization": {
- "enum": [false]
+ "enum": [
+ false
+ ]
}
}
},
{
"properties": {
"requiresAuthorization": {
- "enum": [true]
+ "enum": [
+ true
+ ]
},
"b2bEnabled": {
"title": "admin/store.b2benabled.title",
@@ -304,7 +314,12 @@
"b2bEnabled": {
"ui:disabled": "true"
},
- "ui:order": ["storeName", "requiresAuthorization", "b2bEnabled", "*"]
+ "ui:order": [
+ "storeName",
+ "requiresAuthorization",
+ "b2bEnabled",
+ "*"
+ ]
},
"$schema": "https://raw.githubusercontent.com/vtex/node-vtex-api/master/gen/manifest.schema"
}
diff --git a/react/SearchContext.jsx b/react/SearchContext.jsx
index f0ff66b1..a5d05cc2 100644
--- a/react/SearchContext.jsx
+++ b/react/SearchContext.jsx
@@ -6,41 +6,44 @@ import { useRuntime } from 'vtex.render-runtime'
import SearchQuery from 'vtex.search-result/SearchQuery'
import { initializeMap, SORT_OPTIONS } from './modules/search'
+import { VTEXAdsProvider } from './components/VTEXAdsProvider'
const DEFAULT_MAX_ITEMS_PER_PAGE = 10
const trimStartingSlash = value => value && value.replace(/^\//, '')
-const SearchContext = ({
- nextTreePath,
- params,
- maxItemsPerPage = DEFAULT_MAX_ITEMS_PER_PAGE,
- queryField,
- mapField,
- orderByField,
- hideUnavailableItems,
- facetsBehavior = 'Static',
- __unstableCategoryTreeBehavior = 'default',
- skusFilter,
- simulationBehavior,
- installmentCriteria,
- excludedPaymentSystems,
- includedPaymentSystems,
- sponsoredProductsBehavior = 'sync',
- query: {
- order: orderBy = orderByField || SORT_OPTIONS[0].value,
- page: pageQuery,
- map: mapQuery,
- priceRange,
- // backwards-compatibility
- rest,
- fuzzy,
- operator,
- searchState,
- },
- children,
- __unstableProductOriginVtex,
-}) => {
+const SearchContext = props => {
+ const {
+ nextTreePath,
+ params,
+ maxItemsPerPage = DEFAULT_MAX_ITEMS_PER_PAGE,
+ queryField,
+ mapField,
+ orderByField,
+ hideUnavailableItems,
+ facetsBehavior = 'Static',
+ __unstableCategoryTreeBehavior = 'default',
+ skusFilter,
+ simulationBehavior,
+ installmentCriteria,
+ excludedPaymentSystems,
+ includedPaymentSystems,
+ sponsoredProductsBehavior = 'sync',
+ query: {
+ order: orderBy = orderByField || SORT_OPTIONS[0].value,
+ page: pageQuery,
+ map: mapQuery,
+ priceRange,
+ // backwards-compatibility
+ rest,
+ fuzzy,
+ operator,
+ searchState,
+ },
+ children,
+ __unstableProductOriginVtex,
+ } = props
+
const {
page: runtimePage,
query: runtimeQuery,
@@ -102,62 +105,67 @@ const SearchContext = ({
searchState
return (
-
- {(searchQuery, extraParams) => {
- return React.cloneElement(children, {
- searchQuery: {
- ...searchQuery,
- // backwards-compatibility
- data: {
- ...(searchQuery.data || {}),
+
+
+ {(searchQuery, extraParams) => {
+ return React.cloneElement(children, {
+ searchQuery: {
+ ...searchQuery,
+ // backwards-compatibility
+ data: {
+ ...(searchQuery.data || {}),
+ products: path(
+ ['data', 'productSearch', 'products'],
+ searchQuery
+ ),
+ },
+ facets: path(['data', 'facets'], searchQuery),
products: path(
['data', 'productSearch', 'products'],
searchQuery
),
+ recordsFiltered: path(
+ ['data', 'productSearch', 'recordsFiltered'],
+ searchQuery
+ ),
},
- facets: path(['data', 'facets'], searchQuery),
- products: path(['data', 'productSearch', 'products'], searchQuery),
- recordsFiltered: path(
- ['data', 'productSearch', 'recordsFiltered'],
- searchQuery
- ),
- },
- searchContext: runtimePage,
- pagesPath: nextTreePath,
- map,
- orderBy,
- priceRange,
- page: extraParams.page,
- from: extraParams.from,
- to: extraParams.to,
- facetsLoading: extraParams.facetsLoading,
- maxItemsPerPage,
- // backwards-compatibility
- rest,
- lazyItemsRemaining: extraParams.lazyItemsRemaining,
- })
- }}
-
+ searchContext: runtimePage,
+ pagesPath: nextTreePath,
+ map,
+ orderBy,
+ priceRange,
+ page: extraParams.page,
+ from: extraParams.from,
+ to: extraParams.to,
+ facetsLoading: extraParams.facetsLoading,
+ maxItemsPerPage,
+ // backwards-compatibility
+ rest,
+ lazyItemsRemaining: extraParams.lazyItemsRemaining,
+ })
+ }}
+
+
)
}
diff --git a/react/StoreWrapper.js b/react/StoreWrapper.js
index 161f01d6..90fafe2d 100644
--- a/react/StoreWrapper.js
+++ b/react/StoreWrapper.js
@@ -23,6 +23,7 @@ import NetworkStatusToast from './components/NetworkStatusToast'
import WrapperContainer from './components/WrapperContainer'
import { normalizeNavigation } from './utils/navigation'
import { useCanonicalLink } from './hooks/useCanonicalLink'
+import { VTEXAdsProvider } from './components/VTEXAdsProvider'
const APP_LOCATOR = 'vtex.store'
const CONTENT_TYPE = 'text/html; charset=utf-8'
@@ -128,9 +129,11 @@ const StoreWrapper = ({ children, CustomContext }) => {
-
- {children}
-
+
+
+ {children}
+
+
diff --git a/react/components/UserDataPixel.tsx b/react/components/UserDataPixel.tsx
index 35a0de7a..9eabd11c 100644
--- a/react/components/UserDataPixel.tsx
+++ b/react/components/UserDataPixel.tsx
@@ -1,71 +1,11 @@
import { useEffect, FC } from 'react'
import { usePixel } from 'vtex.pixel-manager/PixelContext'
-const fields = [
- 'firstName',
- 'lastName',
- 'document',
- 'id',
- 'email',
- 'phone',
- 'isAuthenticated',
-] as const
-
-interface SessionResponse {
- response: {
- namespaces: {
- profile?: {
- firstName?: {
- value: string
- }
- lastName?: {
- value: string
- }
- document?: {
- value: string
- }
- id?: {
- value: string
- }
- email?: {
- value: string
- }
- phone?: {
- value: string
- }
- isAuthenticated?: {
- value: string
- }
- }
- }
- }
-}
-
-const getSessionPromiseFromWindow: any = () =>
- !(window as any).__RENDER_8_SESSION__ ||
- !(window as any).__RENDER_8_SESSION__.sessionPromise
- ? Promise.resolve(null)
- : (window as any).__RENDER_8_SESSION__.sessionPromise
-
-const toBoolean = (value: string) => value.toLowerCase() === 'true'
-
-function getUserData(
- profileFields: SessionResponse['response']['namespaces']['profile']
-) {
- if (!profileFields) {
- return {}
- }
-
- return fields.reduce>((acc, key) => {
- const value = profileFields[key]?.value
-
- if (value) {
- acc[key] = key === 'isAuthenticated' ? toBoolean(value) : value
- }
-
- return acc
- }, {})
-}
+import {
+ getSessionPromiseFromWindow,
+ getUserData,
+ SessionResponse,
+} from '../hooks/getUserData'
const UserDataPixel: FC = () => {
const { push } = usePixel()
diff --git a/react/components/VTEXAdsProvider.tsx b/react/components/VTEXAdsProvider.tsx
new file mode 100644
index 00000000..5ce8b69e
--- /dev/null
+++ b/react/components/VTEXAdsProvider.tsx
@@ -0,0 +1,113 @@
+import React, { useEffect, useState } from 'react'
+import { AdsProvider } from '@vtex/ads-react'
+import { Offer } from '@vtex/ads-core'
+import productSearchV3 from 'vtex.store-resources/QueryProductSearchV3'
+import { useApolloClient } from 'react-apollo'
+import { useRuntime } from 'vtex.render-runtime'
+
+import {
+ getSessionPromiseFromWindow,
+ getUserData,
+ SessionResponse,
+} from '../hooks/getUserData'
+
+interface VTEXAdsProviderProps {
+ children?: React.ReactNode
+}
+
+interface Product {
+ items: Array<{
+ ean: string
+ itemId: string
+ sellers: Array<{ sellerId: string }>
+ }>
+}
+
+const matcher = (product: Product, offer: Offer): boolean => {
+ const productSku = product.items.find(
+ item =>
+ item.itemId === offer.skuId &&
+ item.sellers.some(seller => seller.sellerId === offer.sellerId)
+ )
+
+ if (productSku === undefined) {
+ return false
+ }
+
+ const seller = productSku.sellers.find(
+ item => item.sellerId === offer.sellerId
+ )
+
+ if (!seller) {
+ return false
+ }
+
+ productSku.sellers = [seller]
+ product.items = [productSku]
+
+ return true
+}
+
+export const VTEXAdsProvider = ({ children }: VTEXAdsProviderProps) => {
+ const { account, getSettings } = useRuntime()
+ const publisherId = getSettings('vtex.store')?.publisherId
+
+ const [userId, setUserId] = useState(undefined)
+ const [sessionId, setSessionId] = useState('session-id')
+
+ useEffect(() => {
+ getSessionPromiseFromWindow()
+ .then((data: SessionResponse) => {
+ const profileFields = data?.response?.namespaces?.profile
+
+ if (!profileFields) {
+ return
+ }
+
+ setSessionId(data.response?.id ?? 'session-id')
+
+ const userData = getUserData(profileFields)
+ setUserId(userData.id as string | undefined)
+ })
+ .catch(() => {})
+ }, [])
+
+ const client = useApolloClient()
+ const fetcher = async (offers: Offer[]): Promise => {
+ if (offers.length === 0) {
+ return []
+ }
+
+ try {
+ const skuIds = offers.map(o => o.skuId).join(';')
+ const { data } = await client.query<{
+ productSearch: { products: Product[] }
+ }>({
+ query: productSearchV3,
+ variables: { fullText: `sku.id:${skuIds}` },
+ })
+ return data?.productSearch.products ?? []
+ } catch {
+ return []
+ }
+ }
+
+ if (!publisherId) {
+ return children
+ }
+
+ return (
+
+ {children}
+
+ )
+}
diff --git a/react/hooks/getUserData.tsx b/react/hooks/getUserData.tsx
new file mode 100644
index 00000000..c0e4b21f
--- /dev/null
+++ b/react/hooks/getUserData.tsx
@@ -0,0 +1,66 @@
+const fields = [
+ 'firstName',
+ 'lastName',
+ 'document',
+ 'id',
+ 'email',
+ 'phone',
+ 'isAuthenticated',
+] as const
+
+export interface SessionResponse {
+ response: {
+ id: string
+ namespaces: {
+ profile?: {
+ firstName?: {
+ value: string
+ }
+ lastName?: {
+ value: string
+ }
+ document?: {
+ value: string
+ }
+ id?: {
+ value: string
+ }
+ email?: {
+ value: string
+ }
+ phone?: {
+ value: string
+ }
+ isAuthenticated?: {
+ value: string
+ }
+ }
+ }
+ }
+}
+
+export const getSessionPromiseFromWindow: any = () =>
+ !(window as any).__RENDER_8_SESSION__ ||
+ !(window as any).__RENDER_8_SESSION__.sessionPromise
+ ? Promise.resolve(null)
+ : (window as any).__RENDER_8_SESSION__.sessionPromise
+
+const toBoolean = (value: string) => value.toLowerCase() === 'true'
+
+export function getUserData(
+ profileFields: SessionResponse['response']['namespaces']['profile']
+) {
+ if (!profileFields) {
+ return {}
+ }
+
+ return fields.reduce>((acc, key) => {
+ const value = profileFields[key]?.value
+
+ if (value) {
+ acc[key] = key === 'isAuthenticated' ? toBoolean(value) : value
+ }
+
+ return acc
+ }, {})
+}
diff --git a/react/package.json b/react/package.json
index 09c1a601..7baf9b8d 100644
--- a/react/package.json
+++ b/react/package.json
@@ -5,6 +5,7 @@
"lint": "eslint --ext js,jsx,ts,tsx ."
},
"dependencies": {
+ "@vtex/ads-react": "0.3.1",
"hoist-non-react-statics": "^3.0.1",
"prop-types": "^15.5.10",
"query-string": "^7.0.1",
diff --git a/react/typings/global.d.ts b/react/typings/global.d.ts
index 01084cc3..b1bfe935 100644
--- a/react/typings/global.d.ts
+++ b/react/typings/global.d.ts
@@ -2,3 +2,8 @@ interface Window extends Window {
dataLayer: any[]
__hostname__: string | undefined
}
+
+declare module 'vtex.store-resources/QueryProductSearchV3' {
+ const query: any
+ export default query
+}
diff --git a/react/typings/vtex.render-runtime.d.ts b/react/typings/vtex.render-runtime.d.ts
index 6d47ccee..c4ffb15b 100644
--- a/react/typings/vtex.render-runtime.d.ts
+++ b/react/typings/vtex.render-runtime.d.ts
@@ -36,6 +36,7 @@ declare module 'vtex.render-runtime' {
canonicalWithoutUrlParams: boolean
removeStoreNameTitle: boolean
a11ySemanticHtmlMigration: boolean
+ publisherId: string
}
interface KeyValue {
diff --git a/react/yarn.lock b/react/yarn.lock
index ed73b338..2bd0d6f9 100644
--- a/react/yarn.lock
+++ b/react/yarn.lock
@@ -1575,6 +1575,87 @@
dependencies:
"@sinonjs/commons" "^1.7.0"
+"@swc/core-darwin-arm64@1.13.3":
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.3.tgz#aaab6af81f255bdc9d3bf1d8d38457236cab1a02"
+ integrity sha512-ux0Ws4pSpBTqbDS9GlVP354MekB1DwYlbxXU3VhnDr4GBcCOimpocx62x7cFJkSpEBF8bmX8+/TTCGKh4PbyXw==
+
+"@swc/core-darwin-x64@1.13.3":
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.13.3.tgz#2f65063a9ffb169eec810d2d063d93d21b8ec593"
+ integrity sha512-p0X6yhxmNUOMZrbeZ3ZNsPige8lSlSe1llllXvpCLkKKxN/k5vZt1sULoq6Nj4eQ7KeHQVm81/+AwKZyf/e0TA==
+
+"@swc/core-linux-arm-gnueabihf@1.13.3":
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.3.tgz#1e4823f031f8ed8d77b0ea8ed70130cda2da6f1e"
+ integrity sha512-OmDoiexL2fVWvQTCtoh0xHMyEkZweQAlh4dRyvl8ugqIPEVARSYtaj55TBMUJIP44mSUOJ5tytjzhn2KFxFcBA==
+
+"@swc/core-linux-arm64-gnu@1.13.3":
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.3.tgz#1a82f884e9a73c5fb80a94ec67ee98e255f93cdd"
+ integrity sha512-STfKku3QfnuUj6k3g9ld4vwhtgCGYIFQmsGPPgT9MK/dI3Lwnpe5Gs5t1inoUIoGNP8sIOLlBB4HV4MmBjQuhw==
+
+"@swc/core-linux-arm64-musl@1.13.3":
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.3.tgz#f556489bec2451b8a3f28239e115a9480421c008"
+ integrity sha512-bc+CXYlFc1t8pv9yZJGus372ldzOVscBl7encUBlU1m/Sig0+NDJLz6cXXRcFyl6ABNOApWeR4Yl7iUWx6C8og==
+
+"@swc/core-linux-x64-gnu@1.13.3":
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.3.tgz#29e78da291a6ac800e807771a40f6a41d18f0ead"
+ integrity sha512-dFXoa0TEhohrKcxn/54YKs1iwNeW6tUkHJgXW33H381SvjKFUV53WR231jh1sWVJETjA3vsAwxKwR23s7UCmUA==
+
+"@swc/core-linux-x64-musl@1.13.3":
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.3.tgz#5f2b0639f54f89468ad2e464ba6b45ce19adeca2"
+ integrity sha512-ieyjisLB+ldexiE/yD8uomaZuZIbTc8tjquYln9Quh5ykOBY7LpJJYBWvWtm1g3pHv6AXlBI8Jay7Fffb6aLfA==
+
+"@swc/core-win32-arm64-msvc@1.13.3":
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.3.tgz#911185c11158b29a8884aea7036115a814a3725a"
+ integrity sha512-elTQpnaX5vESSbhCEgcwXjpMsnUbqqHfEpB7ewpkAsLzKEXZaK67ihSRYAuAx6ewRQTo7DS5iTT6X5aQD3MzMw==
+
+"@swc/core-win32-ia32-msvc@1.13.3":
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.3.tgz#279044bfdba0853f1afd138f582952461544e8e8"
+ integrity sha512-nvehQVEOdI1BleJpuUgPLrclJ0TzbEMc+MarXDmmiRFwEUGqj+pnfkTSb7RZyS1puU74IXdK/YhTirHurtbI9w==
+
+"@swc/core-win32-x64-msvc@1.13.3":
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.3.tgz#6069e132be45ac34ecb4d72730db53c60d6a5475"
+ integrity sha512-A+JSKGkRbPLVV2Kwx8TaDAV0yXIXm/gc8m98hSkVDGlPBBmydgzNdWy3X7HTUBM7IDk7YlWE7w2+RUGjdgpTmg==
+
+"@swc/core@^1.13.3":
+ version "1.13.3"
+ resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.13.3.tgz#7a8668d96a28b3431acc3b9652f2d3ff2b6e5531"
+ integrity sha512-ZaDETVWnm6FE0fc+c2UE8MHYVS3Fe91o5vkmGfgwGXFbxYvAjKSqxM/j4cRc9T7VZNSJjriXq58XkfCp3Y6f+w==
+ dependencies:
+ "@swc/counter" "^0.1.3"
+ "@swc/types" "^0.1.23"
+ optionalDependencies:
+ "@swc/core-darwin-arm64" "1.13.3"
+ "@swc/core-darwin-x64" "1.13.3"
+ "@swc/core-linux-arm-gnueabihf" "1.13.3"
+ "@swc/core-linux-arm64-gnu" "1.13.3"
+ "@swc/core-linux-arm64-musl" "1.13.3"
+ "@swc/core-linux-x64-gnu" "1.13.3"
+ "@swc/core-linux-x64-musl" "1.13.3"
+ "@swc/core-win32-arm64-msvc" "1.13.3"
+ "@swc/core-win32-ia32-msvc" "1.13.3"
+ "@swc/core-win32-x64-msvc" "1.13.3"
+
+"@swc/counter@^0.1.3":
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9"
+ integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==
+
+"@swc/types@^0.1.23":
+ version "0.1.24"
+ resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.24.tgz#00f4343e2c966eac178cde89e8d821a784f7586d"
+ integrity sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==
+ dependencies:
+ "@swc/counter" "^0.1.3"
+
"@testing-library/dom@^7.22.3":
version "7.31.2"
resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a"
@@ -1862,6 +1943,21 @@
resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d"
integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==
+"@vtex/ads-core@^0.3.1":
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/@vtex/ads-core/-/ads-core-0.3.1.tgz#abc6e10dd3fb18ab1744f7f1de44c6e5e8fb22e1"
+ integrity sha512-nQ2Ktf4BC/6A1QfEQU2zntuIKrshS6Z78Ir9C0/scIO4xei5OlLxpVD1sADeTmQacNk6Fht38ePM6Zq+K9kXPQ==
+ dependencies:
+ "@swc/core" "^1.13.3"
+ cross-fetch "^4.1.0"
+
+"@vtex/ads-react@0.3.1":
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/@vtex/ads-react/-/ads-react-0.3.1.tgz#7c74954e8d50c54dea70783bbb52f2358519e308"
+ integrity sha512-/ZQr++FUu0S2WCwIc4uRsCmZGl4S/LOUZHSk5fzh90G5fXnbK3EQ7lLv/Cm0g7h0l22kSGqxi8OlIzNFieYJvA==
+ dependencies:
+ "@vtex/ads-core" "^0.3.1"
+
"@vtex/test-tools@^3.4.3":
version "3.4.3"
resolved "https://registry.yarnpkg.com/@vtex/test-tools/-/test-tools-3.4.3.tgz#d0cc34c445410050b9b56f804236c7c07a242489"
@@ -2552,6 +2648,13 @@ core-js-pure@^3.20.2:
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.0.tgz#10eeb90dbf0d670a6b22b081aecc7deb2faec7e1"
integrity sha512-uzMmW8cRh7uYw4JQtzqvGWRyC2T5+4zipQLQdi2FmiRqP83k3d6F3stv2iAlNhOs6cXN401FCD5TL0vvleuHgA==
+cross-fetch@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.1.0.tgz#8f69355007ee182e47fa692ecbaa37a52e43c3d2"
+ integrity sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==
+ dependencies:
+ node-fetch "^2.7.0"
+
cross-spawn@^6.0.0:
version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
@@ -4254,6 +4357,13 @@ nice-try@^1.0.4:
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+node-fetch@^2.7.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
+ integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
+ dependencies:
+ whatwg-url "^5.0.0"
+
node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -5362,6 +5472,11 @@ tr46@^2.1.0:
dependencies:
punycode "^2.1.1"
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
trim-right@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
@@ -5664,6 +5779,11 @@ walker@^1.0.7, walker@~1.0.5:
dependencies:
makeerror "1.0.x"
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
webidl-conversions@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
@@ -5686,6 +5806,14 @@ whatwg-mimetype@^2.3.0:
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+whatwg-url@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
whatwg-url@^8.0.0, whatwg-url@^8.5.0:
version "8.7.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77"
diff --git a/store/contentSchemas.json b/store/contentSchemas.json
index fcce1045..37b56883 100644
--- a/store/contentSchemas.json
+++ b/store/contentSchemas.json
@@ -82,6 +82,12 @@
"type": "boolean",
"default": false,
"description": "Enables semantic HTML improvements for accessibility that may introduce breaking changes. Components will use proper HTML elements like