A personal community project under @kyletaylored, MIT licensed.Not provided or supported by Datadog.
Sandbox
This runs the real adapters, from the same published builds you would install, against the same recorded payloads the test suite uses. It records the RUM calls each adapter makes instead of sending them, and shows you every one.
Nothing leaves your browser and no Datadog account is involved. The sandbox never initializes RUM and never asks for an application ID or client token. Recording the calls rather than sending them is also the only way to show the parts that matter most — the consent gate holding events back, a second order being refused, card data being stripped — because in all three cases the correct behaviour is that nothing is sent at all.
Steps
Fire them one at a time, or run them all. Each is a payload recorded from the real platform.
RUM calls
What the adapter asked the SDK to do, in order. An entry in red is something the core refused to send, with the reason.
Fire a step to see the calls.
Things worth trying
The refusals
These are the behaviours a live demo cannot show, because in each case the correct outcome is that nothing is sent. The adapters run with debug: true, so each refusal appears in the log with the core's own reason — the same output you get by followingthe verify step on a real site.
- Fire the order step twice (WooCommerce "order received", or Shopify's two
checkout_completedsteps — the second is a refreshed thank-you page). The second is refused:commerce.purchasefires once pertransaction_id, which is what stops a reload double-counting revenue. Reset clears it. - WooCommerce with
consent: 'ignore'off. Run every step: nothing is sent, not evensetUser, andtrackingConsentis set tonot-grantedbefore the SDK would start. Events during a pending decision are dropped rather than queued, so granting afterwards does not backfill them. - Shopify with the Customer Privacy API set to
false. Same result, through the platform's own consent signal. Set it to not present and events flow — that is the pixel sandbox, where the Pixel Manager has already applied the merchant's categories before the pixel runs. Those three branches are the whole of Shopify's consent behaviour. - Narrow the action prefix, then watch a non-commerce action. Renaming commerce to
shop.moves commerce actions only;account.*andlead.*keep their own prefix, so renaming commerce cannot silently rename a login.
What gets stripped
- Shopify's payment step and WooCommerce's order both carry a
card_numberin the recorded payload — WooCommerce's also carries abilling_address. Neither reaches the output. The fixtures carry them precisely so the stripping is exercised rather than assumed. - Shopify's search step sends
search_term_length: 14. The query was "red tee medium"; the text never leaves the browser. - Turn
includeEmailon. It appears onsetUserand nowhere else — never on an action. TurnidentifyUsersoff andsetUserstops entirely.
Consent, end to end
- Pick OneTrust and walk the steps in order. An unanswered banner reports nothing; reject-all reports
not-granted; accepting performance grants; accepting everything is already granted, so it is not reported again; withdrawing denies. - Change the required category to
C0004and walk them again. Now only the accept-everything step grants.
Where the payloads come from
- Shopify Web Pixels standard events, recorded from a development store's custom pixel sandbox. Payloads trimmed to the fields the adapter reads; a card_number field is added to the payment step on purpose, to prove the core strips it.
- Shopify collection_viewed, recorded from a development store. The variant list is trimmed to three entries.
- WooCommerce Cart and Checkout block DOM events, recorded from a Woo 9.x store. Money arrives as integer minor units with currency_minor_unit, which is Woo's Store API convention.
- The payload the companion WordPress plugin prints on the order-received page as window.ddRumWooCommerce. A billing_address and card_number are included on purpose, to prove the core's filter strips them.
- OneTrust consent states, as the banner script reports them. OnetrustActiveGroups is the comma-delimited string with leading and trailing commas that OneTrust sets on the window; the harness assigns it and then fires the signal OneTrust would.
Live demos against a real Datadog organization live in the RUM playground site, linked from each plugin's page once the packages are published. This sandbox exists for the part a live demo cannot show: what an adapter refuses to send.