├── .cache └── .gitkeep ├── .changeset ├── five-peas-lay.md ├── brave-numbers-joke.md ├── cold-hounds-teach.md ├── eleven-toys-vanish.md ├── empty-bikes-cheer.md ├── fair-dragons-greet.md ├── few-rockets-travel.md ├── fresh-cars-impress.md ├── hip-worms-relax.md ├── khaki-dots-bathe.md ├── rich-crews-protect.md ├── serious-eggs-greet.md ├── twenty-goats-kneel.md ├── calm-bulldogs-speak.md ├── cuddly-readers-warn.md ├── curvy-balloons-brake.md ├── few-turkeys-reflect.md ├── format-head-prettier.md ├── forty-elephants-attack.md ├── friendly-numbers-leave.md ├── light-fireants-exercise.md ├── mighty-frogs-sparkle.md ├── silver-windows-float.md ├── twenty-planets-repeat.md ├── rich-dots-lay.md ├── lazy-squids-draw.md ├── nice-pugs-reply.md ├── sixty-impalas-laugh.md ├── three-baboons-bow.md ├── lovely-pears-cross.md ├── silent-plants-perform.md ├── thirty-baboons-punch.md ├── tiny-buckets-love.md ├── tiny-candles-whisper.md ├── gold-apples-joke.md ├── gold-terms-look.md ├── tricky-panthers-guess.md ├── violet-melons-itch.md ├── lemon-lamps-switch.md ├── loud-seals-raise.md ├── pretty-plums-rescue.md ├── purple-carrots-film.md ├── spotty-bees-destroy.md ├── witty-kids-talk.md ├── breezy-mice-breathe.md ├── chatty-cherries-train.md ├── mean-tips-impress.md ├── old-dryers-hide.md ├── wise-spiders-jog.md ├── breezy-cats-heal.md ├── calm-oranges-sin.md ├── eight-terms-hunt.md ├── fast-pets-exist.md ├── swift-peas-film.md ├── tidy-yaks-joke.md ├── event-single-wrap.md ├── fluffy-planes-retire.md ├── lazy-toes-confess.md ├── tidy-swans-repair.md ├── kind-kids-design.md ├── little-moons-camp.md ├── lovely-students-boil.md ├── moody-dots-refuse.md ├── smooth-papayas-boil.md ├── attribute-text-reductions.md ├── date-now-guard.md ├── mighty-bulldogs-begin.md ├── nervous-buses-pump.md ├── smooth-poems-bake.md ├── fresh-spoons-drive.md ├── new-snakes-call.md ├── swift-dancers-rest.md ├── curvy-apples-lay.md ├── modern-doors-watch.md ├── real-masks-explode.md ├── fair-ducks-clean.md ├── nervous-tables-travel.md ├── real-trains-switch.md ├── violet-zebras-cry.md ├── nervous-mirrors-perform.md ├── fast-chefs-smell.md ├── little-radios-thank.md ├── shadow-dom-unbusify.md ├── itchy-dryers-double.md ├── small-olives-arrive.md ├── no-neg-lookbehind.md ├── clean-shrimps-lay.md ├── rich-jars-remember.md ├── cold-eyes-hunt.md ├── pretty-schools-remember.md ├── large-ants-prove.md ├── nervous-kiwis-nail.md ├── polite-olives-wave.md ├── proud-clocks-hope.md ├── eleven-bobcats-peel.md ├── controller-finish-flag.md ├── proud-experts-jam.md ├── twenty-tables-call.md ├── young-timers-grow.md ├── inlineImage-maybeNot-crossOrigin.md ├── hungry-dodos-taste.md ├── smart-ears-refuse.md ├── tiny-chairs-build.md ├── nervous-poets-grin.md ├── clean-plants-play.md ├── little-suits-leave.md ├── serious-ants-juggle.md ├── eighty-teachers-smash.md ├── yellow-mails-cheat.md ├── grumpy-ways-own.md ├── README.md └── config.json ├── .prettierrc ├── packages ├── rrweb-snapshot │ ├── test │ │ ├── js │ │ │ └── a.js │ │ ├── html │ │ │ ├── iframe-inner.html │ │ │ ├── invalid-attribute.html │ │ │ ├── picture-in-frame.html │ │ │ ├── picture-blob-in-frame.html │ │ │ ├── invalid-doctype.html │ │ │ ├── picture-with-inline-onload.html │ │ │ ├── basic.html │ │ │ ├── iframe.html │ │ │ ├── picture.html │ │ │ ├── with-style-sheet.html │ │ │ ├── invalid-tagname.html │ │ │ ├── with-script.html │ │ │ ├── with-style-sheet-with-import.html │ │ │ ├── compat-mode.html │ │ │ ├── mask-text.html │ │ │ ├── cors-style-sheet.html │ │ │ ├── preload.html │ │ │ ├── picture-blob.html │ │ │ ├── dynamic-stylesheet.html │ │ │ ├── hover.html │ │ │ ├── video.html │ │ │ ├── with-relative-res.html │ │ │ ├── block-element.html │ │ │ ├── background-clip-text.html │ │ │ ├── form-fields-sensitive.html │ │ │ ├── form-fields-sensitive-update.html │ │ │ ├── about-mozilla.html │ │ │ └── form-fields.html │ │ ├── images │ │ │ ├── robot.png │ │ │ ├── compat-bottom.png │ │ │ ├── compat-top-left.png │ │ │ ├── compat-top-right.png │ │ │ ├── rrweb-favicon-20x20.png │ │ │ └── symbol-defs.svg │ │ ├── css │ │ │ ├── style-with-import.css │ │ │ └── style.css │ │ ├── iframe-html │ │ │ ├── frame2.html │ │ │ ├── main.html │ │ │ └── frame1.html │ │ └── utils.ts │ ├── jsr.json │ ├── .gitignore │ ├── vite.config.js │ ├── .release-it.json │ ├── tsconfig.json │ ├── vitest.config.ts │ └── src │ │ └── index.ts ├── rrdom │ ├── .gitignore │ ├── vite.config.js │ ├── vitest.config.ts │ ├── tsconfig.json │ ├── jest.config.js │ ├── test │ │ ├── html │ │ │ ├── shadow-dom.html │ │ │ ├── iframe.html │ │ │ └── main.html │ │ └── utils.ts │ ├── src │ │ ├── util.ts │ │ └── style.ts │ └── package.json ├── types │ ├── .gitignore │ ├── vite.config.js │ └── tsconfig.json ├── rrdom-nodejs │ ├── .gitignore │ ├── .vscode │ │ ├── extensions.json │ │ └── launch.json │ ├── vite.config.js │ ├── vitest.config.ts │ ├── src │ │ └── index.ts │ └── tsconfig.json ├── rrweb │ ├── src │ │ ├── entries │ │ │ ├── replay.ts │ │ │ └── record.ts │ │ ├── record │ │ │ ├── workers │ │ │ │ └── tsconfig.json │ │ │ ├── error-handler.ts │ │ │ └── processed-node-manager.ts │ │ ├── replay │ │ │ └── styles │ │ │ │ └── inject-style.ts │ │ └── index.ts │ ├── test │ │ ├── html │ │ │ ├── assets │ │ │ │ ├── style.css │ │ │ │ ├── robot.png │ │ │ │ └── 1-minute-of-silence.mp3 │ │ │ ├── blank.html │ │ │ ├── mutation-observer.html │ │ │ ├── canvas-iframe.html │ │ │ ├── move-node.html │ │ │ ├── empty.html │ │ │ ├── hello-world.html │ │ │ ├── shuffle.html │ │ │ ├── frame-image-blob-url.html │ │ │ ├── link.html │ │ │ ├── block.html │ │ │ ├── unblock.html │ │ │ ├── frame2.html │ │ │ ├── benchmark-dom-mutation-multiple-descendant-add.html │ │ │ ├── audio.html │ │ │ ├── benchmark-dom-mutation-attributes.html │ │ │ ├── frame1.html │ │ │ ├── main.html │ │ │ ├── mask-text.html │ │ │ ├── unmask-text.html │ │ │ ├── ignore.html │ │ │ ├── image-blob-url.html │ │ │ ├── polyfilled-shadowdom-mutation.html │ │ │ ├── password.html │ │ │ ├── canvas-webgl.html │ │ │ ├── benchmark-dom-mutation-deep-nested.html │ │ │ ├── benchmark-dom-mutation.html │ │ │ ├── canvas-shadow-dom.html │ │ │ ├── select2.html │ │ │ ├── benchmark-dom-mutation-add-and-move.html │ │ │ ├── canvas.html │ │ │ ├── benchmark-text-masking.html │ │ │ └── benchmark-dom-mutation-add-and-remove.html │ │ ├── e2e │ │ │ └── __image_snapshots__ │ │ │ │ ├── webgl-test-ts-test-e-2-e-webgl-test-ts-e-2-e-webgl-will-record-and-replay-a-webgl-image-1-snap.png │ │ │ │ └── webgl-test-ts-test-e-2-e-webgl-test-ts-e-2-e-webgl-will-record-and-replay-a-webgl-square-1-snap.png │ │ ├── replay │ │ │ ├── __image_snapshots__ │ │ │ │ ├── webgl-test-ts-test-replay-webgl-test-ts-replayer-webgl-should-output-simple-webgl-object-1-snap.png │ │ │ │ └── hover-test-ts-test-replay-hover-test-ts-replayer-hover-should-trigger-hover-on-mouse-down-1-snap.png │ │ │ └── webgl-mutation.test.ts │ │ └── machine.test.ts │ ├── rrweb-record │ │ └── package.json │ ├── rrweb-replay │ │ └── package.json │ ├── vite.config.js │ ├── .gitignore │ ├── .release-it.json │ ├── vitest.config.ts │ ├── vite.config.entries.js │ └── tsconfig.json ├── all │ ├── .gitignore │ ├── test │ │ └── html │ │ │ └── blank.html │ ├── vite.config.ts │ ├── src │ │ └── index.ts │ ├── vitest.config.ts │ ├── tsconfig.json │ └── package.json ├── packer │ ├── .gitignore │ ├── src │ │ ├── index.ts │ │ ├── base.ts │ │ ├── pack.ts │ │ └── unpack.ts │ ├── pack │ │ └── package.json │ ├── unpack │ │ └── package.json │ ├── test │ │ ├── __snapshots__ │ │ │ └── packer.test.ts.snap │ │ └── packer.test.ts │ ├── tsconfig.json │ └── vite.config.ts ├── record │ ├── .gitignore │ ├── src │ │ └── index.ts │ ├── vite.config.ts │ ├── vitest.config.ts │ ├── test │ │ └── record.test.ts │ ├── tsconfig.json │ └── package.json ├── replay │ ├── .gitignore │ ├── vite.config.ts │ ├── vitest.config.ts │ ├── src │ │ └── index.ts │ ├── test │ │ └── replay.test.ts │ └── tsconfig.json ├── rrvideo │ ├── test │ │ ├── tsconfig.json │ │ └── cli.test.ts │ ├── demo │ │ └── demo.gif │ ├── jest.config.js │ ├── rrvideo.config.example.json │ ├── tsconfig.json │ ├── package.json │ └── src │ │ └── cli.ts ├── rrweb-player │ ├── .svelte-kit │ │ ├── generated │ │ │ └── client │ │ │ │ ├── matchers.js │ │ │ │ ├── nodes │ │ │ │ ├── 0.js │ │ │ │ └── 1.js │ │ │ │ └── app.js │ │ ├── non-ambient.d.ts │ │ └── tsconfig.json │ ├── vite-env.d.ts │ ├── .eslintignore │ ├── .prettierignore │ ├── .release-it.json │ ├── .gitignore │ ├── tsconfig.node.json │ ├── public │ │ └── global.css │ ├── src │ │ └── main.ts │ ├── svelte.config.js │ ├── .eslintrc.cjs │ ├── tsconfig.json │ └── index.html ├── web-extension │ ├── src │ │ ├── assets │ │ │ ├── icon128.png │ │ │ ├── icon16.png │ │ │ └── icon48.png │ │ ├── popup │ │ │ ├── popup.html │ │ │ ├── index.tsx │ │ │ └── Timer.tsx │ │ ├── pages │ │ │ ├── index.html │ │ │ ├── index.tsx │ │ │ └── App.tsx │ │ ├── options │ │ │ ├── index.html │ │ │ ├── index.tsx │ │ │ └── App.tsx │ │ ├── components │ │ │ └── CircleButton.tsx │ │ └── utils │ │ │ └── index.ts │ └── tsconfig.json ├── plugins │ ├── rrweb-plugin-canvas-webrtc-record │ │ ├── src │ │ │ └── types.ts │ │ ├── vite.config.ts │ │ ├── tsconfig.json │ │ └── package.json │ ├── rrweb-plugin-canvas-webrtc-replay │ │ ├── src │ │ │ └── types.ts │ │ ├── vite.config.ts │ │ ├── tsconfig.json │ │ └── package.json │ ├── rrweb-plugin-console-record │ │ ├── vite.config.ts │ │ ├── vitest.config.ts │ │ ├── test │ │ │ ├── stringify.test.ts │ │ │ └── html │ │ │ │ ├── log.html │ │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── package.json │ ├── rrweb-plugin-console-replay │ │ ├── vite.config.ts │ │ ├── tsconfig.json │ │ └── package.json │ ├── rrweb-plugin-sequential-id-record │ │ ├── vite.config.ts │ │ ├── tsconfig.json │ │ ├── src │ │ │ └── index.ts │ │ └── package.json │ └── rrweb-plugin-sequential-id-replay │ │ ├── vite.config.ts │ │ ├── tsconfig.json │ │ ├── src │ │ └── index.ts │ │ └── package.json └── rrweb-worker │ ├── .eslintrc.json │ ├── vite.config.js │ ├── .gitignore │ ├── tsconfig.types.json │ ├── src │ ├── image-bitmap-data-url-worker.ts │ ├── index.ts │ └── getScaledDimensions.ts │ ├── vitest.config.ts │ ├── tsconfig.json │ └── package.json ├── .gitattributes ├── .yarnrc.yml ├── tsconfig.eslint.json ├── .npmignore ├── vitest.workspace.ts ├── lerna.json ├── .eslintignore ├── docs ├── recipes │ ├── export-to-video.zh_CN.md │ ├── export-to-video.md │ ├── interaction.zh_CN.md │ ├── pagination.zh_CN.md │ ├── record-and-replay.zh_CN.md │ ├── pagination.md │ ├── interaction.md │ ├── live-mode.zh_CN.md │ ├── record-and-replay.md │ ├── custom-event.zh_CN.md │ ├── canvas.zh_CN.md │ ├── canvas.md │ ├── custom-event.md │ └── index.zh_CN.md ├── replay.zh_CN.md └── sandbox.zh_CN.md ├── .release-it.json ├── .puppeteerrc.cjs ├── .editorconfig ├── vitest.config.ts ├── scripts ├── lint-packages.sh └── craft-pre-release.sh ├── .craft.yml ├── .github ├── FUNDING.yml ├── config.yml └── workflows │ └── release.yml ├── .gitignore ├── tsconfig.json ├── .eslintrc.js ├── turbo.json ├── .size-limit.js └── tsconfig.base.json /.cache/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.changeset/five-peas-lay.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/brave-numbers-joke.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/cold-hounds-teach.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/eleven-toys-vanish.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/empty-bikes-cheer.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/fair-dragons-greet.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/few-rockets-travel.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/fresh-cars-impress.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/hip-worms-relax.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/khaki-dots-bathe.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/rich-crews-protect.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/serious-eggs-greet.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/twenty-goats-kneel.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/calm-bulldogs-speak.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/cuddly-readers-warn.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/curvy-balloons-brake.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/few-turkeys-reflect.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/format-head-prettier.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/forty-elephants-attack.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/friendly-numbers-leave.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/light-fireants-exercise.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/mighty-frogs-sparkle.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/silver-windows-float.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.changeset/twenty-planets-repeat.md: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all" 3 | } 4 | -------------------------------------------------------------------------------- /packages/rrweb-snapshot/test/js/a.js: -------------------------------------------------------------------------------- 1 | var a = 1 + 1; 2 | -------------------------------------------------------------------------------- /packages/rrdom/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | es 3 | lib 4 | typings 5 | -------------------------------------------------------------------------------- /packages/types/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | es 3 | lib 4 | typings 5 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | /.yarn/releases/** binary 2 | /.yarn/plugins/** binary -------------------------------------------------------------------------------- /packages/rrdom-nodejs/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | es 3 | lib 4 | typings 5 | -------------------------------------------------------------------------------- /packages/rrweb/src/entries/replay.ts: -------------------------------------------------------------------------------- 1 | export * from '../replay'; 2 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | yarnPath: '.yarn/releases/yarn-1.23.0-20220130.1630.cjs' 2 | -------------------------------------------------------------------------------- /packages/all/.gitignore: -------------------------------------------------------------------------------- 1 | .turbo 2 | dist 3 | node_modules 4 | yarn-error.log -------------------------------------------------------------------------------- /packages/all/test/html/blank.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | -------------------------------------------------------------------------------- /packages/packer/.gitignore: -------------------------------------------------------------------------------- 1 | .turbo 2 | dist 3 | node_modules 4 | yarn-error.log -------------------------------------------------------------------------------- /packages/record/.gitignore: -------------------------------------------------------------------------------- 1 | .turbo 2 | dist 3 | node_modules 4 | yarn-error.log -------------------------------------------------------------------------------- /packages/replay/.gitignore: -------------------------------------------------------------------------------- 1 | .turbo 2 | dist 3 | node_modules 4 | yarn-error.log -------------------------------------------------------------------------------- /packages/rrvideo/test/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": {} 3 | } 4 | -------------------------------------------------------------------------------- /packages/rrweb/test/html/assets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | color: pink; 3 | } 4 | -------------------------------------------------------------------------------- /packages/rrweb/test/html/blank.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/rrweb-player/.svelte-kit/generated/client/matchers.js: -------------------------------------------------------------------------------- 1 | export const matchers = {}; -------------------------------------------------------------------------------- /packages/rrweb-snapshot/test/html/iframe-inner.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/rrweb-snapshot/test/html/invalid-attribute.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.changeset/rich-dots-lay.md: -------------------------------------------------------------------------------- 1 | --- 2 | 'rrweb-snapshot': patch 3 | --- 4 | 5 | Fix css parsing errors 6 | -------------------------------------------------------------------------------- /packages/packer/src/index.ts: -------------------------------------------------------------------------------- 1 | export { pack } from './pack'; 2 | export { unpack } from './unpack'; 3 | -------------------------------------------------------------------------------- /packages/rrdom-nodejs/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["vitest.explorer"] 3 | } 4 | -------------------------------------------------------------------------------- /packages/rrweb/src/entries/record.ts: -------------------------------------------------------------------------------- 1 | import record from '../record'; 2 | 3 | export { record }; 4 | -------------------------------------------------------------------------------- /tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": [".eslintrc.js"] 4 | } 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | .idea 3 | node_modules 4 | package-lock.json 5 | yarn.lock 6 | temp 7 | *.log 8 | -------------------------------------------------------------------------------- /.changeset/lazy-squids-draw.md: -------------------------------------------------------------------------------- 1 | --- 2 | 'rrweb': patch 3 | --- 4 | 5 | export the canvasMutation function 6 | -------------------------------------------------------------------------------- /packages/record/src/index.ts: -------------------------------------------------------------------------------- 1 | import { record } from '@sentry-internal/rrweb'; 2 | 3 | export { record }; 4 | -------------------------------------------------------------------------------- /packages/rrvideo/demo/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/getsentry/rrweb/HEAD/packages/rrvideo/demo/demo.gif -------------------------------------------------------------------------------- /.changeset/nice-pugs-reply.md: -------------------------------------------------------------------------------- 1 | --- 2 | 'rrweb': patch 3 | --- 4 | 5 | fix: Ensure getting the type of inputs works 6 | -------------------------------------------------------------------------------- /.changeset/sixty-impalas-laugh.md: -------------------------------------------------------------------------------- 1 | --- 2 | 'rrweb': patch 3 | --- 4 | 5 | Only apply touch-active styling on flush 6 | -------------------------------------------------------------------------------- /.changeset/three-baboons-bow.md: -------------------------------------------------------------------------------- 1 | --- 2 | 'rrweb': patch 3 | --- 4 | 5 | fix: protect against missing parentNode 6 | -------------------------------------------------------------------------------- /packages/packer/pack/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "../dist/pack.cjs", 3 | "types": "../dist/pack.d.ts" 4 | } 5 | -------------------------------------------------------------------------------- /packages/rrweb-player/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | ///mutation observer
4 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/packages/replay/src/index.ts:
--------------------------------------------------------------------------------
1 | import {
2 | Replayer,
3 | type playerConfig,
4 | type PlayerMachineState,
5 | type SpeedMachineState,
6 | } from '@sentry-internal/rrweb';
7 | import '@sentry-internal/rrweb/dist/style.css';
8 |
9 | export { Replayer, playerConfig, PlayerMachineState, SpeedMachineState };
10 |
--------------------------------------------------------------------------------
/packages/rrweb/test/html/empty.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/packages/rrweb-snapshot/test/html/with-style-sheet.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
10 |
11 |
12 | mask 1
12 |p tag
19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/rrweb-snapshot/test/html/hover.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |mask1
11 |24 | unmask1 25 |
26 | 27 | 28 | -------------------------------------------------------------------------------- /docs/recipes/pagination.md: -------------------------------------------------------------------------------- 1 | # Load Events Asynchronous 2 | 3 | When the size of the recorded events increased, load them in one request is not performant. You can paginate the events and load them as you need. 4 | 5 | rrweb's API for loading async events is quite simple: 6 | 7 | ```js 8 | const replayer = new rrweb.Replayer(events); 9 | 10 | replayer.addEvent(NEW_EVENT); 11 | ``` 12 | 13 | When calling the `addEvent` API to add a new event, rrweb will resolve its timestamp and replay it as need. 14 | 15 | If you need to load several events, you can do a loop like this: 16 | 17 | ```js 18 | const replayer = new rrweb.Replayer(events); 19 | 20 | for (const event of NEW_EVENTS) { 21 | replayer.addEvent(event); 22 | } 23 | ``` 24 | -------------------------------------------------------------------------------- /packages/rrweb/test/html/unmask-text.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/packages/rrweb/test/html/password.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 12 | Select2 is a jQuery replacement for select boxes. 13 |16 | 20 | 21 | 22 | 25 | 26 | -------------------------------------------------------------------------------- /packages/rrweb-player/.svelte-kit/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": {}, 4 | "rootDirs": [ 5 | "..", 6 | "./types" 7 | ], 8 | "verbatimModuleSyntax": true, 9 | "isolatedModules": true, 10 | "lib": [ 11 | "esnext", 12 | "DOM", 13 | "DOM.Iterable" 14 | ], 15 | "moduleResolution": "bundler", 16 | "module": "esnext", 17 | "noEmit": true, 18 | "target": "esnext" 19 | }, 20 | "include": [ 21 | "ambient.d.ts", 22 | "non-ambient.d.ts", 23 | "./types/**/$types.d.ts", 24 | "../vite.config.js", 25 | "../vite.config.ts", 26 | "../src/**/*.js", 27 | "../src/**/*.ts", 28 | "../src/**/*.svelte", 29 | "../tests/**/*.js", 30 | "../tests/**/*.ts", 31 | "../tests/**/*.svelte" 32 | ], 33 | "exclude": [ 34 | "../node_modules/**", 35 | "../src/service-worker.js", 36 | "../src/service-worker/**/*.js", 37 | "../src/service-worker.ts", 38 | "../src/service-worker/**/*.ts", 39 | "../src/service-worker.d.ts", 40 | "../src/service-worker/**/*.d.ts" 41 | ] 42 | } -------------------------------------------------------------------------------- /packages/packer/src/unpack.ts: -------------------------------------------------------------------------------- 1 | import { strFromU8, strToU8, unzlibSync } from 'fflate'; 2 | import { eventWithTimeAndPacker, MARK } from './base'; 3 | import type { UnpackFn, eventWithTime } from '@sentry-internal/rrweb-types'; 4 | 5 | export const unpack: UnpackFn = (raw: string) => { 6 | if (typeof raw !== 'string') { 7 | return raw; 8 | } 9 | try { 10 | const e: eventWithTime = JSON.parse(raw) as eventWithTime; 11 | if (e.timestamp) { 12 | return e; 13 | } 14 | } catch (error) { 15 | // ignore and continue 16 | } 17 | try { 18 | const e: eventWithTimeAndPacker = JSON.parse( 19 | strFromU8(unzlibSync(strToU8(raw, true))), 20 | ) as eventWithTimeAndPacker; 21 | if (e.v === MARK) { 22 | return e; 23 | } 24 | throw new Error( 25 | `These events were packed with packer ${e.v} which is incompatible with current packer ${MARK}.`, 26 | ); 27 | } catch (error) { 28 | console.error(error); 29 | throw new Error('Unknown data format.'); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /packages/rrweb/test/html/benchmark-dom-mutation-add-and-move.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 37 | 38 | -------------------------------------------------------------------------------- /packages/rrweb/test/html/canvas.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
14 | In the 3.5 version it use a quite complicated DOM generation strategy which is a good battle-test for rrweb's recorder. 15 |
The background is clipped to the foreground text.
12 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /packages/rrweb-snapshot/test/html/form-fields-sensitive.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |This is a paragraph
33 | 34 |42 | Mammon slept. And the beast reborn spread over the earth and its numbers 43 | grew legion. And they proclaimed the times and sacrificed crops unto the 44 | fire, with the cunning of foxes. And they built a new world in their own 45 | image as promised by the 46 | sacred words, and spoke 47 | of the beast with their children. Mammon awoke, and lo! it was 48 | naught but a follower. 49 |
50 | 51 |
52 | from The Book of Mozilla, 11:9
(10th Edition)
53 |