Skip to content

Conversation

rupato-deriv
Copy link
Collaborator

🤖 Auto-generated PR

This PR was automatically created by ShiftAI CLI.


fix: remove client id key and consoles

@rupato-deriv
Copy link
Collaborator Author

rupato-deriv commented Sep 30, 2025

🤖 AI Code Analysis Results

📝 Manual Coding

⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%

0 of 241,865 characters (0%) in newly added lines are AI-generated


📊 Analysis Summary

Metric Value
📁 Files Changed 161
New Lines Added 241,865 chars
🤖 AI Characters 0
📈 AI Percentage 0%

📋 Per-File Breakdown (New Lines Only)

File Lines Added AI Content Percentage
.github/pull_request_template.md 417 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...flows/build-and-deploy-production.yml 271 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...orkflows/build-and-deploy-staging.yml 250 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
.github/workflows/claude.yml 161 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
.github/workflows/sync-translations.yml 100 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
.gitignore 169 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
README.md 9229 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
brand.config.json 3341 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
index.html 1397 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
jest.setup.ts 40 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
package-lock.json 0 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
package.json 6846 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
rsbuild.config.ts 918 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
scripts/generate-brand-css.js 7724 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/app/App.tsx 509 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/app/AuthWrapper.tsx 3560 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/app/CoreStoreProvider.tsx 1523 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/app/app-content.jsx 400 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/app/app-root.tsx 140 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...change-modal/account-change-modal.tsx 1346 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ponents/account-change-modal/index.ts 92 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...onents/auth-loading-wrapper/index.tsx 0 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/bot-stopped.tsx 176 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/chat/useLiveChat.ts 0 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/download/download.tsx 2599 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ponents/flyout/flyout-block-group.tsx 2684 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/flyout/flyout.scss 158 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/flyout/flyout.tsx 2499 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ponents/layout/app-logo/app-logo.scss 196 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/layout/app-logo/index.tsx 269 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/layout/footer/index.tsx 815 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...s/layout/header/account-info-icon.tsx 437 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ayout/header/account-info-wrapper.tsx 272 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...s/layout/header/account-switcher.scss 1622 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ts/layout/header/account-switcher.tsx 3082 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ayout/header/common/demo-accounts.tsx 44 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
.../header/common/no-non-eu-accounts.tsx 46 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...onents/layout/header/common/types.tsx 0 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...nents/layout/header/header-config.tsx 157 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/layout/header/header.scss 0 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/layout/header/header.tsx 2559 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...yout/header/menu-items/menu-items.tsx 211 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...-menu/__tests__/menu-content.spec.tsx 232 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...t/header/mobile-menu/menu-content.tsx 1169 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ut/header/mobile-menu/mobile-menu.tsx 644 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...eader/mobile-menu/reports-submenu.tsx 394 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...obile-menu/use-mobile-menu-config.tsx 1868 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...mponents/layout/header/utils/index.js 0 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...nts/layout/header/wallets/wallet.scss 6080 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/layout/index.tsx 255 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...d-modal/google-drive/google-drive.tsx 1025 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/load-modal/load-modal.tsx 90 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...nents/load-modal/recent-workspace.tsx 678 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ts/localStorage-sync-wrapper/index.ts 107 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...wrapper/localStorage-sync-wrapper.tsx 578 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ponents/logout-success-modal/index.ts 92 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...uccess-modal/logout-success-modal.tsx 1154 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/market/market-icon.tsx 440 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/page-error/page-error.tsx 121 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/run-panel/run-panel.tsx 120 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/shared/common/utility.ts 0 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/shared/index.ts 0 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...red/services/trading-times-service.ts 13000 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...components/shared/styles/_themes.scss 538 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...omponents/shared/utils/brand/brand.ts 59 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...omponents/shared/utils/common-data.js 25593 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ponents/shared/utils/config/config.ts 3146 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ts/shared/utils/constants/contract.ts 290 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...nents/shared/utils/constants/error.ts 166 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...nents/shared/utils/constants/index.ts 0 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...hared/utils/contract/contract-info.ts 142 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ared/utils/contract/contract-types.ts 115 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ts/shared/utils/contract/contract.tsx 275 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...s/contract/trade-url-params-config.ts 150 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...nts/shared/utils/currency/currency.ts 48 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ls/digital-options/digital-options.ts 134 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...hared/utils/helpers/active-symbols.ts 2611 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ents/shared/utils/helpers/duration.ts 747 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ared/utils/helpers/format-response.ts 58 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ponents/shared/utils/helpers/logic.ts 119 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ed/utils/helpers/market-underlying.ts 107 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ts/shared/utils/helpers/start-date.ts 233 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...omponents/shared/utils/login/login.ts 130 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ponents/shared/utils/routes/routes.ts 2234 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ents/shared/utils/validation/index.ts 0 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...s/shared/utils/validator/validator.ts 58 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...t-card-items/contract-card-header.tsx 102 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...tract-card-items/turbos-card-body.tsx 153 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...d-items/vanilla-options-card-body.tsx 339 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...age-modal/mobile-full-page-modal.scss 280 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/shared_ui/types/index.ts 228 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/components/summary/summary-card.tsx 284 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ponents/summary/summary-card.types.ts 31 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...s/trade-animation/trade-animation.tsx 956 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...details/desktop-transaction-table.tsx 645 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...n-details/mobile-transaction-card.tsx 621 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...tails/transaction-details-desktop.tsx 113 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...-details/transaction-details.types.ts 77 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...mponents/transactions/transaction.tsx 1265 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...atch/accumulators-proposal-handler.js 169 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...nition/trade_definition_multiplier.js 1696 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...tion/trade_definition_tradeoptions.js 2485 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...external/bot-skeleton/scratch/dbot.js 1905 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ternal/bot-skeleton/scratch/shared.js 876 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...eleton/services/api/account-limits.js 261 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...eleton/services/api/active-symbols.js 12889 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...bot-skeleton/services/api/api-base.ts 14435 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ot-skeleton/services/api/chart-api.js 8995 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...keleton/services/api/contracts-for.js 5021 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...keleton/services/api/trading-times.js 3905 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ervices/tradeEngine/trade/Proposal.js 36 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...n/services/tradeEngine/trade/Ticks.js 62 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...services/tradeEngine/utils/helpers.js 103 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ooks/api/account/useActiveAccount.tsx 1095 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/hooks/auth/useOauth2.ts 221 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/hooks/growthbook/remote_config.json 30 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/hooks/growthbook/useRemoteConfig.ts 522 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/hooks/useApiBase.ts 117 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/hooks/useIntercom.ts 363 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/hooks/useLocalStorageSync.ts 3338 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/hooks/useTrackjs.ts 51 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/main.tsx 359 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ages/bot-builder/toolbox/toolbox.scss 375 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...pages/bot-builder/toolbox/toolbox.tsx 588 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/pages/callback/callback-page.tsx 423 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/pages/chart/chart.tsx 12272 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/pages/chart/toolbar-widgets.tsx 251 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...rd/bot-list/save-modal/save-modal.tsx 1286 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/pages/dashboard/cards.tsx 753 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/pages/dashboard/info-panel.tsx 137 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/pages/dashboard/intro-card.tsx 109 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
.../dashboard/stop-bot-modal-content.tsx 477 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
.../endpoint/__tests__/endpoint.spec.tsx 91 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/pages/main/main.tsx 94 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...ot-tours/common/tour-start-dialog.tsx 138 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/stores/app-store.ts 228 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/stores/blockly-store.ts 550 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/stores/chart-store.ts 6492 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/stores/client-store.ts 1254 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/stores/flyout-store.ts 3296 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/stores/google-drive-store.ts 364 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/stores/root-store.ts 0 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/stores/run-panel-store.ts 494 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/stores/toolbox-store.ts 3280 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/stores/transactions-store.ts 518 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/types/api-types.ts 81 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/types/derivatives-charts.d.ts 2164 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/utils/analytics/index.ts 1795 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/utils/auth-utils.ts 314 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
...tils/browser-performance-optimizer.ts 5741 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/utils/click-rate-limiter.ts 1021 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/utils/download.ts 732 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/utils/index.ts 64 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/utils/mock/contract.ts 154 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/utils/remote_config.json 237 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/utils/session-token-utils.ts 2622 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/utils/store-helpers.tsx 392 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/utils/symbol-display-name.ts 6282 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/utils/url-redirect-utils.ts 1035 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
src/utils/url-utils.ts 473 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%
vercel.dr.json 1 chars 0 chars ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜ 0%

📝 This PR contains traditional hand-written code.

📊 Raw Data (for dashboard)
{
  "timestamp": "2025-09-30T08:11:13.326Z",
  "repository": "deriv-com/derivatives-bot",
  "branch": "unknown",
  "author": "unknown",
  "summary": {
    "totalCharacters": 241865,
    "aiCharacters": 0,
    "percentage": 0
  },
  "files": [
    {
      "name": ".github/pull_request_template.md",
      "totalCharacters": 417,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "## Description\n\n(Brief description of what this PR does)\n\n**Related Issue:** Fixes #(issue)\n\n## Type of Change\n\n- [ ] 🐛 Bug fix\n- [ ] ✨ New feature\n- [ ] 💥 Breaking change\n- [ ] 🔧 Refactoring\n- [ ] 📚 Documentation\n- [ ] 🧪 Tests\n\n## Testing\n\n- [ ] Unit tests pass\n- [ ] Manual testing completed\n- [ ] No console errors\n- [ ] No test needed\n\n## Screenshots\n\n(Add screenshots if UI changes)\n\n**Before:**\n\n**After:**"
    },
    {
      "name": ".github/workflows/build-and-deploy-production.yml",
      "totalCharacters": 271,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "      - production_*\n              uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4\n              uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3\n              uses: actions/cache/restore@638ed79f9dc94c1de1baef91bcab5edaa19451f4"
    },
    {
      "name": ".github/workflows/build-and-deploy-staging.yml",
      "totalCharacters": 250,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "              uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4\n              uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3\n              uses: actions/cache/restore@638ed79f9dc94c1de1baef91bcab5edaa19451f4"
    },
    {
      "name": ".github/workflows/claude.yml",
      "totalCharacters": 161,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4\n        uses: anthropics/claude-code-action@ada5bc42ebb031c1b30d9e12ec73cb7f978b4846"
    },
    {
      "name": ".github/workflows/sync-translations.yml",
      "totalCharacters": 100,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "on:\n  push:\n    branches:\n      - master\n  schedule:\n    - cron: '0 */12 * * *'\n  workflow_dispatch:"
    },
    {
      "name": ".gitignore",
      "totalCharacters": 169,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "\n# AI Rules (generated by ShiftAI CLI)\n.cursorrules\n.clinerules\ncline_instructions.md\n.roo_config.md\n.ai-instructions.md\n.chatgpt-instructions.md\n.claude-instructions.md"
    },
    {
      "name": "README.md",
      "totalCharacters": 9229,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "# Derivatives Bot\n> A modern platform for automated derivatives trading with visual bot building, real-time analytics, and comprehensive tutorials.\n![Prerequisite](https://img.shields.io/badge/node-20.x-blue.svg)\n![Prerequisite](https://img.shields.io/badge/npm-9.x-blue.svg)\n![Build](https://img.shields.io/badge/build-RSBuild-green.svg)\n![Framework](https://img.shields.io/badge/framework-React%2018-blue.svg)\n## Table of Contents\n- [Getting Started](#getting-started)\n    - [Prerequisites](#prereq..."
    },
    {
      "name": "brand.config.json",
      "totalCharacters": 3341,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "{\n    \"brand_name\": \"Deriv\",\n    \"brand_domain\": \"deriv.com\",\n    \"brand_hostname\": {\n        \"staging\": \"staging-home.deriv.com/dashboard\",\n        \"production\": \"home.deriv.com/dashboard\"\n    },\n    \"domain_name\": \"Deriv.com\",\n    \"colors\": {\n        \"primary\": \"#ff444f\",\n        \"secondary\": \"#85acb0\",\n        \"tertiary\": \"#2a3052\",\n        \"success\": \"#4bb4b3\",\n        \"danger\": \"#cc2e3d\",\n        \"warning\": \"#ffad3a\",\n        \"info\": \"#377cfc\",\n        \"neutral\": \"#999999\",\n        \"black\":..."
    },
    {
      "name": "index.html",
      "totalCharacters": 1397,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "<html lang=\"en\" dir=\"auto\" class=\"light\">\n        <!-- Google Tag Manager -->\n        <script>\n            (function (w, d, s, l, i) {\n                w[l] = w[l] || [];\n                w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });\n                var f = d.getElementsByTagName(s)[0],\n                    j = d.createElement(s),\n                    dl = l != 'dataLayer' ? '&l=' + l : '';\n                j.async = true;\n                j.src = 'https://www.googletagmanager.com..."
    },
    {
      "name": "jest.setup.ts",
      "totalCharacters": 40,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        json: () => Promise.resolve({}),"
    },
    {
      "name": "package-lock.json",
      "totalCharacters": 0,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "only-deletions",
      "hasAddedContent": false,
      "addedContent": ""
    },
    {
      "name": "package.json",
      "totalCharacters": 6846,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "  \"name\": \"bot\",\n  \"private\": true,\n  \"version\": \"0.0.1\",\n  \"engines\": {\n    \"node\": \"20.x\"\n  },\n  \"scripts\": {\n    \"start\": \"rsbuild dev -o\",\n    \"build\": \"rsbuild build\",\n    \"watch\": \"rsbuild build --watch\",\n    \"serve\": \"http-server dist -p 8443 -a localhost -o\",\n    \"start:webpack\": \"webpack serve --open --config webpack.config.js\",\n    \"build:webpack\": \"webpack --config webpack.config.js\",\n    \"test:lint\": \"prettier --log-level silent --write . && eslint \\\"./src/**/*.?(js|jsx|ts|tsx)\\\"\",\n ..."
    },
    {
      "name": "rsbuild.config.ts",
      "totalCharacters": 918,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "                //GD_CLIENT_ID: JSON.stringify(process.env.GD_CLIENT_ID),\n                //GD_APP_ID: JSON.stringify(process.env.GD_APP_ID),\n                RUDDERSTACK_KEY: JSON.stringify(\n                    process.env.APP_ENV === 'production'\n                        ? process.env.RUDDERSTACK_KEY_PROD\n                        : process.env.RUDDERSTACK_KEY_DEV\n                ),\n                from: 'node_modules/@deriv-com/derivatives-charts/dist/*',\n            { from: 'node_modules/@deriv-..."
    },
    {
      "name": "scripts/generate-brand-css.js",
      "totalCharacters": 7724,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "const fs = require('fs');\nconst path = require('path');\n\n// Import brand configuration from project root\nconst brandConfig = require('../brand.config.json');\n\n// Main function to update brand colors in _themes.scss\nconst updateBrandColorsInThemes = () => {\n    const themesPath = path.join(__dirname, '../src/components/shared/styles/_themes.scss');\n\n    if (!fs.existsSync(themesPath)) {\n        console.error('❌ _themes.scss file not found');\n        process.exit(1);\n    }\n\n    // Read the current..."
    },
    {
      "name": "src/app/App.tsx",
      "totalCharacters": 509,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import LocalStorageSyncWrapper from '@/components/localStorage-sync-wrapper';\n    cdnUrl: `${TRANSLATIONS_CDN_URL || 'https://translations.deriv.com'}/${R2_PROJECT_NAME}/${CROWDIN_BRANCH_NAME}`,\n                            <LocalStorageSyncWrapper>\n                                <RoutePromptDialog />\n                                <CoreStoreProvider>\n                                    <Layout />\n                                </CoreStoreProvider>\n                            </LocalStorageSyn..."
    },
    {
      "name": "src/app/AuthWrapper.tsx",
      "totalCharacters": 3560,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import ErrorModal from '@/components/error-modal';\nimport PageError from '@/components/page-error';\nimport { getAuthError, getDefaultError } from '@/components/shared/utils/constants/error';\n    setIsAuthComplete: React.Dispatch<React.SetStateAction<boolean>>,\n    setTokenError: React.Dispatch<React.SetStateAction<string | null>>,\n    setIsAuthError: React.Dispatch<React.SetStateAction<boolean>>\n    // Extract token and account_type from URL params\n    const urlParams = new URLSearchParams(windo..."
    },
    {
      "name": "src/app/CoreStoreProvider.tsx",
      "totalCharacters": 1523,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { TSocketResponseData } from '@/types/api-types';\nimport { clearInvalidTokenParams } from '@/utils/url-utils';\n    const isLoggedOutCookie = Cookies.get('logged_state') === 'false';\n        if (client && activeAccount && isAuthorized) {\n        } else if (client && !isAuthorized) {\n            // Ensure client shows as not logged in until authorization is complete\n            client?.setIsLoggedIn(false);\n    }, [accountList, activeAccount, activeLoginid, client, isAuthorized]);\n    }, [c..."
    },
    {
      "name": "src/app/app-content.jsx",
      "totalCharacters": 400,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { setSmartChartsPublicPath } from '@deriv-com/derivatives-charts';\n\n        is_client_store_initialized: client?.is_logged_in ? true : !!client,\n        email: '',\n        first_name: '',\n        last_name: '',\n        if (client.is_logged_in && is_api_initialized) {\n    }, [is_api_initialized, client.loginid]);\n        <ChunkLoader message={localize('Initializing Deriv Bot account...')} />"
    },
    {
      "name": "src/app/app-root.tsx",
      "totalCharacters": 140,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import LogoutSuccessModal from '@/components/logout-success-modal';\n    // Initialize API\n    }, []);\n                <LogoutSuccessModal />"
    },
    {
      "name": "src/components/account-change-modal/account-change-modal.tsx",
      "totalCharacters": 1346,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import React from 'react';\nimport { Modal } from '@deriv-com/quill-ui-next';\nimport { useTranslations } from '@deriv-com/translations';\n\ntype TAccountChangeModalProps = {\n    isOpen: boolean;\n    onReload: () => void;\n    onClose: () => void;\n};\n\nconst AccountChangeModal: React.FC<TAccountChangeModalProps> = ({ isOpen, onReload, onClose }) => {\n    const { localize } = useTranslations();\n\n    const handleClose = () => {\n        // If user clicks outside or closes modal, reload anyway\n        onC..."
    },
    {
      "name": "src/components/account-change-modal/index.ts",
      "totalCharacters": 92,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import AccountChangeModal from './account-change-modal';\n\nexport default AccountChangeModal;"
    },
    {
      "name": "src/components/auth-loading-wrapper/index.tsx",
      "totalCharacters": 0,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "only-deletions",
      "hasAddedContent": false,
      "addedContent": ""
    },
    {
      "name": "src/components/bot-stopped.tsx",
      "totalCharacters": 176,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { generateUrlWithRedirect } from '@/utils/url-redirect-utils';\n            onCancel={() => (window.location.href = generateUrlWithRedirect(standalone_routes.positions))}"
    },
    {
      "name": "src/components/chat/useLiveChat.ts",
      "totalCharacters": 0,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "only-deletions",
      "hasAddedContent": false,
      "addedContent": ""
    },
    {
      "name": "src/components/download/download.tsx",
      "totalCharacters": 2599,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { downloadFile, getSuccessJournalMessage } from '@/utils/download';\nimport { getSymbolDisplayNameSync } from '@/utils/symbol-display-name';\n        transaction_list.forEach((transaction: any) => {\n            const data = transaction.data || transaction;\n\n            // Handle both old and new API structures\n            const market_name = data.display_name || getSymbolDisplayNameSync(data.underlying_symbol || '');\n\n            // Transaction IDs - new API structure\n            const buy_..."
    },
    {
      "name": "src/components/flyout/flyout-block-group.tsx",
      "totalCharacters": 2684,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { browserOptimizer } from '@/utils/browser-performance-optimizer';\nimport { clickRateLimiter } from '@/utils/click-rate-limiter';\n                    // Safari-specific rate limiting and operation queuing for block additions with reduced lag\n                    if (browserOptimizer.isSafariBrowser() && !clickRateLimiter.canClick()) {\n                        console.warn('Block add click rate limit exceeded');\n                        return;\n                    }\n\n                    const..."
    },
    {
      "name": "src/components/flyout/flyout.scss",
      "totalCharacters": 158,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    &__loading {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        padding: 2rem;\n        min-height: 100px;\n    }\n"
    },
    {
      "name": "src/components/flyout/flyout.tsx",
      "totalCharacters": 2499,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { browserOptimizer } from '@/utils/browser-performance-optimizer';\nimport { clickRateLimiter } from '@/utils/click-rate-limiter';\n                                            // Safari-specific rate limiting and operation queuing with reduced lag\n                                            if (browserOptimizer.isSafariBrowser() && !clickRateLimiter.canClick()) {\n                                                console.warn('Flyout button click rate limit exceeded');\n                        ..."
    },
    {
      "name": "src/components/layout/app-logo/app-logo.scss",
      "totalCharacters": 196,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "// [AI]\n\n        // Only show border on desktop when menu links are present\n        @media (width >= 768px) {\n            border-inline-end: 1px solid var(--general-section-1);\n        }\n\n// [/AI]"
    },
    {
      "name": "src/components/layout/app-logo/index.tsx",
      "totalCharacters": 269,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { DerivLogo } from '@deriv-com/ui';\n    // Always go to the new home dashboard, regardless of login state\n    // Logo now shows on both desktop and mobile\n    return <DerivLogo className='app-header__logo' href={standalone_routes.deriv_app} variant='wallets' />;"
    },
    {
      "name": "src/components/layout/footer/index.tsx",
      "totalCharacters": 815,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "// import useModalManager from '@/hooks/useModalManager';\n// import { getActiveTabUrl } from '@/utils/getActiveTabUrl';\n// import { LANGUAGES } from '@/utils/languages';\n// import { useTranslations } from '@deriv-com/translations';\n// import { DesktopLanguagesModal } from '@deriv-com/ui';\n// import LanguageSettings from './LanguageSettings';\n    // const { currentLang = 'EN', localize, switchLanguage } = useTranslations();\n    // const { hideModal, isModalOpenFor, showModal } = useModalManager()..."
    },
    {
      "name": "src/components/layout/header/account-info-icon.tsx",
      "totalCharacters": 437,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import React from 'react';\nimport { CurrencyIcon } from '@/components/currency/currency-icon';\n\ntype TAccountInfoIcon = {\n    is_virtual?: boolean;\n    currency?: string;\n};\n\nconst AccountInfoIcon = ({ is_virtual, currency }: TAccountInfoIcon) => {\n    return (\n        <span className='acc-info__id-icon'>\n            <CurrencyIcon currency={currency} isVirtual={is_virtual} />\n        </span>\n    );\n};\n\nexport default AccountInfoIcon;"
    },
    {
      "name": "src/components/layout/header/account-info-wrapper.tsx",
      "totalCharacters": 272,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    is_mobile?: boolean;\n    children: React.ReactNode;\nconst AccountInfoWrapper = ({ is_disabled, children }: TAccountInfoWrapper) => {\n    return (\n        <div className={`account-info-wrapper ${is_disabled ? 'account-info-wrapper--disabled' : ''}`}>{children}</div>\n};"
    },
    {
      "name": "src/components/layout/header/account-switcher.scss",
      "totalCharacters": 1622,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    cursor: default;\n    padding: 0 1.6rem;\n    &:hover {\n        background: transparent !important;\n    }\n\n    &__content {\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n    }\n\n    &__account-type-header {\n        display: flex;\n        align-items: center;\n        margin-bottom: 0.2rem;\n    }\n\n    &__account-type {\n        @include typeface(--xxsmall-left-normal-grey);\n\n        line-height: 1;\n        margin: 0;\n        font-size: var(--text-size-xxs)..."
    },
    {
      "name": "src/components/layout/header/account-switcher.tsx",
      "totalCharacters": 3082,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import React from 'react';\nimport classNames from 'classnames';\nimport { getCurrencyDisplayCode } from '@/components/shared';\nimport Text from '@/components/shared_ui/text';\nimport { Localize, localize } from '@deriv-com/translations';\nimport { useDevice } from '@deriv-com/ui';\nimport { TAccountSwitcher } from './common/types';\nimport AccountInfoIcon from './account-info-icon';\nimport AccountInfoWrapper from './account-info-wrapper';\n    if (!activeAccount) return null;\n    const { currency, isV..."
    },
    {
      "name": "src/components/layout/header/common/demo-accounts.tsx",
      "totalCharacters": 44,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { convertCommaValue } from './utils';"
    },
    {
      "name": "src/components/layout/header/common/no-non-eu-accounts.tsx",
      "totalCharacters": 46,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "                            has_wallet: false,"
    },
    {
      "name": "src/components/layout/header/common/types.tsx",
      "totalCharacters": 0,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "only-deletions",
      "hasAddedContent": false,
      "addedContent": ""
    },
    {
      "name": "src/components/layout/header/header-config.tsx",
      "totalCharacters": 157,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { generateUrlWithRedirect } from '@/utils/url-redirect-utils';\n\n    label: 'Home',\n        href: generateUrlWithRedirect(standalone_routes.positions),"
    },
    {
      "name": "src/components/layout/header/header.scss",
      "totalCharacters": 0,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "only-deletions",
      "hasAddedContent": false,
      "addedContent": ""
    },
    {
      "name": "src/components/layout/header/header.tsx",
      "totalCharacters": 2559,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { useCallback, useEffect } from 'react';\n    const { isAuthorizing, isAuthorized, activeLoginid, setIsAuthorizing } = useApiBase();\n    const { getCurrency, is_virtual } = client ?? {};\n    const { isSingleLoggingIn, oAuthLogout } = useOauth2({ handleLogout: async () => client?.logout(), client });\n    const handleLogout = useCallback(async () => {\n        try {\n            await oAuthLogout();\n        } catch (error) {\n            console.error('Logout failed:', error);\n            // St..."
    },
    {
      "name": "src/components/layout/header/menu-items/menu-items.tsx",
      "totalCharacters": 211,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    // Use all menu items (no filtering for wallet accounts)\n    const filtered_items = items;\n            has_wallet: false,\n    }, [store?.client?.is_virtual, store?.client?.residence, hubEnabledCountryList]);"
    },
    {
      "name": "src/components/layout/header/mobile-menu/__tests__/menu-content.spec.tsx",
      "totalCharacters": 232,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        expect(screen.getByText(/Reports/)).toBeInTheDocument();\n        expect(screen.getByText(/Dark theme/)).toBeInTheDocument();\n        const text = screen.getByText(/Reports/);\n        const text = screen.getByText(/Reports/);"
    },
    {
      "name": "src/components/layout/header/mobile-menu/menu-content.tsx",
      "totalCharacters": 1169,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    onLogout?: () => void;\nconst MenuContent = observer(({ onOpenSubmenu, onLogout }: TMenuContentProps) => {\n    const { config } = useMobileMenuConfig(client, onLogout);\n                    const isLastSection = index === config.length - 1;\n                                'mobile-menu__content__items--bottom-border': !removeBorderBottom && !isLastSection,\n                                (\n                                    {\n                                        LeftComponent,\n             ..."
    },
    {
      "name": "src/components/layout/header/mobile-menu/mobile-menu.tsx",
      "totalCharacters": 644,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { Drawer, useDevice } from '@deriv-com/ui';\ntype TMobileMenuProps = {\n    onLogout?: () => void;\n};\n\nconst MobileMenu = ({ onLogout }: TMobileMenuProps) => {\n    const { localize } = useTranslations();\n                    <MenuHeader hideLanguageSetting={true} openLanguageSetting={() => {}} />\n                    {activeSubmenu === 'reports' ? (\n                        <MenuContent\n                            onOpenSubmenu={openSubmenu}\n                            onLogout={() => {\n      ..."
    },
    {
      "name": "src/components/layout/header/mobile-menu/reports-submenu.tsx",
      "totalCharacters": 394,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { generateUrlWithRedirect } from '@/utils/url-redirect-utils';\nimport { LegacyOpenPositionIcon, LegacyProfitTableIcon, LegacyStatementIcon } from '@deriv/quill-icons/Legacy';\n            href: generateUrlWithRedirect(standalone_routes.positions),\n            href: generateUrlWithRedirect(standalone_routes.profit),\n            href: generateUrlWithRedirect(standalone_routes.statement),"
    },
    {
      "name": "src/components/layout/header/mobile-menu/use-mobile-menu-config.tsx",
      "totalCharacters": 1868,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { ComponentProps, ReactNode, useEffect, useMemo, useState } from 'react';\nimport { useFirebaseCountriesConfig } from '@/hooks/firebase/useFirebaseCountriesConfig';\nimport { handleTraderHubRedirect } from '@/utils/traders-hub-redirect';\nimport { LegacyLogout1pxIcon, LegacyReportsIcon, LegacyTheme1pxIcon } from '@deriv/quill-icons/Legacy';\nconst useMobileMenuConfig = (client?: RootStore['client'], onLogout?: () => void) => {\n    const { hubEnabledCountryList } = useFirebaseCountriesConfig()..."
    },
    {
      "name": "src/components/layout/header/utils/index.js",
      "totalCharacters": 0,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "only-deletions",
      "hasAddedContent": false,
      "addedContent": ""
    },
    {
      "name": "src/components/layout/header/wallets/wallet.scss",
      "totalCharacters": 6080,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "            'mobile': radial-gradient(\n            'desktop': radial-gradient(\n            'mobile': radial-gradient(\n            'desktop': radial-gradient(\n                'mobile': radial-gradient(\n                'mobile': radial-gradient(\n                'desktop': radial-gradient(\n                'mobile': radial-gradient(\n                'desktop': radial-gradient(\n                'mobile': radial-gradient(\n                'desktop': radial-gradient(\n                'mobile': radial-gradi..."
    },
    {
      "name": "src/components/layout/index.tsx",
      "totalCharacters": 255,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { useEffect, useState } from 'react';\n        // Authentication is now handled by the OAuth flow\n        setIsAuthenticating(false);\n    }, [isLoggedInCookie, isClientAccountsPopulated, isEndpointPage, isCallbackPage, clientHasCurrency, currency]);"
    },
    {
      "name": "src/components/load-modal/google-drive/google-drive.tsx",
      "totalCharacters": 1025,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "// import { DerivLightGoogleDriveIcon } from '@deriv/quill-icons/Illustration'; // Commented out - Google Drive token not finalized\n                {/* <DerivLightGoogleDriveIcon\n                /> */}\n                {/* Commented out - Google Drive token not finalized */}\n                <div\n                    className={classnames('load-strategy__google-drive-icon', {\n                        'load-strategy__google-drive-icon--disabled': !is_authorised,\n                    })}\n              ..."
    },
    {
      "name": "src/components/load-modal/load-modal.tsx",
      "totalCharacters": 90,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "// import GoogleDrive from './google-drive'; // Removed - Google Drive token not finalized"
    },
    {
      "name": "src/components/load-modal/recent-workspace.tsx",
      "totalCharacters": 678,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { /* DerivLightGoogleDriveIcon, */ DerivLightMyComputerIcon } from '@deriv/quill-icons/Illustration'; // Google Drive icon commented out - token not finalized\n//export const getRecentFileIcon = (save_type: string, class_name: string = ''): React.ReactElement => {\nexport const getRecentFileIcon = (save_type: string): React.ReactElement => {\n        // Placeholder for Google Drive icon\n            // <DerivLightGoogleDriveIcon className={class_name} height='16px' width='16px' fill='var(--te..."
    },
    {
      "name": "src/components/localStorage-sync-wrapper/index.ts",
      "totalCharacters": 107,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import LocalStorageSyncWrapper from './localStorage-sync-wrapper';\n\nexport default LocalStorageSyncWrapper;"
    },
    {
      "name": "src/components/localStorage-sync-wrapper/localStorage-sync-wrapper.tsx",
      "totalCharacters": 578,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import React from 'react';\nimport AccountChangeModal from '@/components/account-change-modal';\nimport { useLocalStorageSync } from '@/hooks/useLocalStorageSync';\n\nconst LocalStorageSyncWrapper: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n    const { showAccountChangeModal, handleReload, handleModalClose } = useLocalStorageSync();\n\n    return (\n        <>\n            <AccountChangeModal isOpen={showAccountChangeModal} onReload={handleReload} onClose={handleModalClose} />\n       ..."
    },
    {
      "name": "src/components/logout-success-modal/index.ts",
      "totalCharacters": 92,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import LogoutSuccessModal from './logout-success-modal';\n\nexport default LogoutSuccessModal;"
    },
    {
      "name": "src/components/logout-success-modal/logout-success-modal.tsx",
      "totalCharacters": 1154,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import React from 'react';\nimport { observer } from 'mobx-react-lite';\nimport { useStore } from '@/hooks/useStore';\nimport { Modal } from '@deriv-com/quill-ui-next';\nimport { useTranslations } from '@deriv-com/translations';\n\nconst LogoutSuccessModal: React.FC = observer(() => {\n    const { localize } = useTranslations();\n    const { client } = useStore();\n\n    const handleClose = () => {\n        client.setShowLogoutSuccessModal(false);\n    };\n\n    if (!client.show_logout_success_modal) return n..."
    },
    {
      "name": "src/components/market/market-icon.tsx",
      "totalCharacters": 440,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    '1HZ15V': lazy(() =>\n        import('@deriv/quill-icons/Markets').then(module => ({ default: module.MarketDerivedVolatility151sIcon }))\n    ),\n    '1HZ30V': lazy(() =>\n        import('@deriv/quill-icons/Markets').then(module => ({ default: module.MarketDerivedVolatility301sIcon }))\n    ),\n    '1HZ90V': lazy(() =>\n        import('@deriv/quill-icons/Markets').then(module => ({ default: module.MarketDerivedVolatility901sIcon }))\n    ),"
    },
    {
      "name": "src/components/page-error/page-error.tsx",
      "totalCharacters": 121,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { standalone_routes } from '@/components/shared';\n            window.location.assign(standalone_routes.deriv_app);"
    },
    {
      "name": "src/components/run-panel/run-panel.tsx",
      "totalCharacters": 120,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    }, [is_drawer_open, isDesktop]);\n        onRunButtonClick, // eslint-disable-line @typescript-eslint/no-unused-vars\n"
    },
    {
      "name": "src/components/shared/common/utility.ts",
      "totalCharacters": 0,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "only-deletions",
      "hasAddedContent": false,
      "addedContent": ""
    },
    {
      "name": "src/components/shared/index.ts",
      "totalCharacters": 0,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "only-deletions",
      "hasAddedContent": false,
      "addedContent": ""
    },
    {
      "name": "src/components/shared/services/trading-times-service.ts",
      "totalCharacters": 13000,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "class TradingTimesService {\n    private trading_times_cache: any = null;\n    private cache_expiry: number = 0;\n    private readonly CACHE_DURATION = 5 * 60 * 1000; // 5 minutes\n\n    /**\n     * Get trading times data with caching\n     */\n    async getTradingTimes(): Promise<any> {\n        const now = Date.now();\n\n        // Return cached data if still valid\n        if (this.trading_times_cache && now < this.cache_expiry && this.trading_times_cache.markets) {\n            return this.trading_times_..."
    },
    {
      "name": "src/components/shared/styles/_themes.scss",
      "totalCharacters": 538,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    /* Brand colors - dynamically generated from brand.config.json */\n    --brand-white: #fff;\n    --brand-dark-grey: #151717;\n    --brand-red-coral: #ff444f; /* legacy compatibility */\n    --brand-orange: #2a3052; /* legacy compatibility */\n\n    /* Dynamic brand colors (set by brand configuration) */\n    --brand-primary: #ff444f;\n    --brand-secondary: #85acb0;\n    --brand-tertiary: #2a3052;\n    --brand-success: #4bb4b3;\n    --brand-danger: #cc2e3d;\n    --brand-warning: #ffad3a;\n    --brand-inf..."
    },
    {
      "name": "src/components/shared/utils/brand/brand.ts",
      "totalCharacters": 59,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import config_data from '../../../../../brand.config.json';"
    },
    {
      "name": "src/components/shared/utils/common-data.js",
      "totalCharacters": 25593,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "/**\n * Common Data Utilities\n *\n * This file contains centralized data constants and utility functions\n * to improve maintainability and provide consistent data across components.\n */\n\n// Trading Times Data\nexport const TRADING_TIMES = {\n    // Trading times for major symbols\n    SYMBOLS: [\n        // Forex - 24/5 markets\n        'frxEURUSD',\n        'frxGBPUSD',\n        'frxUSDJPY',\n        'frxAUDUSD',\n        'frxUSDCAD',\n        'frxUSDCHF',\n        'frxNZDUSD',\n        'frxEURGBP',\n        ..."
    },
    {
      "name": "src/components/shared/utils/config/config.ts",
      "totalCharacters": 3146,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import brandConfig from '../../../../../brand.config.json';\n// Simple environment detection based on hostname\nconst getCurrentEnvironment = (): 'staging' | 'production' => {\n    try {\n        const hostname = window.location.hostname;\n        if (hostname.includes('localhost') || hostname.includes('staging')) {\n            return 'staging';\n        }\n        return 'production';\n    } catch (error) {\n        console.error('Error detecting environment:', error);\n        return 'production'; // Sa..."
    },
    {
      "name": "src/components/shared/utils/constants/contract.ts",
      "totalCharacters": 290,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        WLDXAU: localize('Gold Basket'),\n        OTC_IBEX35: localize('Spain 35'),\n        OTC_SPX500: localize('US 500'),\n        '1HZ15V': localize('Volatility 15 (1s) Index'),\n        '1HZ30V': localize('Volatility 30 (1s) Index'),\n        '1HZ90V': localize('Volatility 90 (1s) Index'),"
    },
    {
      "name": "src/components/shared/utils/constants/error.ts",
      "totalCharacters": 166,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "export const getAuthError = () => ({\n    header: localize('The token is invalid'),\n    description: localize('Please log in'),\n    cta_label: localize('Log in'),\n});\n"
    },
    {
      "name": "src/components/shared/utils/constants/index.ts",
      "totalCharacters": 0,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "only-deletions",
      "hasAddedContent": false,
      "addedContent": ""
    },
    {
      "name": "src/components/shared/utils/contract/contract-info.ts",
      "totalCharacters": 142,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        entry_spot: 2415.18,\n        underlying_symbol: '1HZ100V',\n        exit_spot: 2420.45,\n        entry_spot_time: '2023-11-20 17:00:00',"
    },
    {
      "name": "src/components/shared/utils/contract/contract-types.ts",
      "totalCharacters": 115,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        underlying_symbol?: string;\n        exit_spot?: string | number;\n        entry_spot_time?: string | number;"
    },
    {
      "name": "src/components/shared/utils/contract/contract.tsx",
      "totalCharacters": 275,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    underlying_symbol: string;\n    underlying_symbol,\n    if (has_default_timeout || !tick_update_timestamp) return getAccuBarriersDefaultTimeout(underlying_symbol);\n        tick_update_timestamp + getAccuBarriersDefaultTimeout(underlying_symbol) + ANIMATION_CORRECTION_TIME;"
    },
    {
      "name": "src/components/shared/utils/contract/trade-url-params-config.ts",
      "totalCharacters": 150,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        const isSymbolValid = active_symbols.some(\n            item => (item as any).underlying_symbol === symbol || item.symbol === symbol\n        );"
    },
    {
      "name": "src/components/shared/utils/currency/currency.ts",
      "totalCharacters": 48,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "const currencies_config: TCurrenciesConfig = {};"
    },
    {
      "name": "src/components/shared/utils/digital-options/digital-options.ts",
      "totalCharacters": 134,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "export const isEuResidenceWithOnlyVRTC = () => {\n    // Always return false - EU restrictions now handled by backend\n    return false;"
    },
    {
      "name": "src/components/shared/utils/helpers/active-symbols.ts",
      "totalCharacters": 2611,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    // Handle both old and new field names for backward compatibility\n    const getSymbolField = (item: any) => item.underlying_symbol || item.symbol;\n    return active_symbols.filter(x => getSymbolField(x) === symbol)[0]\n        ? !active_symbols.filter(symbol_info => getSymbolField(symbol_info) === symbol)[0].exchange_is_open\n            active_symbols.find(\n                symbol_info =>\n                    (symbol_info as any).underlying_symbol === client_fav_symbol ||\n                    sy..."
    },
    {
      "name": "src/components/shared/utils/helpers/duration.ts",
      "totalCharacters": 747,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    start_type?: string; // Field may not be available in API response anymore\n    // Default to 'spot' if start_type is not available (field deprecated in API)\n    const start_type = contract.start_type || 'spot';\n\n    durations.units_display[start_type as keyof typeof durations.units_display] =\n        durations.units_display[start_type as keyof typeof durations.units_display] || [];\n\n    const duration_min_max = durations.min_max[start_type as keyof typeof durations.min_max];\n    durations.mi..."
    },
    {
      "name": "src/components/shared/utils/helpers/format-response.ts",
      "totalCharacters": 58,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { ProfitTable, Statement } from '@deriv/api-types';"
    },
    {
      "name": "src/components/shared/utils/helpers/logic.ts",
      "totalCharacters": 119,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { AccountListResponse, TickSpotData } from '@deriv/api-types';\n    symbol === contract_info.underlying_symbol &&"
    },
    {
      "name": "src/components/shared/utils/helpers/market-underlying.ts",
      "totalCharacters": 107,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    const pattern = /^([A-Z]+)_((1HZ[0-9-V]+)|((CRASH|BOOM)\\d+[A-Z]?)|(OTC_[A-Z0-9]+)|R_[\\d]{2,3}|[A-Z]+)/;"
    },
    {
      "name": "src/components/shared/utils/helpers/start-date.ts",
      "totalCharacters": 233,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    // forward_starting_options field may not be available in API response anymore\n    if (contract.forward_starting_options && contract.forward_starting_options.length) {\n        contract.forward_starting_options.forEach(option => {"
    },
    {
      "name": "src/components/shared/utils/login/login.ts",
      "totalCharacters": 130,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { generateSignupURL } from '../config';\nimport { urlForCurrentDomain } from '../url';\n    window.open(generateSignupURL());"
    },
    {
      "name": "src/components/shared/utils/routes/routes.ts",
      "totalCharacters": 2234,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "type Service = 'derivCom' | 'smartTrader' | 'derivHub' | 'derivHome' | 'derivDtrader';\n    derivHome: {\n        staging: 'https://staging-home.deriv.com',\n        production: {\n            me: 'https://home.deriv.com', // No .me domain yet, using .com\n            be: 'https://home.deriv.com', // No .be domain yet, using .com\n            com: 'https://home.deriv.com',\n        },\n    },\n    derivDtrader: {\n        staging: 'https://staging-dtrader.deriv.com',\n        production: {\n            me: ..."
    },
    {
      "name": "src/components/shared/utils/validation/index.ts",
      "totalCharacters": 0,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "only-deletions",
      "hasAddedContent": false,
      "addedContent": ""
    },
    {
      "name": "src/components/shared/utils/validator/validator.ts",
      "totalCharacters": 58,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "                    ? (rule.options.min?.toString() ?? '')"
    },
    {
      "name": "src/components/shared_ui/contract-card/contract-card-items/contract-card-header.tsx",
      "totalCharacters": 102,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        underlying_symbol,\n                    <MarketIcon type={underlying_symbol ?? ''} size='md' />"
    },
    {
      "name": "src/components/shared_ui/contract-card/contract-card-items/turbos-card-body.tsx",
      "totalCharacters": 153,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    const { bid_price, buy_price, profit, barrier, entry_spot, limit_order = {}, sell_price } = contract_info;\n                    {addComma(entry_spot)}"
    },
    {
      "name": "src/components/shared_ui/contract-card/contract-card-items/vanilla-options-card-body.tsx",
      "totalCharacters": 339,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    const { buy_price, bid_price, entry_spot, barrier, sell_price, profit }: TContractInfo = contract_info;\n                    <ContractCardItem header={ENTRY_SPOT}>{entry_spot && addComma(entry_spot)}</ContractCardItem>\n                        <ContractCardItem header={ENTRY_SPOT}>{entry_spot && addComma(entry_spot)}</ContractCardItem>"
    },
    {
      "name": "src/components/shared_ui/mobile-full-page-modal/mobile-full-page-modal.scss",
      "totalCharacters": 280,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "                background-color: var(--general-main-1);\n\n                &-wrapper {\n                    display: flex;\n                    align-items: center;\n                    justify-content: space-between;\n                    padding: 1rem 1.6rem 1rem 0;\n                }"
    },
    {
      "name": "src/components/shared_ui/types/index.ts",
      "totalCharacters": 228,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { TAccordionItem, TAccordionProps } from './accordion.types';\nimport { TDatePickerOnChangeEvent, TGetCardLables, TGetContractTypeDisplay } from './common.types';\nimport { TIconProps, TIconsManifest } from './icons.types';"
    },
    {
      "name": "src/components/summary/summary-card.tsx",
      "totalCharacters": 284,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { getSymbolDisplayNameSync } from '@/utils/symbol-display-name';\n            display_name={\n                (contract_info as any)?.underlying_symbol\n                    ? getSymbolDisplayNameSync((contract_info as any).underlying_symbol)\n                    : ''\n            }"
    },
    {
      "name": "src/components/summary/summary-card.types.ts",
      "totalCharacters": 31,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    underlying_symbol?: string;"
    },
    {
      "name": "src/components/trade-animation/trade-animation.tsx",
      "totalCharacters": 956,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    const { contract_stage, is_stop_button_visible, is_stop_button_disabled, onRunButtonClick, onStopBotClick } =\n        run_panel;\n    const is_unavailable_for_payment_agent = false;\n    }, [is_stop_button_visible, is_stop_button_disabled]);\n    // Use a fallback to dashboard if active_tab is undefined\n    const safeActiveTab = typeof active_tab === 'number' ? active_tab : DBOT_TABS.DASHBOARD;\n                        // Map tab index to proper subpage name\n                        const subpage..."
    },
    {
      "name": "src/components/transaction-details/desktop-transaction-table.tsx",
      "totalCharacters": 645,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { getSymbolDisplayNameSync } from '@/utils/symbol-display-name';\n                                            message={\n                                                data?.display_name ||\n                                                getSymbolDisplayNameSync(data?.underlying_symbol || '')\n                                            }\n                                            icon={<MarketIcon type={data?.underlying_symbol} size='sm' />}\n                                <TableCell labe..."
    },
    {
      "name": "src/components/transaction-details/mobile-transaction-card.tsx",
      "totalCharacters": 621,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { getSymbolDisplayNameSync } from '@/utils/symbol-display-name';\n                                message={\n                                    transaction?.display_name ||\n                                    getSymbolDisplayNameSync(transaction?.underlying_symbol || '')\n                                }\n                                icon={<MarketIcon type={transaction?.underlying_symbol} size='md' />}\n                    label={transaction?.entry_spot}\n                    loader={!trans..."
    },
    {
      "name": "src/components/transaction-details/transaction-details-desktop.tsx",
      "totalCharacters": 113,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    { key: 'entry_spot', label: localize('Entry spot') },\n    { key: 'exit_spot', label: localize('Exit spot') },"
    },
    {
      "name": "src/components/transaction-details/transaction-details.types.ts",
      "totalCharacters": 77,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    entry_spot: string;\n    exit_spot: string;\n    underlying_symbol: string;"
    },
    {
      "name": "src/components/transactions/transaction.tsx",
      "totalCharacters": 1265,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { getSymbolDisplayNameSync } from '@/utils/symbol-display-name';\n        {contract.entry_spot && (\n                <div className='transactions__popover-value'>{contract.entry_spot}</div>\n        {(contract.exit_spot && contract.exit_tick_time && (\n                <div className='transactions__popover-value'>{contract.exit_spot}</div>\n            (contract.exit_spot && (\n                    <div className='transactions__popover-value'>{contract.exit_spot}</div>\n                           ..."
    },
    {
      "name": "src/external/bot-skeleton/scratch/accumulators-proposal-handler.js",
      "totalCharacters": 169,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    underlying_symbol: undefined,\n    const underlying_symbol = market_block?.getFieldValue('SYMBOL_LIST');\n        underlying_symbol,\n        underlying_symbol: symbol,"
    },
    {
      "name": "src/external/bot-skeleton/scratch/blocks/Binary/Trade Definition/trade_definition_multiplier.js",
      "totalCharacters": 1696,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "                    if (multiplier_range && multiplier_range.length > 0) {\n                    } else {\n                        // If no multiplier range available, set default fallback options\n                        console.warn('DEBUG: No multiplier range available, using fallback options');\n                        const multiplier_list_dropdown = this.getField('MULTIPLIERTYPE_LIST');\n                        const fallback_options = [\n                            ['100', '100'],\n              ..."
    },
    {
      "name": "src/external/bot-skeleton/scratch/blocks/Binary/Trade Definition/trade_definition_tradeoptions.js",
      "totalCharacters": 2485,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { DURATIONS } from '../../../../../../components/shared/utils/common-data';\n        const { currency } = DBotStore.instance.client;\n\n        account_limits.getStakePayoutLimits(currency, undefined, this.selected_market).then(limits => {\n            contracts_for\n                .getDurations(this.selected_symbol, this.selected_trade_type)\n                .then(durations => {\n                    // Use fallback if no durations received\n                    if (!durations || durations.length..."
    },
    {
      "name": "src/external/bot-skeleton/scratch/dbot.js",
      "totalCharacters": 1905,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "                        contracts_for\n                            ?.getTradeTypeCategories?.(market, submarket, symbol)\n                            .then(categories => {\n                                const category_field = this.getField('TRADETYPECAT_LIST');\n                                if (category_field) {\n                                    category_field.updateOptions(categories, {\n                                        default_value: category,\n                                        s..."
    },
    {
      "name": "src/external/bot-skeleton/scratch/shared.js",
      "totalCharacters": 876,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { getContractTypeOptions as getContractTypeOptionsFromCommon } from '../../../components/shared/utils/common-data';\n    // First try to get from config\n    if (trade_type && trade_type !== 'na' && trade_type !== '') {\n        const trade_types = config().opposites[trade_type.toUpperCase()];\n        if (trade_types) {\n            const contract_options = trade_types.map(type => Object.entries(type)[0].reverse());\n            // When user selected a specific contract, only return the contra..."
    },
    {
      "name": "src/external/bot-skeleton/services/api/account-limits.js",
      "totalCharacters": 261,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { getAccountLimits } from '../../../../components/shared/utils/common-data';\n\n    getStakePayoutLimits(currency = 'AUD', selected_market) {\n        // Use common data instead of duplicating here\n        return getAccountLimits(currency, selected_market);"
    },
    {
      "name": "src/external/bot-skeleton/services/api/active-symbols.js",
      "totalCharacters": 12889,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import {\n    MARKET_MAPPINGS,\n    MARKET_OPTIONS,\n    SUBMARKET_OPTIONS,\n    SYMBOL_OPTIONS,\n    TRADING_TIMES,\n} from '../../../../components/shared/utils/common-data';\n    clearCache() {\n        this.active_symbols = [];\n        this.processed_symbols = {};\n        this.is_initialised = false;\n        this.init_promise = new PendingPromise();\n    }\n\n        // Also create chart-specific processed symbols\n        // this.chart_processed_symbols = this.getProcessedSymbolsForChart();\n\n        if ..."
    },
    {
      "name": "src/external/bot-skeleton/services/api/api-base.ts",
      "totalCharacters": 14435,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { setSessionToken } from '@/utils/session-token-utils';\nimport { clearInvalidTokenParams } from '@/utils/url-utils';\nimport { tradingTimesService } from '../../../../components/shared/services/trading-times-service';\nimport { ACTIVE_SYMBOLS, generateDisplayName, MARKET_MAPPINGS } from '../../../../components/shared/utils/common-data';\n\n    active_symbols: any[] = [];\n    active_symbols_promise: Promise<any[] | undefined> | null = null;\n        const accountType = urlParams.get('account_ty..."
    },
    {
      "name": "src/external/bot-skeleton/services/api/chart-api.js",
      "totalCharacters": 8995,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    chart_active_symbols = null; // Separate variable for chart-specific symbols\n\n            // Intercept the send method to filter active_symbols responses for chart\n            // this.interceptApiCalls();\n\n            // Force inject symbols after a short delay to ensure api_base is ready\n            // this.forceInjectSymbols();\n\n    // /**\n    //  * Intercept API calls to filter active_symbols responses specifically for chart\n    //  */\n    // interceptApiCalls = () => {\n    //     if (!th..."
    },
    {
      "name": "src/external/bot-skeleton/services/api/contracts-for.js",
      "totalCharacters": 5021,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { DURATIONS, TRADE_TYPE_CATEGORIES, TRADE_TYPES } from '../../../../components/shared/utils/common-data';\n                    // barrier_category field may not be available in API response anymore\n                    const has_matching_barrier_category =\n                        !c.barrier_category || c.barrier_category === barrier_category;\n        // barrier_category field may not be available in API response anymore\n        // const barrier_category = this.getBarrierCategoryByTradeType(..."
    },
    {
      "name": "src/external/bot-skeleton/services/api/trading-times.js",
      "totalCharacters": 3905,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { getTradingTimes, TRADING_TIMES } from '../../../../components/shared/utils/common-data';\nimport { api_base } from './api-base';\n        try {\n            // Check if API is available\n            if (!api_base.api && !this.ws) {\n                this.setTradingTimes();\n                return;\n            }\n            const response = await (api_base.api?.send({ trading_times: last_update_date }) ||\n                this.ws?.send({ trading_times: last_update_date }));\n            if (respo..."
    },
    {
      "name": "src/external/bot-skeleton/services/tradeEngine/trade/Proposal.js",
      "totalCharacters": 36,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "                'underlying_symbol',"
    },
    {
      "name": "src/external/bot-skeleton/services/tradeEngine/trade/Ticks.js",
      "totalCharacters": 62,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "                underlying_symbol: this?.tradeOptions?.symbol,"
    },
    {
      "name": "src/external/bot-skeleton/services/tradeEngine/utils/helpers.js",
      "totalCharacters": 103,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "            underlying_symbol: trade_option.symbol,\n            underlying_symbol: trade_option.symbol,"
    },
    {
      "name": "src/hooks/api/account/useActiveAccount.tsx",
      "totalCharacters": 1095,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        if (!activeAccount) return undefined;\n\n        // Check if account should be treated as virtual/demo\n        // Use localStorage account_type as the source of truth for demo vs real\n        const savedAccountType = localStorage.getItem('account_type');\n        const isVirtual = Boolean(activeAccount?.is_virtual) || savedAccountType === 'demo';\n\n        return {\n            ...activeAccount,\n            balance: currentBalanceData?.balance\n                ? addComma(currentBalanceData.bal..."
    },
    {
      "name": "src/hooks/auth/useOauth2.ts",
      "totalCharacters": 221,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "            if (handleLogout) {\n                await handleLogout();\n            }\n            await client?.logout();\n\n        // OAuth2 login is now handled by redirecting to OAuth URL\n        window.location.reload();"
    },
    {
      "name": "src/hooks/growthbook/remote_config.json",
      "totalCharacters": 30,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    \"cs_chat_intercom\": false,"
    },
    {
      "name": "src/hooks/growthbook/useRemoteConfig.ts",
      "totalCharacters": 522,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "\n    // Check if URL is properly configured - always use fallback instead of throwing\n    if (!REMOTE_CONFIG_URL || REMOTE_CONFIG_URL === '' || REMOTE_CONFIG_URL === 'undefined') {\n        console.warn('Remote Config URL not properly configured, using default fallback');\n        return initData;\n\n        console.warn('Remote Config Server is not reachable, using default fallback');\n        return initData;\n        if (enabled) {\n                    // Don't rethrow - just log and continue with f..."
    },
    {
      "name": "src/hooks/useApiBase.ts",
      "totalCharacters": 117,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    return { connectionStatus, isAuthorized, isAuthorizing, accountList, authData, activeLoginid, setIsAuthorizing };"
    },
    {
      "name": "src/hooks/useIntercom.ts",
      "totalCharacters": 363,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import useRemoteConfig from './growthbook/useRemoteConfig';\n    const { data } = useRemoteConfig(true);\n    const { cs_chat_intercom } = data;\n    const scriptStatus = useScript(cs_chat_intercom ? intercom_script : null);\n        if (!cs_chat_intercom || scriptStatus !== 'ready' || !window?.DerivInterCom) return;\n    }, [cs_chat_intercom, scriptStatus, token]);"
    },
    {
      "name": "src/hooks/useLocalStorageSync.ts",
      "totalCharacters": 3338,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { useEffect, useRef, useState } from 'react';\nimport {\n    removeSessionToken as removeSessionTokenUtil,\n    setSessionToken as setSessionTokenUtil,\n} from '@/utils/session-token-utils';\nimport { useStore } from './useStore';\n\n/**\n * Custom hook to sync localStorage changes across tabs\n * Specifically monitors 'session_token' changes from other tabs and refreshes the page\n *\n * How it works:\n * - The 'storage' event only fires on other tabs/windows when localStorage is modified\n * - It do..."
    },
    {
      "name": "src/hooks/useTrackjs.ts",
      "totalCharacters": 51,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "                    application: 'derivatives-bot',"
    },
    {
      "name": "src/main.tsx",
      "totalCharacters": 359,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { configure } from 'mobx';\n// Configure MobX to handle multiple instances in production builds and disable strict mode warnings\nconfigure({\n    isolateGlobalState: true,\n    enforceActions: 'never',\n    computedRequiresReaction: false,\n    reactionRequiresObservable: false,\n    observableRequiresReaction: false,\n    disableErrorBoundaries: true,\n});\n"
    },
    {
      "name": "src/pages/bot-builder/toolbox/toolbox.scss",
      "totalCharacters": 375,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        user-select: none; // Prevent text selection on rapid clicks\n        user-select: none; // Prevent text selection on rapid clicks\n\n        &--pending {\n            background-color: var(--general-active);\n            opacity: 0.8;\n        }\n\n            &--pending {\n                background-color: var(--general-active);\n                opacity: 0.8;\n            }"
    },
    {
      "name": "src/pages/bot-builder/toolbox/toolbox.tsx",
      "totalCharacters": 588,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    const [pending_selection] = React.useState<string | null>(null);\n                                                    'db-toolbox__row--pending':\n                                                        pending_selection === category?.getAttribute('id'),\n                                                                            'db-toolbox__sub-category-row--pending':\n                                                                                pending_selection ===\n                        ..."
    },
    {
      "name": "src/pages/callback/callback-page.tsx",
      "totalCharacters": 423,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { clearInvalidTokenParams } from '@/utils/url-utils';\n                            // Clear URL query parameters and set is_token_set to true to prevent the app from getting stuck in loading state\n                            clearInvalidTokenParams();\n                            // Emit the InvalidToken event for handling by the application\n                            if (Cookies.get('logged_state') === 'true') {\n"
    },
    {
      "name": "src/pages/chart/chart.tsx",
      "totalCharacters": 12272,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { api_base } from '@/external/bot-skeleton';\nimport { ChartTitle, SmartChart } from '@deriv-com/derivatives-charts';\nimport '@deriv-com/derivatives-charts/dist/smartcharts.css';\n    const [forceChartRefresh, setForceChartRefresh] = useState(0);\n\n    useEffect(() => {\n        // FORCE INJECT 1s volatility indices directly into api_base.active_symbols\n        if (api_base.active_symbols && Array.isArray(api_base.active_symbols)) {\n            let symbols = [...api_base.active_symbols];\n\n   ..."
    },
    {
      "name": "src/pages/chart/toolbar-widgets.tsx",
      "totalCharacters": 251,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { ChartMode, DrawTools, Share, StudyLegend, ToolbarWidget, Views } from '@deriv-com/derivatives-charts';\n    const validPosition = position === 'top' || position === 'bottom' ? position : 'top';\n\n        <ToolbarWidget position={validPosition}>"
    },
    {
      "name": "src/pages/dashboard/bot-list/save-modal/save-modal.tsx",
      "totalCharacters": 1286,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { config } from '@/external/bot-skeleton';\n    // DerivLightGoogleDriveIcon, // Commented out - Google Drive token not finalized\n        {({ touched, errors }) => {\n                                {localize('Enter your bot name, choose to save on your computer, and hit ')}\n                                {/* Using existing CSS classes for proper styling */}\n                                <div className='radio-group__save-type'>\n                                    <div className='dc-radio..."
    },
    {
      "name": "src/pages/dashboard/cards.tsx",
      "totalCharacters": 753,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    // DerivLightGoogleDriveIcon, // Commented out - Google Drive token not finalized\n        // Google Drive option removed - token not finalized by other teams\n        // {\n        //     id: 'google-drive',\n        //     icon: <DerivLightGoogleDriveIcon height='48px' width='48px' />,\n        //     content: <Localize i18n_default_text='Google Drive' />,\n        //     callback: () => {\n        //         openGoogleDriveDialog();\n        //         rudderStackSendOpenEvent({\n        //       ..."
    },
    {
      "name": "src/pages/dashboard/info-panel.tsx",
      "totalCharacters": 137,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "\n        if (is_info_panel_visible) {\n            setIsTourOpen(true);\n            setIsTourOpen(false);\n    }, [is_info_panel_visible]);"
    },
    {
      "name": "src/pages/dashboard/intro-card.tsx",
      "totalCharacters": 109,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "            {content?.map(text => (\n                <p key={`sidebar-tour${text}`}>{text}</p>\n            ))}"
    },
    {
      "name": "src/pages/dashboard/stop-bot-modal-content.tsx",
      "totalCharacters": 477,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { generateUrlWithRedirect } from '@/utils/url-redirect-utils';\n                                    onClick={() =>\n                                        window.location.assign(generateUrlWithRedirect(standalone_routes.reports))\n                                    }\n                                    onClick={() =>\n                                        window.location.assign(generateUrlWithRedirect(standalone_routes.reports))\n                                    }"
    },
    {
      "name": "src/pages/endpoint/__tests__/endpoint.spec.tsx",
      "totalCharacters": 91,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        expect(localStorage.getItem('config.server_url') ?? '').toBe('demov2.derivws.com');"
    },
    {
      "name": "src/pages/main/main.tsx",
      "totalCharacters": 94,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    const handleLoginGeneration = () => {\n        window.location.replace(generateOAuthURL());"
    },
    {
      "name": "src/pages/tutorials/dbot-tours/common/tour-start-dialog.tsx",
      "totalCharacters": 138,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        if (is_tour_dialog_visible) {\n            setIsTourOpen(true);\n            setIsTourOpen(false);\n    }, [is_tour_dialog_visible]);"
    },
    {
      "name": "src/stores/app-store.ts",
      "totalCharacters": 228,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { action, makeObservable, reaction } from 'mobx';\n\n\n        const { ui } = this.core;\n\n\n        // Country code no longer available from removed get_settings API\n        // Previously set up residence change reaction here"
    },
    {
      "name": "src/stores/blockly-store.ts",
      "totalCharacters": 550,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { action, computed, makeObservable, observable, runInAction } from 'mobx';\n        const workspace = (window as any).Blockly?.derivWorkspace;\n            // Use runInAction to update observable property\n            runInAction(() => {\n                this._has_saved_bots = Array.isArray(workspaces) && workspaces.length > 0;\n            });\n            runInAction(() => {\n                this._has_saved_bots = false;\n            });\n            runInAction(() => {\n                this.acti..."
    },
    {
      "name": "src/stores/chart-store.ts",
      "totalCharacters": 6492,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "        const symbol =\n            market_block?.getFieldValue('SYMBOL_LIST') ??\n            (api_base?.active_symbols[0]\n                ? (api_base.active_symbols[0] as any).underlying_symbol || (api_base.active_symbols[0] as any).symbol\n                : undefined);\n    getMarketsOrder = (active_symbols: any[]) => {\n        if (!active_symbols || !Array.isArray(active_symbols)) {\n            return [synthetic_index];\n        }\n\n\n        // Define the exact order we want for volatility indices..."
    },
    {
      "name": "src/stores/client-store.ts",
      "totalCharacters": 1254,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { isEmptyObject } from '@/components/shared';\nimport { isMultipliersOnly, isOptionsBlocked } from '@/components/shared/common/utility';\nimport { observer } from '@/external/bot-skeleton';\nimport type { TAuthData } from '@/types/api-types';\nimport { getSessionToken, removeSessionToken, setSessionToken } from '@/utils/session-token-utils';\nimport type { Balance } from '@deriv/api-types';\n\n    show_logout_success_modal = false;\n            setSessionToken(token);\n        return getSessionTok..."
    },
    {
      "name": "src/stores/flyout-store.ts",
      "totalCharacters": 3296,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { browserOptimizer } from '@/utils/browser-performance-optimizer';\n    flyout_width_timer: ReturnType<typeof setTimeout> | undefined = undefined;\n        // Enhanced cleanup on unmount to prevent memory leaks\n        this.cleanupBlockWorkspaces();\n        this.flyout_content = [];\n        this.selected_category = null;\n\n        // Clean up flyout width timer\n        if (this.flyout_width_timer) {\n            clearTimeout(this.flyout_width_timer);\n            this.flyout_width_timer = unde..."
    },
    {
      "name": "src/stores/google-drive-store.ts",
      "totalCharacters": 364,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { config } from '@/external/bot-skeleton';\n        //NOTE : TO be done later when we get the tokens\n        // setTimeout(() => {\n        //     importExternal('https://accounts.google.com/gsi/client').then(() => this.initialiseClient());\n        //     importExternal('https://apis.google.com/js/api.js').then(() => this.initialise());\n        // }, 3000);"
    },
    {
      "name": "src/stores/root-store.ts",
      "totalCharacters": 0,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "only-deletions",
      "hasAddedContent": false,
      "addedContent": "\n"
    },
    {
      "name": "src/stores/run-panel-store.ts",
      "totalCharacters": 494,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { generateUrlWithRedirect } from '@/utils/url-redirect-utils';\n            const baseUrl = `${standalone_routes.positions}?contract_type_bots=${contract_type}`;\n            // Use generateUrlWithRedirect to add redirect parameter and account_type from localStorage\n            const urlWithRedirect = generateUrlWithRedirect(baseUrl);\n            window.location.assign(urlWithRedirect);\n        const { summary_card } = this.root_store;\n        const { summary_card } = this.root_store;"
    },
    {
      "name": "src/stores/toolbox-store.ts",
      "totalCharacters": 3280,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { browserOptimizer } from '@/utils/browser-performance-optimizer';\nimport { clickRateLimiter } from '@/utils/click-rate-limiter';\n    click_debounce_timer: ReturnType<typeof setTimeout> | undefined = undefined;\n    last_clicked_category: string | null = null;\n    workspace_adjust_timer: ReturnType<typeof setTimeout> | undefined = undefined;\n    is_adjusting_workspace = false;\n        // Clean up timers to prevent memory leaks\n        if (this.typing_timer) {\n            clearTimeout(this...."
    },
    {
      "name": "src/stores/transactions-store.ts",
      "totalCharacters": 518,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "                const contract = data as TContractInfo;\n                const profit = Number(contract.profit) || 0;\n                const is_completed = contract.is_completed || false;\n                const buy_price = Number(contract.buy_price) || 0;\n                const payout = Number(contract.payout) || Number(contract.bid_price) || 0;\n                const bid_price = Number(contract.bid_price) || 0;\n\n            entry_tick: data.entry_spot,\n            exit_tick: (data as any).exit_spot ..."
    },
    {
      "name": "src/types/api-types.ts",
      "totalCharacters": 81,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "\n\n\n\n\n\n\n\n\n\n\n\n    balance: number;\n\n    local_currencies: Record<string, unknown>;\n"
    },
    {
      "name": "src/types/derivatives-charts.d.ts",
      "totalCharacters": 2164,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "declare module '@deriv-com/derivatives-charts' {\n    import { ComponentType, ReactNode } from 'react';\n\n    export interface SmartChartProps {\n        id?: string;\n        barriers?: any[];\n        showLastDigitStats?: boolean;\n        chartControlsWidgets?: any;\n        enabledChartFooter?: boolean;\n        stateChangeListener?: (state: string, option?: any) => void;\n        chartStatusListener?: (status: boolean) => void;\n        toolbarWidget?: () => ReactNode;\n        chartType?: string;\n   ..."
    },
    {
      "name": "src/utils/analytics/index.ts",
      "totalCharacters": 1795,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    try {\n        // Get account type from localStorage, fallback to demo if missing\n        const savedAccountType = localStorage.getItem('account_type');\n        const account_type = savedAccountType || 'demo';\n\n        // Only try to fetch remote config if URL is properly configured\n        const hasValidRemoteConfigUrl =\n            process.env.REMOTE_CONFIG_URL &&\n            process.env.REMOTE_CONFIG_URL !== '' &&\n            process.env.REMOTE_CONFIG_URL !== 'undefined';\n\n        let flag..."
    },
    {
      "name": "src/utils/auth-utils.ts",
      "totalCharacters": 314,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { removeSessionToken } from '@/utils/session-token-utils';\n\nexport const clearAuthData = () => {\n    removeSessionToken();\n    localStorage.removeItem('account_type'); // Clear account type when clearing auth data\n    localStorage.removeItem('clientAccounts');\n    localStorage.removeItem('callback_token');"
    },
    {
      "name": "src/utils/browser-performance-optimizer.ts",
      "totalCharacters": 5741,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "/**\n * Browser-specific performance optimizations\n * Safari and Firefox have unique performance characteristics that require special handling\n */\n\nclass BrowserPerformanceOptimizer {\n    private static instance: BrowserPerformanceOptimizer;\n    private isSafari: boolean;\n    private isFirefox: boolean;\n    private needsOptimization: boolean;\n    private pendingOperations: Set<string> = new Set();\n    private operationQueue: Array<() => void> = [];\n    private isProcessingQueue = false;\n    priva..."
    },
    {
      "name": "src/utils/click-rate-limiter.ts",
      "totalCharacters": 1021,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "/**\n * Global click throttler to prevent Safari freezing issues\n * This utility uses throttling instead of debouncing for better Safari performance\n */\n\nclass ClickThrottler {\n    private static instance: ClickThrottler;\n    private lastClickTime = 0;\n    private readonly throttleDelay = 500; // 500ms throttle for Safari protection\n\n    private constructor() {}\n\n    public static getInstance(): ClickThrottler {\n        if (!ClickThrottler.instance) {\n            ClickThrottler.instance = new Cli..."
    },
    {
      "name": "src/utils/download.ts",
      "totalCharacters": 732,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "    display_name?: string;\n    underlying_symbol?: string;\n    transaction_ids?: { buy: string; sell: string };\n    barrier?: string;\n    date_start?: string;\n    purchase_time?: string;\n    entry_spot?: string;\n    entry_tick_time?: string;\n    entry_spot_time?: string;\n    exit_spot?: string;\n    exit_tick_time?: string;\n    exit_spot_time?: string;\n    buy_price?: string | number;\n    profit?: string | number;\n    // Additional fields from new API\n    contract_id?: number;\n    contract_type?:..."
    },
    {
      "name": "src/utils/index.ts",
      "totalCharacters": 64,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "\nexport { generateUrlWithRedirect } from './url-redirect-utils';"
    },
    {
      "name": "src/utils/mock/contract.ts",
      "totalCharacters": 154,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "export const mock_contract = {\n    underlying_symbol: 'EURUSD',\n    entry_spot: 1.2345,\n    exit_spot: 1.6789,\n    entry_spot_time: '2023-12-01 17:00:00',"
    },
    {
      "name": "src/utils/remote_config.json",
      "totalCharacters": 237,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "{\n    \"cs_chat_livechat\": true,\n    \"cs_chat_whatsapp\": true,\n    \"marketing_growthbook\": true,\n    \"passkeys\": true,\n    \"tracking_GTM\": true,\n    \"tracking_datadog\": true,\n    \"tracking_hotjar\": true,\n    \"tracking_rudderstack\": true\n}"
    },
    {
      "name": "src/utils/session-token-utils.ts",
      "totalCharacters": 2622,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import Cookies from 'js-cookie';\n\n/**\n * Get the wildcard domain for cookies (e.g., \".deriv.com\" from \"staging.deriv.com\")\n * This allows cookies to be shared across subdomains\n */\nconst getWildcardDomain = (): string => {\n    try {\n        return '.' + window.location.hostname.split('.').slice(-2).join('.');\n    } catch (error) {\n        console.error('Error getting wildcard domain:', error);\n        return '';\n    }\n};\n\n/**\n * Set session token in both localStorage and cookies\n * @param token ..."
    },
    {
      "name": "src/utils/store-helpers.tsx",
      "totalCharacters": 392,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { standalone_routes } from '@/components/shared';\nimport { generateUrlWithRedirect } from '@/utils/url-redirect-utils';\n                <a\n                    key={0}\n                    className='link'\n                    rel='noopener noreferrer'\n                    target='_blank'\n                    href={generateUrlWithRedirect(standalone_routes.positions)}\n                />,"
    },
    {
      "name": "src/utils/symbol-display-name.ts",
      "totalCharacters": 6282,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "import { tradingTimesService } from '@/components/shared/services/trading-times-service';\n\n/**\n * Get display name for a symbol from underlying_symbol\n * @param underlying_symbol - The underlying symbol code (e.g., \"1HZ100V\", \"frxEURUSD\")\n * @returns Promise<string> - The display name (e.g., \"Volatility 100 (1s) Index\", \"EUR/USD\")\n */\nexport const getSymbolDisplayName = async (underlying_symbol: string): Promise<string> => {\n    if (!underlying_symbol) {\n        return '';\n    }\n\n    try {\n     ..."
    },
    {
      "name": "src/utils/url-redirect-utils.ts",
      "totalCharacters": 1035,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "/**\n * Generate URL with redirect parameter back to current page and account_type if available\n * @param baseUrl - The base URL to add parameters to\n * @returns URL with redirect parameter to current page and account_type parameter (excluding query params)\n */\nexport const generateUrlWithRedirect = (baseUrl: string): string => {\n    try {\n        // Use origin + pathname to exclude query parameters\n        const currentUrl = window.location.origin + window.location.pathname;\n        const url = ..."
    },
    {
      "name": "src/utils/url-utils.ts",
      "totalCharacters": 473,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "/**\n * Clears all query parameters from URL when invalid token is detected\n */\nexport const clearInvalidTokenParams = (): void => {\n    try {\n        const url = new URL(window.location.href);\n        // Clear all query parameters by creating empty search params\n        const newUrl = `${url.pathname}${url.hash}`;\n        window.history.replaceState({}, '', newUrl);\n    } catch (error) {\n        console.error('Error clearing all URL query parameters:', error);\n    }\n};"
    },
    {
      "name": "vercel.dr.json",
      "totalCharacters": 1,
      "aiCharacters": 0,
      "percentage": 0,
      "status": "modified",
      "hasAddedContent": true,
      "addedContent": "}"
    }
  ]
}

🚀 Analysis powered by ShiftAI • Analyzes only PR changes, not entire files

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants