Full Code of usebruno/bruno for AI

main 37be72192285 cached
2445 files
8.9 MB
2.5M tokens
1483 symbols
1 requests
Download .txt
Showing preview only (9,872K chars total). Download the full file or copy to clipboard to get everything.
Repository: usebruno/bruno
Branch: main
Commit: 37be72192285
Files: 2445
Total size: 8.9 MB

Directory structure:
gitextract_14_o08yk/

├── .coderabbit.yaml
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── BugReport.yaml
│   │   ├── FeatureRequest.yaml
│   │   └── config.yaml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── actions/
│   │   ├── common/
│   │   │   └── setup-node-deps/
│   │   │       └── action.yml
│   │   ├── ssl/
│   │   │   ├── linux/
│   │   │   │   ├── run-basic-ssl-cli-tests/
│   │   │   │   │   └── action.yml
│   │   │   │   ├── run-custom-ca-certs-cli-tests/
│   │   │   │   │   └── action.yml
│   │   │   │   ├── run-ssl-e2e-tests/
│   │   │   │   │   └── action.yml
│   │   │   │   ├── setup-ca-certs/
│   │   │   │   │   └── action.yml
│   │   │   │   └── setup-feature-specific-deps/
│   │   │   │       └── action.yml
│   │   │   ├── macos/
│   │   │   │   ├── run-basic-ssl-cli-tests/
│   │   │   │   │   └── action.yml
│   │   │   │   ├── run-custom-ca-certs-cli-tests/
│   │   │   │   │   └── action.yml
│   │   │   │   ├── run-ssl-e2e-tests/
│   │   │   │   │   └── action.yml
│   │   │   │   ├── setup-ca-certs/
│   │   │   │   │   └── action.yml
│   │   │   │   └── setup-feature-specific-deps/
│   │   │   │       └── action.yml
│   │   │   └── windows/
│   │   │       ├── run-basic-ssl-cli-tests/
│   │   │       │   └── action.yml
│   │   │       ├── run-custom-ca-certs-cli-tests/
│   │   │       │   └── action.yml
│   │   │       ├── run-ssl-e2e-tests/
│   │   │       │   └── action.yml
│   │   │       └── setup-ca-certs/
│   │   │           └── action.yml
│   │   └── tests/
│   │       ├── run-cli-tests/
│   │       │   └── action.yml
│   │       ├── run-e2e-tests/
│   │       │   └── action.yml
│   │       └── run-unit-tests/
│   │           └── action.yml
│   ├── dependabot.yml
│   ├── scripts/
│   │   ├── comment-on-flaky-tests.js
│   │   └── detect-flaky-tests.js
│   └── workflows/
│       ├── flaky-test-detector.yml
│       ├── lint-checks.yml
│       ├── npm-bru-cli.yml
│       ├── ssl-tests.yml
│       └── tests.yml
├── .gitignore
├── .husky/
│   └── pre-commit
├── .nvmrc
├── CODING_STANDARDS.md
├── contributing.md
├── docs/
│   ├── contributing/
│   │   ├── contributing_bn.md
│   │   ├── contributing_cn.md
│   │   ├── contributing_de.md
│   │   ├── contributing_es.md
│   │   ├── contributing_fa.md
│   │   ├── contributing_fr.md
│   │   ├── contributing_hi.md
│   │   ├── contributing_it.md
│   │   ├── contributing_ja.md
│   │   ├── contributing_kr.md
│   │   ├── contributing_nl.md
│   │   ├── contributing_pl.md
│   │   ├── contributing_pt_br.md
│   │   ├── contributing_ro.md
│   │   ├── contributing_ru.md
│   │   ├── contributing_sk.md
│   │   ├── contributing_tr.md
│   │   ├── contributing_ua.md
│   │   └── contributing_zhtw.md
│   ├── playwright-testing-guide.md
│   ├── publishing/
│   │   ├── publishing_bn.md
│   │   ├── publishing_cn.md
│   │   ├── publishing_de.md
│   │   ├── publishing_fa.md
│   │   ├── publishing_fr.md
│   │   ├── publishing_ja.md
│   │   ├── publishing_nl.md
│   │   ├── publishing_pl.md
│   │   ├── publishing_pt_br.md
│   │   ├── publishing_ro.md
│   │   ├── publishing_tr.md
│   │   └── publishing_zhtw.md
│   └── readme/
│       ├── readme_ar.md
│       ├── readme_bn.md
│       ├── readme_cn.md
│       ├── readme_de.md
│       ├── readme_es.md
│       ├── readme_fa.md
│       ├── readme_fr.md
│       ├── readme_hi.md
│       ├── readme_it.md
│       ├── readme_ja.md
│       ├── readme_ka.md
│       ├── readme_kr.md
│       ├── readme_nl.md
│       ├── readme_pl.md
│       ├── readme_pt_br.md
│       ├── readme_ro.md
│       ├── readme_ru.md
│       ├── readme_tr.md
│       ├── readme_ua.md
│       └── readme_zhtw.md
├── eslint.config.js
├── license.md
├── package.json
├── packages/
│   ├── bruno-app/
│   │   ├── .babelrc
│   │   ├── .gitignore
│   │   ├── babel.config.js
│   │   ├── jest.config.js
│   │   ├── jest.setup.js
│   │   ├── jsconfig.json
│   │   ├── package.json
│   │   ├── postcss.config.js
│   │   ├── public/
│   │   │   ├── static/
│   │   │   │   └── diff2Html.js
│   │   │   └── theme/
│   │   │       ├── dark.js
│   │   │       ├── index.js
│   │   │       └── light.js
│   │   ├── rsbuild.config.mjs
│   │   ├── src/
│   │   │   ├── components/
│   │   │   │   ├── Accordion/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── styledWrapper.js
│   │   │   │   ├── ApiSpecPanel/
│   │   │   │   │   ├── FileEditor/
│   │   │   │   │   │   └── CodeEditor/
│   │   │   │   │   │       ├── Plugins/
│   │   │   │   │   │       │   └── Yaml/
│   │   │   │   │   │       │       └── index.js
│   │   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │   │       └── index.js
│   │   │   │   │   ├── Renderers/
│   │   │   │   │   │   └── Swagger/
│   │   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │   │       └── index.js
│   │   │   │   │   ├── SpecViewer.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── AppTitleBar/
│   │   │   │   │   ├── AppMenu/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── BodyModeSelector/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Bruno/
│   │   │   │   │   └── index.js
│   │   │   │   ├── BrunoSupport/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── BulkEditor/
│   │   │   │   │   └── index.js
│   │   │   │   ├── Checkbox/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── CodeEditor/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.spec.js
│   │   │   │   ├── CodeMirrorSearch/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── CollectionSettings/
│   │   │   │   │   ├── Auth/
│   │   │   │   │   │   ├── ApiKeyAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── AuthMode/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── AwsV4Auth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── BasicAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── BearerAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── DigestAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── NTLMAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── OAuth2/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── WsseAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ClientCertSettings/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Docs/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Headers/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Overview/
│   │   │   │   │   │   ├── Info/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── RequestsNotLoaded/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Presets/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Protobuf/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ProxySettings/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Script/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── Tests/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Vars/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── VarsTable/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ColorBadge/
│   │   │   │   │   └── index.js
│   │   │   │   ├── ColorPicker/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ColorRange/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Cookies/
│   │   │   │   │   ├── ModifyCookieModal/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── CreateTransientRequest/
│   │   │   │   │   └── index.js
│   │   │   │   ├── CreateUntitledRequest/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── DeprecationWarning/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Devtools/
│   │   │   │   │   ├── Console/
│   │   │   │   │   │   ├── DebugTab/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ErrorDetailsPanel/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── NetworkTab/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── RequestDetailsPanel/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── TerminalTab/
│   │   │   │   │   │   │   ├── SessionList.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Performance/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Documentation/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Dropdown/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── EditableTable/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── EnvironmentVariablesTable/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Environments/
│   │   │   │   │   ├── CollapsibleSection/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Common/
│   │   │   │   │   │   ├── ExportEnvironmentModal/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── ImportEnvironmentModal/
│   │   │   │   │   │       └── index.js
│   │   │   │   │   ├── ConfirmCloseEnvironment/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── DotEnvFileDetails/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── DotEnvFileEditor/
│   │   │   │   │   │   ├── DotEnvEmptyState.js
│   │   │   │   │   │   ├── DotEnvErrorMessage.js
│   │   │   │   │   │   ├── DotEnvRawView.js
│   │   │   │   │   │   ├── DotEnvTableView.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── utils.js
│   │   │   │   │   ├── EnvironmentSelector/
│   │   │   │   │   │   ├── EnvironmentListContent/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── EnvironmentSettings/
│   │   │   │   │   │   ├── CopyEnvironment/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── CreateEnvironment/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── DeleteDotEnvFile/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── DeleteEnvironment/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── EnvironmentList/
│   │   │   │   │   │   │   ├── EnvironmentDetails/
│   │   │   │   │   │   │   │   ├── EnvironmentVariables/
│   │   │   │   │   │   │   │   │   ├── constants.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── GlobalEnvironmentSettings/
│   │   │   │   │       └── index.js
│   │   │   │   ├── ErrorCapture/
│   │   │   │   │   └── index.js
│   │   │   │   ├── Errors/
│   │   │   │   │   └── IpcErrorModal/
│   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │       └── index.js
│   │   │   │   ├── FilePickerEditor/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── FolderSettings/
│   │   │   │   │   ├── Auth/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── AuthMode/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Documentation/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Headers/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Script/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── Tests/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Vars/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── VarsTable/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Git/
│   │   │   │   │   ├── GitNotFoundModal/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── VisualDiffViewer/
│   │   │   │   │       ├── CollapsibleDiffRow.js
│   │   │   │   │       ├── VisualDiffAuth.js
│   │   │   │   │       ├── VisualDiffBody.js
│   │   │   │   │       ├── VisualDiffContent/
│   │   │   │   │       │   ├── StyledWrapper.js
│   │   │   │   │       │   └── index.js
│   │   │   │   │       ├── VisualDiffHeaders.js
│   │   │   │   │       ├── VisualDiffParams.js
│   │   │   │   │       ├── VisualDiffUrlBar.js
│   │   │   │   │       └── utils/
│   │   │   │   │           ├── bruUtils.js
│   │   │   │   │           ├── bruUtils.spec.js
│   │   │   │   │           ├── diffUtils.js
│   │   │   │   │           └── diffUtils.spec.js
│   │   │   │   ├── GlobalSearchModal/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── constants/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── utils/
│   │   │   │   │       └── searchUtils.js
│   │   │   │   ├── Help/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Icons/
│   │   │   │   │   ├── CloseAll/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Dot/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ExampleIcon/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Grpc/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── IconAlertTriangleFilled/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── IconBottombarToggle/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── IconCaretDown/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── IconCheckMark/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── IconEdit/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── IconSidebarToggle/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── InfoCircle/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── OpenAPILogo/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── OpenAPISync/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── OpenCollectionIcon/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── QuestionCircle/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── Send/
│   │   │   │   │       └── index.js
│   │   │   │   ├── InfoTip/
│   │   │   │   │   └── index.js
│   │   │   │   ├── InheritableSettingsInput/
│   │   │   │   │   └── index.js
│   │   │   │   ├── ManageWorkspace/
│   │   │   │   │   ├── DeleteWorkspace/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RenameWorkspace/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── MarkDown/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.jsx
│   │   │   │   ├── Modal/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── MultiLineEditor/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Notifications/
│   │   │   │   │   ├── StyleWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── OpenAPISpecTab/
│   │   │   │   │   └── index.js
│   │   │   │   ├── OpenAPISyncTab/
│   │   │   │   │   ├── CollectionStatusSection/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ConfirmSyncModal/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ConnectSpecForm/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ConnectionSettingsModal/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── DisconnectSyncModal/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── EndpointChangeSection/
│   │   │   │   │   │   ├── EndpointItem.js
│   │   │   │   │   │   ├── EndpointVisualDiff.js
│   │   │   │   │   │   ├── ExpandableEndpointRow.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── OpenAPISyncHeader/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── OverviewSection/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── SpecDiffModal/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── SpecStatusSection/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── SyncReviewPage/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── hooks/
│   │   │   │   │   │   ├── useEndpointActions.js
│   │   │   │   │   │   ├── useOpenAPISync.js
│   │   │   │   │   │   └── useSyncFlow.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── PathDisplay/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Portal/
│   │   │   │   │   └── index.js
│   │   │   │   ├── Preferences/
│   │   │   │   │   ├── Beta/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Cache/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Display/
│   │   │   │   │   │   ├── Font/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── Theme/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── Zoom/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── General/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Keybindings/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ProxySettings/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── SystemProxy/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── Support/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Themes/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── RadioButton/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ReorderTable/
│   │   │   │   │   └── index.js
│   │   │   │   ├── RequestPane/
│   │   │   │   │   ├── Assertions/
│   │   │   │   │   │   ├── AssertionOperator/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── AssertionRow/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Auth/
│   │   │   │   │   │   ├── ApiKeyAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── AuthMode/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── AwsV4Auth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── BasicAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── BearerAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── DigestAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── NTLMAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── OAuth2/
│   │   │   │   │   │   │   ├── AdditionalParams/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── AuthorizationCode/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   │   │   └── inputsConfig.js
│   │   │   │   │   │   │   ├── ClientCredentials/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   │   │   └── inputsConfig.js
│   │   │   │   │   │   │   ├── GrantTypeSelector/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── Implicit/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   │   │   └── inputsConfig.js
│   │   │   │   │   │   │   ├── Oauth2ActionButtons/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── Oauth2TokenViewer/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── PasswordCredentials/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   │   │   └── inputsConfig.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── WsseAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── FileBody/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── FormUrlEncodedParams/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GraphQLRequestPane/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GraphQLSchemaActions/
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── useGraphqlSchema.js
│   │   │   │   │   ├── GraphQLVariables/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GrpcBody/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GrpcQueryUrl/
│   │   │   │   │   │   ├── GrpcurlModal/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── MethodDropdown/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ProtoFileDropdown/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── Tabs/
│   │   │   │   │   │   │   ├── ImportPathsTab/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── ProtoFilesTab/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── TabNavigation/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GrpcRequestPane/
│   │   │   │   │   │   ├── GrpcAuth/
│   │   │   │   │   │   │   ├── GrpcAuthMode/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── HttpRequestPane/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── MultipartFormParams/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── PromptVariables/
│   │   │   │   │   │   └── PromptVariablesModal/
│   │   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │   │       └── index.js
│   │   │   │   │   ├── QueryEditor/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── onHasCompletion.js
│   │   │   │   │   ├── QueryParams/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── QueryUrl/
│   │   │   │   │   │   ├── HttpMethodSelector/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   │   └── index.spec.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RequestBody/
│   │   │   │   │   │   ├── RequestBodyMode/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RequestHeaders/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Script/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Settings/
│   │   │   │   │   │   ├── Tags/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ToggleSelector/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Tests/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Vars/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── VarsTable/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── WSRequestPane/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── WSAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   ├── WSAuthMode/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── WSSettingsPane/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── WsBody/
│   │   │   │   │   │   ├── BodyMode/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── SingleWSMessage/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── WsQueryUrl/
│   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │       └── index.js
│   │   │   │   ├── RequestTabPanel/
│   │   │   │   │   ├── ExampleNotFound/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── FolderNotFound/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RequestIsLoading/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RequestNotFound/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RequestNotLoaded/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── RequestTabs/
│   │   │   │   │   ├── CollectionHeader/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── DraggableTab.js
│   │   │   │   │   ├── ExampleTab/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RequestTab/
│   │   │   │   │   │   ├── CloseTabIcon.js
│   │   │   │   │   │   ├── ConfirmCollectionClose/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ConfirmFolderClose/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ConfirmRequestClose/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── DraftTabIcon.js
│   │   │   │   │   │   ├── GradientCloseButton/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── RequestTabNotFound.js
│   │   │   │   │   │   ├── SpecialTab.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ResponseExample/
│   │   │   │   │   ├── CreateExampleModal/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseExampleRequestPane/
│   │   │   │   │   │   ├── ResponseExampleBody/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleBodyMode/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleBodyRenderer/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleDescription/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleFileBody/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleFormUrlEncodedParams/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleHeaders/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleMultipartFormParams/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleParams/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleUrlBar/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseExampleResponsePane/
│   │   │   │   │   │   ├── ResponseExampleResponseContent/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleResponseHeaders/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleStatusInput/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseExampleTopBar/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ResponsePane/
│   │   │   │   │   ├── ClearTimeline/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GrpcResponsePane/
│   │   │   │   │   │   ├── GrpcError/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── GrpcQueryResult/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── GrpcResponseHeaders/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── GrpcStatusCode/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   ├── get-grpc-status-code-phrase.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseTrailers/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── LargeResponseWarning/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── NetworkError/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Overlay/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Placeholder/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── QueryResponse/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── QueryResult/
│   │   │   │   │   │   ├── QueryResultFilter/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── QueryResultPreview/
│   │   │   │   │   │   │   ├── HtmlPreview.js
│   │   │   │   │   │   │   ├── JsonPreview.js
│   │   │   │   │   │   │   ├── TextPreview.js
│   │   │   │   │   │   │   ├── VideoPreview.js
│   │   │   │   │   │   │   ├── XmlPreview/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── QueryResultTypeSelector/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.jsx
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseActions/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseBookmark/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseClear/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseCopy/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseDownload/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseHeaders/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseLayoutToggle/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── index.spec.js
│   │   │   │   │   ├── ResponsePaneActions/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseSize/
│   │   │   │   │   │   ├── ResponseSize.spec.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseStopWatch/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseTime/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RunnerTimeline/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ScriptError/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ScriptErrorIcon/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── SkippedRequest/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StatusCode/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── get-status-code-phrase.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── TestResults/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── TestResultsLabel/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Timeline/
│   │   │   │   │   │   ├── GrpcTimelineItem/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── TimelineItem/
│   │   │   │   │   │   │   ├── Common/
│   │   │   │   │   │   │   │   ├── Body/
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── Headers/
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── Method/
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── Status/
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   └── Time/
│   │   │   │   │   │   │   │       └── index.js
│   │   │   │   │   │   │   ├── Network/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── Request/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── Response/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── WsResponsePane/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── WSMessagesList/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── WSResponseHeaders/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── WSResponseSortOrder/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── WSStatusCode/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   ├── get-ws-status-code-phrase.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── RunnerResults/
│   │   │   │   │   ├── ResponsePane/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RunConfigurationPanel/
│   │   │   │   │   │   ├── StyledWrapper.jsx
│   │   │   │   │   │   └── index.jsx
│   │   │   │   │   ├── RunnerTags/
│   │   │   │   │   │   └── index.jsx
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.jsx
│   │   │   │   ├── SaveTransientRequest/
│   │   │   │   │   ├── CollectionListItem/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Container.js
│   │   │   │   │   ├── FolderBreadcrumbs/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── SearchInput/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── SecuritySettings/
│   │   │   │   │   └── JsSandboxMode/
│   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │       └── index.js
│   │   │   │   ├── SensitiveFieldWarning/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── SettingsInput/
│   │   │   │   │   └── index.js
│   │   │   │   ├── ShareCollection/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Sidebar/
│   │   │   │   │   ├── ApiSpecs/
│   │   │   │   │   │   ├── ApiSpecItem/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── CloseApiSpec/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── CreateApiSpec/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── BulkImportCollectionLocation/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── index.spec.js
│   │   │   │   │   ├── CloneGitRespository/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── CloseWorkspace/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Collections/
│   │   │   │   │   │   ├── Collection/
│   │   │   │   │   │   │   ├── CloneCollection/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── CollectionItem/
│   │   │   │   │   │   │   │   ├── CloneCollectionItem/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── CollectionItemDragPreview/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── CollectionItemIcon/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── CollectionItemInfo/
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── DeleteCollectionItem/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── ExampleItem/
│   │   │   │   │   │   │   │   │   ├── DeleteResponseExampleModal/
│   │   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── GenerateCodeItem/
│   │   │   │   │   │   │   │   │   ├── CodeView/
│   │   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   │   ├── CodeViewToolbar/
│   │   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   │   │   │   └── utils/
│   │   │   │   │   │   │   │   │       ├── interpolation.js
│   │   │   │   │   │   │   │   │       ├── interpolation.spec.js
│   │   │   │   │   │   │   │   │       ├── snippet-generator.js
│   │   │   │   │   │   │   │   │       └── snippet-generator.spec.js
│   │   │   │   │   │   │   │   ├── RenameCollectionItem/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── RequestMethod/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── RunCollectionItem/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── DeleteCollection/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── GenerateDocumentation/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── RemoveCollection/
│   │   │   │   │   │   │   │   ├── ConfirmCollectionCloseDrafts.js
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── RenameCollection/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── CollectionSearch/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── CreateOrOpenCollection/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── InlineCollectionCreator/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── RemoveCollectionsModal/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── SelectCollection/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── CreateCollection/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GoldenEdition/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ImportCollection/
│   │   │   │   │   │   ├── FileTab.js
│   │   │   │   │   │   ├── FullscreenLoader/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── GitHubTab.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── UrlTab.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ImportCollectionLocation/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── NewFolder/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── NewRequest/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Sections/
│   │   │   │   │   │   ├── ApiSpecsSection/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── CollectionsSection/
│   │   │   │   │   │       └── index.js
│   │   │   │   │   ├── SidebarAccordionContext.js
│   │   │   │   │   ├── SidebarContent.js
│   │   │   │   │   ├── SidebarSection/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── SingleLineEditor/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Spinner/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── StatusBar/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── ThemeDropdown/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── StatusDot/
│   │   │   │   │   └── index.js
│   │   │   │   ├── StopWatch/
│   │   │   │   │   └── index.js
│   │   │   │   ├── Tab/
│   │   │   │   │   └── index.js
│   │   │   │   ├── Table/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Tabs/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── TagList/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ToggleSwitch/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ToolHint/
│   │   │   │   │   └── index.js
│   │   │   │   ├── TruncatedText/
│   │   │   │   │   └── index.js
│   │   │   │   ├── VariablesEditor/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── WelcomeModal/
│   │   │   │   │   ├── GetStartedStep/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StorageStep/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── ThemeStep/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── WelcomeStep/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── WorkspaceHome/
│   │   │   │   │   ├── WorkspaceDocs/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── WorkspaceEnvironments/
│   │   │   │   │   │   ├── CopyEnvironment/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── CreateEnvironment/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── DeleteEnvironment/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── EnvironmentList/
│   │   │   │   │   │   │   ├── ConfirmSwitchEnv.js
│   │   │   │   │   │   │   ├── EnvironmentDetails/
│   │   │   │   │   │   │   │   ├── EnvironmentVariables/
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ImportEnvironment/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── RenameEnvironment/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── WorkspaceOverview/
│   │   │   │   │       ├── CollectionsList/
│   │   │   │   │       │   ├── StyledWrapper.js
│   │   │   │   │       │   └── index.js
│   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │       └── index.js
│   │   │   │   └── WorkspaceSidebar/
│   │   │   │       ├── CreateWorkspace/
│   │   │   │       │   └── index.js
│   │   │   │       └── ImportWorkspace/
│   │   │   │           └── index.js
│   │   │   ├── globalStyles.js
│   │   │   ├── hooks/
│   │   │   │   ├── useCollectionFolderTree/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useDebounce/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useDeferredLoading/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.spec.js
│   │   │   │   ├── useDetectSensitiveField/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useFocusTrap/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useLocalStorage/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useOnClickOutside/
│   │   │   │   │   └── index.js
│   │   │   │   ├── usePrevious/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useProtoFileManagement/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useReflectionManagement/
│   │   │   │   │   └── index.js
│   │   │   │   └── useTabPaneBoundaries/
│   │   │   │       └── index.js
│   │   │   ├── i18n/
│   │   │   │   ├── index.js
│   │   │   │   └── translation/
│   │   │   │       └── en.json
│   │   │   ├── index.js
│   │   │   ├── pages/
│   │   │   │   ├── Bruno/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ErrorBoundary/
│   │   │   │   │   └── index.js
│   │   │   │   ├── Main.js
│   │   │   │   └── index.js
│   │   │   ├── providers/
│   │   │   │   ├── App/
│   │   │   │   │   ├── ConfirmAppClose/
│   │   │   │   │   │   ├── SaveRequestsModal.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── useIpcEvents.js
│   │   │   │   │   ├── useOpenAPISyncPolling.js
│   │   │   │   │   └── useTelemetry.js
│   │   │   │   ├── Hotkeys/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── keyMappings.js
│   │   │   │   ├── PromptVariables/
│   │   │   │   │   └── index.js
│   │   │   │   ├── ReduxStore/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── middlewares/
│   │   │   │   │   │   ├── autosave/
│   │   │   │   │   │   │   └── middleware.js
│   │   │   │   │   │   ├── debug/
│   │   │   │   │   │   │   └── middleware.js
│   │   │   │   │   │   ├── draft/
│   │   │   │   │   │   │   ├── middleware.js
│   │   │   │   │   │   │   └── utils.js
│   │   │   │   │   │   └── tasks/
│   │   │   │   │   │       ├── middleware.js
│   │   │   │   │   │       └── utils.js
│   │   │   │   │   └── slices/
│   │   │   │   │       ├── apiSpec.js
│   │   │   │   │       ├── app.js
│   │   │   │   │       ├── collections/
│   │   │   │   │       │   ├── actions.js
│   │   │   │   │       │   ├── exampleReducers.js
│   │   │   │   │       │   └── index.js
│   │   │   │   │       ├── global-environments.js
│   │   │   │   │       ├── logs.js
│   │   │   │   │       ├── notifications.js
│   │   │   │   │       ├── notifications.spec.js
│   │   │   │   │       ├── openapi-sync.js
│   │   │   │   │       ├── performance.js
│   │   │   │   │       ├── tabs.js
│   │   │   │   │       └── workspaces/
│   │   │   │   │           ├── actions.js
│   │   │   │   │           ├── getTabToFocusForCurrentWorkspace.js
│   │   │   │   │           ├── getTabToFocusForCurrentWorkspace.spec.js
│   │   │   │   │           └── index.js
│   │   │   │   ├── Theme/
│   │   │   │   │   └── index.js
│   │   │   │   └── Toaster/
│   │   │   │       └── index.js
│   │   │   ├── selectors/
│   │   │   │   └── tab.js
│   │   │   ├── styles/
│   │   │   │   └── globals.css
│   │   │   ├── test-utils/
│   │   │   │   └── mocks/
│   │   │   │       └── codemirror.js
│   │   │   ├── themes/
│   │   │   │   ├── DesignSystem/
│   │   │   │   │   ├── DesignSystem.stories.jsx
│   │   │   │   │   ├── Overview.jsx
│   │   │   │   │   └── Theme.stories.jsx
│   │   │   │   ├── PaletteViewer/
│   │   │   │   │   ├── Catppuccin.stories.jsx
│   │   │   │   │   └── components.jsx
│   │   │   │   ├── dark/
│   │   │   │   │   ├── catppuccin-frappe.js
│   │   │   │   │   ├── catppuccin-macchiato.js
│   │   │   │   │   ├── catppuccin-mocha.js
│   │   │   │   │   ├── dark-monochrome.js
│   │   │   │   │   ├── dark-pastel.js
│   │   │   │   │   ├── dark.js
│   │   │   │   │   ├── nord.js
│   │   │   │   │   └── vscode.js
│   │   │   │   ├── index.js
│   │   │   │   ├── light/
│   │   │   │   │   ├── catppuccin-latte.js
│   │   │   │   │   ├── light-monochrome.js
│   │   │   │   │   ├── light-pastel.js
│   │   │   │   │   ├── light.js
│   │   │   │   │   └── vscode.js
│   │   │   │   └── schema/
│   │   │   │       ├── index.js
│   │   │   │       └── oss.js
│   │   │   ├── ui/
│   │   │   │   ├── ActionIcon/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Button/
│   │   │   │   │   ├── Button.stories.jsx
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ErrorBanner/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── HeightBoundContainer/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── MenuDropdown/
│   │   │   │   │   ├── SubMenuItem/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── MethodBadge/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ResponsiveTabs/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   └── StatusBadge/
│   │   │   │       ├── StyledWrapper.js
│   │   │   │       └── index.js
│   │   │   └── utils/
│   │   │       ├── auth/
│   │   │       │   ├── index.js
│   │   │       │   └── index.spec.js
│   │   │       ├── beta-features.js
│   │   │       ├── bruno-clipboard.js
│   │   │       ├── codegenerator/
│   │   │       │   ├── auth.js
│   │   │       │   ├── har.js
│   │   │       │   └── targets.js
│   │   │       ├── codemirror/
│   │   │       │   ├── autocomplete.js
│   │   │       │   ├── autocomplete.spec.js
│   │   │       │   ├── autocompleteConstants.js
│   │   │       │   ├── brunoVarInfo.js
│   │   │       │   ├── brunoVarInfo.spec.js
│   │   │       │   ├── javascript-lint.js
│   │   │       │   ├── lang-detect.js
│   │   │       │   ├── linkAware.js
│   │   │       │   ├── linkAware.spec.js
│   │   │       │   ├── lint-errors.js
│   │   │       │   └── mock-data-hints.js
│   │   │       ├── collections/
│   │   │       │   ├── emptyStateRequest.js
│   │   │       │   ├── export.js
│   │   │       │   ├── index.js
│   │   │       │   ├── index.spec.js
│   │   │       │   └── search.js
│   │   │       ├── common/
│   │   │       │   ├── bulkKeyValueUtils.js
│   │   │       │   ├── codemirror.js
│   │   │       │   ├── constants.js
│   │   │       │   ├── error.js
│   │   │       │   ├── folders-requests-sorting.spec.js
│   │   │       │   ├── format-response.spec.js
│   │   │       │   ├── index.js
│   │   │       │   ├── index.spec.js
│   │   │       │   ├── ipc.js
│   │   │       │   ├── masked-editor.js
│   │   │       │   ├── path.js
│   │   │       │   ├── path.spec.js
│   │   │       │   ├── path.windows.spec.js
│   │   │       │   ├── platform.js
│   │   │       │   ├── regex.js
│   │   │       │   ├── regex.spec.js
│   │   │       │   └── setupPolyfills.js
│   │   │       ├── curl/
│   │   │       │   ├── content-type.js
│   │   │       │   ├── curl-to-json.js
│   │   │       │   ├── curl-to-json.spec.js
│   │   │       │   ├── index.js
│   │   │       │   ├── parse-curl.js
│   │   │       │   └── parse-curl.spec.js
│   │   │       ├── environments.js
│   │   │       ├── exporters/
│   │   │       │   ├── bruno-environment.js
│   │   │       │   ├── openapi-spec.js
│   │   │       │   ├── openapi-spec.spec.js
│   │   │       │   ├── opencollection.js
│   │   │       │   └── postman-collection.js
│   │   │       ├── filesystem.js
│   │   │       ├── git/
│   │   │       │   ├── index.js
│   │   │       │   └── index.spec.js
│   │   │       ├── idb/
│   │   │       │   └── index.js
│   │   │       ├── importers/
│   │   │       │   ├── bruno-collection.js
│   │   │       │   ├── bruno-environment.js
│   │   │       │   ├── common.js
│   │   │       │   ├── file-reader.js
│   │   │       │   ├── insomnia-collection.js
│   │   │       │   ├── openapi-collection.js
│   │   │       │   ├── opencollection.js
│   │   │       │   ├── postman-collection.js
│   │   │       │   ├── postman-environment.js
│   │   │       │   └── wsdl-collection.js
│   │   │       ├── network/
│   │   │       │   ├── cancelTokens.js
│   │   │       │   ├── grpc-event-listeners.js
│   │   │       │   ├── index.js
│   │   │       │   └── ws-event-listeners.js
│   │   │       ├── response/
│   │   │       │   └── index.js
│   │   │       ├── responseBodyProcessor.js
│   │   │       ├── tabs/
│   │   │       │   └── index.js
│   │   │       ├── terminal.js
│   │   │       ├── tests/
│   │   │       │   └── collections/
│   │   │       │       ├── examples-export-import.spec.js
│   │   │       │       ├── grpc-export-import.spec.js
│   │   │       │       └── items-sequencing.spec.js
│   │   │       ├── url/
│   │   │       │   ├── index.js
│   │   │       │   └── index.spec.js
│   │   │       └── workspaces/
│   │   │           └── index.js
│   │   ├── storybook/
│   │   │   ├── main.js
│   │   │   └── preview.jsx
│   │   └── tailwind.config.js
│   ├── bruno-cli/
│   │   ├── .gitignore
│   │   ├── bin/
│   │   │   └── bru.js
│   │   ├── changelog.md
│   │   ├── examples/
│   │   │   ├── report.html
│   │   │   └── report.json
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── src/
│   │   │   ├── commands/
│   │   │   │   ├── import.js
│   │   │   │   └── run.js
│   │   │   ├── constants.js
│   │   │   ├── index.js
│   │   │   ├── reporters/
│   │   │   │   ├── html.js
│   │   │   │   └── junit.js
│   │   │   ├── runner/
│   │   │   │   ├── awsv4auth-helper.js
│   │   │   │   ├── interpolate-string.js
│   │   │   │   ├── interpolate-vars.js
│   │   │   │   ├── prepare-request.js
│   │   │   │   └── run-single-request.js
│   │   │   ├── store/
│   │   │   │   └── tokenStore.js
│   │   │   └── utils/
│   │   │       ├── axios-instance.js
│   │   │       ├── bru.js
│   │   │       ├── collection.js
│   │   │       ├── common.js
│   │   │       ├── cookies.js
│   │   │       ├── environment.js
│   │   │       ├── filesystem.js
│   │   │       ├── form-data.js
│   │   │       ├── oauth2.js
│   │   │       ├── proxy-util.js
│   │   │       ├── request.js
│   │   │       ├── run.js
│   │   │       └── sanitize-results.js
│   │   └── tests/
│   │       ├── reporters/
│   │       │   ├── html.spec.js
│   │       │   ├── junit.spec.js
│   │       │   └── skip-body.spec.js
│   │       ├── runner/
│   │       │   ├── collection-json-from-pathname.spec.js
│   │       │   ├── fixtures/
│   │       │   │   ├── collection-json-from-pathname/
│   │       │   │   │   └── collection/
│   │       │   │   │       ├── bruno.json
│   │       │   │   │       ├── collection.bru
│   │       │   │   │       ├── folder_1/
│   │       │   │   │       │   ├── folder.bru
│   │       │   │   │       │   ├── folder_1/
│   │       │   │   │       │   │   ├── folder.bru
│   │       │   │   │       │   │   ├── request_1.bru
│   │       │   │   │       │   │   ├── request_2.bru
│   │       │   │   │       │   │   └── request_3.bru
│   │       │   │   │       │   ├── folder_2/
│   │       │   │   │       │   │   ├── folder.bru
│   │       │   │   │       │   │   ├── request_1.bru
│   │       │   │   │       │   │   ├── request_2.bru
│   │       │   │   │       │   │   └── request_3.bru
│   │       │   │   │       │   ├── request_1.bru
│   │       │   │   │       │   ├── request_2.bru
│   │       │   │   │       │   └── request_3.bru
│   │       │   │   │       ├── folder_2/
│   │       │   │   │       │   ├── folder.bru
│   │       │   │   │       │   ├── request_1.bru
│   │       │   │   │       │   ├── request_2.bru
│   │       │   │   │       │   └── request_3.bru
│   │       │   │   │       ├── request_1.bru
│   │       │   │   │       ├── request_2.bru
│   │       │   │   │       └── request_3.bru
│   │       │   │   └── opencollection/
│   │       │   │       └── collection/
│   │       │   │           ├── environments/
│   │       │   │           │   └── dev.yml
│   │       │   │           ├── get-users.yml
│   │       │   │           ├── opencollection.yml
│   │       │   │           └── users/
│   │       │   │               ├── create-user.yml
│   │       │   │               └── folder.yml
│   │       │   ├── prepare-request.spec.js
│   │       │   └── report-metadata.spec.js
│   │       └── utils/
│   │           ├── collection/
│   │           │   ├── create-collection-from-bruno-object.spec.js
│   │           │   └── get-call-stack.spec.js
│   │           ├── common.spec.js
│   │           ├── filesystem.spec.js
│   │           └── parse-environment-json.spec.js
│   ├── bruno-common/
│   │   ├── .gitignore
│   │   ├── babel.config.js
│   │   ├── jest.config.js
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── rollup.config.js
│   │   ├── src/
│   │   │   ├── example-status/
│   │   │   │   └── index.ts
│   │   │   ├── index.ts
│   │   │   ├── interpolate/
│   │   │   │   ├── index.spec.ts
│   │   │   │   └── index.ts
│   │   │   ├── runner/
│   │   │   │   ├── index.ts
│   │   │   │   ├── reports/
│   │   │   │   │   └── html/
│   │   │   │   │       ├── generate-report.ts
│   │   │   │   │       └── template.ts
│   │   │   │   ├── runner-summary.ts
│   │   │   │   ├── types/
│   │   │   │   │   └── index.ts
│   │   │   │   └── utils/
│   │   │   │       └── index.ts
│   │   │   ├── tags/
│   │   │   │   ├── index.spec.ts
│   │   │   │   └── index.ts
│   │   │   ├── utils/
│   │   │   │   ├── faker-functions.spec.ts
│   │   │   │   ├── faker-functions.ts
│   │   │   │   ├── form-data.spec.ts
│   │   │   │   ├── form-data.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── prompt-variables.spec.ts
│   │   │   │   ├── prompt-variables.ts
│   │   │   │   ├── template-hasher.spec.ts
│   │   │   │   ├── template-hasher.ts
│   │   │   │   └── url/
│   │   │   │       ├── index.spec.ts
│   │   │   │       └── index.ts
│   │   │   └── zoom/
│   │   │       └── index.ts
│   │   └── tsconfig.json
│   ├── bruno-converters/
│   │   ├── .gitignore
│   │   ├── babel.config.js
│   │   ├── jest.config.js
│   │   ├── jest.setup.js
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── rollup.config.js
│   │   ├── src/
│   │   │   ├── common/
│   │   │   │   └── index.js
│   │   │   ├── constants/
│   │   │   │   ├── index.js
│   │   │   │   └── regex.js
│   │   │   ├── index.js
│   │   │   ├── insomnia/
│   │   │   │   ├── env-utils.js
│   │   │   │   └── insomnia-to-bruno.js
│   │   │   ├── openapi/
│   │   │   │   └── openapi-to-bruno.js
│   │   │   ├── opencollection/
│   │   │   │   ├── bruno-to-opencollection.ts
│   │   │   │   ├── common/
│   │   │   │   │   ├── actions.ts
│   │   │   │   │   ├── assertions.ts
│   │   │   │   │   ├── auth.ts
│   │   │   │   │   ├── body.ts
│   │   │   │   │   ├── headers.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── params.ts
│   │   │   │   │   ├── scripts.ts
│   │   │   │   │   └── variables.ts
│   │   │   │   ├── environment.ts
│   │   │   │   ├── folder.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── items/
│   │   │   │   │   ├── graphql.ts
│   │   │   │   │   ├── grpc.ts
│   │   │   │   │   ├── http.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── websocket.ts
│   │   │   │   ├── opencollection-to-bruno.ts
│   │   │   │   └── types.ts
│   │   │   ├── postman/
│   │   │   │   ├── bruno-to-postman.js
│   │   │   │   ├── postman-env-to-bruno-env.js
│   │   │   │   ├── postman-to-bruno.js
│   │   │   │   └── postman-translations.js
│   │   │   ├── utils/
│   │   │   │   ├── ast-utils.js
│   │   │   │   ├── bruno-send-request-transformer.js
│   │   │   │   ├── bruno-to-postman-translator.js
│   │   │   │   ├── flatten.js
│   │   │   │   ├── postman-to-bruno-translator.js
│   │   │   │   └── send-request-transformer.js
│   │   │   ├── workers/
│   │   │   │   ├── postman-translator-worker.js
│   │   │   │   └── scripts/
│   │   │   │       └── translate-postman-scripts.js
│   │   │   └── wsdl/
│   │   │       └── wsdl-to-bruno.js
│   │   ├── tests/
│   │   │   ├── bruno/
│   │   │   │   ├── bruno-to-postman-translations/
│   │   │   │   │   ├── cookies.test.js
│   │   │   │   │   ├── environment.test.js
│   │   │   │   │   ├── execution.test.js
│   │   │   │   │   ├── request.test.js
│   │   │   │   │   ├── response.test.js
│   │   │   │   │   ├── send-request.test.js
│   │   │   │   │   ├── testing-framework.test.js
│   │   │   │   │   └── variables.test.js
│   │   │   │   └── bruno-to-postman-with-tests.spec.js
│   │   │   ├── common/
│   │   │   │   └── sanitizeTag.spec.js
│   │   │   ├── insomnia/
│   │   │   │   ├── env-utils.spec.js
│   │   │   │   ├── insomnia-collection-v5.spec.js
│   │   │   │   └── insomnia-collection.spec.js
│   │   │   ├── openapi/
│   │   │   │   ├── openapi-to-bruno/
│   │   │   │   │   ├── openapi-auth.spec.js
│   │   │   │   │   ├── openapi-body.spec.js
│   │   │   │   │   ├── openapi-circular-references.spec.js
│   │   │   │   │   ├── openapi-import-grouping.spec.js
│   │   │   │   │   ├── openapi-path-parameters.spec.js
│   │   │   │   │   ├── openapi-server-variables.spec.js
│   │   │   │   │   ├── openapi-tags.spec.js
│   │   │   │   │   ├── openapi-to-bruno.spec.js
│   │   │   │   │   └── path-based-grouping-duplicate-names.spec.js
│   │   │   │   └── openapi-with-examples.spec.js
│   │   │   ├── postman/
│   │   │   │   ├── bruno-to-postman-with-examples.spec.js
│   │   │   │   ├── bruno-to-postman.spec.js
│   │   │   │   ├── postman-env-to-bruno-env.spec.js
│   │   │   │   ├── postman-to-bruno/
│   │   │   │   │   ├── collection-auth.spec.js
│   │   │   │   │   ├── folder-auth.spec.js
│   │   │   │   │   ├── postman-to-bruno.spec.js
│   │   │   │   │   ├── postman-translations/
│   │   │   │   │   │   ├── postman-request.spec.js
│   │   │   │   │   │   └── postman-response.spec.js
│   │   │   │   │   ├── process-auth.spec.js
│   │   │   │   │   ├── request-auth.spec.js
│   │   │   │   │   └── transform-description.spec.js
│   │   │   │   └── postman-translations/
│   │   │   │       ├── postman-comments.spec.js
│   │   │   │       ├── postman-cookie-conversions.spec.js
│   │   │   │       ├── postman-edge-cases.spec.js
│   │   │   │       ├── postman-test-commands.spec.js
│   │   │   │       ├── postman-variables.spec.js
│   │   │   │       └── transpiler-tests/
│   │   │   │           ├── combined.test.js
│   │   │   │           ├── environment.test.js
│   │   │   │           ├── exec-flow.test.js
│   │   │   │           ├── legacy-global-apis.test.js
│   │   │   │           ├── legacy-tests-syntax.test.js
│   │   │   │           ├── multiline-syntax.test.js
│   │   │   │           ├── postman-references.test.js
│   │   │   │           ├── request.test.js
│   │   │   │           ├── response.test.js
│   │   │   │           ├── scoped-variables.test.js
│   │   │   │           ├── testing-framework.test.js
│   │   │   │           ├── transformers/
│   │   │   │           │   └── send-request.test.js
│   │   │   │           ├── variable-chaining.test.js
│   │   │   │           └── variables.test.js
│   │   │   ├── postman-with-examples.spec.js
│   │   │   ├── utils/
│   │   │   │   ├── flatten.spec.js
│   │   │   │   └── getMemberExpressionString.test.js
│   │   │   └── wsdl/
│   │   │       └── wsdl-to-bruno.spec.js
│   │   ├── tsconfig.json
│   │   └── types/
│   │       └── common.d.ts
│   ├── bruno-docs/
│   │   ├── package.json
│   │   └── readme.md
│   ├── bruno-electron/
│   │   ├── .gitignore
│   │   ├── electron-builder-config.js
│   │   ├── notarize.js
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── resources/
│   │   │   ├── data/
│   │   │   │   └── sample-collection.json
│   │   │   ├── entitlements.mac.plist
│   │   │   └── icons/
│   │   │       └── mac/
│   │   │           └── icon.icns
│   │   ├── src/
│   │   │   ├── about/
│   │   │   │   └── about.css
│   │   │   ├── app/
│   │   │   │   ├── about-bruno.js
│   │   │   │   ├── apiSpecs.js
│   │   │   │   ├── apiSpecsWatcher.js
│   │   │   │   ├── collection-watcher.js
│   │   │   │   ├── collections.js
│   │   │   │   ├── dotenv-watcher.js
│   │   │   │   ├── menu-template.js
│   │   │   │   ├── onboarding.js
│   │   │   │   ├── system-monitor.js
│   │   │   │   └── workspace-watcher.js
│   │   │   ├── cache/
│   │   │   │   ├── apiSpecUids.js
│   │   │   │   └── requestUids.js
│   │   │   ├── index.js
│   │   │   ├── ipc/
│   │   │   │   ├── apiSpec.js
│   │   │   │   ├── collection.js
│   │   │   │   ├── filesystem.js
│   │   │   │   ├── git.js
│   │   │   │   ├── global-environments.js
│   │   │   │   ├── network/
│   │   │   │   │   ├── authorize-user-in-system-browser.js
│   │   │   │   │   ├── authorize-user-in-window.js
│   │   │   │   │   ├── awsv4auth-helper.js
│   │   │   │   │   ├── axios-instance.js
│   │   │   │   │   ├── cert-utils.js
│   │   │   │   │   ├── grpc-event-handlers.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── interpolate-string.js
│   │   │   │   │   ├── interpolate-vars.js
│   │   │   │   │   ├── prepare-gql-introspection-request.js
│   │   │   │   │   ├── prepare-grpc-request.js
│   │   │   │   │   ├── prepare-request.js
│   │   │   │   │   └── ws-event-handlers.js
│   │   │   │   ├── notifications.js
│   │   │   │   ├── openapi-sync.js
│   │   │   │   ├── preferences.js
│   │   │   │   ├── system-monitor.js
│   │   │   │   ├── terminal.js
│   │   │   │   └── workspace.js
│   │   │   ├── preload.js
│   │   │   ├── store/
│   │   │   │   ├── bruno-config.js
│   │   │   │   ├── collection-security.js
│   │   │   │   ├── cookies.js
│   │   │   │   ├── default-workspace.js
│   │   │   │   ├── env-secrets.js
│   │   │   │   ├── global-environments.js
│   │   │   │   ├── last-opened-collections.js
│   │   │   │   ├── last-opened-workspaces.js
│   │   │   │   ├── oauth2.js
│   │   │   │   ├── preferences.js
│   │   │   │   ├── process-env.js
│   │   │   │   ├── system-proxy.js
│   │   │   │   ├── ui-state-snapshot.js
│   │   │   │   ├── window-state.js
│   │   │   │   └── workspace-environments.js
│   │   │   └── utils/
│   │   │       ├── arch.js
│   │   │       ├── cancel-token.js
│   │   │       ├── collection-import.js
│   │   │       ├── collection.js
│   │   │       ├── common.js
│   │   │       ├── constants.js
│   │   │       ├── cookies.js
│   │   │       ├── deeplink.js
│   │   │       ├── default-location.js
│   │   │       ├── encryption.js
│   │   │       ├── filesystem.js
│   │   │       ├── filesystem.test.js
│   │   │       ├── form-data.js
│   │   │       ├── git.js
│   │   │       ├── oauth2-protocol-handler.js
│   │   │       ├── oauth2.js
│   │   │       ├── parse.js
│   │   │       ├── proxy-util.js
│   │   │       ├── tests/
│   │   │       │   ├── collection-utils.spec.js
│   │   │       │   ├── filesystem/
│   │   │       │   │   └── index.spec.js
│   │   │       │   └── fixtures/
│   │   │       │       └── filesystem/
│   │   │       │           └── copypath-removepath.js
│   │   │       ├── transformBrunoConfig.js
│   │   │       ├── window.js
│   │   │       ├── workspace-config.js
│   │   │       └── workspace-lock.js
│   │   └── tests/
│   │       ├── cookies-store.test.js
│   │       ├── network/
│   │       │   ├── authorize-user.spec.js
│   │       │   ├── execute-request-error-handler.spec.js
│   │       │   ├── fetch-gql-schema-handler.spec.js
│   │       │   ├── index.spec.js
│   │       │   ├── interpolate-vars.spec.js
│   │       │   ├── prepare-gql-introspection-request.spec.js
│   │       │   ├── prepare-grpc-request.spec.js
│   │       │   ├── prepare-request.spec.js
│   │       │   └── prepare-ws-request.spec.js
│   │       ├── prepare-request.test.js
│   │       ├── store/
│   │       │   ├── default-location-migration.spec.js
│   │       │   ├── global-environments.test.js
│   │       │   └── proxy-preferences.spec.js
│   │       └── utils/
│   │           ├── collection.spec.js
│   │           ├── common.spec.js
│   │           ├── encryption.spec.js
│   │           ├── form-data.spec.js
│   │           ├── proxy-util.spec.js
│   │           ├── transform-bruno-config.spec.js
│   │           └── workspace-config.spec.js
│   ├── bruno-filestore/
│   │   ├── .gitignore
│   │   ├── LICENSE.md
│   │   ├── README.md
│   │   ├── babel.config.js
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── rollup.config.js
│   │   ├── src/
│   │   │   ├── constants.ts
│   │   │   ├── formats/
│   │   │   │   ├── bru/
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── tests/
│   │   │   │   │   │   ├── fixtures/
│   │   │   │   │   │   │   ├── oauth2-additional-params.js
│   │   │   │   │   │   │   └── request-parse-and-redact-body-data/
│   │   │   │   │   │   │       ├── input.bru
│   │   │   │   │   │   │       └── output.bru
│   │   │   │   │   │   ├── oauth2-additional-params.spec.js
│   │   │   │   │   │   └── request-parse-and-redact-body-data.spec.js
│   │   │   │   │   └── utils/
│   │   │   │   │       ├── oauth2-additional-params.ts
│   │   │   │   │       └── request-parse-and-redact-body-data.ts
│   │   │   │   └── yml/
│   │   │   │       ├── common/
│   │   │   │       │   ├── actions.ts
│   │   │   │       │   ├── assertions.ts
│   │   │   │       │   ├── auth-oauth2.ts
│   │   │   │       │   ├── auth.ts
│   │   │   │       │   ├── body.ts
│   │   │   │       │   ├── headers.ts
│   │   │   │       │   ├── params.ts
│   │   │   │       │   ├── scripts.ts
│   │   │   │       │   └── variables.ts
│   │   │   │       ├── index.ts
│   │   │   │       ├── items/
│   │   │   │       │   ├── parseGraphQLRequest.ts
│   │   │   │       │   ├── parseGrpcRequest.ts
│   │   │   │       │   ├── parseHttpRequest.ts
│   │   │   │       │   ├── parseScript.ts
│   │   │   │       │   ├── parseWebsocketRequest.ts
│   │   │   │       │   ├── stringifyGraphQLRequest.ts
│   │   │   │       │   ├── stringifyGrpcRequest.ts
│   │   │   │       │   ├── stringifyHttpRequest.ts
│   │   │   │       │   ├── stringifyScript.ts
│   │   │   │       │   └── stringifyWebsocketRequest.ts
│   │   │   │       ├── parseCollection.ts
│   │   │   │       ├── parseEnvironment.ts
│   │   │   │       ├── parseFolder.ts
│   │   │   │       ├── parseItem.ts
│   │   │   │       ├── stringifyCollection.ts
│   │   │   │       ├── stringifyEnvironment.ts
│   │   │   │       ├── stringifyFolder.ts
│   │   │   │       ├── stringifyItem.ts
│   │   │   │       └── utils.ts
│   │   │   ├── index.ts
│   │   │   ├── types/
│   │   │   │   └── bruno-lang.d.ts
│   │   │   ├── types.ts
│   │   │   ├── utils/
│   │   │   │   └── index.ts
│   │   │   └── workers/
│   │   │       ├── WorkerQueue/
│   │   │       │   └── index.ts
│   │   │       ├── index.ts
│   │   │       └── worker-script.ts
│   │   ├── test-results/
│   │   │   └── .last-run.json
│   │   └── tsconfig.json
│   ├── bruno-graphql-docs/
│   │   ├── .gitignore
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── rollup.config.js
│   │   ├── src/
│   │   │   ├── components/
│   │   │   │   ├── DocExplorer/
│   │   │   │   │   ├── Argument.tsx
│   │   │   │   │   ├── DefaultValue.tsx
│   │   │   │   │   ├── Directive.tsx
│   │   │   │   │   ├── FieldDoc.tsx
│   │   │   │   │   ├── MarkdownContent.tsx
│   │   │   │   │   ├── SchemaDoc.tsx
│   │   │   │   │   ├── SearchBox.tsx
│   │   │   │   │   ├── SearchResults.tsx
│   │   │   │   │   ├── TypeDoc.tsx
│   │   │   │   │   ├── TypeLink.tsx
│   │   │   │   │   └── types.ts
│   │   │   │   └── DocExplorer.tsx
│   │   │   ├── index.css
│   │   │   ├── index.ts
│   │   │   └── utility/
│   │   │       └── debounce.ts
│   │   └── tsconfig.json
│   ├── bruno-js/
│   │   ├── .gitignore
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── src/
│   │   │   ├── bru.js
│   │   │   ├── bruno-request.js
│   │   │   ├── bruno-response.js
│   │   │   ├── index.js
│   │   │   ├── interpolate-string.js
│   │   │   ├── runtime/
│   │   │   │   ├── assert-runtime.js
│   │   │   │   ├── script-runtime.js
│   │   │   │   ├── test-runtime.js
│   │   │   │   └── vars-runtime.js
│   │   │   ├── sandbox/
│   │   │   │   ├── bundle-libraries.js
│   │   │   │   ├── mixins/
│   │   │   │   │   └── typed-arrays.js
│   │   │   │   ├── node-vm/
│   │   │   │   │   ├── cjs-loader.js
│   │   │   │   │   ├── console.js
│   │   │   │   │   ├── constants.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── index.spec.js
│   │   │   │   │   └── utils.js
│   │   │   │   └── quickjs/
│   │   │   │       ├── index.js
│   │   │   │       ├── shims/
│   │   │   │       │   ├── bru.js
│   │   │   │       │   ├── bruno-request.js
│   │   │   │       │   ├── bruno-response.js
│   │   │   │       │   ├── console.js
│   │   │   │       │   ├── lib/
│   │   │   │       │   │   ├── axios.js
│   │   │   │       │   │   ├── axios.spec.js
│   │   │   │       │   │   ├── crypto-utils.js
│   │   │   │       │   │   ├── crypto-utils.spec.js
│   │   │   │       │   │   ├── index.js
│   │   │   │       │   │   ├── jwt.js
│   │   │   │       │   │   ├── nanoid.js
│   │   │   │       │   │   ├── path.js
│   │   │   │       │   │   ├── utils.js
│   │   │   │       │   │   └── uuid.js
│   │   │   │       │   ├── local-module.js
│   │   │   │       │   └── test.js
│   │   │   │       └── utils/
│   │   │   │           └── index.js
│   │   │   ├── test-results.js
│   │   │   ├── test.js
│   │   │   ├── utils/
│   │   │   │   ├── error-formatter.js
│   │   │   │   ├── error-formatter.spec.js
│   │   │   │   ├── results.js
│   │   │   │   └── sandbox.js
│   │   │   └── utils.js
│   │   └── tests/
│   │       ├── bruno-request-delete-header.spec.js
│   │       ├── runtime.spec.js
│   │       ├── setEnvVar.spec.js
│   │       └── utils.spec.js
│   ├── bruno-lang/
│   │   ├── .gitignore
│   │   ├── example/
│   │   │   ├── request.bru
│   │   │   ├── request.json
│   │   │   └── request.next.bru
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── src/
│   │   │   └── index.js
│   │   ├── v1/
│   │   │   ├── src/
│   │   │   │   ├── body-tag.js
│   │   │   │   ├── env-vars-tag.js
│   │   │   │   ├── headers-tag.js
│   │   │   │   ├── index.js
│   │   │   │   ├── inline-tag.js
│   │   │   │   ├── key-val-lines.js
│   │   │   │   ├── params-tag.js
│   │   │   │   ├── script-tag.js
│   │   │   │   ├── tests-tag.js
│   │   │   │   └── utils.js
│   │   │   └── tests/
│   │   │       ├── body-tag.spec.js
│   │   │       ├── bru-to-env-json.spec.js
│   │   │       ├── bru-to-json.spec.js
│   │   │       ├── env-json-to-bru.spec.js
│   │   │       ├── fixtures/
│   │   │       │   ├── env.bru
│   │   │       │   └── request.bru
│   │   │       ├── inline-tag.spec.js
│   │   │       ├── json-to-bru.spec.js
│   │   │       ├── key-val-lines.spec.js
│   │   │       ├── script-tag.spec.js
│   │   │       ├── tests-tag.spec.js
│   │   │       └── utils.spec.js
│   │   └── v2/
│   │       ├── src/
│   │       │   ├── bruToJson.js
│   │       │   ├── collectionBruToJson.js
│   │       │   ├── common/
│   │       │   │   ├── attributes.js
│   │       │   │   └── semantic-utils.js
│   │       │   ├── dotenvToJson.js
│   │       │   ├── envToJson.js
│   │       │   ├── example/
│   │       │   │   ├── bruToJson.js
│   │       │   │   ├── jsonToBru.js
│   │       │   │   ├── request/
│   │       │   │   │   └── bruToJson.js
│   │       │   │   └── response/
│   │       │   │       └── bruToJson.js
│   │       │   ├── jsonToBru.js
│   │       │   ├── jsonToCollectionBru.js
│   │       │   ├── jsonToEnv.js
│   │       │   └── utils.js
│   │       └── tests/
│   │           ├── assert.spec.js
│   │           ├── bruToJson.spec.js
│   │           ├── collection.spec.js
│   │           ├── custom-methods/
│   │           │   ├── custom-method.spec.js
│   │           │   └── fixtures/
│   │           │       ├── custom-method-with-special-chars.bru
│   │           │       ├── custom-method-with-special-chars.json
│   │           │       ├── custom-method-x-custom.bru
│   │           │       ├── custom-method-x-custom.json
│   │           │       ├── custom-method.bru
│   │           │       └── custom-method.json
│   │           ├── defaults.spec.js
│   │           ├── dictionary.spec.js
│   │           ├── dotenvToJson.spec.js
│   │           ├── envToJson.spec.js
│   │           ├── examples/
│   │           │   ├── examples.spec.js
│   │           │   └── fixtures/
│   │           │       ├── bru/
│   │           │       │   ├── bruToJson-empty-example.bru
│   │           │       │   ├── bruToJson-json-body.bru
│   │           │       │   ├── bruToJson-multiple-examples.bru
│   │           │       │   ├── bruToJson-no-examples.bru
│   │           │       │   ├── bruToJson-response-example.bru
│   │           │       │   ├── bruToJson-single-example.bru
│   │           │       │   ├── bruToJson-text-body.bru
│   │           │       │   ├── bruToJson-xml-body.bru
│   │           │       │   ├── complex-with-auth.bru
│   │           │       │   ├── examples-complex.bru
│   │           │       │   ├── examples-multiline-contenttype.bru
│   │           │       │   ├── examples-multiline-description.bru
│   │           │       │   ├── examples-simple.bru
│   │           │       │   ├── form-data-complex.bru
│   │           │       │   ├── jsonToBru-bodytypes.bru
│   │           │       │   ├── jsonToBru-multiple.bru
│   │           │       │   ├── jsonToBru-response.bru
│   │           │       │   ├── jsonToBru-simple.bru
│   │           │       │   ├── multiple-examples-variations.bru
│   │           │       │   └── oauth2-examples.bru
│   │           │       └── json/
│   │           │           ├── bruToJson-empty-example.json
│   │           │           ├── bruToJson-json-body.json
│   │           │           ├── bruToJson-multiple-examples.json
│   │           │           ├── bruToJson-no-examples.json
│   │           │           ├── bruToJson-response-example.json
│   │           │           ├── bruToJson-single-example.json
│   │           │           ├── bruToJson-text-body.json
│   │           │           ├── bruToJson-xml-body.json
│   │           │           ├── complex-with-auth.json
│   │           │           ├── examples-complex.json
│   │           │           ├── examples-multiline-contenttype.json
│   │           │           ├── examples-multiline-description.json
│   │           │           ├── examples-simple.json
│   │           │           ├── form-data-complex.json
│   │           │           ├── jsonToBru-bodytypes.json
│   │           │           ├── jsonToBru-multiple.json
│   │           │           ├── jsonToBru-response.json
│   │           │           ├── jsonToBru-simple.json
│   │           │           ├── multiple-examples-variations.json
│   │           │           └── oauth2-examples.json
│   │           ├── fixtures/
│   │           │   ├── collection.bru
│   │           │   ├── collection.json
│   │           │   ├── request.bru
│   │           │   └── request.json
│   │           ├── getKeyString.spec.js
│   │           ├── index.spec.js
│   │           ├── jsonToBru.spec.js
│   │           ├── jsonToEnv.spec.js
│   │           ├── list.spec.js
│   │           ├── oauth2-additional-params.spec.js
│   │           ├── script.spec.js
│   │           ├── settings/
│   │           │   ├── fixtures/
│   │           │   │   ├── settings-all-options.bru
│   │           │   │   ├── settings-all-options.json
│   │           │   │   ├── settings-minimal.bru
│   │           │   │   └── settings-minimal.json
│   │           │   └── settings.spec.js
│   │           ├── tags.spec.js
│   │           └── utils.spec.js
│   ├── bruno-query/
│   │   ├── .gitignore
│   │   ├── jest.config.js
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── rollup.config.js
│   │   ├── src/
│   │   │   └── index.ts
│   │   ├── tests/
│   │   │   └── index.spec.ts
│   │   └── tsconfig.json
│   ├── bruno-requests/
│   │   ├── .gitignore
│   │   ├── babel.config.js
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── rollup.config.js
│   │   ├── src/
│   │   │   ├── auth/
│   │   │   │   ├── digestauth-helper.js
│   │   │   │   ├── digestauth-helper.spec.js
│   │   │   │   ├── index.ts
│   │   │   │   ├── oauth2-helper.spec.ts
│   │   │   │   └── oauth2-helper.ts
│   │   │   ├── cookies/
│   │   │   │   ├── index.spec.ts
│   │   │   │   └── index.ts
│   │   │   ├── grpc/
│   │   │   │   ├── grpc-client.js
│   │   │   │   ├── grpc-client.spec.js
│   │   │   │   ├── grpcMessageGenerator.js
│   │   │   │   └── index.ts
│   │   │   ├── index.ts
│   │   │   ├── network/
│   │   │   │   ├── axios-instance.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── system-proxy/
│   │   │   │       ├── index.spec.js
│   │   │   │       ├── index.ts
│   │   │   │       ├── types.ts
│   │   │   │       └── utils/
│   │   │   │           ├── common.spec.ts
│   │   │   │           ├── common.ts
│   │   │   │           ├── linux.spec.ts
│   │   │   │           ├── linux.ts
│   │   │   │           ├── macos.spec.ts
│   │   │   │           ├── macos.ts
│   │   │   │           ├── windows.spec.ts
│   │   │   │           └── windows.ts
│   │   │   ├── scripting/
│   │   │   │   ├── index.ts
│   │   │   │   ├── send-request.spec.ts
│   │   │   │   └── send-request.ts
│   │   │   ├── utils/
│   │   │   │   ├── agent-cache.spec.ts
│   │   │   │   ├── agent-cache.ts
│   │   │   │   ├── ca-cert.ts
│   │   │   │   ├── http-https-agents.ts
│   │   │   │   ├── node-vault.spec.ts
│   │   │   │   ├── node-vault.ts
│   │   │   │   ├── proxy-util.spec.ts
│   │   │   │   ├── proxy-util.ts
│   │   │   │   ├── shell-env.spec.ts
│   │   │   │   ├── shell-env.ts
│   │   │   │   ├── timeline-agent.ts
│   │   │   │   ├── url-validation.spec.ts
│   │   │   │   └── url-validation.ts
│   │   │   └── ws/
│   │   │       ├── ws-client.js
│   │   │       ├── ws-url.js
│   │   │       └── ws-url.spec.ts
│   │   └── tsconfig.json
│   ├── bruno-schema/
│   │   ├── .gitignore
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   └── src/
│   │       ├── collections/
│   │       │   ├── index.js
│   │       │   ├── index.spec.js
│   │       │   ├── itemSchema.spec.js
│   │       │   └── requestSchema.spec.js
│   │       ├── common/
│   │       │   └── index.js
│   │       ├── index.js
│   │       └── utils/
│   │           └── testUtils.js
│   ├── bruno-schema-types/
│   │   ├── .gitignore
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── collection/
│   │   │   │   ├── collection.ts
│   │   │   │   ├── environment.ts
│   │   │   │   ├── examples.ts
│   │   │   │   ├── folder.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── item.ts
│   │   │   ├── common/
│   │   │   │   ├── auth.ts
│   │   │   │   ├── file.ts
│   │   │   │   ├── graphql.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── key-value.ts
│   │   │   │   ├── multipart-form.ts
│   │   │   │   ├── scripts.ts
│   │   │   │   ├── uid.ts
│   │   │   │   └── variables.ts
│   │   │   ├── index.ts
│   │   │   └── requests/
│   │   │       ├── grpc.ts
│   │   │       ├── http.ts
│   │   │       ├── index.ts
│   │   │       └── websocket.ts
│   │   └── tsconfig.json
│   ├── bruno-tests/
│   │   ├── .gitignore
│   │   ├── .nvmrc
│   │   ├── additional-context-root-lib/
│   │   │   ├── index.js
│   │   │   └── lib.js
│   │   ├── collection/
│   │   │   ├── .env
│   │   │   ├── .gitignore
│   │   │   ├── .nvmrc
│   │   │   ├── asserts/
│   │   │   │   └── test-assert-combinations.bru
│   │   │   ├── auth/
│   │   │   │   ├── basic/
│   │   │   │   │   ├── via auth/
│   │   │   │   │   │   ├── Basic Auth 200.bru
│   │   │   │   │   │   └── Basic Auth 401.bru
│   │   │   │   │   └── via script/
│   │   │   │   │       ├── Basic Auth 200.bru
│   │   │   │   │       └── Basic Auth 401.bru
│   │   │   │   ├── bearer/
│   │   │   │   │   ├── via auth/
│   │   │   │   │   │   ├── Bearer Auth 200.bru
│   │   │   │   │   │   └── Bearer Auth undefined.bru
│   │   │   │   │   └── via headers/
│   │   │   │   │       └── Bearer Auth 200.bru
│   │   │   │   ├── cookie/
│   │   │   │   │   ├── Check.bru
│   │   │   │   │   └── Login.bru
│   │   │   │   ├── digest/
│   │   │   │   │   ├── Digest Auth 200.bru
│   │   │   │   │   ├── Digest Auth 401.bru
│   │   │   │   │   └── folder.bru
│   │   │   │   └── inherit auth/
│   │   │   │       └── inherit Bearer Auth 200.bru
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   ├── echo/
│   │   │   │   ├── echo bom json.bru
│   │   │   │   ├── echo form-url-encoded.bru
│   │   │   │   ├── echo headers.bru
│   │   │   │   ├── echo json.bru
│   │   │   │   ├── echo multipart scripting.bru
│   │   │   │   ├── echo multipart.bru
│   │   │   │   ├── echo numbers.bru
│   │   │   │   ├── echo plaintext.bru
│   │   │   │   ├── echo xml parsed(self closing tags).bru
│   │   │   │   ├── echo xml parsed.bru
│   │   │   │   ├── echo xml raw.bru
│   │   │   │   ├── multiline/
│   │   │   │   │   └── echo binary.bru
│   │   │   │   ├── test echo any.bru
│   │   │   │   └── test echo-any json.bru
│   │   │   ├── environments/
│   │   │   │   ├── Local.bru
│   │   │   │   └── Prod.bru
│   │   │   ├── file.json
│   │   │   ├── file.txt
│   │   │   ├── graphql/
│   │   │   │   ├── mutation.bru
│   │   │   │   ├── spacex.bru
│   │   │   │   └── variable-interpolation.bru
│   │   │   ├── lib/
│   │   │   │   ├── constants.js
│   │   │   │   ├── math.js
│   │   │   │   └── notes.js
│   │   │   ├── package.json
│   │   │   ├── ping.bru
│   │   │   ├── preview/
│   │   │   │   ├── html/
│   │   │   │   │   └── bruno.bru
│   │   │   │   └── image/
│   │   │   │       └── bruno.bru
│   │   │   ├── readme.md
│   │   │   ├── redirects/
│   │   │   │   ├── Disable Redirect.bru
│   │   │   │   ├── Test Multipart Redirect Consumed FormData.bru
│   │   │   │   ├── Test Multipart Redirect Multiple Fields.bru
│   │   │   │   ├── Test Multipart Redirect.bru
│   │   │   │   └── Test Redirect.bru
│   │   │   ├── request-setting/
│   │   │   │   ├── folder.bru
│   │   │   │   ├── follow-redirect.bru
│   │   │   │   └── max-redirect.bru
│   │   │   ├── response-parsing/
│   │   │   │   ├── test JSON false response.bru
│   │   │   │   ├── test JSON null response.bru
│   │   │   │   ├── test JSON number response.bru
│   │   │   │   ├── test JSON response.bru
│   │   │   │   ├── test JSON string response.bru
│   │   │   │   ├── test JSON string with quotes response.bru
│   │   │   │   ├── test JSON true response.bru
│   │   │   │   ├── test JSON unsafe-int response.bru
│   │   │   │   ├── test binary response.bru
│   │   │   │   ├── test html response.bru
│   │   │   │   ├── test image response.bru
│   │   │   │   ├── test invalid JSON response with formatting.bru
│   │   │   │   ├── test plain text response with formatting.bru
│   │   │   │   ├── test plain text response.bru
│   │   │   │   ├── test plain text utf16 response.bru
│   │   │   │   ├── test plain text utf16-be with BOM response.bru
│   │   │   │   ├── test plain text utf16-le with BOM response.bru
│   │   │   │   ├── test plain text utf8 with BOM response.bru
│   │   │   │   └── test xml response.bru
│   │   │   ├── scripting/
│   │   │   │   ├── api/
│   │   │   │   │   ├── bru/
│   │   │   │   │   │   ├── cookies/
│   │   │   │   │   │   │   ├── Redirect Cookie Save.bru
│   │   │   │   │   │   │   ├── clear.bru
│   │   │   │   │   │   │   ├── deleteCookie.bru
│   │   │   │   │   │   │   ├── deleteCookies.bru
│   │   │   │   │   │   │   ├── folder.bru
│   │   │   │   │   │   │   ├── getCookie.bru
│   │   │   │   │   │   │   ├── getCookies.bru
│   │   │   │   │   │   │   ├── hasCookie.bru
│   │   │   │   │   │   │   ├── setCookie.bru
│   │   │   │   │   │   │   ├── setCookieHeader.bru
│   │   │   │   │   │   │   └── setCookies.bru
│   │   │   │   │   │   ├── deleteAllCollectionVars.bru
│   │   │   │   │   │   ├── deleteAllEnvVars.bru
│   │   │   │   │   │   ├── deleteAllGlobalEnvVars.bru
│   │   │   │   │   │   ├── deleteCollectionVar.bru
│   │   │   │   │   │   ├── deleteGlobalEnvVar.bru
│   │   │   │   │   │   ├── folder.bru
│   │   │   │   │   │   ├── getAllCollectionVars.bru
│   │   │   │   │   │   ├── getAllEnvVars.bru
│   │   │   │   │   │   ├── getAllGlobalEnvVars.bru
│   │   │   │   │   │   ├── getAllVars.bru
│   │   │   │   │   │   ├── getCollectionName.bru
│   │   │   │   │   │   ├── getCollectionVar.bru
│   │   │   │   │   │   ├── getEnvName.bru
│   │   │   │   │   │   ├── getEnvVar.bru
│   │   │   │   │   │   ├── getFolderVar.bru
│   │   │   │   │   │   ├── getProcessEnv.bru
│   │   │   │   │   │   ├── getRequestVar.bru
│   │   │   │   │   │   ├── getVar.bru
│   │   │   │   │   │   ├── hasCollectionVar.bru
│   │   │   │   │   │   ├── interpolate.bru
│   │   │   │   │   │   ├── isSafeMode.bru
│   │   │   │   │   │   ├── runRequest-1.bru
│   │   │   │   │   │   ├── runRequest-2.bru
│   │   │   │   │   │   ├── runRequest.bru
│   │   │   │   │   │   ├── runner/
│   │   │   │   │   │   │   ├── 1.bru
│   │   │   │   │   │   │   ├── 2.bru
│   │   │   │   │   │   │   └── 3.bru
│   │   │   │   │   │   ├── send-request/
│   │   │   │   │   │   │   ├── folder.bru
│   │   │   │   │   │   │   ├── get-url-string.bru
│   │   │   │   │   │   │   └── usage-patterns.bru
│   │   │   │   │   │   ├── setCollectionVar.bru
│   │   │   │   │   │   ├── setEnvVar.bru
│   │   │   │   │   │   └── setVar.bru
│   │   │   │   │   ├── req/
│   │   │   │   │   │   ├── deleteHeader.bru
│   │   │   │   │   │   ├── deleteHeaders.bru
│   │   │   │   │   │   ├── getBody.bru
│   │   │   │   │   │   ├── getHeader.bru
│   │   │   │   │   │   ├── getHeaders.bru
│   │   │   │   │   │   ├── getHost.bru
│   │   │   │   │   │   ├── getMethod.bru
│   │   │   │   │   │   ├── getName.bru
│   │   │   │   │   │   ├── getPath.bru
│   │   │   │   │   │   ├── getPathParams.bru
│   │   │   │   │   │   ├── getQueryString.bru
│   │   │   │   │   │   ├── getTags.bru
│   │   │   │   │   │   ├── getUrl.bru
│   │   │   │   │   │   ├── setBody/
│   │   │   │   │   │   │   └── form-urlencoded/
│   │   │   │   │   │   │       ├── array body.bru
│   │   │   │   │   │   │       ├── content-type via setHeader.bru
│   │   │   │   │   │   │       ├── folder.bru
│   │   │   │   │   │   │       ├── object body.bru
│   │   │   │   │   │   │       └── string body.bru
│   │   │   │   │   │   ├── setBody.bru
│   │   │   │   │   │   ├── setHeader.bru
│   │   │   │   │   │   ├── setHeaders.bru
│   │   │   │   │   │   ├── setMethod.bru
│   │   │   │   │   │   └── setUrl.bru
│   │   │   │   │   └── res/
│   │   │   │   │       ├── getBody.bru
│   │   │   │   │       ├── getHeader.bru
│   │   │   │   │       ├── getHeaders.bru
│   │   │   │   │       ├── getResponseTime.bru
│   │   │   │   │       ├── getSize.bru
│   │   │   │   │       ├── getStatus.bru
│   │   │   │   │       ├── getStatusText.bru
│   │   │   │   │       ├── getUrl.bru
│   │   │   │   │       └── setBody/
│   │   │   │   │           ├── array.bru
│   │   │   │   │           ├── boolean.bru
│   │   │   │   │           ├── folder.bru
│   │   │   │   │           ├── isJson after setBody.bru
│   │   │   │   │           ├── null.bru
│   │   │   │   │           ├── number.bru
│   │   │   │   │           ├── object.bru
│   │   │   │   │           ├── string.bru
│   │   │   │   │           └── undefined.bru
│   │   │   │   ├── inbuilt modules/
│   │   │   │   │   ├── axios/
│   │   │   │   │   │   └── axios-pre-req-script.bru
│   │   │   │   │   ├── cheerio/
│   │   │   │   │   │   └── cheerio.bru
│   │   │   │   │   ├── crypto-js/
│   │   │   │   │   │   └── crypto-js-pre-request-script.bru
│   │   │   │   │   ├── crypto-utils/
│   │   │   │   │   │   ├── getRandomValues.bru
│   │   │   │   │   │   └── randomBytes.bru
│   │   │   │   │   ├── nanoid/
│   │   │   │   │   │   └── nanoid.bru
│   │   │   │   │   ├── tv4/
│   │   │   │   │   │   ├── folder.bru
│   │   │   │   │   │   └── tv4.bru
│   │   │   │   │   ├── utils.js
│   │   │   │   │   ├── uuid/
│   │   │   │   │   │   └── uuid.bru
│   │   │   │   │   └── xml2js/
│   │   │   │   │       └── xml2js.bru
│   │   │   │   ├── js/
│   │   │   │   │   ├── data types - request vars.bru
│   │   │   │   │   ├── data types.bru
│   │   │   │   │   ├── folder-collection script-tests pre.bru
│   │   │   │   │   ├── folder-collection script-tests.bru
│   │   │   │   │   ├── folder.bru
│   │   │   │   │   └── setTimeout.bru
│   │   │   │   ├── local modules/
│   │   │   │   │   ├── additional context root.bru
│   │   │   │   │   ├── invalid and valid module imports.bru
│   │   │   │   │   ├── sum (without js extn).bru
│   │   │   │   │   └── sum.bru
│   │   │   │   ├── node-builtins/
│   │   │   │   │   ├── buffer.bru
│   │   │   │   │   ├── encoding.bru
│   │   │   │   │   ├── events.bru
│   │   │   │   │   ├── fetch-api.bru
│   │   │   │   │   ├── intl.bru
│   │   │   │   │   ├── json.bru
│   │   │   │   │   ├── node-crypto.bru
│   │   │   │   │   ├── node-fs.bru
│   │   │   │   │   ├── node-os.bru
│   │   │   │   │   ├── node-path.bru
│   │   │   │   │   ├── node-querystring.bru
│   │   │   │   │   ├── node-stream.bru
│   │   │   │   │   ├── node-util.bru
│   │   │   │   │   ├── node-zlib.bru
│   │   │   │   │   ├── process.bru
│   │   │   │   │   ├── timers.bru
│   │   │   │   │   ├── url.bru
│   │   │   │   │   └── web-crypto.bru
│   │   │   │   └── npm modules/
│   │   │   │       ├── ajv.bru
│   │   │   │       ├── external-lib-bru-req-res.bru
│   │   │   │       ├── fakerjs.bru
│   │   │   │       └── jose.bru
│   │   │   ├── string interpolation/
│   │   │   │   ├── env vars.bru
│   │   │   │   ├── folder.bru
│   │   │   │   ├── missing values.bru
│   │   │   │   ├── objects-arrays interpolation.bru
│   │   │   │   ├── process env vars.bru
│   │   │   │   └── runtime vars.bru
│   │   │   └── url-serialization/
│   │   │       ├── Duplicate Keys.bru
│   │   │       └── folder.bru
│   │   ├── collection_level_oauth2/
│   │   │   ├── .gitignore
│   │   │   ├── .nvmrc
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   ├── environments/
│   │   │   │   ├── Local.bru
│   │   │   │   └── Prod.bru
│   │   │   ├── package.json
│   │   │   ├── readme.md
│   │   │   └── resource.bru
│   │   ├── collection_oauth2/
│   │   │   ├── .env
│   │   │   ├── .gitignore
│   │   │   ├── .nvmrc
│   │   │   ├── auth/
│   │   │   │   └── oauth2/
│   │   │   │       ├── authorization_code/
│   │   │   │       │   ├── github token with authorize.bru
│   │   │   │       │   ├── google token with authorize.bru
│   │   │   │       │   ├── resource.bru
│   │   │   │       │   └── token with authorize.bru
│   │   │   │       ├── client_credentials/
│   │   │   │       │   ├── resource.bru
│   │   │   │       │   └── token.bru
│   │   │   │       └── password_credentials/
│   │   │   │           ├── resource.bru
│   │   │   │           └── token.bru
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   ├── environments/
│   │   │   │   ├── Local.bru
│   │   │   │   └── Prod.bru
│   │   │   ├── file.json
│   │   │   ├── package.json
│   │   │   └── readme.md
│   │   ├── external-lib-with-bru-req-res-objects/
│   │   │   ├── index.js
│   │   │   └── package.json
│   │   ├── keycloak-authorization_code/
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   ├── environments/
│   │   │   │   └── oauth2.bru
│   │   │   ├── user_info_coll-auth.bru
│   │   │   ├── user_info_custom.bru
│   │   │   └── user_info_request-auth.bru
│   │   ├── keycloak-client-credentials/
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   ├── environments/
│   │   │   │   └── oauth2.bru
│   │   │   ├── user_info_coll-auth.bru
│   │   │   ├── user_info_custom.bru
│   │   │   └── user_info_request-auth.bru
│   │   ├── keycloak-password-credentials/
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   ├── environments/
│   │   │   │   └── oauth2.bru
│   │   │   ├── user_info_coll-auth.bru
│   │   │   ├── user_info_custom.bru
│   │   │   └── user_info_request-auth.bru
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── sandwich_exec/
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   └── folder/
│   │   │       ├── folder.bru
│   │   │       └── request.bru
│   │   ├── sequential_exec/
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   └── folder/
│   │   │       ├── folder.bru
│   │   │       └── request.bru
│   │   └── src/
│   │       ├── auth/
│   │       │   ├── basic.js
│   │       │   ├── bearer.js
│   │       │   ├── cookie.js
│   │       │   ├── index.js
│   │       │   ├── oauth2/
│   │       │   │   ├── authorizationCode.js
│   │       │   │   ├── clientCredentials.js
│   │       │   │   └── passwordCredentials.js
│   │       │   └── wsse.js
│   │       ├── echo/
│   │       │   └── index.js
│   │       ├── graphql/
│   │       │   └── index.js
│   │       ├── index.js
│   │       ├── mix/
│   │       │   └── index.js
│   │       ├── multipart/
│   │       │   ├── form-data-parser.js
│   │       │   └── index.js
│   │       ├── redirect/
│   │       │   └── index.js
│   │       ├── utils/
│   │       │   └── xmlParser.js
│   │       └── ws/
│   │           └── index.js
│   └── bruno-toml/
│       ├── lib/
│       │   └── stringify
│       ├── package.json
│       ├── src/
│       │   ├── jsonToToml.js
│       │   └── tomlToJson.js
│       └── tests/
│           ├── headers/
│           │   ├── disabled-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   ├── dotted-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   ├── duplicate-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   ├── empty-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   ├── reserved-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   ├── simple-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   ├── spaces-in-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   └── unicode-in-header/
│           │       ├── request.json
│           │       └── request.toml
│           ├── index.spec.js
│           ├── methods/
│           │   ├── delete/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   └── get/
│           │       ├── request.json
│           │       └── request.toml
│           └── scripts/
│               ├── post-response/
│               │   ├── request.json
│               │   └── request.toml
│               ├── pre-request/
│               │   ├── request.json
│               │   └── request.toml
│               └── tests/
│                   ├── request.json
│                   └── request.toml
├── playwright/
│   ├── codegen.ts
│   ├── electron.ts
│   └── index.ts
├── playwright.config.ts
├── publishing.md
├── readme.md
├── scripts/
│   ├── build-electron.js
│   ├── build-electron.sh
│   ├── changed-packages.js
│   ├── count-locs.js
│   ├── dev-hot-reload.js
│   ├── dev.js
│   ├── pr-checkout.js
│   └── setup.js
├── security.md
└── tests/
    ├── asserts/
    │   ├── add-assertions.spec.ts
    │   ├── fixtures/
    │   │   └── collection/
    │   │       ├── bruno.json
    │   │       ├── environments/
    │   │       │   └── Local.bru
    │   │       └── ping.bru
    │   └── init-user-data/
    │       └── preferences.json
    ├── collection/
    │   ├── close-all-collections/
    │   │   ├── close-all-collections.spec.ts
    │   │   ├── fixtures/
    │   │   │   └── collections/
    │   │   │       ├── collection 1/
    │   │   │       │   ├── bruno.json
    │   │   │       │   └── test-request.bru
    │   │   │       └── collection 2/
    │   │   │           ├── bruno.json
    │   │   │           └── test-request.bru
    │   │   └── init-user-data/
    │   │       └── preferences.json
    │   ├── create/
    │   │   └── create-collection.spec.ts
    │   ├── create-requests/
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── bruno.json
    │   │   │       └── folder1/
    │   │   │           └── folder.bru
    │   │   ├── graphql-requests.spec.ts
    │   │   ├── grpc-requests.spec.ts
    │   │   ├── http-requests.spec.ts
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   └── ws-requests.spec.ts
    │   ├── default-ignores/
    │   │   └── default-ignores.spec.ts
    │   ├── default-sandbox-mode/
    │   │   └── default-sandbox-mode.spec.ts
    │   ├── delete/
    │   │   └── delete-collection.spec.ts
    │   ├── draft/
    │   │   ├── draft-indicator.spec.ts
    │   │   ├── draft-values-in-requests.spec.ts
    │   │   └── fixtures/
    │   │       ├── grpcbin.proto
    │   │       └── mitmproxy-ca-cert.cer
    │   ├── moving-requests/
    │   │   ├── cross-collection-drag-drop-folder.spec.ts
    │   │   ├── cross-collection-drag-drop-request.spec.ts
    │   │   └── tag-persistence.spec.ts
    │   ├── moving-tabs/
    │   │   └── move-tabs.spec.ts
    │   └── open/
    │       └── open-multiple-collections.spec.ts
    ├── cookies/
    │   ├── cookie-persistence.spec.ts
    │   └── corrupted-passkey.spec.ts
    ├── devtools/
    │   └── performance/
    │       └── performance-tab.spec.ts
    ├── dotenv/
    │   └── special-chars-collection-path/
    │       └── dotenv-special-chars.spec.ts
    ├── editable-table/
    │   └── editable-table.spec.ts
    ├── environments/
    │   ├── api-deleteEnvVar/
    │   │   ├── api-deleteEnvVar.spec.ts
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── api-deleteEnvVar.bru
    │   │   │       ├── bruno.json
    │   │   │       └── environments/
    │   │   │           └── Stage.bru
    │   │   └── init-user-data/
    │   │       ├── collection-security.json
    │   │       └── preferences.json
    │   ├── api-setEnvVar/
    │   │   ├── api-setEnvVar-with-persist.spec.ts
    │   │   ├── api-setEnvVar-without-persist.spec.ts
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── api-setEnvVar-with-persist.bru
    │   │   │       ├── api-setEnvVar-without-persist.bru
    │   │   │       ├── bruno.json
    │   │   │       ├── environments/
    │   │   │       │   └── Stage.bru
    │   │   │       └── multiple-persist-vars-folder/
    │   │   │           ├── folder.bru
    │   │   │           ├── multiple-persist-vars-1.bru
    │   │   │           └── multiple-persist-vars-2.bru
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   └── multiple-persist-vars.spec.ts
    │   ├── collection-env-config-selection/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   ├── environments/
    │   │   │   │   ├── dev.bru
    │   │   │   │   └── prod.bru
    │   │   │   └── test-request.bru
    │   │   ├── collection-env-config-selection.spec.ts
    │   │   └── init-user-data/
    │   │       ├── collection-security.json
    │   │       └── preferences.json
    │   ├── color-picker/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   └── test-request.bru
    │   │   ├── color-picker.spec.ts
    │   │   └── init-user-data/
    │   │       ├── collection-security.json
    │   │       ├── global-environments.json
    │   │       └── preferences.json
    │   ├── create-environment/
    │   │   ├── collection-env-create.spec.ts
    │   │   ├── fixtures/
    │   │   │   └── bruno-collection.json
    │   │   └── global-env-create.spec.ts
    │   ├── export-environment/
    │   │   ├── collection-env-export/
    │   │   │   ├── collection-env-export.spec.ts
    │   │   │   ├── fixtures/
    │   │   │   │   └── collection/
    │   │   │   │       ├── bruno.json
    │   │   │   │       ├── environments/
    │   │   │   │       │   ├── local.bru
    │   │   │   │       │   └── prod.bru
    │   │   │   │       └── test-request.bru
    │   │   │   └── init-user-data/
    │   │   │       ├── collection-security.json
    │   │   │       ├── global-environments.json
    │   │   │       └── preferences.json
    │   │   └── global-env-export/
    │   │       ├── fixtures/
    │   │       │   └── collection/
    │   │       │       ├── bruno.json
    │   │       │       └── test-request.bru
    │   │       ├── global-env-export.spec.ts
    │   │       └── init-user-data/
    │   │           ├── collection-security.json
    │   │           ├── global-environments.json
    │   │           └── preferences.json
    │   ├── fixtures/
    │   │   └── environment-exports/
    │   │       ├── bruno-collection-environments/
    │   │       │   ├── local.json
    │   │       │   └── prod.json
    │   │       ├── bruno-collection-environments.json
    │   │       ├── bruno-global-environments/
    │   │       │   ├── local.json
    │   │       │   └── prod.json
    │   │       ├── bruno-global-environments.json
    │   │       └── local.json
    │   ├── focus-retention/
    │   │   └── environment-focus.spec.ts
    │   ├── global-env-config-selection/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   └── test-request.bru
    │   │   ├── global-env-config-selection.spec.ts
    │   │   └── init-user-data/
    │   │       ├── collection-security.json
    │   │       ├── global-environments.json
    │   │       └── preferences.json
    │   ├── import-environment/
    │   │   ├── bruno-env-import/
    │   │   │   ├── collection-env-import/
    │   │   │   │   ├── collection-env-import.spec.ts
    │   │   │   │   ├── fixtures/
    │   │   │   │   │   └── collection/
    │   │   │   │   │       ├── bruno.json
    │   │   │   │   │       └── test-request.bru
    │   │   │   │   └── init-user-data/
    │   │   │   │       ├── collection-security.json
    │   │   │   │       └── preferences.json
    │   │   │   └── global-env-import/
    │   │   │       ├── fixtures/
    │   │   │       │   └── collection/
    │   │   │       │       ├── bruno.json
    │   │   │       │       └── test-request.bru
    │   │   │       ├── global-env-import.spec.ts
    │   │   │       └── init-user-data/
    │   │   │           ├── collection-security.json
    │   │   │           └── preferences.json
    │   │   ├── collection-env-import.spec.ts
    │   │   ├── env-color-import/
    │   │   │   ├── env-color-import.spec.ts
    │   │   │   ├── fixtures/
    │   │   │   │   ├── collection/
    │   │   │   │   │   ├── bruno.json
    │   │   │   │   │   └── test-request.bru
    │   │   │   │   ├── env-with-color.json
    │   │   │   │   └── multiple-envs-with-colors.json
    │   │   │   └── init-user-data/
    │   │   │       ├── collection-security.json
    │   │   │       └── preferences.json
    │   │   ├── fixtures/
    │   │   │   ├── collection-env.json
    │   │   │   ├── collection.json
    │   │   │   └── global-env.json
    │   │   └── global-env-import.spec.ts
    │   ├── multiline-variables/
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── bruno.json
    │   │   │       ├── collection.bru
    │   │   │       ├── environments/
    │   │   │       │   └── Test.bru
    │   │   │       ├── multiline-test.bru
    │   │   │       └── request.bru
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   ├── read-multiline-environment.spec.ts
    │   │   └── write-multiline-variable.spec.ts
    │   └── update-global-environment-via-script/
    │       ├── fixtures/
    │       │   └── collection/
    │       │       ├── bruno.json
    │       │       ├── collection.bru
    │       │       └── test-request.bru
    │       ├── global-env-update-via-script.spec.ts
    │       └── init-user-data/
    │           ├── collection-security.json
    │           ├── global-environments.json
    │           └── preferences.json
    ├── footer/
    │   ├── notifications/
    │   │   └── notifications.spec.js
    │   └── sidebar-toggle/
    │       └── sidebar-toggle.spec.js
    ├── global-environments/
    │   ├── collection/
    │   │   ├── bruno.json
    │   │   └── set-global-nonstring.bru
    │   ├── init-user-data/
    │   │   └── preferences.json
    │   └── non-string-values.spec.ts
    ├── grpc/
    │   ├── make-request/
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── HelloService/
    │   │   │       │   ├── BidiHello.bru
    │   │   │       │   ├── LotOfGreetings.bru
    │   │   │       │   ├── LotOfReplies.bru
    │   │   │       │   ├── SayHello.bru
    │   │   │       │   └── folder.bru
    │   │   │       ├── bruno.json
    │   │   │       ├── collection.bru
    │   │   │       └── environments/
    │   │   │           └── Env.bru
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   └── make-request.spec.ts
    │   ├── metadata/
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── bruno.json
    │   │   │       ├── collection.bru
    │   │   │       └── sayHello.bru
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   └── with-bin-metadata.spec.ts
    │   └── method-search/
    │       ├── fixtures/
    │       │   └── grpc-collection/
    │       │       ├── SayHello.bru
    │       │       ├── bruno.json
    │       │       └── environments/
    │       │           └── GrpcEnv.bru
    │       ├── grpc-method-search.spec.ts
    │       └── init-user-data/
    │           ├── collection-security.json
    │           └── preferences.json
    ├── import/
    │   ├── bruno/
    │   │   ├── fixtures/
    │   │   │   ├── bruno-invalid-corrupted.json
    │   │   │   ├── bruno-malformed.json
    │   │   │   ├── bruno-missing-required-fields.json
    │   │   │   ├── bruno-testbench.json
    │   │   │   └── bruno-with-examples.json
    │   │   ├── import-bruno-corrupted-fails.spec.ts
    │   │   ├── import-bruno-missing-required-schema.spec.ts
    │   │   ├── import-bruno-testbench.spec.ts
    │   │   └── import-bruno-with-examples.spec.ts
    │   ├── bulk-import/
    │   │   ├── 001-multiple-files-upload.spec.ts
    │   │   └── 002-all-collection-types.spec.ts
    │   ├── file-types/
    │   │   ├── file-input-acceptance.spec.ts
    │   │   ├── fixtures/
    │   │   │   └── invalid.txt
    │   │   └── invalid-file-handling.spec.ts
    │   ├── insomnia/
    │   │   ├── fixtures/
    │   │   │   ├── insomnia-malformed.json
    │   │   │   ├── insomnia-v4-with-envs.json
    │   │   │   ├── insomnia-v4.json
    │   │   │   ├── insomnia-v5-invalid-missing-collection.yaml
    │   │   │   ├── insomnia-v5-with-envs.yaml
    │   │   │   └── insomnia-v5.yaml
    │   │   ├── import-insomnia-v4-environments.spec.ts
    │   │   ├── import-insomnia-v4.spec.ts
    │   │   ├── import-insomnia-v5-environments.spec.ts
    │   │   ├── import-insomnia-v5.spec.ts
    │   │   ├── invalid-missing-collection.spec.ts
    │   │   └── malformed-structure.spec.ts
    │   ├── openapi/
    │   │   ├── cli/
    │   │   │   ├── fixtures/
    │   │   │   │   └── openapi.json
    │   │   │   └── group-by-import.spec.ts
    │   │   ├── duplicate-operation-names-fix.spec.ts
    │   │   ├── fixtures/
    │   │   │   ├── openapi-comprehensive.yaml
    │   │   │   ├── openapi-duplicate-operation-name.yaml
    │   │   │   ├── openapi-invalid-version.yaml
    │   │   │   ├── openapi-malformed.yaml
    │   │   │   ├── openapi-missing-info.yaml
    │   │   │   ├── openapi-newline-in-operation-name.yaml
    │   │   │   ├── openapi-path-grouping.json
    │   │   │   ├── openapi-simple.json
    │   │   │   ├── openapi-with-examples.yaml
    │   │   │   ├── openapi-with-security-schemes.json
    │   │   │   └── openapi-without-security-schemes.json
    │   │   ├── import-openapi-json.spec.ts
    │   │   ├── import-openapi-with-examples.spec.ts
    │   │   ├── import-openapi-yaml.spec.ts
    │   │   ├── malformed-yaml.spec.ts
    │   │   ├── missing-info.spec.ts
    │   │   ├── operation-name-with-newlines-fix.spec.ts
    │   │   ├── path-based-grouping.spec.ts
    │   │   └── security-schemes-import.spec.ts
    │   ├── postman/
    │   │   ├── fixtures/
    │   │   │   ├── postman-invalid-missing-info.json
    │   │   │   ├── postman-invalid-schema.json
    │   │   │   ├── postman-malformed.json
    │   │   │   ├── postman-v20.json
    │   │   │   ├── postman-v21.json
    │   │   │   └── postman-with-examples.json
    │   │   ├── import-postman-v20.spec.ts
    │   │   ├── import-postman-v21.spec.ts
    │   │   ├── import-postman-with-examples.spec.ts
    │   │   ├── invalid-json.spec.ts
    │   │   ├── invalid-missing-info.spec.ts
    │   │   ├── invalid-schema.spec.ts
    │   │   └── malformed-structure.spec.ts
    │   ├── test-data/
    │   │   ├── sample-bruno.json
    │   │   ├── sample-insomnia.json
    │   │   ├── sample-openapi.yaml
    │   │   └── sample-postman.json
    │   ├── url-import/
    │   │   ├── github-repository-import.spec.ts
    │   │   ├── insomnia-url-import.spec.ts
    │   │   ├── openapi-url-import.spec.ts
    │   │   └── postman-url-import.spec.ts
    │   └── wsdl/
    │       ├── fixtures/
    │       │   ├── wsdl-bruno.json
    │       │   └── wsdl.xml
    │       └── import-wsdl.spec.ts
    ├── interpolation/
    │   ├── collection/
    │   │   ├── bruno.json
    │   │   ├── echo-request-odata.bru
    │   │   └── echo-request-url.bru
    │   ├── dynamic-variable/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   └── set-var-dynamic-variable.bru
    │   │   ├── init-user-data/
    │   │   │   └── preferences.json
    │   │   └── set-var-dynamic-variable.spec.ts
    │   ├── init-user-data/
    │   │   ├── collection-security.json
    │   │   └── preferences.json
    │   ├── interpolate-request-url.spec.ts
    │   └── prompt-variables/
    │       ├── fixtures/
    │       │   ├── client.pfx
    │       │   └── collection/
    │       │       ├── bruno.json
    │       │       ├── collection.bru
    │       │       ├── environments/
    │       │       │   └── local.bru
    │       │       └── http-folder/
    │       │           ├── folder.bru
    │       │           ├── http-request-without-ca.bru
    │       │           └── https-request-with-ca.bru
    │       ├── http-request-prompt-variables.spec.ts
    │       └── init-user-data/
    │           ├── collection-security.json
    │           ├── global-environments.json
    │           ├── preferences.json
    │           └── ui-state-snapshot.json
    ├── onboarding/
    │   ├── init-user-data/
    │   │   └── preferences.json
    │   ├── init-user-data-fresh/
    │   │   └── preferences.json
    │   ├── sample-collection.spec.ts
    │   └── welcome-modal.spec.ts
    ├── preferences/
    │   ├── autosave/
    │   │   └── autosave.spec.ts
    │   ├── default-collection-location/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   ├── collection.bru
    │   │   │   ├── environments/
    │   │   │   │   └── Test.bru
    │   │   │   └── request.bru
    │   │   ├── default-collection-location.spec.js
    │   │   └── init-user-data/
    │   │       ├── collection-security.json
    │   │       └── preferences.json
    │   ├── support-links.spec.js
    │   └── tab-switch-persistence/
    │       └── tab-switch-persistence.spec.ts
    ├── protobuf/
    │   ├── fixtures/
    │   │   └── collection/
    │   │       ├── HelloService/
    │   │       │   ├── folder.bru
    │   │       │   └── sayHello.bru
    │   │       ├── bruno.json
    │   │       ├── collection.bru
    │   │       ├── environments/
    │   │       │   └── GrpcEnv.bru
    │   │       └── protos/
    │   │           ├── services/
    │   │           │   ├── order.proto
    │   │           │   └── product.proto
    │   │           └── types/
    │   │               └── product-message.proto
    │   ├── init-user-data/
    │   │   ├── collection-security.json
    │   │   └── preferences.json
    │   └── manage-protofile.spec.ts
    ├── request/
    │   ├── body-scroll/
    │   │   └── body-scroll-restoration.spec.ts
    │   ├── collections/
    │   │   └── custom-search/
    │   │       ├── bruno.json
    │   │       ├── package.json
    │   │       └── search-request.bru
    │   ├── copy-request/
    │   │   ├── copy-folder.spec.ts
    │   │   ├── copy-request.spec.ts
    │   │   └── keyboard-shortcuts.spec.ts
    │   ├── delete-request/
    │   │   └── delete-request-sequence-updation.spec.ts
    │   ├── encoding/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   ├── encode-url-preencoded.bru
    │   │   │   ├── encode-url-unencoded.bru
    │   │   │   ├── raw-url-preencoded.bru
    │   │   │   └── raw-url-unencoded.bru
    │   │   ├── curl-encoding.spec.ts
    │   │   └── init-user-data/
    │   │       ├── collection-security.json
    │   │       └── preferences.json
    │   ├── headers/
    │   │   └── header-validation.spec.ts
    │   ├── newlines/
    │   │   └── newlines-persistence.spec.ts
    │   ├── response-pane-update-when-focused.spec.ts
    │   ├── save/
    │   │   └── save.spec.ts
    │   ├── settings/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   ├── max-redirects.bru
    │   │   │   ├── no-redirects.bru
    │   │   │   └── timeout.bru
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   ├── max-redirects.spec.ts
    │   │   ├── no-redirects.spec.ts
    │   │   └── timeout.spec.ts
    │   └── tests/
    │       └── custom-search/
    │           ├── custom-search.spec.ts
    │           └── init-user-data/
    │               ├── collection-security.json
    │               └── preferences.json
    ├── response/
    │   ├── json-response-formatting/
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── bruno.json
    │   │   │       └── request.bru
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   └── json-response-formatting.spec.ts
    │   ├── large-response-crash-prevention.spec.ts
    │   ├── response-actions.spec.ts
    │   └── response-format-select-and-preview/
    │       ├── fixtures/
    │       │   └── collection/
    │       │       ├── bruno.json
    │       │       ├── request-html.bru
    │       │       └── request-json.bru
    │       ├── init-user-data/
    │       │   ├── collection-security.json
    │       │   └── preferences.json
    │       └── response-format-select-and-preview.spec.ts
    ├── response-examples/
    │   ├── create-example.spec.ts
    │   ├── edit-example.spec.ts
    │   ├── fixtures/
    │   │   └── collection/
    │   │       ├── bruno.json
    │   │       ├── create-example.bru
    │   │       ├── edit-example.bru
    │   │       └── menu-operations.bru
    │   ├── init-user-data/
    │   │   ├── collection-security.json
    │   │   └── preferences.json
    │   └── menu-operations.spec.ts
    ├── runner/
    │   ├── cli-env-combined/
    │   │   ├── cli-env-combined.spec.ts
    │   │   └── collection/
    │   │       ├── bruno.json
    │   │       ├── environments/
    │   │       │   └── CollectionEnv.bru
    │   │       ├── global-env.json
    │   │       └── request.bru
    │   ├── cli-json-env-file/
    │   │   ├── cli-json-env-file.spec.ts
    │   │   └── collection/
    │   │       ├── bruno.json
    │   │       ├── env.json
    │   │       └── request.bru
    │   ├── collection-run-report/
    │   │   ├── collection/
    │   │   │   ├── api/
    │   │   │   │   └── v1/
    │   │   │   │       ├── posts.bru
    │   │   │   │       └── users.bru
    │   │   │   ├── auth/
    │   │   │   │   ├── login.bru
    │   │   │   │   └── logout.bru
    │   │   │   └── bruno.json
    │   │   ├── collection-run-report.spec.ts
    │   │   └── collection-run-report.spec.ts-snapshots/
    │   │       ├── cli-junit-report-default-darwin.xml
    │   │       └── cli-junit-report-default-linux.xml
    │   ├── collection-run.ts
    │   └── init-user-data/
    │       └── preferences.json
    ├── scratch-requests/
    │   └── scratch-requests.spec.ts
    ├── scripting/
    │   ├── bru-api/
    │   │   └── isSafeMode/
    │   │       ├── fixtures/
    │   │       │   └── collections/
    │   │       │       └── is-safe-mode-test/
    │   │       │           ├── bruno.json
    │   │       │           ├── test-safe-mode-false.bru
    │   │       │           └── test-safe-mode-true.bru
    │   │       ├── init-user-data/
    │   │       │   ├── collection-security.json
    │   │       │   └── preferences.json
    │   │       └── isSafeMode.spec.ts
    │   ├── inbuilt-libraries/
    │   │   ├── fs/
    │   │   │   ├── fixtures/
    │   │   │   │   └── collections/
    │   │   │   │       └── should_allow_fs/
    │   │   │   │           ├── bruno.json
    │   │   │   │           └── request.bru
    │   │   │   ├── fs.spec.ts
    │   │   │   └── init-user-data/
    │   │   │       └── preferences.json
    │   │   └── jsonwebtoken/
    │   │       ├── fixtures/
    │   │       │   └── collection/
    │   │       │       ├── bruno.json
    │   │       │       ├── decode/
    │   │       │       │   ├── decode.bru
    │   │       │       │   └── folder.bru
    │   │       │       ├── environments/
    │   │       │       │   └── Prod.bru
    │   │       │       ├── sign/
    │   │       │       │   ├── folder.bru
    │   │       │       │   ├── sign with callback err.bru
    │   │       │       │   ├── sign with callback token.bru
    │   │       │       │   └── sign.bru
    │   │       │       └── verify/
    │   │       │           ├── folder.bru
    │   │       │           ├── verify with callback err.bru
    │   │       │           ├── verify with callback token.bru
    │   │       │           └── verify.bru
    │   │       ├── init-user-data/
    │   │       │   ├── preferences.json
    │   │       │   └── ui-state-snapshot.json
    │   │       └── jsonwebtoken.spec.ts
    │   └── url-helpers/
    │       ├── fixtures/
    │       │   └── collections/
    │       │       └── url_helpers_test/
    │       │           ├── bruno.json
    │       │           └── url-helpers-test.bru
    │       ├── init-user-data/
    │       │   └── preferences.json
    │       └── url-helpers.spec.ts
    ├── sidebar/
    │   ├── rename-collection-item.spec.ts
    │   └── section-auto-expand.spec.ts
    ├── ssl/
    │   ├── basic-ssl/
    │   │   ├── collections/
    │   │   │   ├── badssl/
    │   │   │   │   ├── bruno.json
    │   │   │   │   ├── package.json
    │   │   │   │   └── request.bru
    │   │   │   └── self-signed-badssl/
    │   │   │       ├── bruno.json
    │   │   │       ├── package.json
    │   │   │       └── request.bru
    │   │   └── tests/
    │   │       ├── basic-ssl-success/
    │   │       │   ├── basic-ssl-success.spec.ts
    │   │       │   └── init-user-data/
    │   │       │       └── preferences.json
    │   │       ├── self-signed-rejected/
    │   │       │   ├── init-user-data/
    │   │       │   │   └── preferences.json
    │   │       │   └── self-signed-rejected.spec.ts
    │   │       └── self-signed-success-with-validation-disabled/
    │   │           ├── init-user-data/
    │   │           │   └── preferences.json
    │   │           └── self-signed-success-with-validation-disabled.spec.ts
    │   └── custom-ca-certs/
    │       ├── collection/
    │       │   ├── bruno.json
    │       │   ├── package.json
    │       │   └── request.bru
    │       ├── server/
    │       │   ├── .gitignore
    │       │   ├── helpers/
    │       │   │   ├── certs.js
    │       │   │   └── platform.js
    │       │   ├── index.js
    │       │   ├── readme.md
    │       │   └── scripts/
    │       │       └── generate-certs.js
    │       └── tests/
    │           ├── custom-invalid-ca-cert-in-config/
    │           │   ├── custom-invalid-ca-cert-in-config.spec.ts
    │           │   └── init-user-data/
    │           │       └── preferences.json
    │           ├── custom-invalid-ca-cert-in-config-with-defaults/
    │           │   ├── custom-invalid-ca-cert-in-config-with-defaults.spec.ts
    │           │   └── init-user-data/
    │           │       └── preferences.json
    │           ├── custom-valid-ca-cert-in-config/
    │           │   ├── custom-valid-ca-cert-in-config.spec.ts
    │           │   └── init-user-data/
    │           │       └── preferences.json
    │           ├── custom-valid-ca-cert-in-config-with-defaults/
    │           │   ├── custom-valid-ca-cert-in-config-with-defaults.spec.ts
    │           │   └── init-user-data/
    │           │       └── preferences.json
    │           └── wss-success/
    │               ├── fixtures/
    │               │   └── wss-collection/
    │               │       ├── bruno.json
    │               │       ├── package.json
    │               │       └── ws-ssl-request.bru
    │               ├── init-user-data/
    │               │   └── preferences.json
    │               └── wss-success.spec.ts
    ├── start/
    │   └── app-open.spec.ts
    ├── transient-requests/
    │   └── transient-requests.spec.ts
    ├── utils/
    │   ├── page/
    │   │   ├── actions.ts
    │   │   ├── index.ts
    │   │   ├── locators.ts
    │   │   ├── navigation.ts
    │   │   └── runner.ts
    │   └── wait.ts
    ├── variable-tooltip/
    │   └── variable-tooltip.spec.ts
    ├── websockets/
    │   ├── connection.spec.ts
    │   ├── fixtures/
    │   │   └── collection/
    │   │       ├── base.bru
    │   │       ├── bruno.json
    │   │       ├── collection.bru
    │   │       ├── ws-test-request-with-headers.bru
    │   │       ├── ws-test-request-with-query.bru
    │   │       ├── ws-test-request-with-subproto.bru
    │   │       └── ws-test-request.bru
    │   ├── headers.spec.ts
    │   ├── init-user-data/
    │   │   ├── collection-security.json
    │   │   └── preferences.json
    │   ├── persistence.spec.ts
    │   ├── query.spec.ts
    │   ├── subproto.spec.ts
    │   └── variable-interpolation/
    │       ├── fixtures/
    │       │   └── collection/
    │       │       ├── bruno.json
    │       │       ├── environments/
    │       │       │   └── Test.bru
    │       │       └── ws-interpolation-test.bru
    │       ├── init-user-data/
    │       │   └── preferences.json
    │       └── variable-interpolation.spec.ts
    └── workspace/
        ├── close-tab-stays-in-workspace.spec.ts
        ├── collection-reorder-persistence.spec.ts
        ├── create-workspace/
        │   ├── create-workspace.spec.ts
        │   └── init-user-data/
        │       └── preferences.json
        └── default-workspace/
            ├── default-workspace.spec.ts
            ├── migration.spec.ts
            └── recovery-and-backup.spec.ts

================================================
FILE CONTENTS
================================================

================================================
FILE: .coderabbit.yaml
================================================
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

language: 'en-US'
early_access: false
tone_instructions: 'You are an expert code reviewer in TypeScript, JavaScript, NodeJS, and ElectronJS. You work in an enterprise software developer team, providing concise and clear code review advice. You only elaborate or provide detailed explanations when requested.'

knowledge_base:
  opt_out: false
  code_guidelines:
    enabled: true
    filePatterns:
      - '**/CODING_STANDARDS.md'

reviews:
  profile: 'chill'
  request_changes_workflow: false
  high_level_summary: true
  poem: true
  review_status: true
  collapse_walkthrough: false
  auto_review:
    enabled: true
    drafts: false
    base_branches: ['main', 'release/*']
  path_instructions:
    - path: '**/*'
      instructions: |
        Bruno is a cross-platform Electron desktop app that runs on macOS, Windows, and Linux. Ensure that all code is OS-agnostic:
        - File paths must use `path.join()` or `path.resolve()` instead of hardcoded `/` or `\\` separators
        - Never assume case-sensitive or case-insensitive filesystems
        - Use `os.homedir()`, `app.getPath()`, or environment-appropriate APIs instead of hardcoded paths like `/home/`, `C:\\Users\\`, or `~/`
        - Line endings should be handled consistently (be aware of CRLF vs LF issues)
        - Use `path.sep` or `path.posix`/`path.win32` when platform-specific separators are needed
        - Shell commands or child_process calls must account for platform differences (e.g., `which` vs `where`, `/bin/sh` vs `cmd.exe`)
        - File permissions (e.g., `fs.chmod`, `fs.access`) should account for Windows not supporting Unix-style permission bits
        - Avoid relying on Unix-only signals (e.g., `SIGKILL`) without Windows fallbacks
        - Use `os.tmpdir()` instead of hardcoding `/tmp`
        - Environment variable access should handle platform differences (e.g., `HOME` vs `USERPROFILE`)
    - path: 'tests/**/**.*'
      instructions: |
        Review the following e2e test code written using the Playwright test library. Ensure that:
        - Follow best practices for Playwright code and e2e automation
        - Try to reduce usage of `page.waitForTimeout();` in code unless absolutely necessary and the locator cannot be found using existing `expect()` playwright calls
        - Avoid using `page.pause()` in code
        - Use locator variables for locators
        - Avoid using test.only
        - Use multiple assertions
        - Promote the use of `test.step` as much as possible so the generated reports are easier to read
        - Ensure that the `fixtures` like the collections are nested inside the `fixtures` folder 
          


          **Fixture Example***: Here's an example of possible fixture and test pair
          ```
          .
          ├── fixtures
          │   └── collection
          │       ├── base.bru
          │       ├── bruno.json
          │       ├── collection.bru
          │       ├── ws-test-request-with-headers.bru
          │       ├── ws-test-request-with-subproto.bru
          │       └── ws-test-request.bru
          ├── connection.spec.ts # <- Depends on the collection in ./fixtures/collection
          ├── headers.spec.ts
          ├── persistence.spec.ts
          ├── variable-interpolation
          │   ├── fixtures
          │   │   └── collection
          │   │       ├── environments
          │   │       ├── bruno.json
          │   │       └── ws-interpolation-test.bru
          │   ├── init-user-data
          │   └── variable-interpolation.spec.ts # <- Depends on the collection in ./variable-interpolation/fixtures/collection
          └── subproto.spec.ts
          ```

chat:
  auto_reply: true


================================================
FILE: .github/CODEOWNERS
================================================
* @helloanoop @maintainer-bruno @bijin-bruno @lohit-bruno @naman-bruno


================================================
FILE: .github/ISSUE_TEMPLATE/BugReport.yaml
================================================
name: Bug Report
description: File a bug report
labels: ['bug']
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this bug report!

        Before submitting, please make sure you've searched existing issues:
        👉 [Search existing issues](https://github.com/usebruno/bruno/issues?q=is%3Aissue)

  - type: checkboxes
    attributes:
      label: 'I have checked the following:'
      options:
        - label: "I have searched existing issues and found nothing related to my issue."
          required: true

  - type: checkboxes
    attributes:
      label: 'This bug is:'
      options:
        - label: making Bruno unusable for me
          required: false
        - label: slowing me down but I'm able to continue working
          required: false
        - label: annoying
          required: false
        - label: this feature was working in a previous version but is broken in the current release.
          required: false

  - type: input
    attributes:
      label: Bruno version
      description: Please specify the version of Bruno you are using in which the issue occurs.
      placeholder: 1.38.1
    validations:
      required: true

  - type: input
    attributes:
      label: Operating System
      description: Information about the operating system the issue occurs on.
      placeholder: Windows 11 26100.3037 / macOS 15.1 (24B83) / Linux 6.13.1
    validations:
      required: true

  - type: textarea
    attributes:
      label: Describe the bug
      description: A clear and concise description of the bug and how it's effecting your work along with steps to reproduce. 
    validations:
      required: true

  - type: textarea
    attributes:
      label: .bru file to reproduce the bug
      description: Attach your .bru file here that can reproduce the problem.
    validations:
      required: false

  - type: textarea
    attributes:
      label: Screenshots/Live demo link
      description: Add some screenshots to help explain the problem.
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/FeatureRequest.yaml
================================================
name: Feature Request
description: Suggest an idea for this project.
labels: ['enhancement']
body:
  - type: checkboxes
    attributes:
      label: 'I have checked the following:'
      options:
        - label: I've searched existing issues and found nothing related to my issue.
          required: true
  - type: checkboxes
    attributes:
      label: 'This feature'
      options:
        - label: blocks me from using Bruno 
          required: false
        - label: would improve my quality of life in Bruno 
          required: false
        - label: is something I've never seen an API client do before
          required: false
  - type: markdown
    attributes:
      value: |
        Suggest an idea for this project.
  - type: textarea
    attributes:
      label: Describe the feature you want to add, and how it would change your usage of Bruno 
      description: A clear and concise description of the feature you want to be added.
    validations:
      required: true
  - type: textarea
    attributes:
      label: Mockups or Images of the feature
      description: Add some images to support your feature.
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE/config.yaml
================================================
blank_issues_enabled: true
contact_links:
  - name: Discussions
    url: https://github.com/usebruno/bruno/discussions
    about: You can ask general questions or give feedback here.
  - name: Discord Server
    url: https://discord.com/invite/KgcZUncpjq
    about: Join our Discord community to chat about Bruno.


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
### Description

<!-- Explain here the changes your PR introduces and text to help us understand the context of this change. -->

#### Contribution Checklist:

- [ ] **I've used AI significantly to create this pull request**
- [ ] **The pull request only addresses one issue or adds one feature.**
- [ ] **The pull request does not introduce any breaking changes**
- [ ] **I have added screenshots or gifs to help explain the change if applicable.**
- [ ] **I have read the [contribution guidelines](https://github.com/usebruno/bruno/blob/main/contributing.md).**
- [ ] **Create an issue and link to the pull request.**

Note: Keeping the PR small and focused helps make it easier to review and merge. If you have multiple changes you want to make, please consider submitting them as separate pull requests.

#### Publishing to New Package Managers

Please see [here](../publishing.md) for more information.


================================================
FILE: .github/actions/common/setup-node-deps/action.yml
================================================
name: 'Setup Node Dependencies'
description: 'Install Node.js and npm dependencies'
inputs:
  skip-build:
    description: 'Skip building libraries'
    required: false
    default: 'false'
runs:
  using: 'composite'
  steps:
    - name: Setup Node.js
      uses: actions/setup-node@v4
      with:
        node-version: v22.17.0
        cache: 'npm'
        cache-dependency-path: './package-lock.json'

    - name: Install node dependencies
      shell: bash
      run: npm ci --legacy-peer-deps

    - name: Build libraries
      if: inputs.skip-build != 'true'
      shell: bash
      run: |
        npm run build:graphql-docs
        npm run build:bruno-query
        npm run build:bruno-common
        npm run sandbox:bundle-libraries --workspace=packages/bruno-js
        npm run build:bruno-converters
        npm run build:bruno-requests
        npm run build:schema-types
        npm run build:bruno-filestore


================================================
FILE: .github/actions/ssl/linux/run-basic-ssl-cli-tests/action.yml
================================================
name: 'Run Basic SSL CLI Tests - Linux'
description: 'Run basic SSL CLI tests on Linux'
runs:
  using: 'composite'
  steps:
    - name: Run CLI tests
      shell: bash
      run: |
        set -euo pipefail
        
        # navigate to basic SSL test collection directory
        cd tests/ssl/basic-ssl/collections/badssl

        echo "basic ssl success"
        # should pass
        node ../../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit1.xml --insecure --format junit
        xmllint --xpath 'count(//testsuite[@errors="0"])' junit1.xml | grep -q "^1$" || exit 1

        echo "with default/system ca certs"
        # should pass
        node ../../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit2.xml --format junit
        xmllint --xpath 'count(//testsuite[@errors="0"])' junit2.xml | grep -q "^1$" || exit 1

        # navigate to self-signed SSL test collection directory
        cd ../self-signed-badssl

        echo "self-signed ssl with validation disabled"
        # should pass
        node ../../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit3.xml --insecure --format junit
        xmllint --xpath 'count(//testsuite[@errors="0"])' junit3.xml | grep -q "^1$" || exit 1

        echo "self-signed ssl with default/system ca certs"
        echo "request will error"
        # should fail
        node ../../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit4.xml --format junit 2>/dev/null || true
        xmllint --xpath 'count(//testsuite[@errors="1"])' junit4.xml | grep -q "^1$" || exit 1


================================================
FILE: .github/actions/ssl/linux/run-custom-ca-certs-cli-tests/action.yml
================================================
name: 'Run Custom CA Certs CLI Tests - Linux'
description: 'Run custom CA certs CLI tests on Linux'
runs:
  using: 'composite'
  steps:
    - name: Run CLI tests
      shell: bash
      run: |
        set -euo pipefail
        
        # navigate to CA certificates test collection directory
        cd tests/ssl/custom-ca-certs/collection

        echo "custom valid ca cert"
        # should pass
        node ../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit1.xml --cacert ../server/certs/ca-cert.pem --ignore-truststore --format junit
        xmllint --xpath 'count(//testsuite[@errors="0"])' junit1.xml | grep -q "^1$" || exit 1

        echo "custom valid ca cert with defaults"
        # should pass
        node ../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit2.xml --cacert ../server/certs/ca-cert.pem --format junit
        xmllint --xpath 'count(//testsuite[@errors="0"])' junit2.xml | grep -q "^1$" || exit 1

        echo "custom invalid ca cert"
        echo "request will error"
        # should fail
        node ../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit3.xml --cacert ../server/certs/ca-key.pem --ignore-truststore --format junit 2>/dev/null || true
        xmllint --xpath 'count(//testsuite[@errors="1"])' junit3.xml | grep -q "^1$" || exit 1

        echo "custom invalid ca cert with defaults"
        # should pass
        node ../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit4.xml --cacert ../server/certs/ca-key.pem --format junit
        xmllint --xpath 'count(//testsuite[@errors="0"])' junit4.xml | grep -q "^1$" || exit 1


================================================
FILE: .github/actions/ssl/linux/run-ssl-e2e-tests/action.yml
================================================
name: 'Run SSL E2E Tests - Linux'
description: 'Run SSL E2E tests on Linux'
runs:
  using: 'composite'
  steps:
    - name: Run E2E tests
      shell: bash
      run: |
        set -euo pipefail
        
        xvfb-run npm run test:e2e:ssl

    - name: Upload Playwright Report
      if: ${{ !cancelled() }}
      uses: actions/upload-artifact@v4
      with:
        name: playwright-report-linux
        path: playwright-report/
        retention-days: 30


================================================
FILE: .github/actions/ssl/linux/setup-ca-certs/action.yml
================================================
name: 'Setup CA Certificates - Linux'
description: 'Setup CA certificates and start test server for custom CA certs tests on Linux'
runs:
  using: 'composite'
  steps:
    - name: Setup CA certificates
      shell: bash
      run: |
        set -euo pipefail
        
        cd tests/ssl/custom-ca-certs/server
        
        echo "running certificate setup"
        node scripts/generate-certs.js

    - name: Start test server
      shell: bash
      run: |
        set -euo pipefail
        
        cd tests/ssl/custom-ca-certs/server
        
        echo "starting server in background"
        node index.js &
        
        echo "server started with PID: $!"


================================================
FILE: .github/actions/ssl/linux/setup-feature-specific-deps/action.yml
================================================
name: 'Setup Custom CA Certs Feature Dependencies - Linux'
description: 'Setup feature-specific dependencies for custom CA certs tests on Linux'
runs:
  using: 'composite'
  steps:
    - name: Install additional OS dependencies for custom CA certs
      shell: bash
      run: |
        sudo apt-get update
        sudo apt-get --no-install-recommends install -y \
          libglib2.0-0 libnss3 libdbus-1-3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libgtk-3-0 libasound2t64 \
          xvfb libxml2-utils

        sudo chown root /home/runner/work/bruno/bruno/node_modules/electron/dist/chrome-sandbox
        sudo chmod 4755 /home/runner/work/bruno/bruno/node_modules/electron/dist/chrome-sandbox


================================================
FILE: .github/actions/ssl/macos/run-basic-ssl-cli-tests/action.yml
================================================
name: 'Run Basic SSL CLI Tests - macOS'
description: 'Run basic SSL CLI tests on macOS'
runs:
  using: 'composite'
  steps:
    - name: Run CLI tests
      shell: bash
      run: |
        set -euo pipefail
        
        # navigate to basic SSL test collection directory
        cd tests/ssl/basic-ssl/collections/badssl

        echo "basic ssl success"
        # should pass
        node ../../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit1.xml --insecure --format junit
        xmllint --xpath 'count(//testsuite[@errors="0"])' junit1.xml | grep -q "^1$" || exit 1

        echo "with default/system ca certs"
        # should pass
        node ../../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit2.xml --format junit
        xmllint --xpath 'count(//testsuite[@errors="0"])' junit2.xml | grep -q "^1$" || exit 1

        # navigate to self-signed SSL test collection directory
        cd ../self-signed-badssl

        echo "self-signed ssl with validation disabled"
        # should pass
        node ../../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit3.xml --insecure --format junit
        xmllint --xpath 'count(//testsuite[@errors="0"])' junit3.xml | grep -q "^1$" || exit 1

        echo "self-signed ssl with default/system ca certs"
        echo "request will error"
        # should fail
        node ../../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit4.xml --format junit 2>/dev/null || true
        xmllint --xpath 'count(//testsuite[@errors="1"])' junit4.xml | grep -q "^1$" || exit 1


================================================
FILE: .github/actions/ssl/macos/run-custom-ca-certs-cli-tests/action.yml
================================================
name: 'Run Custom CA Certs CLI Tests - macOS'
description: 'Run custom CA certs CLI tests on macOS'
runs:
  using: 'composite'
  steps:
    - name: Run CLI tests
      shell: bash
      run: |
        set -euo pipefail
        
        # navigate to CA certificates test collection directory
        cd tests/ssl/custom-ca-certs/collection

        echo "custom valid ca cert"
        # should pass
        node ../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit1.xml --cacert ../server/certs/ca-cert.pem --ignore-truststore --format junit
        xmllint --xpath 'count(//testsuite[@errors="0"])' junit1.xml | grep -q "^1$" || exit 1

        echo "custom valid ca cert with defaults"
        # should pass
        node ../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit2.xml --cacert ../server/certs/ca-cert.pem --format junit
        xmllint --xpath 'count(//testsuite[@errors="0"])' junit2.xml | grep -q "^1$" || exit 1

        echo "custom invalid ca cert"
        echo "request will error"
        # should fail
        node ../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit3.xml --cacert ../server/certs/ca-key.pem --ignore-truststore --format junit 2>/dev/null || true
        xmllint --xpath 'count(//testsuite[@errors="1"])' junit3.xml | grep -q "^1$" || exit 1

        echo "custom invalid ca cert with defaults"
        # should pass
        node ../../../../packages/bruno-cli/bin/bru.js run ./request.bru --output junit4.xml --cacert ../server/certs/ca-key.pem --format junit
        xmllint --xpath 'count(//testsuite[@errors="0"])' junit4.xml | grep -q "^1$" || exit 1


================================================
FILE: .github/actions/ssl/macos/run-ssl-e2e-tests/action.yml
================================================
name: 'Run SSL E2E Tests - macOS'
description: 'Run SSL E2E tests on macOS'
runs:
  using: 'composite'
  steps:
    - name: Run E2E tests
      shell: bash
      run: |
        npm run test:e2e:ssl

    - name: Upload Playwright Report
      if: ${{ !cancelled() }}
      uses: actions/upload-artifact@v4
      with:
        name: playwright-report-macos
        path: playwright-report/
        retention-days: 30


================================================
FILE: .github/actions/ssl/macos/setup-ca-certs/action.yml
================================================
name: 'Setup CA Certificates - macOS'
description: 'Setup CA certificates and start test server for custom CA certs tests on macOS'
runs:
  using: 'composite'
  steps:
    - name: Setup CA certificates
      shell: bash
      run: |
        set -euo pipefail
        
        cd tests/ssl/custom-ca-certs/server
        
        echo "running certificate setup"
        node scripts/generate-certs.js

    - name: Start test server
      shell: bash
      run: |
        set -euo pipefail
        
        cd tests/ssl/custom-ca-certs/server
        
        echo "starting server in background"
        node index.js &
        
        echo "server started with PID: $!"


================================================
FILE: .github/actions/ssl/macos/setup-feature-specific-deps/action.yml
================================================
name: 'Setup Custom CA Certs Feature Dependencies - macOS'
description: 'Setup feature-specific dependencies for custom CA certs tests on macOS'
runs:
  using: 'composite'
  steps:
    - name: Install additional OS dependencies for custom CA certs
      shell: bash
      run: |
        brew install libxml2


================================================
FILE: .github/actions/ssl/windows/run-basic-ssl-cli-tests/action.yml
================================================
name: 'Run Basic SSL CLI Tests - Windows'
description: 'Run basic SSL CLI tests on Windows'
runs:
  using: 'composite'
  steps:
    - name: Run CLI tests
      shell: pwsh
      run: |
        Set-StrictMode -Version Latest
        $ErrorActionPreference = "Stop"
        
        # navigate to basic SSL test collection directory
        Set-Location tests\ssl\basic-ssl\collections\badssl

        Write-Host "basic ssl success"
        # should pass
        $process = Start-Process -FilePath "node" -ArgumentList "..\..\..\..\..\packages\bruno-cli\bin\bru.js run .\request.bru --output junit1.xml --insecure --format junit" -NoNewWindow -Wait -PassThru -RedirectStandardError "nul"
        [xml]$xml1 = Get-Content junit1.xml
        $testsuites1 = if ($xml1.testsuites) { $xml1.testsuites.testsuite } else { $xml1.testsuite }
        $errorCount1 = ($testsuites1 | Where-Object { $_.errors -eq "0" } | Measure-Object).Count
        if ($errorCount1 -ne 1) { exit 1 }

        Write-Host "with default/system ca certs"
        # should pass
        $process = Start-Process -FilePath "node" -ArgumentList "..\..\..\..\..\packages\bruno-cli\bin\bru.js run .\request.bru --output junit2.xml --format junit" -NoNewWindow -Wait -PassThru -RedirectStandardError "nul"
        [xml]$xml2 = Get-Content junit2.xml
        $testsuites2 = if ($xml2.testsuites) { $xml2.testsuites.testsuite } else { $xml2.testsuite }
        $errorCount2 = ($testsuites2 | Where-Object { $_.errors -eq "0" } | Measure-Object).Count
        if ($errorCount2 -ne 1) { exit 1 }

        # navigate to self-signed SSL test collection directory
        Set-Location ..\self-signed-badssl

        Write-Host "self-signed ssl with validation disabled"
        # should pass
        $process = Start-Process -FilePath "node" -ArgumentList "..\..\..\..\..\packages\bruno-cli\bin\bru.js run .\request.bru --output junit3.xml --insecure --format junit" -NoNewWindow -Wait -PassThru -RedirectStandardError "nul"
        [xml]$xml3 = Get-Content junit3.xml
        $testsuites3 = if ($xml3.testsuites) { $xml3.testsuites.testsuite } else { $xml3.testsuite }
        $errorCount3 = ($testsuites3 | Where-Object { $_.errors -eq "0" } | Measure-Object).Count
        if ($errorCount3 -ne 1) { exit 1 }

        Write-Host "self-signed ssl with default/system ca certs"
        Write-Host "request will error"
        # should fail
        $process = Start-Process -FilePath "node" -ArgumentList "..\..\..\..\..\packages\bruno-cli\bin\bru.js run .\request.bru --output junit4.xml --format junit" -NoNewWindow -Wait -PassThru -RedirectStandardError "nul"
        # Ignore the exit code - we expect this to fail
        [xml]$xml4 = Get-Content junit4.xml
        $testsuites4 = if ($xml4.testsuites) { $xml4.testsuites.testsuite } else { $xml4.testsuite }
        $errorCount4 = ($testsuites4 | Where-Object { $_.errors -eq "1" } | Measure-Object).Count
        if ($errorCount4 -ne 1) { exit 1 }


================================================
FILE: .github/actions/ssl/windows/run-custom-ca-certs-cli-tests/action.yml
================================================
name: 'Run Custom CA Certs CLI Tests - Windows'
description: 'Run custom CA certs CLI tests on Windows'
runs:
  using: 'composite'
  steps:
    - name: Run CLI tests
      shell: pwsh
      run: |
        Set-StrictMode -Version Latest
        $ErrorActionPreference = "Stop"
        
        # navigate to CA certificates test collection directory
        Set-Location tests\ssl\custom-ca-certs\collection

        Write-Host "custom valid ca cert"
        # should pass
        $process = Start-Process -FilePath "node" -ArgumentList "..\..\..\..\packages\bruno-cli\bin\bru.js run .\request.bru --output junit1.xml --cacert ..\server\certs\ca-cert.pem --ignore-truststore --format junit" -NoNewWindow -Wait -PassThru -RedirectStandardError "nul"
        [xml]$xml1 = Get-Content junit1.xml
        $testsuites1 = if ($xml1.testsuites) { $xml1.testsuites.testsuite } else { $xml1.testsuite }
        $errorCount1 = ($testsuites1 | Where-Object { $_.errors -eq "0" } | Measure-Object).Count
        if ($errorCount1 -ne 1) { exit 1 }

        Write-Host "custom valid ca cert with defaults"
        # should pass
        $process = Start-Process -FilePath "node" -ArgumentList "..\..\..\..\packages\bruno-cli\bin\bru.js run .\request.bru --output junit2.xml --cacert ..\server\certs\ca-cert.pem --format junit" -NoNewWindow -Wait -PassThru -RedirectStandardError "nul"
        [xml]$xml2 = Get-Content junit2.xml
        $testsuites2 = if ($xml2.testsuites) { $xml2.testsuites.testsuite } else { $xml2.testsuite }
        $errorCount2 = ($testsuites2 | Where-Object { $_.errors -eq "0" } | Measure-Object).Count
        if ($errorCount2 -ne 1) { exit 1 }

        Write-Host "custom invalid ca cert"
        Write-Host "request will error"
        # should fail
        $process = Start-Process -FilePath "node" -ArgumentList "..\..\..\..\packages\bruno-cli\bin\bru.js run .\request.bru --output junit3.xml --cacert ..\server\certs\ca-key.pem --ignore-truststore --format junit" -NoNewWindow -Wait -PassThru -RedirectStandardError "nul"
        # Ignore the exit code - we expect this to fail
        [xml]$xml3 = Get-Content junit3.xml
        $testsuites3 = if ($xml3.testsuites) { $xml3.testsuites.testsuite } else { $xml3.testsuite }
        $errorCount3 = ($testsuites3 | Where-Object { $_.errors -eq "1" } | Measure-Object).Count
        if ($errorCount3 -ne 1) { exit 1 }

        Write-Host "custom invalid ca cert with defaults"
        # should pass
        $process = Start-Process -FilePath "node" -ArgumentList "..\..\..\..\packages\bruno-cli\bin\bru.js run .\request.bru --output junit4.xml --cacert ..\server\certs\ca-key.pem --format junit" -NoNewWindow -Wait -PassThru -RedirectStandardError "nul"
        [xml]$xml4 = Get-Content junit4.xml
        $testsuites4 = if ($xml4.testsuites) { $xml4.testsuites.testsuite } else { $xml4.testsuite }
        $errorCount4 = ($testsuites4 | Where-Object { $_.errors -eq "0" } | Measure-Object).Count
        if ($errorCount4 -ne 1) { exit 1 }


================================================
FILE: .github/actions/ssl/windows/run-ssl-e2e-tests/action.yml
================================================
name: 'Run SSL E2E Tests - Windows'
description: 'Run SSL E2E tests on Windows'
runs:
  using: 'composite'
  steps:
    - name: Run E2E tests
      shell: pwsh
      run: |
        npm run test:e2e:ssl

    - name: Upload Playwright Report
      if: ${{ !cancelled() }}
      uses: actions/upload-artifact@v4
      with:
        name: playwright-report-windows
        path: playwright-report/
        retention-days: 30


================================================
FILE: .github/actions/ssl/windows/setup-ca-certs/action.yml
================================================
name: 'Setup CA Certificates - Windows'
description: 'Setup CA certificates and start test server for custom CA certs tests on Windows'
runs:
  using: 'composite'
  steps:
    - name: Setup CA certificates
      shell: pwsh
      run: |
        Set-StrictMode -Version Latest
        $ErrorActionPreference = "Stop"
        
        Set-Location tests\ssl\custom-ca-certs\server
        
        Write-Host "running certificate setup"
        node scripts/generate-certs.js

    - name: Start test server
      shell: pwsh
      run: |
        Set-StrictMode -Version Latest
        
        Set-Location tests\ssl\custom-ca-certs\server
        
        Write-Host "starting server in background"
        Start-Process -FilePath "node" -ArgumentList "index.js" -PassThru -WindowStyle Hidden


================================================
FILE: .github/actions/tests/run-cli-tests/action.yml
================================================
name: 'Run CLI Tests'
description: 'Setup dependencies, start local testbench and run CLI tests'
runs:
  using: 'composite'
  steps:
    - name: Run Local Testbench
      shell: bash
      run: |
        npm start --workspace=packages/bruno-tests &
        sleep 5

    - name: Install Test Collection Dependencies
      shell: bash
      run: npm ci --prefix packages/bruno-tests/collection

    - name: Run CLI Tests
      shell: bash
      run: |
        cd packages/bruno-tests/collection
        node ../../bruno-cli/bin/bru.js run --env Prod --output junit.xml --format junit --sandbox developer


================================================
FILE: .github/actions/tests/run-e2e-tests/action.yml
================================================
name: 'Run E2E Tests'
description: 'Setup dependencies, configure environment, and run Playwright E2E tests'
inputs:
  os:
    description: 'Operating system (ubuntu, macos, windows)'
    default: 'ubuntu'
runs:
  using: 'composite'
  steps:
    - name: Install Test Collection Dependencies
      shell: bash
      run: npm ci --prefix packages/bruno-tests/collection

    - name: Run Playwright Tests (Ubuntu)
      if: inputs.os == 'ubuntu'
      shell: bash
      run: xvfb-run npm run test:e2e

    - name: Run Playwright Tests
      if: inputs.os != 'ubuntu'
      shell: bash
      run: npm run test:e2e


================================================
FILE: .github/actions/tests/run-unit-tests/action.yml
================================================
name: 'Run Unit Tests'
description: 'Setup dependencies and run unit tests for all packages'
runs:
  using: 'composite'
  steps:
    - name: Test Package bruno-js
      shell: bash
      run: npm run test --workspace=packages/bruno-js

    - name: Test Package bruno-cli
      shell: bash
      run: npm run test --workspace=packages/bruno-cli

    - name: Test Package bruno-query
      shell: bash
      run: npm run test --workspace=packages/bruno-query

    - name: Test Package bruno-lang
      shell: bash
      run: npm run test --workspace=packages/bruno-lang

    - name: Test Package bruno-schema
      shell: bash
      run: npm run test --workspace=packages/bruno-schema

    - name: Test Package bruno-app
      shell: bash
      run: npm run test --workspace=packages/bruno-app

    - name: Test Package bruno-common
      shell: bash
      run: npm run test --workspace=packages/bruno-common

    - name: Test Package bruno-converters
      shell: bash
      run: npm run test --workspace=packages/bruno-converters

    - name: Test Package bruno-electron
      shell: bash
      run: npm run test --workspace=packages/bruno-electron

    - name: Test Package bruno-requests
      shell: bash
      run: npm run test --workspace=packages/bruno-requests

    - name: Test Package bruno-filestore
      shell: bash
      run: npm run test --workspace=packages/bruno-filestore


================================================
FILE: .github/dependabot.yml
================================================
version: 2

updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: weekly
  
  - package-ecosystem: npm
    directory: "/"
    schedule:
      interval: weekly
    groups:
      bruno-dependencies:
        patterns:
          - "*usebruno*"
      babel-dependencies:
        patterns:
          - "*babel*"
      fortawesome-dependencies:
        patterns:
          - "*fortawesome*"
      electron-dependencies:
        patterns:
          - "*electron*"
      rollup-dependencies:
        patterns:
          - "*rollup*"
      jest-dependencies:
        patterns:
          - "*jest*"


================================================
FILE: .github/scripts/comment-on-flaky-tests.js
================================================
const fs = require('fs');
const { execSync } = require('child_process');

// Check if flaky-tests.json exists
if (!fs.existsSync('flaky-tests.json')) {
  console.log('No flaky-tests.json found');
  process.exit(0);
}

// Get changed files in PR
let changedFiles = [];
try {
  changedFiles = execSync('git diff --name-only origin/main...HEAD')
    .toString()
    .split('\n')
    .filter(f => f.endsWith('.spec.ts'));
} catch (error) {
  console.log('Could not determine changed files:', error.message);
  process.exit(0);
}

if (changedFiles.length === 0) {
  console.log('No test files were modified in this PR');
  process.exit(0);
}

// Read flaky tests
const flakyTests = JSON.parse(fs.readFileSync('flaky-tests.json', 'utf8'));

if (flakyTests.length === 0) {
  console.log('No flaky/failed tests found');
  process.exit(0);
}

// Find modified flaky tests
const modifiedFlakyTests = flakyTests.filter(test =>
  changedFiles.some(file => test.file.includes(file))
);

if (modifiedFlakyTests.length === 0) {
  console.log('No modified test files are flaky');
  process.exit(0);
}

// Generate comment markdown
let comment = '## ⚠️ Warning: You modified flaky/failed test files\n\n';
comment += 'The following test files you modified have reliability issues:\n\n';

modifiedFlakyTests.forEach(test => {
  const testType = test.status === 'failed' ? '❌ Failed' : '⚠️ Flaky';
  comment += `### ${testType}: \`${test.file}\`\n`;
  comment += `**Test:** ${test.testTitle}\n`;
  comment += `**Status:** ${test.status}\n`;
  if (test.retryAttempt > 0) {
    comment += `**Retry Attempt:** ${test.retryAttempt}\n`;
  }
  comment += '\n**To debug locally, run:**\n';
  comment += '```bash\n';
  comment += `npx playwright test ${test.file} --repeat-each=5 --workers=1\n`;
  comment += '```\n\n';
});

comment += '---\n';
comment += '**Note:** Flaky tests passed after retrying, failed tests did not pass. ';
comment += 'Please investigate and fix the root cause before merging.\n';

// Save comment to file for GitHub Action to post
fs.writeFileSync('pr-comment.md', comment);

console.log(`Found ${modifiedFlakyTests.length} modified flaky tests`);


================================================
FILE: .github/scripts/detect-flaky-tests.js
================================================
const fs = require('fs');


// Read Playwright JSON report
const resultsPath = 'playwright-report/results.json';

if (!fs.existsSync(resultsPath)) {
  console.log('No Playwright results found at', resultsPath);
  process.exit(0);
}

const results = JSON.parse(fs.readFileSync(resultsPath, 'utf8'));

// Extract flaky tests
// A test is flaky if: status === "passed" AND retry > 0
// A test is failed if: status === "failed"
// This means it failed initially but passed on retry OR failed completely
const flakyTests = [];

function traverseSuites(suites) {
  for (const suite of suites) {
    // Process specs in this suite
    for (const spec of suite.specs || []) {
      for (const test of spec.tests || []) {
        // Check each test result
        for (const result of test.results || []) {
          // Track two types of problematic tests:
          // 1. Flaky: passed on a retry attempt (retry > 0)
          // 2. Failed: failed on all attempts
          if ((result.status === 'passed' && result.retry > 0) || result.status === 'failed') {
            flakyTests.push({
              file: spec.file,
              title: spec.title,
              testTitle: spec.title,
              line: spec.line,
              status: result.status,
              retryAttempt: result.retry
            });
            break; // Only record once per test
          }
        }
      }
    }

    // Recursively process nested suites
    if (suite.suites && suite.suites.length > 0) {
      traverseSuites(suite.suites);
    }
  }
}

traverseSuites(results.suites || []);

// Save flaky tests to JSON
fs.writeFileSync('flaky-tests.json', JSON.stringify(flakyTests, null, 2));

// Generate markdown report
let markdown = '## ⚠️ Flaky/Failed Tests Detected\n\n';
markdown += 'The following tests are problematic:\n\n';

flakyTests.forEach(test => {
  const testType = test.status === 'failed' ? '❌ Failed' : '⚠️ Flaky';
  markdown += `### ${testType}: \`${test.file}\`\n`;
  markdown += `- **Test:** ${test.testTitle}\n`;
  markdown += `- **Status:** ${test.status}\n`;
  if (test.retryAttempt > 0) {
    markdown += `- **Retry Attempt:** ${test.retryAttempt}\n`;
  }
  markdown += `- **Debug command:**\n`;
  markdown += '```bash\n';
  markdown += `npx playwright test ${test.file} --repeat-each=5 --workers=1\n`;
  markdown += '```\n\n';
});

fs.writeFileSync('flaky-report.md', markdown);

console.log(`Found ${flakyTests.length} flaky/failed tests`);
process.exit(flakyTests.length > 0 ? 1 : 0);


================================================
FILE: .github/workflows/flaky-test-detector.yml
================================================
name: Flaky Test Detector

on:
  pull_request:
    branches: [main]
    paths:
      - 'tests/**/*.spec.ts'

permissions:
  contents: read
  pull-requests: write
  issues: write
  checks: write

jobs:
  detect-flaky-tests:
    name: Detect Flaky Tests
    runs-on: ubuntu-24.04
    timeout-minutes: 60

    steps:
      - name: Checkout code
        uses: actions/checkout@v6
        with:
          fetch-depth: 0  # Need full history to compare with main

      - name: Setup Node.js
        uses: actions/setup-node@v5
        with:
          node-version-file: '.nvmrc'
          cache: 'npm'

      - name: Install system dependencies
        run: |
          sudo apt-get update
          sudo apt-get --no-install-recommends install -y \
            libglib2.0-0 libnss3 libdbus-1-3 libatk1.0-0 libatk-bridge2.0-0 \
            libcups2 libgtk-3-0 libasound2t64 xvfb

      - name: Install npm dependencies
        run: |
          npm ci --legacy-peer-deps
          sudo chown root /home/runner/work/bruno/bruno/node_modules/electron/dist/chrome-sandbox
          sudo chmod 4755 /home/runner/work/bruno/bruno/node_modules/electron/dist/chrome-sandbox

      - name: Install test collection dependencies
        run: npm ci --prefix packages/bruno-tests/collection

      - name: Build libraries
        run: |
          npm run build:graphql-docs
          npm run build:bruno-query
          npm run build:bruno-common
          npm run sandbox:bundle-libraries --workspace=packages/bruno-js
          npm run build:bruno-converters
          npm run build:bruno-requests
          npm run build:schema-types
          npm run build:bruno-filestore

      - name: Run Playwright tests
        run: xvfb-run npm run test:e2e
        continue-on-error: true  # Continue even if tests fail

      - name: Detect flaky tests
        id: detect
        run: node .github/scripts/detect-flaky-tests.js
        continue-on-error: true  # Don't fail workflow if flaky tests found

      - name: Check modified flaky tests
        id: check-modified
        run: node .github/scripts/comment-on-flaky-tests.js
        continue-on-error: true

      - name: Post PR comment
        if: hashFiles('pr-comment.md') != ''
        uses: actions/github-script@v7
        with:
          script: |
            const fs = require('fs');
            const comment = fs.readFileSync('pr-comment.md', 'utf8');

            // Check if we already commented
            const { data: comments } = await github.rest.issues.listComments({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number
            });

            const botComment = comments.find(c =>
              c.user.type === 'Bot' && c.body.includes('Warning: You modified flaky/failed test files')
            );

            if (botComment) {
              // Update existing comment
              await github.rest.issues.updateComment({
                owner: context.repo.owner,
                repo: context.repo.repo,
                comment_id: botComment.id,
                body: comment
              });
            } else {
              // Create new comment
              await github.rest.issues.createComment({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: context.issue.number,
                body: comment
              });
            }

      - name: Upload flaky test artifacts
        if: always()
        uses: actions/upload-artifact@v6
        with:
          name: flaky-test-results
          path: |
            flaky-tests.json
            flaky-report.md
            playwright-report/
          retention-days: 30


================================================
FILE: .github/workflows/lint-checks.yml
================================================
name: Lint Checks
on:
  workflow_dispatch:
  push:
    branches: [main, 'release/v*']
  pull_request:
    branches: [main, 'release/v*']

jobs:
  lint:
    name: Lint Check
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v6

      - name: Setup Node Dependencies
        uses: ./.github/actions/common/setup-node-deps
        with:
          skip-build: 'true'

      - name: Lint Check
        run: npm run lint
        env:
          ESLINT_PLUGIN_DIFF_COMMIT: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.ref || 'main' }}

================================================
FILE: .github/workflows/npm-bru-cli.yml
================================================
name: Bru CLI Tests (npm)

on:
  workflow_dispatch:
    inputs:
      build:
        description: 'Test Bru CLI (npm)'
        required: true
        default: 'true'

# Assign permissions for unit tests to be reported.
# See https://github.com/dorny/test-reporter/issues/168
permissions:
  statuses: write
  checks: write
  contents: write
  pull-requests: write
  actions: write

jobs:
  test:
    name: CLI Tests
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v5
        with:
          node-version-file: '.nvmrc'

      - name: Install Bru CLI from NPM
        run: npm install -g @usebruno/cli

      - name: Display Bru CLI Version
        run: bru --version

      - name: Run tests
        run: |
          cd packages/bruno-tests/collection
          npm install
          bru run --env Prod --output junit.xml --format junit --sandbox developer

      - name: Publish Test Report
        uses: dorny/test-reporter@v2
        if: success() || failure()
        with:
          name: Test Report
          path: packages/bruno-tests/collection/junit.xml
          reporter: java-junit


================================================
FILE: .github/workflows/ssl-tests.yml
================================================
name: SSL Tests
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  tests-for-linux:
    name: SSL Tests - Linux
    timeout-minutes: 60
    runs-on: ubuntu-latest
    permissions:
      checks: write
      pull-requests: write
      contents: read
    steps:
      - uses: actions/checkout@v6

      - name: Setup Node Dependencies
        uses: ./.github/actions/common/setup-node-deps

      - name: Setup Feature Dependencies
        uses: ./.github/actions/ssl/linux/setup-feature-specific-deps

      - name: Setup CA Certificates
        uses: ./.github/actions/ssl/linux/setup-ca-certs

      - name: Run Basic SSL CLI Tests
        uses: ./.github/actions/ssl/linux/run-basic-ssl-cli-tests

      - name: Run Custom CA Certs CLI Tests
        uses: ./.github/actions/ssl/linux/run-custom-ca-certs-cli-tests

      - name: Run Custom CA Certs E2E Tests
        uses: ./.github/actions/ssl/linux/run-ssl-e2e-tests

  tests-for-macos:
    name: SSL Tests - macOS
    timeout-minutes: 60
    runs-on: macos-latest
    permissions:
      checks: write
      pull-requests: write
      contents: read
    steps:
      - uses: actions/checkout@v6

      - name: Setup Node Dependencies
        uses: ./.github/actions/common/setup-node-deps

      - name: Setup Feature Dependencies
        uses: ./.github/actions/ssl/macos/setup-feature-specific-deps

      - name: Setup CA Certificates
        uses: ./.github/actions/ssl/macos/setup-ca-certs

      - name: Run Basic SSL CLI Tests
        uses: ./.github/actions/ssl/macos/run-basic-ssl-cli-tests

      - name: Run Custom CA Certs CLI Tests
        uses: ./.github/actions/ssl/macos/run-custom-ca-certs-cli-tests

      - name: Run Custom CA Certs E2E Tests
        uses: ./.github/actions/ssl/macos/run-ssl-e2e-tests

  tests-for-windows:
    name: SSL Tests - Windows
    timeout-minutes: 60
    runs-on: windows-latest
    permissions:
      checks: write
      pull-requests: write
      contents: read
    steps:
      - uses: actions/checkout@v6
      
      - name: Setup Node Dependencies
        uses: ./.github/actions/common/setup-node-deps

      - name: Setup CA Certificates
        uses: ./.github/actions/ssl/windows/setup-ca-certs

      - name: Run Basic SSL CLI Tests
        uses: ./.github/actions/ssl/windows/run-basic-ssl-cli-tests

      - name: Run Custom CA Certs CLI Tests
        uses: ./.github/actions/ssl/windows/run-custom-ca-certs-cli-tests

      - name: Run Custom CA Certs E2E Tests
        uses: ./.github/actions/ssl/windows/run-ssl-e2e-tests


================================================
FILE: .github/workflows/tests.yml
================================================
name: Tests
on:
  workflow_dispatch:
  push:
    branches: [main, 'release/v*']
  pull_request:
    branches: [main, 'release/v*']

jobs:
  unit-test:
    name: Unit Tests
    timeout-minutes: 60
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v6

      - name: Setup Node Dependencies
        uses: ./.github/actions/common/setup-node-deps

      - name: Run Unit Tests
        uses: ./.github/actions/tests/run-unit-tests

  cli-test:
    name: CLI Tests
    runs-on: ubuntu-latest
    permissions:
      checks: write
      pull-requests: write
      contents: read
    steps:
      - uses: actions/checkout@v6

      - name: Setup Node Dependencies
        uses: ./.github/actions/common/setup-node-deps

      - name: Run CLI Tests
        uses: ./.github/actions/tests/run-cli-tests

      - name: Publish Test Report
        uses: EnricoMi/publish-unit-test-result-action@v2
        if: always()
        with:
          check_name: CLI Test Results
          files: packages/bruno-tests/collection/junit.xml
          comment_mode: always

  e2e-test:
    name: Playwright E2E Tests
    timeout-minutes: 60
    runs-on: ubuntu-24.04
    steps:
      - uses: actions/checkout@v6

      - name: Install System Dependencies (Ubuntu)
        run: |
          sudo apt-get update
          sudo apt-get --no-install-recommends install -y \
            libglib2.0-0 libnss3 libdbus-1-3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libgtk-3-0 libasound2t64 \
            xvfb

      - name: Setup Node Dependencies
        uses: ./.github/actions/common/setup-node-deps

      - name: Configure Chrome Sandbox
        run: |
          sudo chown root node_modules/electron/dist/chrome-sandbox
          sudo chmod 4755 node_modules/electron/dist/chrome-sandbox

      - name: Run playwright Tests
        uses: ./.github/actions/tests/run-e2e-tests
        with:
          os: ubuntu

      - name: Upload Playwright Report
        uses: actions/upload-artifact@v6
        if: ${{ !cancelled() }}
        with:
          name: playwright-report
          path: playwright-report/
          retention-days: 30


================================================
FILE: .gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
bun.lockb
node_modules
yarn.lock
pnpm-lock.yaml
.pnp
.pnp.js
bun.lockb
bun.lock

# testing
coverage

# production
build
chrome-extension
chrome-extension.pem
chrome-extension.crx
bruno.zip
*.zip

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env.local
.env.development.local
.env.test.local
.env.production.local

# next.js
/renderer
/renderer/.next/
/renderer/out/
/test-results/
/playwright-report/
/playwright/.cache/

#dev editor
bruno.iml
.idea
.vscode
.cursor
.claude
.codex
.agents
.agent
skills-lock.json

# Playwright
/blob-report/

# Development plan files
CLAUDE.md
AGENTS.md
*.plan.md

# packages dist
packages/bruno-filestore/dist
packages/bruno-requests/dist
packages/bruno-schema-types/dist
packages/bruno-converters/dist


================================================
FILE: .husky/pre-commit
================================================
npx nano-staged


================================================
FILE: .nvmrc
================================================
v22.12.0


================================================
FILE: CODING_STANDARDS.md
================================================
# Bruno Coding Standards

- No diffs unless an actual change is made, the code changes need to be as minimal as possible, avoid making un-necessary whitespace diffs. This is already handled by eslint but make sure you check your code changes before commiting and raising a PR.

## General Style Rules

- Use 2 spaces for indentation. No tabs, just spaces – keeps everything neat and uniform.

- Stick to single quotes for strings. For JSX/TSX attributes, use double quotes (e.g., <svg xmlns="..." viewBox="...">) to follow React conventions.

- Always add semicolons at the end of statements. It's like putting a period at the end of a sentence – clarity matters.

- JSX is enabled, so feel free to use it where it makes sense.

## Punctuation and Spacing

- No trailing commas. Keep it clean, no extra commas hanging around.

- Always use parentheses around parameters in arrow functions. Even for single params – consistency is key.

- For multiline constructs, put opening braces on the same line, and ensure consistency. Minimum 2 elements for multiline.

- No newlines inside function parentheses. Keep 'em tight.

- Space before and after the arrow in arrow functions. `() => {}` is good.

- No space between function name and parentheses. `func()` not `func ()`.

- Semicolons go at the end of the line, not on a new line.

- No strict max length – write readable code, not cramped lines.

- Multiple expressions per line in JSX are fine – flexibility is nice.

Remember, these rules are here to make our codebase harmonious. If something doesn't fit perfectly, let's chat about it. Happy coding! 🚀


## Tests 

- Add tests for any new functionality or meaningful changes. If code is added, removed, or significantly modified, corresponding tests should be updated or created.
 
- Prioritise high-value tests over maximum coverage. Focus on testing behaviour that is critical, complex, or likely to break—don’t chase coverage numbers for their own sake.

- Write behaviour-driven tests, not implementation-driven ones. Tests should validate real expected output and observable behaviour, not internal details or mocked-out logic unless absolutely necessary.

- Minimise mocking unless it meaningfully increases clarity or isolates external dependencies. Prefer real flows where practical; only mock external services, slow systems, or non-deterministic behaviour.

- Keep tests readable and maintainable. Optimise for clarity over cleverness. Name tests descriptively, keep setup minimal, and avoid unnecessary abstraction.

- Aim for tests that fail usefully. When a test fails, it should clearly indicate what behaviour broke and why.

- Cover both the “happy path” and the realistically problematic paths. Validate expected success behaviour, but also validate error handling, edge cases, and degraded-mode behaviour when appropriate.

- Ensure tests are deterministic and reproducible. No randomness, timing dependencies, or environment-specific assumptions without explicit control.

- Avoid overfitting tests to current behaviour if future flexibility matters. Only assert what needs to be true, not incidental details.

- Use consistent patterns and helper utilities where they improve clarity. Prefer shared test utilities over copy-pasted setup code, but only when it actually reduces complexity.

- Tests should be fast enough to run continuously. Avoid long-running operations unless absolutely necessary; prefer lightweight fixtures and isolated units.


## UI Specific instructions 

### React

- Use styled component's theme prop to manage CSS colors and not CSS variables when in the context of a styled component or any react component using the styled component 
- Styled Components are used as wrappers to define both self and children components style, tailwind classes are used specifically for layout based styles. 
- Styled Component CSS might also change layout but tailwind classes shouldn't define colors.
- MUST: Prefer custom hooks for business logic, data fetching, and side-effects.
- MUST: Avoid `useEffect` unless absolutely needed. Prefer derived state, event handlers.
- SHOULD: Memoize only when necessary (`useMemo`/`useCallback`), and prefer moving logic into hooks first.
- MUST: Do not use namespace access for hooks in app code (e.g., `React.useCallback`, `React.useMemo`, `React.useState`). Import hooks directly.
  - Correct: `import { useCallback, useMemo, useState } from "react";`
  - Avoid: `import * as React from "react";` then `React.useCallback(...)`
- Add `data-testid` to testable elements for Playwright
- Co-locate utilities that are truly component-specific next to the component, otherwise place shared items under a common folder


## Readability and Abstractions

- Avoid abstractions unless the exact same code is being used in more than 3 places.
- Names for functions need to be concise and descriptive.
- Add in JSDoc comments to add more details to the abstractions if needed.
- Follow functional programming but just enough to be readable, we don't need to go as deep as ADTs and Monads, we want to keep the code pipeline obvious and easy for everyone to read and contribute to.
- Avoid single line abstractions where all that's being done is increasing the call stack with one additional function.
- Add in meaningful comments instead of obvious ones where complex code flow is explained properly.


================================================
FILE: contributing.md
================================================
**English**
| [Українська](docs/contributing/contributing_ua.md)
| [Русский](docs/contributing/contributing_ru.md)
| [Türkçe](docs/contributing/contributing_tr.md)
| [Deutsch](docs/contributing/contributing_de.md)
| [Français](docs/contributing/contributing_fr.md)
| [Português (BR)](docs/contributing/contributing_pt_br.md)
| [한국어](docs/contributing/contributing_kr.md)
| [বাংলা](docs/contributing/contributing_bn.md)
| [Español](docs/contributing/contributing_es.md)
| [Italiano](docs/contributing/contributing_it.md)
| [Română](docs/contributing/contributing_ro.md)
| [Polski](docs/contributing/contributing_pl.md)
| [简体中文](docs/contributing/contributing_cn.md)
| [正體中文](docs/contributing/contributing_zhtw.md)
| [日本語](docs/contributing/contributing_ja.md)
| [हिंदी](docs/contributing/contributing_hi.md)
| [Dutch](docs/contributing/contributing_nl.md)
| [فارسی](docs/contributing/contributing_fa.md)

## Let's make Bruno better, together!!

We are happy that you are looking to improve Bruno. Below are the guidelines to run Bruno on your computer.

### Technology Stack

Bruno is built using React and Electron.

Libraries we use

- CSS - Tailwind
- Code Editors - Codemirror
- State Management - Redux
- Icons - Tabler Icons
- Forms - formik
- Schema Validation - Yup
- Request Client - axios
- Filesystem Watcher - chokidar
- i18n - i18next

> [!IMPORTANT]
> You would need [Node v22.x or the latest LTS version](https://nodejs.org/en/). We use npm workspaces in the project

## Development

Bruno is a desktop app. Below are the instructions to run Bruno.

> Note: We use React for the frontend and rsbuild for build and dev server.

## Install Dependencies

```bash
# use nodejs 22 version
nvm use

# install deps
npm i --legacy-peer-deps
```

### Local Development

#### Build packages

##### Option 1

```bash
# build packages
npm run build:graphql-docs
npm run build:bruno-query
npm run build:bruno-common
npm run build:bruno-converters
npm run build:bruno-requests
npm run build:schema-types
npm run build:bruno-filestore

# bundle js sandbox libraries
npm run sandbox:bundle-libraries --workspace=packages/bruno-js
```

##### Option 2

```bash
# install dependencies and setup
npm run setup
```

#### Run the app

##### Option 1

```bash
# run react app (terminal 1)
npm run dev:web

# run electron app (terminal 2)
npm run dev:electron
```

##### Option 2

```bash
# run electron and react app concurrently
npm run dev
```

#### Customize Electron `userData` path

If `ELECTRON_USER_DATA_PATH` env-variable is present and its development mode, then `userData` path is modified accordingly.

e.g.

```sh
ELECTRON_USER_DATA_PATH=$(realpath ~/Desktop/bruno-test) npm run dev:electron
```

This will create a `bruno-test` folder on your Desktop and use it as the `userData` path.

### Troubleshooting

You might encounter a `Unsupported platform` error when you run `npm install`. To fix this, you will need to delete `node_modules` and `package-lock.json` and run `npm install`. This should install all the necessary packages needed to run the app.

```shell
# Delete node_modules in sub-directories
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# Delete package-lock in sub-directories
find . -type f -name "package-lock.json" -delete
```

### Testing

```bash
# run bruno-schema tests
npm run test --workspace=packages/bruno-schema

# run bruno-query tests
npm run test --workspace=packages/bruno-query

# run bruno-common tests
npm run test --workspace=packages/bruno-common

# run bruno-converters tests
npm run test --workspace=packages/bruno-converters

# run bruno-app tests
npm run test --workspace=packages/bruno-app

# run bruno-electron tests
npm run test --workspace=packages/bruno-electron

# run bruno-lang tests
npm run test --workspace=packages/bruno-lang

# run bruno-toml tests
npm run test --workspace=packages/bruno-toml

# run tests over all workspaces
npm test --workspaces --if-present
```

### Raising Pull Requests

- Please keep the PR's small and focused on one thing
- Please follow the format of creating branches
  - feature/[feature name]: This branch should contain changes for a specific feature
    - Example: feature/dark-mode
  - bugfix/[bug name]: This branch should contain only bug fixes for a specific bug
    - Example bugfix/bug-1


================================================
FILE: docs/contributing/contributing_bn.md
================================================
[English](../../contributing.md)

## আসুন ব্রুনোকে আরও ভালো করি, একসাথে!!

আমরা খুশি যে আপনি ব্রুনোর উন্নতি করতে চাইছেন। নীচে আপনার কম্পিউটারে ব্রুনো ইনষ্টল করার নির্দেশিকা রয়েছে৷।

### Technology Stack (প্রযুক্তি স্ট্যাক)

ব্রুনো Next.js এবং React ব্যবহার করে নির্মিত। এছাড়াও আমরা একটি ডেস্কটপ সংস্করণ পাঠাতে ইলেক্ট্রন ব্যবহার করি (যা স্থানীয় সংগ্রহ সমর্থন করে)

নিম্ন লিখিত লাইব্রেরি আমরা ব্যবহার করি -

- CSS - Tailwind
- Code Editors - Codemirror
- State Management - Redux
- Icons - Tabler Icons
- Forms - formik
- Schema Validation - Yup
- Request Client - axios
- Filesystem Watcher - chokidar

### Dependencies (নির্ভরতা)

আপনার প্রয়োজন হবে [নোড v18.x বা সর্বশেষ LTS সংস্করণ](https://nodejs.org/en/) এবং npm 8.x। আমরা প্রকল্পে npm ওয়ার্কস্পেস ব্যবহার করি ।

## Development

ব্রুনো একটি ডেস্কটপ অ্যাপ হিসেবে তৈরি করা হচ্ছে। আপনাকে একটি টার্মিনালে Next.js অ্যাপটি চালিয়ে অ্যাপটি লোড করতে হবে এবং তারপরে অন্য টার্মিনালে ইলেক্ট্রন অ্যাপটি চালাতে হবে।

### Dependencies (নির্ভরতা)

- NodeJS v18

### Local Development

```bash
# nodejs 18 সংস্করণ ব্যবহার করুন
nvm use

# নির্ভরতা ইনস্টল করুন
npm i --legacy-peer-deps

# গ্রাফকিউএল ডক্স তৈরি করুন
npm run build:graphql-docs

# ব্রুনো কোয়েরি তৈরি করুন
npm run build:bruno-query

# NextJs অ্যাপ চালান (টার্মিনাল 1)
npm run dev:web

# ইলেক্ট্রন অ্যাপ চালান (টার্মিনাল 2)
npm run dev:electron
```

### Troubleshooting (সমস্যা সমাধান)

আপনি যখন 'npm install' চালান তখন আপনি একটি 'অসমর্থিত প্ল্যাটফর্ম' ত্রুটির সম্মুখীন হতে পারেন৷ এটি ঠিক করতে, আপনাকে `node_modules` এবং `package-lock.json` মুছে ফেলতে হবে এবং `npm install` চালাতে হবে। এটি অ্যাপটি চালানোর জন্য প্রয়োজনীয় সমস্ত প্যাকেজ ইনস্টল করবে যাতে এই ত্রুটি ঠিক হয়ে যেতে পারে ।

```shell
# সাব-ডিরেক্টরিতে নোড_মডিউল মুছুন
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# সাব-ডিরেক্টরিতে প্যাকেজ-লক মুছুন
find . -type f -name "package-lock.json" -delete
```

### Testing (পরীক্ষা)

```bash
# ব্রুনো-স্কিমা পরীক্ষা চালান
npm test --workspace=packages/bruno-schema

# সমস্ত কর্মক্ষেত্রে পরীক্ষা চালান
npm test --workspaces --if-present
```

### Raising Pull Request (পুল অনুরোধ উত্থাপন)

- অনুগ্রহ করে PR এর আকার ছোট রাখুন এবং একটি বিষয়ে ফোকাস করুন।
- অনুগ্রহ করে শাখা তৈরির বিন্যাস অনুসরণ করুন।
  - বৈশিষ্ট্য/[ফিচারের নাম]: এই শাখায় একটি নির্দিষ্ট বৈশিষ্ট্যের জন্য পরিবর্তন থাকতে হবে।
    - উদাহরণ: বৈশিষ্ট্য/ডার্ক-মোড।
  - বাগফিক্স/[বাগ নাম]: এই শাখায় একটি নির্দিষ্ট বাগ-এর জন্য শুধুমাত্র বাগ ফিক্স থাকা উচিত।
    - উদাহরণ বাগফিক্স/বাগ-1।


================================================
FILE: docs/contributing/contributing_cn.md
================================================
[English](../../contributing.md)

## 让我们一起改进 Bruno!

很高兴看到您考虑改进 Bruno。以下是获取 Bruno 并在您的电脑上运行它的规则和指南。

### 使用的技术

Bruno 基于 NextJs 和 React 构建。我们使用 Electron 来封装桌面版本。

我们使用的库包括:

- CSS - Tailwind
- 代码编辑器 - Codemirror
- 状态管理 - Redux
- 图标 - Tabler Icons
- 表单 - formik
- 模式验证 - Yup
- 请求客户端 - axios
- 文件系统监视器 - chokidar

### 依赖项

您需要 [Node v20.x 或最新的 LTS 版本](https://nodejs.org/en/) 和 npm 8.x。我们在这个项目中也使用 npm 工作区(_npm workspaces_)。

## 开发

Bruno 是作为一个 _client lourd(重客户端)_ 应用程序开发的。您需要在一个终端中启动 nextjs 来加载应用程序,然后在另一个终端中启动 Electron 应用程序。

### 依赖项

- NodeJS v18

### 本地开发

```bash
# 使用 node 版本 18
nvm use

# 安装依赖项
npm i --legacy-peer-deps

# 构建 graphql 文档
npm run build:graphql-docs

# 构建 bruno 查询
npm run build:bruno-query

# 启动 next(终端 1)
npm run dev:web

# 启动重客户端(终端 2)
npm run dev:electron
```

### 故障排除

在运行 npm install 时,您可能会遇到 Unsupported platform 错误。为了解决这个问题,请删除 node_modules 目录和 package-lock.json 文件,然后再次运行 npm install。这应该会安装运行应用程序所需的所有包。

```shell
# 删除子目录中的 node_modules 目录
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# 删除子目录中的 package-lock.json 文件
find . -type f -name "package-lock.json" -delete
```

### 测试

```bash
# 运行 bruno-schema 测试
npm test --workspace=packages/bruno-schema

# 在所有工作区上运行测试
npm test --workspaces --if-present
```

### 提交 Pull Request

- 请保持 PR 精简并专注于单一目标
- 请遵循分支命名格式:
  - feature/[feature name]:该分支应包含特定功能
    - 例如:feature/dark-mode
  - bugfix/[bug name]:该分支应仅包含特定 bug 的修复
    - 例如:bugfix/bug-1


================================================
FILE: docs/contributing/contributing_de.md
================================================
[English](../../contributing.md)

## Lass uns Bruno noch besser machen, gemeinsam!!

Ich freue mich, dass Du Bruno verbessern möchtest. Hier findest Du eine Anleitung, mit der Du Bruno auf Deinem Computer einrichten kannst.

### Technologie Stack

Bruno ist mit Next.js und React erstellt. Außerdem benötigen wir electron für die Desktop Version (die lokale Sammlungen unterstützt).

Bibliotheken die wir benutzen

- CSS - Tailwind
- Code Editoren - Codemirror
- State Management - Redux
- Icons - Tabler Icons
- Formulare - formik
- Schema Validierung - Yup
- Request Client - axios
- Dateisystem Watcher - chokidar

### Abhängigkeiten

Du benötigst [Node v22.x oder die neuste LTS Version](https://nodejs.org/en/) und npm 8.x. Wir benutzen npm workspaces in dem Projekt.

### Lass uns coden

Eine Anleitung zum Ausführen einer lokalen Entwicklungsumgebung findest Du in [development.md](docs/development_de.md).

### Pull Request erstellen

- Bitte halte die PRs klein und begrenzt auf eine Sache
- Bitte halte Dich beim Erstellen eines Branches an das folgende Format
  - feature/[feature name]: Dieser Branch soll Änderungen für ein bestimmtes Feature enthalten
    - Beispiel: feature/dark-mode
  - bugfix/[bug name]: Dieser Branch soll ausschließlich Bugfixes für einen bestimmten Bug enthalten
    - Beispiel: bugfix/bug-1

## Entwicklung

Bruno wird als Desktop-Anwendung entwickelt. Um die App zu starten, musst Du zuerst die Next.js App in einem Terminal ausführen und anschließend in einem anderen Terminal die Electron-App.

### Abhängigkeiten

- NodeJS v22

### Lokales Entwickeln

```bash
# use nodejs 22 version
nvm use

# install deps
npm i --legacy-peer-deps

# build graphql docs
npm run build:graphql-docs

# build bruno query
npm run build:bruno-query

# run next app (terminal 1)
npm run dev:web

# run electron app (terminal 2)
npm run dev:electron
```

### Troubleshooting

Es kann sein, dass Du einen `Unsupported platform`-Fehler bekommst, wenn Du `npm install` ausführst. Um dies zu beheben, musst Du `node_modules` und `package-lock.json` löschen und `npm install` erneut ausführen. Dies sollte alle notwendigen Pakete installieren, die zum Ausführen der Anwendung benötigt werden.

```shell
# Delete node_modules in sub-directories
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# Delete package-lock in sub-directories
find . -type f -name "package-lock.json" -delete
```

### Testen

```bash
# Führen Sie Bruno-Schema-Tests aus
npm test --workspace=packages/bruno-schema

# Führen Sie Tests für alle Arbeitsbereiche durch
npm test --workspaces --if-present
```


================================================
FILE: docs/contributing/contributing_es.md
================================================
[Inglés](../../contributing.md)

## ¡Juntos, hagamos a Bruno mejor!

Estamos encantados de que quieras ayudar a mejorar Bruno. A continuación encontrarás las instrucciones para empezar a trabajar con Bruno en tu computadora.

### Tecnologías utilizadas

Bruno está construido con React y Electron

Librerías que utilizamos:

- CSS - Tailwind CSS
- Editores de código - CodeMirror
- Manejo del estado - Redux
- Íconos - Tabler Icons
- Formularios - formik
- Validación de esquemas - Yup
- Cliente de peticiones - axios
- Monitor del sistema de archivos - chokidar
- i18n (internacionalización) - i18next

### Dependencias

> [!IMPORTANT]
> Necesitarás [Node v22.x o la última versión LTS](https://nodejs.org/es/). Ten en cuenta que Bruno usa los espacios de trabajo de npm

## Desarrollo

Bruno es una aplicación de escritorio. A continuación se detallan las instrucciones paso a paso para ejecutar Bruno.

> Nota: Utilizamos React para el frontend y rsbuild para el servidor de desarrollo.

### Instalar dependencias

```bash
# Use la versión 22.x o LTS (Soporte a Largo Plazo) de Node.js
nvm use 22.11.0

# instalar las dependencias
npm i --legacy-peer-deps
```

> ¿Por qué `--legacy-peer-deps`?: Fuerza la instalación ignorando conflictos en dependencias “peer”, evitando errores de árbol de dependencias.

### Desarrollo local

#### Construir paquetes

##### Opción 1

```bash
# construir paquetes
npm run build:graphql-docs
npm run build:bruno-query
npm run build:bruno-common
npm run build:bruno-converters
npm run build:bruno-requests

# empaquetar bibliotecas JavaScript del entorno de pruebas aislado
npm run sandbox:bundle-libraries --workspace=packages/bruno-js
```

##### Opción 2

```bash
# instalar dependencias y configurar el entorno
npm run setup
```

#### Ejecutar la aplicación

```bash
# ejecutar aplicación react (terminal 1)
npm run dev:web

# ejecutar aplicación electron (terminal 2)
npm run dev:electron
```

##### Opción 1

```bash
# ejecutar aplicación react (terminal 1)
npm run dev:web

# ejecutar aplicación electron (terminal 2)
npm run dev:electron
```

##### Opción 2

```bash
# ejecutar aplicación electron y react de forma concurrente
npm run dev
```

#### Personalizar la ruta `userData` de Electron

Si la variable de entorno `ELECTRON_USER_DATA_PATH` está presente y se encuentra en modo de desarrollo, entonces la ruta `userData` se modifica en consecuencia.
ejemplo:

```sh
ELECTRON_USER_DATA_PATH=$(realpath ~/Desktop/bruno-test) npm run dev:electron
```

Esto creará una carpeta llamada `bruno-test` en tu escritorio y la usará como la ruta userData.

### Solución de problemas

Es posible que te encuentres con un error `Unsupported platform` cuando ejecutes `npm install`. Para solucionarlo, tendrás que eliminar las carpetas `node_modules` y el archivo `package-lock.json`, y luego volver a ejecutar `npm install`. Esto debería instalar todos los paquetes necesarios para que la aplicación funcione.

```sh
# Elimina la carpeta node_modules en los subdirectorios
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# Elimina el archivo package-lock en los subdirectorios
find . -type f -name "package-lock.json" -delete
```

### Pruebas

#### Pruebas individuales

```bash
# ejecutar pruebas de bruno-app
npm run test --workspace=packages/bruno-app

# ejecutar pruebas de bruno-electron
npm run test --workspace=packages/bruno-electron

# ejecutar pruebas de bruno-cli
npm run test --workspace=packages/bruno-cli

# ejecutar pruebas de bruno-common
npm run test --workspace=packages/bruno-common

# ejecutar pruebas de bruno-converters
npm run test --workspace=packages/bruno-converters

# ejecutar pruebas de bruno-schema
npm run test --workspace=packages/bruno-schema

# ejecutar pruebas de bruno-query
npm run test --workspace=packages/bruno-query

# ejecutar pruebas de bruno-js
npm run test --workspace=packages/bruno-js

# ejecutar pruebas de bruno-lang
npm run test --workspace=packages/bruno-lang

# ejecutar pruebas de bruno-toml
npm run test --workspace=packages/bruno-toml
```
#### Pruebas en conjunto

```bash
# ejecutar pruebas en todos los espacios de trabajo
npm test --workspaces --if-present
```

### Crea un Pull Request

- Por favor, mantén los Pull Request pequeños y enfocados en una sola cosa.
- Por favor, sigue el siguiente formato para la creación de ramas:
  - feature/[nombre de la funcionalidad]: Esta rama debe contener los cambios para una funcionalidad específica.
    - Ejemplo: feature/dark-mode
  - bugfix/[nombre del error]: Esta rama debe contener solo correcciones de errores para un error específico.
    - Ejemplo: bugfix/bug-1


================================================
FILE: docs/contributing/contributing_fa.md
================================================
[English](../../contributing.md)

## با هم، Bruno را بهتر می‌کنیم!

خوشحالم که قصد دارید Bruno را بهبود ببخشید. در ادامه قوانین و راهنماها برای راه‌اندازی Bruno روی سیستم شما آورده شده است.

### فناوری‌های استفاده‌شده

به فارسی برونو Bruno با استفاده از Next.js و React ساخته شده است. همچنین از Electron برای بسته‌بندی نسخه دسکتاپ (که امکان مجموعه‌های محلی را فراهم می‌کند) استفاده می‌کنیم.

کتابخانه‌هایی که استفاده می‌کنیم:

- CSS - Tailwind استایل
- Codemirror - ویرایشگر کد
- Redux - مدیریت وضعیت
- Tabler Icons - آیکون‌ها
- formik - فرم‌ها
- Yup اعتبارسنجی اسکیمـا
- axios - کلاینت درخواست
- chokidar - پایش‌گر سیستم فایل

### پیش‌نیازها

شما به [نود v20.x یا اخرین نسخه پایدار](https://nodejs.org/en/) و npm 8.x نیاز دارید. در این پروژه از فضای کاری npm (npm workspaces) استفاده می‌کنیم.

### شروع به کدنویسی

برای راه‌اندازی محیط توسعه محلی به فایل [مستندات توسعه](docs/development_fa.md) مراجعه کنید:

### ارسال Pull Request

1 - لطفاً Pull Requestها (PR) را کوتاه و متمرکز نگه دارید و تنها یک هدف مشخص را دنبال کنند. </br>
2 - لطفاً از فرمت نام‌گذاری شاخه‌ها استفاده کنید:

- feature/[name]: این شاخه باید شامل یک قابلیت مشخص باشد.
  - feature/dark-mode : مثال
- bugfix/[name]: این شاخه باید تنها شامل رفع یک باگ مشخص باشد.
  - bugfix/bug-1 : مثال

## توسعه

به فارسی برونو یا Bruno به‌صورت یک اپلیکیشن «سنگین» توسعه داده می‌شود. برای اجرا باید ابتدا Next.js را در یک پنجره ترمینال اجرا کنید و سپس اپلیکیشن Electron را در پنجره ترمینال دیگری راه‌اندازی نمایید.

### نیازمندی توسعه

- NodeJS v18

### اجرای محلی

```bash
# از ورژن NodeJS 18 استفاده کنید
nvm use

# نصب وابستگی‌ها
npm i --legacy-peer-deps

# ساخت مستندات GraphQL
npm run build:graphql-docs

# ساخت bruno-query
npm run build:bruno-query

# اجرای اپ Next (ترمینال 1)
npm run dev:web

# اجرای اپ Electron (ترمینال 2)
npm run dev:electron
```

### عیب‌یابی

ممکن است هنگام اجرای `npm install` خطای `Unsupported platform` ببینید. برای رفع این مشکل، پوشه `node_modules` و فایل `package-lock.json` را حذف کرده و سپس دوباره `npm install` را اجرا کنید. این کار معمولاً همه پکیج‌های لازم را نصب می‌کند.

```shell
# حذف پوشه node_modules در زیردایرکتوری‌ها
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# حذف فایل package-lock.json در زیردایرکتوری‌ها
find . -type f -name "package-lock.json" -delete
```

### تست‌ها

```bash
# اجرای تست‌های schema مربوط به bruno
npm test --workspace=packages/bruno-schema

# اجرای تست‌ها در همه فضاهای کاری (در صورت وجود)
npm test --workspaces --if-present
```


================================================
FILE: docs/contributing/contributing_fr.md
================================================
[English](../../contributing.md)

## Ensemble, améliorons Bruno !

Je suis content de voir que vous envisagez d'améliorer Bruno. Vous trouverez ci-dessous les règles et guides pour récupérer Bruno sur votre ordinateur.

### Technologies utilisées

Bruno est basé sur NextJs et React. Nous utilisons aussi Electron pour embarquer la version ordinateur (ce qui permet les collections locales).

Les librairies que nous utilisons :

- CSS - Tailwind
- Code Editors - Codemirror
- State Management - Redux
- Icons - Tabler Icons
- Forms - formik
- Schema Validation - Yup
- Request Client - axios
- Filesystem Watcher - chokidar

### Dépendances

Vous aurez besoin de [Node v20.x ou la dernière version LTS](https://nodejs.org/en/) et npm 8.x. Nous utilisons aussi les espaces de travail npm (_npm workspaces_) dans ce projet.

## Développement

Bruno est développé comme une application _client lourd_. Vous devrez charger l'application en démarrant nextjs dans un premier terminal, puis démarre l'application Electron dans un second.

### Dépendances

- NodeJS v18

### Développement local

```bash
# utiliser node en version 18
nvm use

# installation des dépendances
npm i --legacy-peer-deps

# construction des docs graphql
npm run build:graphql-docs

# construction de bruno query
npm run build:bruno-query

# construction de bruno common
npm run build:bruno-common

# démarrage de next (terminal 1)
npm run dev:web

# démarrage du client lourd (terminal 2)
npm run dev:electron
```

### Dépannage

Vous pourriez rencontrer une erreur `Unsupported platform` durant le lancement de `npm install`. Pour résoudre cela, veuillez supprimer le répertoire `node_modules` ainsi que le fichier `package-lock.json` et lancez à nouveau `npm install`. Cela devrait installer tous les paquets nécessaires pour lancer l'application.

```shell
# Efface les répertoires node_modules dans les sous-répertoires
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# Efface les fichiers package-lock.json dans les sous-répertoires
find . -type f -name "package-lock.json" -delete
```

### Tests

```bash
# exécuter des tests de schéma bruno
npm test --workspace=packages/bruno-schema

# exécuter des tests sur tous les espaces de travail
npm test --workspaces --if-present
```

### Ouvrir une Pull Request

- Merci de conserver les PR minimes et focalisées sur un seul objectif
- Merci de suivre le format de nom des branches :
  - feature/[feature name]: Cette branche doit contenir une fonctionnalité spécifique
    - Exemple : feature/dark-mode
  - bugfix/[bug name]: Cette branche doit contenir seulement une solution pour un bug spécifique
    - Exemple : bugfix/bug-1


================================================
FILE: docs/contributing/contributing_hi.md
================================================
[English](../../contributing.md)

## आइए मिलकर Bruno को बेहतर बनाएं !!

हमें खुशी है कि आप Bruno को बेहतर बनाना चाहते हैं। Bruno को अपने कंप्यूटर पर लाना शुरू करने के लिए दिशानिर्देश नीचे दिए गए हैं।

### टेक्नोलॉजी स्टैक

Bruno को Next.js और React का उपयोग करके बनाया गया है। हम डेस्कटॉप संस्करण को शिप करने के लिए इलेक्ट्रॉन का भी उपयोग करते हैं (जो स्थानीय संग्रह का समर्थन करता है)

Libraries जिनका हम उपयोग करते हैं

- CSS - Tailwind
- कोड संपादक - Codemirror
- State Management - Redux
- Icons - Tabler Icons
- Forms - formik
- Schema Validation - Yup
- Request Client - axios
- Filesystem Watcher - chokidar

### निर्भरताएँ

आपको [Node v20.x या नवीनतम LTS संस्करण](https://nodejs.org/en/) और npm 8.x की आवश्यकता होगी। हम प्रोजेक्ट में npm वर्कस्पेस का उपयोग करते हैं

## डेवलपमेंट

Bruno को एक डेस्कटॉप ऐप के रूप में बनाया किया जा रहा है। आपको Next.js ऐप को एक टर्मिनल में चलाकर ऐप को लोड करना होगा और फिर इलेक्ट्रॉन ऐप को दूसरे टर्मिनल में चलाना होगा।

### लोकल डेवलपमेंट

```bash
# nodejs 18 संस्करण का उपयोग करें
nvm use

# डिपेंडेंसी इनस्टॉल करे
npm i --legacy-peer-deps

# पैकेज बिल्ड करें
npm run build:graphql-docs
npm run build:bruno-query
npm run build:bruno-common
npm run build:bruno-converters
npm run build:bruno-requests

# Next.js ऐप चलाएँ (टर्मिनल 1 पर)
npm run dev:web

# इलेक्ट्रॉन ऐप चलाएँ (टर्मिनल 2 पर)
npm run dev:electron
```

### समस्या निवारण

जब आप `npm इंस्टॉल` चलाते हैं तो आपको `असमर्थित प्लेटफ़ॉर्म` त्रुटि का सामना करना पड़ सकता है। इसे ठीक करने के लिए, आपको `node_modules` और `package-lock.json` को हटाना होगा और `npm install` चलाना होगा। इसमें ऐप चलाने के लिए आवश्यक सभी आवश्यक पैकेज इंस्टॉल होने चाहिए।

```shell
# सब-डायरेक्टरी में node_modules डिलीट करे
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# सब-डायरेक्टरी में package-lock डिलीट करे
find . -type f -name "package-lock.json" -delete
```

### परिक्षण

```bash
# ब्रूनो-स्कीमा परीक्षण चलाएँ
npm test --workspace=packages/bruno-schema

# सभी कार्यस्थानों पर परीक्षण चलाएँ
npm test --workspaces --if-present
```

### पुल अनुरोध प्रक्रिया

- कृपया PR को छोटा रखें और एक चीज़ पर केंद्रित रखें
- कृपया शाखाएँ बनाने के प्रारूप का पालन करें
  - feature/[feature name]: इस शाखा में किसी विशिष्ट सुविधा के लिए परिवर्तन होने चाहिए
    - उदाहरण: feature/dark-mode
  - bugfix/[bug name]: इस शाखा में केवल विशिष्ट बग के लिए बग फिक्स शामिल होने चाहिए
    - उदाहरण bugfix/bug-1


================================================
FILE: docs/contributing/contributing_it.md
================================================
[English](../../contributing.md)

## Insieme, miglioriamo Bruno!

Sono felice di vedere che hai intenzione di migliorare Bruno. Di seguito, troverai le regole e le guide per ripristinare Bruno sul tuo computer.

### Tecnologie utilizzate

Bruno è costruito utilizzando Next.js e React. Utilizziamo anche Electron per incorporare la versione desktop (che consente raccolte locali).

Le librerie che utilizziamo sono:

- CSS - Tailwind
- Code Editors - Codemirror
- State Management - Redux
- Icons - Tabler Icons
- Forms - formik
- Schema Validation - Yup
- Request Client - axios
- Filesystem Watcher - chokidar

### Dependences

Hai bisogno di [Node v20.x o dell'ultima versione LTS](https://nodejs.org/en/) di npm 8.x. Utilizziamo gli spazi di lavoro npm (_npm workspaces_) in questo progetto.

### Iniziamo a codificare

Si prega di fare riferimento alla [documentazione di sviluppo](docs/development_it.md) per le istruzioni su come avviare l'ambiente di sviluppo locale.

### Aprire una richiesta di pull (Pull Request)

- Si prega di mantenere le Pull Request (PR) brevi e concentrate su un singolo obiettivo.
- Si prega di seguire il formato di denominazione dei rami.
  - feature/[feature name]: Questo ramo dovrebbe contenere una specifica funzionalità.
    - Esempio: feature/dark-mode
  - bugfix/[bug name]: Questo ramo dovrebbe contenere solo una soluzione per un bug specifico.
    - Esempio: bugfix/bug-1

## Sviluppo

Bruno è sviluppato come un'applicazione "heavy". È necessario caricare l'applicazione avviando Next.js in una finestra del terminale e quindi avviare l'applicazione Electron in un altro terminale.

### Sviluppo

- NodeJS v18

### Sviluppo locale

```bash
# use nodejs 18 version
nvm use

# install deps
npm i --legacy-peer-deps

# build graphql docs
npm run build:graphql-docs

# build bruno query
npm run build:bruno-query

# run next app (terminal 1)
npm run dev:web

# run electron app (terminal 2)
npm run dev:electron
```

### Risoluzione dei problemi

Potresti trovare un errore `Unsupported platform` durante l'esecuzione di `npm install`. Per risolvere questo problema, ti preghiamo di eliminare la cartella `node_modules`, il file `package-lock.json` e di seguito nuovamente `npm install`. Qeusto dovrebbe installare tutti i pacchetti necessari per avviare l'applicazione.

```shell
# delete node_modules in sub-directories
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# delete package-lock in sub-directories
find . -type f -name "package-lock.json" -delete
```

### Tests

```bash
# esegui i test dello schema bruno
npm test --workspace=packages/bruno-schema

# esegui test su tutti gli spazi di lavoro
npm test --workspaces --if-present
```


================================================
FILE: docs/contributing/contributing_ja.md
================================================
[English](../../contributing.md)

## 一緒に Bruno をよりよいものにしていきましょう!!

Bruno を改善していただけるのは歓迎です。以下はあなたの環境で Bruno を起動するためのガイドラインです。

### 技術スタック

Bruno は Next.js と React で作られています。デスクトップアプリ(ローカルのコレクションに対応しています)には electron も使用しています。

使用ライブラリ

- CSS - Tailwind
- Code Editors - Codemirror
- State Management - Redux
- Icons - Tabler Icons
- Forms - formik
- Schema Validation - Yup
- Request Client - axios
- Filesystem Watcher - chokidar

### 依存関係

[Node v20.x もしくは最新の LTS バージョン](https://nodejs.org/en/)と npm 8.x が必要です。プロジェクトに npm ワークスペースを使用しています。

## 開発

Bruno はデスクトップアプリとして開発されています。一つのターミナルで Next.js アプリを立ち上げ、もう一つのターミナルで electron アプリを立ち上げてアプリを読み込む必要があります。

### ローカル環境での開発

```bash
# use nodejs 18 version
nvm use

# install deps
npm i --legacy-peer-deps

# build packages
npm run build:graphql-docs
npm run build:bruno-query
npm run build:bruno-common
npm run build:bruno-converters
npm run build:bruno-requests

# run next app (terminal 1)
npm run dev:web

# run electron app (terminal 2)
npm run dev:electron
```

### トラブルシューティング

`npm install`を実行すると、`Unsupported platform`エラーに遭遇することがあります。これを直すためには、`node_modules`と`package-lock.json`を削除し、`npm install`を実行しなおす必要があります。これにより、アプリを動かすのに必要なパッケージがすべてインストールされます。

```shell
# Delete node_modules in sub-directories
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# Delete package-lock in sub-directories
find . -type f -name "package-lock.json" -delete
```

### テストを動かすには

```bash
# ブルーノスキーマのテストを実行します
npm test --workspace=packages/bruno-schema

# すべてのワークスペースでテストを実行します
npm test --workspaces --if-present
```

### プルリクエストの手順

- プルリクエストは小規模で、一つのことにフォーカスしたものにしてください。
- 以下のフォーマットに従ってブランチを作ってください。
  - feature/[feature name]: このブランチには特定の機能に対する変更を含んでください。
    - 例: feature/dark-mode
  - bugfix/[bug name]: このブランチには特定のバグに対する修正のみを含むようにしてください。
    - 例: bugfix/bug-1


================================================
FILE: docs/contributing/contributing_kr.md
================================================
[English](../../contributing.md)

## 함께 Bruno를 더 좋게 만들어요!!

우리는 여러분이 Bruno를 발전시키기 위해 노력해주셔서 기쁩니다. 다음은 여러분의 컴퓨터에서 Bruno를 불러오는 가이드라인입니다.

### 기술 스택

Bruno는 Next.js와 React로 구축되었습니다. 또한, (로컬 컬렉션을 지원하는) 데스크톱 버전을 제공하기 위해 electron을 사용합니다.

우리가 사용하는 라이브러리

- CSS - Tailwind
- Code Editors - Codemirror
- State Management - Redux
- Icons - Tabler Icons
- Forms - formik
- Schema Validation - Yup
- Request Client - axios
- Filesystem Watcher - chokidar

### 의존성

[Node v20.x 혹은 최신 LTS version](https://nodejs.org/en/)과 npm 8.x 버전이 필요합니다. 우리는 이 프로젝트에서 npm workspaces를 사용합니다.

## 개발

Bruno는 데스크톱 앱으로 개발되고 있습니다. 한 터미널에서 Next.js를 실행하여 앱을 로드한 다음 다른 터미널에서 electron 앱을 실행해야합니다.

### 로컬 개발

```bash
# nodejs 18 버전 사용
nvm use

# 의존성 설치
npm i --legacy-peer-deps

# packages 빌드
npm run build:graphql-docs
npm run build:bruno-query
npm run build:bruno-common
npm run build:bruno-converters
npm run build:bruno-requests

# next 앱 실행 (1번 터미널)
npm run dev:web

# electron 앱 실행 (2번 터미널)
npm run dev:electron
```

### 트러블 슈팅

`npm install`을 실행할 때, `Unsupported platform` 에러를 마주칠 수 있습니다. 이것을 고치기 위해서는 `node_modules`와 `package-lock.json`을 삭제하고 `npm install`을 실행해야 합니다.
그러면 앱을 실행하기 위해 필요한 패키지들이 모두 설치됩니다.

```shell
# 하위 디렉토리에 있는 node_modules 삭제
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# 하위 디렉토리에 있는 package-lock 삭제
find . -type f -name "package-lock.json" -delete
```

### 테스팅

```bash
# bruno-schema 테스트 실행
npm test --workspace=packages/bruno-schema

# 모든 작업 공간에서 테스트 실행
npm test --workspaces --if-present
```

### Pull Requests 요청

- PR을 작게 유지하고 한가지에 집중해주세요.
- 브랜치를 생성하는 형식을 따라주세요.
  - feature/[feature name]: 이 브랜치는 특정 기능에 대한 변경사항이 포함되어야합니다.
    - 예시: feature/dark-mode
  - bugfix/[bug name]: 이 브랜치는 특정 버그에 대한 버그 수정만 포함되어야합니다.
    - 예시: bugfix/bug-1


================================================
FILE: docs/contributing/contributing_nl.md
================================================
[English](../../contributing.md)

## Laten we Bruno samen beter maken !!

We zijn blij dat je Bruno wilt verbeteren. Hieronder staan de richtlijnen om Bruno op je computer op te zetten.

### Technologiestack

Bruno is gebouwd met Next.js en React. We gebruiken ook Electron om een desktopversie te leveren (die lokale collecties ondersteunt).

Bibliotheken die we gebruiken:

- CSS - Tailwind
- Code Editors - Codemirror
- State Management - Redux
- Iconen - Tabler Icons
- Formulieren - formik
- Schema Validatie - Yup
- Request Client - axios
- Bestandsysteem Watcher - chokidar

### Afhankelijkheden

Je hebt [Node v18.x of de nieuwste LTS-versie](https://nodejs.org/en/) en npm 8.x nodig. We gebruiken npm workspaces in het project.

## Ontwikkeling

Bruno wordt ontwikkeld als een desktop-app. Je moet de app laden door de Next.js app in één terminal te draaien en daarna de Electron app in een andere terminal te draaien.

### Lokale Ontwikkeling

```bash
# gebruik voorgeschreven node versie
nvm use

# installeer afhankelijkheden
npm i --legacy-peer-deps

# build pakketten
npm run build:graphql-docs
npm run build:bruno-query
npm run build:bruno-common
npm run build:bruno-converters
npm run build:bruno-requests

# draai next app (terminal 1)
npm run dev:web

# draai electron app (terminal 2)
npm run dev:electron
```

### Problemen oplossen

Je kunt een `Unsupported platform`-fout tegenkomen wanneer je `npm install` uitvoert. Om dit te verhelpen, moet je `node_modules` en `package-lock.json` verwijderen en `npm install` uitvoeren. Dit zou alle benodigde afhankelijkheden moeten installeren om de app te draaien.

```shell
# Verwijder node_modules in subdirectories
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# Verwijder package-lock in subdirectories
find . -type f -name "package-lock.json" -delete
```

### Testen

```bash
# voer bruno-schema tests uit
npm test --workspace=packages/bruno-schema

# voer tests uit over alle werkruimten
npm test --workspaces --if-present
```

### Pull Requests indienen

- Houd de PR's klein en gefocust op één ding
- Volg het formaat voor het aanmaken van branches
  - feature/[feature naam]: Deze branch moet wijzigingen voor een specifieke functie bevatten
    - Voorbeeld: feature/dark-mode
  - bugfix/[bug naam]: Deze branch moet alleen bugfixes voor een specifieke bug bevatten
    - Voorbeeld: bugfix/bug-1

================================================
FILE: docs/contributing/contributing_pl.md
================================================
[English](../../contributing.md)

## Wspólnie uczynijmy Bruno lepszym !!

Cieszymy się, że chcesz udoskonalić Bruno. Poniżej znajdziesz wskazówki, jak rozpocząć pracę z Bruno na Twoim komputerze.

### Stos Technologiczny

Bruno jest zbudowane przy użyciu Next.js i React. Używamy również electron do stworzenia wersji desktopowej (która obsługuje lokalne kolekcje)

Biblioteki, których używamy

- CSS - Tailwind
- Edytory Kodu - Codemirror
- Zarządzanie Stanem - Redux
- Ikony - Tabler Icons
- Formularze - formik
- Walidacja Schematu - Yup
- Klient Zapytań - axios
- Obserwator Systemu Plików - chokidar

### Zależności

Będziesz potrzebować [Node v20.x lub najnowszej wersji LTS](https://nodejs.org/en/) oraz npm 8.x. W projekcie używamy npm workspaces

## Rozwój

Bruno jest rozwijane jako aplikacja desktopowa. Musisz załadować aplikację, uruchamiając aplikację Next.js w jednym terminalu, a następnie uruchomić aplikację electron w innym terminalu.

### Zależności

- NodeJS v18

### Lokalny Rozwój

```bash
# użyj wersji nodejs 18
nvm use

# zainstaluj zależności
npm i --legacy-peer-deps

# zbuduj dokumentację graphql
npm run build:graphql-docs

# zbuduj zapytanie bruno
npm run build:bruno-query

# uruchom aplikację next (terminal 1)
npm run dev:web

# uruchom aplikację electron (terminal 2)
npm run dev:electron
```

### Rozwiązywanie Problemów

Możesz napotkać błąd `Unsupported platform` podczas uruchamiania `npm install`. Aby to naprawić, będziesz musiał usunąć `node_modules` i `package-lock.json`, a następnie uruchomić `npm install`. Powinno to zainstalować wszystkie niezbędne pakiety potrzebne do uruchomienia aplikacji.

```shell
# Usuń node_modules w podkatalogach
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# Usuń package-lock w podkatalogach
find . -type f -name "package-lock.json" -delete

```

### Testowanie

```bash
# uruchom testy bruno-schema
npm test --workspace=packages/bruno-schema

# uruchom testy we wszystkich przestrzeniach roboczych
npm test --workspaces --if-present
```

### Tworzenie Pull Request

- Prosimy, aby PR były małe i skoncentrowane na jednej rzeczy
- Prosimy przestrzegać formatu tworzenia gałęzi
  - feature/[nazwa funkcji]: Ta gałąź powinna zawierać zmiany dotyczące konkretnej funkcji
    - Przykład: feature/dark-mode
  - bugfix/[nazwa błędu]: Ta gałąź powinna zawierać tylko poprawki dla konkretnego błędu
    - Przykład bugfix/bug-1


================================================
FILE: docs/contributing/contributing_pt_br.md
================================================
[English](../../contributing.md)

## Vamos tornar o Bruno melhor, juntos!!

Estamos felizes que você queira ajudar a melhorar o Bruno. Abaixo estão as diretrizes e orientações para começar a executar o Bruno no seu computador.

### Stack de Tecnologias

O Bruno é construído usando Next.js e React. Também usamos o Electron para disponibilizar uma versão para desktop (que suporta coleções locais).

Bibliotecas que utilizamos:

- CSS - Tailwind
- Editor de Código - Codemirror
- Gerenciador de Estado - Redux
- Ícones - Tabler Icons
- Formulários - formik
- Validador de Schema - Yup
- Cliente de Requisições - axios
- Monitor de Arquivos - chokidar

### Dependências

Você precisará do [Node v20.x (ou da versão LTS mais recente)](https://nodejs.org/en/) e do npm na versão 8.x. Nós utilizamos npm workspaces no projeto.

## Desenvolvimento

Bruno está sendo desenvolvido como um aplicativo de desktop. Você precisa carregar o programa executando o aplicativo Next.js em um terminal e, em seguida, executar o aplicativo Electron em outro terminal.

### Dependências

- NodeJS v18

### Desenvolvimento Local

```bash
# use nodejs 18 version
nvm use

# install deps
npm i --legacy-peer-deps

# build graphql docs
npm run build:graphql-docs

# build bruno query
npm run build:bruno-query

# run next app (terminal 1)
npm run dev:web

# run electron app (terminal 2)
npm run dev:electron
```

### Troubleshooting

Você pode se deparar com o erro `Unsupported platform` ao executar o comando `npm install`. Para corrigir isso, você precisará excluir a pasta `node_modules` e o arquivo `package-lock.json` e, em seguida, executar o comando `npm install` novamente. Isso deve instalar todos os pacotes necessários para executar o aplicativo.

```shell
# delete node_modules in sub-directories
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# delete package-lock in sub-directories
find . -type f -name "package-lock.json" -delete
```

### Testando

```bash
# executar testes do bruno-schema
npm test --workspace=packages/bruno-schema

# executar testes em todos os ambientes de trabalho
npm test --workspaces --if-present
```

### Envio de Pull Request

- Por favor, mantenha os PRs pequenos e focados em uma única coisa.
- Siga o formato de criação de branches.
  - feature/[nome da funcionalidade]: Esta branch deve conter alterações para uma funcionalidade específica.
    - Exemplo: feature/dark-mode
  - bugfix/[nome do bug]: Esta branch deve conter apenas correções para um bug específico.
    - Exemplo: bugfix/bug-1


================================================
FILE: docs/contributing/contributing_ro.md
================================================
[English](../../contributing.md)

## Haideţi să îmbunătățim Bruno, împreună!!

Ne bucurăm că doriți să îmbunătățiți bruno. Mai jos sunt instrucțiunile pentru ca să porniți bruno pe calculatorul dvs.

### Stack-ul tehnologic

Bruno este construit cu Next.js și React. De asemenea, folosim electron pentru a livra o versiune desktop (care poate folosi colecții locale)

Bibliotecile pe care le folosim

- CSS - Tailwind
- Editori de cod - Codemirror
- Management de condiție - Redux
- Icoane - Tabler Icons
- Formulare - formik
- Validarea schemelor - Yup
- Cererile client - axios
- Observatorul sistemului de fișiere - chokidar

### Dependențele

Veți avea nevoie de [Node v20.x sau cea mai recentă versiune LTS](https://nodejs.org/en/) și npm 8.x. Noi folosim spații de lucru npm în proiect

## Dezvoltarea

Bruno este dezvoltat ca o aplicație desktop. Ca să porniți aplicatia trebuie să rulați aplicația Next.js într-un terminal și apoi să rulați aplicația electron într-un alt terminal.

```shell
# folosiți nodejs versiunea 18
nvm use

# instalați dependențele
npm i --legacy-peer-deps

# construiți documente graphql
npm run build:graphql-docs

# construiți bruno query
npm run build:bruno-query

# rulați aplicația next (terminal 1)
npm run dev:web

# rulați aplicația electron (terminal 2)
npm run dev:electron
```

### Depanare

Este posibil să întâmpinați o eroare `Unsupported platform` când rulați „npm install”. Pentru a remedia acest lucru, va trebui să ștergeți `node_modules` și `package-lock.json` și să rulați `npm install`. Aceasta ar trebui să instaleze toate pachetele necesare pentru a rula aplicația.

```shell
# Ștergeți node_modules din subdirectoare
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# Ștergeți package-lock din subdirectoare
find . -type f -name "package-lock.json" -delete
```

### Testarea

```shell
# executați teste bruno-schema
npm test --workspace=packages/bruno-schema

# executați teste peste toate spațiile de lucru
npm test --workspaces --if-present
```

### Crearea unui Pull Request

- Vă rugăm să păstrați PR-urile mici și concentrate pe un singur lucru
- Vă rugăm să urmați formatul de creare a branchurilor
  - feature/[Numele funcției]: Acest branch ar trebui să conțină modificări pentru o funcție anumită
    - Exemplu: feature/dark-mode
  - bugfix/[Numele eroarei]: Acest branch ar trebui să conţină numai remedieri pentru o eroare anumită
    - Exemplu bugfix/bug-1


================================================
FILE: docs/contributing/contributing_ru.md
================================================
[English](../../contributing.md)

## Давайте вместе сделаем Бруно лучше!!!

Я рад, что Вы хотите усовершенствовать bruno. Ниже приведены рекомендации по запуску bruno на вашем компьютере.

### Стек

Bruno построен с использованием Next.js и React. Мы также используем electron для поставки десктопной версии ( которая поддерживает локальные коллекции )

Библиотеки, которые мы используем

- CSS - Tailwind
- Редакторы кода - Codemirror
- Управление состоянием - Redux
- Иконки - Tabler Icons
- Формы - formik
- Валидация схем - Yup
- Запросы клиента - axios
- Наблюдатель за файловой системой - chokidar

### Зависимости

Вам потребуется [Node v20.x или последняя версия LTS](https://nodejs.org/en/) и npm 8.x. В проекте мы используем рабочие пространства npm

### Приступим к коду

Пожалуйста, обратитесь к [development_ru.md](docs/development_ru.md) для получения инструкций по запуску локальной среды разработки.

### Создание Pull Request

- Пожалуйста, пусть PR будет небольшим и сфокусированным на одной вещи
- Пожалуйста, соблюдайте формат создания веток
  - feature/[название функции]: Эта ветка должна содержать изменения для конкретной функции
    - Пример: feature/dark-mode
  - bugfix/[название ошибки]: Эта ветка должна содержать только исправления для конкретной ошибки
    - Пример bugfix/bug-1

## Разработка

Bruno разрабатывается как десктопное приложение. Необходимо загрузить приложение, запустив приложение Next.js в одном терминале, а затем запустить приложение electron в другом терминале.

### Зависимости

- NodeJS v18

### Локальная разработка

```bash
# используйте nodejs 18 версии
nvm use

# установите зависимости
npm i --legacy-peer-deps

# билд документации по graphql
npm run build:graphql-docs

# билд bruno query
npm run build:bruno-query

# запустить next приложение ( терминал 1 )
npm run dev:web

# запустить приложение electron ( терминал 2 )
npm run dev:electron
```

### Устранение неисправностей

При запуске `npm install` может возникнуть ошибка `Unsupported platform`. Чтобы исправить это, необходимо удалить `node_modules` и `package-lock.json` и запустить `npm install`. В результате будут установлены все пакеты, необходимые для работы приложения.

```shell
# Удаление node_modules в подкаталогах
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# Удаление package-lock в подкаталогах
find . -type f -name "package-lock.json" -delete
```

### Тестирование

```bash
# запустите тесты bruno-schema
npm test --workspace=packages/bruno-schema

# запустите тесты во всех рабочих пространствах
npm test --workspaces --if-present
```


================================================
FILE: docs/contributing/contributing_sk.md
================================================
## Urobme bruno lepším, spoločne !!

Sme radi, že chcete zlepšiť bruno. Nižšie sú uvedené pokyny, ako začať s výchovou bruno na vašom počítači.

### Technologický zásobník

Bruno je vytvorené pomocou Next.js a React. Na dodávanie desktopovej verzie (ktorá podporuje lokálne kolekcie) používame aj electron.

Balíčky, ktoré používame:

- CSS - Tailwind
- Editory kódu - Codemirror
- Správa stavu - Redux
- Ikony - Tabler Icons
- Formuláre - formik
- Overovanie schém - Yup
- Klient požiadaviek - axios
- Sledovač súborového systému - chokidar

### Závislosti

Budete potrebovať [NodeJS v18.x alebo najnovšiu verziu LTS](https://nodejs.org/en/) a npm versiu 8.x. V projekte používame pracovné priestory npm

## Vývoj

Bruno sa vyvíja ako desktopová aplikácia. Aplikáciu je potrebné načítať spustením aplikácie Next.js v jednom termináli a potom spustiť aplikáciu electron v inom termináli.

### Závislosti

- NodeJS v18

### Miestny vývoj

```bash
# použite verziu nodejs 18
nvm use

# nainštalovať balíčky
npm i --legacy-peer-deps

# zostaviť balíčky
npm run build:graphql-docs
npm run build:bruno-query
npm run build:bruno-common
npm run build:bruno-converters
npm run build:bruno-requests

# spustite ďalšiu aplikáciu (terminál 1)
npm run dev:web

# spustite aplikáciu electron (terminál 2)
npm run dev:electron
```

### Riešenie problémov

Pri spustení `npm install` sa môžete stretnúť s chybou `Unsupported platform`. Ak chcete túto chybu odstrániť, musíte odstrániť súbory `node_modules`, `package-lock.json` a spustiť `npm install`. Tým by sa mali nainštalovať všetky potrebné balíky potrebné na spustenie aplikácie.

```shell
# Odstrániť node_modules v podadresároch
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# Odstráňte package-lock v podadresároch
find . -type f -name "package-lock.json" -delete
```

### Testovanie

````bash
# spustiť bruno-schema testy
npm test --workspace=packages/bruno-schema

# spustiť testy vo všetkých pracovných priestoroch
npm test --workspaces --if-present
```

### Vyrobenie Pull Request

- Prosím, aby PR boli malé a zamerané na jednu vec
- Prosím, dodržujte formát vytvárania vetiev
  - feature/[názov funkcie]: Táto vetva by mala obsahovať zmeny pre konkrétnu funkciu
    - Príklad: feature/dark-mode
  - bugfix/[názov chyby]: Táto vetva by mala obsahovať iba opravy konkrétnej chyby
    - Príklad: bugfix/bug-1


================================================
FILE: docs/contributing/contributing_tr.md
================================================
[English](../../contributing.md)

## Bruno'yu birlikte daha iyi hale getirelim!!!

bruno'yu geliştirmek istemenizden mutluluk duyuyoruz. Aşağıda, bruno'yu bilgisayarınıza getirmeye başlamak için yönergeler bulunmaktadır.

### Kullanılan Teknolojiler

Bruno, Next.js ve React kullanılarak oluşturulmuştur. Ayrıca bir masaüstü sürümü (yerel koleksiyonları destekleyen) göndermek için electron kullanıyoruz

Kullandığımız kütüphaneler

- CSS - Tailwind
- Kod Düzenleyiciler - Codemirror
- Durum Yönetimi - Redux
- Iconlar - Tabler Icons
- Formlar - formik
- Şema Doğrulama - Yup
- İstek İstemcisi - axios
- Dosya Sistemi İzleyicisi - chokidar

### Bağımlılıklar

[Node v20.x veya en son LTS sürümüne](https://nodejs.org/en/) ve npm 8.x'e ihtiyacınız olacaktır. Projede npm çalışma alanlarını kullanıyoruz

## Gelişim

Bruno bir masaüstü uygulaması olarak geliştirilmektedir. Next.js uygulamasını bir terminalde çalıştırarak uygulamayı yüklemeniz ve ardından electron uygulamasını başka bir terminalde çalıştırmanız gerekir.

### Bağımlılıklar

- NodeJS v18

### Yerel Geliştirme

```bash
# nodejs 18 sürümünü kullan
nvm use

# deps yükleyin
npm i --legacy-peer-deps

# graphql dokümanlarını oluştur
npm run build:graphql-docs

# bruno sorgusu oluştur
npm run build:bruno-query

# sonraki uygulamayı çalıştır (terminal 1)
npm run dev:web

# electron uygulamasını çalıştır (terminal 2)
npm run dev:electron
```

### Sorun Giderme

`npm install`'ı çalıştırdığınızda `Unsupported platform` hatası ile karşılaşabilirsiniz. Bunu düzeltmek için `node_modules` ve `package-lock.json` dosyalarını silmeniz ve `npm install` dosyasını çalıştırmanız gerekecektir. Bu, uygulamayı çalıştırmak için gereken tüm gerekli paketleri yüklemelidir.

```shell
#  Alt dizinlerdeki node_modules öğelerini silme
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# Alt dizinlerdeki paket kilidini silme
find . -type f -name "package-lock.json" -delete
```

### Test

```bash
# bruno-schema testlerini çalıştır
npm test --workspace=packages/bruno-schema

# tüm çalışma alanlarında testleri çalıştır
npm test --workspaces --if-present
```

### Pull Request Oluşturma

- Lütfen PR'ları küçük tutun ve tek bir şeye odaklanın
- Lütfen şube oluşturma formatını takip edin
  - feature/[özellik adı]: Bu dal belirli bir özellik için değişiklikler içermelidir
    - Örnek: feature/dark-mode
  - bugfix/[hata adı]: Bu dal yalnızca belirli bir hata için hata düzeltmeleri içermelidir
    - Örnek bugfix/bug-1


================================================
FILE: docs/contributing/contributing_ua.md
================================================
[English](../../contributing.md)

## Давайте зробимо Bruno краще, разом !!

Я дуже радий що Ви бажаєте покращити Bruno. Нижче наведені вказівки як розпочати розробку Bruno на Вашому комп'ютері.

### Стек технологій

Bruno побудований на Next.js та React. Також для десктопної версії (яка підтримує локальні колекції) використовується Electron

Бібліотеки, які ми використовуємо

- CSS - Tailwind
- Редактори коду - Codemirror
- Керування станом - Redux
- Іконки - Tabler Icons
- Форми - formik
- Валідація по схемі - Yup
- Клієнт запитів - axios
- Спостерігач за файловою системою - chokidar

### Залежності

Вам знадобиться [Node v20.x або остання LTS версія](https://nodejs.org/en/) та npm 8.x. Ми використовуєм npm workspaces в цьому проекті

### Починаєм писати код

Будь ласка, зверніться до [development_ua.md](docs/development_ua.md) за інструкціями щодо запуску локального середовища розробки.

### Створення Pull Request-ів

- Будь ласка, робіть PR-и маленькими і сфокусованими на одній речі
- Будь ласка, слідуйте формату назв гілок
  - feature/[назва feature]: Така гілка має містити зміни лише щодо конкретної feature
    - Приклад: feature/dark-mode
  - bugfix/[назва баґу]: Така гілка має містити лише виправлення конкретного багу
    - Приклад: bugfix/bug-1

## Розробка

Bruno розробляється як декстопний застосунок. Вам потрібно запустити Next.js в одній сесії терміналу, та запустити застосунок Electron в іншій сесії терміналу.

### Залежності

- NodeJS v18

### Локальна розробка

```bash
# Використовуйте nodejs 18-ї версії
nvm use

# встановіть залежності
npm i --legacy-peer-deps

# зберіть документацію graphql
npm run build:graphql-docs

# зберіть bruno query
npm run build:bruno-query

# запустіть додаток next (термінал 1)
npm run dev:web

# запустіть додаток електрон (термінал 2)
npm run dev:electron
```

### Усунення несправностей

Ви можете зтикнутись із помилкою `Unsupported platform` коли запускаєте `npm install`. Щоб усунути цю проблему, вам потрібно видалити `node_modules` та `package-lock.json`, і тоді запустити `npm install`. Це має встановити всі потрібні для запуску додатку пекеджі.

```shell
# Видаліть node_modules в піддиректоріях
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# Видаліть package-lock в піддиректоріях
find . -type f -name "package-lock.json" -delete
```

### Тестування

```bash
# запустити тести bruno-schema
npm test --workspace=packages/bruno-schema

# запустити тести у всіх робочих просторах
npm test --workspaces --if-present
```


================================================
FILE: docs/contributing/contributing_zhtw.md
================================================
[English](../../contributing.md)

## 讓我們一起來讓 Bruno 變得更好!

我們很高興您希望一同改善 Bruno。以下是在您的電腦上開始運行 Bruno 的規則及指南。

### 技術細節

Bruno 使用 Next.js 和 React 構建。我們使用 Electron 來封裝及發佈桌面版本。

我們使用的函式庫:

- CSS - Tailwind
- 程式碼編輯器 - Codemirror
- 狀態管理 - Redux
- Icons - Tabler Icons
- 表單 - formik
- 結構驗證- Yup
- 請求用戶端 - axios
- 檔案系統監測 - chokidar

### 依賴關係

您需要使用 [Node v20.x 或最新的 LTS 版本](https://nodejs.org/en/) 和 npm 8.x。我們在這個專案中使用 npm 工作區(_npm workspaces_)。

## 開發

Bruno 正以桌面應用程式的形式開發。您需要在一個終端機中執行 Next.js 來載入應用程式,然後在另一個終端機中執行 electron 應用程式。

### 開發依賴

- NodeJS v18

### 本地開發

```bash
# 使用 nodejs 第 18 版
nvm use

# 安裝相依套件(使用--legacy-peer-deps 解決套件相依性問題)
npm i --legacy-peer-deps

# 建立 graphql 文件
npm run build:graphql-docs

# 建立 bruno 查詢
npm run build:bruno-query

# 執行 next 應用程式(終端機 1)
npm run dev:web

# 執行 electron 應用程式(終端機 2)
npm run dev:electron
```

### 故障排除

在執行 `npm install` 時,您可能會遇到 `Unsupported platform` 的錯誤訊息。爲了解決這個問題,您需要刪除 `node_modules` 資料夾和 `package-lock.json` 檔案,然後再執行一次 `npm install`。這應該能重新安裝應用程式所需的套件。

```shell
# 刪除子資料夾中的 node_modules 資料夾
find ./ -type d -name "node_modules" -print0 | while read -d $'\0' dir; do
  rm -rf "$dir"
done

# 刪除子資料夾中的 package-lock.json 檔案
find . -type f -name "package-lock.json" -delete
```

### 測試

```bash
# 執行布魯諾架構測試
npm test --workspace=packages/bruno-schema

# 對所有工作區執行測試
npm test --workspaces --if-present
```

### 發送 Pull Request

- 請保持 PR 精簡並專注於一個目標
- 請遵循建立分支的格式:
  - feature/[feature name]:該分支應包含特定功能的更改
    - 範例:feature/dark-mode
  - bugfix/[bug name]:該分支應僅包含特定 bug 的修復
    - 範例:bugfix/bug-1


================================================
FILE: docs/playwright-testing-guide.md
================================================
# Playwright Testing Guide for Bruno

This guide explains how to create and run Playwright test cases for the Bruno application using the UI.

## Table of Contents

- [Overview](#overview)
- [Prerequisites](#prerequisites)
- [Creating Tests Using Codegen](#creating-tests-using-codegen)
- [Manual Test Creation](#manual-test-creation)
- [Test Structure and Organization](#test-structure-and-organization)
- [Available Test Fixtures](#available-test-fixtures)
- [Running Tests](#running-tests)
- [Best Practices](#best-practices)
- [Examples](#examples)
- [Troubleshooting](#troubleshooting)

## Overview

Bruno uses Playwright for end-to-end testing of its Electron application. The testing setup includes custom fixtures for Electron app testing and utilities for managing test data.

## Prerequisites

- Node.js installed
- All dependencies installed (`npm install`)
- Electron app can be built and run

## Creating Tests Using Codegen

The easiest way to create tests is using Playwright's codegen feature, which records your UI interactions and generates test code.

### Using the Built-in Codegen Script

```bash
# Generate a test with a specific name
npm run test:codegen my-new-test

# Generate a test without specifying a name (will prompt for input)
npm run test:codegen
```

### What Happens During Codegen

1. The Electron app launches automatically
2. Playwright Inspector opens in a separate window
3. You interact with the Bruno UI
4. Actions are recorded and converted to test code
5. The generated test file is saved in `e2e-tests/`

### Codegen Workflow

1. **Start Recording**: Run the codegen command
2. **Interact with UI**: Perform the actions you want to test
3. **Add Assertions**: Use the inspector to add assertions
4. **Save Test**: The test file is automatically generated
5. **Review and Refine**: Edit the generated test as needed

## Manual Test Creation

You can also create tests manually by following the established patterns.

### Basic Test Structure

```typescript
import { test, expect } from '../../playwright';

test('Test description', async ({ page }) => {
  // Test steps here
  await page.getByLabel('Some Label').click();

  // Assertions
  await expect(page.getByText('Expected Text')).toBeVisible();
});
```

### Test with Temporary Data

```typescript
import { test, expect } from '../../playwright';

test('Test with temporary data', async ({ page, createTmpDir }) => {
  // Create temporary directory for test data
  const testDir = await createTmpDir('test-collection');

  // Test steps
  await page.getByLabel('Create Collection').click();
  await page.getByLabel('Name').fill('test-collection');
  await page.getByLabel('Location').fill(testDir);

  // Assertions
  await expect(page.getByText('test-collection')).toBeVisible();
});
```

## Test Structure and Organization

### Directory Structure

```
e2e-tests/
├── 001-sanity-tests/          # Basic functionality tests
│   ├── 001-home-screen.spec.ts
│   └── 002-create-new-collection-and-new-request.spec.ts
├── 002-feature-tests/         # Specific feature tests
├── 003-integration-tests/     # Complex workflow tests
└── bruno-testbench/           # Test utilities and helpers
```

### Naming Conventions

- **Files**: Use descriptive names with `.spec.ts` extension
- **Tests**: Use clear, descriptive test names
- **Folders**: Use numbered prefixes for ordering

### Test File Template

```typescript
import { test, expect } from '../../playwright';

test.describe('Feature Name', () => {
  test('should perform specific action', async ({ page }) => {
    // Arrange
    // Act
    // Assert
  });

  test('should handle error case', async ({ page }) => {
    // Test error scenarios
  });
});
```

## Available Test Fixtures

The Bruno Playwright setup provides several custom fixtures:

### Core Fixtures

- `page`: Main page for testing
- `context`: Browser context
- `electronApp`: Electron application instance

### Utility Fixtures

- `createTmpDir`: Creates temporary directories for test data
- `newPage`: Creates a new page instance
- `pageWithUserData`: Page with custom user data
- `launchElectronApp`: Launches a new Electron app instance
- `reuseOrLaunchElectronApp`: Reuses existing app or launches new one

### Using Fixtures

```typescript
test('Test with multiple fixtures', async ({ page, createTmpDir, electronApp }) => {
  const testDir = await createTmpDir('test-data');

  // Your test logic here
});
```

## Running Tests

### Basic Commands

```bash
# Run all tests
npm run test:e2e

# Run specific test file
npx playwright test e2e-tests/001-sanity-tests/001-home-screen.spec.ts

# Run tests in a specific folder
npx playwright test e2e-tests/001-sanity-tests/
```

### Advanced Options

```bash
# Run with UI mode (for debugging)
npx playwright test --ui

# Run in headed mode (see browser)
npx playwright test --headed

# Run with specific browser
npx playwright test --project="Bruno Electron App"

# Run with debugging
npx playwright test --debug

# Run with trace recording
npx playwright test --trace on
```

### CI/CD Integration

```bash
# Install browsers for CI
npx playwright install

# Run tests in CI mode
npm run test:e2e
```

## Best Practices

### 1. Use Semantic Selectors

**Preferred:**

```typescript
await page.getByRole('button', { name: 'Create' }).click();
await page.getByLabel('Collection Name').fill('test');
await page.getByText('Success message').toBeVisible();
```

**Avoid:**

```typescript
await page.locator('.btn-primary').click();
await page.locator('#collection-name').fill('test');
```

### 2. Create Isolated Tests

Each test should be independent and not rely on other tests:

```typescript
test('should create collection', async ({ page, createTmpDir }) => {
  const testDir = await createTmpDir('collection-test');

  // Test creates its own data
  await page.getByLabel('Create Collection').click();
  await page.getByLabel('Name').fill('test-collection');
  await page.getByLabel('Location').fill(testDir);

  // Clean up happens automatically via createTmpDir
});
```

### 3. Add Meaningful Assertions

Always verify the expected outcomes:

```typescript
test('should save request successfully', async ({ page }) => {
  // Arrange
  await page.getByLabel('Create Collection').click();

  // Act
  await page.getByRole('button', { name: 'Save' }).click();

  // Assert
  await expect(page.getByText('Request saved successfully')).toBeVisible();
  await expect(page.getByRole('tab', { name: 'GET request' })).toBeVisible();
});
```

### 4. Handle Async Operations

```typescript
test('should wait for network requests', async ({ page }) => {
  // Wait for specific network request
  await page.waitForResponse((response) => response.url().includes('/api/endpoint'));

  // Or wait for element to be stable
  await page.waitForSelector('[data-testid="loading"]', { state: 'hidden' });
});
```

### 5. Use Test Data Management

```typescript
test('should work with test data', async ({ page, createTmpDir }) => {
  const testDir = await createTmpDir('test-data');

  // Create test files
  await fs.writeFile(path.join(testDir, 'test.bru'), testContent);

  // Use in test
  await page.getByLabel('Open Collection').click();
  await page.getByText(testDir).click();
});
```

## Examples

### Example 1: Basic Collection Creation

```typescript
import { test, expect } from '../../playwright';

test('should create a new collection', async ({ page, createTmpDir }) => {
  const testDir = await createTmpDir('new-collection');

  await page.getByLabel('Create Collection').click();
  await page.getByLabel('Name').fill('My Test Collection');
  await page.getByLabel('Location').fill(testDir);
  await page.getByRole('button', { name: 'Create' }).click();

  await expect(page.getByText('My Test Collection')).toBeVisible();
});
```

### Example 2: Request Creation and Execution

```typescript
import { test, expect } from '../../playwright';

test('should create and execute HTTP request', async ({ page, createTmpDir }) => {
  const testDir = await createTmpDir('request-test');

  // Create collection
  await page.getByLabel('Create Collection').click();
  await page.getByLabel('Name').fill('Request Test');
  await page.getByLabel('Location').fill(testDir);
  await page.getByRole('button', { name: 'Create' }).click();

  // Create request
  await page.locator('#create-new-tab').getByRole('img').click();
  await page.getByPlaceholder('Request Name').fill('Test Request');
  await page.locator('#new-request-url .CodeMirror').click();
  await page.locator('textarea').fill('http://localhost:8081/ping');
  await page.getByRole('button', { name: 'Create' }).click();

  // Execute request
  await page.locator('#send-request').getByRole('img').nth(2).click();

  // Verify response
  await expect(page.getByRole('main')).toContainText('200 OK');
});
```

### Example 3: Environment Management

```typescript
import { test, expect } from '../../playwright';

test('should create and use environment variables', async ({ page, createTmpDir }) => {
  const testDir = await createTmpDir('env-test');

  // Setup collection
  await page.getByLabel('Create Collection').click();
  await page.getByLabel('Name').fill('Environment Test');
  await page.getByLabel('Location').fill(testDir);
  await page.getByRole('button', { name: 'Create' }).click();

  // Create environment
  await page.getByRole('button', { name: 'Environments' }).click();
  await page.getByRole('button', { name: 'Add Environment' }).click();
  await page.getByLabel('Environment Name').fill('Development');
  await page.getByRole('button', { name: 'Create' }).click();

  // Add variable
  await page.getByRole('button', { name: 'Add Variable' }).click();
  await page.getByLabel('Variable Name').fill('API_URL');
  await page.getByLabel('Variable Value').fill('http://localhost:3000');
  await page.getByRole('button', { name: 'Save' }).click();

  await expect(page.getByText('API_URL')).toBeVisible();
});
```

## Troubleshooting

### Common Issues

1. **Electron App Not Starting**

   ```bash
   # Ensure dependencies are installed
   npm install

   # Try running the app manually first
   npm run dev:electron
   ```

2. **Tests Timing Out**

   ```typescript
   // Increase timeout for specific test
   test('slow test', async ({ page }) => {
     test.setTimeout(60000); // 60 seconds
     // Test steps
   });
   ```

3. **Element Not Found**

   ```typescript
   // Wait for element to be present
   await page.waitForSelector('[data-testid="element"]');

   // Or use more specific selectors
   await page.getByRole('button', { name: 'Exact Button Text' }).click();
   ```

4. **Flaky Tests**

   ```typescript
   // Use stable selectors
   await page.getByTestId('stable-id').click();

   // Wait for state changes
   await page.waitForLoadState('networkidle');
   ```

### Debug Mode

```bash
# Run with debug mode
npx playwright test --debug

# Run specific test in debug mode
npx playwright test --debug e2e-tests/001-sanity-tests/001-home-screen.spec.ts
```

### Trace Analysis

```bash
# Run with trace recording
npx playwright test --trace on

# View trace in browser
npx playwright show-trace test-results/trace-*.zip
```

## Configuration

The Playwright configuration is in `playwright.config.ts`:

```typescript
export default defineConfig({
  testDir: './e2e-tests',
  fullyParallel: false,
  forbidOnly: !!process.env.CI,
  retries: process.env.CI ? 1 : 0,
  workers: process.env.CI ? undefined : 1,

  projects: [
    {
      name: 'Bruno Electron App'
    }
  ],

  webServer: [
    {
      command: 'npm run dev:web',
      url: 'http://localhost:3000',
      reuseExistingServer: !process.env.CI
    },
    {
      command: 'npm start --workspace=packages/bruno-tests',
      url: 'http://localhost:8081/ping',
      reuseExistingServer: !process.env.CI
    }
  ]
});
```

## Additional Resources

- [Playwright Documentation](https://playwright.dev/)
- [Playwright Test API](https://playwright.dev/docs/api/class-test)
- [Electron Testing with Playwright](https://playwright.dev/docs/api/class-electronapplication)
- [Bruno Project Structure](../readme.md)

---

For questions or issues with testing, please refer to the project's contributing guidelines or create an issue in the repository.


================================================
FILE: docs/publishing/publishing_bn.md
================================================
[English](../../publishing.md)

### ব্রুনোকে নতুন প্যাকেজ ম্যানেজারে প্রকাশ করা

যদিও আমাদের কোড ওপেন সোর্স এবং সবার ব্যবহারের জন্য উপলব্ধ, তবে আমরা নতুন প্যাকেজ ম্যানেজারে প্রকাশনা বিবেচনা করার আগে আমাদের সাথে যোগাযোগ করার জন্য অনুরোধ করি। ব্রুনোর স্রষ্টা হিসাবে, আমি এই প্রকল্পের জন্য `Bruno` ট্রেডমার্ক ধারণ করি এবং এর বিতরণ পরিচালনা করতে চাই। যদি আপনি একটি নতুন প্যাকেজ ম্যানেজারে ব্রুনো দেখতে চান, দয়া করে একটি GitHub ইস্যু তুলুন।

যদিও আমাদের বেশিরভাগ বৈশিষ্ট্য বিনামূল্যে এবং ওপেন সোর্স (যা REST এবং GraphQL API গুলিকে কভার করে), আমরা ওপেন-সোর্স নীতি এবং স্থায়িত্বের মধ্যে একটি সুসঙ্গত ভারসাম্য বজায় রাখার জন্য চেষ্টা করি - https://github.com/usebruno/bruno/discussions/269


================================================
FILE: docs/publishing/publishing_cn.md
================================================
[English](../../publishing.md)

### 将 Bruno 发布到新的包管理器

虽然我们的代码是开源的,每个人都可以使用,但我们恳请您在考虑在新的包管理器上发布之前与我们联系。作为 Bruno 的创建者,我拥有这个项目的 Bruno 商标并希望管理其发行。如果您希望看到它使用新的包管理器,请提交一个 GitHub issue。

虽然我们的大部分功能都是免费与开源的 (涵盖 REST 和 GraphQL APIs) ,但我们努力在开源原则和可持续性之间取得和谐的平衡 - https://github.com/usebruno/bruno/discussions/269


================================================
FILE: docs/publishing/publishing_de.md
================================================
[English](../../publishing.md)

### Veröffentlichung von Bruno über neue Paket-Manager

Obwohl Bruno Open Source und für alle frei zugänglich ist, bitten wir dich Kontakt zu uns aufzunehmen, bevor du Bruno über weitere Paket-Manager veröffentlichst.
Als Schöpfer von Bruno liegen alle Marktrechte von `Bruno` bei mir und ich möchte die volle Kontrolle über alle Verbreitungswege behalten.
Falls Bruno über einen weiteren Paketmanager veröffentlicht werden soll, eröffne bitte ein GitHub-Issue.

Während ein Großteil der Features kostenlos und Open Source ist (beinhaltet REST und GraphQL APIs),
bemühen wir uns um ein harmonisches Gleichgewicht zwischen Open-Source-Prinzipien und Nachhaltigkeit - https://github.com/usebruno/bruno/discussions/269


================================================
FILE: docs/publishing/publishing_fa.md
================================================
[English](../../publishing.md)

### انتشار Bruno در یک پکیج منیجر جدید

اگرچه کد ما متن‌باز است و همه می‌توانند از آن استفاده کنند، لطفاً قبل از انتشار Bruno در مدیر بسته‌های جدید با ما تماس بگیرید. به عنوان سازنده Bruno، علامت تجاری `Bruno` را برای این پروژه دارم و مایلم توزیع آن را مدیریت کنم. اگر دوست دارید Bruno را در یک مدیر بسته جدید ببینید، لطفاً یک issue در گیت‌هاب ثبت کنید.

اگرچه بیشتر قابلیت‌های ما رایگان و متن‌باز هستند (شامل REST و GraphQL Apis)،
ما تلاش می‌کنیم بین اصول متن‌باز و توسعه پایدار تعادل مناسبی برقرار کنیم - https://github.com/usebruno/bruno/discussions/269


================================================
FILE: docs/publishing/publishing_fr.md
================================================
[English](../../publishing.md)

### Publier Bruno dans un nouveau gestionnaire de paquets

Bien que notre code soit open source et disponible pour tout le monde, nous vous remercions de nous contacter avant de considérer sa publication sur un nouveau gestionnaire de paquets. En tant que créateur de Bruno, je détiens la marque `Bruno` pour ce projet et j'aimerais gérer moi-même sa distribution. Si vous voyez Bruno sur un nouveau gestionnaire de paquets, merci de créer une _issue_ GitHub.

Bien que la majorité de nos fonctionnalités soient gratuites et open source (ce qui couvre les APIs REST et GraphQL), nous nous efforçons de trouver un équilibre harmonieux entre les principes de l'open source et la pérennité - https://github.com/usebruno/bruno/discussions/269


================================================
FILE: docs/publishing/publishing_ja.md
================================================
[English](../../publishing.md)

### Bruno を新しいパッケージマネージャに公開する場合の注意

私たちのソースコードはオープンソースで誰でも使用できますが、新しいパッケージマネージャで公開を検討する前に、私たちにご連絡ください。私は Bruno の製作者として、このプロジェクト「Bruno」の商標を保有しており、その配布を管理したいと考えています。もし新しいパッケージマネージャで Bruno を使いたい場合は、GitHub の issue を立ててください。

私たちの機能の大部分が無料でオープンソース(REST や GraphQL の API も含む)ですが、
私たちはオープンソースの原則と長期的な維持の間でよいバランスをとれるように努力しています- https://github.com/usebruno/bruno/discussions/269


================================================
FILE: docs/publishing/publishing_nl.md
================================================
[English](../../publishing.md)

### Bruno publiceren naar een nieuwe pakketbeheerder

Hoewel onze code open source is en beschikbaar voor iedereen, verzoeken we je vriendelijk om contact met ons op te nemen voordat je publicatie overweegt op nieuwe pakketbeheerders. Als de maker van Bruno houd ik het handelsmerk `Bruno` voor dit project en wil ik het distributieproces beheren. Als je Bruno op een nieuwe pakketbeheerder wilt zien, dien dan een GitHub-issue in.

Hoewel de meerderheid van onze functies gratis en open source zijn (die REST en GraphQL API's dekken), streven we ernaar een harmonieuze balans te vinden tussen open-source principes en duurzaamheid - https://github.com/usebruno/bruno/discussions/269

================================================
FILE: docs/publishing/publishing_pl.md
================================================
[English](../../publishing.md)

### Publikowanie Bruno w nowym menedżerze pakietów

Chociaż nasz kod jest otwartoźródłowy i dostępny dla każdego do użytku, uprzejmie prosimy o kontakt z nami przed rozważeniem publikacji w nowych menedżerach pakietów. Jako twórca Bruno, posiadam znak towarowy `Bruno` dla tego projektu i chciałbym zarządzać jego dystrybucją. Jeśli chcesz zobaczyć Bruno w nowym menedżerze pakietów, proszę zgłoś problem na GitHubie.

Chociaż większość naszych funkcji jest darmowa i otwartoźródłowa (co obejmuje REST i GraphQL Apis),
staramy się osiągnąć harmonijny balans między zasadami open-source a zrównoważonym rozwojem - https://github.com/usebruno/bruno/discussions/269


================================================
FILE: docs/publishing/publishing_pt_br.md
================================================
[English](../../publishing.md)

### Publicando Bruno em um novo gerenciador de pacotes

Embora nosso código seja de código aberto e esteja disponível para todos usarem, pedimos gentilmente que entre em contato conosco antes de considerar a publicação em novos gerenciadores de pacotes. Como o criador da ferramenta, mantenho a marca registrada `Bruno` para este projeto e gostaria de gerenciar sua distribuição. Se deseja ver o Bruno em um novo gerenciador de pacotes, por favor, solicite através de uma issue no GitHub.

Embora a maioria de nossas funcionalidades seja gratuita e de código aberto (o que abrange API's REST e GraphQL), buscamos alcançar um equilíbrio harmonioso entre os princípios de código aberto e sustentabilidade. - https://github.com/usebruno/bruno/discussions/269


================================================
FILE: docs/publishing/publishing_ro.md
================================================
[English](../../publishing.md)

### Publicarea lui Bruno la un gestionar de pachete nou

Deși codul nostru este cu sursă deschisă și disponibil pentru utilizare pentru toată lumea, vă rugăm să ne contactați înainte de a considera publicarea pe gestionari de pachete noi. În calitate de creator al lui Bruno, dețin marca comercială `Bruno` pentru acest proiect și aș dori să gestionez distribuția acestuia. Dacă doriți să-l vedeți pe Bruno pe un gestionar de pachete nou, vă rugăm să creați un issue pe GitHub.

În timp ce majoritatea funcțiilor noastre sunt gratuite și cu sursă deschisă (ceea ce acoperă API-uri REST și GraphQL),
ne străduim să găsim un echilibru armonios între principiile de sursă deschisă și sustenabilitate - https://github.com/usebruno/bruno/discussions/269


================================================
FILE: docs/publishing/publishing_tr.md
================================================
[English](../../publishing.md)

### Bruno'yu yeni bir paket yöneticisine yayınlama

Kodumuz açık kaynak kodlu ve herkesin kullanımına açık olsa da, yeni paket yöneticilerinde yayınlamayı düşünmeden önce bize ulaşmanızı rica ediyoruz. Bruno'nun yaratıcısı olarak, bu proje için `Bruno` ticari markasına sahibim ve dağıtımını yönetmek istiyorum. Bruno'yu yeni bir paket yöneticisinde görmek istiyorsanız, lütfen bir GitHub sorunu oluşturun.

Özelliklerimizin çoğu ücretsiz ve açık kaynak olsa da (REST ve GraphQL Apis'i kapsar),
açık kaynak ilkeleri ile sürdürülebilirlik arasında uyumlu bir denge kurmaya çalışıyoruz - https://github.com/usebruno/bruno/discussions/269


================================================
FILE: docs/publishing/publishing_zhtw.md
================================================
[English](../../publishing.md)

### 將 Bruno 發佈到新的套件管理器

雖然我們的程式碼是開源的並且可供所有人使用,但我們懇請您在考慮在新的套件管理器上發布之前與我們聯繫。作為 Bruno 的創建者,我擁有這個專案的 Bruno 商標並希望管理其發行。如果您希望看到 Bruno 使用新的套件管理器,請提出一個 GitHub issue。

雖然我們的大部分功能都是免費和開源(涵蓋 REST 和 GraphQL APIs),但我們努力在開源的原則和永續性之間,取得和諧的平衡 - https://github.com/usebruno/bruno/discussions/269


================================================
FILE: docs/readme/readme_ar.md
================================================
<br />
<img src="../../assets/images/logo-transparent.png" width="80"/>

### برونو - بيئة تطوير مفتوحة المصدر لاستكشاف واختبار واجهات برمجة التطبيقات (APIs).

[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md)
| [Українська](./readme_ua.md)
| [Русский](./readme_ru.md)
| [Türkçe](./readme_tr.md)
| [Deutsch](./readme_de.md)
| [Français](./readme_fr.md)
| [Português (BR)](./readme_pt_br.md)
| [한국어](./readme_kr.md)
| [বাংলা](./readme_bn.md)
| [Español](./readme_es.md)
| [Italiano](./readme_it.md)
| [Română](./readme_ro.md)
| [Polski](./readme_pl.md)
| [简体中文](./readme_cn.md)
| [正體中文](./readme_zhtw.md)
| **العربية**
| [日本語](./readme_ja.md)
| [ქართული](./readme_ka.md)

برونو هو عميل API جديد ومبتكر، يهدف إلى ثورة الحالة الحالية التي يمثلها برنامج Postman وأدوات مماثلة هناك.

يقوم برونو بتخزين مجموعاتك مباشرة في مجلد على نظام الملفات الخاص بك. نحن نستخدم لغة ترميز النص العادية، Bru، لحفظ معلومات حول طلبات واجهة برمجة التطبيقات (API).

يمكنك استخدام Git أو أي نظام تحكم في الإصدار الذي تفضله للتعاون على مجموعات API الخاصة بك.

برونو هو خاص بالاستخدام دون اتصال بالإنترنت. ليس هناك خطط لإضافة مزامنة السحابة إلى برونو أبدًا. نحن نقدر خصوصية بياناتك ونعتقد أنه يجب أن تظل على جهازك. اقرأ رؤيتنا على المدى الطويل [هنا](https://github.com/usebruno/bruno/discussions/269)

📢 شاهد حديثنا الأخير في مؤتمر India FOSS 3.0 [هنا](https://www.youtube.com/watch?v=7bSMFpbcPiY)

![bruno](/assets/images/landing-2.png) <br /><br />


### التثبيت

برونو متاح كتنزيل ثنائي [على موقعنا على الويب](https://www.usebruno.com/downloads) لأنظمة التشغيل Mac و Windows و Linux.

يمكنك أيضًا تثبيت برونو عبر مديري الحزم مثل Homebrew و Chocolatey و Scoop و Snap و Flatpak و Apt.

```sh
# على نظام Mac عبر Homebrew
brew install bruno

# على نظام Windows عبر Chocolatey
choco install bruno

# على نظام Windows عبر Scoop
scoop bucket add extras
scoop install bruno

# على نظام Linux عبر Snap
snap install bruno

# على نظام Linux عبر Flatpak
flatpak install com.usebruno.Bruno

# على نظام Linux عبر Apt
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
  | sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno
```

### التشغيل عبر منصات متعددة 🖥️

![bruno](/assets/images/run-anywhere.png) <br /><br />

### التعاون عبر Git 👩‍💻🧑‍💻

أو أي نظام تحكم في الإصدار الذي تفضله

![bruno](/assets/images/version-control.png) <br /><br />

### الروابط المهمة 📌

- [رؤيتنا على المدى الطويل](https://github.com/usebruno/bruno/discussions/269)
- [خارطة الطريق](https://github.com/usebruno/bruno/discussions/384)
- [التوثيق](https://docs.usebruno.com)
- [Stack Overflow](https://stackoverflow.com/questions/tagged/bruno)
- [الموقع الإلكتروني](https://www.usebruno.com)
- [التسعير](https://www.usebruno.com/pricing)
- [التنزيل](https://www.usebruno.com/downloads)
- [Github Sponsors](https://github.com/sponsors/helloanoop).

### عروض 🎥

- [الشهادات](https://github.com/usebruno/bruno/discussions/343)
- [مركز المعرفة](https://github.com/usebruno/bruno/discussions/386)
- [Scriptmania](https://github.com/usebruno/bruno/discussions/385)

### الدعم ❤️

إذا كنت تحب برونو وترغب في دعم عملنا مفتوح المصدر، فكر في رعايتنا عبر [Github Sponsors](https://github.com/sponsors/helloanoop).

### شارك الشهادات 📣

إذا كان برونو قد ساعدك في العمل وفرقك، فلا تنسى مشاركة [شهاداتك في مناقشتنا على GitHub](https://github.com/usebruno/bruno/discussions/343)

### نشر إلى مديري الحزم الجديدة

يرجى الرجوع [هنا](../../publishing.md) لمزيد من المعلومات.

### تواصل معنا 🌐

[𝕏 (تويتر)](https://twitter.com/use_bruno) <br />
[الموقع الإلكتروني](https://www.usebruno.com) <br />
[ديسكورد](https://discord.com/invite/KgcZUncpjq) <br />
[لينكدإن](https://www.linkedin.com/company/usebruno)

### علامة تجارية

**الاسم**

`برونو` هو علامة تجارية تمتلكها [أنوب إم دي](https://www.helloanoop.com/)

**الشعار**

الشعار من [OpenMoji](https://openmoji.org/library/emoji-1F436/). الترخيص: CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)

### المساهمة 👩‍💻🧑‍💻

يسعدني أنك تتطلع لتحسين برونو. يرجى الاطلاع على [دليل المساهمة](../../contributing.md)

حتى إذا لم تكن قادرًا على التساهم بشكل مباشر من خلال الشيفرة، فلا تتردد في الإبلاغ عن الأخطاء وطلب الميزات التي يجب تنفيذها لحل حالتك.

### الكتّاب

<div align="center">
    <a href="https://github.com/usebruno/bruno/graphs/contributors">
        <img src="https://contrib.rocks/image?repo=usebruno/bruno" />
    </a>
</div>

### الرخصة 📄

[MIT](../../license.md)


================================================
FILE: docs/readme/readme_bn.md
================================================
<br />
<img src="../../assets/images/logo-transparent.png" width="80"/>

### ব্রুনো - API অন্বেষণ এবং পরীক্ষা করার জন্য ওপেনসোর্স IDE।

[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md)
| [Українська](./readme_ua.md)
| [Русский](./readme_ru.md)
| [Türkçe](./readme_tr.md)
| [Deutsch](./readme_de.md)
| [Français](./readme_fr.md)
| [Português (BR)](./readme_pt_br.md)
| [한국어](./readme_kr.md)
| **বাংলা**
| [Español](./readme_es.md)
| [Italiano](./readme_it.md)
| [Română](./readme_ro.md)
| [Polski](./readme_pl.md)
| [简体中文](./readme_cn.md)
| [正體中文](./readme_zhtw.md)
| [العربية](./readme_ar.md)
| [日本語](./readme_ja.md)
| [ქართული](./readme_ka.md)

ব্রুনো হল একটি নতুন এবং উদ্ভাবনী API ক্লায়েন্ট, যার লক্ষ্য পোস্টম্যান এবং অনুরূপ সরঞ্জাম দ্বারা প্রতিনিধিত্ব করা স্থিতাবস্থায় বিপ্লব ঘটানো।

ব্রুনো আপনার সংগ্রহগুলি সরাসরি আপনার ফাইল সিস্টেমের একটি ফোল্ডারে সঞ্চয় করে। আমরা API অনুরোধ সম্পর্কে তথ্য সংরক্ষণ করতে একটি প্লেইন টেক্সট মার্কআপ ভাষা, ব্রু ব্যবহার করি।

আপনি আপনার API সংগ্রহে সহযোগিতা করতে গিট বা আপনার পছন্দের যেকোনো সংস্করণ নিয়ন্ত্রণ ব্যবহার করতে পারেন।

ব্রুনো শুধুমাত্র অফলাইন। ব্রুনোতে ক্লাউড-সিঙ্ক যোগ করার কোন পরিকল্পনা নেই, কখনও। আমরা আপনার ডেটা গোপনীয়তার মূল্য দিই এবং বিশ্বাস করি এটি আপনার ডিভাইসে থাকা উচিত। আমাদের দীর্ঘমেয়াদী দৃষ্টি পড়ুন। [এখানে ](https://github.com/usebruno/bruno/discussions/269)

📢 ইন্ডিয়া FOSS 3.0 সম্মেলনে আমাদের সাম্প্রতিক আলোচনা দেখুন [এখানে](https://www.youtube.com/watch?v=7bSMFpbcPiY)

![bruno](/assets/images/landing-2.png) <br /><br />

### স্থাপন

ব্রুনো বাইনারি ডাউনলোড হিসাবে উপলব্ধ [আমাদের ওয়েবসাইটে](https://www.usebruno.com/downloads) ম্যাক, উইন্ডোজ এবং লিনাক্সের জন্য।

আপনি Homebrew, Chocolatey, Snap এবং Apt এর মত প্যাকেজ ম্যানেজারদের মাধ্যমে ব্রুনো ইনস্টল করতে পারেন।

```sh
# Homebrew এর মাধ্যমে Mac-এ
brew install bruno

# চকোলেটির মাধ্যমে উইন্ডোজে
choco install bruno

# স্ন্যাপ এর মাধ্যমে লিনাক্সে
snap install bruno

# Apt এর মাধ্যমে লিনাক্সে
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
  | sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno
```

### একাধিক প্ল্যাটফর্মে চালান 🖥️

![bruno](/assets/images/run-anywhere.png) <br /><br />

### Git এর মাধ্যমে সহযোগিতা করুন 👩‍💻🧑‍💻

অথবা আপনার পছন্দের যেকোনো সংস্করণ নিয়ন্ত্রণ ব্যবস্থা

![bruno](/assets/images/version-control.png) <br /><br />

### গুরুত্বপূর্ণ লিংক 📌

- [আমাদের দীর্ঘমেয়াদী দৃষ্টি](https://github.com/usebruno/bruno/discussions/269)
- [রোডম্যাপ](https://github.com/usebruno/bruno/discussions/384)
- [ডকুমেন্টেশন](https://docs.usebruno.com)
- [ওয়েবসাইট](https://www.usebruno.com)
- [মূল্য](https://www.usebruno.com/pricing)
- [ডাউনলোড করুন](https://www.usebruno.com/downloads)

### শোকেস 🎥

- [প্রশংসাপত্র](https://github.com/usebruno/bruno/discussions/343)
- [নলেজ হাব](https://github.com/usebruno/bruno/discussions/386)
- [স্ক্রিপ্টম্যানিয়া](https://github.com/usebruno/bruno/discussions/385)

### সমর্থন ❤️

উফ ! আপনি যদি প্রকল্পটি পছন্দ করেন তবে ⭐ বোতামটি টিপুন !!

### প্রশংসাপত্র শেয়ার করুন 📣

যদি ব্রুনো আপনাকে কর্মক্ষেত্রে এবং আপনার দলগুলিতে সাহায্য করে থাকে, অনুগ্রহ করে আপনার [আমাদের গিটহাব আলোচনায় প্রশংসাপত্রগুলি](https://github.com/usebruno/bruno/discussions/343) শেয়ার করতে ভুলবেন না

### নতুন প্যাকেজ পরিচালকদের কাছে প্রকাশ করা হচ্ছে

আরও তথ্যের জন্য অনুগ্রহ করে [এখানে](../publishing/publishing_bn.md) দেখুন।

### অবদান 👩‍💻🧑‍💻

আমি খুশি যে আপনি ব্রুনোর উন্নতি করতে চাইছেন। অনুগ্রহ করে [অবদানকারী নির্দেশিকা](../contributing/contributing_bn.md) দেখুন

আপনি কোডের মাধ্যমে অবদান রাখতে না পারলেও, অনুগ্রহ করে বাগ এবং বৈশিষ্ট্যের অনুরোধ ফাইল করতে দ্বিধা করবেন না যা আপনার ব্যবহারের ক্ষেত্রে সমাধান করার জন্য প্রয়োগ করা প্রয়োজন।

### লেখক

<div align="center">
    <a href="https://github.com/usebruno/bruno/graphs/contributors">
        <img src="https://contrib.rocks/image?repo=usebruno/bruno" />
    </a>
</div>

### সাথে থাকুন 🌐

[𝕏 (টুইটার)](https://twitter.com/use_bruno) <br />
[ওয়েবসাইট](https://www.usebruno.com) <br />
[ডিসকর্ড](https://discord.com/invite/KgcZUncpjq) <br />
[লিঙ্কডইন](https://www.linkedin.com/company/usebruno)

### ট্রেডমার্ক

**নাম**

`Bruno` হল একটি ট্রেডমার্ক [Anoop M D](https://www.helloanoop.com/)

**লোগো**

লোগোটি [OpenMoji](https://openmoji.org/library/emoji-1F436/) থেকে নেওয়া হয়েছে। লাইসেন্স: CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)

### লাইসেন্স 📄

[MIT](../../license.md)


================================================
FILE: docs/readme/readme_cn.md
================================================
<br />
<img src="../../assets/images/logo-transparent.png" width="80"/>

### Bruno - 开源 IDE,用于探索和测试 API。

[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![网站](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![下载](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md)
| [Українська](./readme_ua.md)
| [Русский](./readme_ru.md)
| [Türkçe](./readme_tr.md)
| [Deutsch](./readme_de.md)
| [Français](./readme_fr.md)
| [Português (BR)](./readme_pt_br.md)
| [한국어](./readme_kr.md)
| [বাংলা](./readme_bn.md)
| [Español](./readme_es.md)
| [Italiano](./readme_it.md)
| [Română](./readme_ro.md)
| [Polski](./readme_pl.md)
| **简体中文**
| [正體中文](./readme_zhtw.md)
| [العربية](./readme_ar.md)
| [日本語](./readme_ja.md)
| [ქართული](./readme_ka.md)

Bruno 是一款全新且创新的 API 客户端,旨在颠覆 Postman 和其他类似工具。

Bruno 直接在您的电脑文件夹中存储您的 API 信息。我们使用纯文本标记语言 Bru 来保存有关 API 的信息。

您可以使用 Git 或您选择的任何版本控制系统来对您的 API 信息进行版本控制和协作。

Bruno 仅限离线使用。我们计划永不向 Bruno 添加云同步功能。我们重视您的数据隐私,并认为它应该留在您的设备上。阅读我们的长期愿景 [点击查看](https://github.com/usebruno/bruno/discussions/269)

[下载 Bruno](https://www.usebruno.com/downloads)

📢 观看我们在印度 FOSS 3.0 会议上的最新演讲 [点击查看](https://www.youtube.com/watch?v=7bSMFpbcPiY)

![bruno](../../assets/images/landing-2.png) <br /><br />

## 商业版本 ✨

我们的大多数功能都是免费且开源的。
我们致力于在 [开源与可持续性发展](https://github.com/usebruno/bruno/discussions/269) 之间取得和谐的平衡

欢迎使用我们的 [付费版本](https://www.usebruno.com/pricing) ,看看附加的功能是否对您或团队有所帮助! <br/>

## 目录
- [安装](#安装)
- [特性](#特性)
    - [跨平台使用 🖥️](#跨平台使用-)
    - [通过Git协作 👩‍💻🧑‍💻](#通过git协作-)
- [重要链接 📌](#重要链接-)
- [展示 🎥](#展示-)
- [分享评价 📣](#分享评价-)
- [发布到新的包管理器](#发布到新的包管理器)
- [联系方式 🌐](#联系方式-)
- [商标](#商标)
- [贡献 👩‍💻🧑‍💻](#贡献-)
- [作者](#作者)
- [许可证 📄](#许可证-)

## 安装

Bruno 可以在我们的 [网站上下载](https://www.usebruno.com/downloads) 适用于Mac、Windows 和 Linux 的可执行文件。

您也可以通过包管理器如 Homebrew、Chocolatey、Scoop、Snap 和 Apt 安装 Bruno。

```sh
# 在 Mac 电脑上用 Homebrew 安装
brew install bruno

# 在 Windows 上用 Chocolatey 安装
choco install bruno

# 在 Windows 上用 Scoop 安装
scoop bucket add extras
scoop install bruno

# 在 Windows 上用 winget 安装
winget install Bruno.Bruno

# 在 Linux 上用 Snap 安装
snap install bruno

# 在 Linux 上用 Flatpak 安装
flatpak install com.usebruno.Bruno

# 在 Linux 上用 Apt 安装
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
  | sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno
```

## 特性

### 跨平台使用 🖥️

![bruno](../../assets/images/run-anywhere.png) <br /><br />

### 通过Git协作 👩‍💻🧑‍💻

或者任何您选择的版本控制系统

![bruno](../../assets/images/version-control.png) <br /><br />

## 重要链接 📌

- [我们的愿景](https://github.com/usebruno/bruno/discussions/269)
- [路线图](https://www.usebruno.com/roadmap)
- [文档](https://docs.usebruno.com)
- [Stack Overflow](https://stackoverflow.com/questions/tagged/bruno)
- [网站](https://www.usebruno.com)
- [价格](https://www.usebruno.com/pricing)
- [下载](https://www.usebruno.com/downloads)

## 展示 🎥

- [Testimonials](https://github.com/usebruno/bruno/discussions/343)
- [Knowledge Hub](https://github.com/usebruno/bruno/discussions/386)
- [Scriptmania](https://github.com/usebruno/bruno/discussions/385)

## 分享评价 📣

如果 Bruno 在您的工作和团队中帮助了您,请不要忘记在我们的 GitHub 讨论上分享您的 [评价](https://github.com/usebruno/bruno/discussions/343)

## 发布到新的包管理器

如需了解更多信息,请参见 [此处](../publishing/publishing_cn.md) 。

## 联系方式 🌐

[𝕏 (Twitter)](https://twitter.com/use_bruno) <br />
[Website](https://www.usebruno.com) <br />
[Discord](https://discord.com/invite/KgcZUncpjq) <br />
[LinkedIn](https://www.linkedin.com/company/usebruno)

## 商标

**名称**

`Bruno` 是由 [Anoop M D](https://www.helloanoop.com/) 持有的商标。

**Logo**

Logo 源自 [OpenMoji](https://openmoji.org/library/emoji-1F436/). License: CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)

## 贡献 👩‍💻🧑‍💻

很高兴您希望改进 bruno。请查看 [贡献指南](../contributing/contributing_cn.md)。

即使您无法通过代码做出贡献,我们仍然欢迎您提出 BUG 和新的功能需求。

## 作者

<div align="center">
    <a href="https://github.com/usebruno/bruno/graphs/contributors">
        <img src="https://contrib.rocks/image?repo=usebruno/bruno" />
    </a>
</div>

## 许可证 📄

[MIT](../../license.md)


================================================
FILE: docs/readme/readme_de.md
================================================
<br />
<img src="/assets/images/logo-transparent.png" width="80"/>

### Bruno - Opensource IDE zum Erkunden und Testen von APIs.

[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md)
| [Українська](./readme_ua.md)
| [Русский](./readme_ru.md)
| [Türkçe](./readme_tr.md)
| **Deutsch**
| [Français](./readme_fr.md)
| [Português (BR)](./readme_pt_br.md)
| [한국어](./readme_kr.md)
| [বাংলা](./readme_bn.md)
| [Español](./readme_es.md)
| [Italiano](./readme_it.md)
| [Română](./readme_ro.md)
| [Polski](./readme_pl.md)
| [简体中文](./readme_cn.md)
| [正體中文](./readme_zhtw.md)
| [العربية](./readme_ar.md)
| [日本語](./readme_ja.md)
| [ქართული](./readme_ka.md)

Bruno ist ein neuer und innovativer API-Client, der den Status Quo von Postman und ähnlichen Tools revolutionieren soll.

Bruno speichert deine Sammlungen direkt in einem Ordner in deinem Dateisystem. Wir verwenden eine einfache Textauszeichnungssprache - Bru - um Informationen über API-Anfragen zu speichern.

Du kannst Git oder eine andere Versionskontrolle deiner Wahl verwenden, um gemeinsam mit anderen an deinen API-Sammlungen zu arbeiten.

Bruno ist ein reines Offline-Tool. Es gibt keine Pläne, Bruno um eine Cloud-Synchronisation zu erweitern. Wir schätzen den Schutz deiner Daten und glauben, dass sie auf deinem Gerät bleiben sollten. Lies unsere Langzeit-Vision [hier](https://github.com/usebruno/bruno/discussions/269).

[Download Bruno](https://www.usebruno.com/downloads)

📢 Sieh Dir unseren Vortrag auf der India FOSS 3.0 Conference [hier](https://www.youtube.com/watch?v=7bSMFpbcPiY) an.

![bruno](/assets/images/landing-2.png) <br /><br />

### Installation

Bruno ist als Download [auf unserer Website](https://www.usebruno.com/downloads) für Mac, Windows und Linux verfügbar.

Du kannst Bruno auch über Paketmanager wie Homebrew, Chocolatey, Scoop, Snap, Flatpak und Apt installieren.

```sh
# Auf Mac via Homebrew
brew install bruno

# Auf Windows via Chocolatey
choco install bruno

# Auf Windows via Scoop
scoop bucket add extras
scoop install bruno

# Auf Windows via winget
winget install Bruno.Bruno

# Auf Linux via Snap
snap install bruno

# Auf Linux via Flatpak
flatpak install com.usebruno.Bruno

# Auf Linux via Apt
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
  | sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno
```

### Einsatz auf verschiedensten Plattformen 🖥️

![bruno](/assets/images/run-anywhere.png) <br /><br />

### Zusammenarbeit mit Git 👩‍💻🧑‍💻

Oder einer Versionskontrolle deiner Wahl

![bruno](/assets/images/version-control.png) <br /><br />

### Sponsoren

#### Gold Sponsoren

<img src="/assets/images/sponsors/samagata.png" width="150"/>

#### Silber Sponsoren

<img src="/assets/images/sponsors/commit-company.png" width="70"/>

### Wichtige Links 📌

- [Unsere Langzeit-Vision](https://github.com/usebruno/bruno/discussions/269)
- [Roadmap](https://github.com/usebruno/bruno/discussions/384)
- [Dokumentation](https://docs.usebruno.com)
- [Webseite](https://www.usebruno.com)
- [Preise](https://www.usebruno.com/pricing)
- [Download](https://www.usebruno.com/downloads)

### Showcase 🎥

- [Erfahrungsberichte](https://github.com/usebruno/bruno/discussions/343)
- [Wissenswertes](https://github.com/usebruno/bruno/discussions/386)
- [Scriptmania](https://github.com/usebruno/bruno/discussions/385)

### Unterstützung ❤️

Wuff! Wenn du dieses Projekt magst, klick auf den ⭐ Button !!

### Teile Erfahrungsberichte 📣

Wenn Bruno dir und in deinem Team bei der Arbeit geholfen hat, vergiss bitte nicht, deine [Erfahrungsberichte in unserer GitHub-Diskussion](https://github.com/usebruno/bruno/discussions/343) zu teilen.

### Bereitstellung in neuen Paket-Managern

Mehr Informationen findest du [hier](../publishing/publishing_de.md).

### Mitmachen 👩‍💻🧑‍💻

Ich freue mich, dass du Bruno verbessern willst. Bitte schau dir den [Leitfaden zum Mitmachen](../contributing/contributing_de.md) an.

Auch wenn du nicht in der Lage bist, einen Beitrag in Form von Code zu leisten, zögere bitte nicht, uns Fehler und Funktionswünsche mitzuteilen, die implementiert werden müssen, um deinen Anwendungsfall zu unterstützen.

### Autoren

<div align="center">
    <a href="https://github.com/usebruno/bruno/graphs/contributors">
        <img src="https://contrib.rocks/image?repo=usebruno/bruno" />
    </a>
</div>

### In Verbindung bleiben 🌐

[Twitter](https://twitter.com/use_bruno) <br />
[Webseite](https://www.usebruno.com) <br />
[Discord](https://discord.com/invite/KgcZUncpjq) <br />
[LinkedIn](https://www.linkedin.com/company/usebruno)

### Markenzeichen

**Name**

`Bruno` ist ein Markenzeichen von [Anoop M D](https://www.helloanoop.com/)

**Logo**

Das Logo stammt von [OpenMoji](https://openmoji.org/library/emoji-1F436/). Lizenz: CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)

### Lizenz 📄

[MIT](../../license.md)


================================================
FILE: docs/readme/readme_es.md
================================================
<br />
<img src="../../assets/images/logo-transparent.png" width="80"/>

### Bruno - IDE de código abierto para explorar y probar APIs.

[![Versión en Github](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![Actividad de Commits](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![Sitio Web](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![Descargas](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md)
| [Українська](./readme_ua.md)
| [Русский](./readme_ru.md)
| [Türkçe](./readme_tr.md)
| [Deutsch](./readme_de.md)
| [Français](./readme_fr.md)
| [Português (BR)](./readme_pt_br.md)
| [한국어](./readme_kr.md)
| [বাংলা](./readme_bn.md)
| **Español**
| [Italiano](./readme_it.md)
| [Română](./readme_ro.md)
| [Polski](./readme_pl.md)
| [简体中文](./readme_cn.md)
| [正體中文](./readme_zhtw.md)
| [العربية](./readme_ar.md)
| [日本語](./readme_ja.md)
| [ქართული](./readme_ka.md)

Bruno es un cliente de APIs nuevo e innovador, creado con el objetivo de revolucionar el panorama actual representado por Postman y otras herramientas similares.

Bruno almacena tus colecciones directamente en una carpeta de tu sistema de archivos. Usamos un lenguaje de marcado de texto plano, llamado Bru, para guardar información sobre las peticiones a tus APIs.

Puedes usar git o cualquier otro sistema de control de versiones que prefieras para colaborar en tus colecciones.

Bruno funciona sin conexión a internet. No tenemos intenciones de añadir sincronización en la nube a Bruno, en ningún momento. Valoramos tu privacidad y creemos que tus datos deben permanecer en tu dispositivo. Puedes leer nuestra visión a largo plazo [aquí](https://github.com/usebruno/bruno/discussions/269).

[Descarga Bruno](https://www.usebruno.com/downloads).

📢 Mira nuestra charla en la conferencia India FOSS 3.0 [aquí](https://www.youtube.com/watch?v=7bSMFpbcPiY).

![bruno](/assets/images/landing-2.png) <br /><br />

### Instalación

Bruno está disponible para su descarga [en nuestro sitio web](https://www.usebruno.com/downloads) para Mac, Windows y Linux.

También puedes instalar Bruno mediante package managers como Homebrew, Chocolatey, Scoop, Flatpak y Apt.

```sh
# En Mac con Homebrew
brew install bruno

# En Windows con Chocolatey
choco install bruno

# En Windows con Scoop
scoop bucket add extras
scoop install bruno

# En Linux con Snap
snap install bruno

# En Linux con Flatpak
flatpak install com.usebruno.Bruno

# En Linux con Apt
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
  | sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno
```

### Ejecútalo en múltiples plataformas 🖥️

![bruno](/assets/images/run-anywhere.png) <br /><br />

### Colabora vía Git 👩‍💻🧑‍💻

O cualquier otro sistema de control de versiones que prefieras

![bruno](/assets/images/version-control.png) <br /><br />

### Enlaces importantes 📌

- [Nuestra Visión a Largo Plazo](https://github.com/usebruno/bruno/discussions/269)
- [Hoja de Ruta](https://github.com/usebruno/bruno/discussions/384)
- [Documentación](https://docs.usebruno.com)
- [Sitio Web](https://www.usebruno.com)
- [Precios](https://www.usebruno.com/pricing)
- [Descargas](https://www.usebruno.com/downloads)

### Casos de uso 🎥

- [Testimonios](https://github.com/usebruno/bruno/discussions/343)
- [Centro de Conocimiento](https://github.com/usebruno/bruno/discussions/386)
- [Scripts de la Comunidad](https://github.com/usebruno/bruno/discussions/385)

### Apoya el proyecto ❤️

¡Guau! Si te gusta el proyecto, ¡dale al botón de ⭐!

### Comparte tus testimonios 📣

Si Bruno te ha ayudado en tu trabajo y con tus equipos, por favor, no olvides compartir tus testimonios en [nuestras discusiones de GitHub](https://github.com/usebruno/bruno/discussions/343)

### Publicar en nuevos gestores de paquetes

Por favor, consulta [aquí](../../publishing.md) para más información.

### Contribuye 👩‍💻🧑‍💻

Estamos encantados de que quieras ayudar a mejorar Bruno. Por favor, consulta la [guía de contribución](../contributing/contributing_es.md) para más información.

Incluso si no puedes contribuir con código, no dudes en reportar errores y solicitar nuevas funcionalidades que necesites para resolver tu caso de uso.

### Colaboradores

<div align="center">
    <a href="https://github.com/usebruno/bruno/graphs/contributors">
        <img src="https://contrib.rocks/image?repo=usebruno/bruno" />
    </a>
</div>

### Mantente en contacto 🌐

[X](https://twitter.com/use_bruno) <br />
[Sitio Web](https://www.usebruno.com) <br />
[Discord](https://discord.com/invite/KgcZUncpjq) <br />
[LinkedIn](https://www.linkedin.com/company/usebruno)

### Marca

**Nombre**

`Bruno` es una marca propiedad de [Anoop M D](https://www.helloanoop.com/).

**Logo**

El logo fue obtenido de [OpenMoji](https://openmoji.org/library/emoji-1F436/). Licencia: CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)

### Licencia 📄

[MIT](../../license.md)


================================================
FILE: docs/readme/readme_fa.md
================================================
<br />
<img src="../../assets/images/logo-transparent.png" width="80"/>

### برونو یا Bruno - محیط توسعه متن باز برای تست و توسعه API ها

[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md)
| [Українська](./readme_ua.md)
| [Русский](./readme_ru.md)
| [Türkçe](./readme_tr.md)
| [Deutsch](./readme_de.md)
| [Français](./readme_fr.md)
| [Português (BR)](./readme_pt_br.md)
| [한국어](./readme_kr.md)
| [বাংলা](./readme_bn.md)
| [Español](./readme_es.md)
| **فارسی**
| [Română](./readme_ro.md)
| [Polski](./readme_pl.md)
| [简体中文](./readme_cn.md)
| [正體中文](./readme_zhtw.md)
| [العربية](./readme_ar.md)
| [日本語](./readme_ja.md)
| [ქართული](./readme_ka.md)

برونو یک کلاینت API جدید و نوآورانه است که هدفش تغییر وضعیت فعلی ابزارهایی مانند Postman و سایر ابزارهای مشابه است.

برونو مجموعه‌های شما را مستقیماً در یک پوشه روی فایل‌سیستم شما ذخیره می‌کند. ما از یک زبان نشانه‌گذاری ساده به نام Bru برای ذخیره اطلاعات درخواست‌های API استفاده می‌کنیم.

شما می‌توانید برای همکاری روی مجموعه‌های API خود، از Git یا هر سیستم کنترل نسخه دلخواهتان استفاده کنید.

برونو فقط به صورت آفلاین کار می‌کند. هیچ برنامه‌ای برای اضافه کردن همگام‌سازی ابری به برونو در آینده وجود ندارد. ما به حریم خصوصی داده‌های شما اهمیت می‌دهیم و معتقدیم که باید روی دستگاه خودتان باقی بمانند. می‌توانید چشم‌انداز بلندمدت ما را مطالعه کنید. [اینجا (به انگلیسی)](https://github.com/usebruno/bruno/discussions/269)

📢 جدیدترین ارائه ما را در کنفرانس India FOSS 3.0 تماشا کنید.
[اینجا](https://www.youtube.com/watch?v=7bSMFpbcPiY)

![bruno](/assets/images/landing-2.png) <br /><br />

### نصب

برونو به صورت یک فایل باینری برای دانلود در دسترس است. [بر روی وبسایت ما](https://www.usebruno.com/downloads) برای مک لینکوس و ویندوز.

همچنین می‌توانید برونو را از طریق مدیر بسته‌هایی مانند Homebrew، Chocolatey، Snap و Apt نصب کنید.

```sh
# بر روی مک از طریق brew
brew install bruno

# بر روی ویندوز از طریق Chocolatey
choco install bruno

# بر روی لینوکس از طریق Snap
snap install bruno

# بر روی لینوکس از طریق Apt
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
  | sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno
```

### روی پلتفرم‌های مختلف کار می‌کند 🖥️

![bruno](/assets/images/run-anywhere.png) <br /><br />

### همکاری از طریق گیت 👩‍💻🧑‍💻

یا هر سیستم کنترل نسخه‌ای که ترجیح می‌دهید

![bruno](/assets/images/version-control.png) <br /><br />

### لینک‌های مهم 📌

- [آخرین نسخه پایدار ما](https://github.com/usebruno/bruno/discussions/269)
- [نقشه راه](https://github.com/usebruno/bruno/discussions/384)
- [مستندات](https://docs.usebruno.com)
- [وبسایت](https://www.usebruno.com)
- [اشتراک ها](https://www.usebruno.com/pricing)
- [دانلود](https://www.usebruno.com/downloads)

### ویدیوها 🎥

- [تجربه ها](https://github.com/usebruno/bruno/discussions/343)
- [مرکز دانش](https://github.com/usebruno/bruno/discussions/386)
- [اسکریپ مانیا](https://github.com/usebruno/bruno/discussions/385)

### حمایت ❤️

جوون! اگر این پروژه را دوست دارید، روی دکمه ⭐ کلیک کنید!

### تجربه‌های به اشتراک گذاشته‌شده 📣

اگر برونو به شما یا تیمتان کمک کرده است، لطفاً فراموش نکنید تجربه‌های خود را به اشتراک بگذارید. [تجربه‌های خود را در بحث گیت‌هاب ما به اشتراک بگذارید](https://github.com/usebruno/bruno/discussions/343).

### انتشار برونو در یک پکیچ منیجر جدید

لطفا چک بکنید [اینجارو](../../publishing.md) برای اطلاعات بیشتر.

### مشارکت 👩‍💻🧑‍💻

خوشحالم که می‌خواهید برونو را بهتر کنید. لطفا [راهنمای مشارکت را بررسی کنید](../contributing/contributing_fa.md).

حتی اگر نمی‌توانید از طریق کدنویسی مشارکت کنید، در گزارش باگ‌ها و درخواست قابلیت‌های جدید که به حل نیازهای شما کمک می‌کند تردید نکنید.

### نویسنده ها

<div align="center">
    <a href="https://github.com/usebruno/bruno/graphs/contributors">
        <img src="https://contrib.rocks/image?repo=usebruno/bruno" />
    </a>
</div>

### در ارتباط باشید 🌐

[𝕏 (تویتر)](https://twitter.com/use_bruno) <br />
[وبسایت](https://www.usebruno.com) <br />
[دیسکورد](https://discord.com/invite/KgcZUncpjq) <br />
[لینکدین](https://www.linkedin.com/company/usebruno)

### برند

**نام**

به فارسی برونو - `Bruno` یک علامت تجاری ثبت‌شده متعلق به [Anoop M D](https://www.helloanoop.com/)

**لوگو**

لوگو توسط [OpenMoji](https://openmoji.org/library/emoji-1F436/) ساخته شده است. مجوز: CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)

### مجوز 📄

[MIT](../../license.md)


================================================
FILE: docs/readme/readme_fr.md
================================================
<br />
<img src="../../assets/images/logo-transparent.png" width="80"/>

### Bruno - IDE Opensource pour explorer et tester des APIs.

[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md)
| [Українська](./readme_ua.md)
| [Русский](./readme_ru.md)
| [Türkçe](./readme_tr.md)
| [Deutsch](./readme_de.md)
| **Français**
| [Português (BR)](./readme_pt_br.md)
| [한국어](./readme_kr.md)
| [বাংলা](./readme_bn.md)
| [Español](./readme_es.md)
| [Italiano](./readme_it.md)
| [Română](./readme_ro.md)
| [Polski](./readme_pl.md)
| [简体中文](./readme_cn.md)
| [正體中文](./readme_zhtw.md)
| [العربية](./readme_ar.md)
| [日本語](./readme_ja.md)
| [ქართული](./readme_ka.md)

Bruno est un nouveau client API, innovant, qui a pour but de révolutionner le _statu quo_ que représentent Postman et les autres outils.

Bruno sauvegarde vos collections directement sur votre système de fichiers. Nous utilisons un langage de balise de type texte pour décrire les requêtes API.

Vous pouvez utiliser git ou tout autre gestionnaire de version pour travailler de manière collaborative sur vos collections d'APIs.

Bruno ne fonctionne qu'en mode déconnecté. Il n'y a pas d'abonnement ou de synchronisation avec le cloud Bruno, il n'y en aura jamais. Nous sommes conscients de la confidentialité de vos données et nous sommes convaincus qu'elles doivent rester sur vos appareils. Vous pouvez lire notre vision à long terme [ici (en anglais)](https://github.com/usebruno/bruno/discussions/269).

📢 Regardez notre présentation récente lors de la conférence India FOSS 3.0 (en anglais) [ici](https://www.youtube.com/watch?v=7bSMFpbcPiY)

![bruno](/assets/images/landing-2.png) <br /><br />

### Installation

Bruno est disponible au téléchargement [sur notre site web](https://www.usebruno.com/downloads), pour Mac, Windows et Linux.

Vous pouvez aussi installer Bruno via un gestionnaire de paquets, comme Homebrew, Chocolatey, Scoop, Snap et Apt.

```sh
# Mac via Homebrew
brew install bruno

# Windows via Chocolatey
choco install bruno

# Windows via Scoop
scoop bucket add extras
scoop install bruno

# Linux via Snap
snap install bruno

# Linux via Apt
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
  | sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno
```

### Fonctionne sur de multiples plateformes 🖥️

![bruno](/assets/images/run-anywhere.png) <br /><br />

### Collaborer via Git 👩‍💻🧑‍💻

Ou n'importe quel système de gestion de sources

![bruno](/assets/images/version-control.png) <br /><br />

### Liens importants 📌

- [Notre vision à long terme (en anglais)](https://github.com/usebruno/bruno/discussions/269)
- [Roadmap](https://github.com/usebruno/bruno/discussions/384)
- [Documentation](https://docs.usebruno.com)
- [Site web](https://www.usebruno.com)
- [Prix](https://www.usebruno.com/pricing)
- [Téléchargement](https://www.usebruno.com/downloads)
- [Sponsors GitHub](https://github.com/sponsors/helloanoop)

### Showcase 🎥

- [Témoignages](https://github.com/usebruno/bruno/discussions/343)
- [Centre de connaissance](https://github.com/usebruno/bruno/discussions/386)
- [Scriptmania](https://github.com/usebruno/bruno/discussions/385)

### Soutien ❤️

Si vous aimez Bruno et que vous souhaitez soutenir le travail _opensource_, pensez à devenir un sponsor via la page [Github Sponsors](https://github.com/sponsors/helloanoop).

### Partage de témoignages 📣

Si Bruno vous a aidé dans votre travail, au sein de votre équipe, merci de penser à partager votre témoignage sur la [page discussion GitHub dédiée](https://github.com/usebruno/bruno/discussions/343)

### Publier Bruno sur un nouveau gestionnaire de paquets

Veuillez regarder [ici](../publishing/publishing_fr.md) pour plus d'information.

### Contribuer 👩‍💻🧑‍💻

Je suis heureux de voir que vous cherchez à améliorer Bruno. Merci de consulter le [guide de contribution](../contributing/contributing_fr.md)

Même si vous n'êtes pas en mesure de contribuer directement via du code, n'hésitez pas à consigner les bogues et les demandes de nouvelles fonctionnalités pour résoudre vos cas d'usage !

### Auteurs

<div align="center">
    <a href="https://github.com/usebruno/bruno/graphs/contributors">
        <img src="https://contrib.rocks/image?repo=usebruno/bruno" />
    </a>
</div>

### Restons en contact 🌐

[Twitter](https://twitter.com/use_bruno) <br />
[Website](https://www.usebruno.com) <br />
[Discord](https://discord.com/invite/KgcZUncpjq) <br />
[LinkedIn](https://www.linkedin.com/company/usebruno)

### Marque

**Nom**

`Bruno` est une marque appartenant à [Anoop M D](https://www.helloanoop.com/)

**Logo**

Le logo est issu de [OpenMoji](https://openmoji.org/library/emoji-1F436/).
Licence : CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)

### Licence 📄

[MIT](../../license.md)


================================================
FILE: docs/readme/readme_hi.md
================================================
<br />
<img src="../../assets/images/logo-transparent.png" width="80"/>

### ब्रूनो - API इंटरफेस (API) का अन्वेषण और परीक्षण करने के लिए एक ओपन-सोर्स विकास वातावरण।

[![GitHub संस्करण](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![कमिट गतिविधि](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![वेबसाइट](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![डाउनलोड](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md)
| [Українська](./readme_ua.md)
| [Русский](./readme_ru.md)
| [Türkçe](./readme_tr.md)
| [Deutsch](./readme_de.md)
| [Français](./readme_fr.md)
| [Português (BR)](./readme_pt_br.md)
| [한국어](./readme_kr.md)
| [বাংলা](./readme_bn.md)
| [Español](./readme_es.md)
| [Italiano](./readme_it.md)
| [Română](./readme_ro.md)
| [Polski](./readme_pl.md)
| [简体中文](./readme_cn.md)
| [正體中文](./readme_zhtw.md)
| [العربية](./readme_ar.md)
| [日本語](./readme_ja.md)
| [ქართული](./readme_ka.md)
| **हिन्दी**

ब्रूनो एक नया और अभिनव API क्लाइंट है, जिसका उद्देश्य Postman और अन्य समान उपकरणों द्वारा प्रस्तुत स्थिति को बदलना है।

ब्रूनो आपकी कलेक्शनों को सीधे आपकी फाइल सिस्टम के एक फ़ोल्डर में संग्रहीत करता है। हम API अनुरोधों के बारे में जानकारी सहेजने के लिए एक सामान्य टेक्स्ट मार्कअप भाषा, Bru, का उपयोग करते हैं।

आप अपनी API कलेक्शनों पर सहयोग करने के लिए Git या अपनी पसंद के किसी भी संस्करण नियंत्रण प्रणाली का उपयोग कर सकते हैं।

ब्रूनो केवल ऑफ़लाइन उपयोग के लिए है। ब्रूनो में कभी भी क्लाउड-सिंक जोड़ने की कोई योजना नहीं है। हम आपके डेटा की गोपनीयता को महत्व देते हैं और मानते हैं कि इसे आपके डिवाइस पर ही रहना चाहिए। हमारी दीर्घकालिक दृष्टि [यहाँ](https://github.com/usebruno/bruno/discussions/269) पढ़ें।

📢 हमारे हालिया India FOSS 3.0 सम्मेलन में हमारे वार्तालाप को [यहाँ](https://www.youtube.com/watch?v=7bSMFpbcPiY) देखें।

![bruno](/assets/images/landing-2.png) <br /><br />

### गोल्डन संस्करण ✨

हमारी अधिकांश सुविधाएँ मुफ्त और ओपन-सोर्स हैं।
हम [पारदर्शिता और स्थिरता के सिद्धांतों](https://github.com/usebruno/bruno/discussions/269) के बीच एक सामंजस्यपूर्ण संतुलन प्राप्त करने का प्रयास करते हैं।

[गोल्डन संस्करण](https://www.usebruno.com/pricing) के लिए खरीदारी जल्द ही $9 की कीमत पर उपलब्ध होगी! <br/>
[यहाँ सदस्यता लें](https://usebruno.ck.page/4c65576bd4) ताकि आपको लॉन्च पर सूचनाएं मिलें।

### स्थापना

ब्रूनो Mac, Windows और Linux के लिए हमारे [वेबसाइट](https://www.usebruno.com/downloads) पर एक बाइनरी डाउनलोड के रूप में उपलब्ध है।

आप ब्रूनो को Homebrew, Chocolatey, Scoop, Snap, Flatpak और Apt जैसे पैकेज प्रबंधकों के माध्यम से भी स्थापित कर सकते हैं।

```sh
# Mac पर Homebrew के माध्यम से
brew install bruno

# Windows पर Chocolatey के माध्यम से
choco install bruno

# Windows पर Scoop के माध्यम से
scoop bucket add extras
scoop install bruno

# Linux पर Snap के माध्यम से
snap install bruno

# Linux पर Flatpak के माध्यम से
flatpak install com.usebruno.Bruno

# Linux पर Apt के माध्यम से
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
  | sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno

कई प्लेटफार्मों पर चलाएं 🖥️
<br /><br />

Git के माध्यम से सहयोग करें 👩‍💻🧑‍💻
या अपनी पसंद के किसी भी संस्करण नियंत्रण प्रणाली का उपयोग करें

<br /><br />

महत्वपूर्ण लिंक 📌
हमारी दीर्घकालिक दृष्टि

रोडमैप

प्रलेखन

Stack Overflow

वेबसाइट

मूल्य निर्धारण

डाउनलोड

GitHub प्रायोजक

प्रस्तुतियाँ 🎥
प्रशंसापत्र

ज्ञान केंद्र

Scriptmania

समर्थन ❤️
यदि आप ब्रूनो को पसंद करते हैं और हमारे ओपन-सोर्स कार्य का समर्थन करना चाहते हैं, तो कृपया GitHub प्रायोजक के माध्यम से हमें प्रायोजित करने पर विचार करें।

प्रशंसापत्र साझा करें 📣
यदि ब्रूनो ने आपके और आपकी टीमों के लिए काम में मदद की है, तो कृपया हमारे GitHub चर्चा में अपने प्रशंसापत्र साझा करना न भूलें

नए पैकेज प्रबंधकों में प्रकाशित करना
अधिक जानकारी के लिए कृपया यहाँ देखें।

हमसे संपर्क करें 🌐
𝕏 (ट्विटर) <br />
वेबसाइट <br />
डिस्कॉर्ड <br />
लिंक्डइन

ट्रेडमार्क
नाम

ब्रूनो एक ट्रेडमार्क है जो अनूप एम डी के स्वामित्व में है।

लोगो

लोगो OpenMoji से लिया गया है। लाइसेंस: CC BY-SA 4.0

योगदान 👩‍💻🧑‍💻
हमें खुशी है कि आप ब्रूनो को बेहतर बनाने में रुचि रखते हैं। कृपया योगदान गाइड देखें।

यदि आप सीधे कोड के माध्यम से योगदान नहीं कर सकते, तो भी कृपया बग्स की रिपोर्ट करने और उन सुविधाओं का अनुरोध करने में संकोच न करें जिन्हें आपकी स्थिति को हल करने के लिए लागू किया जाना चाहिए।

लेखक
<div align="center"> <a href="https://github.com/usebruno/bruno/graphs/contributors"> <img src="https://contrib.rocks/image?repo=usebruno/bruno" /> </a> </div>

लाइसेंस 📄
MIT


================================================
FILE: docs/readme/readme_it.md
================================================
<br />
<img src="../../assets/images/logo-transparent.png" width="80"/>

### Bruno - Opensource IDE per esplorare e testare gli APIs.

[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md)
| [Українська](./readme_ua.md)
| [Русский](./readme_ru.md)
| [Türkçe](./readme_tr.md)
| [Deutsch](./readme_de.md)
| [Français](./readme_fr.md)
| [Português (BR)](./readme_pt_br.md)
| [한국어](./readme_kr.md)
| [বাংলা](./readme_bn.md)
| [Español](./readme_es.md)
| **Italiano**
| [Română](./readme_ro.md)
| [Polski](./readme_pl.md)
| [简体中文](./readme_cn.md)
| [正體中文](./readme_zhtw.md)
| [العربية](./readme_ar.md)
| [日本語](./readme_ja.md)
| [ქართული](./readme_ka.md)

Bruno è un nuovo ed innovativo API client, mirato a rivoluzionare lo status quo rappresentato da Postman e strumenti simili disponibili.

Bruno memorizza le tue raccolte direttamente in una cartella del tuo filesystem. Utilizziamo un linguaggio di markup in testo semplice chiamato Bru per salvare informazioni sulle richeste API.

Puoi utilizzare Git o qualsiasi sistema di controllo che preferisci per collaborare sulle tue raccolte di API.

Bruno funziona solo in modalità offline. Non ci sono piani per aggiungere la sincronizzazione su cloud a Bruno in futuro. Valorizziamo la privacy dei tuoi dati e crediamo che dovrebbero rimanere sul tuo dispositivo. Puoi leggere la nostra visione a lungo termine [qui (in inglese)](https://github.com/usebruno/bruno/discussions/269)

📢 Guarda la nostra presentazione più recente alla conferenza India FOSS 3.0 [qui](https://www.youtube.com/watch?v=7bSMFpbcPiY)

![bruno](/assets/images/landing-2.png) <br /><br />

### Installazione

Bruno è disponibile come download binario [sul nostro sito](https://www.usebruno.com/downloads) per Mac, Windows e Linux.

Puoi installare Bruno anche tramite package manger come Homebrew, Chocolatey, Snap e Apt.

```sh
# Su Mac come Homebrew
brew install bruno

# Su Windows come Chocolatey
choco install bruno

# Su Linux tramite Snap
snap install bruno

# Su Linux tramite Apt
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
  | sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno
```

### Funziona su diverse piattaforme 🖥️

![bruno](/assets/images/run-anywhere.png) <br /><br />

### Collabora tramite Git 👩‍💻🧑‍💻

O con qualsiasi sistema di controllo di versioni a tua scelta

![bruno](/assets/images/version-control.png) <br /><br />

### Collegamenti importanti 📌

- [La nostra visione a lungo termine](https://github.com/usebruno/bruno/discussions/269)
- [Roadmap](https://github.com/usebruno/bruno/discussions/384)
- [Documentazione](https://docs.usebruno.com)
- [Sito internet](https://www.usebruno.com)
- [Prezzo](https://www.usebruno.com/pricing)
- [Download](https://www.usebruno.com/downloads)

### Showcase 🎥

- [Testimonianze](https://github.com/usebruno/bruno/discussions/343)
- [Centro di conoscenza](https://github.com/usebruno/bruno/discussions/386)
- [Scriptmania](https://github.com/usebruno/bruno/discussions/385)

### Supporto ❤️

Woof! se ti piace il progetto, premi quel ⭐ pulsante !!

### Testimonianze condivise 📣

Se Bruno ti ha aiutato con il tuo lavoro ed il tuo team, per favore non dimenticare di condividere le tue [testimonianze nella nostra discussione su GitHub](https://github.com/usebruno/bruno/discussions/343)

### Pubblica Bruno su un nuovo gestore di pacchetti

Per favore vedi [qui](../../publishing.md) per accedere a più informazioni.

### Contribuire 👩‍💻🧑‍💻

Sono felice che vuoi migliorare Bruno. Per favore controlla la [guida per la partecipazione](../contributing/contributing_it.md)

Anche se non sei in grado di contribuire tramite il codice, non esitare a segnalare bug e richieste di funzionalità che devono essere implementati per risolvere il tuo caso d'uso.

### Autori

<div align="center">
    <a href="https://github.com/usebruno/bruno/graphs/contributors">
        <img src="https://contrib.rocks/image?repo=usebruno/bruno" />
    </a>
</div>

### Resta in contatto 🌐

[𝕏 (Twitter)](https://twitter.com/use_bruno) <br />
[Sito internet](https://www.usebruno.com) <br />
[Discord](https://discord.com/invite/KgcZUncpjq) <br />
[LinkedIn](https://www.linkedin.com/company/usebruno)

### Marchio

**Nome**

`Bruno` è un marchio registrato appartenente a [Anoop M D](https://www.helloanoop.com/)

**Logo**

Il logo è stato creato da [OpenMoji](https://openmoji.org/library/emoji-1F436/). Licenza: CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)

### Licenza 📄

[MIT](../../license.md)


================================================
FILE: docs/readme/readme_ja.md
================================================
<br />
<img src="../../assets/images/logo-transparent.png" width="80"/>

### Bruno - API の検証・動作テストのためのオープンソース IDE.

[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md)
| [Українська](./readme_ua.md)
| [Русский](./readme_ru.md)
| [Türkçe](./readme_tr.md)
| [Deutsch](./readme_de.md)
| [Français](./readme_fr.md)
| [Português (BR)](./readme_pt_br.md)
| [한국어](./readme_kr.md)
| [বাংলা](./readme_bn.md)
| [Español](./readme_es.md)
| [Italiano](./readme_it.md)
| [Română](./readme_ro.md)
| [Polski](./readme_pl.md)
| [简体中文](./readme_cn.md)
| [正體中文](./readme_zhtw.md)
| [العربية](./readme_ar.md)
| **日本語**
| [ქართული](./readme_ka.md)

Bruno は革新的な API クライアントです。Postman を代表する API クライアントツールの現状に一石を投じることを目指しています。

Bruno はローカルフォルダに直接コレクションを保存します。API リクエストの情報を保存するために Bru というプレーンテキストのマークアップ言語を採用しています。

Git や任意のバージョン管理システムを使って API コレクションを共同開発することもできます。

Bruno はオフラインのみで利用できます。Bruno にクラウド同期機能を追加する予定はありません。私たちはデータプライバシーを尊重しており、データはローカルに保存されるべきだと考えています。私たちの長期的なビジョンは[こちら](https://github.com/usebruno/bruno/discussions/269)をご覧ください。

[Bruno をダウンロード](https://www.usebruno.com/downloads)

📢 India FOSS 3.0 Conference での発表の様子は[こちら](https://www.youtube.com/watch?v=7bSMFpbcPiY)から

![bruno](/assets/images/landing-2.png) <br /><br />

### インストール方法

Bruno は[私たちのウェブサイト](https://www.usebruno.com/downloads)からバイナリをダウンロードできます。Mac, Windows, Linux に対応しています。

Homebrew, Chocolatey, Scoop, Snap, Flatpak, Apt などのパッケージマネージャからもインストール可能です。

```sh
# MacでHomebrewを使ってインストール
brew install bruno

# WindowsでChocolateyを使ってインストール
choco install bruno

# WindowsでScoopを使ってインストール
scoop bucket add extras
scoop install bruno

# Windowsでwingetを使ってインストール
winget install Bruno.Bruno

# LinuxでSnapを使ってインストール
snap install bruno

# LinuxでFlatpakを使ってインストール
flatpak install com.usebruno.Bruno

# LinuxでAptを使ってインストール
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
  | sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno
```

### マルチプラットフォームでの実行に対応 🖥️

![bruno](/assets/images/run-anywhere.png) <br /><br />

### Git との連携が可能 👩‍💻🧑‍💻

または任意のバージョン管理システムにも対応しています。

![bruno](/assets/images/version-control.png) <br /><br />

### スポンサー

#### ゴールドスポンサー

<img src="../../assets/images/sponsors/samagata.png" width="150"/>

#### シルバースポンサー

<img src="../../assets/images/sponsors/commit-company.png" width="70"/>

#### ブロンズスポンサー

<a href="https://zuplo.link/bruno">
    <img src="../../assets/images/sponsors/zuplo.png" width="120"/>
</a>

### 主要リンク 📌

- [私たちの長期ビジョン](https://github.com/usebruno/bruno/discussions/269)
- [ロードマップ](https://github.com/usebruno/bruno/discussions/384)
- [ドキュメント](https://docs.usebruno.com)
- [Stack Overflow](https://stackoverflow.com/questions/tagged/bruno)
- [ウェブサイト](https://www.usebruno.com)
- [料金設定](https://www.usebruno.com/pricing)
- [ダウンロード](https://www.usebruno.com/downloads)
- [Github スポンサー](https://github.com/sponsors/helloanoop).

### Showcase 🎥

- [体験談](https://github.com/usebruno/bruno/discussions/343)
- [ナレッジベース](https://github.com/usebruno/bruno/discussions/386)
- [スクリプト集](https://github.com/usebruno/bruno/discussions/385)

### サポート ❤️

もし Bruno を気に入っていただいて、オープンソースの活動を支援していただけるなら、[Github Sponsors](https://github.com/sponsors/helloanoop)でスポンサーになることを考えてみてください。

### 体験談のシェア 📣

Bruno が職場やチームで役立っているのであれば、[GitHub discussion 上であなたの体験談](https://github.com/usebruno/bruno/discussions/343)をシェアしていただくようお願いします。

### 新しいパッケージマネージャへの公開

詳しくは[こちら](../publishing/publishing_ja.md)をご覧ください。

### 連絡先 🌐

[𝕏 (Twitter)](https://twitter.com/use_bruno) <br />
[Website](https://www.usebruno.com) <br />
[Discord](https://discord.com/invite/KgcZUncpjq) <br />
[LinkedIn](https://www.linkedin.com/company/usebruno)

### 商標について

**名前**

`Bruno`は[Anoop M D](https://www.helloanoop.com/)は取得している商標です。

**ロゴ**

ロゴの出典は[OpenMoji](https://openmoji.org/library/emoji-1F436/)です。CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)でライセンスされています。

### 貢献するには 👩‍💻🧑‍💻

Bruno を改善していただけるのは歓迎です。[コントリビュートガイド](../contributing/contributing_ja.md)をご覧ください。

もしコードによる貢献ができない場合でも、あなたのユースケースを解決するために遠慮なくバグ報告や機能リクエストを出してください。

### 開発者

<div align="center">
    <a href="https://github.com/usebruno/bruno/graphs/contributors">
        <img src="https://contrib.rocks/image?repo=usebruno/bruno" />
    </a>
</div>

### ライセンス 📄

[MIT](../../license.md)


================================================
FILE: docs/readme/readme_ka.md
================================================
<br />
<img src="../../assets/images/logo-transparent.png" width="80"/>

### ბრუნო - ღია წყაროების IDE API-ების შესწავლისა და ტესტირებისათვის.

[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md)
| [Українська](./readme_ua.md)
| [Русский](./readme_ru.md)
| [Türkçe](./readme_tr.md)
| [Deutsch](./readme_de.md)
| [Français](./readme_fr.md)
| [Português (BR)](./readme_pt_br.md)
| [한국어](./readme_kr.md)
| [বাংলা](./readme_bn.md)
| [Español](./readme_es.md)
| [Italiano](./readme_it.md)
| [Română](./readme_ro.md)
| [Polski](./readme_pl.md)
| [简体中文](./readme_cn.md)
| [正體中文](./readme_zhtw.md)
| [العربية](./readme_ar.md)
| [日本語](./readme_ja.md)
| **ქართული**

ბრუნო არის ახალი და ინოვაციური API კლიენტი, რომელიც მიზნად ისახავს პოსტმანისა და მსგავსი ინსტრუმენტების არსებული მდგომარეობის რევოლუციას.

ბრუნო თქვენი კოლექციების შენახვას უშუალოდ თქვენს ფაილური სისტემის ერთ-ერთ საქაღალოში ახდენს. ჩვენ ვხმარობთ უბრალო ტექსტურ მარკაპ ენის, Bru-ს, API მოთხოვნების შესახებ ინფორმაციის შენახვისთვის.

თქვენ შეგიძლიათ გამოიყენოთ Git ან ნებისმიერი ვერსიის კონტროლის სისტემა თქვენი API კოლექციების გასაზიარებლად.

ბრუნო მხოლოდ ოფლაინ რეჟიმში მუშაობს. ბრუნოში ღრუბლური სინქრონიზაციის დამატების გეგმები არ არის. ჩვენ ვაფასებთ თქვენი მონაცემების პრივატობას და creemos, რომ ისინი თქვენს მოწყობილობაში უნდა დარჩეს. წაიკითხეთ ჩვენი გრძელვადიანი ხედვა [აქ](https://github.com/usebruno/bruno/discussions/269)

[დამატებით ბრუნო](https://www.usebruno.com/downloads)

📢 შეიტყვეთ ჩვენი უახლესი საუბრის შესახებ India FOSS 3.0 კონფერენციაზე [აქ](https://www.youtube.com/watch?v=7bSMFpbcPiY)

![bruno](../../assets/images/landing-2.png) <br /><br />

### ინსტალაცია

ბრუნო ხელმისაწვდომია როგორც ბინარული ჩამოტვირთვა [ჩვენ的网站上](https://www.usebruno.com/downloads) Mac-ის, Windows-ისა და Linux-ისთვის.

თქვენ ასევე შეგიძლიათ დააინსტალიროთ ბრუნო პაკეტის მენეჯერების საშუალებით, როგორიცაა Homebrew, Chocolatey, Scoop, Snap, Flatpak და Apt.

```sh
# Mac-ზე Homebrew-ს საშუალებით
brew install bruno

# Windows-ზე Chocolatey-ს საშუალებით
choco install bruno

# Windows-ზე Scoop-ის საშუალებით
scoop bucket add extras
scoop install bruno

# Windows-ზე winget-ის საშუალებით
winget install Bruno.Bruno

# Linux-ზე Snap-ის საშუალებით
snap install bruno

# Linux-ზე Flatpak-ის საშუალებით
flatpak install com.usebruno.Bruno

# Linux-ზე Apt-ის საშუალებით
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
  | sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno
```

### პლატფორმებს შორის მუშაობა 🖥️

![bruno](../../assets/images/run-anywhere.png) <br /><br />

### თანამშრომლობა Git-ის საშუალებით 👩‍💻🧑‍💻

ან ნებისმიერი ვერსიის კონტროლის სისტემის საშუალებით

![bruno](../../assets/images/version-control.png) <br /><br />

### სპონსორები

#### ოქროს სპონსორები

<img src="../../assets/images/sponsors/samagata.png" width="150"/>

#### ვერცხლის სპონსორები

<img src="../../assets/images/sponsors/commit-company.png" width="70"/>

#### ბრინჯის სპონსორები

<a href="https://zuplo.link/bruno">
    <img src="../../assets/images/sponsors/zuplo.png" width="120"/>
</a>

### მნიშვნელოვანი ბმულები 📌

- [ჩვენი გრძელვადიანი ხედვა](https://github.com/usebruno/bruno/discussions/269)
- [გეგმა](https://github.com/usebruno/bruno/discussions/384)
- [დოკუმენტაცია](https://docs.usebruno.com)
- [Stack Overflow](https://stackoverflow.com/questions/tagged/bruno)
- [ვებსაიტი](https://www.usebruno.com)
- [ფასები](https://www.usebruno.com/pricing)
- [დამატება](https://www.usebruno.com/downloads)
- [GitHub სპონსორები](https://github.com/sponsors/helloanoop).

### ვიტრინა 🎥

- [მოწონებები](https://github.com/usebruno/bruno/discussions/343)
- [მეცნიერების ჰაბი](https://github.com/usebruno/bruno/discussions/386)
- [Scriptmania](https://github.com/usebruno/bruno/discussions/385)

### მხარდაჭერა ❤️

თუ გიყვართ ბრუნო და გინდათ მხარი დაუჭიროთ ჩვენს ღია წყაროების მუშაობას, გაითვალისწინეთ ჩვენი დახმარება [GitHub სპონსორების საშუალებით](https://github.com/sponsors/helloanoop).

### გააზიარეთ მოწმობები 📣

თუ ბრუნო დაგეხმარათ თქვენს სამუშაოში და გუნდებში, გთხოვთ, არ დაგავიწყდეთ ჩვენი [მოწონებების გაზიარება ჩვენს GitHub განხილვაში](https://github.com/usebruno/bruno/discussions/343)

### ახალი პაკეტის მენეჯერებში გამოქვეყნება

იხილეთ [აქ](../../publishing.md) მეტი ინფორმაციისათვის.

### დაინტერესდით 🌐

[𝕎 (Twitter)](https://twitter.com/use_bruno) <br />
[ვებსაიტი](https://www.usebruno.com) <br />
[Discord](https://discord.com/invite/KgcZUncpjq) <br />
[LinkedIn](https://www.linkedin.com/company/usebruno)

### სავაჭრო ნიშანი

**სახელი**

`ბრუნო` არის სავაჭრო ნიშანი, რომელსაც ფლობს [ანუპ მ. დ.](https://www.helloanoop.com/)

**ლოგო**

ლოგო არის [OpenMoji](https://openmoji.org/library/emoji-1F436/) სურათებიდან. ლიცენზია: CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)

### თანამშრომლობა 👩‍💻🧑‍💻

მიხარია, რომ დაინტერესებული ხართ ბრუნოს გაუმჯობესებით. გთხოვთ, გადახედეთ [თანამშრომლობის სახელმძღვანელოს](../../contributing.md)

თუნდაც ვერ მოახერხოთ კოდის საშუალებით კონტრიბუცია, ნუ ინანებთ პრობლემების და ფუნქციის მოთხოვნების ჩაწერას, რომლებიც უნდა განხორციელდეს თქვენი შემთხვევის გადასაჭრელად.

### ავტორები

<div align="center">
    <a href="https://github.com/usebruno/bruno/graphs/contributors">
        <img src="https://contrib.rocks/image?repo=usebruno/bruno" />
    </a>
</div>

### ლიცენზია 📄

[MIT](../../license.md)

================================================
FILE: docs/readme/readme_kr.md
================================================
<br />
<img src="../../assets/images/logo-transparent.png" width="80"/>

### Bruno - API 탐색 및 테스트를 위한 오픈소스 IDE.

[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md)
| [Українська](./readme_ua.md)
| [Русский](./readme_ru.md)
| [Türkçe](./readme_tr.md)
| [Deutsch](./readme_de.md)
| [Français](./readme_fr.md)
| [Português (BR)](./readme_pt_br.md)
| **한국어**
| [বাংলা](./readme_bn.md)
| [Español](./readme_es.md)
| [Italiano](./readme_it.md)
| [Română](./readme_ro.md)
| [Polski](./readme_pl.md)
| [简体中文](./readme_cn.md)
| [正體中文](./readme_zhtw.md)
| [العربية](./readme_ar.md)
| [日本語](./readme_ja.md)
| [ქართული](./readme_ka.md)

Bruno는 새롭고 혁신적인 API 클라이언트로, Postman과 유사한 툴들을 혁신하는 것을 목표로 합니다.

Bruno는 사용자의 컬렉션을 파일 시스템의 폴더에 직접 저장합니다. 일반 텍스트 마크업 언어인 Bru를 사용해 API 요청에 대한 정보를 저장합니다.

Git 또는 원하는 버전 관리 도구를 사용하여 API 컬렉션을 연동할 수 있습니다.

브루는 오프라인 전용입니다. 브루노에 클라우드 동기화 기능을 추가할 계획은 없습니다. 저희는 사용자의 데이터 프라이버시를 소중히 여기며, 데이터는 사용자의 기기에 남아 있어야 한다고 믿습니다. 장기 비전 읽기 [링크](https://github.com/usebruno/bruno/discussions/269)

📢 Watch our recent talk at India FOSS 3.0 Conference [here](https://www.youtube.com/watch?v=7bSMFpbcPiY)

![bruno](/assets/images/landing-2.png) <br /><br />

### 설치

Bruno 는 여기에서 다운로드 받을 수 있습니다.[링크](https://www.usebruno.com/downloads) (맥, 윈도우, 리눅스)

Homebrew, Chocolatey, Snap, Apt 같은 패키지 관리자를 통해서도 Bruno를 설치할 수 있습니다.

```sh
# On Mac via Homebrew
brew install bruno

# On Windows via Chocolatey
choco install bruno

# On Linux via Snap
snap install bruno

# On Linux via Apt
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
  | gpg --dearmor \
  | sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
  | sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno
```

### 여러 플랫폼에서 실행하세요. 🖥️

![bruno](/assets/images/run-anywhere.png) <br /><br />

### Git과 연동하세요. 👩‍💻🧑‍💻

또는 원하는 버전 관리 시스템을 선택하세요.

![bruno](/assets/images/version-control.png) <br /><br />

### 중요 링크 📌

- [Our Long Term Vision](https://github.com/usebruno/bruno/discussions/269)
- [Roadmap](https://github.com/usebruno/bruno/discussions/384)
- [Documentation](https://docs.usebruno.com)
- [Website](https://www.usebruno.com)
- [Pricing](https://www.usebruno.com/pricing)
- [Download](https://www.usebruno.com/downloads)

### 쇼케이스 🎥

- [Testimonials](https://github.com/usebruno/bruno/discussions/343)
- [Knowledge Hub](https://github.com/usebruno/bruno/discussions/386)
- [Scriptmania](https://github.com/usebruno/bruno/discussions/385)

### 지원 ❤️

프로젝트가 마음에 들면 ⭐ 버튼을 눌러 주세요.

### 후기 공유 📣

Bruno가 여러분과 여러분의 팀에 도움이 되었다면, 잊지 말고 공유해 주세요. [GitHub discussion 공유 링크](https://github.com/usebruno/bruno/discussions/343)

### 새 패키지 관리자에게 게시

더 많은 정보를 확인하시려면 링크를 클릭해 주세요. [배포 가이드](../../publishing.md)

### 컨트리뷰트 👩‍💻🧑‍💻

컨트리뷰트에 관심이 있으시면 링크를 참고해 주세요. [컨트리뷰트 가이드](../contributing/contributing_kr.md)

코드를 통해 기여할 수 없더라도 사용 사례를 해결하기 위해 구현이 필요한 버그나 기능 요청을 주저하지 마시고 제출해 주세요.

### Authors

<div align="center">
    <a href="https://github.com/usebruno/bruno/graphs/contributors">
        <img src="https://contrib.rocks/image?repo=usebruno/bruno" />
    </a>
</div>

### Stay in touch 🌐

[𝕏 (Twitter)](https://twitter.com/use_bruno) <br />
[Website](https://www.usebruno.com) <br />
[Discord](https://discord.com/invite/KgcZUncpjq) <br />
[LinkedIn](https://www.linkedin.com/company/usebruno)

### Trademark

**Name**

`Bruno` is a trademark held by [Anoop M D](https://www.helloanoop.com/)

**Logo**

The logo is sourced from [OpenMoji](https://openmoji.org/library/emoji-1F436/). License: CC [BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)

### License 📄

[MIT](../../license.md)


================================================
FILE: docs/readme/readme_nl.md
================================================
<br />
<img src="../../assets/images/logo-transparent.png" width="80"/>

### Bruno - Open source IDE voor het verkennen en testen van API's.

[![GitHub version](https://badge.fury.io/gh/usebruno%2Fbruno.svg)](https://badge.fury.io/gh/usebruno%2Fbruno)
[![CI](https://github.com/usebruno/bruno/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/usebruno/bruno/actions/workflows/tests.yml)
[![Commit Activity](https://img.shields.io/github/commit-activity/m/usebruno/bruno)](https://github.com/usebruno/bruno/pulse)
[![X](https://img.shields.io/twitter/follow/use_bruno?style=social&logo=x)](https://twitter.com/use_bruno)
[![Website](https://img.shields.io/badge/Website-Visit-blue)](https://www.usebruno.com)
[![Download](https://img.shields.io/badge/Download-Latest-brightgreen)](https://www.usebruno.com/downloads)

[English](../../readme.md) | [Українська](docs/readme/readme_ua.md) | [Русский](docs/readme/readme_ru.md) | [Türkçe](docs/readme/readme_tr.md) | [Deutsch](docs/readme/readme_de.md) | ** Nederlands ** | [Français](docs/readme/readme_fr.md) | [Português (BR)](docs/readme/readme_pt_br.md) | [한국어](docs/readme/readme_kr.md) | [বাংলা](docs/readme/readme_bn.md) | [Español](docs/readme/readme_es.md) | [Italiano](docs/readme/readme_it.md) | [Română](docs/readme/readme_ro.md) | [Polski](docs/readme/readme_pl.md) | [简体中文](docs/readme/readme_cn.md) | [正體中文](docs/readme/readme_zhtw.md) | [العربية](docs/readme/readme_ar.md) | [日本語](docs/readme/readme_ja.md)

Bruno is een nieuwe en innovatieve API-client, gericht op het revolutioneren van de status quo die wordt vertegenwoordigd door Postman en vergelijkbare tools.
Download .txt
gitextract_14_o08yk/

├── .coderabbit.yaml
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── BugReport.yaml
│   │   ├── FeatureRequest.yaml
│   │   └── config.yaml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── actions/
│   │   ├── common/
│   │   │   └── setup-node-deps/
│   │   │       └── action.yml
│   │   ├── ssl/
│   │   │   ├── linux/
│   │   │   │   ├── run-basic-ssl-cli-tests/
│   │   │   │   │   └── action.yml
│   │   │   │   ├── run-custom-ca-certs-cli-tests/
│   │   │   │   │   └── action.yml
│   │   │   │   ├── run-ssl-e2e-tests/
│   │   │   │   │   └── action.yml
│   │   │   │   ├── setup-ca-certs/
│   │   │   │   │   └── action.yml
│   │   │   │   └── setup-feature-specific-deps/
│   │   │   │       └── action.yml
│   │   │   ├── macos/
│   │   │   │   ├── run-basic-ssl-cli-tests/
│   │   │   │   │   └── action.yml
│   │   │   │   ├── run-custom-ca-certs-cli-tests/
│   │   │   │   │   └── action.yml
│   │   │   │   ├── run-ssl-e2e-tests/
│   │   │   │   │   └── action.yml
│   │   │   │   ├── setup-ca-certs/
│   │   │   │   │   └── action.yml
│   │   │   │   └── setup-feature-specific-deps/
│   │   │   │       └── action.yml
│   │   │   └── windows/
│   │   │       ├── run-basic-ssl-cli-tests/
│   │   │       │   └── action.yml
│   │   │       ├── run-custom-ca-certs-cli-tests/
│   │   │       │   └── action.yml
│   │   │       ├── run-ssl-e2e-tests/
│   │   │       │   └── action.yml
│   │   │       └── setup-ca-certs/
│   │   │           └── action.yml
│   │   └── tests/
│   │       ├── run-cli-tests/
│   │       │   └── action.yml
│   │       ├── run-e2e-tests/
│   │       │   └── action.yml
│   │       └── run-unit-tests/
│   │           └── action.yml
│   ├── dependabot.yml
│   ├── scripts/
│   │   ├── comment-on-flaky-tests.js
│   │   └── detect-flaky-tests.js
│   └── workflows/
│       ├── flaky-test-detector.yml
│       ├── lint-checks.yml
│       ├── npm-bru-cli.yml
│       ├── ssl-tests.yml
│       └── tests.yml
├── .gitignore
├── .husky/
│   └── pre-commit
├── .nvmrc
├── CODING_STANDARDS.md
├── contributing.md
├── docs/
│   ├── contributing/
│   │   ├── contributing_bn.md
│   │   ├── contributing_cn.md
│   │   ├── contributing_de.md
│   │   ├── contributing_es.md
│   │   ├── contributing_fa.md
│   │   ├── contributing_fr.md
│   │   ├── contributing_hi.md
│   │   ├── contributing_it.md
│   │   ├── contributing_ja.md
│   │   ├── contributing_kr.md
│   │   ├── contributing_nl.md
│   │   ├── contributing_pl.md
│   │   ├── contributing_pt_br.md
│   │   ├── contributing_ro.md
│   │   ├── contributing_ru.md
│   │   ├── contributing_sk.md
│   │   ├── contributing_tr.md
│   │   ├── contributing_ua.md
│   │   └── contributing_zhtw.md
│   ├── playwright-testing-guide.md
│   ├── publishing/
│   │   ├── publishing_bn.md
│   │   ├── publishing_cn.md
│   │   ├── publishing_de.md
│   │   ├── publishing_fa.md
│   │   ├── publishing_fr.md
│   │   ├── publishing_ja.md
│   │   ├── publishing_nl.md
│   │   ├── publishing_pl.md
│   │   ├── publishing_pt_br.md
│   │   ├── publishing_ro.md
│   │   ├── publishing_tr.md
│   │   └── publishing_zhtw.md
│   └── readme/
│       ├── readme_ar.md
│       ├── readme_bn.md
│       ├── readme_cn.md
│       ├── readme_de.md
│       ├── readme_es.md
│       ├── readme_fa.md
│       ├── readme_fr.md
│       ├── readme_hi.md
│       ├── readme_it.md
│       ├── readme_ja.md
│       ├── readme_ka.md
│       ├── readme_kr.md
│       ├── readme_nl.md
│       ├── readme_pl.md
│       ├── readme_pt_br.md
│       ├── readme_ro.md
│       ├── readme_ru.md
│       ├── readme_tr.md
│       ├── readme_ua.md
│       └── readme_zhtw.md
├── eslint.config.js
├── license.md
├── package.json
├── packages/
│   ├── bruno-app/
│   │   ├── .babelrc
│   │   ├── .gitignore
│   │   ├── babel.config.js
│   │   ├── jest.config.js
│   │   ├── jest.setup.js
│   │   ├── jsconfig.json
│   │   ├── package.json
│   │   ├── postcss.config.js
│   │   ├── public/
│   │   │   ├── static/
│   │   │   │   └── diff2Html.js
│   │   │   └── theme/
│   │   │       ├── dark.js
│   │   │       ├── index.js
│   │   │       └── light.js
│   │   ├── rsbuild.config.mjs
│   │   ├── src/
│   │   │   ├── components/
│   │   │   │   ├── Accordion/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── styledWrapper.js
│   │   │   │   ├── ApiSpecPanel/
│   │   │   │   │   ├── FileEditor/
│   │   │   │   │   │   └── CodeEditor/
│   │   │   │   │   │       ├── Plugins/
│   │   │   │   │   │       │   └── Yaml/
│   │   │   │   │   │       │       └── index.js
│   │   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │   │       └── index.js
│   │   │   │   │   ├── Renderers/
│   │   │   │   │   │   └── Swagger/
│   │   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │   │       └── index.js
│   │   │   │   │   ├── SpecViewer.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── AppTitleBar/
│   │   │   │   │   ├── AppMenu/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── BodyModeSelector/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Bruno/
│   │   │   │   │   └── index.js
│   │   │   │   ├── BrunoSupport/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── BulkEditor/
│   │   │   │   │   └── index.js
│   │   │   │   ├── Checkbox/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── CodeEditor/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.spec.js
│   │   │   │   ├── CodeMirrorSearch/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── CollectionSettings/
│   │   │   │   │   ├── Auth/
│   │   │   │   │   │   ├── ApiKeyAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── AuthMode/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── AwsV4Auth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── BasicAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── BearerAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── DigestAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── NTLMAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── OAuth2/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── WsseAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ClientCertSettings/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Docs/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Headers/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Overview/
│   │   │   │   │   │   ├── Info/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── RequestsNotLoaded/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Presets/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Protobuf/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ProxySettings/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Script/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── Tests/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Vars/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── VarsTable/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ColorBadge/
│   │   │   │   │   └── index.js
│   │   │   │   ├── ColorPicker/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ColorRange/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Cookies/
│   │   │   │   │   ├── ModifyCookieModal/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── CreateTransientRequest/
│   │   │   │   │   └── index.js
│   │   │   │   ├── CreateUntitledRequest/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── DeprecationWarning/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Devtools/
│   │   │   │   │   ├── Console/
│   │   │   │   │   │   ├── DebugTab/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ErrorDetailsPanel/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── NetworkTab/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── RequestDetailsPanel/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── TerminalTab/
│   │   │   │   │   │   │   ├── SessionList.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Performance/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Documentation/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Dropdown/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── EditableTable/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── EnvironmentVariablesTable/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Environments/
│   │   │   │   │   ├── CollapsibleSection/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Common/
│   │   │   │   │   │   ├── ExportEnvironmentModal/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── ImportEnvironmentModal/
│   │   │   │   │   │       └── index.js
│   │   │   │   │   ├── ConfirmCloseEnvironment/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── DotEnvFileDetails/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── DotEnvFileEditor/
│   │   │   │   │   │   ├── DotEnvEmptyState.js
│   │   │   │   │   │   ├── DotEnvErrorMessage.js
│   │   │   │   │   │   ├── DotEnvRawView.js
│   │   │   │   │   │   ├── DotEnvTableView.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── utils.js
│   │   │   │   │   ├── EnvironmentSelector/
│   │   │   │   │   │   ├── EnvironmentListContent/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── EnvironmentSettings/
│   │   │   │   │   │   ├── CopyEnvironment/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── CreateEnvironment/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── DeleteDotEnvFile/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── DeleteEnvironment/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── EnvironmentList/
│   │   │   │   │   │   │   ├── EnvironmentDetails/
│   │   │   │   │   │   │   │   ├── EnvironmentVariables/
│   │   │   │   │   │   │   │   │   ├── constants.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── GlobalEnvironmentSettings/
│   │   │   │   │       └── index.js
│   │   │   │   ├── ErrorCapture/
│   │   │   │   │   └── index.js
│   │   │   │   ├── Errors/
│   │   │   │   │   └── IpcErrorModal/
│   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │       └── index.js
│   │   │   │   ├── FilePickerEditor/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── FolderSettings/
│   │   │   │   │   ├── Auth/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── AuthMode/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Documentation/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Headers/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Script/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── Tests/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Vars/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── VarsTable/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Git/
│   │   │   │   │   ├── GitNotFoundModal/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── VisualDiffViewer/
│   │   │   │   │       ├── CollapsibleDiffRow.js
│   │   │   │   │       ├── VisualDiffAuth.js
│   │   │   │   │       ├── VisualDiffBody.js
│   │   │   │   │       ├── VisualDiffContent/
│   │   │   │   │       │   ├── StyledWrapper.js
│   │   │   │   │       │   └── index.js
│   │   │   │   │       ├── VisualDiffHeaders.js
│   │   │   │   │       ├── VisualDiffParams.js
│   │   │   │   │       ├── VisualDiffUrlBar.js
│   │   │   │   │       └── utils/
│   │   │   │   │           ├── bruUtils.js
│   │   │   │   │           ├── bruUtils.spec.js
│   │   │   │   │           ├── diffUtils.js
│   │   │   │   │           └── diffUtils.spec.js
│   │   │   │   ├── GlobalSearchModal/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── constants/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── utils/
│   │   │   │   │       └── searchUtils.js
│   │   │   │   ├── Help/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Icons/
│   │   │   │   │   ├── CloseAll/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Dot/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ExampleIcon/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Grpc/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── IconAlertTriangleFilled/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── IconBottombarToggle/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── IconCaretDown/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── IconCheckMark/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── IconEdit/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── IconSidebarToggle/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── InfoCircle/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── OpenAPILogo/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── OpenAPISync/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── OpenCollectionIcon/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── QuestionCircle/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── Send/
│   │   │   │   │       └── index.js
│   │   │   │   ├── InfoTip/
│   │   │   │   │   └── index.js
│   │   │   │   ├── InheritableSettingsInput/
│   │   │   │   │   └── index.js
│   │   │   │   ├── ManageWorkspace/
│   │   │   │   │   ├── DeleteWorkspace/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RenameWorkspace/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── MarkDown/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.jsx
│   │   │   │   ├── Modal/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── MultiLineEditor/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Notifications/
│   │   │   │   │   ├── StyleWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── OpenAPISpecTab/
│   │   │   │   │   └── index.js
│   │   │   │   ├── OpenAPISyncTab/
│   │   │   │   │   ├── CollectionStatusSection/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ConfirmSyncModal/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ConnectSpecForm/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ConnectionSettingsModal/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── DisconnectSyncModal/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── EndpointChangeSection/
│   │   │   │   │   │   ├── EndpointItem.js
│   │   │   │   │   │   ├── EndpointVisualDiff.js
│   │   │   │   │   │   ├── ExpandableEndpointRow.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── OpenAPISyncHeader/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── OverviewSection/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── SpecDiffModal/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── SpecStatusSection/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── SyncReviewPage/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── hooks/
│   │   │   │   │   │   ├── useEndpointActions.js
│   │   │   │   │   │   ├── useOpenAPISync.js
│   │   │   │   │   │   └── useSyncFlow.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── utils.js
│   │   │   │   ├── PathDisplay/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Portal/
│   │   │   │   │   └── index.js
│   │   │   │   ├── Preferences/
│   │   │   │   │   ├── Beta/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Cache/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Display/
│   │   │   │   │   │   ├── Font/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── Theme/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── Zoom/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── General/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Keybindings/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ProxySettings/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── SystemProxy/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── Support/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Themes/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── RadioButton/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ReorderTable/
│   │   │   │   │   └── index.js
│   │   │   │   ├── RequestPane/
│   │   │   │   │   ├── Assertions/
│   │   │   │   │   │   ├── AssertionOperator/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── AssertionRow/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Auth/
│   │   │   │   │   │   ├── ApiKeyAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── AuthMode/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── AwsV4Auth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── BasicAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── BearerAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── DigestAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── NTLMAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── OAuth2/
│   │   │   │   │   │   │   ├── AdditionalParams/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── AuthorizationCode/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   │   │   └── inputsConfig.js
│   │   │   │   │   │   │   ├── ClientCredentials/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   │   │   └── inputsConfig.js
│   │   │   │   │   │   │   ├── GrantTypeSelector/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── Implicit/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   │   │   └── inputsConfig.js
│   │   │   │   │   │   │   ├── Oauth2ActionButtons/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── Oauth2TokenViewer/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── PasswordCredentials/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   │   │   └── inputsConfig.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── WsseAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── FileBody/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── FormUrlEncodedParams/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GraphQLRequestPane/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GraphQLSchemaActions/
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── useGraphqlSchema.js
│   │   │   │   │   ├── GraphQLVariables/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GrpcBody/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GrpcQueryUrl/
│   │   │   │   │   │   ├── GrpcurlModal/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── MethodDropdown/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ProtoFileDropdown/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── Tabs/
│   │   │   │   │   │   │   ├── ImportPathsTab/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── ProtoFilesTab/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── TabNavigation/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GrpcRequestPane/
│   │   │   │   │   │   ├── GrpcAuth/
│   │   │   │   │   │   │   ├── GrpcAuthMode/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── HttpRequestPane/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── MultipartFormParams/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── PromptVariables/
│   │   │   │   │   │   └── PromptVariablesModal/
│   │   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │   │       └── index.js
│   │   │   │   │   ├── QueryEditor/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── onHasCompletion.js
│   │   │   │   │   ├── QueryParams/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── QueryUrl/
│   │   │   │   │   │   ├── HttpMethodSelector/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   │   └── index.spec.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RequestBody/
│   │   │   │   │   │   ├── RequestBodyMode/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RequestHeaders/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Script/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Settings/
│   │   │   │   │   │   ├── Tags/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ToggleSelector/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Tests/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Vars/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── VarsTable/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── WSRequestPane/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── WSAuth/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   ├── WSAuthMode/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── WSSettingsPane/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── WsBody/
│   │   │   │   │   │   ├── BodyMode/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── SingleWSMessage/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── WsQueryUrl/
│   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │       └── index.js
│   │   │   │   ├── RequestTabPanel/
│   │   │   │   │   ├── ExampleNotFound/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── FolderNotFound/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RequestIsLoading/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RequestNotFound/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RequestNotLoaded/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── RequestTabs/
│   │   │   │   │   ├── CollectionHeader/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── DraggableTab.js
│   │   │   │   │   ├── ExampleTab/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RequestTab/
│   │   │   │   │   │   ├── CloseTabIcon.js
│   │   │   │   │   │   ├── ConfirmCollectionClose/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ConfirmFolderClose/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ConfirmRequestClose/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── DraftTabIcon.js
│   │   │   │   │   │   ├── GradientCloseButton/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── RequestTabNotFound.js
│   │   │   │   │   │   ├── SpecialTab.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ResponseExample/
│   │   │   │   │   ├── CreateExampleModal/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseExampleRequestPane/
│   │   │   │   │   │   ├── ResponseExampleBody/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleBodyMode/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleBodyRenderer/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleDescription/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleFileBody/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleFormUrlEncodedParams/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleHeaders/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleMultipartFormParams/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleParams/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleUrlBar/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseExampleResponsePane/
│   │   │   │   │   │   ├── ResponseExampleResponseContent/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleResponseHeaders/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseExampleStatusInput/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseExampleTopBar/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ResponsePane/
│   │   │   │   │   ├── ClearTimeline/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GrpcResponsePane/
│   │   │   │   │   │   ├── GrpcError/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── GrpcQueryResult/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── GrpcResponseHeaders/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── GrpcStatusCode/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   ├── get-grpc-status-code-phrase.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ResponseTrailers/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── LargeResponseWarning/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── NetworkError/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Overlay/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Placeholder/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── QueryResponse/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── QueryResult/
│   │   │   │   │   │   ├── QueryResultFilter/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── QueryResultPreview/
│   │   │   │   │   │   │   ├── HtmlPreview.js
│   │   │   │   │   │   │   ├── JsonPreview.js
│   │   │   │   │   │   │   ├── TextPreview.js
│   │   │   │   │   │   │   ├── VideoPreview.js
│   │   │   │   │   │   │   ├── XmlPreview/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── QueryResultTypeSelector/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.jsx
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseActions/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseBookmark/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseClear/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseCopy/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseDownload/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseHeaders/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseLayoutToggle/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── index.spec.js
│   │   │   │   │   ├── ResponsePaneActions/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseSize/
│   │   │   │   │   │   ├── ResponseSize.spec.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseStopWatch/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ResponseTime/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RunnerTimeline/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ScriptError/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ScriptErrorIcon/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── SkippedRequest/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StatusCode/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── get-status-code-phrase.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── TestResults/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── TestResultsLabel/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Timeline/
│   │   │   │   │   │   ├── GrpcTimelineItem/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── TimelineItem/
│   │   │   │   │   │   │   ├── Common/
│   │   │   │   │   │   │   │   ├── Body/
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── Headers/
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── Method/
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── Status/
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   └── Time/
│   │   │   │   │   │   │   │       └── index.js
│   │   │   │   │   │   │   ├── Network/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── Request/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── Response/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── WsResponsePane/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── WSMessagesList/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── WSResponseHeaders/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── WSResponseSortOrder/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── WSStatusCode/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   ├── get-ws-status-code-phrase.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── RunnerResults/
│   │   │   │   │   ├── ResponsePane/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── RunConfigurationPanel/
│   │   │   │   │   │   ├── StyledWrapper.jsx
│   │   │   │   │   │   └── index.jsx
│   │   │   │   │   ├── RunnerTags/
│   │   │   │   │   │   └── index.jsx
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.jsx
│   │   │   │   ├── SaveTransientRequest/
│   │   │   │   │   ├── CollectionListItem/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Container.js
│   │   │   │   │   ├── FolderBreadcrumbs/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── SearchInput/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── SecuritySettings/
│   │   │   │   │   └── JsSandboxMode/
│   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │       └── index.js
│   │   │   │   ├── SensitiveFieldWarning/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── SettingsInput/
│   │   │   │   │   └── index.js
│   │   │   │   ├── ShareCollection/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Sidebar/
│   │   │   │   │   ├── ApiSpecs/
│   │   │   │   │   │   ├── ApiSpecItem/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── CloseApiSpec/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── CreateApiSpec/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── BulkImportCollectionLocation/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   └── index.spec.js
│   │   │   │   │   ├── CloneGitRespository/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── CloseWorkspace/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Collections/
│   │   │   │   │   │   ├── Collection/
│   │   │   │   │   │   │   ├── CloneCollection/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── CollectionItem/
│   │   │   │   │   │   │   │   ├── CloneCollectionItem/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── CollectionItemDragPreview/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── CollectionItemIcon/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── CollectionItemInfo/
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── DeleteCollectionItem/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── ExampleItem/
│   │   │   │   │   │   │   │   │   ├── DeleteResponseExampleModal/
│   │   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── GenerateCodeItem/
│   │   │   │   │   │   │   │   │   ├── CodeView/
│   │   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   │   ├── CodeViewToolbar/
│   │   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   ├── index.js
│   │   │   │   │   │   │   │   │   └── utils/
│   │   │   │   │   │   │   │   │       ├── interpolation.js
│   │   │   │   │   │   │   │   │       ├── interpolation.spec.js
│   │   │   │   │   │   │   │   │       ├── snippet-generator.js
│   │   │   │   │   │   │   │   │       └── snippet-generator.spec.js
│   │   │   │   │   │   │   │   ├── RenameCollectionItem/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── RequestMethod/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── RunCollectionItem/
│   │   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── DeleteCollection/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── GenerateDocumentation/
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── RemoveCollection/
│   │   │   │   │   │   │   │   ├── ConfirmCollectionCloseDrafts.js
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── RenameCollection/
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── CollectionSearch/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── CreateOrOpenCollection/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── InlineCollectionCreator/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── RemoveCollectionsModal/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── SelectCollection/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── CreateCollection/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── GoldenEdition/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ImportCollection/
│   │   │   │   │   │   ├── FileTab.js
│   │   │   │   │   │   ├── FullscreenLoader/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── GitHubTab.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   ├── UrlTab.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── ImportCollectionLocation/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── NewFolder/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── NewRequest/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── Sections/
│   │   │   │   │   │   ├── ApiSpecsSection/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   └── CollectionsSection/
│   │   │   │   │   │       └── index.js
│   │   │   │   │   ├── SidebarAccordionContext.js
│   │   │   │   │   ├── SidebarContent.js
│   │   │   │   │   ├── SidebarSection/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── SingleLineEditor/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Spinner/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── StatusBar/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── ThemeDropdown/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── StatusDot/
│   │   │   │   │   └── index.js
│   │   │   │   ├── StopWatch/
│   │   │   │   │   └── index.js
│   │   │   │   ├── Tab/
│   │   │   │   │   └── index.js
│   │   │   │   ├── Table/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Tabs/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── TagList/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ToggleSwitch/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ToolHint/
│   │   │   │   │   └── index.js
│   │   │   │   ├── TruncatedText/
│   │   │   │   │   └── index.js
│   │   │   │   ├── VariablesEditor/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── WelcomeModal/
│   │   │   │   │   ├── GetStartedStep/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StorageStep/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── ThemeStep/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── WelcomeStep/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── WorkspaceHome/
│   │   │   │   │   ├── WorkspaceDocs/
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── WorkspaceEnvironments/
│   │   │   │   │   │   ├── CopyEnvironment/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── CreateEnvironment/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── DeleteEnvironment/
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── EnvironmentList/
│   │   │   │   │   │   │   ├── ConfirmSwitchEnv.js
│   │   │   │   │   │   │   ├── EnvironmentDetails/
│   │   │   │   │   │   │   │   ├── EnvironmentVariables/
│   │   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── ImportEnvironment/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── RenameEnvironment/
│   │   │   │   │   │   │   └── index.js
│   │   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── WorkspaceOverview/
│   │   │   │   │       ├── CollectionsList/
│   │   │   │   │       │   ├── StyledWrapper.js
│   │   │   │   │       │   └── index.js
│   │   │   │   │       ├── StyledWrapper.js
│   │   │   │   │       └── index.js
│   │   │   │   └── WorkspaceSidebar/
│   │   │   │       ├── CreateWorkspace/
│   │   │   │       │   └── index.js
│   │   │   │       └── ImportWorkspace/
│   │   │   │           └── index.js
│   │   │   ├── globalStyles.js
│   │   │   ├── hooks/
│   │   │   │   ├── useCollectionFolderTree/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useDebounce/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useDeferredLoading/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── index.spec.js
│   │   │   │   ├── useDetectSensitiveField/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useFocusTrap/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useLocalStorage/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useOnClickOutside/
│   │   │   │   │   └── index.js
│   │   │   │   ├── usePrevious/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useProtoFileManagement/
│   │   │   │   │   └── index.js
│   │   │   │   ├── useReflectionManagement/
│   │   │   │   │   └── index.js
│   │   │   │   └── useTabPaneBoundaries/
│   │   │   │       └── index.js
│   │   │   ├── i18n/
│   │   │   │   ├── index.js
│   │   │   │   └── translation/
│   │   │   │       └── en.json
│   │   │   ├── index.js
│   │   │   ├── pages/
│   │   │   │   ├── Bruno/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ErrorBoundary/
│   │   │   │   │   └── index.js
│   │   │   │   ├── Main.js
│   │   │   │   └── index.js
│   │   │   ├── providers/
│   │   │   │   ├── App/
│   │   │   │   │   ├── ConfirmAppClose/
│   │   │   │   │   │   ├── SaveRequestsModal.js
│   │   │   │   │   │   └── index.js
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── useIpcEvents.js
│   │   │   │   │   ├── useOpenAPISyncPolling.js
│   │   │   │   │   └── useTelemetry.js
│   │   │   │   ├── Hotkeys/
│   │   │   │   │   ├── index.js
│   │   │   │   │   └── keyMappings.js
│   │   │   │   ├── PromptVariables/
│   │   │   │   │   └── index.js
│   │   │   │   ├── ReduxStore/
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── middlewares/
│   │   │   │   │   │   ├── autosave/
│   │   │   │   │   │   │   └── middleware.js
│   │   │   │   │   │   ├── debug/
│   │   │   │   │   │   │   └── middleware.js
│   │   │   │   │   │   ├── draft/
│   │   │   │   │   │   │   ├── middleware.js
│   │   │   │   │   │   │   └── utils.js
│   │   │   │   │   │   └── tasks/
│   │   │   │   │   │       ├── middleware.js
│   │   │   │   │   │       └── utils.js
│   │   │   │   │   └── slices/
│   │   │   │   │       ├── apiSpec.js
│   │   │   │   │       ├── app.js
│   │   │   │   │       ├── collections/
│   │   │   │   │       │   ├── actions.js
│   │   │   │   │       │   ├── exampleReducers.js
│   │   │   │   │       │   └── index.js
│   │   │   │   │       ├── global-environments.js
│   │   │   │   │       ├── logs.js
│   │   │   │   │       ├── notifications.js
│   │   │   │   │       ├── notifications.spec.js
│   │   │   │   │       ├── openapi-sync.js
│   │   │   │   │       ├── performance.js
│   │   │   │   │       ├── tabs.js
│   │   │   │   │       └── workspaces/
│   │   │   │   │           ├── actions.js
│   │   │   │   │           ├── getTabToFocusForCurrentWorkspace.js
│   │   │   │   │           ├── getTabToFocusForCurrentWorkspace.spec.js
│   │   │   │   │           └── index.js
│   │   │   │   ├── Theme/
│   │   │   │   │   └── index.js
│   │   │   │   └── Toaster/
│   │   │   │       └── index.js
│   │   │   ├── selectors/
│   │   │   │   └── tab.js
│   │   │   ├── styles/
│   │   │   │   └── globals.css
│   │   │   ├── test-utils/
│   │   │   │   └── mocks/
│   │   │   │       └── codemirror.js
│   │   │   ├── themes/
│   │   │   │   ├── DesignSystem/
│   │   │   │   │   ├── DesignSystem.stories.jsx
│   │   │   │   │   ├── Overview.jsx
│   │   │   │   │   └── Theme.stories.jsx
│   │   │   │   ├── PaletteViewer/
│   │   │   │   │   ├── Catppuccin.stories.jsx
│   │   │   │   │   └── components.jsx
│   │   │   │   ├── dark/
│   │   │   │   │   ├── catppuccin-frappe.js
│   │   │   │   │   ├── catppuccin-macchiato.js
│   │   │   │   │   ├── catppuccin-mocha.js
│   │   │   │   │   ├── dark-monochrome.js
│   │   │   │   │   ├── dark-pastel.js
│   │   │   │   │   ├── dark.js
│   │   │   │   │   ├── nord.js
│   │   │   │   │   └── vscode.js
│   │   │   │   ├── index.js
│   │   │   │   ├── light/
│   │   │   │   │   ├── catppuccin-latte.js
│   │   │   │   │   ├── light-monochrome.js
│   │   │   │   │   ├── light-pastel.js
│   │   │   │   │   ├── light.js
│   │   │   │   │   └── vscode.js
│   │   │   │   └── schema/
│   │   │   │       ├── index.js
│   │   │   │       └── oss.js
│   │   │   ├── ui/
│   │   │   │   ├── ActionIcon/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── Button/
│   │   │   │   │   ├── Button.stories.jsx
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ErrorBanner/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── HeightBoundContainer/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── MenuDropdown/
│   │   │   │   │   ├── SubMenuItem/
│   │   │   │   │   │   └── index.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── MethodBadge/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   ├── ResponsiveTabs/
│   │   │   │   │   ├── StyledWrapper.js
│   │   │   │   │   └── index.js
│   │   │   │   └── StatusBadge/
│   │   │   │       ├── StyledWrapper.js
│   │   │   │       └── index.js
│   │   │   └── utils/
│   │   │       ├── auth/
│   │   │       │   ├── index.js
│   │   │       │   └── index.spec.js
│   │   │       ├── beta-features.js
│   │   │       ├── bruno-clipboard.js
│   │   │       ├── codegenerator/
│   │   │       │   ├── auth.js
│   │   │       │   ├── har.js
│   │   │       │   └── targets.js
│   │   │       ├── codemirror/
│   │   │       │   ├── autocomplete.js
│   │   │       │   ├── autocomplete.spec.js
│   │   │       │   ├── autocompleteConstants.js
│   │   │       │   ├── brunoVarInfo.js
│   │   │       │   ├── brunoVarInfo.spec.js
│   │   │       │   ├── javascript-lint.js
│   │   │       │   ├── lang-detect.js
│   │   │       │   ├── linkAware.js
│   │   │       │   ├── linkAware.spec.js
│   │   │       │   ├── lint-errors.js
│   │   │       │   └── mock-data-hints.js
│   │   │       ├── collections/
│   │   │       │   ├── emptyStateRequest.js
│   │   │       │   ├── export.js
│   │   │       │   ├── index.js
│   │   │       │   ├── index.spec.js
│   │   │       │   └── search.js
│   │   │       ├── common/
│   │   │       │   ├── bulkKeyValueUtils.js
│   │   │       │   ├── codemirror.js
│   │   │       │   ├── constants.js
│   │   │       │   ├── error.js
│   │   │       │   ├── folders-requests-sorting.spec.js
│   │   │       │   ├── format-response.spec.js
│   │   │       │   ├── index.js
│   │   │       │   ├── index.spec.js
│   │   │       │   ├── ipc.js
│   │   │       │   ├── masked-editor.js
│   │   │       │   ├── path.js
│   │   │       │   ├── path.spec.js
│   │   │       │   ├── path.windows.spec.js
│   │   │       │   ├── platform.js
│   │   │       │   ├── regex.js
│   │   │       │   ├── regex.spec.js
│   │   │       │   └── setupPolyfills.js
│   │   │       ├── curl/
│   │   │       │   ├── content-type.js
│   │   │       │   ├── curl-to-json.js
│   │   │       │   ├── curl-to-json.spec.js
│   │   │       │   ├── index.js
│   │   │       │   ├── parse-curl.js
│   │   │       │   └── parse-curl.spec.js
│   │   │       ├── environments.js
│   │   │       ├── exporters/
│   │   │       │   ├── bruno-environment.js
│   │   │       │   ├── openapi-spec.js
│   │   │       │   ├── openapi-spec.spec.js
│   │   │       │   ├── opencollection.js
│   │   │       │   └── postman-collection.js
│   │   │       ├── filesystem.js
│   │   │       ├── git/
│   │   │       │   ├── index.js
│   │   │       │   └── index.spec.js
│   │   │       ├── idb/
│   │   │       │   └── index.js
│   │   │       ├── importers/
│   │   │       │   ├── bruno-collection.js
│   │   │       │   ├── bruno-environment.js
│   │   │       │   ├── common.js
│   │   │       │   ├── file-reader.js
│   │   │       │   ├── insomnia-collection.js
│   │   │       │   ├── openapi-collection.js
│   │   │       │   ├── opencollection.js
│   │   │       │   ├── postman-collection.js
│   │   │       │   ├── postman-environment.js
│   │   │       │   └── wsdl-collection.js
│   │   │       ├── network/
│   │   │       │   ├── cancelTokens.js
│   │   │       │   ├── grpc-event-listeners.js
│   │   │       │   ├── index.js
│   │   │       │   └── ws-event-listeners.js
│   │   │       ├── response/
│   │   │       │   └── index.js
│   │   │       ├── responseBodyProcessor.js
│   │   │       ├── tabs/
│   │   │       │   └── index.js
│   │   │       ├── terminal.js
│   │   │       ├── tests/
│   │   │       │   └── collections/
│   │   │       │       ├── examples-export-import.spec.js
│   │   │       │       ├── grpc-export-import.spec.js
│   │   │       │       └── items-sequencing.spec.js
│   │   │       ├── url/
│   │   │       │   ├── index.js
│   │   │       │   └── index.spec.js
│   │   │       └── workspaces/
│   │   │           └── index.js
│   │   ├── storybook/
│   │   │   ├── main.js
│   │   │   └── preview.jsx
│   │   └── tailwind.config.js
│   ├── bruno-cli/
│   │   ├── .gitignore
│   │   ├── bin/
│   │   │   └── bru.js
│   │   ├── changelog.md
│   │   ├── examples/
│   │   │   ├── report.html
│   │   │   └── report.json
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── src/
│   │   │   ├── commands/
│   │   │   │   ├── import.js
│   │   │   │   └── run.js
│   │   │   ├── constants.js
│   │   │   ├── index.js
│   │   │   ├── reporters/
│   │   │   │   ├── html.js
│   │   │   │   └── junit.js
│   │   │   ├── runner/
│   │   │   │   ├── awsv4auth-helper.js
│   │   │   │   ├── interpolate-string.js
│   │   │   │   ├── interpolate-vars.js
│   │   │   │   ├── prepare-request.js
│   │   │   │   └── run-single-request.js
│   │   │   ├── store/
│   │   │   │   └── tokenStore.js
│   │   │   └── utils/
│   │   │       ├── axios-instance.js
│   │   │       ├── bru.js
│   │   │       ├── collection.js
│   │   │       ├── common.js
│   │   │       ├── cookies.js
│   │   │       ├── environment.js
│   │   │       ├── filesystem.js
│   │   │       ├── form-data.js
│   │   │       ├── oauth2.js
│   │   │       ├── proxy-util.js
│   │   │       ├── request.js
│   │   │       ├── run.js
│   │   │       └── sanitize-results.js
│   │   └── tests/
│   │       ├── reporters/
│   │       │   ├── html.spec.js
│   │       │   ├── junit.spec.js
│   │       │   └── skip-body.spec.js
│   │       ├── runner/
│   │       │   ├── collection-json-from-pathname.spec.js
│   │       │   ├── fixtures/
│   │       │   │   ├── collection-json-from-pathname/
│   │       │   │   │   └── collection/
│   │       │   │   │       ├── bruno.json
│   │       │   │   │       ├── collection.bru
│   │       │   │   │       ├── folder_1/
│   │       │   │   │       │   ├── folder.bru
│   │       │   │   │       │   ├── folder_1/
│   │       │   │   │       │   │   ├── folder.bru
│   │       │   │   │       │   │   ├── request_1.bru
│   │       │   │   │       │   │   ├── request_2.bru
│   │       │   │   │       │   │   └── request_3.bru
│   │       │   │   │       │   ├── folder_2/
│   │       │   │   │       │   │   ├── folder.bru
│   │       │   │   │       │   │   ├── request_1.bru
│   │       │   │   │       │   │   ├── request_2.bru
│   │       │   │   │       │   │   └── request_3.bru
│   │       │   │   │       │   ├── request_1.bru
│   │       │   │   │       │   ├── request_2.bru
│   │       │   │   │       │   └── request_3.bru
│   │       │   │   │       ├── folder_2/
│   │       │   │   │       │   ├── folder.bru
│   │       │   │   │       │   ├── request_1.bru
│   │       │   │   │       │   ├── request_2.bru
│   │       │   │   │       │   └── request_3.bru
│   │       │   │   │       ├── request_1.bru
│   │       │   │   │       ├── request_2.bru
│   │       │   │   │       └── request_3.bru
│   │       │   │   └── opencollection/
│   │       │   │       └── collection/
│   │       │   │           ├── environments/
│   │       │   │           │   └── dev.yml
│   │       │   │           ├── get-users.yml
│   │       │   │           ├── opencollection.yml
│   │       │   │           └── users/
│   │       │   │               ├── create-user.yml
│   │       │   │               └── folder.yml
│   │       │   ├── prepare-request.spec.js
│   │       │   └── report-metadata.spec.js
│   │       └── utils/
│   │           ├── collection/
│   │           │   ├── create-collection-from-bruno-object.spec.js
│   │           │   └── get-call-stack.spec.js
│   │           ├── common.spec.js
│   │           ├── filesystem.spec.js
│   │           └── parse-environment-json.spec.js
│   ├── bruno-common/
│   │   ├── .gitignore
│   │   ├── babel.config.js
│   │   ├── jest.config.js
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── rollup.config.js
│   │   ├── src/
│   │   │   ├── example-status/
│   │   │   │   └── index.ts
│   │   │   ├── index.ts
│   │   │   ├── interpolate/
│   │   │   │   ├── index.spec.ts
│   │   │   │   └── index.ts
│   │   │   ├── runner/
│   │   │   │   ├── index.ts
│   │   │   │   ├── reports/
│   │   │   │   │   └── html/
│   │   │   │   │       ├── generate-report.ts
│   │   │   │   │       └── template.ts
│   │   │   │   ├── runner-summary.ts
│   │   │   │   ├── types/
│   │   │   │   │   └── index.ts
│   │   │   │   └── utils/
│   │   │   │       └── index.ts
│   │   │   ├── tags/
│   │   │   │   ├── index.spec.ts
│   │   │   │   └── index.ts
│   │   │   ├── utils/
│   │   │   │   ├── faker-functions.spec.ts
│   │   │   │   ├── faker-functions.ts
│   │   │   │   ├── form-data.spec.ts
│   │   │   │   ├── form-data.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── prompt-variables.spec.ts
│   │   │   │   ├── prompt-variables.ts
│   │   │   │   ├── template-hasher.spec.ts
│   │   │   │   ├── template-hasher.ts
│   │   │   │   └── url/
│   │   │   │       ├── index.spec.ts
│   │   │   │       └── index.ts
│   │   │   └── zoom/
│   │   │       └── index.ts
│   │   └── tsconfig.json
│   ├── bruno-converters/
│   │   ├── .gitignore
│   │   ├── babel.config.js
│   │   ├── jest.config.js
│   │   ├── jest.setup.js
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── rollup.config.js
│   │   ├── src/
│   │   │   ├── common/
│   │   │   │   └── index.js
│   │   │   ├── constants/
│   │   │   │   ├── index.js
│   │   │   │   └── regex.js
│   │   │   ├── index.js
│   │   │   ├── insomnia/
│   │   │   │   ├── env-utils.js
│   │   │   │   └── insomnia-to-bruno.js
│   │   │   ├── openapi/
│   │   │   │   └── openapi-to-bruno.js
│   │   │   ├── opencollection/
│   │   │   │   ├── bruno-to-opencollection.ts
│   │   │   │   ├── common/
│   │   │   │   │   ├── actions.ts
│   │   │   │   │   ├── assertions.ts
│   │   │   │   │   ├── auth.ts
│   │   │   │   │   ├── body.ts
│   │   │   │   │   ├── headers.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── params.ts
│   │   │   │   │   ├── scripts.ts
│   │   │   │   │   └── variables.ts
│   │   │   │   ├── environment.ts
│   │   │   │   ├── folder.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── items/
│   │   │   │   │   ├── graphql.ts
│   │   │   │   │   ├── grpc.ts
│   │   │   │   │   ├── http.ts
│   │   │   │   │   ├── index.ts
│   │   │   │   │   └── websocket.ts
│   │   │   │   ├── opencollection-to-bruno.ts
│   │   │   │   └── types.ts
│   │   │   ├── postman/
│   │   │   │   ├── bruno-to-postman.js
│   │   │   │   ├── postman-env-to-bruno-env.js
│   │   │   │   ├── postman-to-bruno.js
│   │   │   │   └── postman-translations.js
│   │   │   ├── utils/
│   │   │   │   ├── ast-utils.js
│   │   │   │   ├── bruno-send-request-transformer.js
│   │   │   │   ├── bruno-to-postman-translator.js
│   │   │   │   ├── flatten.js
│   │   │   │   ├── postman-to-bruno-translator.js
│   │   │   │   └── send-request-transformer.js
│   │   │   ├── workers/
│   │   │   │   ├── postman-translator-worker.js
│   │   │   │   └── scripts/
│   │   │   │       └── translate-postman-scripts.js
│   │   │   └── wsdl/
│   │   │       └── wsdl-to-bruno.js
│   │   ├── tests/
│   │   │   ├── bruno/
│   │   │   │   ├── bruno-to-postman-translations/
│   │   │   │   │   ├── cookies.test.js
│   │   │   │   │   ├── environment.test.js
│   │   │   │   │   ├── execution.test.js
│   │   │   │   │   ├── request.test.js
│   │   │   │   │   ├── response.test.js
│   │   │   │   │   ├── send-request.test.js
│   │   │   │   │   ├── testing-framework.test.js
│   │   │   │   │   └── variables.test.js
│   │   │   │   └── bruno-to-postman-with-tests.spec.js
│   │   │   ├── common/
│   │   │   │   └── sanitizeTag.spec.js
│   │   │   ├── insomnia/
│   │   │   │   ├── env-utils.spec.js
│   │   │   │   ├── insomnia-collection-v5.spec.js
│   │   │   │   └── insomnia-collection.spec.js
│   │   │   ├── openapi/
│   │   │   │   ├── openapi-to-bruno/
│   │   │   │   │   ├── openapi-auth.spec.js
│   │   │   │   │   ├── openapi-body.spec.js
│   │   │   │   │   ├── openapi-circular-references.spec.js
│   │   │   │   │   ├── openapi-import-grouping.spec.js
│   │   │   │   │   ├── openapi-path-parameters.spec.js
│   │   │   │   │   ├── openapi-server-variables.spec.js
│   │   │   │   │   ├── openapi-tags.spec.js
│   │   │   │   │   ├── openapi-to-bruno.spec.js
│   │   │   │   │   └── path-based-grouping-duplicate-names.spec.js
│   │   │   │   └── openapi-with-examples.spec.js
│   │   │   ├── postman/
│   │   │   │   ├── bruno-to-postman-with-examples.spec.js
│   │   │   │   ├── bruno-to-postman.spec.js
│   │   │   │   ├── postman-env-to-bruno-env.spec.js
│   │   │   │   ├── postman-to-bruno/
│   │   │   │   │   ├── collection-auth.spec.js
│   │   │   │   │   ├── folder-auth.spec.js
│   │   │   │   │   ├── postman-to-bruno.spec.js
│   │   │   │   │   ├── postman-translations/
│   │   │   │   │   │   ├── postman-request.spec.js
│   │   │   │   │   │   └── postman-response.spec.js
│   │   │   │   │   ├── process-auth.spec.js
│   │   │   │   │   ├── request-auth.spec.js
│   │   │   │   │   └── transform-description.spec.js
│   │   │   │   └── postman-translations/
│   │   │   │       ├── postman-comments.spec.js
│   │   │   │       ├── postman-cookie-conversions.spec.js
│   │   │   │       ├── postman-edge-cases.spec.js
│   │   │   │       ├── postman-test-commands.spec.js
│   │   │   │       ├── postman-variables.spec.js
│   │   │   │       └── transpiler-tests/
│   │   │   │           ├── combined.test.js
│   │   │   │           ├── environment.test.js
│   │   │   │           ├── exec-flow.test.js
│   │   │   │           ├── legacy-global-apis.test.js
│   │   │   │           ├── legacy-tests-syntax.test.js
│   │   │   │           ├── multiline-syntax.test.js
│   │   │   │           ├── postman-references.test.js
│   │   │   │           ├── request.test.js
│   │   │   │           ├── response.test.js
│   │   │   │           ├── scoped-variables.test.js
│   │   │   │           ├── testing-framework.test.js
│   │   │   │           ├── transformers/
│   │   │   │           │   └── send-request.test.js
│   │   │   │           ├── variable-chaining.test.js
│   │   │   │           └── variables.test.js
│   │   │   ├── postman-with-examples.spec.js
│   │   │   ├── utils/
│   │   │   │   ├── flatten.spec.js
│   │   │   │   └── getMemberExpressionString.test.js
│   │   │   └── wsdl/
│   │   │       └── wsdl-to-bruno.spec.js
│   │   ├── tsconfig.json
│   │   └── types/
│   │       └── common.d.ts
│   ├── bruno-docs/
│   │   ├── package.json
│   │   └── readme.md
│   ├── bruno-electron/
│   │   ├── .gitignore
│   │   ├── electron-builder-config.js
│   │   ├── notarize.js
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── resources/
│   │   │   ├── data/
│   │   │   │   └── sample-collection.json
│   │   │   ├── entitlements.mac.plist
│   │   │   └── icons/
│   │   │       └── mac/
│   │   │           └── icon.icns
│   │   ├── src/
│   │   │   ├── about/
│   │   │   │   └── about.css
│   │   │   ├── app/
│   │   │   │   ├── about-bruno.js
│   │   │   │   ├── apiSpecs.js
│   │   │   │   ├── apiSpecsWatcher.js
│   │   │   │   ├── collection-watcher.js
│   │   │   │   ├── collections.js
│   │   │   │   ├── dotenv-watcher.js
│   │   │   │   ├── menu-template.js
│   │   │   │   ├── onboarding.js
│   │   │   │   ├── system-monitor.js
│   │   │   │   └── workspace-watcher.js
│   │   │   ├── cache/
│   │   │   │   ├── apiSpecUids.js
│   │   │   │   └── requestUids.js
│   │   │   ├── index.js
│   │   │   ├── ipc/
│   │   │   │   ├── apiSpec.js
│   │   │   │   ├── collection.js
│   │   │   │   ├── filesystem.js
│   │   │   │   ├── git.js
│   │   │   │   ├── global-environments.js
│   │   │   │   ├── network/
│   │   │   │   │   ├── authorize-user-in-system-browser.js
│   │   │   │   │   ├── authorize-user-in-window.js
│   │   │   │   │   ├── awsv4auth-helper.js
│   │   │   │   │   ├── axios-instance.js
│   │   │   │   │   ├── cert-utils.js
│   │   │   │   │   ├── grpc-event-handlers.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── interpolate-string.js
│   │   │   │   │   ├── interpolate-vars.js
│   │   │   │   │   ├── prepare-gql-introspection-request.js
│   │   │   │   │   ├── prepare-grpc-request.js
│   │   │   │   │   ├── prepare-request.js
│   │   │   │   │   └── ws-event-handlers.js
│   │   │   │   ├── notifications.js
│   │   │   │   ├── openapi-sync.js
│   │   │   │   ├── preferences.js
│   │   │   │   ├── system-monitor.js
│   │   │   │   ├── terminal.js
│   │   │   │   └── workspace.js
│   │   │   ├── preload.js
│   │   │   ├── store/
│   │   │   │   ├── bruno-config.js
│   │   │   │   ├── collection-security.js
│   │   │   │   ├── cookies.js
│   │   │   │   ├── default-workspace.js
│   │   │   │   ├── env-secrets.js
│   │   │   │   ├── global-environments.js
│   │   │   │   ├── last-opened-collections.js
│   │   │   │   ├── last-opened-workspaces.js
│   │   │   │   ├── oauth2.js
│   │   │   │   ├── preferences.js
│   │   │   │   ├── process-env.js
│   │   │   │   ├── system-proxy.js
│   │   │   │   ├── ui-state-snapshot.js
│   │   │   │   ├── window-state.js
│   │   │   │   └── workspace-environments.js
│   │   │   └── utils/
│   │   │       ├── arch.js
│   │   │       ├── cancel-token.js
│   │   │       ├── collection-import.js
│   │   │       ├── collection.js
│   │   │       ├── common.js
│   │   │       ├── constants.js
│   │   │       ├── cookies.js
│   │   │       ├── deeplink.js
│   │   │       ├── default-location.js
│   │   │       ├── encryption.js
│   │   │       ├── filesystem.js
│   │   │       ├── filesystem.test.js
│   │   │       ├── form-data.js
│   │   │       ├── git.js
│   │   │       ├── oauth2-protocol-handler.js
│   │   │       ├── oauth2.js
│   │   │       ├── parse.js
│   │   │       ├── proxy-util.js
│   │   │       ├── tests/
│   │   │       │   ├── collection-utils.spec.js
│   │   │       │   ├── filesystem/
│   │   │       │   │   └── index.spec.js
│   │   │       │   └── fixtures/
│   │   │       │       └── filesystem/
│   │   │       │           └── copypath-removepath.js
│   │   │       ├── transformBrunoConfig.js
│   │   │       ├── window.js
│   │   │       ├── workspace-config.js
│   │   │       └── workspace-lock.js
│   │   └── tests/
│   │       ├── cookies-store.test.js
│   │       ├── network/
│   │       │   ├── authorize-user.spec.js
│   │       │   ├── execute-request-error-handler.spec.js
│   │       │   ├── fetch-gql-schema-handler.spec.js
│   │       │   ├── index.spec.js
│   │       │   ├── interpolate-vars.spec.js
│   │       │   ├── prepare-gql-introspection-request.spec.js
│   │       │   ├── prepare-grpc-request.spec.js
│   │       │   ├── prepare-request.spec.js
│   │       │   └── prepare-ws-request.spec.js
│   │       ├── prepare-request.test.js
│   │       ├── store/
│   │       │   ├── default-location-migration.spec.js
│   │       │   ├── global-environments.test.js
│   │       │   └── proxy-preferences.spec.js
│   │       └── utils/
│   │           ├── collection.spec.js
│   │           ├── common.spec.js
│   │           ├── encryption.spec.js
│   │           ├── form-data.spec.js
│   │           ├── proxy-util.spec.js
│   │           ├── transform-bruno-config.spec.js
│   │           └── workspace-config.spec.js
│   ├── bruno-filestore/
│   │   ├── .gitignore
│   │   ├── LICENSE.md
│   │   ├── README.md
│   │   ├── babel.config.js
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── rollup.config.js
│   │   ├── src/
│   │   │   ├── constants.ts
│   │   │   ├── formats/
│   │   │   │   ├── bru/
│   │   │   │   │   ├── index.ts
│   │   │   │   │   ├── tests/
│   │   │   │   │   │   ├── fixtures/
│   │   │   │   │   │   │   ├── oauth2-additional-params.js
│   │   │   │   │   │   │   └── request-parse-and-redact-body-data/
│   │   │   │   │   │   │       ├── input.bru
│   │   │   │   │   │   │       └── output.bru
│   │   │   │   │   │   ├── oauth2-additional-params.spec.js
│   │   │   │   │   │   └── request-parse-and-redact-body-data.spec.js
│   │   │   │   │   └── utils/
│   │   │   │   │       ├── oauth2-additional-params.ts
│   │   │   │   │       └── request-parse-and-redact-body-data.ts
│   │   │   │   └── yml/
│   │   │   │       ├── common/
│   │   │   │       │   ├── actions.ts
│   │   │   │       │   ├── assertions.ts
│   │   │   │       │   ├── auth-oauth2.ts
│   │   │   │       │   ├── auth.ts
│   │   │   │       │   ├── body.ts
│   │   │   │       │   ├── headers.ts
│   │   │   │       │   ├── params.ts
│   │   │   │       │   ├── scripts.ts
│   │   │   │       │   └── variables.ts
│   │   │   │       ├── index.ts
│   │   │   │       ├── items/
│   │   │   │       │   ├── parseGraphQLRequest.ts
│   │   │   │       │   ├── parseGrpcRequest.ts
│   │   │   │       │   ├── parseHttpRequest.ts
│   │   │   │       │   ├── parseScript.ts
│   │   │   │       │   ├── parseWebsocketRequest.ts
│   │   │   │       │   ├── stringifyGraphQLRequest.ts
│   │   │   │       │   ├── stringifyGrpcRequest.ts
│   │   │   │       │   ├── stringifyHttpRequest.ts
│   │   │   │       │   ├── stringifyScript.ts
│   │   │   │       │   └── stringifyWebsocketRequest.ts
│   │   │   │       ├── parseCollection.ts
│   │   │   │       ├── parseEnvironment.ts
│   │   │   │       ├── parseFolder.ts
│   │   │   │       ├── parseItem.ts
│   │   │   │       ├── stringifyCollection.ts
│   │   │   │       ├── stringifyEnvironment.ts
│   │   │   │       ├── stringifyFolder.ts
│   │   │   │       ├── stringifyItem.ts
│   │   │   │       └── utils.ts
│   │   │   ├── index.ts
│   │   │   ├── types/
│   │   │   │   └── bruno-lang.d.ts
│   │   │   ├── types.ts
│   │   │   ├── utils/
│   │   │   │   └── index.ts
│   │   │   └── workers/
│   │   │       ├── WorkerQueue/
│   │   │       │   └── index.ts
│   │   │       ├── index.ts
│   │   │       └── worker-script.ts
│   │   ├── test-results/
│   │   │   └── .last-run.json
│   │   └── tsconfig.json
│   ├── bruno-graphql-docs/
│   │   ├── .gitignore
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── rollup.config.js
│   │   ├── src/
│   │   │   ├── components/
│   │   │   │   ├── DocExplorer/
│   │   │   │   │   ├── Argument.tsx
│   │   │   │   │   ├── DefaultValue.tsx
│   │   │   │   │   ├── Directive.tsx
│   │   │   │   │   ├── FieldDoc.tsx
│   │   │   │   │   ├── MarkdownContent.tsx
│   │   │   │   │   ├── SchemaDoc.tsx
│   │   │   │   │   ├── SearchBox.tsx
│   │   │   │   │   ├── SearchResults.tsx
│   │   │   │   │   ├── TypeDoc.tsx
│   │   │   │   │   ├── TypeLink.tsx
│   │   │   │   │   └── types.ts
│   │   │   │   └── DocExplorer.tsx
│   │   │   ├── index.css
│   │   │   ├── index.ts
│   │   │   └── utility/
│   │   │       └── debounce.ts
│   │   └── tsconfig.json
│   ├── bruno-js/
│   │   ├── .gitignore
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── src/
│   │   │   ├── bru.js
│   │   │   ├── bruno-request.js
│   │   │   ├── bruno-response.js
│   │   │   ├── index.js
│   │   │   ├── interpolate-string.js
│   │   │   ├── runtime/
│   │   │   │   ├── assert-runtime.js
│   │   │   │   ├── script-runtime.js
│   │   │   │   ├── test-runtime.js
│   │   │   │   └── vars-runtime.js
│   │   │   ├── sandbox/
│   │   │   │   ├── bundle-libraries.js
│   │   │   │   ├── mixins/
│   │   │   │   │   └── typed-arrays.js
│   │   │   │   ├── node-vm/
│   │   │   │   │   ├── cjs-loader.js
│   │   │   │   │   ├── console.js
│   │   │   │   │   ├── constants.js
│   │   │   │   │   ├── index.js
│   │   │   │   │   ├── index.spec.js
│   │   │   │   │   └── utils.js
│   │   │   │   └── quickjs/
│   │   │   │       ├── index.js
│   │   │   │       ├── shims/
│   │   │   │       │   ├── bru.js
│   │   │   │       │   ├── bruno-request.js
│   │   │   │       │   ├── bruno-response.js
│   │   │   │       │   ├── console.js
│   │   │   │       │   ├── lib/
│   │   │   │       │   │   ├── axios.js
│   │   │   │       │   │   ├── axios.spec.js
│   │   │   │       │   │   ├── crypto-utils.js
│   │   │   │       │   │   ├── crypto-utils.spec.js
│   │   │   │       │   │   ├── index.js
│   │   │   │       │   │   ├── jwt.js
│   │   │   │       │   │   ├── nanoid.js
│   │   │   │       │   │   ├── path.js
│   │   │   │       │   │   ├── utils.js
│   │   │   │       │   │   └── uuid.js
│   │   │   │       │   ├── local-module.js
│   │   │   │       │   └── test.js
│   │   │   │       └── utils/
│   │   │   │           └── index.js
│   │   │   ├── test-results.js
│   │   │   ├── test.js
│   │   │   ├── utils/
│   │   │   │   ├── error-formatter.js
│   │   │   │   ├── error-formatter.spec.js
│   │   │   │   ├── results.js
│   │   │   │   └── sandbox.js
│   │   │   └── utils.js
│   │   └── tests/
│   │       ├── bruno-request-delete-header.spec.js
│   │       ├── runtime.spec.js
│   │       ├── setEnvVar.spec.js
│   │       └── utils.spec.js
│   ├── bruno-lang/
│   │   ├── .gitignore
│   │   ├── example/
│   │   │   ├── request.bru
│   │   │   ├── request.json
│   │   │   └── request.next.bru
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── src/
│   │   │   └── index.js
│   │   ├── v1/
│   │   │   ├── src/
│   │   │   │   ├── body-tag.js
│   │   │   │   ├── env-vars-tag.js
│   │   │   │   ├── headers-tag.js
│   │   │   │   ├── index.js
│   │   │   │   ├── inline-tag.js
│   │   │   │   ├── key-val-lines.js
│   │   │   │   ├── params-tag.js
│   │   │   │   ├── script-tag.js
│   │   │   │   ├── tests-tag.js
│   │   │   │   └── utils.js
│   │   │   └── tests/
│   │   │       ├── body-tag.spec.js
│   │   │       ├── bru-to-env-json.spec.js
│   │   │       ├── bru-to-json.spec.js
│   │   │       ├── env-json-to-bru.spec.js
│   │   │       ├── fixtures/
│   │   │       │   ├── env.bru
│   │   │       │   └── request.bru
│   │   │       ├── inline-tag.spec.js
│   │   │       ├── json-to-bru.spec.js
│   │   │       ├── key-val-lines.spec.js
│   │   │       ├── script-tag.spec.js
│   │   │       ├── tests-tag.spec.js
│   │   │       └── utils.spec.js
│   │   └── v2/
│   │       ├── src/
│   │       │   ├── bruToJson.js
│   │       │   ├── collectionBruToJson.js
│   │       │   ├── common/
│   │       │   │   ├── attributes.js
│   │       │   │   └── semantic-utils.js
│   │       │   ├── dotenvToJson.js
│   │       │   ├── envToJson.js
│   │       │   ├── example/
│   │       │   │   ├── bruToJson.js
│   │       │   │   ├── jsonToBru.js
│   │       │   │   ├── request/
│   │       │   │   │   └── bruToJson.js
│   │       │   │   └── response/
│   │       │   │       └── bruToJson.js
│   │       │   ├── jsonToBru.js
│   │       │   ├── jsonToCollectionBru.js
│   │       │   ├── jsonToEnv.js
│   │       │   └── utils.js
│   │       └── tests/
│   │           ├── assert.spec.js
│   │           ├── bruToJson.spec.js
│   │           ├── collection.spec.js
│   │           ├── custom-methods/
│   │           │   ├── custom-method.spec.js
│   │           │   └── fixtures/
│   │           │       ├── custom-method-with-special-chars.bru
│   │           │       ├── custom-method-with-special-chars.json
│   │           │       ├── custom-method-x-custom.bru
│   │           │       ├── custom-method-x-custom.json
│   │           │       ├── custom-method.bru
│   │           │       └── custom-method.json
│   │           ├── defaults.spec.js
│   │           ├── dictionary.spec.js
│   │           ├── dotenvToJson.spec.js
│   │           ├── envToJson.spec.js
│   │           ├── examples/
│   │           │   ├── examples.spec.js
│   │           │   └── fixtures/
│   │           │       ├── bru/
│   │           │       │   ├── bruToJson-empty-example.bru
│   │           │       │   ├── bruToJson-json-body.bru
│   │           │       │   ├── bruToJson-multiple-examples.bru
│   │           │       │   ├── bruToJson-no-examples.bru
│   │           │       │   ├── bruToJson-response-example.bru
│   │           │       │   ├── bruToJson-single-example.bru
│   │           │       │   ├── bruToJson-text-body.bru
│   │           │       │   ├── bruToJson-xml-body.bru
│   │           │       │   ├── complex-with-auth.bru
│   │           │       │   ├── examples-complex.bru
│   │           │       │   ├── examples-multiline-contenttype.bru
│   │           │       │   ├── examples-multiline-description.bru
│   │           │       │   ├── examples-simple.bru
│   │           │       │   ├── form-data-complex.bru
│   │           │       │   ├── jsonToBru-bodytypes.bru
│   │           │       │   ├── jsonToBru-multiple.bru
│   │           │       │   ├── jsonToBru-response.bru
│   │           │       │   ├── jsonToBru-simple.bru
│   │           │       │   ├── multiple-examples-variations.bru
│   │           │       │   └── oauth2-examples.bru
│   │           │       └── json/
│   │           │           ├── bruToJson-empty-example.json
│   │           │           ├── bruToJson-json-body.json
│   │           │           ├── bruToJson-multiple-examples.json
│   │           │           ├── bruToJson-no-examples.json
│   │           │           ├── bruToJson-response-example.json
│   │           │           ├── bruToJson-single-example.json
│   │           │           ├── bruToJson-text-body.json
│   │           │           ├── bruToJson-xml-body.json
│   │           │           ├── complex-with-auth.json
│   │           │           ├── examples-complex.json
│   │           │           ├── examples-multiline-contenttype.json
│   │           │           ├── examples-multiline-description.json
│   │           │           ├── examples-simple.json
│   │           │           ├── form-data-complex.json
│   │           │           ├── jsonToBru-bodytypes.json
│   │           │           ├── jsonToBru-multiple.json
│   │           │           ├── jsonToBru-response.json
│   │           │           ├── jsonToBru-simple.json
│   │           │           ├── multiple-examples-variations.json
│   │           │           └── oauth2-examples.json
│   │           ├── fixtures/
│   │           │   ├── collection.bru
│   │           │   ├── collection.json
│   │           │   ├── request.bru
│   │           │   └── request.json
│   │           ├── getKeyString.spec.js
│   │           ├── index.spec.js
│   │           ├── jsonToBru.spec.js
│   │           ├── jsonToEnv.spec.js
│   │           ├── list.spec.js
│   │           ├── oauth2-additional-params.spec.js
│   │           ├── script.spec.js
│   │           ├── settings/
│   │           │   ├── fixtures/
│   │           │   │   ├── settings-all-options.bru
│   │           │   │   ├── settings-all-options.json
│   │           │   │   ├── settings-minimal.bru
│   │           │   │   └── settings-minimal.json
│   │           │   └── settings.spec.js
│   │           ├── tags.spec.js
│   │           └── utils.spec.js
│   ├── bruno-query/
│   │   ├── .gitignore
│   │   ├── jest.config.js
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── rollup.config.js
│   │   ├── src/
│   │   │   └── index.ts
│   │   ├── tests/
│   │   │   └── index.spec.ts
│   │   └── tsconfig.json
│   ├── bruno-requests/
│   │   ├── .gitignore
│   │   ├── babel.config.js
│   │   ├── jest.config.js
│   │   ├── package.json
│   │   ├── rollup.config.js
│   │   ├── src/
│   │   │   ├── auth/
│   │   │   │   ├── digestauth-helper.js
│   │   │   │   ├── digestauth-helper.spec.js
│   │   │   │   ├── index.ts
│   │   │   │   ├── oauth2-helper.spec.ts
│   │   │   │   └── oauth2-helper.ts
│   │   │   ├── cookies/
│   │   │   │   ├── index.spec.ts
│   │   │   │   └── index.ts
│   │   │   ├── grpc/
│   │   │   │   ├── grpc-client.js
│   │   │   │   ├── grpc-client.spec.js
│   │   │   │   ├── grpcMessageGenerator.js
│   │   │   │   └── index.ts
│   │   │   ├── index.ts
│   │   │   ├── network/
│   │   │   │   ├── axios-instance.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── system-proxy/
│   │   │   │       ├── index.spec.js
│   │   │   │       ├── index.ts
│   │   │   │       ├── types.ts
│   │   │   │       └── utils/
│   │   │   │           ├── common.spec.ts
│   │   │   │           ├── common.ts
│   │   │   │           ├── linux.spec.ts
│   │   │   │           ├── linux.ts
│   │   │   │           ├── macos.spec.ts
│   │   │   │           ├── macos.ts
│   │   │   │           ├── windows.spec.ts
│   │   │   │           └── windows.ts
│   │   │   ├── scripting/
│   │   │   │   ├── index.ts
│   │   │   │   ├── send-request.spec.ts
│   │   │   │   └── send-request.ts
│   │   │   ├── utils/
│   │   │   │   ├── agent-cache.spec.ts
│   │   │   │   ├── agent-cache.ts
│   │   │   │   ├── ca-cert.ts
│   │   │   │   ├── http-https-agents.ts
│   │   │   │   ├── node-vault.spec.ts
│   │   │   │   ├── node-vault.ts
│   │   │   │   ├── proxy-util.spec.ts
│   │   │   │   ├── proxy-util.ts
│   │   │   │   ├── shell-env.spec.ts
│   │   │   │   ├── shell-env.ts
│   │   │   │   ├── timeline-agent.ts
│   │   │   │   ├── url-validation.spec.ts
│   │   │   │   └── url-validation.ts
│   │   │   └── ws/
│   │   │       ├── ws-client.js
│   │   │       ├── ws-url.js
│   │   │       └── ws-url.spec.ts
│   │   └── tsconfig.json
│   ├── bruno-schema/
│   │   ├── .gitignore
│   │   ├── license.md
│   │   ├── package.json
│   │   ├── readme.md
│   │   └── src/
│   │       ├── collections/
│   │       │   ├── index.js
│   │       │   ├── index.spec.js
│   │       │   ├── itemSchema.spec.js
│   │       │   └── requestSchema.spec.js
│   │       ├── common/
│   │       │   └── index.js
│   │       ├── index.js
│   │       └── utils/
│   │           └── testUtils.js
│   ├── bruno-schema-types/
│   │   ├── .gitignore
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── collection/
│   │   │   │   ├── collection.ts
│   │   │   │   ├── environment.ts
│   │   │   │   ├── examples.ts
│   │   │   │   ├── folder.ts
│   │   │   │   ├── index.ts
│   │   │   │   └── item.ts
│   │   │   ├── common/
│   │   │   │   ├── auth.ts
│   │   │   │   ├── file.ts
│   │   │   │   ├── graphql.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── key-value.ts
│   │   │   │   ├── multipart-form.ts
│   │   │   │   ├── scripts.ts
│   │   │   │   ├── uid.ts
│   │   │   │   └── variables.ts
│   │   │   ├── index.ts
│   │   │   └── requests/
│   │   │       ├── grpc.ts
│   │   │       ├── http.ts
│   │   │       ├── index.ts
│   │   │       └── websocket.ts
│   │   └── tsconfig.json
│   ├── bruno-tests/
│   │   ├── .gitignore
│   │   ├── .nvmrc
│   │   ├── additional-context-root-lib/
│   │   │   ├── index.js
│   │   │   └── lib.js
│   │   ├── collection/
│   │   │   ├── .env
│   │   │   ├── .gitignore
│   │   │   ├── .nvmrc
│   │   │   ├── asserts/
│   │   │   │   └── test-assert-combinations.bru
│   │   │   ├── auth/
│   │   │   │   ├── basic/
│   │   │   │   │   ├── via auth/
│   │   │   │   │   │   ├── Basic Auth 200.bru
│   │   │   │   │   │   └── Basic Auth 401.bru
│   │   │   │   │   └── via script/
│   │   │   │   │       ├── Basic Auth 200.bru
│   │   │   │   │       └── Basic Auth 401.bru
│   │   │   │   ├── bearer/
│   │   │   │   │   ├── via auth/
│   │   │   │   │   │   ├── Bearer Auth 200.bru
│   │   │   │   │   │   └── Bearer Auth undefined.bru
│   │   │   │   │   └── via headers/
│   │   │   │   │       └── Bearer Auth 200.bru
│   │   │   │   ├── cookie/
│   │   │   │   │   ├── Check.bru
│   │   │   │   │   └── Login.bru
│   │   │   │   ├── digest/
│   │   │   │   │   ├── Digest Auth 200.bru
│   │   │   │   │   ├── Digest Auth 401.bru
│   │   │   │   │   └── folder.bru
│   │   │   │   └── inherit auth/
│   │   │   │       └── inherit Bearer Auth 200.bru
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   ├── echo/
│   │   │   │   ├── echo bom json.bru
│   │   │   │   ├── echo form-url-encoded.bru
│   │   │   │   ├── echo headers.bru
│   │   │   │   ├── echo json.bru
│   │   │   │   ├── echo multipart scripting.bru
│   │   │   │   ├── echo multipart.bru
│   │   │   │   ├── echo numbers.bru
│   │   │   │   ├── echo plaintext.bru
│   │   │   │   ├── echo xml parsed(self closing tags).bru
│   │   │   │   ├── echo xml parsed.bru
│   │   │   │   ├── echo xml raw.bru
│   │   │   │   ├── multiline/
│   │   │   │   │   └── echo binary.bru
│   │   │   │   ├── test echo any.bru
│   │   │   │   └── test echo-any json.bru
│   │   │   ├── environments/
│   │   │   │   ├── Local.bru
│   │   │   │   └── Prod.bru
│   │   │   ├── file.json
│   │   │   ├── file.txt
│   │   │   ├── graphql/
│   │   │   │   ├── mutation.bru
│   │   │   │   ├── spacex.bru
│   │   │   │   └── variable-interpolation.bru
│   │   │   ├── lib/
│   │   │   │   ├── constants.js
│   │   │   │   ├── math.js
│   │   │   │   └── notes.js
│   │   │   ├── package.json
│   │   │   ├── ping.bru
│   │   │   ├── preview/
│   │   │   │   ├── html/
│   │   │   │   │   └── bruno.bru
│   │   │   │   └── image/
│   │   │   │       └── bruno.bru
│   │   │   ├── readme.md
│   │   │   ├── redirects/
│   │   │   │   ├── Disable Redirect.bru
│   │   │   │   ├── Test Multipart Redirect Consumed FormData.bru
│   │   │   │   ├── Test Multipart Redirect Multiple Fields.bru
│   │   │   │   ├── Test Multipart Redirect.bru
│   │   │   │   └── Test Redirect.bru
│   │   │   ├── request-setting/
│   │   │   │   ├── folder.bru
│   │   │   │   ├── follow-redirect.bru
│   │   │   │   └── max-redirect.bru
│   │   │   ├── response-parsing/
│   │   │   │   ├── test JSON false response.bru
│   │   │   │   ├── test JSON null response.bru
│   │   │   │   ├── test JSON number response.bru
│   │   │   │   ├── test JSON response.bru
│   │   │   │   ├── test JSON string response.bru
│   │   │   │   ├── test JSON string with quotes response.bru
│   │   │   │   ├── test JSON true response.bru
│   │   │   │   ├── test JSON unsafe-int response.bru
│   │   │   │   ├── test binary response.bru
│   │   │   │   ├── test html response.bru
│   │   │   │   ├── test image response.bru
│   │   │   │   ├── test invalid JSON response with formatting.bru
│   │   │   │   ├── test plain text response with formatting.bru
│   │   │   │   ├── test plain text response.bru
│   │   │   │   ├── test plain text utf16 response.bru
│   │   │   │   ├── test plain text utf16-be with BOM response.bru
│   │   │   │   ├── test plain text utf16-le with BOM response.bru
│   │   │   │   ├── test plain text utf8 with BOM response.bru
│   │   │   │   └── test xml response.bru
│   │   │   ├── scripting/
│   │   │   │   ├── api/
│   │   │   │   │   ├── bru/
│   │   │   │   │   │   ├── cookies/
│   │   │   │   │   │   │   ├── Redirect Cookie Save.bru
│   │   │   │   │   │   │   ├── clear.bru
│   │   │   │   │   │   │   ├── deleteCookie.bru
│   │   │   │   │   │   │   ├── deleteCookies.bru
│   │   │   │   │   │   │   ├── folder.bru
│   │   │   │   │   │   │   ├── getCookie.bru
│   │   │   │   │   │   │   ├── getCookies.bru
│   │   │   │   │   │   │   ├── hasCookie.bru
│   │   │   │   │   │   │   ├── setCookie.bru
│   │   │   │   │   │   │   ├── setCookieHeader.bru
│   │   │   │   │   │   │   └── setCookies.bru
│   │   │   │   │   │   ├── deleteAllCollectionVars.bru
│   │   │   │   │   │   ├── deleteAllEnvVars.bru
│   │   │   │   │   │   ├── deleteAllGlobalEnvVars.bru
│   │   │   │   │   │   ├── deleteCollectionVar.bru
│   │   │   │   │   │   ├── deleteGlobalEnvVar.bru
│   │   │   │   │   │   ├── folder.bru
│   │   │   │   │   │   ├── getAllCollectionVars.bru
│   │   │   │   │   │   ├── getAllEnvVars.bru
│   │   │   │   │   │   ├── getAllGlobalEnvVars.bru
│   │   │   │   │   │   ├── getAllVars.bru
│   │   │   │   │   │   ├── getCollectionName.bru
│   │   │   │   │   │   ├── getCollectionVar.bru
│   │   │   │   │   │   ├── getEnvName.bru
│   │   │   │   │   │   ├── getEnvVar.bru
│   │   │   │   │   │   ├── getFolderVar.bru
│   │   │   │   │   │   ├── getProcessEnv.bru
│   │   │   │   │   │   ├── getRequestVar.bru
│   │   │   │   │   │   ├── getVar.bru
│   │   │   │   │   │   ├── hasCollectionVar.bru
│   │   │   │   │   │   ├── interpolate.bru
│   │   │   │   │   │   ├── isSafeMode.bru
│   │   │   │   │   │   ├── runRequest-1.bru
│   │   │   │   │   │   ├── runRequest-2.bru
│   │   │   │   │   │   ├── runRequest.bru
│   │   │   │   │   │   ├── runner/
│   │   │   │   │   │   │   ├── 1.bru
│   │   │   │   │   │   │   ├── 2.bru
│   │   │   │   │   │   │   └── 3.bru
│   │   │   │   │   │   ├── send-request/
│   │   │   │   │   │   │   ├── folder.bru
│   │   │   │   │   │   │   ├── get-url-string.bru
│   │   │   │   │   │   │   └── usage-patterns.bru
│   │   │   │   │   │   ├── setCollectionVar.bru
│   │   │   │   │   │   ├── setEnvVar.bru
│   │   │   │   │   │   └── setVar.bru
│   │   │   │   │   ├── req/
│   │   │   │   │   │   ├── deleteHeader.bru
│   │   │   │   │   │   ├── deleteHeaders.bru
│   │   │   │   │   │   ├── getBody.bru
│   │   │   │   │   │   ├── getHeader.bru
│   │   │   │   │   │   ├── getHeaders.bru
│   │   │   │   │   │   ├── getHost.bru
│   │   │   │   │   │   ├── getMethod.bru
│   │   │   │   │   │   ├── getName.bru
│   │   │   │   │   │   ├── getPath.bru
│   │   │   │   │   │   ├── getPathParams.bru
│   │   │   │   │   │   ├── getQueryString.bru
│   │   │   │   │   │   ├── getTags.bru
│   │   │   │   │   │   ├── getUrl.bru
│   │   │   │   │   │   ├── setBody/
│   │   │   │   │   │   │   └── form-urlencoded/
│   │   │   │   │   │   │       ├── array body.bru
│   │   │   │   │   │   │       ├── content-type via setHeader.bru
│   │   │   │   │   │   │       ├── folder.bru
│   │   │   │   │   │   │       ├── object body.bru
│   │   │   │   │   │   │       └── string body.bru
│   │   │   │   │   │   ├── setBody.bru
│   │   │   │   │   │   ├── setHeader.bru
│   │   │   │   │   │   ├── setHeaders.bru
│   │   │   │   │   │   ├── setMethod.bru
│   │   │   │   │   │   └── setUrl.bru
│   │   │   │   │   └── res/
│   │   │   │   │       ├── getBody.bru
│   │   │   │   │       ├── getHeader.bru
│   │   │   │   │       ├── getHeaders.bru
│   │   │   │   │       ├── getResponseTime.bru
│   │   │   │   │       ├── getSize.bru
│   │   │   │   │       ├── getStatus.bru
│   │   │   │   │       ├── getStatusText.bru
│   │   │   │   │       ├── getUrl.bru
│   │   │   │   │       └── setBody/
│   │   │   │   │           ├── array.bru
│   │   │   │   │           ├── boolean.bru
│   │   │   │   │           ├── folder.bru
│   │   │   │   │           ├── isJson after setBody.bru
│   │   │   │   │           ├── null.bru
│   │   │   │   │           ├── number.bru
│   │   │   │   │           ├── object.bru
│   │   │   │   │           ├── string.bru
│   │   │   │   │           └── undefined.bru
│   │   │   │   ├── inbuilt modules/
│   │   │   │   │   ├── axios/
│   │   │   │   │   │   └── axios-pre-req-script.bru
│   │   │   │   │   ├── cheerio/
│   │   │   │   │   │   └── cheerio.bru
│   │   │   │   │   ├── crypto-js/
│   │   │   │   │   │   └── crypto-js-pre-request-script.bru
│   │   │   │   │   ├── crypto-utils/
│   │   │   │   │   │   ├── getRandomValues.bru
│   │   │   │   │   │   └── randomBytes.bru
│   │   │   │   │   ├── nanoid/
│   │   │   │   │   │   └── nanoid.bru
│   │   │   │   │   ├── tv4/
│   │   │   │   │   │   ├── folder.bru
│   │   │   │   │   │   └── tv4.bru
│   │   │   │   │   ├── utils.js
│   │   │   │   │   ├── uuid/
│   │   │   │   │   │   └── uuid.bru
│   │   │   │   │   └── xml2js/
│   │   │   │   │       └── xml2js.bru
│   │   │   │   ├── js/
│   │   │   │   │   ├── data types - request vars.bru
│   │   │   │   │   ├── data types.bru
│   │   │   │   │   ├── folder-collection script-tests pre.bru
│   │   │   │   │   ├── folder-collection script-tests.bru
│   │   │   │   │   ├── folder.bru
│   │   │   │   │   └── setTimeout.bru
│   │   │   │   ├── local modules/
│   │   │   │   │   ├── additional context root.bru
│   │   │   │   │   ├── invalid and valid module imports.bru
│   │   │   │   │   ├── sum (without js extn).bru
│   │   │   │   │   └── sum.bru
│   │   │   │   ├── node-builtins/
│   │   │   │   │   ├── buffer.bru
│   │   │   │   │   ├── encoding.bru
│   │   │   │   │   ├── events.bru
│   │   │   │   │   ├── fetch-api.bru
│   │   │   │   │   ├── intl.bru
│   │   │   │   │   ├── json.bru
│   │   │   │   │   ├── node-crypto.bru
│   │   │   │   │   ├── node-fs.bru
│   │   │   │   │   ├── node-os.bru
│   │   │   │   │   ├── node-path.bru
│   │   │   │   │   ├── node-querystring.bru
│   │   │   │   │   ├── node-stream.bru
│   │   │   │   │   ├── node-util.bru
│   │   │   │   │   ├── node-zlib.bru
│   │   │   │   │   ├── process.bru
│   │   │   │   │   ├── timers.bru
│   │   │   │   │   ├── url.bru
│   │   │   │   │   └── web-crypto.bru
│   │   │   │   └── npm modules/
│   │   │   │       ├── ajv.bru
│   │   │   │       ├── external-lib-bru-req-res.bru
│   │   │   │       ├── fakerjs.bru
│   │   │   │       └── jose.bru
│   │   │   ├── string interpolation/
│   │   │   │   ├── env vars.bru
│   │   │   │   ├── folder.bru
│   │   │   │   ├── missing values.bru
│   │   │   │   ├── objects-arrays interpolation.bru
│   │   │   │   ├── process env vars.bru
│   │   │   │   └── runtime vars.bru
│   │   │   └── url-serialization/
│   │   │       ├── Duplicate Keys.bru
│   │   │       └── folder.bru
│   │   ├── collection_level_oauth2/
│   │   │   ├── .gitignore
│   │   │   ├── .nvmrc
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   ├── environments/
│   │   │   │   ├── Local.bru
│   │   │   │   └── Prod.bru
│   │   │   ├── package.json
│   │   │   ├── readme.md
│   │   │   └── resource.bru
│   │   ├── collection_oauth2/
│   │   │   ├── .env
│   │   │   ├── .gitignore
│   │   │   ├── .nvmrc
│   │   │   ├── auth/
│   │   │   │   └── oauth2/
│   │   │   │       ├── authorization_code/
│   │   │   │       │   ├── github token with authorize.bru
│   │   │   │       │   ├── google token with authorize.bru
│   │   │   │       │   ├── resource.bru
│   │   │   │       │   └── token with authorize.bru
│   │   │   │       ├── client_credentials/
│   │   │   │       │   ├── resource.bru
│   │   │   │       │   └── token.bru
│   │   │   │       └── password_credentials/
│   │   │   │           ├── resource.bru
│   │   │   │           └── token.bru
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   ├── environments/
│   │   │   │   ├── Local.bru
│   │   │   │   └── Prod.bru
│   │   │   ├── file.json
│   │   │   ├── package.json
│   │   │   └── readme.md
│   │   ├── external-lib-with-bru-req-res-objects/
│   │   │   ├── index.js
│   │   │   └── package.json
│   │   ├── keycloak-authorization_code/
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   ├── environments/
│   │   │   │   └── oauth2.bru
│   │   │   ├── user_info_coll-auth.bru
│   │   │   ├── user_info_custom.bru
│   │   │   └── user_info_request-auth.bru
│   │   ├── keycloak-client-credentials/
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   ├── environments/
│   │   │   │   └── oauth2.bru
│   │   │   ├── user_info_coll-auth.bru
│   │   │   ├── user_info_custom.bru
│   │   │   └── user_info_request-auth.bru
│   │   ├── keycloak-password-credentials/
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   ├── environments/
│   │   │   │   └── oauth2.bru
│   │   │   ├── user_info_coll-auth.bru
│   │   │   ├── user_info_custom.bru
│   │   │   └── user_info_request-auth.bru
│   │   ├── package.json
│   │   ├── readme.md
│   │   ├── sandwich_exec/
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   └── folder/
│   │   │       ├── folder.bru
│   │   │       └── request.bru
│   │   ├── sequential_exec/
│   │   │   ├── bruno.json
│   │   │   ├── collection.bru
│   │   │   └── folder/
│   │   │       ├── folder.bru
│   │   │       └── request.bru
│   │   └── src/
│   │       ├── auth/
│   │       │   ├── basic.js
│   │       │   ├── bearer.js
│   │       │   ├── cookie.js
│   │       │   ├── index.js
│   │       │   ├── oauth2/
│   │       │   │   ├── authorizationCode.js
│   │       │   │   ├── clientCredentials.js
│   │       │   │   └── passwordCredentials.js
│   │       │   └── wsse.js
│   │       ├── echo/
│   │       │   └── index.js
│   │       ├── graphql/
│   │       │   └── index.js
│   │       ├── index.js
│   │       ├── mix/
│   │       │   └── index.js
│   │       ├── multipart/
│   │       │   ├── form-data-parser.js
│   │       │   └── index.js
│   │       ├── redirect/
│   │       │   └── index.js
│   │       ├── utils/
│   │       │   └── xmlParser.js
│   │       └── ws/
│   │           └── index.js
│   └── bruno-toml/
│       ├── lib/
│       │   └── stringify
│       ├── package.json
│       ├── src/
│       │   ├── jsonToToml.js
│       │   └── tomlToJson.js
│       └── tests/
│           ├── headers/
│           │   ├── disabled-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   ├── dotted-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   ├── duplicate-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   ├── empty-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   ├── reserved-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   ├── simple-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   ├── spaces-in-header/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   └── unicode-in-header/
│           │       ├── request.json
│           │       └── request.toml
│           ├── index.spec.js
│           ├── methods/
│           │   ├── delete/
│           │   │   ├── request.json
│           │   │   └── request.toml
│           │   └── get/
│           │       ├── request.json
│           │       └── request.toml
│           └── scripts/
│               ├── post-response/
│               │   ├── request.json
│               │   └── request.toml
│               ├── pre-request/
│               │   ├── request.json
│               │   └── request.toml
│               └── tests/
│                   ├── request.json
│                   └── request.toml
├── playwright/
│   ├── codegen.ts
│   ├── electron.ts
│   └── index.ts
├── playwright.config.ts
├── publishing.md
├── readme.md
├── scripts/
│   ├── build-electron.js
│   ├── build-electron.sh
│   ├── changed-packages.js
│   ├── count-locs.js
│   ├── dev-hot-reload.js
│   ├── dev.js
│   ├── pr-checkout.js
│   └── setup.js
├── security.md
└── tests/
    ├── asserts/
    │   ├── add-assertions.spec.ts
    │   ├── fixtures/
    │   │   └── collection/
    │   │       ├── bruno.json
    │   │       ├── environments/
    │   │       │   └── Local.bru
    │   │       └── ping.bru
    │   └── init-user-data/
    │       └── preferences.json
    ├── collection/
    │   ├── close-all-collections/
    │   │   ├── close-all-collections.spec.ts
    │   │   ├── fixtures/
    │   │   │   └── collections/
    │   │   │       ├── collection 1/
    │   │   │       │   ├── bruno.json
    │   │   │       │   └── test-request.bru
    │   │   │       └── collection 2/
    │   │   │           ├── bruno.json
    │   │   │           └── test-request.bru
    │   │   └── init-user-data/
    │   │       └── preferences.json
    │   ├── create/
    │   │   └── create-collection.spec.ts
    │   ├── create-requests/
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── bruno.json
    │   │   │       └── folder1/
    │   │   │           └── folder.bru
    │   │   ├── graphql-requests.spec.ts
    │   │   ├── grpc-requests.spec.ts
    │   │   ├── http-requests.spec.ts
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   └── ws-requests.spec.ts
    │   ├── default-ignores/
    │   │   └── default-ignores.spec.ts
    │   ├── default-sandbox-mode/
    │   │   └── default-sandbox-mode.spec.ts
    │   ├── delete/
    │   │   └── delete-collection.spec.ts
    │   ├── draft/
    │   │   ├── draft-indicator.spec.ts
    │   │   ├── draft-values-in-requests.spec.ts
    │   │   └── fixtures/
    │   │       ├── grpcbin.proto
    │   │       └── mitmproxy-ca-cert.cer
    │   ├── moving-requests/
    │   │   ├── cross-collection-drag-drop-folder.spec.ts
    │   │   ├── cross-collection-drag-drop-request.spec.ts
    │   │   └── tag-persistence.spec.ts
    │   ├── moving-tabs/
    │   │   └── move-tabs.spec.ts
    │   └── open/
    │       └── open-multiple-collections.spec.ts
    ├── cookies/
    │   ├── cookie-persistence.spec.ts
    │   └── corrupted-passkey.spec.ts
    ├── devtools/
    │   └── performance/
    │       └── performance-tab.spec.ts
    ├── dotenv/
    │   └── special-chars-collection-path/
    │       └── dotenv-special-chars.spec.ts
    ├── editable-table/
    │   └── editable-table.spec.ts
    ├── environments/
    │   ├── api-deleteEnvVar/
    │   │   ├── api-deleteEnvVar.spec.ts
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── api-deleteEnvVar.bru
    │   │   │       ├── bruno.json
    │   │   │       └── environments/
    │   │   │           └── Stage.bru
    │   │   └── init-user-data/
    │   │       ├── collection-security.json
    │   │       └── preferences.json
    │   ├── api-setEnvVar/
    │   │   ├── api-setEnvVar-with-persist.spec.ts
    │   │   ├── api-setEnvVar-without-persist.spec.ts
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── api-setEnvVar-with-persist.bru
    │   │   │       ├── api-setEnvVar-without-persist.bru
    │   │   │       ├── bruno.json
    │   │   │       ├── environments/
    │   │   │       │   └── Stage.bru
    │   │   │       └── multiple-persist-vars-folder/
    │   │   │           ├── folder.bru
    │   │   │           ├── multiple-persist-vars-1.bru
    │   │   │           └── multiple-persist-vars-2.bru
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   └── multiple-persist-vars.spec.ts
    │   ├── collection-env-config-selection/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   ├── environments/
    │   │   │   │   ├── dev.bru
    │   │   │   │   └── prod.bru
    │   │   │   └── test-request.bru
    │   │   ├── collection-env-config-selection.spec.ts
    │   │   └── init-user-data/
    │   │       ├── collection-security.json
    │   │       └── preferences.json
    │   ├── color-picker/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   └── test-request.bru
    │   │   ├── color-picker.spec.ts
    │   │   └── init-user-data/
    │   │       ├── collection-security.json
    │   │       ├── global-environments.json
    │   │       └── preferences.json
    │   ├── create-environment/
    │   │   ├── collection-env-create.spec.ts
    │   │   ├── fixtures/
    │   │   │   └── bruno-collection.json
    │   │   └── global-env-create.spec.ts
    │   ├── export-environment/
    │   │   ├── collection-env-export/
    │   │   │   ├── collection-env-export.spec.ts
    │   │   │   ├── fixtures/
    │   │   │   │   └── collection/
    │   │   │   │       ├── bruno.json
    │   │   │   │       ├── environments/
    │   │   │   │       │   ├── local.bru
    │   │   │   │       │   └── prod.bru
    │   │   │   │       └── test-request.bru
    │   │   │   └── init-user-data/
    │   │   │       ├── collection-security.json
    │   │   │       ├── global-environments.json
    │   │   │       └── preferences.json
    │   │   └── global-env-export/
    │   │       ├── fixtures/
    │   │       │   └── collection/
    │   │       │       ├── bruno.json
    │   │       │       └── test-request.bru
    │   │       ├── global-env-export.spec.ts
    │   │       └── init-user-data/
    │   │           ├── collection-security.json
    │   │           ├── global-environments.json
    │   │           └── preferences.json
    │   ├── fixtures/
    │   │   └── environment-exports/
    │   │       ├── bruno-collection-environments/
    │   │       │   ├── local.json
    │   │       │   └── prod.json
    │   │       ├── bruno-collection-environments.json
    │   │       ├── bruno-global-environments/
    │   │       │   ├── local.json
    │   │       │   └── prod.json
    │   │       ├── bruno-global-environments.json
    │   │       └── local.json
    │   ├── focus-retention/
    │   │   └── environment-focus.spec.ts
    │   ├── global-env-config-selection/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   └── test-request.bru
    │   │   ├── global-env-config-selection.spec.ts
    │   │   └── init-user-data/
    │   │       ├── collection-security.json
    │   │       ├── global-environments.json
    │   │       └── preferences.json
    │   ├── import-environment/
    │   │   ├── bruno-env-import/
    │   │   │   ├── collection-env-import/
    │   │   │   │   ├── collection-env-import.spec.ts
    │   │   │   │   ├── fixtures/
    │   │   │   │   │   └── collection/
    │   │   │   │   │       ├── bruno.json
    │   │   │   │   │       └── test-request.bru
    │   │   │   │   └── init-user-data/
    │   │   │   │       ├── collection-security.json
    │   │   │   │       └── preferences.json
    │   │   │   └── global-env-import/
    │   │   │       ├── fixtures/
    │   │   │       │   └── collection/
    │   │   │       │       ├── bruno.json
    │   │   │       │       └── test-request.bru
    │   │   │       ├── global-env-import.spec.ts
    │   │   │       └── init-user-data/
    │   │   │           ├── collection-security.json
    │   │   │           └── preferences.json
    │   │   ├── collection-env-import.spec.ts
    │   │   ├── env-color-import/
    │   │   │   ├── env-color-import.spec.ts
    │   │   │   ├── fixtures/
    │   │   │   │   ├── collection/
    │   │   │   │   │   ├── bruno.json
    │   │   │   │   │   └── test-request.bru
    │   │   │   │   ├── env-with-color.json
    │   │   │   │   └── multiple-envs-with-colors.json
    │   │   │   └── init-user-data/
    │   │   │       ├── collection-security.json
    │   │   │       └── preferences.json
    │   │   ├── fixtures/
    │   │   │   ├── collection-env.json
    │   │   │   ├── collection.json
    │   │   │   └── global-env.json
    │   │   └── global-env-import.spec.ts
    │   ├── multiline-variables/
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── bruno.json
    │   │   │       ├── collection.bru
    │   │   │       ├── environments/
    │   │   │       │   └── Test.bru
    │   │   │       ├── multiline-test.bru
    │   │   │       └── request.bru
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   ├── read-multiline-environment.spec.ts
    │   │   └── write-multiline-variable.spec.ts
    │   └── update-global-environment-via-script/
    │       ├── fixtures/
    │       │   └── collection/
    │       │       ├── bruno.json
    │       │       ├── collection.bru
    │       │       └── test-request.bru
    │       ├── global-env-update-via-script.spec.ts
    │       └── init-user-data/
    │           ├── collection-security.json
    │           ├── global-environments.json
    │           └── preferences.json
    ├── footer/
    │   ├── notifications/
    │   │   └── notifications.spec.js
    │   └── sidebar-toggle/
    │       └── sidebar-toggle.spec.js
    ├── global-environments/
    │   ├── collection/
    │   │   ├── bruno.json
    │   │   └── set-global-nonstring.bru
    │   ├── init-user-data/
    │   │   └── preferences.json
    │   └── non-string-values.spec.ts
    ├── grpc/
    │   ├── make-request/
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── HelloService/
    │   │   │       │   ├── BidiHello.bru
    │   │   │       │   ├── LotOfGreetings.bru
    │   │   │       │   ├── LotOfReplies.bru
    │   │   │       │   ├── SayHello.bru
    │   │   │       │   └── folder.bru
    │   │   │       ├── bruno.json
    │   │   │       ├── collection.bru
    │   │   │       └── environments/
    │   │   │           └── Env.bru
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   └── make-request.spec.ts
    │   ├── metadata/
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── bruno.json
    │   │   │       ├── collection.bru
    │   │   │       └── sayHello.bru
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   └── with-bin-metadata.spec.ts
    │   └── method-search/
    │       ├── fixtures/
    │       │   └── grpc-collection/
    │       │       ├── SayHello.bru
    │       │       ├── bruno.json
    │       │       └── environments/
    │       │           └── GrpcEnv.bru
    │       ├── grpc-method-search.spec.ts
    │       └── init-user-data/
    │           ├── collection-security.json
    │           └── preferences.json
    ├── import/
    │   ├── bruno/
    │   │   ├── fixtures/
    │   │   │   ├── bruno-invalid-corrupted.json
    │   │   │   ├── bruno-malformed.json
    │   │   │   ├── bruno-missing-required-fields.json
    │   │   │   ├── bruno-testbench.json
    │   │   │   └── bruno-with-examples.json
    │   │   ├── import-bruno-corrupted-fails.spec.ts
    │   │   ├── import-bruno-missing-required-schema.spec.ts
    │   │   ├── import-bruno-testbench.spec.ts
    │   │   └── import-bruno-with-examples.spec.ts
    │   ├── bulk-import/
    │   │   ├── 001-multiple-files-upload.spec.ts
    │   │   └── 002-all-collection-types.spec.ts
    │   ├── file-types/
    │   │   ├── file-input-acceptance.spec.ts
    │   │   ├── fixtures/
    │   │   │   └── invalid.txt
    │   │   └── invalid-file-handling.spec.ts
    │   ├── insomnia/
    │   │   ├── fixtures/
    │   │   │   ├── insomnia-malformed.json
    │   │   │   ├── insomnia-v4-with-envs.json
    │   │   │   ├── insomnia-v4.json
    │   │   │   ├── insomnia-v5-invalid-missing-collection.yaml
    │   │   │   ├── insomnia-v5-with-envs.yaml
    │   │   │   └── insomnia-v5.yaml
    │   │   ├── import-insomnia-v4-environments.spec.ts
    │   │   ├── import-insomnia-v4.spec.ts
    │   │   ├── import-insomnia-v5-environments.spec.ts
    │   │   ├── import-insomnia-v5.spec.ts
    │   │   ├── invalid-missing-collection.spec.ts
    │   │   └── malformed-structure.spec.ts
    │   ├── openapi/
    │   │   ├── cli/
    │   │   │   ├── fixtures/
    │   │   │   │   └── openapi.json
    │   │   │   └── group-by-import.spec.ts
    │   │   ├── duplicate-operation-names-fix.spec.ts
    │   │   ├── fixtures/
    │   │   │   ├── openapi-comprehensive.yaml
    │   │   │   ├── openapi-duplicate-operation-name.yaml
    │   │   │   ├── openapi-invalid-version.yaml
    │   │   │   ├── openapi-malformed.yaml
    │   │   │   ├── openapi-missing-info.yaml
    │   │   │   ├── openapi-newline-in-operation-name.yaml
    │   │   │   ├── openapi-path-grouping.json
    │   │   │   ├── openapi-simple.json
    │   │   │   ├── openapi-with-examples.yaml
    │   │   │   ├── openapi-with-security-schemes.json
    │   │   │   └── openapi-without-security-schemes.json
    │   │   ├── import-openapi-json.spec.ts
    │   │   ├── import-openapi-with-examples.spec.ts
    │   │   ├── import-openapi-yaml.spec.ts
    │   │   ├── malformed-yaml.spec.ts
    │   │   ├── missing-info.spec.ts
    │   │   ├── operation-name-with-newlines-fix.spec.ts
    │   │   ├── path-based-grouping.spec.ts
    │   │   └── security-schemes-import.spec.ts
    │   ├── postman/
    │   │   ├── fixtures/
    │   │   │   ├── postman-invalid-missing-info.json
    │   │   │   ├── postman-invalid-schema.json
    │   │   │   ├── postman-malformed.json
    │   │   │   ├── postman-v20.json
    │   │   │   ├── postman-v21.json
    │   │   │   └── postman-with-examples.json
    │   │   ├── import-postman-v20.spec.ts
    │   │   ├── import-postman-v21.spec.ts
    │   │   ├── import-postman-with-examples.spec.ts
    │   │   ├── invalid-json.spec.ts
    │   │   ├── invalid-missing-info.spec.ts
    │   │   ├── invalid-schema.spec.ts
    │   │   └── malformed-structure.spec.ts
    │   ├── test-data/
    │   │   ├── sample-bruno.json
    │   │   ├── sample-insomnia.json
    │   │   ├── sample-openapi.yaml
    │   │   └── sample-postman.json
    │   ├── url-import/
    │   │   ├── github-repository-import.spec.ts
    │   │   ├── insomnia-url-import.spec.ts
    │   │   ├── openapi-url-import.spec.ts
    │   │   └── postman-url-import.spec.ts
    │   └── wsdl/
    │       ├── fixtures/
    │       │   ├── wsdl-bruno.json
    │       │   └── wsdl.xml
    │       └── import-wsdl.spec.ts
    ├── interpolation/
    │   ├── collection/
    │   │   ├── bruno.json
    │   │   ├── echo-request-odata.bru
    │   │   └── echo-request-url.bru
    │   ├── dynamic-variable/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   └── set-var-dynamic-variable.bru
    │   │   ├── init-user-data/
    │   │   │   └── preferences.json
    │   │   └── set-var-dynamic-variable.spec.ts
    │   ├── init-user-data/
    │   │   ├── collection-security.json
    │   │   └── preferences.json
    │   ├── interpolate-request-url.spec.ts
    │   └── prompt-variables/
    │       ├── fixtures/
    │       │   ├── client.pfx
    │       │   └── collection/
    │       │       ├── bruno.json
    │       │       ├── collection.bru
    │       │       ├── environments/
    │       │       │   └── local.bru
    │       │       └── http-folder/
    │       │           ├── folder.bru
    │       │           ├── http-request-without-ca.bru
    │       │           └── https-request-with-ca.bru
    │       ├── http-request-prompt-variables.spec.ts
    │       └── init-user-data/
    │           ├── collection-security.json
    │           ├── global-environments.json
    │           ├── preferences.json
    │           └── ui-state-snapshot.json
    ├── onboarding/
    │   ├── init-user-data/
    │   │   └── preferences.json
    │   ├── init-user-data-fresh/
    │   │   └── preferences.json
    │   ├── sample-collection.spec.ts
    │   └── welcome-modal.spec.ts
    ├── preferences/
    │   ├── autosave/
    │   │   └── autosave.spec.ts
    │   ├── default-collection-location/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   ├── collection.bru
    │   │   │   ├── environments/
    │   │   │   │   └── Test.bru
    │   │   │   └── request.bru
    │   │   ├── default-collection-location.spec.js
    │   │   └── init-user-data/
    │   │       ├── collection-security.json
    │   │       └── preferences.json
    │   ├── support-links.spec.js
    │   └── tab-switch-persistence/
    │       └── tab-switch-persistence.spec.ts
    ├── protobuf/
    │   ├── fixtures/
    │   │   └── collection/
    │   │       ├── HelloService/
    │   │       │   ├── folder.bru
    │   │       │   └── sayHello.bru
    │   │       ├── bruno.json
    │   │       ├── collection.bru
    │   │       ├── environments/
    │   │       │   └── GrpcEnv.bru
    │   │       └── protos/
    │   │           ├── services/
    │   │           │   ├── order.proto
    │   │           │   └── product.proto
    │   │           └── types/
    │   │               └── product-message.proto
    │   ├── init-user-data/
    │   │   ├── collection-security.json
    │   │   └── preferences.json
    │   └── manage-protofile.spec.ts
    ├── request/
    │   ├── body-scroll/
    │   │   └── body-scroll-restoration.spec.ts
    │   ├── collections/
    │   │   └── custom-search/
    │   │       ├── bruno.json
    │   │       ├── package.json
    │   │       └── search-request.bru
    │   ├── copy-request/
    │   │   ├── copy-folder.spec.ts
    │   │   ├── copy-request.spec.ts
    │   │   └── keyboard-shortcuts.spec.ts
    │   ├── delete-request/
    │   │   └── delete-request-sequence-updation.spec.ts
    │   ├── encoding/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   ├── encode-url-preencoded.bru
    │   │   │   ├── encode-url-unencoded.bru
    │   │   │   ├── raw-url-preencoded.bru
    │   │   │   └── raw-url-unencoded.bru
    │   │   ├── curl-encoding.spec.ts
    │   │   └── init-user-data/
    │   │       ├── collection-security.json
    │   │       └── preferences.json
    │   ├── headers/
    │   │   └── header-validation.spec.ts
    │   ├── newlines/
    │   │   └── newlines-persistence.spec.ts
    │   ├── response-pane-update-when-focused.spec.ts
    │   ├── save/
    │   │   └── save.spec.ts
    │   ├── settings/
    │   │   ├── collection/
    │   │   │   ├── bruno.json
    │   │   │   ├── max-redirects.bru
    │   │   │   ├── no-redirects.bru
    │   │   │   └── timeout.bru
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   ├── max-redirects.spec.ts
    │   │   ├── no-redirects.spec.ts
    │   │   └── timeout.spec.ts
    │   └── tests/
    │       └── custom-search/
    │           ├── custom-search.spec.ts
    │           └── init-user-data/
    │               ├── collection-security.json
    │               └── preferences.json
    ├── response/
    │   ├── json-response-formatting/
    │   │   ├── fixtures/
    │   │   │   └── collection/
    │   │   │       ├── bruno.json
    │   │   │       └── request.bru
    │   │   ├── init-user-data/
    │   │   │   ├── collection-security.json
    │   │   │   └── preferences.json
    │   │   └── json-response-formatting.spec.ts
    │   ├── large-response-crash-prevention.spec.ts
    │   ├── response-actions.spec.ts
    │   └── response-format-select-and-preview/
    │       ├── fixtures/
    │       │   └── collection/
    │       │       ├── bruno.json
    │       │       ├── request-html.bru
    │       │       └── request-json.bru
    │       ├── init-user-data/
    │       │   ├── collection-security.json
    │       │   └── preferences.json
    │       └── response-format-select-and-preview.spec.ts
    ├── response-examples/
    │   ├── create-example.spec.ts
    │   ├── edit-example.spec.ts
    │   ├── fixtures/
    │   │   └── collection/
    │   │       ├── bruno.json
    │   │       ├── create-example.bru
    │   │       ├── edit-example.bru
    │   │       └── menu-operations.bru
    │   ├── init-user-data/
    │   │   ├── collection-security.json
    │   │   └── preferences.json
    │   └── menu-operations.spec.ts
    ├── runner/
    │   ├── cli-env-combined/
    │   │   ├── cli-env-combined.spec.ts
    │   │   └── collection/
    │   │       ├── bruno.json
    │   │       ├── environments/
    │   │       │   └── CollectionEnv.bru
    │   │       ├── global-env.json
    │   │       └── request.bru
    │   ├── cli-json-env-file/
    │   │   ├── cli-json-env-file.spec.ts
    │   │   └── collection/
    │   │       ├── bruno.json
    │   │       ├── env.json
    │   │       └── request.bru
    │   ├── collection-run-report/
    │   │   ├── collection/
    │   │   │   ├── api/
    │   │   │   │   └── v1/
    │   │   │   │       ├── posts.bru
    │   │   │   │       └── users.bru
    │   │   │   ├── auth/
    │   │   │   │   ├── login.bru
    │   │   │   │   └── logout.bru
    │   │   │   └── bruno.json
    │   │   ├── collection-run-report.spec.ts
    │   │   └── collection-run-report.spec.ts-snapshots/
    │   │       ├── cli-junit-report-default-darwin.xml
    │   │       └── cli-junit-report-default-linux.xml
    │   ├── collection-run.ts
    │   └── init-user-data/
    │       └── preferences.json
    ├── scratch-requests/
    │   └── scratch-requests.spec.ts
    ├── scripting/
    │   ├── bru-api/
    │   │   └── isSafeMode/
    │   │       ├── fixtures/
    │   │       │   └── collections/
    │   │       │       └── is-safe-mode-test/
    │   │       │           ├── bruno.json
    │   │       │           ├── test-safe-mode-false.bru
    │   │       │           └── test-safe-mode-true.bru
    │   │       ├── init-user-data/
    │   │       │   ├── collection-security.json
    │   │       │   └── preferences.json
    │   │       └── isSafeMode.spec.ts
    │   ├── inbuilt-libraries/
    │   │   ├── fs/
    │   │   │   ├── fixtures/
    │   │   │   │   └── collections/
    │   │   │   │       └── should_allow_fs/
    │   │   │   │           ├── bruno.json
    │   │   │   │           └── request.bru
    │   │   │   ├── fs.spec.ts
    │   │   │   └── init-user-data/
    │   │   │       └── preferences.json
    │   │   └── jsonwebtoken/
    │   │       ├── fixtures/
    │   │       │   └── collection/
    │   │       │       ├── bruno.json
    │   │       │       ├── decode/
    │   │       │       │   ├── decode.bru
    │   │       │       │   └── folder.bru
    │   │       │       ├── environments/
    │   │       │       │   └── Prod.bru
    │   │       │       ├── sign/
    │   │       │       │   ├── folder.bru
    │   │       │       │   ├── sign with callback err.bru
    │   │       │       │   ├── sign with callback token.bru
    │   │       │       │   └── sign.bru
    │   │       │       └── verify/
    │   │       │           ├── folder.bru
    │   │       │           ├── verify with callback err.bru
    │   │       │           ├── verify with callback token.bru
    │   │       │           └── verify.bru
    │   │       ├── init-user-data/
    │   │       │   ├── preferences.json
    │   │       │   └── ui-state-snapshot.json
    │   │       └── jsonwebtoken.spec.ts
    │   └── url-helpers/
    │       ├── fixtures/
    │       │   └── collections/
    │       │       └── url_helpers_test/
    │       │           ├── bruno.json
    │       │           └── url-helpers-test.bru
    │       ├── init-user-data/
    │       │   └── preferences.json
    │       └── url-helpers.spec.ts
    ├── sidebar/
    │   ├── rename-collection-item.spec.ts
    │   └── section-auto-expand.spec.ts
    ├── ssl/
    │   ├── basic-ssl/
    │   │   ├── collections/
    │   │   │   ├── badssl/
    │   │   │   │   ├── bruno.json
    │   │   │   │   ├── package.json
    │   │   │   │   └── request.bru
    │   │   │   └── self-signed-badssl/
    │   │   │       ├── bruno.json
    │   │   │       ├── package.json
    │   │   │       └── request.bru
    │   │   └── tests/
    │   │       ├── basic-ssl-success/
    │   │       │   ├── basic-ssl-success.spec.ts
    │   │       │   └── init-user-data/
    │   │       │       └── preferences.json
    │   │       ├── self-signed-rejected/
    │   │       │   ├── init-user-data/
    │   │       │   │   └── preferences.json
    │   │       │   └── self-signed-rejected.spec.ts
    │   │       └── self-signed-success-with-validation-disabled/
    │   │           ├── init-user-data/
    │   │           │   └── preferences.json
    │   │           └── self-signed-success-with-validation-disabled.spec.ts
    │   └── custom-ca-certs/
    │       ├── collection/
    │       │   ├── bruno.json
    │       │   ├── package.json
    │       │   └── request.bru
    │       ├── server/
    │       │   ├── .gitignore
    │       │   ├── helpers/
    │       │   │   ├── certs.js
    │       │   │   └── platform.js
    │       │   ├── index.js
    │       │   ├── readme.md
    │       │   └── scripts/
    │       │       └── generate-certs.js
    │       └── tests/
    │           ├── custom-invalid-ca-cert-in-config/
    │           │   ├── custom-invalid-ca-cert-in-config.spec.ts
    │           │   └── init-user-data/
    │           │       └── preferences.json
    │           ├── custom-invalid-ca-cert-in-config-with-defaults/
    │           │   ├── custom-invalid-ca-cert-in-config-with-defaults.spec.ts
    │           │   └── init-user-data/
    │           │       └── preferences.json
    │           ├── custom-valid-ca-cert-in-config/
    │           │   ├── custom-valid-ca-cert-in-config.spec.ts
    │           │   └── init-user-data/
    │           │       └── preferences.json
    │           ├── custom-valid-ca-cert-in-config-with-defaults/
    │           │   ├── custom-valid-ca-cert-in-config-with-defaults.spec.ts
    │           │   └── init-user-data/
    │           │       └── preferences.json
    │           └── wss-success/
    │               ├── fixtures/
    │               │   └── wss-collection/
    │               │       ├── bruno.json
    │               │       ├── package.json
    │               │       └── ws-ssl-request.bru
    │               ├── init-user-data/
    │               │   └── preferences.json
    │               └── wss-success.spec.ts
    ├── start/
    │   └── app-open.spec.ts
    ├── transient-requests/
    │   └── transient-requests.spec.ts
    ├── utils/
    │   ├── page/
    │   │   ├── actions.ts
    │   │   ├── index.ts
    │   │   ├── locators.ts
    │   │   ├── navigation.ts
    │   │   └── runner.ts
    │   └── wait.ts
    ├── variable-tooltip/
    │   └── variable-tooltip.spec.ts
    ├── websockets/
    │   ├── connection.spec.ts
    │   ├── fixtures/
    │   │   └── collection/
    │   │       ├── base.bru
    │   │       ├── bruno.json
    │   │       ├── collection.bru
    │   │       ├── ws-test-request-with-headers.bru
    │   │       ├── ws-test-request-with-query.bru
    │   │       ├── ws-test-request-with-subproto.bru
    │   │       └── ws-test-request.bru
    │   ├── headers.spec.ts
    │   ├── init-user-data/
    │   │   ├── collection-security.json
    │   │   └── preferences.json
    │   ├── persistence.spec.ts
    │   ├── query.spec.ts
    │   ├── subproto.spec.ts
    │   └── variable-interpolation/
    │       ├── fixtures/
    │       │   └── collection/
    │       │       ├── bruno.json
    │       │       ├── environments/
    │       │       │   └── Test.bru
    │       │       └── ws-interpolation-test.bru
    │       ├── init-user-data/
    │       │   └── preferences.json
    │       └── variable-interpolation.spec.ts
    └── workspace/
        ├── close-tab-stays-in-workspace.spec.ts
        ├── collection-reorder-persistence.spec.ts
        ├── create-workspace/
        │   ├── create-workspace.spec.ts
        │   └── init-user-data/
        │       └── preferences.json
        └── default-workspace/
            ├── default-workspace.spec.ts
            ├── migration.spec.ts
            └── recovery-and-backup.spec.ts
Download .txt
SYMBOL INDEX (1483 symbols across 309 files)

FILE: .github/scripts/detect-flaky-tests.js
  function traverseSuites (line 20) | function traverseSuites(suites) {

FILE: packages/bruno-app/public/static/diff2Html.js
  function n (line 56) | function n() {}
  function i (line 57) | function i(e, t, n, i, r) {
  function o (line 95) | function o(e) {
  function h (line 112) | function h() {
  function o (line 221) | function o(e) {
  function c (line 238) | function c(e, t, n, i, r) {
  function o (line 512) | function o(e, t) {
  function r (line 591) | function r(e) {
  function s (line 620) | function s(e, t) {
  function o (line 625) | function o(e, t, n, s, o, a, l) {
  function a (line 693) | function a(e) {
  function l (line 708) | function l(e, t, n, i, r, s, l) {
  function o (line 757) | function o(e) {
  function a (line 786) | function a(e, t) {
  function l (line 791) | function l(e) {
  function c (line 797) | function c(e, t) {
  function d (line 805) | function d(e) {
  function f (line 808) | function f(e, t, n) {
  function u (line 811) | function u(e, t) {
  function h (line 814) | function h(e, t) {
  function p (line 823) | function p(e, t, n, i, r) {
  function b (line 848) | function b(e, t, n) {
  function g (line 863) | function g(e, t, n, i) {
  function m (line 881) | function m(e, t, n) {
  function v (line 884) | function v(e, t, n) {
  function y (line 890) | function y(e, t) {
  function w (line 896) | function w(e) {
  function S (line 904) | function S(e) {
  function L (line 909) | function L(e, t, n) {
  function C (line 916) | function C(e) {
  function o (line 941) | function o() {
  function a (line 959) | function a(e) {
  function l (line 971) | function l() {
  function n (line 1012) | function n(e, t) {
  function l (line 1058) | function l(e) {
  function c (line 1061) | function c(e, t, n) {
  function v (line 1080) | function v() {
  function y (line 1083) | function y(n, i) {
  function w (line 1099) | function w(e, t) {
  function f (line 1132) | function f(t, n, i, r) {
  function u (line 1155) | function u(e, t) {
  function h (line 1158) | function h(e, t, n) {
  function p (line 1161) | function p(e) {
  function g (line 1180) | function g(e) {
  function m (line 1189) | function m(e) {
  function v (line 1192) | function v(e, t) {
  function y (line 1200) | function y(e, t) {
  function w (line 1203) | function w(e) {
  function t (line 1303) | function t(e, t, n) {
  function o (line 1363) | function o() {}
  function a (line 1364) | function a() {}
  function l (line 1470) | function l(e) {
  function s (line 1485) | function s(e, t) {
  function o (line 1489) | function o(e, t) {
  function l (line 1493) | function l(e, t, n) {
  function D (line 1536) | function D() {
  function F (line 1539) | function F() {
  function I (line 1547) | function I() {
  function A (line 1550) | function A(e) {
  method constructor (line 2366) | constructor(e, n = {}) {
  method render (line 2370) | render(e) {
  method constructor (line 2438) | constructor({ compiledTemplates: e = {}, rawTemplates: t = {} }) {
  method compile (line 2445) | static compile(e) {
  method render (line 2448) | render(e, t, n, i, r) {
  method template (line 2456) | template(e, t) {
  method templateKey (line 2459) | templateKey(e, t) {
  method constructor (line 2514) | constructor(e, n = {}) {
  method render (line 2518) | render(e) {
  method makeFileDiffHtml (line 2533) | makeFileDiffHtml(e, t) {
  method generateEmptyDiff (line 2546) | generateEmptyDiff() {
  method generateFileHtml (line 2552) | generateFileHtml(e) {
  method applyLineGroupping (line 2590) | applyLineGroupping(e) {
  method applyRematchMatching (line 2608) | applyRematchMatching(e, t, n) {
  method processChangedLines (line 2617) | processChangedLines(e, t, n, i) {
  method generateLineHtml (line 2665) | generateLineHtml(e, t, n) {
  method generateSingleLineHtml (line 2668) | generateSingleLineHtml(e, t) {
  function n (line 2689) | function n(e, t) {
  function h (line 2820) | function h(e) {
  function p (line 2823) | function p(e) {
  function b (line 2826) | function b(e) {
  function g (line 2836) | function g(e, t, n = !0) {
  function m (line 2842) | function m(e) {
  method constructor (line 2994) | constructor(e, n = {}) {
  method render (line 2998) | render(e) {
  method makeFileDiffHtml (line 3013) | makeFileDiffHtml(e, t) {
  method generateEmptyDiff (line 3026) | generateEmptyDiff() {
  method generateFileHtml (line 3035) | generateFileHtml(e) {
  method applyLineGroupping (line 3066) | applyLineGroupping(e) {
  method applyRematchMatching (line 3084) | applyRematchMatching(e, t, n) {
  method makeHeaderHtml (line 3093) | makeHeaderHtml(e, t) {
  method processChangedLines (line 3101) | processChangedLines(e, t, n) {
  method generateLineHtml (line 3149) | generateLineHtml(e, t) {
  method generateSingleHtml (line 3152) | generateSingleHtml(e) {

FILE: packages/bruno-app/rsbuild.config.mjs
  method babelLoaderOptions (line 16) | babelLoaderOptions(opts) {

FILE: packages/bruno-app/src/components/ApiSpecPanel/FileEditor/CodeEditor/index.js
  constant SERVER_RENDERED (line 13) | const SERVER_RENDERED = typeof window === 'undefined' || global['PREVENT...
  class CodeEditor (line 19) | class CodeEditor extends React.Component {
    method constructor (line 20) | constructor(props) {
    method componentWillMount (line 31) | componentWillMount() {
    method componentDidMount (line 42) | componentDidMount() {
    method componentDidUpdate (line 94) | componentDidUpdate(prevProps) {
    method componentWillUnmount (line 106) | componentWillUnmount() {
    method render (line 113) | render() {

FILE: packages/bruno-app/src/components/BodyModeSelector/index.js
  constant DEFAULT_MODES (line 7) | const DEFAULT_MODES = [

FILE: packages/bruno-app/src/components/CodeEditor/index.js
  constant TAB_SIZE (line 25) | const TAB_SIZE = 2;
  class CodeEditor (line 27) | class CodeEditor extends React.Component {
    method constructor (line 28) | constructor(props) {
    method componentDidMount (line 51) | componentDidMount() {
    method componentDidUpdate (line 223) | componentDidUpdate(prevProps) {
    method componentWillUnmount (line 290) | componentWillUnmount() {
    method render (line 309) | render() {

FILE: packages/bruno-app/src/components/CodeEditor/index.spec.js
  constant MOCK_THEME (line 11) | const MOCK_THEME = {

FILE: packages/bruno-app/src/components/CodeMirrorSearch/index.js
  function escapeRegExp (line 7) | function escapeRegExp(string) {
  constant MAX_MATCHES (line 11) | const MAX_MATCHES = 99_999;
  function findSearchMatches (line 12) | function findSearchMatches(editor, searchText, regex, caseSensitive, who...
  function createCacheKey (line 45) | function createCacheKey(editor, searchText, regex, caseSensitive, wholeW...

FILE: packages/bruno-app/src/components/ColorPicker/index.js
  constant PRESET_COLORS (line 9) | const PRESET_COLORS = [
  constant COLOR_RANGE_SEQUENCE (line 18) | const COLOR_RANGE_SEQUENCE = ['#D85D43', '#F4BB74', '#61DCB1', '#7EBDF2'...

FILE: packages/bruno-app/src/components/CreateTransientRequest/index.js
  constant REQUEST_TYPE (line 14) | const REQUEST_TYPE = {

FILE: packages/bruno-app/src/components/Devtools/index.js
  constant MIN_DEVTOOLS_HEIGHT (line 7) | const MIN_DEVTOOLS_HEIGHT = 150;
  constant MAX_DEVTOOLS_HEIGHT (line 8) | const MAX_DEVTOOLS_HEIGHT = window.innerHeight * 0.7;
  constant DEFAULT_DEVTOOLS_HEIGHT (line 9) | const DEFAULT_DEVTOOLS_HEIGHT = 300;

FILE: packages/bruno-app/src/components/EditableTable/index.js
  constant MIN_COLUMN_WIDTH (line 7) | const MIN_COLUMN_WIDTH = 80;

FILE: packages/bruno-app/src/components/EnvironmentVariablesTable/index.js
  constant MIN_H (line 18) | const MIN_H = 35 * 2;
  constant MIN_COLUMN_WIDTH (line 19) | const MIN_COLUMN_WIDTH = 80;

FILE: packages/bruno-app/src/components/Environments/DotEnvFileEditor/utils.js
  constant MIN_TABLE_HEIGHT (line 59) | const MIN_TABLE_HEIGHT = 35 * 2;

FILE: packages/bruno-app/src/components/Environments/EnvironmentSelector/index.js
  constant TABS (line 18) | const TABS = [
  constant EMPTY_STATE_DESCRIPTIONS (line 23) | const EMPTY_STATE_DESCRIPTIONS = {

FILE: packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/index.js
  constant EMPTY_ARRAY (line 32) | const EMPTY_ARRAY = [];

FILE: packages/bruno-app/src/components/ErrorCapture/index.js
  class ErrorBoundary (line 5) | class ErrorBoundary extends Component {
    method constructor (line 6) | constructor(props) {
    method getDerivedStateFromError (line 11) | static getDerivedStateFromError(error) {
    method componentDidCatch (line 15) | componentDidCatch(error, errorInfo) {
    method render (line 30) | render() {

FILE: packages/bruno-app/src/components/Git/VisualDiffViewer/VisualDiffAuth.js
  constant AUTH_TYPE_LABELS (line 5) | const AUTH_TYPE_LABELS = {
  constant AUTH_FIELD_LABELS (line 16) | const AUTH_FIELD_LABELS = {

FILE: packages/bruno-app/src/components/Git/VisualDiffViewer/VisualDiffBody.js
  constant BODY_TYPE_LABELS (line 6) | const BODY_TYPE_LABELS = {
  constant TEXT_BODY_TYPES (line 19) | const TEXT_BODY_TYPES = ['json', 'text', 'xml', 'sparql'];
  constant FORM_BODY_TYPES (line 20) | const FORM_BODY_TYPES = ['formUrlEncoded', 'multipartForm'];
  constant ALL_BODY_TYPES (line 21) | const ALL_BODY_TYPES = Object.keys(BODY_TYPE_LABELS);

FILE: packages/bruno-app/src/components/Git/VisualDiffViewer/utils/bruUtils.js
  constant DIFF_STATUS (line 3) | const DIFF_STATUS = Object.freeze({

FILE: packages/bruno-app/src/components/Git/VisualDiffViewer/utils/diffUtils.js
  constant WORD_SEPARATOR (line 2) | const WORD_SEPARATOR = /[\s\/\?\&\=\.\-\_\:\@]/;

FILE: packages/bruno-app/src/components/GlobalSearchModal/constants/index.js
  constant SEARCH_TYPES (line 1) | const SEARCH_TYPES = {
  constant MATCH_TYPES (line 8) | const MATCH_TYPES = {
  constant SEARCH_CONFIG (line 17) | const SEARCH_CONFIG = {
  constant DOCUMENTATION_RESULT (line 25) | const DOCUMENTATION_RESULT = {

FILE: packages/bruno-app/src/components/Help/index.js
  constant GAP (line 13) | const GAP = 8;

FILE: packages/bruno-app/src/components/Modal/index.js
  constant ESC_KEY_CODE (line 6) | const ESC_KEY_CODE = 27;
  constant ENTER_KEY_CODE (line 7) | const ENTER_KEY_CODE = 13;

FILE: packages/bruno-app/src/components/MultiLineEditor/index.js
  class MultiLineEditor (line 13) | class MultiLineEditor extends Component {
    method constructor (line 14) | constructor(props) {
    method componentDidMount (line 29) | componentDidMount() {
    method componentDidUpdate (line 127) | componentDidUpdate(prevProps) {
    method componentWillUnmount (line 181) | componentWillUnmount() {
    method render (line 226) | render() {

FILE: packages/bruno-app/src/components/Notifications/index.js
  constant PAGE_SIZE (line 18) | const PAGE_SIZE = 5;

FILE: packages/bruno-app/src/components/OpenAPISyncTab/ConnectSpecForm/index.js
  constant FEATURES (line 8) | const FEATURES = [

FILE: packages/bruno-app/src/components/OpenAPISyncTab/OverviewSection/index.js
  constant SUMMARY_CARDS (line 13) | const SUMMARY_CARDS = [

FILE: packages/bruno-app/src/components/OpenAPISyncTab/utils.js
  constant HTTP_METHODS (line 1) | const HTTP_METHODS = ['get', 'post', 'put', 'patch', 'delete', 'options'...

FILE: packages/bruno-app/src/components/Portal/index.js
  function Portal (line 3) | function Portal({ children }) {

FILE: packages/bruno-app/src/components/Preferences/Beta/index.js
  constant BETA_FEATURES (line 17) | const BETA_FEATURES = [

FILE: packages/bruno-app/src/components/Preferences/Display/Zoom/index.js
  constant ZOOM_OPTIONS (line 12) | const ZOOM_OPTIONS = [
  constant DEFAULT_ZOOM (line 26) | const DEFAULT_ZOOM = 100;

FILE: packages/bruno-app/src/components/RequestPane/GraphQLRequestPane/index.js
  constant TAB_CONFIG (line 25) | const TAB_CONFIG = [

FILE: packages/bruno-app/src/components/RequestPane/GrpcQueryUrl/index.js
  constant STREAMING_METHOD_TYPES (line 30) | const STREAMING_METHOD_TYPES = ['client-streaming', 'server-streaming', ...
  constant CLIENT_STREAMING_METHOD_TYPES (line 31) | const CLIENT_STREAMING_METHOD_TYPES = ['client-streaming', 'bidi-streami...

FILE: packages/bruno-app/src/components/RequestPane/HttpRequestPane/index.js
  constant TAB_CONFIG (line 22) | const TAB_CONFIG = [
  constant TAB_PANELS (line 35) | const TAB_PANELS = {

FILE: packages/bruno-app/src/components/RequestPane/PromptVariables/PromptVariablesModal/index.js
  function PromptVariablesModal (line 7) | function PromptVariablesModal({ title = 'Input Required', prompts, onSub...

FILE: packages/bruno-app/src/components/RequestPane/QueryEditor/index.js
  constant AUTO_COMPLETE_AFTER_KEY (line 25) | const AUTO_COMPLETE_AFTER_KEY = /^[a-zA-Z0-9_@(]$/;
  class QueryEditor (line 46) | class QueryEditor extends React.Component {
    method constructor (line 47) | constructor(props) {
    method componentDidMount (line 57) | componentDidMount() {
    method componentDidUpdate (line 166) | componentDidUpdate(prevProps) {
    method componentWillUnmount (line 201) | componentWillUnmount() {
    method render (line 236) | render() {
    method _onBeforeChange (line 286) | _onBeforeChange(_instance, change) {

FILE: packages/bruno-app/src/components/RequestPane/QueryEditor/onHasCompletion.js
  function onHasCompletion (line 18) | function onHasCompletion(_cm, data, onHintInformationRender) {
  function renderType (line 82) | function renderType(type) {

FILE: packages/bruno-app/src/components/RequestPane/QueryUrl/HttpMethodSelector/index.js
  constant STANDARD_METHODS (line 7) | const STANDARD_METHODS = Object.freeze(['GET', 'POST', 'PUT', 'DELETE', ...
  constant KEY (line 9) | const KEY = Object.freeze({ ENTER: 'Enter', ESCAPE: 'Escape' });
  constant DEFAULT_METHOD (line 11) | const DEFAULT_METHOD = 'GET';

FILE: packages/bruno-app/src/components/RequestPane/RequestBody/RequestBodyMode/index.js
  constant DEFAULT_MODES (line 23) | const DEFAULT_MODES = [

FILE: packages/bruno-app/src/components/RequestPane/Settings/index.js
  constant DEFAULT_SETTINGS (line 13) | const DEFAULT_SETTINGS = {

FILE: packages/bruno-app/src/components/RequestPane/WSSettingsPane/index.js
  constant ERRORS (line 22) | const ERRORS = {

FILE: packages/bruno-app/src/components/RequestPane/WsBody/BodyMode/index.js
  constant RAW_MODES (line 7) | const RAW_MODES = [

FILE: packages/bruno-app/src/components/RequestPane/WsBody/SingleWSMessage/index.js
  constant TYPE_BY_DECODER (line 18) | const TYPE_BY_DECODER = {
  constant DECODER_BY_TYPE (line 24) | const DECODER_BY_TYPE = invert(TYPE_BY_DECODER);

FILE: packages/bruno-app/src/components/RequestPane/WsQueryUrl/index.js
  constant CONNECTION_STATUS (line 19) | const CONNECTION_STATUS = {

FILE: packages/bruno-app/src/components/RequestTabPanel/index.js
  constant MIN_LEFT_PANE_WIDTH (line 42) | const MIN_LEFT_PANE_WIDTH = 300;
  constant MIN_RIGHT_PANE_WIDTH (line 43) | const MIN_RIGHT_PANE_WIDTH = 490;
  constant MIN_TOP_PANE_HEIGHT (line 44) | const MIN_TOP_PANE_HEIGHT = 150;
  constant MIN_BOTTOM_PANE_HEIGHT (line 45) | const MIN_BOTTOM_PANE_HEIGHT = 150;

FILE: packages/bruno-app/src/components/RequestTabs/DraggableTab.js
  method hover (line 9) | hover(item, monitor) {

FILE: packages/bruno-app/src/components/RequestTabs/RequestTab/index.js
  function RequestTabMenu (line 480) | function RequestTabMenu({ menuDropdownRef, tabLabelRef, collectionReques...

FILE: packages/bruno-app/src/components/ResponseExample/index.js
  constant MIN_LEFT_PANE_WIDTH (line 12) | const MIN_LEFT_PANE_WIDTH = 300;
  constant MIN_RIGHT_PANE_WIDTH (line 13) | const MIN_RIGHT_PANE_WIDTH = 350;
  constant MIN_TOP_PANE_HEIGHT (line 14) | const MIN_TOP_PANE_HEIGHT = 150;
  constant MIN_BOTTOM_PANE_HEIGHT (line 15) | const MIN_BOTTOM_PANE_HEIGHT = 150;

FILE: packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultPreview/XmlPreview/index.js
  function XmlPreview (line 6) | function XmlPreview({ data, defaultExpanded = true }) {
  function parseXMLString (line 304) | function parseXMLString(xmlString) {
  function isTextNode (line 385) | function isTextNode(node) {
  function getChildrenEntries (line 389) | function getChildrenEntries(node) {
  function getChildCount (line 396) | function getChildCount(node) {

FILE: packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultPreview/index.js
  function onDocumentLoadSuccess (line 41) | function onDocumentLoadSuccess({ numPages }) {

FILE: packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultTypeSelector/index.jsx
  constant FORMAT_ICONS (line 9) | const FORMAT_ICONS = {

FILE: packages/bruno-app/src/components/ResponsePane/QueryResult/index.js
  constant RAW_FORMAT_OPTIONS (line 12) | const RAW_FORMAT_OPTIONS = [
  constant PREVIEW_FORMAT_OPTIONS (line 19) | const PREVIEW_FORMAT_OPTIONS = [

FILE: packages/bruno-app/src/components/ResponsePane/ResponsePaneActions/index.js
  method disabled (line 59) | get disabled() {
  method disabled (line 68) | get disabled() {
  method disabled (line 77) | get disabled() {
  method disabled (line 86) | get disabled() {
  method disabled (line 98) | get disabled() {
  method disabled (line 107) | get disabled() {
  method disabled (line 116) | get disabled() {
  method disabled (line 125) | get disabled() {
  method disabled (line 134) | get disabled() {

FILE: packages/bruno-app/src/components/ResponsePane/index.js
  constant RIGHT_CONTENT_EXPANDED_WIDTH (line 29) | const RIGHT_CONTENT_EXPANDED_WIDTH = 135;

FILE: packages/bruno-app/src/components/RunnerResults/index.jsx
  constant FILTERS (line 44) | const FILTERS = {
  function RunnerResults (line 78) | function RunnerResults({ collection }) {

FILE: packages/bruno-app/src/components/SecuritySettings/JsSandboxMode/index.js
  constant SANDBOX_OPTIONS (line 10) | const SANDBOX_OPTIONS = [

FILE: packages/bruno-app/src/components/ShareCollection/index.js
  constant EXPORT_FORMATS (line 14) | const EXPORT_FORMATS = {

FILE: packages/bruno-app/src/components/Sidebar/BulkImportCollectionLocation/index.js
  constant STATUS (line 23) | const STATUS = {
  constant IMPORT_TYPE (line 29) | const IMPORT_TYPE = {
  function normalizeName (line 94) | function normalizeName(name) {
  function generateUniqueName (line 107) | function generateUniqueName(baseName, checkExists) {

FILE: packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/CollectionItemDragPreview/index.js
  function getItemStyles (line 8) | function getItemStyles({ x, y }) {

FILE: packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/index.js
  constant TEMPLATE_VAR_PATTERN (line 17) | const TEMPLATE_VAR_PATTERN = /\{\{([^}]+)\}\}/;

FILE: packages/bruno-app/src/components/Sidebar/Collections/Collection/GenerateDocumentation/index.js
  constant CDN_BASE_URL (line 19) | const CDN_BASE_URL = 'https://cdn.opencollection.com';
  constant FEATURES (line 21) | const FEATURES = [

FILE: packages/bruno-app/src/components/Sidebar/Collections/Collection/RemoveCollection/ConfirmCollectionCloseDrafts.js
  constant MAX_UNSAVED_REQUESTS_TO_SHOW (line 14) | const MAX_UNSAVED_REQUESTS_TO_SHOW = 5;

FILE: packages/bruno-app/src/components/Sidebar/Collections/Collection/index.js
  constant EMPTY_STATE_DELAY_MS (line 58) | const EMPTY_STATE_DELAY_MS = 300;

FILE: packages/bruno-app/src/components/Sidebar/Collections/RemoveCollectionsModal/index.js
  constant MAX_COLLECTIONS_WIDTH (line 24) | const MAX_COLLECTIONS_WIDTH = 530;
  constant CHARACTER_WIDTH (line 25) | const CHARACTER_WIDTH = 8;
  constant COLLECTION_PADDING (line 26) | const COLLECTION_PADDING = 24;
  constant COLLECTION_GAP (line 27) | const COLLECTION_GAP = 12;

FILE: packages/bruno-app/src/components/Sidebar/ImportCollection/index.js
  constant IMPORT_TABS (line 12) | const IMPORT_TABS = {

FILE: packages/bruno-app/src/components/Sidebar/index.js
  constant MIN_LEFT_SIDEBAR_WIDTH (line 11) | const MIN_LEFT_SIDEBAR_WIDTH = 220;
  constant MAX_LEFT_SIDEBAR_WIDTH (line 12) | const MAX_LEFT_SIDEBAR_WIDTH = 600;
  constant SIDEBAR_SECTIONS (line 14) | const SIDEBAR_SECTIONS = [

FILE: packages/bruno-app/src/components/SingleLineEditor/index.js
  class SingleLineEditor (line 13) | class SingleLineEditor extends Component {
    method constructor (line 14) | constructor(props) {
    method componentDidMount (line 29) | componentDidMount() {
    method componentDidUpdate (line 145) | componentDidUpdate(prevProps) {
    method componentWillUnmount (line 204) | componentWillUnmount() {
    method render (line 309) | render() {

FILE: packages/bruno-app/src/components/StatusBar/ThemeDropdown/index.js
  constant MODES (line 10) | const MODES = ['light', 'dark', 'system'];
  constant MODE_BUTTONS (line 11) | const MODE_BUTTONS = [

FILE: packages/bruno-app/src/components/WelcomeModal/index.js
  constant TOTAL_STEPS (line 16) | const TOTAL_STEPS = 4;

FILE: packages/bruno-app/src/components/WorkspaceHome/WorkspaceEnvironments/EnvironmentList/index.js
  constant EMPTY_ARRAY (line 29) | const EMPTY_ARRAY = [];

FILE: packages/bruno-app/src/hooks/useDebounce/index.js
  function useDebounce (line 3) | function useDebounce(value, delay) {

FILE: packages/bruno-app/src/hooks/useDeferredLoading/index.js
  function useDeferredLoading (line 11) | function useDeferredLoading(isLoading, delay = 200) {

FILE: packages/bruno-app/src/hooks/useDetectSensitiveField/index.js
  constant VARIABLE_NAME_REGEX (line 3) | const VARIABLE_NAME_REGEX = /\{\{([^}]+)\}\}/g;
  constant ENV_VAR_REFERENCE_REGEX (line 4) | const ENV_VAR_REFERENCE_REGEX = /^\s*\{\{.*\}\}\s*$/;

FILE: packages/bruno-app/src/hooks/useLocalStorage/index.js
  function useLocalStorage (line 3) | function useLocalStorage(key, defaultValue) {

FILE: packages/bruno-app/src/hooks/usePrevious/index.js
  function usePrevious (line 3) | function usePrevious(value) {

FILE: packages/bruno-app/src/hooks/useProtoFileManagement/index.js
  function useProtoFileManagement (line 17) | function useProtoFileManagement(collection) {

FILE: packages/bruno-app/src/hooks/useReflectionManagement/index.js
  function useReflectionManagement (line 11) | function useReflectionManagement(item, collectionUid) {

FILE: packages/bruno-app/src/hooks/useTabPaneBoundaries/index.js
  constant MIN_TOP_PANE_HEIGHT (line 5) | const MIN_TOP_PANE_HEIGHT = 380;
  function useTabPaneBoundaries (line 7) | function useTabPaneBoundaries(activeTabUid) {

FILE: packages/bruno-app/src/pages/Bruno/index.js
  function Main (line 75) | function Main() {

FILE: packages/bruno-app/src/pages/ErrorBoundary/index.js
  class ErrorBoundary (line 5) | class ErrorBoundary extends React.Component {
    method constructor (line 6) | constructor(props) {
    method componentDidMount (line 12) | componentDidMount() {
    method componentDidCatch (line 19) | componentDidCatch(error, errorInfo) {
    method returnToApp (line 24) | returnToApp() {
    method forceQuit (line 31) | forceQuit() {
    method render (line 36) | render() {

FILE: packages/bruno-app/src/pages/Main.js
  function Main (line 29) | function Main({ children }) {

FILE: packages/bruno-app/src/pages/index.js
  function App (line 6) | function App() {

FILE: packages/bruno-app/src/providers/App/useOpenAPISyncPolling.js
  constant POLL_INTERVAL (line 7) | const POLL_INTERVAL = 5 * 60 * 1000;

FILE: packages/bruno-app/src/providers/PromptVariables/index.js
  function PromptVariablesProvider (line 6) | function PromptVariablesProvider({ children }) {

FILE: packages/bruno-app/src/providers/ReduxStore/middlewares/draft/utils.js
  function handleMakeTabParmanent (line 5) | function handleMakeTabParmanent(state, action, dispatch) {

FILE: packages/bruno-app/src/providers/ReduxStore/slices/collections/index.js
  constant REQUEST_UID_PATHS (line 95) | const REQUEST_UID_PATHS = [
  constant ROOT_UID_PATHS (line 106) | const ROOT_UID_PATHS = ['request.headers', 'request.vars.req', 'request....

FILE: packages/bruno-app/src/providers/ReduxStore/slices/workspaces/getTabToFocusForCurrentWorkspace.js
  function getWorkspaceCollectionUids (line 10) | function getWorkspaceCollectionUids(state, workspace) {
  function getTabToFocusForCurrentWorkspace (line 36) | function getTabToFocusForCurrentWorkspace(state) {

FILE: packages/bruno-app/src/providers/ReduxStore/slices/workspaces/getTabToFocusForCurrentWorkspace.spec.js
  function buildState (line 3) | function buildState(overrides = {}) {

FILE: packages/bruno-app/src/providers/ReduxStore/slices/workspaces/index.js
  constant DEFAULT_WORKSPACE_UID (line 4) | const DEFAULT_WORKSPACE_UID = 'default';

FILE: packages/bruno-app/src/ui/MenuDropdown/index.js
  constant NAVIGATION_KEYS (line 6) | const NAVIGATION_KEYS = ['ArrowDown', 'ArrowUp', 'Home', 'End', 'Escape'];
  constant ACTION_KEYS (line 7) | const ACTION_KEYS = ['Enter', ' '];

FILE: packages/bruno-app/src/ui/ResponsiveTabs/index.js
  constant DROPDOWN_WIDTH (line 7) | const DROPDOWN_WIDTH = 60;
  constant CALCULATION_DELAY_DEFAULT (line 8) | const CALCULATION_DELAY_DEFAULT = 20;
  constant CALCULATION_DELAY_EXTENDED (line 9) | const CALCULATION_DELAY_EXTENDED = 150;
  constant GAP_BETWEEN_LEFT_AND_RIGHT_CONTENT (line 10) | const GAP_BETWEEN_LEFT_AND_RIGHT_CONTENT = 80;
  constant EXPANDABLE_HYSTERESIS (line 11) | const EXPANDABLE_HYSTERESIS = 20;

FILE: packages/bruno-app/src/utils/beta-features.js
  constant BETA_FEATURES (line 7) | const BETA_FEATURES = Object.freeze({

FILE: packages/bruno-app/src/utils/bruno-clipboard.js
  class BrunoClipboard (line 1) | class BrunoClipboard {
    method constructor (line 2) | constructor() {
    method write (line 9) | write(item) {
    method read (line 17) | read() {

FILE: packages/bruno-app/src/utils/codemirror/autocomplete.js
  constant STATIC_API_HINTS (line 9) | const STATIC_API_HINTS = {
  constant MOCK_DATA_HINTS (line 128) | const MOCK_DATA_HINTS = Object.keys(mockDataFunctions).map((key) => `$${...
  constant WORD_PATTERN (line 131) | const WORD_PATTERN = /[\w.$-/]/;
  constant VARIABLE_PATTERN (line 132) | const VARIABLE_PATTERN = /\{\{([\w$.-]*)$/;
  constant NON_CHARACTER_KEYS (line 133) | const NON_CHARACTER_KEYS = /^(?!Shift|Tab|Enter|Escape|ArrowUp|ArrowDown...

FILE: packages/bruno-app/src/utils/codemirror/brunoVarInfo.js
  constant SERVER_RENDERED (line 19) | const SERVER_RENDERED = typeof window === 'undefined' || global['PREVENT...
  constant COPY_ICON_SVG_TEXT (line 22) | const COPY_ICON_SVG_TEXT = `
  constant CHECKMARK_ICON_SVG_TEXT (line 29) | const CHECKMARK_ICON_SVG_TEXT = `
  constant COPY_SUCCESS_COLOR (line 35) | const COPY_SUCCESS_COLOR = '#22c55e';
  constant COPY_SUCCESS_TIMEOUT (line 37) | const COPY_SUCCESS_TIMEOUT = 1000;
  constant EDITOR_MIN_HEIGHT (line 40) | const EDITOR_MIN_HEIGHT = 1.75;
  constant EDITOR_MAX_HEIGHT (line 41) | const EDITOR_MAX_HEIGHT = 11.125;
  constant EYE_ICON_SVG (line 53) | const EYE_ICON_SVG = `
  constant EYE_OFF_ICON_SVG (line 60) | const EYE_OFF_ICON_SVG = `
  function createState (line 659) | function createState(options) {
  function getHoverTime (line 665) | function getHoverTime(cm) {
  function onMouseOver (line 670) | function onMouseOver(cm, e) {
  function onMouseHover (line 711) | function onMouseHover(cm, box) {
  function showPopup (line 812) | function showPopup(cm, box, brunoVarInfo) {

FILE: packages/bruno-app/src/utils/codemirror/brunoVarInfo.spec.js
  function setupRender (line 351) | function setupRender(variables, collection = null, item = null) {
  function setupDynamicRender (line 438) | function setupDynamicRender(variableName, variables = {}) {
  function setupOAuth2Render (line 499) | function setupOAuth2Render(variableName, variables = {}) {

FILE: packages/bruno-app/src/utils/codemirror/javascript-lint.js
  constant SERVER_RENDERED (line 11) | const SERVER_RENDERED = typeof window === 'undefined' || global['PREVENT...
  function validator (line 17) | function validator(text, options) {
  function parseErrors (line 103) | function parseErrors(errors, output) {

FILE: packages/bruno-app/src/utils/codemirror/lang-detect.js
  function isXML (line 5) | function isXML(snippet) {
  function isJSON (line 13) | function isJSON(snippet) {
  function autoDetectLang (line 26) | function autoDetectLang(snippet) {

FILE: packages/bruno-app/src/utils/codemirror/linkAware.js
  function getVisibleLineRange (line 10) | function getVisibleLineRange(editor, padding = 3) {
  function markUrls (line 30) | function markUrls(editor, linkify, linkClass, linkHint) {
  function handleMouseEnter (line 102) | function handleMouseEnter(event, linkClass, linkHoverClass, updateCmdCtr...
  function handleMouseLeave (line 131) | function handleMouseLeave(event, linkClass, linkHoverClass) {
  function updateCmdCtrlClass (line 157) | function updateCmdCtrlClass(event, editorWrapper, cmdCtrlClass, isCmdOrC...
  function handleClick (line 171) | function handleClick(event, linkClass, isCmdOrCtrlPressed) {
  function setupLinkAware (line 191) | function setupLinkAware(editor, options = {}) {

FILE: packages/bruno-app/src/utils/codemirror/lint-errors.js
  function getLintErrorsForLine (line 14) | function getLintErrorsForLine(editor, lineNumber) {
  function showLintTooltip (line 45) | function showLintTooltip(errors, targetElement, container) {
  function hideLintTooltip (line 71) | function hideLintTooltip() {
  function setupLintErrorTooltip (line 85) | function setupLintErrorTooltip(editor) {

FILE: packages/bruno-app/src/utils/codemirror/mock-data-hints.js
  constant MOCK_FUNCTION_SUGGESTIONS (line 3) | const MOCK_FUNCTION_SUGGESTIONS = Object.keys(mockDataFunctions).map((ke...

FILE: packages/bruno-app/src/utils/common/bulkKeyValueUtils.js
  function parseBulkKeyValue (line 1) | function parseBulkKeyValue(value) {
  function serializeBulkKeyValue (line 18) | function serializeBulkKeyValue(items) {

FILE: packages/bruno-app/src/utils/common/constants.js
  constant REQUEST_TYPES (line 1) | const REQUEST_TYPES = ['http-request', 'graphql-request', 'grpc-request'...
  constant DEFAULT_COLLECTION_FORMAT (line 3) | const DEFAULT_COLLECTION_FORMAT = 'yml';

FILE: packages/bruno-app/src/utils/common/error.js
  class BrunoError (line 4) | class BrunoError extends Error {
    method constructor (line 5) | constructor(message, level) {
  function formatIpcError (line 38) | function formatIpcError(error) {

FILE: packages/bruno-app/src/utils/common/index.js
  constant LARGE_BUFFER_THRESHOLD (line 266) | const LARGE_BUFFER_THRESHOLD = 50 * 1024 * 1024;
  function prettifyHtmlString (line 471) | function prettifyHtmlString(htmlString) {
  function prettifyJavaScriptString (line 490) | function prettifyJavaScriptString(jsString) {
  function formatHexView (line 509) | function formatHexView(buffer) {
  function isHexFormat (line 530) | function isHexFormat(str) {

FILE: packages/bruno-app/src/utils/common/masked-editor.js
  class MaskedEditor (line 64) | class MaskedEditor {
    method constructor (line 65) | constructor(editor, maskChar = '*') {
    method enable (line 82) | enable() {
    method disable (line 105) | disable() {
    method update (line 134) | update() {
    method handleMultilineChange (line 149) | handleMultilineChange() {
    method moveCursorToEnd (line 173) | moveCursorToEnd() {
    method handleInputRead (line 185) | handleInputRead() {
    method handleBeforeChange (line 198) | handleBeforeChange(cm, changeObj) {
    method handleCursorActivity (line 206) | handleCursorActivity() {
    method handleSelectionChange (line 214) | handleSelectionChange() {
    method applyMasking (line 222) | applyMasking() {
    method applyMasking (line 244) | applyMasking() {
    method applyCharacterMasking (line 266) | applyCharacterMasking(content) {
    method applyCharacterMasking (line 308) | applyCharacterMasking(content) {
    method applyLineMasking (line 353) | applyLineMasking(lineCount) {
    method clearAllMarks (line 384) | clearAllMarks() {
    method isEnabled (line 406) | isEnabled() {
    method getMaskChar (line 413) | getMaskChar() {
    method setMaskChar (line 420) | setMaskChar(newMaskChar) {
    method destroy (line 442) | destroy() {
  function createMaskedEditor (line 456) | function createMaskedEditor(editor, maskChar = '*') {
  function supportsMasking (line 463) | function supportsMasking(editor) {

FILE: packages/bruno-app/src/utils/curl/curl-to-json.js
  function getContentType (line 15) | function getContentType(headers = {}) {
  function repr (line 21) | function repr(value, isKey) {
  function getDataString (line 31) | function getDataString(request) {
  function getMultipleDataString (line 62) | function getMultipleDataString(request, parsedQueryString) {
  function getFilesString (line 77) | function getFilesString(request) {

FILE: packages/bruno-app/src/utils/curl/parse-curl.js
  constant FLAG_CATEGORIES (line 11) | const FLAG_CATEGORIES = {

FILE: packages/bruno-cli/src/commands/import.js
  constant COLLECTION_FORMATS (line 13) | const COLLECTION_FORMATS = ['bru', 'opencollection'];

FILE: packages/bruno-cli/src/constants.js
  constant CLI_EPILOGUE (line 3) | const CLI_EPILOGUE = `Documentation: https://docs.usebruno.com (v${versi...
  constant CLI_VERSION (line 4) | const CLI_VERSION = version;
  constant EXIT_STATUS (line 7) | const EXIT_STATUS = {

FILE: packages/bruno-cli/src/runner/awsv4auth-helper.js
  function isStrPresent (line 4) | function isStrPresent(str) {
  function resolveAwsV4Credentials (line 8) | async function resolveAwsV4Credentials(request) {
  function addAwsV4Interceptor (line 27) | function addAwsV4Interceptor(axiosInstance, request) {

FILE: packages/bruno-cli/src/runner/prepare-request.js
  constant STREAMING_FILE_SIZE_THRESHOLD (line 13) | const STREAMING_FILE_SIZE_THRESHOLD = 20 * 1024 * 1024;

FILE: packages/bruno-cli/src/store/tokenStore.js
  method saveCredential (line 6) | async saveCredential({ url, credentialsId, credentials }) {
  method getCredential (line 15) | async getCredential({ url, credentialsId }) {
  method deleteCredential (line 20) | async deleteCredential({ url, credentialsId }) {
  method deleteCredentialById (line 33) | deleteCredentialById(credentialsId) {
  method getAllCredentials (line 42) | getAllCredentials() {

FILE: packages/bruno-cli/src/utils/axios-instance.js
  constant METHOD_CHANGING_REDIRECTS (line 7) | const METHOD_CHANGING_REDIRECTS = [301, 302, 303];
  function makeAxiosInstance (line 74) | function makeAxiosInstance({ requestMaxRedirects = 5, disableCookies, fo...

FILE: packages/bruno-cli/src/utils/collection.js
  constant FORMAT_CONFIG (line 10) | const FORMAT_CONFIG = {
  constant REQUEST_ITEM_TYPES (line 14) | const REQUEST_ITEM_TYPES = ['http-request', 'graphql-request'];

FILE: packages/bruno-cli/src/utils/proxy-util.js
  constant DEFAULT_PORTS (line 5) | const DEFAULT_PORTS = {
  constant TARGET_TLS_OPTIONS (line 68) | const TARGET_TLS_OPTIONS = ['cert', 'key', 'pfx', 'passphrase', 'rejectU...
  class PatchedHttpsProxyAgent (line 78) | class PatchedHttpsProxyAgent extends HttpsProxyAgent {
    method constructor (line 79) | constructor(proxy, opts) {
    method connect (line 84) | async connect(req, opts) {

FILE: packages/bruno-cli/tests/reporters/skip-body.spec.js
  constant REQUEST_DATA (line 6) | const REQUEST_DATA = { username: 'john', password: 'secret123' };
  constant RESPONSE_DATA (line 7) | const RESPONSE_DATA = { id: 1, username: 'john', email: 'john@example.co...

FILE: packages/bruno-common/rollup.config.js
  function createBuildConfig (line 10) | function createBuildConfig({ inputDir, input, cjsOutput, esmOutput }) {

FILE: packages/bruno-common/src/example-status/index.ts
  type Collection (line 4) | interface Collection {

FILE: packages/bruno-common/src/interpolate/index.spec.ts
  constant BRUNO_BIRTH_DATE (line 4) | const BRUNO_BIRTH_DATE = new Date('2019-08-08');
  constant BRUNO_AGE (line 21) | const BRUNO_AGE = calculateAgeFromBirthDate(BRUNO_BIRTH_DATE);

FILE: packages/bruno-common/src/interpolate/index.ts
  constant MOCK_PATTERN (line 18) | const MOCK_PATTERN = /\{\{\$(\w+)\}\}/g;
  constant JSON_SPECIAL_CHARS (line 19) | const JSON_SPECIAL_CHARS = /[\\\n\r\t\"]/;

FILE: packages/bruno-common/src/runner/types/index.ts
  type T_AssertionPassResult (line 2) | type T_AssertionPassResult = {
  type T_AssertionFailResult (line 10) | type T_AssertionFailResult = {
  type T_AssertionResult (line 19) | type T_AssertionResult = T_AssertionPassResult | T_AssertionFailResult;
  type T_TestPassResult (line 22) | type T_TestPassResult = {
  type T_TestFailResult (line 29) | type T_TestFailResult = {
  type T_TestResult (line 37) | type T_TestResult = T_TestPassResult | T_TestFailResult;
  type T_EmptyRequest (line 39) | type T_EmptyRequest = {
  type T_Request (line 48) | type T_Request = {
  type T_EmptyResponse (line 56) | type T_EmptyResponse = {
  type T_SkippedResponse (line 65) | type T_SkippedResponse = {
  type T_Response (line 75) | type T_Response = {
  type T_RunnerRequestExecutionResult (line 84) | type T_RunnerRequestExecutionResult = {
  type T_RunnerResults (line 99) | type T_RunnerResults = {
  type T_RunSummary (line 107) | type T_RunSummary = {

FILE: packages/bruno-common/src/utils/form-data.spec.ts
  class CustomClass (line 148) | class CustomClass {}

FILE: packages/bruno-common/src/utils/prompt-variables.ts
  constant PROMPT_VARIABLE_PATTERN (line 21) | const PROMPT_VARIABLE_PATTERN = /[^{}\s](?:[^{}]*[^{}\s])?/;
  constant PROMPT_VARIABLE_TEXT_PATTERN (line 27) | const PROMPT_VARIABLE_TEXT_PATTERN = new RegExp(`^\\?(${PROMPT_VARIABLE_...
  constant PROMPT_VARIABLE_TEMPLATE_PATTERN (line 33) | const PROMPT_VARIABLE_TEMPLATE_PATTERN = new RegExp(`{{\\?(${PROMPT_VARI...
  function extractPromptVariables (line 54) | function extractPromptVariables(obj: any): string[] {

FILE: packages/bruno-common/src/utils/template-hasher.ts
  constant VARIABLE_REGEX (line 1) | const VARIABLE_REGEX = /\{\{([^}]+)\}\}/g;
  function patternHasher (line 11) | function patternHasher(input: string, pattern: string | RegExp = VARIABL...

FILE: packages/bruno-common/src/utils/url/index.ts
  type QueryParam (line 1) | interface QueryParam {
  type BuildQueryStringOptions (line 6) | interface BuildQueryStringOptions {
  type ExtractQueryParamsOptions (line 10) | interface ExtractQueryParamsOptions {
  function buildQueryString (line 14) | function buildQueryString(paramsArray: QueryParam[], { encode = false }:...
  function parseQueryParams (line 26) | function parseQueryParams(query: string, { decode = false }: ExtractQuer...

FILE: packages/bruno-converters/src/insomnia/insomnia-to-bruno.js
  function createFolderStructure (line 266) | function createFolderStructure(resources, parentId = null) {

FILE: packages/bruno-converters/src/openapi/openapi-to-bruno.js
  constant CONTENT_TYPE_PATTERNS (line 9) | const CONTENT_TYPE_PATTERNS = {
  constant BODY_TYPE_HANDLERS (line 267) | const BODY_TYPE_HANDLERS = [

FILE: packages/bruno-converters/src/opencollection/common/variables.ts
  type BrunoVars (line 8) | interface BrunoVars {

FILE: packages/bruno-converters/src/opencollection/environment.ts
  type OCVariable (line 9) | interface OCVariable extends Omit<Variable, 'value'> {

FILE: packages/bruno-converters/src/opencollection/items/index.ts
  type OCItem (line 10) | interface OCItem {

FILE: packages/bruno-converters/src/opencollection/types.ts
  type BrunoConfig (line 169) | interface BrunoConfig {
  type BrunoCollectionRoot (line 220) | interface BrunoCollectionRoot {

FILE: packages/bruno-converters/src/postman/postman-to-bruno.js
  constant AUTH_TYPES (line 8) | const AUTH_TYPES = Object.freeze({

FILE: packages/bruno-converters/src/utils/ast-utils.js
  function getMemberExpressionString (line 20) | function getMemberExpressionString(node) {
  function buildMemberExpressionFromString (line 65) | function buildMemberExpressionFromString(str) {
  function isIdentifierNamed (line 81) | function isIdentifierNamed(node, name) {
  function isNullLiteral (line 91) | function isNullLiteral(node) {

FILE: packages/bruno-converters/src/utils/bruno-send-request-transformer.js
  constant CONTENT_TYPES (line 7) | const CONTENT_TYPES = Object.freeze({
  constant BODY_MODES (line 16) | const BODY_MODES = Object.freeze({

FILE: packages/bruno-converters/src/utils/bruno-to-postman-translator.js
  function processAllTransformations (line 435) | function processAllTransformations(ast) {
  function transformCookieJarMethods (line 472) | function transformCookieJarMethods(ast) {
  function transformTestsAndExpect (line 514) | function transformTestsAndExpect(ast) {
  function translateBruToPostman (line 553) | function translateBruToPostman(code) {

FILE: packages/bruno-converters/src/utils/flatten.js
  function flattenObject (line 13) | function flattenObject(obj, prefix = '') {

FILE: packages/bruno-converters/src/utils/postman-to-bruno-translator.js
  function processTransformations (line 591) | function processTransformations(ast, transformedNodes) {
  function translateCode (line 651) | function translateCode(code) {
  function preprocessAliases (line 683) | function preprocessAliases(ast) {
  function findVariableDefinitions (line 712) | function findVariableDefinitions(ast, symbolTable) {
  function resolveVariableReferences (line 764) | function resolveVariableReferences(ast, symbolTable) {
  function removeResolvedDeclarations (line 842) | function removeResolvedDeclarations(ast, symbolTable) {
  function processCookieJarVariables (line 946) | function processCookieJarVariables(ast) {
  function handleTestsBracketNotation (line 998) | function handleTestsBracketNotation(ast) {
  function handleLegacyGlobalAPIs (line 1110) | function handleLegacyGlobalAPIs(ast, transformedNodes, code) {

FILE: packages/bruno-converters/src/workers/postman-translator-worker.js
  function getMaxWorkers (line 5) | function getMaxWorkers() {
  class WorkerPool (line 9) | class WorkerPool {
    method constructor (line 10) | constructor(scriptPath, size) {
    method initialize (line 19) | initialize() {
    method runTask (line 28) | runTask(data) {
    method _runTaskOnWorker (line 41) | _runTaskOnWorker(workerId, task) {
    method terminate (line 80) | terminate() {
  function countScriptLines (line 90) | function countScriptLines(script) {
  function calculateScriptComplexity (line 96) | function calculateScriptComplexity([uid, entry]) {
  function createBalancedBatches (line 112) | function createBalancedBatches(scriptEntries, workerCount) {

FILE: packages/bruno-converters/src/wsdl/wsdl-to-bruno.js
  class WSDLParser (line 130) | class WSDLParser {
    method constructor (line 131) | constructor() {
    method parse (line 146) | async parse(wsdlContent) {
    method extractNamespaces (line 192) | extractNamespaces(definitions) {
    method parseTypes (line 207) | parseTypes(typesNode) {
    method parseElement (line 238) | parseElement(element, namespace) {
    method parseElementInline (line 317) | parseElementInline(element, namespace) {
    method findComplexTypeByName (line 388) | findComplexTypeByName(typeName, namespace) {
    method parseComplexType (line 408) | parseComplexType(complexType, namespace) {
    method parseComplexTypeContent (line 426) | parseComplexTypeContent(complexType, target) {
    method parseSequence (line 500) | parseSequence(sequence, target) {
    method parseChoice (line 512) | parseChoice(choice, target) {
    method parseAll (line 525) | parseAll(all, target) {
    method parseSimpleType (line 538) | parseSimpleType(simpleType, namespace) {
    method parseSimpleTypeContent (line 551) | parseSimpleTypeContent(simpleType) {
    method parseMessages (line 568) | parseMessages(definitions) {
    method parsePortTypes (line 586) | parsePortTypes(definitions) {
    method parseBindings (line 605) | parseBindings(definitions) {
    method parseServices (line 644) | parseServices(definitions) {
    method extractAddress (line 662) | extractAddress(port) {
    method getArray (line 674) | getArray(item) {
  class XMLSampleGenerator (line 683) | class XMLSampleGenerator {
    method constructor (line 684) | constructor(wsdlData) {
    method generateSample (line 692) | generateSample(elementName, namespace = '') {
    method findElement (line 704) | findElement(elementName, namespace) {
    method generateElementSample (line 726) | generateElementSample(element) {
    method collectAllAttributes (line 759) | collectAllAttributes(complexType) {
    method generateAttributes (line 778) | generateAttributes(element) {
    method isSimpleType (line 810) | isSimpleType(element) {
    method getSampleValue (line 831) | getSampleValue(element) {
    method generateComplexContent (line 862) | generateComplexContent(element) {
    method findComplexType (line 892) | findComplexType(typeName) {
    method generateComplexTypeSample (line 915) | generateComplexTypeSample(complexType) {
    method getRepetitionText (line 936) | getRepetitionText(minOccurs, maxOccurs) {

FILE: packages/bruno-electron/src/app/apiSpecs.js
  constant DEFAULT_WORKSPACE_NAME (line 12) | const DEFAULT_WORKSPACE_NAME = 'My Workspace';

FILE: packages/bruno-electron/src/app/apiSpecsWatcher.js
  class ApiSpecWatcher (line 70) | class ApiSpecWatcher {
    method constructor (line 71) | constructor() {
    method addWatcher (line 76) | addWatcher(win, watchPath, apiSpecUid, brunoConfig, workspacePath = nu...
    method hasWatcher (line 131) | hasWatcher(watchPath) {
    method removeWatcher (line 135) | removeWatcher(watchPath, win) {

FILE: packages/bruno-electron/src/app/collection-watcher.js
  constant MAX_FILE_SIZE (line 31) | const MAX_FILE_SIZE = 2.5 * 1024 * 1024;
  class CollectionWatcher (line 645) | class CollectionWatcher {
    method constructor (line 646) | constructor() {
    method initializeLoadingState (line 653) | initializeLoadingState(collectionUid) {
    method startCollectionDiscovery (line 663) | startCollectionDiscovery(win, collectionUid) {
    method addFileToProcessing (line 676) | addFileToProcessing(collectionUid, filepath) {
    method markFileAsProcessed (line 682) | markFileAsProcessed(win, collectionUid, filepath) {
    method completeCollectionDiscovery (line 698) | completeCollectionDiscovery(win, collectionUid) {
    method cleanupLoadingState (line 716) | cleanupLoadingState(collectionUid) {
    method addWatcher (line 720) | addWatcher(win, watchPath, collectionUid, brunoConfig, forcePolling = ...
    method hasWatcher (line 805) | hasWatcher(watchPath) {
    method removeWatcher (line 809) | removeWatcher(watchPath, win, collectionUid) {
    method getWatcherByItemPath (line 829) | getWatcherByItemPath(itemPath) {
    method unlinkItemPathInWatcher (line 842) | unlinkItemPathInWatcher(itemPath) {
    method addItemPathInWatcher (line 849) | addItemPathInWatcher(itemPath) {
    method getCollectionPathFromTempDirectory (line 857) | getCollectionPathFromTempDirectory(tempDirectoryPath) {
    method addTempDirectoryWatcher (line 871) | addTempDirectoryWatcher(win, tempDirectoryPath, collectionUid, collect...
    method getAllWatcherPaths (line 956) | getAllWatcherPaths() {

FILE: packages/bruno-electron/src/app/dotenv-watcher.js
  constant DEFAULT_WATCHER_OPTIONS (line 20) | const DEFAULT_WATCHER_OPTIONS = {
  class DotEnvWatcher (line 92) | class DotEnvWatcher {
    method constructor (line 93) | constructor() {
    method addCollectionWatcher (line 98) | addCollectionWatcher(win, collectionPath, collectionUid) {
    method removeCollectionWatcher (line 134) | removeCollectionWatcher(collectionPath, collectionUid) {
    method hasCollectionWatcher (line 144) | hasCollectionWatcher(collectionPath) {
    method addWorkspaceWatcher (line 148) | addWorkspaceWatcher(win, workspacePath, workspaceUid) {
    method removeWorkspaceWatcher (line 185) | removeWorkspaceWatcher(workspacePath) {
    method hasWorkspaceWatcher (line 193) | hasWorkspaceWatcher(workspacePath) {
    method closeAll (line 197) | closeAll() {

FILE: packages/bruno-electron/src/app/menu-template.js
  method click (line 13) | click() {
  method click (line 31) | click() {
  method click (line 39) | click() {
  method click (line 68) | click() {
  method click (line 75) | click() {
  method click (line 82) | click() {

FILE: packages/bruno-electron/src/app/onboarding.js
  function importSampleCollection (line 24) | async function importSampleCollection(collectionLocation, mainWindow) {
  function onboardUser (line 75) | async function onboardUser(mainWindow, lastOpenedCollections) {

FILE: packages/bruno-electron/src/app/system-monitor.js
  class SystemMonitor (line 3) | class SystemMonitor {
    method constructor (line 4) | constructor() {
    method start (line 10) | start(win, intervalMs = 2000) {
    method scheduleNextEmit (line 25) | scheduleNextEmit(win, intervalMs) {
    method stop (line 36) | stop() {
    method emitSystemStats (line 44) | emitSystemStats(win) {
    method isRunning (line 116) | isRunning() {

FILE: packages/bruno-electron/src/app/workspace-watcher.js
  constant DEFAULT_WORKSPACE_NAME (line 15) | const DEFAULT_WORKSPACE_NAME = 'My Workspace';
  class WorkspaceWatcher (line 126) | class WorkspaceWatcher {
    method constructor (line 127) | constructor() {
    method addWatcher (line 132) | addWatcher(win, workspacePath) {
    method removeWatcher (line 208) | removeWatcher(workspacePath) {
    method hasWatcher (line 224) | hasWatcher(workspacePath) {

FILE: packages/bruno-electron/src/index.js
  function incrementZoomAndPersist (line 502) | function incrementZoomAndPersist(inc) {
  function updateZoomLevel (line 514) | function updateZoomLevel(percent) {

FILE: packages/bruno-electron/src/ipc/collection.js
  constant MAX_COLLECTION_SIZE_IN_MB (line 84) | const MAX_COLLECTION_SIZE_IN_MB = 20;
  constant MAX_SINGLE_FILE_SIZE_IN_COLLECTION_IN_MB (line 85) | const MAX_SINGLE_FILE_SIZE_IN_COLLECTION_IN_MB = 5;
  constant MAX_COLLECTION_FILES_COUNT (line 86) | const MAX_COLLECTION_FILES_COUNT = 2000;

FILE: packages/bruno-electron/src/ipc/network/authorize-user-in-window.js
  function onWindowRedirect (line 135) | function onWindowRedirect(url) {

FILE: packages/bruno-electron/src/ipc/network/awsv4auth-helper.js
  function isStrPresent (line 4) | function isStrPresent(str) {
  function resolveAwsV4Credentials (line 8) | async function resolveAwsV4Credentials(request) {
  function addAwsV4Interceptor (line 27) | function addAwsV4Interceptor(axiosInstance, request) {

FILE: packages/bruno-electron/src/ipc/network/axios-instance.js
  constant URL (line 1) | const URL = require('url');
  constant LOCAL_IPV6 (line 12) | const LOCAL_IPV6 = '::1';
  constant LOCAL_IPV4 (line 13) | const LOCAL_IPV4 = '127.0.0.1';
  constant LOCALHOST (line 14) | const LOCALHOST = 'localhost';
  function makeAxiosInstance (line 74) | function makeAxiosInstance({

FILE: packages/bruno-electron/src/ipc/network/index.js
  constant ERROR_OCCURRED_WHILE_EXECUTING_REQUEST (line 40) | const ERROR_OCCURRED_WHILE_EXECUTING_REQUEST = 'Error occurred while exe...

FILE: packages/bruno-electron/src/ipc/network/prepare-request.js
  constant STREAMING_FILE_SIZE_THRESHOLD (line 9) | const STREAMING_FILE_SIZE_THRESHOLD = 20 * 1024 * 1024;

FILE: packages/bruno-electron/src/ipc/openapi-sync.js
  constant RESERVED_FOLDER_NAMES (line 495) | const RESERVED_FOLDER_NAMES = ['node_modules', '.git', 'environments'];

FILE: packages/bruno-electron/src/ipc/terminal.js
  class TerminalManager (line 7) | class TerminalManager {
    method constructor (line 8) | constructor() {
    method setupIpcHandlers (line 13) | setupIpcHandlers() {
    method getDefaultShell (line 137) | getDefaultShell() {
    method getDefaultCwd (line 146) | getDefaultCwd() {
    method generateSessionId (line 151) | generateSessionId() {
    method cleanup (line 156) | cleanup(webContents) {
    method killAll (line 170) | killAll() {

FILE: packages/bruno-electron/src/ipc/workspace.js
  constant DEFAULT_WORKSPACE_NAME (line 33) | const DEFAULT_WORKSPACE_NAME = 'My Workspace';

FILE: packages/bruno-electron/src/preload.js
  method getFilePath (line 21) | getFilePath(file) {

FILE: packages/bruno-electron/src/store/collection-security.js
  class CollectionSecurityStore (line 4) | class CollectionSecurityStore {
    method constructor (line 5) | constructor() {
    method setSecurityConfigForCollection (line 12) | setSecurityConfigForCollection(collectionPathname, securityConfig) {
    method getSecurityConfigForCollection (line 32) | getSecurityConfigForCollection(collectionPathname) {

FILE: packages/bruno-electron/src/store/cookies.js
  constant DEBOUNCE_MS (line 9) | const DEBOUNCE_MS = 5000;
  class CookiesStore (line 10) | class CookiesStore {
    method constructor (line 15) | constructor() {
    method #generatePasskey (line 26) | #generatePasskey() {
    method initializeEncryption (line 31) | initializeEncryption() {
    method getCookies (line 55) | getCookies() {
    method setCookies (line 85) | setCookies(cookies) {
    method initializeCookies (line 116) | initializeCookies() {
    method loadCookieIntoJar (line 132) | loadCookieIntoJar(rawCookie) {
    method writeCookieJar (line 150) | writeCookieJar() {
    method saveCookieJar (line 161) | saveCookieJar(immediate = false) {

FILE: packages/bruno-electron/src/store/default-workspace.js
  constant OPENCOLLECTION_VERSION (line 15) | const OPENCOLLECTION_VERSION = '1.0.0';
  constant WORKSPACE_TYPE (line 16) | const WORKSPACE_TYPE = 'workspace';
  constant DEFAULT_WORKSPACE_UID (line 17) | const DEFAULT_WORKSPACE_UID = 'default';
  constant MAX_WORKSPACE_CREATION_ATTEMPTS (line 18) | const MAX_WORKSPACE_CREATION_ATTEMPTS = 20;
  constant GLOBAL_ENV_BACKUP_FILE (line 19) | const GLOBAL_ENV_BACKUP_FILE = 'global-environments-backup.json';
  class DefaultWorkspaceManager (line 21) | class DefaultWorkspaceManager {
    method constructor (line 22) | constructor() {
    method findExistingDefaultWorkspaces (line 30) | findExistingDefaultWorkspaces() {
    method findLatestValidWorkspace (line 55) | findLatestValidWorkspace() {
    method recoverDataFromWorkspace (line 68) | recoverDataFromWorkspace(workspacePath) {
    method backupGlobalEnvironments (line 108) | backupGlobalEnvironments() {
    method getDefaultWorkspacePath (line 128) | getDefaultWorkspacePath() {
    method getDefaultWorkspaceUid (line 138) | getDefaultWorkspaceUid() {
    method setDefaultWorkspacePath (line 142) | async setDefaultWorkspacePath(workspacePath) {
    method isValidDefaultWorkspace (line 159) | isValidDefaultWorkspace(workspacePath) {
    method ensureDefaultWorkspaceExists (line 178) | async ensureDefaultWorkspaceExists() {
    method initializeDefaultWorkspace (line 231) | async initializeDefaultWorkspace(options = {}) {
    method migrateFromPreferences (line 298) | async migrateFromPreferences(workspacePath, workspaceConfig) {
    method needsMigration (line 392) | needsMigration() {

FILE: packages/bruno-electron/src/store/env-secrets.js
  class EnvironmentSecretsStore (line 24) | class EnvironmentSecretsStore {
    method constructor (line 25) | constructor() {
    method storeEnvSecrets (line 32) | storeEnvSecrets(collectionPathname, environment) {
    method getEnvSecrets (line 84) | getEnvSecrets(collectionPathname, environment) {
    method renameEnvironment (line 100) | renameEnvironment(collectionPathname, oldName, newName) {
    method deleteEnvironment (line 117) | deleteEnvironment(collectionPathname, environmentName) {

FILE: packages/bruno-electron/src/store/global-environments.js
  class GlobalEnvironmentsStore (line 6) | class GlobalEnvironmentsStore {
    method constructor (line 7) | constructor() {
    method filterValidEnvironments (line 19) | filterValidEnvironments(environments) {
    method encryptGlobalEnvironmentVariables (line 36) | encryptGlobalEnvironmentVariables({ globalEnvironments }) {
    method decryptGlobalEnvironmentVariables (line 50) | decryptGlobalEnvironmentVariables({ globalEnvironments }) {
    method getGlobalEnvironments (line 64) | getGlobalEnvironments() {
    method getActiveGlobalEnvironmentUid (line 85) | getActiveGlobalEnvironmentUid() {
    method setGlobalEnvironments (line 89) | setGlobalEnvironments(globalEnvironments) {
    method setActiveGlobalEnvironmentUid (line 96) | setActiveGlobalEnvironmentUid(uid) {
    method addGlobalEnvironment (line 100) | addGlobalEnvironment({ uid, name, variables = [], color }) {
    method saveGlobalEnvironment (line 115) | saveGlobalEnvironment({ environmentUid: globalEnvironmentUid, variable...
    method renameGlobalEnvironment (line 126) | renameGlobalEnvironment({ environmentUid: globalEnvironmentUid, name }) {
    method copyGlobalEnvironment (line 137) | copyGlobalEnvironment({ uid, name, variables }) {
    method selectGlobalEnvironment (line 147) | selectGlobalEnvironment({ environmentUid: globalEnvironmentUid }) {
    method deleteGlobalEnvironment (line 157) | deleteGlobalEnvironment({ environmentUid }) {
    method updateGlobalEnvironmentColor (line 167) | updateGlobalEnvironmentColor({ environmentUid, color }) {

FILE: packages/bruno-electron/src/store/last-opened-collections.js
  class LastOpenedCollections (line 6) | class LastOpenedCollections {
    method constructor (line 7) | constructor() {
    method getAll (line 15) | getAll() {
    method add (line 21) | add(collectionPath) {
    method update (line 30) | update(collectionPaths) {
    method remove (line 34) | remove(collectionPath) {
    method removeAll (line 43) | removeAll() {

FILE: packages/bruno-electron/src/store/last-opened-workspaces.js
  class LastOpenedWorkspaces (line 3) | class LastOpenedWorkspaces {
    method constructor (line 4) | constructor() {
    method getAll (line 11) | getAll() {
    method add (line 15) | add(workspacePath) {
    method remove (line 27) | remove(workspacePath) {

FILE: packages/bruno-electron/src/store/oauth2.js
  class Oauth2Store (line 23) | class Oauth2Store {
    method constructor (line 24) | constructor() {
    method getAllOauth2Data (line 32) | getAllOauth2Data() {
    method getOauth2DataOfCollection (line 39) | getOauth2DataOfCollection({ collectionUid, url }) {
    method updateOauth2DataOfCollection (line 58) | updateOauth2DataOfCollection({ collectionUid, url, data }) {
    method createNewOauth2SessionIdForCollection (line 68) | createNewOauth2SessionIdForCollection({ collectionUid, url }) {
    method getSessionIdOfCollection (line 84) | getSessionIdOfCollection({ collectionUid, url }) {
    method clearSessionIdOfCollection (line 100) | clearSessionIdOfCollection({ collectionUid, url }) {
    method getCredentialsForCollection (line 117) | getCredentialsForCollection({ collectionUid, url, credentialsId }) {
    method updateCredentialsForCollection (line 130) | updateCredentialsForCollection({ collectionUid, url, credentialsId, cr...
    method clearCredentialsByCredentialsId (line 153) | clearCredentialsByCredentialsId({ collectionUid, credentialsId }) {
    method clearCredentialsForCollection (line 170) | clearCredentialsForCollection({ collectionUid, url, credentialsId }) {

FILE: packages/bruno-electron/src/store/preferences.js
  class PreferencesStore (line 137) | class PreferencesStore {
    method constructor (line 138) | constructor() {
    method getPreferences (line 145) | getPreferences() {
    method savePreferences (line 259) | savePreferences(newPreferences) {

FILE: packages/bruno-electron/src/store/ui-state-snapshot.js
  class UiStateSnapshotStore (line 3) | class UiStateSnapshotStore {
    method constructor (line 4) | constructor() {
    method getCollections (line 11) | getCollections() {
    method saveCollections (line 15) | saveCollections(collections) {
    method getCollectionByPathname (line 19) | getCollectionByPathname({ pathname }) {
    method setCollectionByPathname (line 32) | setCollectionByPathname({ collection }) {
    method updateCollectionEnvironment (line 42) | updateCollectionEnvironment({ collectionPath, environmentName }) {
    method update (line 48) | update({ type, data }) {

FILE: packages/bruno-electron/src/store/window-state.js
  constant DEFAULT_WINDOW_WIDTH (line 3) | const DEFAULT_WINDOW_WIDTH = 1280;
  constant DEFAULT_WINDOW_HEIGHT (line 4) | const DEFAULT_WINDOW_HEIGHT = 768;
  constant DEFAULT_MAXIMIZED (line 6) | const DEFAULT_MAXIMIZED = false;
  class WindowStateStore (line 8) | class WindowStateStore {
    method constructor (line 9) | constructor() {
    method getBounds (line 16) | getBounds() {
    method setBounds (line 27) | setBounds(bounds) {
    method getMaximized (line 31) | getMaximized() {
    method setMaximized (line 35) | setMaximized(isMaximized) {

FILE: packages/bruno-electron/src/store/workspace-environments.js
  constant ENV_FILE_EXTENSION (line 19) | const ENV_FILE_EXTENSION = '.yml';
  class GlobalEnvironmentsManager (line 21) | class GlobalEnvironmentsManager {
    method constructor (line 22) | constructor() {}
    method envHasSecrets (line 24) | envHasSecrets(environment) {
    method getEnvironmentsDir (line 29) | getEnvironmentsDir(workspacePath) {
    method getEnvironmentFilePath (line 33) | getEnvironmentFilePath(workspacePath, environmentName) {
    method findEnvironmentFileByUid (line 37) | findEnvironmentFileByUid(workspacePath, environmentUid) {
    method parseEnvironmentFile (line 63) | async parseEnvironmentFile(filePath, workspacePath) {
    method getGlobalEnvironments (line 91) | async getGlobalEnvironments(workspacePath) {
    method getActiveGlobalEnvironmentUid (line 133) | async getActiveGlobalEnvironmentUid(workspacePath) {
    method setActiveGlobalEnvironmentUid (line 154) | async setActiveGlobalEnvironmentUid(workspacePath, environmentUid) {
    method createGlobalEnvironment (line 174) | async createGlobalEnvironment(workspacePath, { uid, name, variables, c...
    method saveGlobalEnvironment (line 216) | async saveGlobalEnvironment(workspacePath, { environmentUid, variables...
    method renameGlobalEnvironment (line 246) | async renameGlobalEnvironment(workspacePath, { environmentUid, name: n...
    method deleteGlobalEnvironment (line 292) | async deleteGlobalEnvironment(workspacePath, { environmentUid }) {
    method selectGlobalEnvironment (line 317) | async selectGlobalEnvironment(workspacePath, { environmentUid }) {
    method updateGlobalEnvironmentColor (line 330) | async updateGlobalEnvironmentColor(workspacePath, environmentUid, colo...
    method getGlobalEnvironmentsByPath (line 354) | async getGlobalEnvironmentsByPath(workspacePath) {
    method addGlobalEnvironmentByPath (line 358) | async addGlobalEnvironmentByPath(workspacePath, params) {
    method saveGlobalEnvironmentByPath (line 362) | async saveGlobalEnvironmentByPath(workspacePath, params) {
    method renameGlobalEnvironmentByPath (line 366) | async renameGlobalEnvironmentByPath(workspacePath, params) {
    method deleteGlobalEnvironmentByPath (line 370) | async deleteGlobalEnvironmentByPath(workspacePath, params) {
    method selectGlobalEnvironmentByPath (line 374) | async selectGlobalEnvironmentByPath(workspacePath, params) {
    method updateGlobalEnvironmentColorByPath (line 378) | async updateGlobalEnvironmentColorByPath(workspacePath, { environmentU...

FILE: packages/bruno-electron/src/utils/collection-import.js
  function findUniqueFolderName (line 11) | async function findUniqueFolderName(baseName, collectionLocation, counte...
  function importCollection (line 27) | async function importCollection(collection, collectionLocation, mainWind...

FILE: packages/bruno-electron/src/utils/common.js
  function recurse (line 80) | function recurse(current, prop) {

FILE: packages/bruno-electron/src/utils/constants.js
  constant REQUEST_TYPES (line 1) | const REQUEST_TYPES = ['http-request', 'graphql-request', 'grpc-request'...

FILE: packages/bruno-electron/src/utils/default-location.js
  constant BRUNO_DIR_NAME (line 5) | const BRUNO_DIR_NAME = 'bruno';
  function resolveDefaultLocation (line 11) | function resolveDefaultLocation() {

FILE: packages/bruno-electron/src/utils/encryption.js
  constant ELECTRONSAFESTORAGE_ALGO (line 6) | const ELECTRONSAFESTORAGE_ALGO = '00';
  constant AES256_ALGO (line 7) | const AES256_ALGO = '01';
  function deriveKeyAndIv (line 9) | function deriveKeyAndIv(password, keyLength, ivLength) {
  function aes256Encrypt (line 32) | function aes256Encrypt(data, passkey = null) {
  function aes256Decrypt (line 43) | function aes256Decrypt(data, passkey = null) {
  function safeStorageEncrypt (line 71) | function safeStorageEncrypt(str) {
  function safeStorageDecrypt (line 79) | function safeStorageDecrypt(str) {
  function encryptString (line 97) | function encryptString(str, passkey = null) {
  function decryptString (line 129) | function decryptString(str, passkey = null) {
  function decryptStringSafe (line 166) | function decryptStringSafe(str) {
  function encryptStringSafe (line 176) | function encryptStringSafe(str) {

FILE: packages/bruno-electron/src/utils/filesystem.js
  constant DEFAULT_GITIGNORE (line 8) | const DEFAULT_GITIGNORE = [
  function isWSLPath (line 84) | function isWSLPath(pathname) {
  function normalizeWSLPath (line 90) | function normalizeWSLPath(pathname) {
  function calculateStats (line 296) | async function calculateStats(directory) {
  function safeWriteFile (line 348) | async function safeWriteFile(filePath, data, options) {
  function safeWriteFileSync (line 360) | function safeWriteFileSync(filePath, data) {

FILE: packages/bruno-electron/src/utils/git.js
  function getChangedFilesInCollectionGit (line 623) | async function getChangedFilesInCollectionGit(_gitRootPath, _collectionP...

FILE: packages/bruno-electron/src/utils/oauth2.js
  constant BRUNO_OAUTH2_CALLBACK_URL (line 11) | const BRUNO_OAUTH2_CALLBACK_URL = 'https://oauth.usebruno.com/callback';

FILE: packages/bruno-electron/src/utils/parse.js
  function parseLargeRequestWithRedaction (line 10) | async function parseLargeRequestWithRedaction(bruContent, format = DEFAU...

FILE: packages/bruno-electron/src/utils/proxy-util.js
  constant DEFAULT_PORTS (line 12) | const DEFAULT_PORTS = {
  constant TARGET_TLS_OPTIONS (line 75) | const TARGET_TLS_OPTIONS = ['cert', 'key', 'pfx', 'passphrase', 'rejectU...
  class PatchedHttpsProxyAgent (line 85) | class PatchedHttpsProxyAgent extends HttpsProxyAgent {
    method constructor (line 86) | constructor(proxy, opts) {
    method connect (line 91) | async connect(req, opts) {
  function setupProxyAgents (line 106) | function setupProxyAgents({

FILE: packages/bruno-electron/src/utils/transformBrunoConfig.js
  function transformBrunoConfigBeforeSave (line 5) | function transformBrunoConfigBeforeSave(brunoConfig) {
  function transformBrunoConfigAfterRead (line 35) | async function transformBrunoConfigAfterRead(brunoConfig, collectionPath...

FILE: packages/bruno-electron/src/utils/window.js
  constant DEFAULT_WINDOW_WIDTH (line 6) | const DEFAULT_WINDOW_WIDTH = 1280;
  constant DEFAULT_WINDOW_HEIGHT (line 7) | const DEFAULT_WINDOW_HEIGHT = 768;

FILE: packages/bruno-electron/src/utils/workspace-config.js
  constant WORKSPACE_TYPE (line 11) | const WORKSPACE_TYPE = 'workspace';
  constant OPENCOLLECTION_VERSION (line 12) | const OPENCOLLECTION_VERSION = '1.0.0';

FILE: packages/bruno-electron/tests/cookies-store.test.js
  function createFreshStore (line 25) | function createFreshStore() {

FILE: packages/bruno-filestore/src/constants.ts
  constant DEFAULT_COLLECTION_FORMAT (line 3) | const DEFAULT_COLLECTION_FORMAT: CollectionFormat = 'yml';

FILE: packages/bruno-filestore/src/formats/bru/utils/oauth2-additional-params.ts
  type T_Oauth2ParameterType (line 1) | type T_Oauth2ParameterType = 'authorization' | 'token' | 'refresh';
  type T_Oauth2ParameterSendInType (line 2) | type T_Oauth2ParameterSendInType = 'headers' | 'queryparams' | 'body';
  type T_OAuth2AdditionalParam (line 4) | interface T_OAuth2AdditionalParam {
  type T_OAuth2AdditionalParameters (line 11) | interface T_OAuth2AdditionalParameters {
  type T_Oauth2Auth (line 17) | interface T_Oauth2Auth {
  type T_BruJson (line 22) | interface T_BruJson {
  type T_Oauth2ParameterMapping (line 36) | interface T_Oauth2ParameterMapping {
  constant PARAMETER_MAPPINGS (line 42) | const PARAMETER_MAPPINGS: T_Oauth2ParameterMapping[] = [

FILE: packages/bruno-filestore/src/formats/yml/common/assertions.ts
  constant OPERATORS (line 5) | const OPERATORS = [
  constant UNARY_OPERATORS (line 36) | const UNARY_OPERATORS = [
  type Operator (line 51) | type Operator = typeof OPERATORS[number];

FILE: packages/bruno-filestore/src/formats/yml/parseCollection.ts
  type ParsedCollection (line 11) | interface ParsedCollection {

FILE: packages/bruno-filestore/src/formats/yml/utils.ts
  constant BLOCK_KEYS (line 4) | const BLOCK_KEYS = ['info', 'http', 'graphql', 'grpc', 'websocket', 'run...

FILE: packages/bruno-filestore/src/types.ts
  type CollectionFormat (line 1) | type CollectionFormat = 'bru' | 'yml';
  type ParseOptions (line 3) | interface ParseOptions {
  type StringifyOptions (line 7) | interface StringifyOptions {
  type WorkerTask (line 11) | interface WorkerTask {
  type Lane (line 20) | interface Lane {

FILE: packages/bruno-filestore/src/workers/WorkerQueue/index.ts
  type QueuedTask (line 3) | interface QueuedTask {
  class WorkerQueue (line 12) | class WorkerQueue {
    method constructor (line 17) | constructor() {
    method getWorkerForScriptPath (line 23) | async getWorkerForScriptPath(scriptPath: string) {
    method enqueue (line 32) | async enqueue(task: QueuedTask) {
    method processQueue (line 42) | async processQueue() {
    method runWorker (line 61) | async runWorker({ scriptPath, data, taskType }: { scriptPath: string; ...
    method cleanup (line 101) | async cleanup() {

FILE: packages/bruno-filestore/src/workers/index.ts
  constant LANES (line 20) | const LANES: Lane[] = [{
  type WorkerQueueWithSize (line 32) | interface WorkerQueueWithSize {
  class BruParserWorker (line 38) | class BruParserWorker {
    method constructor (line 41) | constructor() {
    method getWorkerQueue (line 48) | private getWorkerQueue(size: number): WorkerQueue {
    method enqueueTask (line 58) | private async enqueueTask({ data, taskType, format = DEFAULT_COLLECTIO...
    method parseRequest (line 71) | async parseRequest(data: any, format: CollectionFormat = DEFAULT_COLLE...
    method stringifyRequest (line 75) | async stringifyRequest(data: any, format: CollectionFormat = DEFAULT_C...
    method cleanup (line 79) | async cleanup(): Promise<void> {

FILE: packages/bruno-filestore/src/workers/worker-script.ts
  type WorkerMessage (line 7) | interface WorkerMessage {

FILE: packages/bruno-graphql-docs/src/components/DocExplorer.tsx
  type NavStackItem (line 18) | type NavStackItem = {
  type DocExplorerProps (line 30) | type DocExplorerProps = {
  type DocExplorerState (line 36) | type DocExplorerState = {
  class DocExplorer (line 56) | class DocExplorer extends React.Component<DocExplorerProps, DocExplorerS...
    method constructor (line 58) | constructor(props: DocExplorerProps) {
    method shouldComponentUpdate (line 64) | shouldComponentUpdate(nextProps: DocExplorerProps, nextState: DocExplo...
    method render (line 72) | render() {
    method showDoc (line 155) | showDoc(typeOrField: GraphQLNamedType | FieldType) {
    method showDocForReference (line 171) | showDocForReference(reference: any) {
    method showSearch (line 184) | showSearch(search: string) {
    method reset (line 191) | reset() {

FILE: packages/bruno-graphql-docs/src/components/DocExplorer/Argument.tsx
  type ArgumentProps (line 14) | type ArgumentProps = {
  function Argument (line 20) | function Argument({ arg, onClickType, showDefaultValue }: ArgumentProps) {

FILE: packages/bruno-graphql-docs/src/components/DocExplorer/DefaultValue.tsx
  type DefaultValueProps (line 19) | type DefaultValueProps = {
  function DefaultValue (line 23) | function DefaultValue({ field }: DefaultValueProps) {

FILE: packages/bruno-graphql-docs/src/components/DocExplorer/Directive.tsx
  type DirectiveProps (line 11) | type DirectiveProps = {
  function Directive (line 15) | function Directive({ directive }: DirectiveProps) {

FILE: packages/bruno-graphql-docs/src/components/DocExplorer/FieldDoc.tsx
  type FieldDocProps (line 16) | type FieldDocProps = {
  function FieldDoc (line 21) | function FieldDoc({ field, onClickType }: FieldDocProps) {

FILE: packages/bruno-graphql-docs/src/components/DocExplorer/MarkdownContent.tsx
  type Maybe (line 11) | type Maybe<T> = T | null | undefined;
  type MarkdownContentProps (line 18) | type MarkdownContentProps = {
  function MarkdownContent (line 23) | function MarkdownContent({ markdown, className }: MarkdownContentProps) {

FILE: packages/bruno-graphql-docs/src/components/DocExplorer/SchemaDoc.tsx
  type SchemaDocProps (line 14) | type SchemaDocProps = {
  function SchemaDoc (line 20) | function SchemaDoc({ schema, onClickType }: SchemaDocProps) {

FILE: packages/bruno-graphql-docs/src/components/DocExplorer/SearchBox.tsx
  type OnSearchFn (line 12) | type OnSearchFn = (value: string) => void;
  type SearchBoxProps (line 14) | type SearchBoxProps = {
  type SearchBoxState (line 20) | type SearchBoxState = {
  class SearchBox (line 24) | class SearchBox extends React.Component<SearchBoxProps, SearchBoxState> {
    method constructor (line 27) | constructor(props: SearchBoxProps) {
    method render (line 33) | render() {

FILE: packages/bruno-graphql-docs/src/components/DocExplorer/SearchResults.tsx
  type SearchResultsProps (line 15) | type SearchResultsProps = {
  class SearchResults (line 23) | class SearchResults extends React.Component<SearchResultsProps, {}> {
    method shouldComponentUpdate (line 24) | shouldComponentUpdate(nextProps: SearchResultsProps) {
    method render (line 28) | render() {
  function isMatch (line 133) | function isMatch(sourceText: string, searchValue: string) {

FILE: packages/bruno-graphql-docs/src/components/DocExplorer/TypeDoc.tsx
  type TypeDocProps (line 25) | type TypeDocProps = {
  type TypeDocState (line 32) | type TypeDocState = {
  class TypeDoc (line 36) | class TypeDoc extends React.Component<TypeDocProps, TypeDocState> {
    method constructor (line 37) | constructor(props: TypeDocProps) {
    method shouldComponentUpdate (line 42) | shouldComponentUpdate(nextProps: TypeDocProps, nextState: TypeDocState) {
    method render (line 50) | render() {
  type FieldProps (line 176) | type FieldProps = {
  function Field (line 183) | function Field({ type, field, onClickType, onClickField }: FieldProps) {
  type EnumValue (line 213) | type EnumValue = {
  function EnumValue (line 217) | function EnumValue({ value }: EnumValue) {

FILE: packages/bruno-graphql-docs/src/components/DocExplorer/TypeLink.tsx
  type Maybe (line 12) | type Maybe<T> = T | null | undefined;
  type TypeLinkProps (line 14) | type TypeLinkProps = {
  function TypeLink (line 19) | function TypeLink(props: TypeLinkProps) {
  function renderType (line 24) | function renderType(type: Maybe<GraphQLType>, onClick: OnClickTypeFuncti...

FILE: packages/bruno-graphql-docs/src/components/DocExplorer/types.ts
  type FieldType (line 13) | type FieldType = GraphQLField<{}, {}, {}> | GraphQLInputField | GraphQLA...
  type OnClickFieldFunction (line 15) | type OnClickFieldFunction = (
  type OnClickTypeFunction (line 21) | type OnClickTypeFunction = (type: GraphQLNamedType, event?: MouseEvent<H...
  type OnClickFieldOrTypeFunction (line 23) | type OnClickFieldOrTypeFunction = OnClickFieldFunction | OnClickTypeFunc...

FILE: packages/bruno-graphql-docs/src/utility/debounce.ts
  function debounce (line 12) | function debounce<F extends (...args: any[]) => any>(duration: number, f...

FILE: packages/bruno-js/src/bru.js
  class Bru (line 9) | class Bru {
    method constructor (line 30) | constructor(runtime, envVariables, runtimeVariables, processEnvVars, c...
    method cwd (line 179) | cwd() {
    method getEnvName (line 183) | getEnvName() {
    method getProcessEnv (line 187) | getProcessEnv(key) {
    method hasEnvVar (line 191) | hasEnvVar(key) {
    method getEnvVar (line 195) | getEnvVar(key) {
    method setEnvVar (line 199) | setEnvVar(key, value, options = {}) {
    method deleteEnvVar (line 226) | deleteEnvVar(key) {
    method getAllEnvVars (line 230) | getAllEnvVars() {
    method deleteAllEnvVars (line 236) | deleteAllEnvVars() {
    method getGlobalEnvVar (line 248) | getGlobalEnvVar(key) {
    method setGlobalEnvVar (line 252) | setGlobalEnvVar(key, value) {
    method getAllGlobalEnvVars (line 266) | getAllGlobalEnvVars() {
    method getOauth2CredentialVar (line 280) | getOauth2CredentialVar(key) {
    method resetOauth2Credential (line 284) | resetOauth2Credential(credentialId) {
    method hasVar (line 302) | hasVar(key) {
    method setVar (line 306) | setVar(key, value) {
    method getVar (line 321) | getVar(key) {
    method deleteVar (line 332) | deleteVar(key) {
    method deleteAllVars (line 336) | deleteAllVars() {
    method getAllVars (line 344) | getAllVars() {
    method getCollectionVar (line 348) | getCollectionVar(key) {
    method hasCollectionVar (line 369) | hasCollectionVar(key) {
    method getFolderVar (line 395) | getFolderVar(key) {
    method getRequestVar (line 399) | getRequestVar(key) {
    method setNextRequest (line 403) | setNextRequest(nextRequest) {
    method sleep (line 407) | sleep(ms) {
    method getCollectionName (line 411) | getCollectionName() {
    method isSafeMode (line 415) | isSafeMode() {

FILE: packages/bruno-js/src/bruno-request.js
  class BrunoRequest (line 1) | class BrunoRequest {
    method constructor (line 14) | constructor(req) {
    method getUrl (line 36) | getUrl() {
    method setUrl (line 40) | setUrl(url) {
    method getHost (line 45) | getHost() {
    method getPath (line 54) | getPath() {
    method getQueryString (line 82) | getQueryString() {
    method getMethod (line 92) | getMethod() {
    method getAuthMode (line 96) | getAuthMode() {
    method setMethod (line 114) | setMethod(method) {
    method getHeaders (line 119) | getHeaders() {
    method setHeaders (line 123) | setHeaders(headers) {
    method deleteHeaders (line 128) | deleteHeaders(headers) {
    method getHeader (line 132) | getHeader(name) {
    method setHeader (line 136) | setHeader(name, value) {
    method deleteHeader (line 141) | deleteHeader(name) {
    method hasJSONContentType (line 158) | hasJSONContentType(headers) {
    method getBody (line 169) | getBody(options = {}) {
    method setBody (line 192) | setBody(data, options = {}) {
    method setMaxRedirects (line 210) | setMaxRedirects(maxRedirects) {
    method getTimeout (line 214) | getTimeout() {
    method setTimeout (line 218) | setTimeout(timeout) {
    method onFail (line 223) | onFail(callback) {
    method __safeParseJSON (line 231) | __safeParseJSON(str) {
    method __safeStringifyJSON (line 239) | __safeStringifyJSON(obj) {
    method __isObject (line 247) | __isObject(obj) {
    method disableParsingResponseJson (line 251) | disableParsingResponseJson() {
    method getExecutionMode (line 255) | getExecutionMode() {
    method getName (line 259) | getName() {
    method getPathParams (line 263) | getPathParams() {
    method getTags (line 277) | getTags() {

FILE: packages/bruno-js/src/bruno-response.js
  class BrunoResponse (line 4) | class BrunoResponse {
    method constructor (line 5) | constructor(res) {
    method getStatus (line 22) | getStatus() {
    method getStatusText (line 26) | getStatusText() {
    method getHeader (line 30) | getHeader(name) {
    method getHeaders (line 34) | getHeaders() {
    method getBody (line 38) | getBody() {
    method getResponseTime (line 42) | getResponseTime() {
    method getUrl (line 46) | getUrl() {
    method setBody (line 50) | setBody(data) {
    method getSize (line 75) | getSize() {
    method getDataBuffer (line 113) | getDataBuffer() {

FILE: packages/bruno-js/src/runtime/assert-runtime.js
  class AssertRuntime (line 247) | class AssertRuntime {
    method constructor (line 248) | constructor(props) {
    method runAssertions (line 252) | runAssertions(assertions, request, response, envVariables, runtimeVari...

FILE: packages/bruno-js/src/runtime/script-runtime.js
  class ScriptRuntime (line 11) | class ScriptRuntime {
    method constructor (line 12) | constructor(props) {
    method runRequestScript (line 18) | async runRequestScript(
    method runResponseScript (line 136) | async runResponseScript(

FILE: packages/bruno-js/src/runtime/test-runtime.js
  class TestRuntime (line 12) | class TestRuntime {
    method constructor (line 13) | constructor(props) {
    method runTests (line 17) | async runTests(

FILE: packages/bruno-js/src/runtime/vars-runtime.js
  class VarsRuntime (line 21) | class VarsRuntime {
    method constructor (line 22) | constructor(props) {
    method runPostResponseVars (line 27) | runPostResponseVars(vars, request, response, envVariables, runtimeVari...

FILE: packages/bruno-js/src/sandbox/bundle-libraries.js
  method resolveId (line 41) | resolveId(id) {
  method load (line 47) | load(id) {

FILE: packages/bruno-js/src/sandbox/node-vm/cjs-loader.js
  function resolveLocalModulePath (line 19) | function resolveLocalModulePath(fromDir, moduleName) {
  function createCustomRequire (line 72) | function createCustomRequire({
  function loadLocalModule (line 130) | function loadLocalModule({
  function executeModuleInVmContext (line 207) | function executeModuleInVmContext({
  function loadNpmModule (line 277) | function loadNpmModule({
  function createNpmModuleRequire (line 327) | function createNpmModuleRequire({

FILE: packages/bruno-js/src/sandbox/node-vm/console.js
  function getTypeTag (line 7) | function getTypeTag(value) {
  function transformValue (line 18) | function transformValue(value, seen = new WeakSet()) {
  function wrapConsoleWithSerializers (line 82) | function wrapConsoleWithSerializers(originalConsole) {

FILE: packages/bruno-js/src/sandbox/node-vm/index.js
  function runScriptInNodeVm (line 24) | async function runScriptInNodeVm({
  function buildScriptContext (line 135) | function buildScriptContext(context, scriptingConfig) {

FILE: packages/bruno-js/src/sandbox/node-vm/utils.js
  function isBuiltinModule (line 9) | function isBuiltinModule(moduleName) {
  function isPathWithinAllowedRoots (line 20) | function isPathWithinAllowedRoots(normalizedPath, additionalContextRoots...
  function resolveVmFilename (line 34) | function resolveVmFilename(scriptPath, collectionPath) {
  class ScriptError (line 41) | class ScriptError extends Error {
    method constructor (line 42) | constructor(error, script) {

FILE: packages/bruno-js/src/sandbox/quickjs/shims/lib/utils.js
  function serializeTypedArray (line 1) | function serializeTypedArray(ta) {
  function deserializeTypedArray (line 9) | function deserializeTypedArray(obj) {

FILE: packages/bruno-js/src/sandbox/quickjs/utils/index.js
  function invokeFunction (line 42) | async function invokeFunction(vm, quickFn, args = []) {

FILE: packages/bruno-js/src/test-results.js
  class TestResults (line 3) | class TestResults {
    method constructor (line 4) | constructor() {
    method addResult (line 8) | addResult(result) {
    method getResults (line 13) | getResults() {

FILE: packages/bruno-js/src/utils.js
  constant JS_KEYWORDS (line 4) | const JS_KEYWORDS = `

FILE: packages/bruno-js/src/utils/error-formatter.js
  constant YAML (line 2) | const YAML = require('yaml');
  constant DEFAULT_CONTEXT_LINES (line 5) | const DEFAULT_CONTEXT_LINES = 5;
  constant ALLOWED_SOURCE_EXTENSIONS (line 6) | const ALLOWED_SOURCE_EXTENSIONS = ['.bru', '.yml', '.yaml'];
  constant SCRIPT_TYPES (line 11) | const SCRIPT_TYPES = Object.freeze({
  constant SCRIPT_TYPE_TO_YML (line 18) | const SCRIPT_TYPE_TO_YML = {
  constant BLOCK_PATTERNS (line 35) | const BLOCK_PATTERNS = {

FILE: packages/bruno-js/src/utils/error-formatter.spec.js
  constant MULTI_BLOCK_BRU (line 22) | const MULTI_BLOCK_BRU = `meta {
  constant BRU_WITH_COMMENTS (line 60) | const BRU_WITH_COMMENTS = `meta {
  constant MULTI_BLOCK_YML (line 78) | const MULTI_BLOCK_YML = [
  constant COLLECTION_YML (line 101) | const COLLECTION_YML = [

FILE: packages/bruno-js/src/utils/sandbox.js
  constant SANDBOX (line 5) | const SANDBOX = Object.freeze({
  constant NODEVM_SCRIPT_PREFIX (line 12) | const NODEVM_SCRIPT_PREFIX = `
  constant NODEVM_SCRIPT_SUFFIX (line 16) | const NODEVM_SCRIPT_SUFFIX = `
  constant QUICKJS_SCRIPT_PREFIX (line 22) | const QUICKJS_SCRIPT_PREFIX = `
  constant QUICKJS_SCRIPT_SUFFIX (line 33) | const QUICKJS_SCRIPT_SUFFIX = `
  constant NODEVM_SCRIPT_WRAPPER_OFFSET (line 43) | const NODEVM_SCRIPT_WRAPPER_OFFSET = NODEVM_SCRIPT_PREFIX.split('\n').le...
  constant QUICKJS_SCRIPT_WRAPPER_OFFSET (line 44) | const QUICKJS_SCRIPT_WRAPPER_OFFSET = QUICKJS_SCRIPT_PREFIX.split('\n')....

FILE: packages/bruno-lang/v2/src/bruToJson.js
  method BruFile (line 335) | BruFile(tags) {
  method dictionary (line 348) | dictionary(_1, _2, pairlist, _3) {
  method pairlist (line 351) | pairlist(_1, pair, _2, rest, _3) {
  method pair (line 354) | pair(_1, key, _2, _3, _4, value, _5) {
  method esc_quote_char (line 363) | esc_quote_char(_1, quote) {
  method quoted_key (line 367) | quoted_key(disabled, _1, chars, _2) {
  method key (line 371) | key(chars) {
  method assertdictionary (line 374) | assertdictionary(_1, _2, pairlist, _3) {
  method assertpairlist (line 377) | assertpairlist(_1, pair, _2, rest, _3) {
  method assertpair (line 380) | assertpair(_1, key, _2, _3, _4, value, _5) {
  method assertkey (line 385) | assertkey(chars) {
  method list (line 388) | list(_1, _2, _3, listitems, _4, _5, _6, _7) {
  method listitems (line 391) | listitems(listitem, _1, rest) {
  method listitem (line 394) | listitem(_1, textchar, _2) {
  method textblock (line 397) | textblock(line, _1, rest) {
  method textline (line 400) | textline(chars) {
  method textchar (line 403) | textchar(char) {
  method nl (line 406) | nl(_1, _2) {
  method st (line 409) | st(_) {
  method tagend (line 412) | tagend(_1, _2) {
  method _terminal (line 415) | _terminal() {
  method multilinetextblockdelimiter (line 418) | multilinetextblockdelimiter(_) {
  method multilinetextblock (line 421) | multilinetextblock(_1, content, _2, _3, contentType) {
  method singlelinevalue (line 432) | singlelinevalue(chars) {
  method _iter (line 435) | _iter(...elements) {
  method meta (line 438) | meta(_1, dictionary) {
  method settings (line 453) | settings(_1, dictionary) {
  method grpc (line 505) | grpc(_1, dictionary) {
  method ws (line 510) | ws(_1, dictionary) {
  method get (line 515) | get(_1, dictionary) {
  method post (line 523) | post(_1, dictionary) {
  method put (line 531) | put(_1, dictionary) {
  method delete (line 539) | delete(_1, dictionary) {
  method patch (line 547) | patch(_1, dictionary) {
  method options (line 555) | options(_1, dictionary) {
  method head (line 563) | head(_1, dictionary) {
  method connect (line 571) | connect(_1, dictionary) {
  method trace (line 579) | trace(_1, dictionary) {
  method httpcustom (line 587) | httpcustom(_1, dictionary) {
  method query (line 599) | query(_1, dictionary) {
  method paramspath (line 604) | paramspath(_1, dictionary) {
  method paramsquery (line 609) | paramsquery(_1, dictionary) {
  method headers (line 614) | headers(_1, dictionary) {
  method metadata (line 619) | metadata(_1, dictionary) {
  method authawsv4 (line 624) | authawsv4(_1, dictionary) {
  method authbasic (line 651) | authbasic(_1, dictionary) {
  method authbearer (line 666) | authbearer(_1, dictionary) {
  method authdigest (line 678) | authdigest(_1, dictionary) {
  method authNTLM (line 693) | authNTLM(_1, dictionary) {
  method authOAuth2 (line 713) | authOAuth2(_1, dictionary) {
  method oauth2AuthReqHeaders (line 814) | oauth2AuthReqHeaders(_1, dictionary) {
  method oauth2AuthReqQueryParams (line 819) | oauth2AuthReqQueryParams(_1, dictionary) {
  method oauth2AccessTokenReqHeaders (line 824) | oauth2AccessTokenReqHeaders(_1, dictionary) {
  method oauth2AccessTokenReqQueryParams (line 829) | oauth2AccessTokenReqQueryParams(_1, dictionary) {
  method oauth2AccessTokenReqBody (line 834) | oauth2AccessTokenReqBody(_1, dictionary) {
  method oauth2RefreshTokenReqHeaders (line 839) | oauth2RefreshTokenReqHeaders(_1, dictionary) {
  method oauth2RefreshTokenReqQueryParams (line 844) | oauth2RefreshTokenReqQueryParams(_1, dictionary) {
  method oauth2RefreshTokenReqBody (line 849) | oauth2RefreshTokenReqBody(_1, dictionary) {
  method authwsse (line 854) | authwsse(_1, dictionary) {
  method authapikey (line 871) | authapikey(_1, dictionary) {
  method bodyformurlencoded (line 893) | bodyformurlencoded(_1, dictionary) {
  method bodymultipart (line 900) | bodymultipart(_1, dictionary) {
  method bodyfile (line 907) | bodyfile(_1, dictionary) {
  method body (line 914) | body(_1, _2, _3, _4, textblock, _5) {
  method bodyjson (line 924) | bodyjson(_1, _2, _3, _4, textblock, _5) {
  method bodytext (line 931) | bodytext(_1, _2, _3, _4, textblock, _5) {
  method bodyxml (line 938) | bodyxml(_1, _2, _3, _4, textblock, _5) {
  method bodysparql (line 945) | bodysparql(_1, _2, _3, _4, textblock, _5) {
  method bodygraphql (line 952) | bodygraphql(_1, _2, _3, _4, textblock, _5) {
  method bodygraphqlvars (line 961) | bodygraphqlvars(_1, _2, _3, _4, textblock, _5) {
  method varsreq (line 970) | varsreq(_1, dictionary) {
  method varsres (line 988) | varsres(_1, dictionary) {
  method assert (line 1006) | assert(_1, dictionary) {
  method scriptreq (line 1011) | scriptreq(_1, _2, _3, _4, textblock, _5) {
  method scriptres (line 1018) | scriptres(_1, _2, _3, _4, textblock, _5) {
  method tests (line 1025) | tests(_1, _2, _3, _4, textblock, _5) {
  method docs (line 1030) | docs(_1, _2, _3, _4, textblock, _5) {
  method bodygrpc (line 1035) | bodygrpc(_1, dictionary) {
  method bodyws (line 1053) | bodyws(_1, dictionary) {
  method example (line 1076) | example(_1, _2, _3, _4, examplecontent, _5) {
  method examplecontent (line 1083) | examplecontent(chars) {

FILE: packages/bruno-lang/v2/src/collectionBruToJson.js
  method BruFile (line 126) | BruFile(tags) {
  method dictionary (line 139) | dictionary(_1, _2, pairlist, _3) {
  method pairlist (line 142) | pairlist(_1, pair, _2, rest, _3) {
  method pair (line 145) | pair(_1, key, _2, _3, _4, value, _5) {
  method quoted_key (line 150) | quoted_key(disabled, _1, chars, _2) {
  method esc_quote_char (line 154) | esc_quote_char(_1, quote) {
  method quoted_key_char (line 158) | quoted_key_char(char) {
  method key (line 162) | key(chars) {
  method value (line 165) | value(chars) {
  method textblock (line 184) | textblock(line, _1, rest) {
  method textline (line 187) | textline(chars) {
  method textchar (line 190) | textchar(char) {
  method multilinetextblock (line 193) | multilinetextblock(_1, content, _2) {
  method nl (line 197) | nl(_1, _2) {
  method st (line 200) | st(_) {
  method tagend (line 203) | tagend(_1, _2) {
  method _iter (line 206) | _iter(...elements) {
  method meta (line 209) | meta(_1, dictionary) {
  method auth (line 218) | auth(_1, dictionary) {
  method query (line 227) | query(_1, dictionary) {
  method headers (line 232) | headers(_1, dictionary) {
  method authawsv4 (line 237) | authawsv4(_1, dictionary) {
  method authbasic (line 264) | authbasic(_1, dictionary) {
  method authbearer (line 279) | authbearer(_1, dictionary) {
  method authdigest (line 291) | authdigest(_1, dictionary) {
  method authNTLM (line 306) | authNTLM(_1, dictionary) {
  method authOAuth2 (line 326) | authOAuth2(_1, dictionary) {
  method oauth2AuthReqHeaders (line 427) | oauth2AuthReqHeaders(_1, dictionary) {
  method oauth2AuthReqQueryParams (line 432) | oauth2AuthReqQueryParams(_1, dictionary) {
  method oauth2AccessTokenReqHeaders (line 437) | oauth2AccessTokenReqHeaders(_1, dictionary) {
  method oauth2AccessTokenReqQueryParams (line 442) | oauth2AccessTokenReqQueryParams(_1, dictionary) {
  method oauth2AccessTokenReqBody (line 447) | oauth2AccessTokenReqBody(_1, dictionary) {
  method oauth2RefreshTokenReqHeaders (line 452) | oauth2RefreshTokenReqHeaders(_1, dictionary) {
  method oauth2RefreshTokenReqQueryParams (line 457) | oauth2RefreshTokenReqQueryParams(_1, dictionary) {
  method oauth2RefreshTokenReqBody (line 462) | oauth2RefreshTokenReqBody(_1, dictionary) {
  method authwsse (line 467) | authwsse(_1, dictionary) {
  method authapikey (line 482) | authapikey(_1, dictionary) {
  method varsreq (line 504) | varsreq(_1, dictionary) {
  method varsres (line 522) | varsres(_1, dictionary) {
  method scriptreq (line 540) | scriptreq(_1, _2, _3, _4, textblock, _5) {
  method scriptres (line 547) | scriptres(_1, _2, _3, _4, textblock, _5) {
  method tests (line 554) | tests(_1, _2, _3, _4, textblock, _5) {
  method docs (line 559) | docs(_1, _2, _3, _4, textblock, _5) {

FILE: packages/bruno-lang/v2/src/common/attributes.js
  method dictionary (line 6) | dictionary(_1, _2, pairlist, _3) {
  method pairlist (line 9) | pairlist(_1, pair, _2, rest) {
  method pair (line 12) | pair(_1, key, _2, _3, _4, value, _5) {
  method esc_quote_char (line 21) | esc_quote_char(_1, quote) {
  method quoted_key (line 24) | quoted_key(disabled, _1, chars, _2) {
  method key (line 27) | key(chars) {
  method textblock (line 30) | textblock(line, _1, rest) {
  method textline (line 33) | textline(chars) {
  method textchar (line 36) | textchar(char) {
  method nl (line 39) | nl(_1, _2) {
  method st (line 42) | st(_) {
  method tagend (line 45) | tagend(_1, _2) {
  method _terminal (line 48) | _terminal() {
  method multilinetextblockdelimiter (line 51) | multilinetextblockdelimiter(_) {
  method multilinetextblock (line 54) | multilinetextblock(_1, content, _2, _3, contentType) {
  method singlelinevalue (line 65) | singlelinevalue(chars) {
  method _iter (line 68) | _iter(...elements) {

FILE: packages/bruno-lang/v2/src/envToJson.js
  method BruEnvFile (line 101) | BruEnvFile(tags) {
  method array (line 116) | array(_1, _2, _3, valuelist, _4, _5) {
  method arrayvalue (line 119) | arrayvalue(chars) {
  method valuelist (line 122) | valuelist(_1, value, _2, _3, _4, rest) {
  method dictionary (line 125) | dictionary(_1, _2, pairlist, _3) {
  method pairlist (line 128) | pairlist(_1, pair, _2, rest, _3) {
  method pair (line 131) | pair(_1, key, _2, _3, _4, value, _5) {
  method key (line 136) | key(chars) {
  method value (line 139) | value(chars) {
  method multilinetextblockstart (line 146) | multilinetextblockstart(_1, _2) {
  method multilinetextblockend (line 149) | multilinetextblockend(_1, _2, _3) {
  method multilinetextblockdelimiter (line 152) | multilinetextblockdelimiter(_) {
  method multilinetextblock (line 155) | multilinetextblock(_1, content, _2) {
  method multilinetextblockcontent (line 162) | multilinetextblockcontent(chars) {
  method nl (line 165) | nl(_1, _2) {
  method st (line 168) | st(_) {
  method tagend (line 171) | tagend(_1, _2) {
  method _iter (line 174) | _iter(...elements) {
  method vars (line 177) | vars(_1, dictionary) {

FILE: packages/bruno-lang/v2/src/example/bruToJson.js
  method ExampleFile (line 71) | ExampleFile(tags) {
  method name (line 83) | name(_1, _2, _3, _4, value, _6) {
  method description (line 88) | description(_1, _2, _3, _4, value, _6) {
  method textvalue (line 93) | textvalue(content) {
  method multilinetextblock (line 96) | multilinetextblock(_1, content, _2, _3, contentType) {
  method request (line 104) | request(_1, _2, _3, _4, _5, _6, _7, requestcontent, _8, _9, _10) {
  method requestcontent (line 116) | requestcontent(chars) {
  method response (line 119) | response(_1, _2, _3, _4, _5, _6, content, _7, _8, _9) {
  method responsecontent (line 125) | responsecontent(chars) {

FILE: packages/bruno-lang/v2/src/example/request/bruToJson.js
  method RequestFile (line 82) | RequestFile(tags) {
  method requesturl (line 93) | requesturl(_1, _2, _3, _4, value) {
  method requestmethod (line 98) | requestmethod(_1, _2, _3, _4, value) {
  method requestmode (line 103) | requestmode(_1, _2, _3, _4, value) {
  method requestparamspath (line 112) | requestparamspath(_1, _2, _3, _4, dictionary) {
  method requestparamsquery (line 117) | requestparamsquery(_1, _2, _3, _4, dictionary) {
  method requestheaders (line 122) | requestheaders(_1, _2, _3, _4, dictionary) {
  method bodyjson (line 129) | bodyjson(_1, _2, _3, _4, _5, _6, textblock, _8) {
  method bodytext (line 137) | bodytext(_1, _2, _3, _4, _5, _6, textblock, _8) {
  method bodyxml (line 145) | bodyxml(_1, _2, _3, _4, _5, _6, textblock, _8) {
  method bodysparql (line 153) | bodysparql(_1, _2, _3, _4, _5, _6, textblock, _8) {
  method bodygraphql (line 161) | bodygraphql(_1, _2, _3, _4, _5, _6, textblock, _8) {
  method bodygraphqlvars (line 171) | bodygraphqlvars(_1, _2, _3, _4, _5, _6, textblock, _8) {
  method bodyformurlencoded (line 181) | bodyformurlencoded(_1, _2, _3, _4, dictionary) {
  method bodymultipart (line 189) | bodymultipart(_1, _2, _3, _4, dictionary) {
  method bodyfile (line 197) | bodyfile(_1, _2, _3, _4, dictionary) {

FILE: packages/bruno-lang/v2/src/example/response/bruToJson.js
  method ResponseFile (line 64) | ResponseFile(tags) {
  method responsecontent (line 74) | responsecontent(content) {
  method responseheaders (line 77) | responseheaders(_1, _2, _3, _4, dictionary, _6) {
  method responsestatus (line 80) | responsestatus(_1, _2, _3, _4, dictionary, _6) {
  method responsebodyblock (line 87) | responsebodyblock(_1, _2, _3, _4, _5, _6, responsebodyfields, _8) {
  method responsebodytype (line 109) | responsebodytype(_1, _2, _3, _4, _5, value, _7) {
  method responsebodycontentvalue (line 114) | responsebodycontentvalue(_1, _2, _3, _4, _5, multilinetextblock) {

FILE: packages/bruno-query/src/index.ts
  function normalize (line 4) | function normalize(value: any) {
  function getValue (line 28) | function getValue(source: any, prop: string, deep = false): any {
  type PredicateOrMapper (line 50) | type PredicateOrMapper = ((obj: any) => any) | Record<string, any>;
  function objectPredicate (line 55) | function objectPredicate(obj: Record<string, any>) {
  function filterOrMap (line 69) | function filterOrMap(source: any, funOrObj: PredicateOrMapper) {
  function get (line 114) | function get(source: any, path: string, ...fns: PredicateOrMapper[]) {

FILE: packages/bruno-requests/src/auth/digestauth-helper.js
  function isStrPresent (line 4) | function isStrPresent(str) {
  function stripQuotes (line 8) | function stripQuotes(str) {
  function splitAuthHeaderKeyValue (line 12) | function splitAuthHeaderKeyValue(str) {
  function containsDigestHeader (line 19) | function containsDigestHeader(response) {
  function containsAuthorizationHeader (line 24) | function containsAuthorizationHeader(originalRequest) {
  function md5 (line 31) | function md5(input) {
  function addDigestInterceptor (line 35) | function addDigestInterceptor(axiosInstance, request) {

FILE: packages/bruno-requests/src/auth/oauth2-helper.spec.ts
  method saveCredential (line 14) | async saveCredential({ url, credentialsId, credentials: creds }) {
  method getCredential (line 18) | async getCredential({ url, credentialsId }) {
  method deleteCredential (line 21) | async deleteCredential({ url, credentialsId }) {

FILE: packages/bruno-requests/src/auth/oauth2-helper.ts
  type TokenStore (line 5) | interface TokenStore {
  type AdditionalParameter (line 11) | interface AdditionalParameter {
  type OAuth2Config (line 18) | interface OAuth2Config {
  type RequestConfig (line 36) | interface RequestConfig extends AxiosRequestConfig {
  type ClientCredentialsData (line 48) | interface ClientCredentialsData {
  type PasswordGrantData (line 56) | interface PasswordGrantData {

FILE: packages/bruno-requests/src/cookies/index.spec.ts
  type CookieJarWrapper (line 5) | type CookieJarWrapper = ReturnType<typeof cookiesModule.jar>;

FILE: packages/bruno-requests/src/grpc/grpc-client.js
  class GrpcClient (line 193) | class GrpcClient {
    method constructor (line 194) | constructor(eventCallback) {
    method #createCallOptions (line 205) | #createCallOptions(metadata) {
    method #getReflectionClient (line 225) | async #getReflectionClient(host, credentials = ChannelCredentials.crea...
    method #getMethodType (line 248) | #getMethodType({ requestStream, responseStream }) {
    method #getChannelCredentials (line 280) | #getChannelCredentials({ url, rootCertificate, privateKey, certificate...
    method #getMethodFromPath (line 330) | #getMethodFromPath(path) {
    method #refreshMethods (line 351) | async #refreshMethods({ url, headers, protoPath, collectionPath, colle...
    method #handleConnection (line 394) | #handleConnection(options) {
    method #handleUnaryResponse (line 417) | #handleUnaryResponse({ client, requestId, requestPath, method, message...
    method #handleClientStreamingResponse (line 432) | #handleClientStreamingResponse({ client, requestId, requestPath, metho...
    method #handleServerStreamingResponse (line 447) | #handleServerStreamingResponse({ client, requestId, requestPath, metho...
    method #handleBidiStreamingResponse (line 464) | #handleBidiStreamingResponse({ client, requestId, requestPath, method,...
    method startConnection (line 497) | async startConnection({
    method sendMessage (line 612) | sendMessage(requestId, collectionUid, body) {
    method loadMethodsFromReflection (line 645) | async loadMethodsFromReflection({
    method loadMethodsFromProtoFile (line 713) | async loadMethodsFromProtoFile(filePath, includeDirs = []) {
    method end (line 728) | end(requestId) {
    method cancel (line 736) | cancel(requestId) {
    method isConnectionActive (line 749) | isConnectionActive(requestId) {
    method clearAllConnections (line 756) | clearAllConnections() {
    method generateSampleMessage (line 782) | generateSampleMessage(methodPath, options = {}) {
    method getActiveConnectionIds (line 822) | getActiveConnectionIds() {
    method #addConnection (line 832) | #addConnection(requestId, connection) {
    method #removeConnection (line 848) | #removeConnection(requestId) {
    method generateGrpcurlCommand (line 867) | generateGrpcurlCommand({ request, collectionPath = '', shell = 'bash',...

FILE: packages/bruno-requests/src/network/axios-instance.ts
  type ModifiedInternalAxiosRequestConfig (line 21) | type ModifiedInternalAxiosRequestConfig = InternalAxiosRequestConfig & {
  type ModifiedAxiosResponse (line 26) | type ModifiedAxiosResponse = AxiosResponse & {

FILE: packages/bruno-requests/src/network/system-proxy/index.ts
  class SystemProxyResolver (line 8) | class SystemProxyResolver {
    method constructor (line 13) | constructor(options: SystemProxyResolverOptions = {}) {
    method getSystemProxy (line 20) | async getSystemProxy(): Promise<ProxyConfiguration> {
    method detectSystemProxy (line 37) | private async detectSystemProxy(): Promise<ProxyConfiguration> {
    method detectByPlatform (line 55) | private async detectByPlatform(): Promise<ProxyConfiguration> {
    method getEnvironmentVariables (line 68) | getEnvironmentVariables(): ProxyConfiguration {
  function getSystemProxy (line 86) | async function getSystemProxy(): Promise<ProxyConfiguration> {

FILE: packages/bruno-requests/src/network/system-proxy/types.ts
  type ProxyConfiguration (line 1) | interface ProxyConfiguration {
  type ProxyResolver (line 8) | interface ProxyResolver {
  type SystemProxyResolverOptions (line 12) | interface SystemProxyResolverOptions {

FILE: packages/bruno-requests/src/network/system-proxy/utils/common.ts
  function safeExec (line 15) | async function safeExec(bin: string, args: string[], opts: ExecFileOptio...

FILE: packages/bruno-requests/src/network/system-proxy/utils/linux.ts
  constant PROXY_VAR_PATTERNS (line 8) | const PROXY_VAR_PATTERNS = ['http_proxy', 'https_proxy', 'no_proxy', 'al...
  class LinuxProxyResolver (line 14) | class LinuxProxyResolver implements ProxyResolver {
    method detect (line 15) | async detect(opts?: { timeoutMs?: number }): Promise<ProxyConfiguratio...
    method getGSettingsProxy (line 49) | private async getGSettingsProxy(execOpts: ExecFileOptions): Promise<Pr...
    method getKDEProxy (line 84) | private async getKDEProxy(execOpts: ExecFileOptions): Promise<ProxyCon...
    method getEnvironmentFileProxy (line 123) | private async getEnvironmentFileProxy(): Promise<ProxyConfiguration | ...
    method getSystemdProxy (line 135) | private async getSystemdProxy(): Promise<ProxyConfiguration | null> {
    method parseProxyFromContent (line 165) | private parseProxyFromContent(content: string): ProxyConfiguration | n...

FILE: packages/bruno-requests/src/network/system-proxy/utils/macos.ts
  class MacOSProxyResolver (line 5) | class MacOSProxyResolver implements ProxyResolver {
    method detect (line 6) | async detect(opts?: { timeoutMs?: number }): Promise<ProxyConfiguratio...
    method parseScutilOutput (line 21) | private parseScutilOutput(output: string): ProxyConfiguration {
    method parseConfiguration (line 38) | private parseConfiguration(lines: string[], startIndex: number): Recor...
    method buildProxyConfiguration (line 81) | private buildProxyConfiguration(config: Record<string, any>): ProxyCon...

FILE: packages/bruno-requests/src/network/system-proxy/utils/windows.ts
  class WindowsProxyResolver (line 5) | class WindowsProxyResolver implements ProxyResolver {
    method detect (line 6) | async detect(opts?: { timeoutMs?: number }): Promise<ProxyConfiguratio...
    method getInternetOptions (line 41) | private async getInternetOptions(execOpts: ExecFileOptions): Promise<P...
    method getWinHttpProxy (line 80) | private async getWinHttpProxy(execOpts: ExecFileOptions): Promise<Prox...
    method getSystemProxyEnvironment (line 101) | private async getSystemProxyEnvironment(execOpts: ExecFileOptions): Pr...
    method getUserEnvironmentProxy (line 142) | private async getUserEnvironmentProxy(execOpts: ExecFileOptions): Prom...
    method parseProxyString (line 183) | private parseProxyString(proxyServer: string, bypassList: string | nul...

FILE: packages/bruno-requests/src/scripting/send-request.ts
  type T_SendRequestCallback (line 6) | type T_SendRequestCallback = (error: any, response: any) => void;
  type SendRequestConfig (line 13) | type SendRequestConfig = Omit<GetHttpHttpsAgentsParams, 'requestUrl'>;

FILE: packages/bruno-requests/src/utils/agent-cache.ts
  constant MAX_AGENT_CACHE_SIZE (line 20) | const MAX_AGENT_CACHE_SIZE = 100;
  function getAgentClassId (line 41) | function getAgentClassId(AgentClass: any): number {
  function hashValue (line 54) | function hashValue(value: string | Buffer | undefined): string | null {
  function buildSecureContext (line 77) | function buildSecureContext(ca: string | Buffer | (string | Buffer)[]): ...
  function applySecureContext (line 106) | function applySecureContext<T extends AgentOptions | HttpAgentOptions>(o...
  function hashCaValue (line 141) | function hashCaValue(value: string | Buffer | (string | Buffer)[] | unde...
  function getAgentCacheKey (line 156) | function getAgentCacheKey(agentClassId: number, options: AgentOptions, p...
  function getHttpAgentCacheKey (line 180) | function getHttpAgentCacheKey(agentClassId: number, options: HttpAgentOp...
  function getTimelineAgentClass (line 194) | function getTimelineAgentClass(BaseAgentClass: any): AgentClass {
  function getTimelineHttpAgentClass (line 207) | function getTimelineHttpAgentClass(BaseAgentClass: any): HttpAgentClass {
  type CacheKeyFn (line 219) | type CacheKeyFn<T> = (classId: number, options: T, proxyUri: string | nu...
  type TimelineClassFn (line 224) | type TimelineClassFn = (base: any) => AgentClass | HttpAgentClass;
  function getOrCreateAgentInternal (line 230) | function getOrCreateAgentInternal<TOptions extends HttpAgentOptions>(
  function getOrCreateHttpsAgent (line 311) | function getOrCreateHttpsAgent({
  function getOrCreateHttpAgent (line 345) | function getOrCreateHttpAgent({
  function clearAgentCache (line 377) | function clearAgentCache(): void {
  function getAgentCacheSize (line 389) | function getAgentCacheSize(): number {

FILE: packages/bruno-requests/src/utils/ca-cert.ts
  type T_CACertificatesOptions (line 4) | type T_CACertificatesOptions = {
  type T_CACertificatesResult (line 9) | type T_CACertificatesResult = {
  function getSystemCerts (line 21) | function getSystemCerts(): string[] {
  function certToString (line 33) | function certToString(cert: string | Buffer) {
  function mergeCA (line 39) | function mergeCA(...args: (string | string[])[]): string {
  function getNodeExtraCACerts (line 53) | function getNodeExtraCACerts(): string[] {

FILE: packages/bruno-requests/src/utils/http-https-agents.ts
  constant DEFAULT_PORTS (line 17) | const DEFAULT_PORTS: Record<string, number> = {
  type ProxyMode (line 26) | type ProxyMode = 'on' | 'off' | 'system';
  type ProxyAuth (line 28) | type ProxyAuth = {
  type ProxyConfig (line 34) | type ProxyConfig = {
  type SystemProxyConfig (line 44) | type SystemProxyConfig = {
  type ClientCertificate (line 50) | type ClientCertificate = {
  type CACertificatesCount (line 59) | type CACertificatesCount = {
  type CertsConfig (line 66) | type CertsConfig = {
  type HttpsAgentRequestFields (line 75) | type HttpsAgentRequestFields = {
  type TlsOptions (line 82) | type TlsOptions = HttpsAgentRequestFields & CertsConfig & {
  type AgentResult (line 88) | type AgentResult = {
  type ConfigOptions (line 93) | type ConfigOptions = {
  type GetCertsAndProxyConfigParams (line 102) | type GetCertsAndProxyConfigParams = {
  type GetCertsAndProxyConfigResult (line 114) | type GetCertsAndProxyConfigResult = {
  type CreateAgentsParams (line 120) | type CreateAgentsParams = {
  type GetHttpHttpsAgentsParams (line 131) | type GetHttpHttpsAgentsParams = {
  constant TARGET_TLS_OPTIONS (line 203) | const TARGET_TLS_OPTIONS = ['cert', 'key', 'pfx', 'passphrase', 'rejectU...
  class PatchedHttpsProxyAgent (line 214) | class PatchedHttpsProxyAgent extends HttpsProxyAgent<any> {
    method constructor (line 217) | constructor(proxy: string, opts: any) {
    method connect (line 222) | async connect(req: any, opts: any) {
  function extractHostname (line 368) | function extractHostname(url: string | undefined): string | null {
  function createAgents (line 377) | function createAgents({

FILE: packages/bruno-requests/src/utils/node-vault.ts
  type VaultConfig (line 7) | interface VaultConfig {
  type VaultRequestOptions (line 20) | interface VaultRequestOptions {
  type ApproleLoginArgs (line 30) | interface ApproleLoginArgs {
  type TokenRenewArgs (line 40) | interface TokenRenewArgs {
  class VaultError (line 48) | class VaultError extends Error {
    method constructor (line 57) | constructor(message: string, response?: { statusCode: number; body: an...
  type VaultClient (line 73) | interface VaultClient {
  function createHttpsAgent (line 89) | function createHttpsAgent(options: VaultRequestOptions): https.Agent | u...
  function handleVaultResponse (line 109) | function handleVaultResponse(statusCode: number, body: any, path: string...
  function createVaultClient (line 148) | function createVaultClient(config: VaultConfig = {}): VaultClient {

FILE: packages/bruno-requests/src/utils/proxy-util.ts
  type OldProxyAuth (line 7) | interface OldProxyAuth {
  type OldProxyConfig (line 13) | interface OldProxyConfig {
  type NewProxyAuth (line 22) | interface NewProxyAuth {
  type NewProxyConfig (line 28) | interface NewProxyConfig {

FILE: packages/bruno-requests/src/utils/timeline-agent.ts
  type TimelineEntry (line 4) | type TimelineEntry = {
  type CaCertificatesCount (line 10) | type CaCertificatesCount = {
  type AgentOptions (line 17) | type AgentOptions = {
  type AgentClass (line 33) | type AgentClass = new (options: AgentOptions, timeline?: TimelineEntry[]...
  type ProxyAgentClass (line 34) | type ProxyAgentClass = new (proxyUri: string, options?: AgentOptions) =>...
  type HttpAgentOptions (line 36) | type HttpAgentOptions = {
  type HttpAgentClass (line 41) | type HttpAgentClass = new (options: HttpAgentOptions, timeline?: Timelin...
  type HttpProxyAgentClass (line 42) | type HttpProxyAgentClass = new (proxyUri: string, options?: HttpAgentOpt...
  function createTimelineAgentClass (line 56) | function createTimelineAgentClass<T extends ProxyAgentClass | typeof htt...
  function createTimelineHttpAgentClass (line 226) | function createTimelineHttpAgentClass<T extends HttpProxyAgentClass | ty...

FILE: packages/bruno-requests/src/ws/ws-client.js
  class WsClient (line 82) | class WsClient {
    method constructor (line 87) | constructor(eventCallback) {
    method startConnection (line 98) | async startConnection({ request, collection, options = {} }) {
    method #getMessageQueueId (line 163) | #getMessageQueueId(requestId) {
    method queueMessage (line 167) | queueMessage(requestId, collectionUid, message, format = 'raw') {
    method #flushQueue (line 183) | #flushQueue(requestId, collectionUid) {
    method sendMessage (line 198) | sendMessage(requestId, collectionUid, message, format = 'raw') {
    method close (line 233) | close(requestId, code = 1000, reason = 'Client initiated close') {
    method isConnectionActive (line 247) | isConnectionActive(requestId) {
    method getActiveConnectionIds (line 256) | getActiveConnectionIds() {
    method closeForCollection (line 260) | closeForCollection(collectionUid) {
    method clearAllConnections (line 273) | clearAllConnections() {
    method #setupWsEventHandlers (line 303) | #setupWsEventHandlers(ws, requestId, collectionUid, options) {
    method #addConnection (line 392) | #addConnection(requestId, collectionUid, connection) {
    method #removeConnection (line 409) | #removeConnection(requestId) {
    method connectionStatus (line 438) | connectionStatus(requestId) {

FILE: packages/bruno-schema-types/src/collection/collection.ts
  type RunnerResult (line 6) | interface RunnerResult {
  type Collection (line 10) | interface Collection {

FILE: packages/bruno-schema-types/src/collection/environment.ts
  type EnvironmentVariable (line 3) | interface EnvironmentVariable {
  type Environment (line 12) | interface Environment {
  type Environments (line 19) | type Environments = Environment[];

FILE: packages/bruno-schema-types/src/collection/examples.ts
  type ExampleType (line 4) | type ExampleType = 'http-request' | 'graphql-request' | 'grpc-request';
  type ExampleRequest (line 6) | interface ExampleRequest {
  type ExampleResponseBody (line 14) | interface ExampleResponseBody {
  type ExampleResponse (line 19) | interface ExampleResponse {
  type Example (line 26) | interface Example {

FILE: packages/bruno-schema-types/src/collection/folder.ts
  type FolderRequest (line 3) | interface FolderRequest {
  type FolderMeta (line 14) | interface FolderMeta {
  type FolderRoot (line 19) | interface FolderRoot {

FILE: packages/bruno-schema-types/src/collection/item.ts
  type ItemType (line 6) | type ItemType
  type HttpItemSettings (line 14) | interface HttpItemSettings {
  type WebSocketItemSettings (line 21) | interface WebSocketItemSettings {
  type ItemSettings (line 28) | type ItemSettings = HttpItemSettings | WebSocketItemSettings | null;
  type Item (line 30) | interface Item {

FILE: packages/bruno-schema-types/src/common/auth.ts
  type AuthAwsV4 (line 1) | interface AuthAwsV4 {
  type AuthBasic (line 10) | interface AuthBasic {
  type AuthWsse (line 15) | interface AuthWsse {
  type AuthBearer (line 20) | interface AuthBearer {
  type AuthDigest (line 24) | interface AuthDigest {
  type AuthNTLM (line 29) | interface AuthNTLM {
  type AuthApiKey (line 35) | interface AuthApiKey {
  type OAuthGrantType (line 41) | type OAuthGrantType
  type OAuthAdditionalParameter (line 47) | interface OAuthAdditionalParameter {
  type OAuthAdditionalParameters (line 54) | interface OAuthAdditionalParameters {
  type OAuth2 (line 60) | interface OAuth2 {
  type AuthMode (line 84) | type AuthMode
  type Auth (line 96) | interface Auth {

FILE: packages/bruno-schema-types/src/common/file.ts
  type FileEntry (line 3) | interface FileEntry {
  type FileList (line 10) | type FileList = FileEntry[];

FILE: packages/bruno-schema-types/src/common/graphql.ts
  type GraphqlBody (line 1) | interface GraphqlBody {

FILE: packages/bruno-schema-types/src/common/key-value.ts
  type KeyValue (line 6) | interface KeyValue {

FILE: packages/bruno-schema-types/src/common/multipart-form.ts
  type MultipartFormEntry (line 3) | interface MultipartFormEntry {
  type MultipartForm (line 13) | type MultipartForm = MultipartFormEntry[];

FILE: packages/bruno-schema-types/src/common/scripts.ts
  type Script (line 1) | interface Script {

FILE: packages/bruno-schema-types/src/common/uid.ts
  type UID (line 4) | type UID = string;

FILE: packages/bruno-schema-types/src/common/variables.ts
  type Variable (line 6) | interface Variable {
  type Variables (line 15) | type Variables = Variable[] | null;

FILE: packages/bruno-schema-types/src/requests/grpc.ts
  type GrpcMethodType (line 3) | type GrpcMethodType
  type GrpcMessage (line 10) | interface GrpcMessage {
  type GrpcRequestBody (line 15) | interface GrpcRequestBody {
  type GrpcRequest (line 20) | interface GrpcRequest {

FILE: packages/bruno-schema-types/src/requests/http.ts
  type HttpRequestParamType (line 11) | type HttpRequestParamType = 'query' | 'path';
  type HttpRequestParam (line 13) | interface HttpRequestParam extends KeyValue {
  type HttpRequestBodyMode (line 17) | type HttpRequestBodyMode
  type HttpRequestBody (line 28) | interface HttpRequestBody {
  type HttpRequest (line 40) | interface HttpRequest {

FILE: packages/bruno-schema-types/src/requests/index.ts
  type Request (line 26) | type Request = HttpRequest | GrpcRequest | WebSocketRequest;

FILE: packages/bruno-schema-types/src/requests/websocket.ts
  type WebSocketMessage (line 3) | interface WebSocketMessage {
  type WebSocketRequestBody (line 9) | interface WebSocketRequestBody {
  type WebSocketRequest (line 14) | interface WebSocketRequest {

FILE: packages/bruno-tests/additional-context-root-lib/index.js
  function generateUser (line 15) | function generateUser() {
  function verifyDependencies (line 33) | function verifyDependencies() {

FILE: packages/bruno-tests/additional-context-root-lib/lib.js
  function formatName (line 5) | function formatName(firstName, lastName) {
  function generateGreeting (line 9) | function generateGreeting(name) {

FILE: packages/bruno-tests/src/auth/cookie.js
  function requireAuth (line 9) | function requireAuth(req, res, next) {

FILE: packages/bruno-tests/src/auth/oauth2/authorizationCode.js
  function generateUniqueString (line 16) | function generateUniqueString() {

FILE: packages/bruno-tests/src/auth/oauth2/clientCredentials.js
  function generateUniqueString (line 14) | function generateUniqueString() {

FILE: packages/bruno-tests/src/auth/wsse.js
  function sha256 (line 7) | function sha256(data) {
  function validateWSSE (line 11) | function validateWSSE(req, res, next) {
  function unauthorized (line 36) | function unauthorized(res, message) {

FILE: packages/bruno-tests/src/ws/index.js
  constant ACCEPTED_SUB_PROTOS (line 52) | const ACCEPTED_SUB_PROTOS = ['soap'];

FILE: playwright/codegen.ts
  function main (line 4) | async function main() {

FILE: playwright/index.ts
  function recursiveCopy (line 10) | async function recursiveCopy(src: string, dest: string) {
  constant TRACING_OPTIONS (line 28) | const TRACING_OPTIONS = { screenshots: true, snapshots: true, sources: t...
  function isTracingEnabled (line 30) | function isTracingEnabled(testInfo: TestInfo): boolean {
  function usePageWithTracing (line 34) | async function usePageWithTracing(
  function closeElectronApp (line 77) | async function closeElectronApp(app: ElectronApplication) {

FILE: scripts/build-electron.js
  function deleteFileIfExists (line 7) | async function deleteFileIfExists(filePath) {
  function copyFolderIfExists (line 21) | async function copyFolderIfExists(srcPath, destPath) {
  function removeSourceMapFiles (line 35) | async function removeSourceMapFiles(directory) {
  function execCommandWithOutput (line 50) | async function execCommandWithOutput(command) {
  function main (line 69) | async function main() {

FILE: scripts/changed-packages.js
  constant USAGE (line 26) | const USAGE = [
  function printTree (line 134) | function printTree(rootName, map, seen = new Set(), indent = '') {
  function getTransitiveDependents (line 163) | function getTransitiveDependents(pkgName, visited = new Set()) {
  function buildUpdateOrder (line 180) | function buildUpdateOrder(changedPackages) {

FILE: scripts/count-locs.js
  constant PACKAGES_DIR (line 6) | const PACKAGES_DIR = path.join(__dirname, '..', 'packages');
  constant EXCLUDE_DIRS (line 7) | const EXCLUDE_DIRS = ['node_modules', 'dist', 'build', '.next', 'coverag...
  constant EXCLUDE_PACKAGES (line 8) | const EXCLUDE_PACKAGES = ['bruno-toml', 'bruno-tests', 'bruno-docs'];
  constant CODE_EXTENSIONS (line 9) | const CODE_EXTENSIONS = ['.js', '.jsx', '.ts', '.tsx', '.css', '.scss', ...
  function countLinesInFile (line 11) | function countLinesInFile(filePath) {
  function shouldExcludeDir (line 20) | function shouldExcludeDir(dirName) {
  function isCodeFile (line 24) | function isCodeFile(fileName) {
  function countLinesInDirectory (line 28) | function countLinesInDirectory(dirPath) {
  function getPackages (line 55) | function getPackages() {
  function formatNumber (line 74) | function formatNumber(num) {
  function printTable (line 78) | function printTable(data) {
  function main (line 105) | function main() {

FILE: scripts/dev-hot-reload.js
  constant NODE_VERSION (line 20) | const NODE_VERSION = readFileSync('.nvmrc', 'utf8').trim().split('.')[0];
  constant CONFIG (line 23) | const CONFIG = {
  constant COLORS (line 37) | const COLORS = {
  constant LOG_LEVELS (line 45) | const LOG_LEVELS = {
  function log (line 53) | function log(level, msg) {
  function showHelp (line 72) | function showHelp() {
  function commandExists (line 98) | function commandExists(command) {
  function ensureGlobalPackage (line 108) | function ensureGlobalPackage(packageName) {
  function ensureNodeVersion (line 116) | function ensureNodeVersion(requiredVersion) {
  function cleanNodeModules (line 127) | function cleanNodeModules() {
  function reinstallDependencies (line 133) | function reinstallDependencies() {
  function startDevelopment (line 140) | function startDevelopment() {

FILE: scripts/dev.js
  function startElectron (line 68) | function startElectron(port) {
  function cleanup (line 87) | function cleanup() {

FILE: scripts/pr-checkout.js
  function log (line 19) | function log(...args) {
  function run (line 23) | function run(cmd, options = {}) {
  function runCapture (line 28) | function runCapture(cmd) {

FILE: scripts/setup.js
  function forceInstallPlatformDeps (line 60) | function forceInstallPlatformDeps() {
  function setup (line 79) | async function setup() {

FILE: tests/environments/color-picker/color-picker.spec.ts
  constant PRESET_COLORS (line 4) | const PRESET_COLORS = [

FILE: tests/environments/export-environment/collection-env-export/collection-env-export.spec.ts
  function loadExpectedFixture (line 6) | function loadExpectedFixture(fixturePath: string) {
  function normalizeExportedContent (line 13) | function normalizeExportedContent(content: any) {

FILE: tests/environments/export-environment/global-env-export/global-env-export.spec.ts
  function loadExpectedFixture (line 6) | function loadExpectedFixture(fixturePath: string) {
  function normalizeExportedContent (line 12) | function normalizeExportedContent(content: any) {

FILE: tests/onboarding/sample-collection.spec.ts
  function dismissWelcomeModalIfVisible (line 11) | async function dismissWelcomeModalIfVisible(page: any) {

FILE: tests/preferences/default-collection-location/default-collection-location.spec.js
  constant EXPECTED_PATH_SUFFIX (line 3) | const EXPECTED_PATH_SUFFIX = 'tests/preferences/default-collection-locat...

FILE: tests/runner/collection-run-report/collection-run-report.spec.ts
  function normalizeJunitReport (line 6) | function normalizeJunitReport(xmlContent: string): string {

FILE: tests/ssl/custom-ca-certs/server/helpers/certs.js
  function createCertsDir (line 5) | function createCertsDir(certsDir) {
  function generateCertificates (line 12) | function generateCertificates(certsDir) {
  function validateCertificateChain (line 111) | function validateCertificateChain(certsDir) {
  function addCAToTruststore (line 145) | function addCAToTruststore(certsDir) {
  function verifyCertificates (line 192) | function verifyCertificates(certsDir) {

FILE: tests/ssl/custom-ca-certs/server/helpers/platform.js
  function execCommand (line 4) | function execCommand(command, cwd = process.cwd()) {
  function execCommandSilent (line 12) | function execCommandSilent(command, cwd = process.cwd()) {
  function detectPlatform (line 20) | function detectPlatform() {
  function killProcessOnPort (line 30) | function killProcessOnPort(port) {

FILE: tests/ssl/custom-ca-certs/server/index.js
  function createServer (line 9) | function createServer(certsDir, port = 8090) {
  function shutdownServer (line 82) | function shutdownServer(server, cleanup) {
  function startServer (line 99) | async function startServer() {

FILE: tests/ssl/custom-ca-certs/server/scripts/generate-certs.js
  function setup (line 14) | async function setup() {

FILE: tests/ssl/custom-ca-certs/tests/wss-success/wss-success.spec.ts
  constant BRU_REQ_NAME (line 5) | const BRU_REQ_NAME = /^ws-ssl-request$/;

FILE: tests/utils/page/actions.ts
  type SandboxMode (line 4) | type SandboxMode = 'safe' | 'developer';
  constant STANDARD_HTTP_METHODS (line 98) | const STANDARD_HTTP_METHODS = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', ...
  type CreateRequestOptions (line 100) | type CreateRequestOptions = {
  type CreateUntitledRequestOptions (line 106) | type CreateUntitledRequestOptions = {
  type CreateTransientRequestOptions (line 168) | type CreateTransientRequestOptions = {
  type ImportCollectionOptions (line 370) | type ImportCollectionOptions = {
  type EnvironmentType (line 495) | type EnvironmentType = 'collection' | 'global';
  type EnvironmentVariable (line 556) | type EnvironmentVariable = {
  type AssertionInput (line 882) | type AssertionInput = {

FILE: tests/websockets/connection.spec.ts
  constant MAX_CONNECTION_TIME (line 4) | const MAX_CONNECTION_TIME = 3000;
  constant BRU_REQ_NAME (line 5) | const BRU_REQ_NAME = /^ws-test-request$/;

FILE: tests/websockets/headers.spec.ts
  constant BRU_REQ_NAME (line 4) | const BRU_REQ_NAME = /^ws-test-request-with-headers$/;

FILE: tests/websockets/persistence.spec.ts
  constant BRU_REQ_NAME (line 6) | const BRU_REQ_NAME = /^base$/;
  constant BRU_PATH (line 7) | const BRU_PATH = join(__dirname, 'fixtures/collection/base.bru');

FILE: tests/websockets/query.spec.ts
  constant BRU_REQ_NAME (line 4) | const BRU_REQ_NAME = /^ws-test-request-with-query$/;

FILE: tests/websockets/subproto.spec.ts
  constant BRU_REQ_NAME (line 4) | const BRU_REQ_NAME = /^ws-test-request-with-subproto$/;

FILE: tests/websockets/variable-interpolation/variable-interpolation.spec.ts
  constant BRU_REQ_NAME (line 5) | const BRU_REQ_NAME = /^ws-interpolation-test$/;
  constant MAX_CONNECTION_TIME (line 6) | const MAX_CONNECTION_TIME = 10000;

FILE: tests/workspace/close-tab-stays-in-workspace.spec.ts
  constant WORKSPACE_YML_WORKSPACEB (line 11) | const WORKSPACE_YML_WORKSPACEB = [

FILE: tests/workspace/collection-reorder-persistence.spec.ts
  type WorkspaceConfig (line 7) | type WorkspaceConfig = { collections?: { name: string }[] };

FILE: tests/workspace/create-workspace/create-workspace.spec.ts
  type WorkspaceConfig (line 6) | type WorkspaceConfig = {
  function findCreatedWorkspaceDirs (line 14) | function findCreatedWorkspaceDirs(location: string): string[] {
Condensed preview — 2445 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (9,910K chars).
[
  {
    "path": ".coderabbit.yaml",
    "chars": 3766,
    "preview": "# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json\n\nlanguage: 'en-US'\nearly_access: false"
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 71,
    "preview": "* @helloanoop @maintainer-bruno @bijin-bruno @lohit-bruno @naman-bruno\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/BugReport.yaml",
    "chars": 2078,
    "preview": "name: Bug Report\ndescription: File a bug report\nlabels: ['bug']\nbody:\n  - type: markdown\n    attributes:\n      value: |\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/FeatureRequest.yaml",
    "chars": 1169,
    "preview": "name: Feature Request\ndescription: Suggest an idea for this project.\nlabels: ['enhancement']\nbody:\n  - type: checkboxes\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yaml",
    "chars": 314,
    "preview": "blank_issues_enabled: true\ncontact_links:\n  - name: Discussions\n    url: https://github.com/usebruno/bruno/discussions\n "
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 908,
    "preview": "### Description\n\n<!-- Explain here the changes your PR introduces and text to help us understand the context of this cha"
  },
  {
    "path": ".github/actions/common/setup-node-deps/action.yml",
    "chars": 919,
    "preview": "name: 'Setup Node Dependencies'\ndescription: 'Install Node.js and npm dependencies'\ninputs:\n  skip-build:\n    descriptio"
  },
  {
    "path": ".github/actions/ssl/linux/run-basic-ssl-cli-tests/action.yml",
    "chars": 1607,
    "preview": "name: 'Run Basic SSL CLI Tests - Linux'\ndescription: 'Run basic SSL CLI tests on Linux'\nruns:\n  using: 'composite'\n  ste"
  },
  {
    "path": ".github/actions/ssl/linux/run-custom-ca-certs-cli-tests/action.yml",
    "chars": 1660,
    "preview": "name: 'Run Custom CA Certs CLI Tests - Linux'\ndescription: 'Run custom CA certs CLI tests on Linux'\nruns:\n  using: 'comp"
  },
  {
    "path": ".github/actions/ssl/linux/run-ssl-e2e-tests/action.yml",
    "chars": 459,
    "preview": "name: 'Run SSL E2E Tests - Linux'\ndescription: 'Run SSL E2E tests on Linux'\nruns:\n  using: 'composite'\n  steps:\n    - na"
  },
  {
    "path": ".github/actions/ssl/linux/setup-ca-certs/action.yml",
    "chars": 672,
    "preview": "name: 'Setup CA Certificates - Linux'\ndescription: 'Setup CA certificates and start test server for custom CA certs test"
  },
  {
    "path": ".github/actions/ssl/linux/setup-feature-specific-deps/action.yml",
    "chars": 697,
    "preview": "name: 'Setup Custom CA Certs Feature Dependencies - Linux'\ndescription: 'Setup feature-specific dependencies for custom "
  },
  {
    "path": ".github/actions/ssl/macos/run-basic-ssl-cli-tests/action.yml",
    "chars": 1607,
    "preview": "name: 'Run Basic SSL CLI Tests - macOS'\ndescription: 'Run basic SSL CLI tests on macOS'\nruns:\n  using: 'composite'\n  ste"
  },
  {
    "path": ".github/actions/ssl/macos/run-custom-ca-certs-cli-tests/action.yml",
    "chars": 1660,
    "preview": "name: 'Run Custom CA Certs CLI Tests - macOS'\ndescription: 'Run custom CA certs CLI tests on macOS'\nruns:\n  using: 'comp"
  },
  {
    "path": ".github/actions/ssl/macos/run-ssl-e2e-tests/action.yml",
    "chars": 415,
    "preview": "name: 'Run SSL E2E Tests - macOS'\ndescription: 'Run SSL E2E tests on macOS'\nruns:\n  using: 'composite'\n  steps:\n    - na"
  },
  {
    "path": ".github/actions/ssl/macos/setup-ca-certs/action.yml",
    "chars": 672,
    "preview": "name: 'Setup CA Certificates - macOS'\ndescription: 'Setup CA certificates and start test server for custom CA certs test"
  },
  {
    "path": ".github/actions/ssl/macos/setup-feature-specific-deps/action.yml",
    "chars": 308,
    "preview": "name: 'Setup Custom CA Certs Feature Dependencies - macOS'\ndescription: 'Setup feature-specific dependencies for custom "
  },
  {
    "path": ".github/actions/ssl/windows/run-basic-ssl-cli-tests/action.yml",
    "chars": 2958,
    "preview": "name: 'Run Basic SSL CLI Tests - Windows'\ndescription: 'Run basic SSL CLI tests on Windows'\nruns:\n  using: 'composite'\n "
  },
  {
    "path": ".github/actions/ssl/windows/run-custom-ca-certs-cli-tests/action.yml",
    "chars": 3001,
    "preview": "name: 'Run Custom CA Certs CLI Tests - Windows'\ndescription: 'Run custom CA certs CLI tests on Windows'\nruns:\n  using: '"
  },
  {
    "path": ".github/actions/ssl/windows/run-ssl-e2e-tests/action.yml",
    "chars": 421,
    "preview": "name: 'Run SSL E2E Tests - Windows'\ndescription: 'Run SSL E2E tests on Windows'\nruns:\n  using: 'composite'\n  steps:\n    "
  },
  {
    "path": ".github/actions/ssl/windows/setup-ca-certs/action.yml",
    "chars": 792,
    "preview": "name: 'Setup CA Certificates - Windows'\ndescription: 'Setup CA certificates and start test server for custom CA certs te"
  },
  {
    "path": ".github/actions/tests/run-cli-tests/action.yml",
    "chars": 602,
    "preview": "name: 'Run CLI Tests'\ndescription: 'Setup dependencies, start local testbench and run CLI tests'\nruns:\n  using: 'composi"
  },
  {
    "path": ".github/actions/tests/run-e2e-tests/action.yml",
    "chars": 610,
    "preview": "name: 'Run E2E Tests'\ndescription: 'Setup dependencies, configure environment, and run Playwright E2E tests'\ninputs:\n  o"
  },
  {
    "path": ".github/actions/tests/run-unit-tests/action.yml",
    "chars": 1389,
    "preview": "name: 'Run Unit Tests'\ndescription: 'Setup dependencies and run unit tests for all packages'\nruns:\n  using: 'composite'\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 632,
    "preview": "version: 2\n\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: weekly\n  \n"
  },
  {
    "path": ".github/scripts/comment-on-flaky-tests.js",
    "chars": 2146,
    "preview": "const fs = require('fs');\nconst { execSync } = require('child_process');\n\n// Check if flaky-tests.json exists\nif (!fs.ex"
  },
  {
    "path": ".github/scripts/detect-flaky-tests.js",
    "chars": 2499,
    "preview": "const fs = require('fs');\n\n\n// Read Playwright JSON report\nconst resultsPath = 'playwright-report/results.json';\n\nif (!f"
  },
  {
    "path": ".github/workflows/flaky-test-detector.yml",
    "chars": 3742,
    "preview": "name: Flaky Test Detector\n\non:\n  pull_request:\n    branches: [main]\n    paths:\n      - 'tests/**/*.spec.ts'\n\npermissions"
  },
  {
    "path": ".github/workflows/lint-checks.yml",
    "chars": 612,
    "preview": "name: Lint Checks\non:\n  workflow_dispatch:\n  push:\n    branches: [main, 'release/v*']\n  pull_request:\n    branches: [mai"
  },
  {
    "path": ".github/workflows/npm-bru-cli.yml",
    "chars": 1224,
    "preview": "name: Bru CLI Tests (npm)\n\non:\n  workflow_dispatch:\n    inputs:\n      build:\n        description: 'Test Bru CLI (npm)'\n "
  },
  {
    "path": ".github/workflows/ssl-tests.yml",
    "chars": 2566,
    "preview": "name: SSL Tests\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  tests-for-linux:\n    name"
  },
  {
    "path": ".github/workflows/tests.yml",
    "chars": 2163,
    "preview": "name: Tests\non:\n  workflow_dispatch:\n  push:\n    branches: [main, 'release/v*']\n  pull_request:\n    branches: [main, 're"
  },
  {
    "path": ".gitignore",
    "chars": 892,
    "preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\nbun.lockb\nnode_mod"
  },
  {
    "path": ".husky/pre-commit",
    "chars": 16,
    "preview": "npx nano-staged\n"
  },
  {
    "path": ".nvmrc",
    "chars": 9,
    "preview": "v22.12.0\n"
  },
  {
    "path": "CODING_STANDARDS.md",
    "chars": 5369,
    "preview": "# Bruno Coding Standards\n\n- No diffs unless an actual change is made, the code changes need to be as minimal as possible"
  },
  {
    "path": "contributing.md",
    "chars": 4336,
    "preview": "**English**\n| [Українська](docs/contributing/contributing_ua.md)\n| [Русский](docs/contributing/contributing_ru.md)\n| [Tü"
  },
  {
    "path": "docs/contributing/contributing_bn.md",
    "chars": 2500,
    "preview": "[English](../../contributing.md)\n\n## আসুন ব্রুনোকে আরও ভালো করি, একসাথে!!\n\nআমরা খুশি যে আপনি ব্রুনোর উন্নতি করতে চাইছেন।"
  },
  {
    "path": "docs/contributing/contributing_cn.md",
    "chars": 1469,
    "preview": "[English](../../contributing.md)\n\n## 让我们一起改进 Bruno!\n\n很高兴看到您考虑改进 Bruno。以下是获取 Bruno 并在您的电脑上运行它的规则和指南。\n\n### 使用的技术\n\nBruno 基于"
  },
  {
    "path": "docs/contributing/contributing_de.md",
    "chars": 2641,
    "preview": "[English](../../contributing.md)\n\n## Lass uns Bruno noch besser machen, gemeinsam!!\n\nIch freue mich, dass Du Bruno verbe"
  },
  {
    "path": "docs/contributing/contributing_es.md",
    "chars": 4656,
    "preview": "[Inglés](../../contributing.md)\n\n## ¡Juntos, hagamos a Bruno mejor!\n\nEstamos encantados de que quieras ayudar a mejorar "
  },
  {
    "path": "docs/contributing/contributing_fa.md",
    "chars": 2509,
    "preview": "[English](../../contributing.md)\n\n## با هم، Bruno را بهتر می‌کنیم!\n\nخوشحالم که قصد دارید Bruno را بهبود ببخشید. در ادامه"
  },
  {
    "path": "docs/contributing/contributing_fr.md",
    "chars": 2701,
    "preview": "[English](../../contributing.md)\n\n## Ensemble, améliorons Bruno !\n\nJe suis content de voir que vous envisagez d'améliore"
  },
  {
    "path": "docs/contributing/contributing_hi.md",
    "chars": 2414,
    "preview": "[English](../../contributing.md)\n\n## आइए मिलकर Bruno को बेहतर बनाएं !!\n\nहमें खुशी है कि आप Bruno को बेहतर बनाना चाहते है"
  },
  {
    "path": "docs/contributing/contributing_it.md",
    "chars": 2738,
    "preview": "[English](../../contributing.md)\n\n## Insieme, miglioriamo Bruno!\n\nSono felice di vedere che hai intenzione di migliorare"
  },
  {
    "path": "docs/contributing/contributing_ja.md",
    "chars": 1842,
    "preview": "[English](../../contributing.md)\n\n## 一緒に Bruno をよりよいものにしていきましょう!!\n\nBruno を改善していただけるのは歓迎です。以下はあなたの環境で Bruno を起動するためのガイドライ"
  },
  {
    "path": "docs/contributing/contributing_kr.md",
    "chars": 1781,
    "preview": "[English](../../contributing.md)\n\n## 함께 Bruno를 더 좋게 만들어요!!\n\n우리는 여러분이 Bruno를 발전시키기 위해 노력해주셔서 기쁩니다. 다음은 여러분의 컴퓨터에서 Bruno를 "
  },
  {
    "path": "docs/contributing/contributing_nl.md",
    "chars": 2418,
    "preview": "[English](../../contributing.md)\n\n## Laten we Bruno samen beter maken !!\n\nWe zijn blij dat je Bruno wilt verbeteren. Hie"
  },
  {
    "path": "docs/contributing/contributing_pl.md",
    "chars": 2448,
    "preview": "[English](../../contributing.md)\n\n## Wspólnie uczynijmy Bruno lepszym !!\n\nCieszymy się, że chcesz udoskonalić Bruno. Pon"
  },
  {
    "path": "docs/contributing/contributing_pt_br.md",
    "chars": 2569,
    "preview": "[English](../../contributing.md)\n\n## Vamos tornar o Bruno melhor, juntos!!\n\nEstamos felizes que você queira ajudar a mel"
  },
  {
    "path": "docs/contributing/contributing_ro.md",
    "chars": 2475,
    "preview": "[English](../../contributing.md)\n\n## Haideţi să îmbunătățim Bruno, împreună!!\n\nNe bucurăm că doriți să îmbunătățiți brun"
  },
  {
    "path": "docs/contributing/contributing_ru.md",
    "chars": 2622,
    "preview": "[English](../../contributing.md)\n\n## Давайте вместе сделаем Бруно лучше!!!\n\nЯ рад, что Вы хотите усовершенствовать bruno"
  },
  {
    "path": "docs/contributing/contributing_sk.md",
    "chars": 2494,
    "preview": "## Urobme bruno lepším, spoločne !!\r\n\r\nSme radi, že chcete zlepšiť bruno. Nižšie sú uvedené pokyny, ako začať s výchovou"
  },
  {
    "path": "docs/contributing/contributing_tr.md",
    "chars": 2516,
    "preview": "[English](../../contributing.md)\n\n## Bruno'yu birlikte daha iyi hale getirelim!!!\n\nbruno'yu geliştirmek istemenizden mut"
  },
  {
    "path": "docs/contributing/contributing_ua.md",
    "chars": 2552,
    "preview": "[English](../../contributing.md)\n\n## Давайте зробимо Bruno краще, разом !!\n\nЯ дуже радий що Ви бажаєте покращити Bruno. "
  },
  {
    "path": "docs/contributing/contributing_zhtw.md",
    "chars": 1530,
    "preview": "[English](../../contributing.md)\n\n## 讓我們一起來讓 Bruno 變得更好!\n\n我們很高興您希望一同改善 Bruno。以下是在您的電腦上開始運行 Bruno 的規則及指南。\n\n### 技術細節\n\nBrun"
  },
  {
    "path": "docs/playwright-testing-guide.md",
    "chars": 12272,
    "preview": "# Playwright Testing Guide for Bruno\n\nThis guide explains how to create and run Playwright test cases for the Bruno appl"
  },
  {
    "path": "docs/publishing/publishing_bn.md",
    "chars": 684,
    "preview": "[English](../../publishing.md)\n\n### ব্রুনোকে নতুন প্যাকেজ ম্যানেজারে প্রকাশ করা\n\nযদিও আমাদের কোড ওপেন সোর্স এবং সবার ব্য"
  },
  {
    "path": "docs/publishing/publishing_cn.md",
    "chars": 303,
    "preview": "[English](../../publishing.md)\n\n### 将 Bruno 发布到新的包管理器\n\n虽然我们的代码是开源的,每个人都可以使用,但我们恳请您在考虑在新的包管理器上发布之前与我们联系。作为 Bruno 的创建者,我拥有"
  },
  {
    "path": "docs/publishing/publishing_de.md",
    "chars": 748,
    "preview": "[English](../../publishing.md)\n\n### Veröffentlichung von Bruno über neue Paket-Manager\n\nObwohl Bruno Open Source und für"
  },
  {
    "path": "docs/publishing/publishing_fa.md",
    "chars": 589,
    "preview": "[English](../../publishing.md)\n\n### انتشار Bruno در یک پکیج منیجر جدید\n\nاگرچه کد ما متن‌باز است و همه می‌توانند از آن اس"
  },
  {
    "path": "docs/publishing/publishing_fr.md",
    "chars": 771,
    "preview": "[English](../../publishing.md)\n\n### Publier Bruno dans un nouveau gestionnaire de paquets\n\nBien que notre code soit open"
  },
  {
    "path": "docs/publishing/publishing_ja.md",
    "chars": 401,
    "preview": "[English](../../publishing.md)\n\n### Bruno を新しいパッケージマネージャに公開する場合の注意\n\n私たちのソースコードはオープンソースで誰でも使用できますが、新しいパッケージマネージャで公開を検討する前"
  },
  {
    "path": "docs/publishing/publishing_nl.md",
    "chars": 715,
    "preview": "[English](../../publishing.md)\n\n### Bruno publiceren naar een nieuwe pakketbeheerder\n\nHoewel onze code open source is en"
  },
  {
    "path": "docs/publishing/publishing_pl.md",
    "chars": 695,
    "preview": "[English](../../publishing.md)\n\n### Publikowanie Bruno w nowym menedżerze pakietów\n\nChociaż nasz kod jest otwartoźródłow"
  },
  {
    "path": "docs/publishing/publishing_pt_br.md",
    "chars": 788,
    "preview": "[English](../../publishing.md)\n\n### Publicando Bruno em um novo gerenciador de pacotes\n\nEmbora nosso código seja de códi"
  },
  {
    "path": "docs/publishing/publishing_ro.md",
    "chars": 781,
    "preview": "[English](../../publishing.md)\n\n### Publicarea lui Bruno la un gestionar de pachete nou\n\nDeși codul nostru este cu sursă"
  },
  {
    "path": "docs/publishing/publishing_tr.md",
    "chars": 668,
    "preview": "[English](../../publishing.md)\n\n### Bruno'yu yeni bir paket yöneticisine yayınlama\n\nKodumuz açık kaynak kodlu ve herkesi"
  },
  {
    "path": "docs/publishing/publishing_zhtw.md",
    "chars": 311,
    "preview": "[English](../../publishing.md)\n\n### 將 Bruno 發佈到新的套件管理器\n\n雖然我們的程式碼是開源的並且可供所有人使用,但我們懇請您在考慮在新的套件管理器上發布之前與我們聯繫。作為 Bruno 的創建者,"
  },
  {
    "path": "docs/readme/readme_ar.md",
    "chars": 5396,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### برونو - بيئة تطوير مفتوحة المصدر لاستكشاف و"
  },
  {
    "path": "docs/readme/readme_bn.md",
    "chars": 5346,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### ব্রুনো - API অন্বেষণ এবং পরীক্ষা করার জন্য "
  },
  {
    "path": "docs/readme/readme_cn.md",
    "chars": 4854,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - 开源 IDE,用于探索和测试 API。\n\n[![GitHub vers"
  },
  {
    "path": "docs/readme/readme_de.md",
    "chars": 5880,
    "preview": "<br />\n<img src=\"/assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - Opensource IDE zum Erkunden und Testen v"
  },
  {
    "path": "docs/readme/readme_es.md",
    "chars": 5698,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - IDE de código abierto para explorar"
  },
  {
    "path": "docs/readme/readme_fa.md",
    "chars": 5313,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### برونو یا Bruno - محیط توسعه متن باز برای تس"
  },
  {
    "path": "docs/readme/readme_fr.md",
    "chars": 5800,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - IDE Opensource pour explorer et tes"
  },
  {
    "path": "docs/readme/readme_hi.md",
    "chars": 5177,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### ब्रूनो - API इंटरफेस (API) का अन्वेषण और पर"
  },
  {
    "path": "docs/readme/readme_it.md",
    "chars": 5528,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - Opensource IDE per esplorare e test"
  },
  {
    "path": "docs/readme/readme_ja.md",
    "chars": 5247,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - API の検証・動作テストのためのオープンソース IDE.\n\n[![G"
  },
  {
    "path": "docs/readme/readme_ka.md",
    "chars": 6325,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### ბრუნო - ღია წყაროების IDE API-ების შესწავლი"
  },
  {
    "path": "docs/readme/readme_kr.md",
    "chars": 4502,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - API 탐색 및 테스트를 위한 오픈소스 IDE.\n\n[![GitH"
  },
  {
    "path": "docs/readme/readme_nl.md",
    "chars": 6133,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - Open source IDE voor het verkennen "
  },
  {
    "path": "docs/readme/readme_pl.md",
    "chars": 5799,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - Otwartoźródłowe IDE do eksploracji "
  },
  {
    "path": "docs/readme/readme_pt_br.md",
    "chars": 6218,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - IDE de código aberto para explorar "
  },
  {
    "path": "docs/readme/readme_ro.md",
    "chars": 5725,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - Mediu integrat de dezvoltare cu sur"
  },
  {
    "path": "docs/readme/readme_ru.md",
    "chars": 3874,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - IDE с открытым исходным кодом для и"
  },
  {
    "path": "docs/readme/readme_tr.md",
    "chars": 5742,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - API'leri keşfetmek ve test etmek iç"
  },
  {
    "path": "docs/readme/readme_ua.md",
    "chars": 3972,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - IDE із відкритим кодом для тестуван"
  },
  {
    "path": "docs/readme/readme_zhtw.md",
    "chars": 4480,
    "preview": "<br />\n<img src=\"../../assets/images/logo-transparent.png\" width=\"80\"/>\n\n### Bruno - 探索和測試 API 的開源 IDE 工具\n\n[![GitHub ver"
  },
  {
    "path": "eslint.config.js",
    "chars": 7266,
    "preview": "// eslint.config.js\nconst { defineConfig } = require('eslint/config');\nconst globals = require('globals');\nconst { fixup"
  },
  {
    "path": "license.md",
    "chars": 1096,
    "preview": "\nMIT License\n\nCopyright (c) 2022 Anoop M D, Anusree P S and Contributors\n\nPermission is hereby granted, free of charge, "
  },
  {
    "path": "package.json",
    "chars": 3983,
    "preview": "{\n  \"name\": \"usebruno\",\n  \"private\": true,\n  \"workspaces\": [\n    \"packages/bruno-app\",\n    \"packages/bruno-electron\",\n  "
  },
  {
    "path": "packages/bruno-app/.babelrc",
    "chars": 116,
    "preview": "{\n  \"presets\": [\"@babel/preset-env\", \"@babel/preset-react\"],\n  \"plugins\": [[\"styled-components\", { \"ssr\": true }]]\n}"
  },
  {
    "path": "packages/bruno-app/.gitignore",
    "chars": 435,
    "preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\nnode_modules\n.pnp\n"
  },
  {
    "path": "packages/bruno-app/babel.config.js",
    "chars": 175,
    "preview": "module.exports = {\n  presets: [\n    '@babel/preset-env',\n    ['@babel/preset-react', {\n      runtime: 'automatic'\n    }]"
  },
  {
    "path": "packages/bruno-app/jest.config.js",
    "chars": 936,
    "preview": "module.exports = {\n  rootDir: '.',\n  transform: {\n    '^.+\\\\.[jt]sx?$': 'babel-jest'\n  },\n  transformIgnorePatterns: [\n "
  },
  {
    "path": "packages/bruno-app/jest.setup.js",
    "chars": 167,
    "preview": "jest.mock('nanoid', () => {\n  return {\n    nanoid: () => {}\n  };\n});\n\njest.mock('strip-json-comments', () => {\n  return "
  },
  {
    "path": "packages/bruno-app/jsconfig.json",
    "chars": 534,
    "preview": "{\n  \"compilerOptions\": {\n    \"jsx\": \"react\",\n    \"target\": \"es2017\",\n    \"allowSyntheticDefaultImports\": false,\n    \"bas"
  },
  {
    "path": "packages/bruno-app/package.json",
    "chars": 3945,
    "preview": "{\n  \"name\": \"@usebruno/app\",\n  \"version\": \"2.0.0\",\n  \"license\": \"MIT\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"rsb"
  },
  {
    "path": "packages/bruno-app/postcss.config.js",
    "chars": 81,
    "preview": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {}\n  }\n};\n"
  },
  {
    "path": "packages/bruno-app/public/static/diff2Html.js",
    "chars": 126855,
    "preview": "!(function (e, t) {\n  'object' == typeof exports && 'object' == typeof module\n    ? (module.exports = t())\n    : 'functi"
  },
  {
    "path": "packages/bruno-app/public/theme/dark.js",
    "chars": 1000,
    "preview": "const darkTheme = {\n  'brand': '#546de5',\n  'text': 'rgb(52 52 52)',\n  'primary-text': '#ffffff',\n  'primary-theme': '#1"
  },
  {
    "path": "packages/bruno-app/public/theme/index.js",
    "chars": 126,
    "preview": "import darkTheme from './dark';\nimport lightTheme from './light';\n\nexport default {\n  Light: lightTheme,\n  Dark: darkThe"
  },
  {
    "path": "packages/bruno-app/public/theme/light.js",
    "chars": 1008,
    "preview": "const lightTheme = {\n  'brand': '#546de5',\n  'text': 'rgb(52 52 52)',\n  'primary-text': 'rgb(52 52 52)',\n  'primary-them"
  },
  {
    "path": "packages/bruno-app/rsbuild.config.mjs",
    "chars": 1682,
    "preview": "import { defineConfig } from '@rsbuild/core';\nimport { pluginReact } from '@rsbuild/plugin-react';\nimport { pluginBabel "
  },
  {
    "path": "packages/bruno-app/src/components/Accordion/index.js",
    "chars": 1770,
    "preview": "import React, { createContext, useContext, useState } from 'react';\nimport { IconChevronDown } from '@tabler/icons';\nimp"
  },
  {
    "path": "packages/bruno-app/src/components/Accordion/styledWrapper.js",
    "chars": 679,
    "preview": "import styled from 'styled-components';\n\nconst AccordionItem = styled.div`\n  border: 1px solid ${(props) => props.theme."
  },
  {
    "path": "packages/bruno-app/src/components/ApiSpecPanel/FileEditor/CodeEditor/Plugins/Yaml/index.js",
    "chars": 3718,
    "preview": "const yamlPlugin = (cm) => {\n  cm.defineMode('yaml', function () {\n    var cons = ['true', 'false', 'on', 'off', 'yes', "
  },
  {
    "path": "packages/bruno-app/src/components/ApiSpecPanel/FileEditor/CodeEditor/StyledWrapper.js",
    "chars": 1497,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  div.CodeMirror {\n    height: calc(100vh - 9"
  },
  {
    "path": "packages/bruno-app/src/components/ApiSpecPanel/FileEditor/CodeEditor/index.js",
    "chars": 3883,
    "preview": "/**\n *  Copyright (c) 2021 GraphQL Contributors.\n *\n *  This source code is licensed under the MIT license found in the\n"
  },
  {
    "path": "packages/bruno-app/src/components/ApiSpecPanel/Renderers/Swagger/StyledWrapper.js",
    "chars": 26568,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  .swagger-root {\n    height: calc(100vh - 7r"
  },
  {
    "path": "packages/bruno-app/src/components/ApiSpecPanel/Renderers/Swagger/index.js",
    "chars": 296,
    "preview": "import SwaggerUI from 'swagger-ui-react';\nimport StyledWrapper from './StyledWrapper';\n\nconst Swagger = ({ spec }) => {\n"
  },
  {
    "path": "packages/bruno-app/src/components/ApiSpecPanel/SpecViewer.js",
    "chars": 2513,
    "preview": "import React, { useState, useEffect, Suspense } from 'react';\nimport get from 'lodash/get';\nimport { useTheme } from 'pr"
  },
  {
    "path": "packages/bruno-app/src/components/ApiSpecPanel/StyledWrapper.js",
    "chars": 457,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  .menu-icon {\n    cursor: pointer;\n    color"
  },
  {
    "path": "packages/bruno-app/src/components/ApiSpecPanel/index.js",
    "chars": 3026,
    "preview": "import React, { forwardRef, useRef } from 'react';\nimport find from 'lodash/find';\nimport { useSelector, useDispatch } f"
  },
  {
    "path": "packages/bruno-app/src/components/AppTitleBar/AppMenu/StyledWrapper.js",
    "chars": 293,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  display: flex;\n  align-items: center;\n  hei"
  },
  {
    "path": "packages/bruno-app/src/components/AppTitleBar/AppMenu/index.js",
    "chars": 4439,
    "preview": "import React, { useState } from 'react';\nimport { IconMenu2 } from '@tabler/icons';\nimport MenuDropdown from 'ui/MenuDro"
  },
  {
    "path": "packages/bruno-app/src/components/AppTitleBar/StyledWrapper.js",
    "chars": 5355,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  height: 36px;\n  display: flex;\n  align-items: cen"
  },
  {
    "path": "packages/bruno-app/src/components/AppTitleBar/index.js",
    "chars": 12037,
    "preview": "import React from 'react';\nimport { IconCheck, IconChevronDown, IconFolder, IconHome, IconPin, IconPinned, IconPlus, Ico"
  },
  {
    "path": "packages/bruno-app/src/components/BodyModeSelector/StyledWrapper.js",
    "chars": 785,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  font-size: ${(props) => props.theme.font.si"
  },
  {
    "path": "packages/bruno-app/src/components/BodyModeSelector/index.js",
    "chars": 2308,
    "preview": "import React, { useMemo } from 'react';\nimport { IconCaretDown, IconForms, IconBraces, IconCode, IconFileText, IconDatab"
  },
  {
    "path": "packages/bruno-app/src/components/Bruno/index.js",
    "chars": 4805,
    "preview": "import React from 'react';\n\nconst Bruno = ({ width }) => {\n  return (\n    <svg id=\"emoji\" width={width} viewBox=\"0 0 72 "
  },
  {
    "path": "packages/bruno-app/src/components/BrunoSupport/StyledWrapper.js",
    "chars": 340,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  color: ${(props) => props.theme.text};\n  .c"
  },
  {
    "path": "packages/bruno-app/src/components/BrunoSupport/index.js",
    "chars": 1947,
    "preview": "import React from 'react';\nimport Modal from 'components/Modal/index';\nimport { IconSpeakerphone, IconBrandTwitter, Icon"
  },
  {
    "path": "packages/bruno-app/src/components/BulkEditor/index.js",
    "chars": 1308,
    "preview": "import React, { useMemo } from 'react';\nimport get from 'lodash/get';\nimport CodeEditor from 'components/CodeEditor';\nim"
  },
  {
    "path": "packages/bruno-app/src/components/Checkbox/StyledWrapper.js",
    "chars": 1682,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  .checkbox-container {\n    width: 1rem;\n    "
  },
  {
    "path": "packages/bruno-app/src/components/Checkbox/index.js",
    "chars": 1040,
    "preview": "import React from 'react';\nimport StyledWrapper from './StyledWrapper';\nimport IconCheckMark from 'components/Icons/Icon"
  },
  {
    "path": "packages/bruno-app/src/components/CodeEditor/StyledWrapper.js",
    "chars": 5137,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  &.read-only {\n    div.CodeMirror .CodeMirro"
  },
  {
    "path": "packages/bruno-app/src/components/CodeEditor/index.js",
    "chars": 12464,
    "preview": "/**\n *  Copyright (c) 2021 GraphQL Contributors.\n *\n *  This source code is licensed under the MIT license found in the\n"
  },
  {
    "path": "packages/bruno-app/src/components/CodeEditor/index.spec.js",
    "chars": 1238,
    "preview": "import React from 'react';\nimport { render, act } from '@testing-library/react';\nimport CodeEditor from './index';\nimpor"
  },
  {
    "path": "packages/bruno-app/src/components/CodeMirrorSearch/StyledWrapper.js",
    "chars": 2278,
    "preview": "import styled from 'styled-components';\nimport { rgba } from 'polished';\n\nconst StyledWrapper = styled.div`\n  .bruno-sea"
  },
  {
    "path": "packages/bruno-app/src/components/CodeMirrorSearch/index.js",
    "chars": 9041,
    "preview": "import React, { useState, useEffect, useRef, useCallback, useMemo, forwardRef, useImperativeHandle } from 'react';\nimpor"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/ApiKeyAuth/StyledWrapper.js",
    "chars": 1267,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  label {\n    font-size: ${(props) => props.theme.f"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/ApiKeyAuth/index.js",
    "chars": 3518,
    "preview": "import React, { useRef, forwardRef, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport get from"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/AuthMode/StyledWrapper.js",
    "chars": 386,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  font-size: ${(props) => props.theme.font.size.bas"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/AuthMode/index.js",
    "chars": 2351,
    "preview": "import React, { useMemo, useCallback } from 'react';\nimport get from 'lodash/get';\nimport { IconCaretDown } from '@table"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/StyledWrapper.js",
    "chars": 435,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  label {\n    font-size: ${(props) => props.theme.f"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth/index.js",
    "chars": 6607,
    "preview": "import React from 'react';\nimport SensitiveFieldWarning from 'components/SensitiveFieldWarning';\nimport { useDetectSensi"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/StyledWrapper.js",
    "chars": 435,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  label {\n    font-size: ${(props) => props.theme.f"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth/index.js",
    "chars": 2615,
    "preview": "import React from 'react';\nimport SensitiveFieldWarning from 'components/SensitiveFieldWarning';\nimport { useDetectSensi"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/StyledWrapper.js",
    "chars": 435,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  label {\n    font-size: ${(props) => props.theme.f"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth/index.js",
    "chars": 1884,
    "preview": "import React from 'react';\nimport SensitiveFieldWarning from 'components/SensitiveFieldWarning';\nimport { useDetectSensi"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/StyledWrapper.js",
    "chars": 435,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  label {\n    font-size: ${(props) => props.theme.f"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth/index.js",
    "chars": 2628,
    "preview": "import React from 'react';\nimport SensitiveFieldWarning from 'components/SensitiveFieldWarning';\nimport { useDetectSensi"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/NTLMAuth/StyledWrapper.js",
    "chars": 457,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  label {\n    font-size: ${(props) => props.theme.f"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/NTLMAuth/index.js",
    "chars": 3370,
    "preview": "import React from 'react';\nimport SensitiveFieldWarning from 'components/SensitiveFieldWarning';\nimport { useDetectSensi"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/StyledWrapper.js",
    "chars": 399,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  label {\n    font-size: ${(props) => props.theme.f"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2/index.js",
    "chars": 2331,
    "preview": "import React from 'react';\nimport get from 'lodash/get';\nimport StyledWrapper from './StyledWrapper';\nimport { saveColle"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/StyledWrapper.js",
    "chars": 117,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  max-width: 800px;\n`;\n\nexport default Wrapper;\n"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/WsseAuth/StyledWrapper.js",
    "chars": 435,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  label {\n    font-size: ${(props) => props.theme.f"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/WsseAuth/index.js",
    "chars": 2594,
    "preview": "import React from 'react';\nimport SensitiveFieldWarning from 'components/SensitiveFieldWarning';\nimport { useDetectSensi"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Auth/index.js",
    "chars": 2289,
    "preview": "import React from 'react';\nimport get from 'lodash/get';\nimport { useDispatch } from 'react-redux';\nimport AuthMode from"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/ClientCertSettings/StyledWrapper.js",
    "chars": 1800,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  .settings-label {\n    width: 90px;\n  }\n\n  ."
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/ClientCertSettings/index.js",
    "chars": 15156,
    "preview": "import React from 'react';\nimport { IconCertificate, IconTrash, IconWorld } from '@tabler/icons';\nimport { useFormik } f"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Docs/StyledWrapper.js",
    "chars": 153,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n\n  .editing-mode {\n    cursor: pointer;\n  }\n`"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Docs/index.js",
    "chars": 4073,
    "preview": "import 'github-markdown-css/github-markdown.css';\nimport get from 'lodash/get';\nimport { updateCollectionDocs, deleteCol"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Headers/StyledWrapper.js",
    "chars": 1028,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  max-width: 800px;\n\n  table {\n    width: 100%;\n   "
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Headers/index.js",
    "chars": 4226,
    "preview": "import React, { useState, useCallback } from 'react';\nimport get from 'lodash/get';\nimport { useDispatch } from 'react-r"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Overview/Info/StyledWrapper.js",
    "chars": 1443,
    "preview": "import styled from 'styled-components';\nimport { rgba } from 'polished';\n\nconst StyledWrapper = styled.div`\n  .icon-box "
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Overview/Info/index.js",
    "chars": 6084,
    "preview": "import React from 'react';\nimport { getTotalRequestCountInCollection } from 'utils/collections/';\nimport { IconFolder, I"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Overview/RequestsNotLoaded/StyledWrapper.js",
    "chars": 865,
    "preview": "import styled from 'styled-components';\nimport { rgba } from 'polished';\n\nconst StyledWrapper = styled.div`\n  &.card {\n "
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Overview/RequestsNotLoaded/index.js",
    "chars": 2467,
    "preview": "import React from 'react';\nimport { flattenItems } from 'utils/collections';\nimport { IconAlertTriangle } from '@tabler/"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Overview/StyledWrapper.js",
    "chars": 479,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  .partial {\n    color: ${(props) => props.th"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Overview/index.js",
    "chars": 799,
    "preview": "import StyledWrapper from './StyledWrapper';\nimport Docs from '../Docs';\nimport Info from './Info';\nimport { IconBox } f"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Presets/StyledWrapper.js",
    "chars": 659,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  max-width: 800px;\n\n  .settings-label {\n    "
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Presets/index.js",
    "chars": 4609,
    "preview": "import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport StyledWrapper from './StyledWrapper';\nimpor"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Protobuf/StyledWrapper.js",
    "chars": 3538,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  .available-certificates {\n    background-co"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Protobuf/index.js",
    "chars": 12771,
    "preview": "import React, { useRef } from 'react';\nimport { useDispatch } from 'react-redux';\nimport StyledWrapper from './StyledWra"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/ProxySettings/StyledWrapper.js",
    "chars": 637,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  .settings-label {\n    width: 80px;\n  }\n\n  ."
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/ProxySettings/index.js",
    "chars": 13838,
    "preview": "import React from 'react';\nimport InfoTip from 'components/InfoTip';\nimport StyledWrapper from './StyledWrapper';\nimport"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Script/StyledWrapper.js",
    "chars": 252,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  max-width: 800px;\n\n  div.CodeMirror {\n    h"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Script/index.js",
    "chars": 5409,
    "preview": "import React, { useState, useEffect, useRef } from 'react';\nimport get from 'lodash/get';\nimport { useDispatch, useSelec"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/StyledWrapper.js",
    "chars": 1292,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  div.tabs {\n    div.tab {\n      padding: 6px"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Tests/StyledWrapper.js",
    "chars": 129,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  max-width: 800px;\n`;\n\nexport default Styled"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Tests/index.js",
    "chars": 1744,
    "preview": "import React from 'react';\nimport get from 'lodash/get';\nimport { useDispatch, useSelector } from 'react-redux';\nimport "
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Vars/StyledWrapper.js",
    "chars": 207,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  max-width: 800px;\n\n  div.title {\n    color:"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable/StyledWrapper.js",
    "chars": 1004,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  table {\n    width: 100%;\n    border-collapse: col"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable/index.js",
    "chars": 2565,
    "preview": "import React, { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useTheme } from 'provide"
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/Vars/index.js",
    "chars": 1384,
    "preview": "import React from 'react';\nimport get from 'lodash/get';\nimport VarsTable from './VarsTable';\nimport StyledWrapper from "
  },
  {
    "path": "packages/bruno-app/src/components/CollectionSettings/index.js",
    "chars": 6030,
    "preview": "import React from 'react';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport { updateSettingsSel"
  },
  {
    "path": "packages/bruno-app/src/components/ColorBadge/index.js",
    "chars": 452,
    "preview": "import React from 'react';\nimport { useTheme } from 'providers/Theme';\n\nconst ColorBadge = ({ color, size = 10 }) => {\n "
  },
  {
    "path": "packages/bruno-app/src/components/ColorPicker/StyledWrapper.js",
    "chars": 112,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  \n`;\n\nexport default StyledWrapper;\n"
  },
  {
    "path": "packages/bruno-app/src/components/ColorPicker/index.js",
    "chars": 5058,
    "preview": "import React, { useState, useEffect, useRef } from 'react';\nimport { IconBan, IconBrush } from '@tabler/icons';\nimport D"
  },
  {
    "path": "packages/bruno-app/src/components/ColorRange/StyledWrapper.js",
    "chars": 1024,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  .hue-slider {\n    -webkit-appearance: none;"
  },
  {
    "path": "packages/bruno-app/src/components/ColorRange/index.js",
    "chars": 593,
    "preview": "import StyledWrapper from './StyledWrapper';\n\nconst ColorRangePicker = ({ selectedColor, className, value, onChange, col"
  },
  {
    "path": "packages/bruno-app/src/components/Cookies/ModifyCookieModal/StyledWrapper.js",
    "chars": 552,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  /* Info icon */\n  .info-icon {\n    color: $"
  },
  {
    "path": "packages/bruno-app/src/components/Cookies/ModifyCookieModal/index.js",
    "chars": 13059,
    "preview": "import React, { useState, useRef, useEffect } from 'react';\nimport { useFormik } from 'formik';\nimport * as Yup from 'yu"
  },
  {
    "path": "packages/bruno-app/src/components/Cookies/StyledWrapper.js",
    "chars": 3382,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  table {\n    width: 100%;\n    table-layout: fixed;"
  },
  {
    "path": "packages/bruno-app/src/components/Cookies/index.js",
    "chars": 13963,
    "preview": "import React, { useState, useRef, useEffect, useMemo } from 'react';\nimport { useSelector, useDispatch } from 'react-red"
  },
  {
    "path": "packages/bruno-app/src/components/CreateTransientRequest/index.js",
    "chars": 7711,
    "preview": "import React, { useState, useRef, useCallback, useMemo } from 'react';\nimport { IconPlus, IconApi, IconBrandGraphql, Ico"
  },
  {
    "path": "packages/bruno-app/src/components/CreateUntitledRequest/StyledWrapper.js",
    "chars": 144,
    "preview": "import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n  position: relative;\n  display: inline-block;\n`;\n\n"
  },
  {
    "path": "packages/bruno-app/src/components/CreateUntitledRequest/index.js",
    "chars": 4934,
    "preview": "import React, { useMemo, useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Menu"
  },
  {
    "path": "packages/bruno-app/src/components/DeprecationWarning/StyledWrapper.js",
    "chars": 980,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  .deprecation-warning {\n    box-sizing: bord"
  },
  {
    "path": "packages/bruno-app/src/components/DeprecationWarning/index.js",
    "chars": 820,
    "preview": "import React from 'react';\nimport IconAlertTriangleFilled from '../Icons/IconAlertTriangleFilled';\nimport StyledWrapper "
  },
  {
    "path": "packages/bruno-app/src/components/Devtools/Console/DebugTab/StyledWrapper.js",
    "chars": 3792,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  "
  },
  {
    "path": "packages/bruno-app/src/components/Devtools/Console/DebugTab/index.js",
    "chars": 2898,
    "preview": "import React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { IconBug } from '@tabler/icon"
  },
  {
    "path": "packages/bruno-app/src/components/Devtools/Console/ErrorDetailsPanel/StyledWrapper.js",
    "chars": 5795,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  "
  },
  {
    "path": "packages/bruno-app/src/components/Devtools/Console/ErrorDetailsPanel/index.js",
    "chars": 7226,
    "preview": "import React, { useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n  IconX,\n  Ico"
  },
  {
    "path": "packages/bruno-app/src/components/Devtools/Console/NetworkTab/StyledWrapper.js",
    "chars": 4407,
    "preview": "import styled from 'styled-components';\n\nconst StyledWrapper = styled.div`\n  display: flex;\n  flex-direction: column;\n  "
  },
  {
    "path": "packages/bruno-app/src/components/Devtools/Console/NetworkTab/index.js",
    "chars": 5105,
    "preview": "import React, { useMemo } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n  IconNetwork\n}"
  }
]

// ... and 2245 more files (download for full content)

About this extraction

This page contains the full source code of the usebruno/bruno GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2445 files (8.9 MB), approximately 2.5M tokens, and a symbol index with 1483 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!