├── .husky ├── pre-commit └── commit-msg ├── .gitignore ├── browser-extension ├── .gitignore ├── .prettierrc ├── src │ ├── cotentScript │ │ ├── originalFetch.ts │ │ ├── interceptor.ts │ │ └── setupContentConfig.ts │ ├── popup │ │ ├── popup.css │ │ ├── components │ │ │ ├── footer │ │ │ │ └── footer.tsx │ │ │ ├── app.tsx │ │ │ ├── header │ │ │ │ └── header.tsx │ │ │ ├── tab │ │ │ │ └── tab.tsx │ │ │ └── createRules │ │ │ │ └── createRules.tsx │ │ ├── popup.tsx │ │ └── popup.html │ ├── options │ │ ├── components │ │ │ ├── common │ │ │ │ ├── tooltip │ │ │ │ │ ├── tooltip.css │ │ │ │ │ └── tooltip.tsx │ │ │ │ ├── select │ │ │ │ │ └── select.css │ │ │ │ ├── background │ │ │ │ │ └── background.tsx │ │ │ │ ├── icon │ │ │ │ │ └── icon.tsx │ │ │ │ ├── section │ │ │ │ │ └── section.tsx │ │ │ │ ├── backButton │ │ │ │ │ └── backButton.tsx │ │ │ │ ├── checkbox │ │ │ │ │ └── checkbox.tsx │ │ │ │ ├── editor │ │ │ │ │ └── editor.tsx │ │ │ │ ├── extensionToggle │ │ │ │ │ └── extensionToggle.tsx │ │ │ │ ├── toast │ │ │ │ │ └── toast.tsx │ │ │ │ ├── switcher │ │ │ │ │ └── switcher.tsx │ │ │ │ ├── button │ │ │ │ │ └── button.tsx │ │ │ │ └── input │ │ │ │ │ └── input.tsx │ │ │ ├── dialog │ │ │ │ ├── dialog.css │ │ │ │ └── dialog.tsx │ │ │ ├── footer │ │ │ │ └── footer.tsx │ │ │ ├── sideBar │ │ │ │ └── components │ │ │ │ │ ├── sidebarSection │ │ │ │ │ └── sidebarSection.tsx │ │ │ │ │ └── sidebarItem │ │ │ │ │ └── sidebarItem.tsx │ │ │ ├── sidebar │ │ │ │ └── components │ │ │ │ │ ├── sidebarSection │ │ │ │ │ └── sidebarSection.tsx │ │ │ │ │ └── sidebarItem │ │ │ │ │ └── sidebarItem.tsx │ │ │ ├── skeletonAnimation │ │ │ │ └── skeletonAnimation.tsx │ │ │ ├── routeListener │ │ │ │ └── routeListener.tsx │ │ │ ├── app │ │ │ │ ├── browserSupport.tsx │ │ │ │ ├── paths.tsx │ │ │ │ └── app.tsx │ │ │ └── notFound │ │ │ │ └── notFound.tsx │ │ ├── pages │ │ │ ├── forms │ │ │ │ ├── modifyRequestBody │ │ │ │ │ └── generateModifyRequestBodyRules.tsx │ │ │ │ ├── block │ │ │ │ │ ├── block.tsx │ │ │ │ │ └── generateBlockRule.ts │ │ │ │ ├── modifyResponse │ │ │ │ │ ├── dynamicCodeTemplate.ts │ │ │ │ │ └── generateModifyResponseRules.tsx │ │ │ │ ├── injectFile │ │ │ │ │ └── generateInjectFileRules.tsx │ │ │ │ ├── redirect │ │ │ │ │ ├── generateRedirectRules.tsx │ │ │ │ │ └── redirect.tsx │ │ │ │ ├── modifyHeader │ │ │ │ │ └── generateModifyHeaderRule.ts │ │ │ │ └── queryParam │ │ │ │ │ └── generateQueryParamRule.ts │ │ │ └── httpLogger │ │ │ │ └── list.config.tsx │ │ ├── options.html │ │ ├── options.tsx │ │ ├── constant │ │ │ └── index.ts │ │ └── options.css │ ├── HTTPLoggerWindow │ │ ├── HTTPLoggerWindow.css │ │ ├── HTTPLoggerWindow.html │ │ └── HTTPLoggerWindow.tsx │ ├── models │ │ ├── pageSource.ts │ │ ├── storageModel.ts │ │ ├── WebRequestModel.ts │ │ └── postMessageActionModel.ts │ ├── assets │ │ ├── images │ │ │ └── icons │ │ │ │ ├── inssman_16.png │ │ │ │ ├── inssman_32.png │ │ │ │ ├── inssman_48.png │ │ │ │ ├── inssman_128.png │ │ │ │ └── inssman_big.png │ │ └── icons │ │ │ ├── cross.svg │ │ │ ├── plus.svg │ │ │ ├── arrowLeft.svg │ │ │ ├── arrowRight.svg │ │ │ ├── arrowUpLong.svg │ │ │ ├── arrowDownLong.svg │ │ │ ├── checkCircle.svg │ │ │ ├── redirect.svg │ │ │ ├── search.svg │ │ │ ├── xCircle.svg │ │ │ ├── block.svg │ │ │ ├── list.svg │ │ │ ├── play.svg │ │ │ ├── info.svg │ │ │ ├── code.svg │ │ │ ├── paperClip.svg │ │ │ ├── pencil.svg │ │ │ ├── videoCamera.svg │ │ │ ├── question.svg │ │ │ ├── adjustmentVertical.svg │ │ │ ├── playCircle.svg │ │ │ ├── doubleSquare.svg │ │ │ ├── pencilSquare.svg │ │ │ ├── share.svg │ │ │ ├── listBullet.svg │ │ │ ├── document.svg │ │ │ ├── photo.svg │ │ │ ├── github.svg │ │ │ ├── star.svg │ │ │ ├── wrench.svg │ │ │ ├── clipboard.svg │ │ │ ├── trash.svg │ │ │ ├── rocket.svg │ │ │ ├── loader.svg │ │ │ ├── documentCopy.svg │ │ │ ├── squares.svg │ │ │ ├── floppy.svg │ │ │ ├── bug.svg │ │ │ └── sideBar.svg │ ├── services │ │ ├── RegisterService.ts │ │ ├── BrowserSupportService.ts │ │ ├── ShareService.ts │ │ ├── TabService.ts │ │ ├── BaseService.ts │ │ ├── CacheService.ts │ │ ├── MatcherService.ts │ │ ├── TrackService.ts │ │ ├── BrowserRuleService.ts │ │ └── StorageService.ts │ ├── utils │ │ ├── decode.ts │ │ ├── isPromise.ts │ │ ├── encode.ts │ │ ├── capitalizeFirstLetter.ts │ │ ├── validateJSON.ts │ │ ├── structuredClone.ts │ │ ├── cutString.ts │ │ ├── generateId.ts │ │ ├── jsonParesString.ts │ │ ├── readFile.ts │ │ ├── extractDomain.ts │ │ ├── downloadFile.ts │ │ ├── generateLastMatchedTime.ts │ │ ├── throttle.ts │ │ ├── timeDifference.ts │ │ └── regExp.ts │ ├── types │ │ └── svg.d.ts │ ├── serviceWorker │ │ ├── firebaseConfig.ts │ │ └── storgeDataConverter.ts │ ├── context │ │ ├── sideBarContext.tsx │ │ ├── featureToggleContext.tsx │ │ └── overlayContext.tsx │ └── iframeContentScript │ │ └── iframeContentScript.ts ├── .eslintignore ├── webpack │ ├── webpack.production.js │ └── webpack.development.js ├── postcss.config.js ├── tailwind.config.js ├── .eslintrc.simple.cjs ├── scripts │ ├── removeDir.js │ └── createZip.js ├── .babelrc ├── tsconfig.json └── .eslintrc.cjs ├── web ├── src │ ├── components │ │ ├── tooltip │ │ │ ├── tooltip.css │ │ │ └── tooltip.tsx │ │ ├── docs │ │ │ ├── textBG.mdx │ │ │ ├── destination.mdx │ │ │ ├── sourceCondition.mdx │ │ │ └── sidebar.mdx │ │ ├── sessionPlayer │ │ │ ├── sessionPlayer.css │ │ │ └── sessionPlayer.tsx │ │ ├── section │ │ │ └── section.tsx │ │ ├── layouts │ │ │ └── mdxLayout.tsx │ │ ├── HTTPRulesList │ │ │ ├── sidebar │ │ │ │ └── sidebar.tsx │ │ │ ├── content │ │ │ │ ├── content.tsx │ │ │ │ └── config.ts │ │ │ └── HTTPRulesList.tsx │ │ ├── typewriter │ │ │ ├── typewriter.tsx │ │ │ └── spotlight.tsx │ │ ├── footer │ │ │ └── footer.tsx │ │ ├── loading │ │ │ └── loading.tsx │ │ ├── header │ │ │ └── header.tsx │ │ ├── backgroundBox │ │ │ └── backgroundBox.tsx │ │ └── installExtension │ │ │ └── installExtension.tsx │ ├── app │ │ ├── favicon.ico │ │ ├── checkCircle.svg │ │ ├── page.tsx │ │ ├── envelope.svg │ │ ├── document.svg │ │ ├── github.svg │ │ ├── star.svg │ │ ├── globals.css │ │ ├── api │ │ │ └── cron │ │ │ │ └── route.ts │ │ └── layout.tsx │ ├── pages │ │ ├── app │ │ │ ├── app.css │ │ │ ├── install │ │ │ │ ├── install.css │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── [...slug] │ │ │ │ └── index.tsx │ │ │ └── app.tsx │ │ ├── docs │ │ │ ├── index.mdx │ │ │ └── modify-request-body.mdx │ │ └── api │ │ │ └── config │ │ │ └── index.ts │ ├── assets │ │ ├── images │ │ │ ├── icons │ │ │ │ ├── inssman_128.png │ │ │ │ ├── inssman_16.png │ │ │ │ ├── inssman_32.png │ │ │ │ ├── inssman_48.png │ │ │ │ └── inssman_big.png │ │ │ └── rules-image │ │ │ │ ├── block.png │ │ │ │ ├── redirect.png │ │ │ │ ├── inject-file.png │ │ │ │ ├── query-param.png │ │ │ │ ├── modify-header.png │ │ │ │ ├── modify-response.png │ │ │ │ └── modify-request-body.png │ │ └── icons │ │ │ ├── cross.svg │ │ │ ├── plus.svg │ │ │ ├── arrowLeft.svg │ │ │ ├── arrowRight.svg │ │ │ ├── arrowUpLong.svg │ │ │ ├── arrowDownLong.svg │ │ │ ├── checkCircle.svg │ │ │ ├── search.svg │ │ │ ├── redirect.svg │ │ │ ├── xCircle.svg │ │ │ ├── block.svg │ │ │ ├── list.svg │ │ │ ├── play.svg │ │ │ ├── info.svg │ │ │ ├── code.svg │ │ │ ├── pencil.svg │ │ │ ├── paperClip.svg │ │ │ ├── videoCamera.svg │ │ │ ├── question.svg │ │ │ ├── adjustmentVertical.svg │ │ │ ├── playCircle.svg │ │ │ ├── doubleSquare.svg │ │ │ ├── pencilSquare.svg │ │ │ ├── share.svg │ │ │ ├── listBullet.svg │ │ │ ├── document.svg │ │ │ ├── github.svg │ │ │ ├── star.svg │ │ │ ├── wrench.svg │ │ │ ├── clipboard.svg │ │ │ ├── trash.svg │ │ │ ├── documentCopy.svg │ │ │ ├── squares.svg │ │ │ ├── bug.svg │ │ │ └── sideBar.svg │ └── utils │ │ ├── isSharedRecordedSessionPath.ts │ │ └── cn.ts ├── public │ ├── assets │ │ ├── images │ │ │ ├── edge.png │ │ │ ├── chrome.png │ │ │ ├── rules-sidebar.png │ │ │ ├── icons │ │ │ │ ├── inssman_128.png │ │ │ │ ├── inssman_16.png │ │ │ │ ├── inssman_32.png │ │ │ │ ├── inssman_48.png │ │ │ │ └── inssman_big.png │ │ │ ├── rules-image │ │ │ │ ├── block.png │ │ │ │ ├── redirect.png │ │ │ │ ├── inject-file.png │ │ │ │ ├── modify-header.png │ │ │ │ ├── query-param.png │ │ │ │ ├── modify-response.png │ │ │ │ └── modify-request-body.png │ │ │ └── redirect-to-google.png │ │ └── icons │ │ │ ├── cross.svg │ │ │ ├── plus.svg │ │ │ ├── arrowLeft.svg │ │ │ ├── arrowRight.svg │ │ │ ├── arrowUpLong.svg │ │ │ ├── arrowDownLong.svg │ │ │ ├── checkCircle.svg │ │ │ ├── redirect.svg │ │ │ ├── search.svg │ │ │ ├── xCircle.svg │ │ │ ├── block.svg │ │ │ ├── list.svg │ │ │ ├── play.svg │ │ │ ├── info.svg │ │ │ ├── code.svg │ │ │ ├── paperClip.svg │ │ │ ├── pencil.svg │ │ │ ├── videoCamera.svg │ │ │ ├── question.svg │ │ │ ├── adjustmentVertical.svg │ │ │ ├── playCircle.svg │ │ │ ├── doubleSquare.svg │ │ │ ├── pencilSquare.svg │ │ │ ├── share.svg │ │ │ ├── listBullet.svg │ │ │ ├── document.svg │ │ │ ├── github.svg │ │ │ ├── star.svg │ │ │ ├── wrench.svg │ │ │ ├── clipboard.svg │ │ │ ├── trash.svg │ │ │ ├── documentCopy.svg │ │ │ ├── squares.svg │ │ │ ├── bug.svg │ │ │ └── sidebar.svg │ ├── vercel.svg │ └── next.svg ├── .eslintrc.json ├── postcss.config.js ├── vercel-test.json ├── next.config.js ├── .gitignore ├── tsconfig.json ├── package.json └── README.md ├── commitlint.config.js ├── .env.example ├── package.json ├── .editorconfig ├── server ├── index.js └── index.html ├── LICENSE.md └── SECURITY.md /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | npx --no -- commitlint --edit $1 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .DS_Store 3 | .env 4 | node_modules 5 | -------------------------------------------------------------------------------- /browser-extension/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | release 4 | -------------------------------------------------------------------------------- /browser-extension/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120 3 | } 4 | -------------------------------------------------------------------------------- /browser-extension/src/cotentScript/originalFetch.ts: -------------------------------------------------------------------------------- 1 | export default window.fetch; 2 | -------------------------------------------------------------------------------- /web/src/components/tooltip/tooltip.css: -------------------------------------------------------------------------------- 1 | .react-tooltip { 2 | z-index: 10; 3 | } 4 | -------------------------------------------------------------------------------- /browser-extension/src/cotentScript/interceptor.ts: -------------------------------------------------------------------------------- 1 | import "./fetch"; 2 | import "./xhr"; 3 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { extends: ['@commitlint/config-conventional'] }; 2 | -------------------------------------------------------------------------------- /web/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/app/favicon.ico -------------------------------------------------------------------------------- /web/src/pages/app/app.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /browser-extension/src/popup/popup.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /web/src/pages/app/install/install.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /browser-extension/src/options/components/common/tooltip/tooltip.css: -------------------------------------------------------------------------------- 1 | .react-tooltip { 2 | z-index: 10; 3 | } 4 | -------------------------------------------------------------------------------- /browser-extension/src/options/components/dialog/dialog.css: -------------------------------------------------------------------------------- 1 | .rc-dialog-close-x { 2 | color: white; 3 | } 4 | -------------------------------------------------------------------------------- /web/src/pages/docs/index.mdx: -------------------------------------------------------------------------------- 1 | import Introduction from './introduction.mdx'; 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /web/public/assets/images/edge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/edge.png -------------------------------------------------------------------------------- /web/src/components/docs/textBG.mdx: -------------------------------------------------------------------------------- 1 | {props.text} 2 | -------------------------------------------------------------------------------- /browser-extension/src/popup/components/footer/footer.tsx: -------------------------------------------------------------------------------- 1 | const Footer = () => null; 2 | 3 | export default Footer; 4 | -------------------------------------------------------------------------------- /web/public/assets/images/chrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/chrome.png -------------------------------------------------------------------------------- /web/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals", 3 | "rules": { "react/no-unescaped-entities": 0 } 4 | 5 | } 6 | -------------------------------------------------------------------------------- /web/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /browser-extension/src/HTTPLoggerWindow/HTTPLoggerWindow.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /web/public/assets/images/rules-sidebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/rules-sidebar.png -------------------------------------------------------------------------------- /web/src/assets/images/icons/inssman_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/assets/images/icons/inssman_128.png -------------------------------------------------------------------------------- /web/src/assets/images/icons/inssman_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/assets/images/icons/inssman_16.png -------------------------------------------------------------------------------- /web/src/assets/images/icons/inssman_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/assets/images/icons/inssman_32.png -------------------------------------------------------------------------------- /web/src/assets/images/icons/inssman_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/assets/images/icons/inssman_48.png -------------------------------------------------------------------------------- /web/src/assets/images/icons/inssman_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/assets/images/icons/inssman_big.png -------------------------------------------------------------------------------- /web/src/assets/images/rules-image/block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/assets/images/rules-image/block.png -------------------------------------------------------------------------------- /web/public/assets/images/icons/inssman_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/icons/inssman_128.png -------------------------------------------------------------------------------- /web/public/assets/images/icons/inssman_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/icons/inssman_16.png -------------------------------------------------------------------------------- /web/public/assets/images/icons/inssman_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/icons/inssman_32.png -------------------------------------------------------------------------------- /web/public/assets/images/icons/inssman_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/icons/inssman_48.png -------------------------------------------------------------------------------- /web/public/assets/images/icons/inssman_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/icons/inssman_big.png -------------------------------------------------------------------------------- /web/public/assets/images/rules-image/block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/rules-image/block.png -------------------------------------------------------------------------------- /web/src/assets/images/rules-image/redirect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/assets/images/rules-image/redirect.png -------------------------------------------------------------------------------- /browser-extension/src/models/pageSource.ts: -------------------------------------------------------------------------------- 1 | export enum PageSource { 2 | Popup = "popup", 3 | Options = "options", 4 | Web = "web", 5 | } 6 | -------------------------------------------------------------------------------- /web/public/assets/images/redirect-to-google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/redirect-to-google.png -------------------------------------------------------------------------------- /web/public/assets/images/rules-image/redirect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/rules-image/redirect.png -------------------------------------------------------------------------------- /web/src/assets/images/rules-image/inject-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/assets/images/rules-image/inject-file.png -------------------------------------------------------------------------------- /web/src/assets/images/rules-image/query-param.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/assets/images/rules-image/query-param.png -------------------------------------------------------------------------------- /web/vercel-test.json: -------------------------------------------------------------------------------- 1 | { 2 | "crons": [ 3 | { 4 | "path": "/api/cron", 5 | "schedule": "0 */12 * * *" 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | API_KEY= 2 | AUTH_DOMAIN= 3 | PROJECT_ID= 4 | STORAGE_BUCKET= 5 | MESSAGING_SENDER_ID= 6 | APP_ID= 7 | MEASUREMENT_ID= 8 | DATABASE_URL= 9 | -------------------------------------------------------------------------------- /web/src/assets/images/rules-image/modify-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/assets/images/rules-image/modify-header.png -------------------------------------------------------------------------------- /web/public/assets/images/rules-image/inject-file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/rules-image/inject-file.png -------------------------------------------------------------------------------- /web/public/assets/images/rules-image/modify-header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/rules-image/modify-header.png -------------------------------------------------------------------------------- /web/public/assets/images/rules-image/query-param.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/rules-image/query-param.png -------------------------------------------------------------------------------- /web/src/assets/images/rules-image/modify-response.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/assets/images/rules-image/modify-response.png -------------------------------------------------------------------------------- /browser-extension/src/assets/images/icons/inssman_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/browser-extension/src/assets/images/icons/inssman_16.png -------------------------------------------------------------------------------- /browser-extension/src/assets/images/icons/inssman_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/browser-extension/src/assets/images/icons/inssman_32.png -------------------------------------------------------------------------------- /browser-extension/src/assets/images/icons/inssman_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/browser-extension/src/assets/images/icons/inssman_48.png -------------------------------------------------------------------------------- /web/public/assets/images/rules-image/modify-response.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/rules-image/modify-response.png -------------------------------------------------------------------------------- /browser-extension/.eslintignore: -------------------------------------------------------------------------------- 1 | !**/.eslintrc* 2 | node_modules* 3 | dist 4 | *.svg 5 | *.ico 6 | *.json 7 | .gitignore 8 | *.md 9 | *.log 10 | *.lock 11 | -------------------------------------------------------------------------------- /browser-extension/src/assets/images/icons/inssman_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/browser-extension/src/assets/images/icons/inssman_128.png -------------------------------------------------------------------------------- /browser-extension/src/assets/images/icons/inssman_big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/browser-extension/src/assets/images/icons/inssman_big.png -------------------------------------------------------------------------------- /browser-extension/src/options/components/footer/footer.tsx: -------------------------------------------------------------------------------- 1 | const Footer = () => { 2 | return
; 3 | }; 4 | export default Footer; 5 | -------------------------------------------------------------------------------- /web/src/assets/images/rules-image/modify-request-body.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/src/assets/images/rules-image/modify-request-body.png -------------------------------------------------------------------------------- /web/src/utils/isSharedRecordedSessionPath.ts: -------------------------------------------------------------------------------- 1 | export const isSharedRecordedSessionPath = (path: string): boolean => path.startsWith("/app/record/shared/session/"); 2 | -------------------------------------------------------------------------------- /browser-extension/src/options/pages/forms/modifyRequestBody/generateModifyRequestBodyRules.tsx: -------------------------------------------------------------------------------- 1 | const generateRule = () => null; 2 | 3 | export default generateRule; 4 | -------------------------------------------------------------------------------- /web/public/assets/images/rules-image/modify-request-body.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vvmgev/Inssman/HEAD/web/public/assets/images/rules-image/modify-request-body.png -------------------------------------------------------------------------------- /browser-extension/src/services/RegisterService.ts: -------------------------------------------------------------------------------- 1 | import "@services/ToggleExtensionService"; 2 | import "@services/WebRequestService"; 3 | import "@services/RuleService"; 4 | -------------------------------------------------------------------------------- /browser-extension/src/utils/decode.ts: -------------------------------------------------------------------------------- 1 | export const decode = (value = "") => 2 | decodeURIComponent( 3 | escape(atob(value.substring(value.indexOf("base64,") + 7))) 4 | ); 5 | -------------------------------------------------------------------------------- /browser-extension/src/utils/isPromise.ts: -------------------------------------------------------------------------------- 1 | export const isPromise = (obj) => 2 | !!obj && (typeof obj === "object" || typeof obj === "function") && typeof obj.then === "function"; 3 | -------------------------------------------------------------------------------- /browser-extension/src/options/options.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /browser-extension/src/utils/encode.ts: -------------------------------------------------------------------------------- 1 | export const encode = (mimi, value = "") => 2 | `data:${mimi};charset=UTF-8;base64,${btoa( 3 | unescape(encodeURIComponent(value)) 4 | )}`; 5 | -------------------------------------------------------------------------------- /browser-extension/webpack/webpack.production.js: -------------------------------------------------------------------------------- 1 | const webpackConfig = require('./webpack.common'); 2 | module.exports = { 3 | ...webpackConfig, 4 | mode: "production", 5 | }; 6 | -------------------------------------------------------------------------------- /browser-extension/postcss.config.js: -------------------------------------------------------------------------------- 1 | const tailwindcss = require("tailwindcss"); 2 | module.exports = { 3 | plugins: [tailwindcss("./tailwind.config.js"), require("autoprefixer")], 4 | }; 5 | -------------------------------------------------------------------------------- /browser-extension/src/options/pages/forms/block/block.tsx: -------------------------------------------------------------------------------- 1 | import FormHOC from "@/options/HOC/formHOC"; 2 | 3 | const BlockForm = () => <>; 4 | 5 | export default FormHOC(BlockForm); 6 | -------------------------------------------------------------------------------- /web/src/components/docs/destination.mdx: -------------------------------------------------------------------------------- 1 | **Destination URL:** The destination users will be redirected to, as dictated by the defined source condition. 2 | -------------------------------------------------------------------------------- /web/src/utils/cn.ts: -------------------------------------------------------------------------------- 1 | import { ClassValue, clsx } from "clsx"; 2 | import { twMerge } from "tailwind-merge"; 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)); 6 | } 7 | -------------------------------------------------------------------------------- /browser-extension/src/utils/capitalizeFirstLetter.ts: -------------------------------------------------------------------------------- 1 | export const capitalizeFirstLetter = (inputString: string = ""): string => { 2 | return inputString.charAt(0).toUpperCase() + inputString.slice(1); 3 | }; 4 | -------------------------------------------------------------------------------- /browser-extension/webpack/webpack.development.js: -------------------------------------------------------------------------------- 1 | const webpackConfig = require('./webpack.common'); 2 | module.exports = { 3 | ...webpackConfig, 4 | mode: "development", 5 | devtool: 'inline-source-map', 6 | }; 7 | -------------------------------------------------------------------------------- /browser-extension/src/utils/validateJSON.ts: -------------------------------------------------------------------------------- 1 | export const validateJSON = (json: string): boolean => { 2 | try { 3 | JSON.parse(json); 4 | return true; 5 | } catch (error) { 6 | return false; 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /browser-extension/src/types/svg.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.svg" { 2 | import React = require("react"); 3 | export const ReactComponent: React.FC>; 4 | const src: string; 5 | export default src; 6 | } 7 | -------------------------------------------------------------------------------- /web/src/pages/app/index.tsx: -------------------------------------------------------------------------------- 1 | import dynamic from "next/dynamic"; 2 | const App = dynamic(() => import("./app"), { ssr: false }); 3 | 4 | const Main = () => ; 5 | 6 | Main.displayName = "Main"; 7 | 8 | export default Main; 9 | -------------------------------------------------------------------------------- /browser-extension/src/utils/structuredClone.ts: -------------------------------------------------------------------------------- 1 | export const structuredClone = (object: any) => 2 | (typeof globalThis?.structuredClone === "function" && globalThis.structuredClone(object)) || 3 | JSON.parse(JSON.stringify(object)); 4 | -------------------------------------------------------------------------------- /web/src/pages/app/[...slug]/index.tsx: -------------------------------------------------------------------------------- 1 | import dynamic from "next/dynamic"; 2 | const App = dynamic(() => import("../app"), { ssr: false }); 3 | const Slug = () => ; 4 | 5 | Slug.displayName = "Slug"; 6 | 7 | export default Slug; 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "@commitlint/cli": "^18.6.1", 4 | "@commitlint/config-conventional": "^18.6.2", 5 | "husky": "^9.0.11" 6 | }, 7 | "scripts": { 8 | "prepare": "husky" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /browser-extension/src/utils/cutString.ts: -------------------------------------------------------------------------------- 1 | export const COUNT_SYMBOLS = 22; 2 | export const cutString = (string: string, countSymbols: number = COUNT_SYMBOLS): string => 3 | string.length > countSymbols ? string.slice(0, countSymbols) + "..." : string; 4 | -------------------------------------------------------------------------------- /browser-extension/src/utils/generateId.ts: -------------------------------------------------------------------------------- 1 | export const generateId = (): number => 2 | parseInt( 3 | `${Date.now() % 10}${Math.floor(Math.random() * 50)}${Math.floor(Math.random() * 50)}${Math.floor( 4 | Math.random() * 50 5 | )}` 6 | ); 7 | -------------------------------------------------------------------------------- /browser-extension/src/utils/jsonParesString.ts: -------------------------------------------------------------------------------- 1 | export const jsonParesString = (json) => { 2 | if (typeof json !== "string") return json; 3 | 4 | try { 5 | return JSON.parse(json); 6 | } catch (e) {} 7 | 8 | return json; 9 | }; 10 | -------------------------------------------------------------------------------- /browser-extension/src/utils/readFile.ts: -------------------------------------------------------------------------------- 1 | export const readFile = (file, callback) => { 2 | const fileReader = new FileReader(); 3 | fileReader.onload = (event) => { 4 | callback(event?.target?.result); 5 | }; 6 | fileReader.readAsText(file); 7 | }; 8 | -------------------------------------------------------------------------------- /web/src/assets/icons/cross.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/src/assets/icons/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/public/assets/icons/cross.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/public/assets/icons/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /browser-extension/src/assets/icons/cross.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /browser-extension/src/assets/icons/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /browser-extension/src/utils/extractDomain.ts: -------------------------------------------------------------------------------- 1 | export const extractDomain = (url: string) => { 2 | const domain = new URL(url).hostname; 3 | const subdomains = domain.split("."); 4 | return subdomains.length > 2 ? subdomains[subdomains.length - 2] : subdomains[0]; 5 | }; 6 | -------------------------------------------------------------------------------- /web/src/assets/icons/arrowLeft.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/public/assets/icons/arrowLeft.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/public/assets/icons/arrowRight.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /web/public/assets/icons/arrowUpLong.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/src/assets/icons/arrowRight.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /web/src/assets/icons/arrowUpLong.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/src/assets/icons/arrowDownLong.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_size = 2 5 | indent_style = space 6 | charset = utf-8 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | max_line_length = 120 11 | 12 | 13 | [*.md] 14 | trim_trailing_whitespace = false 15 | -------------------------------------------------------------------------------- /browser-extension/src/assets/icons/arrowLeft.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /browser-extension/src/assets/icons/arrowRight.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /browser-extension/src/popup/popup.tsx: -------------------------------------------------------------------------------- 1 | import { createRoot } from "react-dom/client"; 2 | import App from "./components/app"; 3 | import "./popup.css"; 4 | 5 | const container = document.getElementById("root") as HTMLDivElement; 6 | const root = createRoot(container); 7 | root.render(); 8 | -------------------------------------------------------------------------------- /web/public/assets/icons/arrowDownLong.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /browser-extension/src/assets/icons/arrowUpLong.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /browser-extension/src/assets/icons/arrowDownLong.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /browser-extension/src/models/storageModel.ts: -------------------------------------------------------------------------------- 1 | export enum StorageKey { 2 | USER_ID = "userId", 3 | NEXT_ID = "nextId", 4 | EXTENSION_STATUS = "extensionStatus", 5 | // deprecated property 6 | CONFIG = "config", 7 | } 8 | 9 | export enum StorageItemType { 10 | RULE = "rule", 11 | } 12 | -------------------------------------------------------------------------------- /browser-extension/src/options/options.tsx: -------------------------------------------------------------------------------- 1 | import { createRoot } from "react-dom/client"; 2 | import App from "./components/app/app"; 3 | import "./options.css"; 4 | 5 | const container = document.getElementById("root") as HTMLDivElement; 6 | const root = createRoot(container); 7 | root.render(); 8 | -------------------------------------------------------------------------------- /web/src/assets/icons/checkCircle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/src/components/sessionPlayer/sessionPlayer.css: -------------------------------------------------------------------------------- 1 | .rr-player, .rr-controller { 2 | background: transparent !important; 3 | } 4 | 5 | .rr-timeline__time, .rr-controller__btns { 6 | color: white !important; 7 | } 8 | 9 | .rr-controller__btns svg { 10 | fill: white !important; 11 | } 12 | -------------------------------------------------------------------------------- /web/public/assets/icons/checkCircle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/src/app/checkCircle.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | -------------------------------------------------------------------------------- /web/src/assets/icons/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /browser-extension/src/assets/icons/checkCircle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/public/assets/icons/redirect.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/public/assets/icons/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/src/assets/icons/redirect.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/src/assets/icons/xCircle.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | -------------------------------------------------------------------------------- /web/public/assets/icons/xCircle.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | -------------------------------------------------------------------------------- /browser-extension/src/assets/icons/redirect.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /browser-extension/src/assets/icons/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /browser-extension/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: ["./src/**/*.{js,jsx,ts,tsx}"], 3 | plugins: [], 4 | theme: { 5 | extend: { 6 | keyframes: { 7 | shimmer: { 8 | "100%": { transform: "translateX(100%)" }, 9 | }, 10 | }, 11 | }, 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /browser-extension/src/assets/icons/xCircle.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | -------------------------------------------------------------------------------- /web/src/assets/icons/block.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/public/assets/icons/block.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /browser-extension/src/options/pages/forms/block/generateBlockRule.ts: -------------------------------------------------------------------------------- 1 | import RuleActionType = chrome.declarativeNetRequest.RuleActionType; 2 | 3 | const generateRule = (fields) => 4 | fields.conditions.map(() => ({ 5 | action: { 6 | type: RuleActionType.BLOCK, 7 | }, 8 | })); 9 | 10 | export default generateRule; 11 | -------------------------------------------------------------------------------- /browser-extension/src/assets/icons/block.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | import Content from "@/components/content/content"; 2 | import Footer from "@/components/footer/footer"; 3 | import Header from "@/components/header/header"; 4 | 5 | export default function Home() { 6 | return ( 7 | <> 8 |
9 | 10 |