@withbuddi/buddi 0.1.0-pre.51 → 0.1.0-pre.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/extension/background.js +1604 -847
- package/extension/manifest.json +3 -3
- package/extension/popup.css +91 -3
- package/extension/popup.html +49 -32
- package/extension/popup.js +215 -123
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.d.ts +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/questions/store.d.ts +3 -1
- package/node_modules/@buddi/core/dist/questions/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/questions/store.js +3 -3
- package/node_modules/@buddi/core/dist/questions/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/questions/types.d.ts +46 -1
- package/node_modules/@buddi/core/dist/questions/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/questions/types.js +2 -1
- package/node_modules/@buddi/core/dist/questions/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/approval.d.ts +54 -0
- package/node_modules/@buddi/core/dist/secrets/approval.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/approval.js +58 -1
- package/node_modules/@buddi/core/dist/secrets/approval.js.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/settings.d.ts +178 -0
- package/node_modules/@buddi/core/dist/secrets/settings.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/settings.js +63 -6
- package/node_modules/@buddi/core/dist/secrets/settings.js.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/store.d.ts +31 -0
- package/node_modules/@buddi/core/dist/secrets/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/store.js +75 -0
- package/node_modules/@buddi/core/dist/secrets/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/use.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/use.js +68 -3
- package/node_modules/@buddi/core/dist/secrets/use.js.map +1 -1
- package/node_modules/@buddi/core/dist/tools.d.ts +22 -0
- package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/tools.js.map +1 -1
- package/node_modules/@buddi/core/migrations/080_secret_requests.sql +14 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/chat/session.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/chat/session.js +2 -1
- package/node_modules/@buddi/gateway/dist/chat/session.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.js +3 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.d.ts +15 -3
- package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.js +34 -7
- package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js +8 -2
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/pending-question.d.ts +3 -1
- package/node_modules/@buddi/gateway/dist/surfaces/pending-question.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/pending-question.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/secret-request.d.ts +173 -0
- package/node_modules/@buddi/gateway/dist/surfaces/secret-request.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/surfaces/secret-request.js +332 -0
- package/node_modules/@buddi/gateway/dist/surfaces/secret-request.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/system-context.js +1 -1
- package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/main.js +14 -3
- package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.js +4 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js +9 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/approval-ask.js +2 -2
- package/node_modules/@buddi/gateway/dist/web/approval-ask.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/browser-capture.d.ts +13 -0
- package/node_modules/@buddi/gateway/dist/web/browser-capture.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/browser-capture.js +24 -0
- package/node_modules/@buddi/gateway/dist/web/browser-capture.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts +26 -0
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.js +87 -2
- package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts +30 -0
- package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/extension.js +86 -6
- package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/onboarding.js +1 -1
- package/node_modules/@buddi/gateway/dist/web/onboarding.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/remote-hand.d.ts +26 -2
- package/node_modules/@buddi/gateway/dist/web/remote-hand.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/remote-hand.js +89 -28
- package/node_modules/@buddi/gateway/dist/web/remote-hand.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/secret-request.d.ts +54 -0
- package/node_modules/@buddi/gateway/dist/web/secret-request.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/secret-request.js +264 -0
- package/node_modules/@buddi/gateway/dist/web/secret-request.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/secrets.d.ts +1 -0
- package/node_modules/@buddi/gateway/dist/web/secrets.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/secrets.js +1 -1
- package/node_modules/@buddi/gateway/dist/web/secrets.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.js +72 -3
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/install/dist/app-layout.d.ts +24 -0
- package/node_modules/@buddi/install/dist/app-layout.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/app-layout.js +64 -2
- package/node_modules/@buddi/install/dist/app-layout.js.map +1 -1
- package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/launcher.js +89 -10
- package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
- package/node_modules/@buddi/install/dist/linux-install.d.ts +41 -0
- package/node_modules/@buddi/install/dist/linux-install.d.ts.map +1 -0
- package/node_modules/@buddi/install/dist/linux-install.js +86 -0
- package/node_modules/@buddi/install/dist/linux-install.js.map +1 -0
- package/node_modules/@buddi/install/dist/runtime-info.d.ts +23 -0
- package/node_modules/@buddi/install/dist/runtime-info.d.ts.map +1 -0
- package/node_modules/@buddi/install/dist/runtime-info.js +69 -0
- package/node_modules/@buddi/install/dist/runtime-info.js.map +1 -0
- package/node_modules/@buddi/install/dist/supervisor.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/supervisor.js +8 -6
- package/node_modules/@buddi/install/dist/supervisor.js.map +1 -1
- package/node_modules/@buddi/install/dist/uninstall.d.ts +20 -0
- package/node_modules/@buddi/install/dist/uninstall.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/uninstall.js +50 -1
- package/node_modules/@buddi/install/dist/uninstall.js.map +1 -1
- package/node_modules/@buddi/install/dist/upgrade.d.ts +4 -1
- package/node_modules/@buddi/install/dist/upgrade.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/upgrade.js +77 -51
- package/node_modules/@buddi/install/dist/upgrade.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/anthropic.d.ts +7 -0
- package/node_modules/@buddi/runtime/dist/anthropic.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/anthropic.js +19 -1
- package/node_modules/@buddi/runtime/dist/anthropic.js.map +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.d.ts +16 -1
- package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/controller.js +59 -5
- package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/driver.d.ts +12 -0
- package/node_modules/@buddi/tool-browser/dist/driver.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/driver.js +41 -2
- package/node_modules/@buddi/tool-browser/dist/driver.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/extension.d.ts +49 -9
- package/node_modules/@buddi/tool-browser/dist/extension.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/extension.js +145 -21
- package/node_modules/@buddi/tool-browser/dist/extension.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.d.ts +10 -6
- package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.js +22 -8
- package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/routes.d.ts +10 -1
- package/node_modules/@buddi/tool-browser/dist/routes.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/routes.js +24 -0
- package/node_modules/@buddi/tool-browser/dist/routes.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/service.d.ts +48 -1
- package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/service.js +114 -11
- package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/types.d.ts +54 -3
- package/node_modules/@buddi/tool-browser/dist/types.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/types.js +17 -1
- package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
- package/node_modules/@hono/node-server/package.json +2 -2
- package/node_modules/@types/node/README.md +1 -1
- package/node_modules/@types/node/package.json +2 -2
- package/node_modules/@types/node/util.d.ts +6 -3
- package/node_modules/content-disposition/README.md +105 -35
- package/node_modules/content-disposition/dist/index.d.ts +72 -0
- package/node_modules/content-disposition/dist/index.js +388 -0
- package/node_modules/content-disposition/dist/index.js.map +1 -0
- package/node_modules/content-disposition/package.json +31 -19
- package/node_modules/docx/dist/index.cjs +182 -80
- package/node_modules/docx/dist/index.d.cts +63 -6
- package/node_modules/docx/dist/index.d.ts +63 -6
- package/node_modules/docx/dist/index.iife.js +182 -80
- package/node_modules/docx/dist/index.mjs +182 -80
- package/node_modules/docx/dist/index.umd.cjs +182 -80
- package/node_modules/docx/dist/layout.cjs +1 -6
- package/node_modules/docx/dist/layout.iife.js +1 -6
- package/node_modules/docx/dist/layout.mjs +1 -6
- package/node_modules/docx/dist/layout.umd.cjs +1 -6
- package/node_modules/docx/package.json +4 -3
- package/node_modules/express/Readme.md +15 -9
- package/node_modules/express/lib/application.js +2 -2
- package/node_modules/express/lib/request.js +32 -19
- package/node_modules/express/lib/response.js +27 -30
- package/node_modules/express/node_modules/content-type/LICENSE +22 -0
- package/node_modules/express/node_modules/content-type/README.md +71 -0
- package/node_modules/express/node_modules/content-type/dist/index.d.ts +46 -0
- package/node_modules/express/node_modules/content-type/dist/index.js +176 -0
- package/node_modules/express/node_modules/content-type/dist/index.js.map +1 -0
- package/node_modules/express/node_modules/content-type/package.json +52 -0
- package/node_modules/express/package.json +10 -10
- package/node_modules/imapflow/CHANGELOG.md +48 -0
- package/node_modules/imapflow/dist/cjs/commands/append.d.ts +1 -1
- package/node_modules/imapflow/dist/cjs/commands/append.js +15 -4
- package/node_modules/imapflow/dist/cjs/commands/compress.js +2 -2
- package/node_modules/imapflow/dist/cjs/commands/id.js +5 -3
- package/node_modules/imapflow/dist/cjs/commands/idle.js +9 -9
- package/node_modules/imapflow/dist/cjs/commands/list.js +2 -2
- package/node_modules/imapflow/dist/cjs/commands/namespace.js +18 -14
- package/node_modules/imapflow/dist/cjs/commands/quota.js +2 -3
- package/node_modules/imapflow/dist/cjs/commands/select.d.ts +3 -14
- package/node_modules/imapflow/dist/cjs/commands/select.js +1 -4
- package/node_modules/imapflow/dist/cjs/commands/status.js +2 -4
- package/node_modules/imapflow/dist/cjs/connection-deadline.d.ts +1 -1
- package/node_modules/imapflow/dist/cjs/connection-deadline.js +2 -4
- package/node_modules/imapflow/dist/cjs/download.js +66 -35
- package/node_modules/imapflow/dist/cjs/errors.d.ts +15 -0
- package/node_modules/imapflow/dist/cjs/errors.js +22 -0
- package/node_modules/imapflow/dist/cjs/handler/imap-compiler.d.ts +4 -4
- package/node_modules/imapflow/dist/cjs/handler/imap-compiler.js +18 -18
- package/node_modules/imapflow/dist/cjs/handler/imap-parser.js +28 -3
- package/node_modules/imapflow/dist/cjs/handler/imap-stream.js +9 -8
- package/node_modules/imapflow/dist/cjs/handler/limits.d.ts +1 -1
- package/node_modules/imapflow/dist/cjs/handler/limits.js +5 -7
- package/node_modules/imapflow/dist/cjs/handler/parser-instance.js +23 -38
- package/node_modules/imapflow/dist/cjs/handler/token-parser.d.ts +12 -0
- package/node_modules/imapflow/dist/cjs/handler/token-parser.js +44 -104
- package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +4 -3
- package/node_modules/imapflow/dist/cjs/imap-flow.js +128 -78
- package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
- package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
- package/node_modules/imapflow/dist/cjs/proxy-connection.js +2 -5
- package/node_modules/imapflow/dist/cjs/search-compiler.js +2 -3
- package/node_modules/imapflow/dist/cjs/tools.d.ts +24 -3
- package/node_modules/imapflow/dist/cjs/tools.js +59 -18
- package/node_modules/imapflow/dist/cjs/types.d.ts +20 -1
- package/node_modules/imapflow/dist/esm/commands/append.d.ts +1 -1
- package/node_modules/imapflow/dist/esm/commands/append.js +15 -4
- package/node_modules/imapflow/dist/esm/commands/compress.js +2 -2
- package/node_modules/imapflow/dist/esm/commands/id.js +6 -4
- package/node_modules/imapflow/dist/esm/commands/idle.js +9 -9
- package/node_modules/imapflow/dist/esm/commands/list.js +3 -3
- package/node_modules/imapflow/dist/esm/commands/namespace.js +19 -15
- package/node_modules/imapflow/dist/esm/commands/quota.js +3 -4
- package/node_modules/imapflow/dist/esm/commands/select.d.ts +3 -14
- package/node_modules/imapflow/dist/esm/commands/select.js +1 -4
- package/node_modules/imapflow/dist/esm/commands/status.js +2 -4
- package/node_modules/imapflow/dist/esm/connection-deadline.d.ts +1 -1
- package/node_modules/imapflow/dist/esm/connection-deadline.js +2 -4
- package/node_modules/imapflow/dist/esm/download.js +66 -35
- package/node_modules/imapflow/dist/esm/errors.d.ts +15 -0
- package/node_modules/imapflow/dist/esm/errors.js +21 -0
- package/node_modules/imapflow/dist/esm/handler/imap-compiler.d.ts +4 -4
- package/node_modules/imapflow/dist/esm/handler/imap-compiler.js +18 -18
- package/node_modules/imapflow/dist/esm/handler/imap-parser.js +28 -3
- package/node_modules/imapflow/dist/esm/handler/imap-stream.js +9 -8
- package/node_modules/imapflow/dist/esm/handler/limits.d.ts +1 -1
- package/node_modules/imapflow/dist/esm/handler/limits.js +5 -7
- package/node_modules/imapflow/dist/esm/handler/parser-instance.js +23 -38
- package/node_modules/imapflow/dist/esm/handler/token-parser.d.ts +12 -0
- package/node_modules/imapflow/dist/esm/handler/token-parser.js +44 -104
- package/node_modules/imapflow/dist/esm/imap-flow.d.ts +4 -3
- package/node_modules/imapflow/dist/esm/imap-flow.js +130 -80
- package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
- package/node_modules/imapflow/dist/esm/package-info.js +1 -1
- package/node_modules/imapflow/dist/esm/proxy-connection.js +2 -5
- package/node_modules/imapflow/dist/esm/search-compiler.js +2 -3
- package/node_modules/imapflow/dist/esm/tools.d.ts +24 -3
- package/node_modules/imapflow/dist/esm/tools.js +58 -19
- package/node_modules/imapflow/dist/esm/types.d.ts +20 -1
- package/node_modules/imapflow/package.json +6 -3
- package/node_modules/playwright/README.md +4 -4
- package/node_modules/playwright/lib/agents/playwright-test-generator.agent.md +1 -1
- package/node_modules/playwright/lib/cli/testActions.js +8 -5
- package/node_modules/playwright/lib/common/index.js +37 -23
- package/node_modules/playwright/lib/common/index.js.txt +8 -9
- package/node_modules/playwright/lib/index.js +16 -4
- package/node_modules/playwright/lib/matchers/expect.js +13 -7
- package/node_modules/playwright/lib/matchers/expect.js.txt +4 -4
- package/node_modules/playwright/lib/program.js +2 -1
- package/node_modules/playwright/lib/runner/index.js +438 -244
- package/node_modules/playwright/lib/runner/index.js.txt +12 -11
- package/node_modules/playwright/lib/transform/babelBundle.js +2612 -2396
- package/node_modules/playwright/lib/transform/babelBundle.js.LICENSE +15 -15
- package/node_modules/playwright/lib/transform/babelBundle.js.txt +14 -11
- package/node_modules/playwright/lib/transform/esmLoader.js +17 -5
- package/node_modules/playwright/lib/transform/esmLoader.js.txt +3 -3
- package/node_modules/playwright/lib/worker/workerProcessEntry.js +17 -18
- package/node_modules/playwright/package.json +2 -7
- package/node_modules/playwright/types/test.d.ts +156 -39
- package/node_modules/playwright-core/browsers.json +9 -9
- package/node_modules/playwright-core/cli.js +1 -0
- package/node_modules/playwright-core/lib/bootstrap.js +61 -0
- package/node_modules/playwright-core/lib/coreBundle.js +6393 -4170
- package/node_modules/playwright-core/lib/server/electron/loader.js +4 -0
- package/node_modules/playwright-core/lib/tools/cli-client/cli.js +2 -1
- package/node_modules/playwright-core/lib/tools/cli-client/help.json +99 -12
- package/node_modules/playwright-core/lib/tools/cli-client/output.js +17 -16
- package/node_modules/playwright-core/lib/tools/cli-client/program.js +8 -4
- package/node_modules/playwright-core/lib/tools/cli-client/session.js +2 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/SKILL.md +71 -3
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/pr-attachments.md +60 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/running-code.md +4 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/session-management.md +2 -0
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/test-generation.md +1 -1
- package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/video-recording.md +76 -3
- package/node_modules/playwright-core/lib/tools/skills/playwright-trace/SKILL.md +1 -1
- package/node_modules/playwright-core/lib/utilsBundle.js +948 -227
- package/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +6 -6
- package/node_modules/playwright-core/lib/vite/htmlReport/report.js +1 -1
- package/node_modules/playwright-core/lib/vite/recorder/assets/{codeMirrorModule-CVQWJZAA.js → codeMirrorModule-DK72OMRi.js} +1 -1
- package/node_modules/playwright-core/lib/vite/recorder/assets/index-Cn0mmDuv.js +129 -0
- package/node_modules/playwright-core/lib/vite/recorder/index.html +1 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/{codeMirrorModule-BbkfBe3n.js → codeMirrorModule-BEB2e8M3.js} +1 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-D-g2vrvf.js +184 -0
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/{xtermModule-DywYcAf8.js → xtermModule-B794rD2Z.js} +1 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/{defaultSettingsView.Bqk9acqE.css → defaultSettingsView.C8BeHuxd.css} +1 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/{index.B4cLoZK3.js → index.7-c5LSTW.js} +1 -1
- package/node_modules/playwright-core/lib/vite/traceViewer/index.html +3 -3
- package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/node_modules/playwright-core/lib/vite/traceViewer/{uiMode.CU5KtEkS.js → uiMode.CYwC_gH1.js} +4 -4
- package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +3 -3
- package/node_modules/playwright-core/package.json +1 -1
- package/node_modules/playwright-core/types/protocol.d.ts +468 -337
- package/node_modules/playwright-core/types/types.d.ts +572 -37
- package/node_modules/process-warning/.github/workflows/ci.yml +1 -1
- package/node_modules/process-warning/.github/workflows/lock-threads.yml +1 -1
- package/node_modules/process-warning/.github/workflows/release.yml +24 -0
- package/node_modules/process-warning/README.md +46 -46
- package/node_modules/process-warning/package.json +1 -1
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/core/dist/.tsbuildinfo +1 -1
- package/packages/core/dist/plugin/index.d.ts +1 -1
- package/packages/core/dist/plugin/index.d.ts.map +1 -1
- package/packages/core/dist/plugin/index.js.map +1 -1
- package/packages/core/dist/questions/store.d.ts +3 -1
- package/packages/core/dist/questions/store.d.ts.map +1 -1
- package/packages/core/dist/questions/store.js +3 -3
- package/packages/core/dist/questions/store.js.map +1 -1
- package/packages/core/dist/questions/types.d.ts +46 -1
- package/packages/core/dist/questions/types.d.ts.map +1 -1
- package/packages/core/dist/questions/types.js +2 -1
- package/packages/core/dist/questions/types.js.map +1 -1
- package/packages/core/dist/secrets/approval.d.ts +54 -0
- package/packages/core/dist/secrets/approval.d.ts.map +1 -1
- package/packages/core/dist/secrets/approval.js +58 -1
- package/packages/core/dist/secrets/approval.js.map +1 -1
- package/packages/core/dist/secrets/settings.d.ts +178 -0
- package/packages/core/dist/secrets/settings.d.ts.map +1 -1
- package/packages/core/dist/secrets/settings.js +63 -6
- package/packages/core/dist/secrets/settings.js.map +1 -1
- package/packages/core/dist/secrets/store.d.ts +31 -0
- package/packages/core/dist/secrets/store.d.ts.map +1 -1
- package/packages/core/dist/secrets/store.js +75 -0
- package/packages/core/dist/secrets/store.js.map +1 -1
- package/packages/core/dist/secrets/use.d.ts.map +1 -1
- package/packages/core/dist/secrets/use.js +68 -3
- package/packages/core/dist/secrets/use.js.map +1 -1
- package/packages/core/dist/tools.d.ts +22 -0
- package/packages/core/dist/tools.d.ts.map +1 -1
- package/packages/core/dist/tools.js.map +1 -1
- package/packages/core/migrations/080_secret_requests.sql +14 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/chat/session.d.ts.map +1 -1
- package/packages/gateway/dist/chat/session.js +2 -1
- package/packages/gateway/dist/chat/session.js.map +1 -1
- package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
- package/packages/gateway/dist/missions/execute.js +3 -1
- package/packages/gateway/dist/missions/execute.js.map +1 -1
- package/packages/gateway/dist/surfaces/browser-cards.d.ts +15 -3
- package/packages/gateway/dist/surfaces/browser-cards.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/browser-cards.js +34 -7
- package/packages/gateway/dist/surfaces/browser-cards.js.map +1 -1
- package/packages/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/offered-actions.js +8 -2
- package/packages/gateway/dist/surfaces/offered-actions.js.map +1 -1
- package/packages/gateway/dist/surfaces/pending-question.d.ts +3 -1
- package/packages/gateway/dist/surfaces/pending-question.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/pending-question.js.map +1 -1
- package/packages/gateway/dist/surfaces/secret-request.d.ts +173 -0
- package/packages/gateway/dist/surfaces/secret-request.d.ts.map +1 -0
- package/packages/gateway/dist/surfaces/secret-request.js +332 -0
- package/packages/gateway/dist/surfaces/secret-request.js.map +1 -0
- package/packages/gateway/dist/system-context.js +1 -1
- package/packages/gateway/dist/system-context.js.map +1 -1
- package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/main.js +14 -3
- package/packages/gateway/dist/telegram/main.js.map +1 -1
- package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/surface.js +4 -1
- package/packages/gateway/dist/telegram/surface.js.map +1 -1
- package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/packages/gateway/dist/web/api-routes.js +9 -1
- package/packages/gateway/dist/web/api-routes.js.map +1 -1
- package/packages/gateway/dist/web/approval-ask.js +2 -2
- package/packages/gateway/dist/web/approval-ask.js.map +1 -1
- package/packages/gateway/dist/web/browser-capture.d.ts +13 -0
- package/packages/gateway/dist/web/browser-capture.d.ts.map +1 -0
- package/packages/gateway/dist/web/browser-capture.js +24 -0
- package/packages/gateway/dist/web/browser-capture.js.map +1 -0
- package/packages/gateway/dist/web/chat.d.ts +26 -0
- package/packages/gateway/dist/web/chat.d.ts.map +1 -1
- package/packages/gateway/dist/web/chat.js +87 -2
- package/packages/gateway/dist/web/chat.js.map +1 -1
- package/packages/gateway/dist/web/extension.d.ts +30 -0
- package/packages/gateway/dist/web/extension.d.ts.map +1 -1
- package/packages/gateway/dist/web/extension.js +86 -6
- package/packages/gateway/dist/web/extension.js.map +1 -1
- package/packages/gateway/dist/web/onboarding.js +1 -1
- package/packages/gateway/dist/web/onboarding.js.map +1 -1
- package/packages/gateway/dist/web/remote-hand.d.ts +26 -2
- package/packages/gateway/dist/web/remote-hand.d.ts.map +1 -1
- package/packages/gateway/dist/web/remote-hand.js +89 -28
- package/packages/gateway/dist/web/remote-hand.js.map +1 -1
- package/packages/gateway/dist/web/secret-request.d.ts +54 -0
- package/packages/gateway/dist/web/secret-request.d.ts.map +1 -0
- package/packages/gateway/dist/web/secret-request.js +264 -0
- package/packages/gateway/dist/web/secret-request.js.map +1 -0
- package/packages/gateway/dist/web/secrets.d.ts +1 -0
- package/packages/gateway/dist/web/secrets.d.ts.map +1 -1
- package/packages/gateway/dist/web/secrets.js +1 -1
- package/packages/gateway/dist/web/secrets.js.map +1 -1
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +72 -3
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/install/dist/.tsbuildinfo +1 -1
- package/packages/install/dist/app-layout.d.ts +24 -0
- package/packages/install/dist/app-layout.d.ts.map +1 -1
- package/packages/install/dist/app-layout.js +64 -2
- package/packages/install/dist/app-layout.js.map +1 -1
- package/packages/install/dist/launcher.d.ts.map +1 -1
- package/packages/install/dist/launcher.js +89 -10
- package/packages/install/dist/launcher.js.map +1 -1
- package/packages/install/dist/linux-install.d.ts +41 -0
- package/packages/install/dist/linux-install.d.ts.map +1 -0
- package/packages/install/dist/linux-install.js +86 -0
- package/packages/install/dist/linux-install.js.map +1 -0
- package/packages/install/dist/runtime-info.d.ts +23 -0
- package/packages/install/dist/runtime-info.d.ts.map +1 -0
- package/packages/install/dist/runtime-info.js +69 -0
- package/packages/install/dist/runtime-info.js.map +1 -0
- package/packages/install/dist/supervisor.d.ts.map +1 -1
- package/packages/install/dist/supervisor.js +8 -6
- package/packages/install/dist/supervisor.js.map +1 -1
- package/packages/install/dist/uninstall.d.ts +20 -0
- package/packages/install/dist/uninstall.d.ts.map +1 -1
- package/packages/install/dist/uninstall.js +50 -1
- package/packages/install/dist/uninstall.js.map +1 -1
- package/packages/install/dist/upgrade.d.ts +4 -1
- package/packages/install/dist/upgrade.d.ts.map +1 -1
- package/packages/install/dist/upgrade.js +77 -51
- package/packages/install/dist/upgrade.js.map +1 -1
- package/packages/runtime/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/anthropic.d.ts +7 -0
- package/packages/runtime/dist/anthropic.d.ts.map +1 -1
- package/packages/runtime/dist/anthropic.js +19 -1
- package/packages/runtime/dist/anthropic.js.map +1 -1
- package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/controller.d.ts +16 -1
- package/packages/tools/browser/dist/controller.d.ts.map +1 -1
- package/packages/tools/browser/dist/controller.js +59 -5
- package/packages/tools/browser/dist/controller.js.map +1 -1
- package/packages/tools/browser/dist/driver.d.ts +12 -0
- package/packages/tools/browser/dist/driver.d.ts.map +1 -1
- package/packages/tools/browser/dist/driver.js +41 -2
- package/packages/tools/browser/dist/driver.js.map +1 -1
- package/packages/tools/browser/dist/extension.d.ts +49 -9
- package/packages/tools/browser/dist/extension.d.ts.map +1 -1
- package/packages/tools/browser/dist/extension.js +145 -21
- package/packages/tools/browser/dist/extension.js.map +1 -1
- package/packages/tools/browser/dist/index.d.ts +10 -6
- package/packages/tools/browser/dist/index.d.ts.map +1 -1
- package/packages/tools/browser/dist/index.js +22 -8
- package/packages/tools/browser/dist/index.js.map +1 -1
- package/packages/tools/browser/dist/routes.d.ts +10 -1
- package/packages/tools/browser/dist/routes.d.ts.map +1 -1
- package/packages/tools/browser/dist/routes.js +24 -0
- package/packages/tools/browser/dist/routes.js.map +1 -1
- package/packages/tools/browser/dist/service.d.ts +48 -1
- package/packages/tools/browser/dist/service.d.ts.map +1 -1
- package/packages/tools/browser/dist/service.js +114 -11
- package/packages/tools/browser/dist/service.js.map +1 -1
- package/packages/tools/browser/dist/types.d.ts +54 -3
- package/packages/tools/browser/dist/types.d.ts.map +1 -1
- package/packages/tools/browser/dist/types.js +17 -1
- package/packages/tools/browser/dist/types.js.map +1 -1
- package/packages/tools/email/dist/.tsbuildinfo +1 -1
- package/packages/tools/host/dist/.tsbuildinfo +1 -1
- package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
- package/packages/tools/memory/dist/.tsbuildinfo +1 -1
- package/packages/tools/web/dist/.tsbuildinfo +1 -1
- package/packages/web/dist/assets/index-DgpPl0TR.js +155 -0
- package/packages/web/dist/assets/index-rMRjibNI.css +1 -0
- package/packages/web/dist/assets/{lottie_light-D7CS-IeP.js → lottie_light-twPed1FM.js} +1 -1
- package/packages/web/dist/build.json +1 -1
- package/packages/web/dist/index.html +2 -2
- package/packages/web/dist/precache.json +4 -4
- package/node_modules/content-disposition/index.js +0 -536
- package/node_modules/playwright/jsx-runtime.js +0 -42
- package/node_modules/playwright/jsx-runtime.mjs +0 -21
- package/node_modules/playwright-core/lib/vite/recorder/assets/index-hrlLqLtq.js +0 -129
- package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-Ds6CBOo0.js +0 -182
- package/packages/web/dist/assets/index-BibqUZwt.js +0 -155
- package/packages/web/dist/assets/index-DBVZzTau.css +0 -1
|
@@ -60,6 +60,8 @@ var errors_js_2 = require("./errors.js");
|
|
|
60
60
|
Object.defineProperty(exports, "AuthenticationFailure", { enumerable: true, get: function () { return errors_js_2.AuthenticationFailure; } });
|
|
61
61
|
Object.defineProperty(exports, "ImapFlowErrorCode", { enumerable: true, get: function () { return errors_js_2.ImapFlowErrorCode; } });
|
|
62
62
|
const GREETING_TIMEOUT = 16 * 1000;
|
|
63
|
+
// Status responses that can carry an ALERT response code
|
|
64
|
+
const ALERT_RESPONSES = new Set(['OK', 'NO', 'BAD', 'BYE', 'PREAUTH']);
|
|
63
65
|
const UPGRADE_TIMEOUT = 10 * 1000;
|
|
64
66
|
const SOCKET_TIMEOUT = 5 * 60 * 1000;
|
|
65
67
|
// Ceiling for any throttle back-off wait. Both the connection-level back-off and the per-command
|
|
@@ -83,6 +85,10 @@ const RAW_SENSITIVE_COMMANDS = new Set(['LOGIN', 'AUTHENTICATE']);
|
|
|
83
85
|
// Stand-in payload for a withheld raw client frame. Fixed width, so the entry says nothing
|
|
84
86
|
// about the length of what it replaced.
|
|
85
87
|
const RAW_HIDDEN_PLACEHOLDER = Buffer.from('(* value hidden *)\r\n').toString('base64');
|
|
88
|
+
// From this size up, a Buffer written as the last part of a command gets its CRLF as a socket
|
|
89
|
+
// write of its own instead of being copied to append it (see write())
|
|
90
|
+
const SEPARATE_LINE_BREAK_SIZE = 64 * 1024;
|
|
91
|
+
const CRLF = Buffer.from('\r\n');
|
|
86
92
|
// Servers, matched by the name in their ID response, that advertise IMAP4rev2 next to
|
|
87
93
|
// IMAP4rev1 and accept ENABLE IMAP4rev2, but misbehave once it is enabled. ENABLE cannot
|
|
88
94
|
// be undone (RFC 5161), so these are kept in IMAP4rev1 mode from the start. Strato's
|
|
@@ -383,43 +389,47 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
383
389
|
// commandParts holds the remaining parts (literal data, continuation); the CRLF
|
|
384
390
|
// delimiter is only added when no more parts remain (the command is complete).
|
|
385
391
|
let addLineBreak = !this.commandParts.length;
|
|
386
|
-
|
|
392
|
+
// What goes to the socket, one write per entry. A large Buffer (the data of a literal)
|
|
393
|
+
// gets its CRLF as a write of its own, as concatenating would copy all of it.
|
|
394
|
+
let frames;
|
|
387
395
|
if (typeof chunk === 'string') {
|
|
388
396
|
if (addLineBreak) {
|
|
389
397
|
chunk += '\r\n';
|
|
390
398
|
}
|
|
391
|
-
|
|
399
|
+
frames = [Buffer.from(chunk, 'binary')];
|
|
392
400
|
}
|
|
393
401
|
else if (Buffer.isBuffer(chunk)) {
|
|
394
|
-
if (addLineBreak) {
|
|
395
|
-
|
|
402
|
+
if (!addLineBreak) {
|
|
403
|
+
frames = [chunk];
|
|
396
404
|
}
|
|
397
405
|
else {
|
|
398
|
-
|
|
406
|
+
frames = chunk.length >= SEPARATE_LINE_BREAK_SIZE ? [chunk, CRLF] : [Buffer.concat([chunk, CRLF])];
|
|
399
407
|
}
|
|
400
408
|
}
|
|
401
409
|
else {
|
|
402
410
|
return false;
|
|
403
411
|
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
412
|
+
for (let data of frames) {
|
|
413
|
+
if (this.logRaw) {
|
|
414
|
+
// Client frames of an authentication exchange carry credentials: the LOGIN
|
|
415
|
+
// arguments, and for AUTHENTICATE also the continuation writes (SASL PLAIN
|
|
416
|
+
// response, AUTH=LOGIN password, OAuth token payload) that bypass send(). The
|
|
417
|
+
// parsed command log masks these, so the raw log must withhold them too, but
|
|
418
|
+
// `data` still carries the placeholder rather than being dropped - the field is
|
|
419
|
+
// part of the documented log format and consumers decode it unconditionally.
|
|
420
|
+
this.log.trace({
|
|
421
|
+
src: 'c',
|
|
422
|
+
msg: 'write to socket',
|
|
423
|
+
data: this.rawSensitiveCommand ? RAW_HIDDEN_PLACEHOLDER : data.toString('base64'),
|
|
424
|
+
...(this.rawSensitiveCommand ? { hidden: true } : {}),
|
|
425
|
+
compress: !!this._deflate,
|
|
426
|
+
secure: !!this.secureConnection,
|
|
427
|
+
cid: this.id
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
this.writeBytesCounter += data.length;
|
|
431
|
+
this.writeSocket.write(data);
|
|
420
432
|
}
|
|
421
|
-
this.writeBytesCounter += data.length;
|
|
422
|
-
this.writeSocket.write(data);
|
|
423
433
|
}
|
|
424
434
|
/**
|
|
425
435
|
* Returns byte counters for the current connection.
|
|
@@ -445,6 +455,9 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
445
455
|
// and once as a string (for logging, with sensitive data masked).
|
|
446
456
|
// When LITERAL- or LITERAL+ extensions are available, the compiler can use
|
|
447
457
|
// non-synchronizing literals to avoid waiting for server "+" continuation.
|
|
458
|
+
// Async although nothing in it awaits: a failure inside it rejects one microtask later, so a
|
|
459
|
+
// close() in the same tick settles the command with NoConnection first (see
|
|
460
|
+
// test/unhandled-rejection-test.ts)
|
|
448
461
|
/** @internal */
|
|
449
462
|
async send(data) {
|
|
450
463
|
if (this.state === this.states.LOGOUT) {
|
|
@@ -454,11 +467,11 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
454
467
|
// the socket watchdog.
|
|
455
468
|
throw this.createNoConnectionError(false, { rejectedFrom: 'sendAfterLogout', command: data.command });
|
|
456
469
|
}
|
|
457
|
-
// Classify
|
|
458
|
-
//
|
|
470
|
+
// Classify once per command. Every frame of this command - the command line and any
|
|
471
|
+
// continuation write that follows it - belongs to it until the next send(), because
|
|
459
472
|
// trySend() keeps one command in flight at a time. Reading currentRequest inside write()
|
|
460
|
-
// instead would be racy: rejectCurrentRequest() can clear it
|
|
461
|
-
//
|
|
473
|
+
// instead would be racy: rejectCurrentRequest() can clear it before a continuation frame
|
|
474
|
+
// is written, and the credential frame would then be logged in the clear.
|
|
462
475
|
// Uppercased because the wire protocol is case-insensitive and exec() passes the
|
|
463
476
|
// caller's spelling through unchanged. The command list covers the mechanisms whose
|
|
464
477
|
// secret arrives in a continuation frame, which carries no attributes of its own; the
|
|
@@ -469,7 +482,7 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
469
482
|
// Compile with asArray=true: splits output into parts for literal handling.
|
|
470
483
|
// First part is the command text up to the first literal, remaining parts
|
|
471
484
|
// are stored in this.commandParts and sent after server "+" continuations.
|
|
472
|
-
let compiled =
|
|
485
|
+
let compiled = (0, imap_handler_js_1.compiler)(data, {
|
|
473
486
|
asArray: true,
|
|
474
487
|
// LITERAL- is part of base IMAP4rev2
|
|
475
488
|
literalMinus: (0, tools_js_1.hasCapability)(this, 'LITERAL-') || this.capabilities.has('LITERAL+')
|
|
@@ -480,7 +493,7 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
480
493
|
// Compile again for logging with isLogging=true: masks sensitive values
|
|
481
494
|
// like passwords while producing a human-readable command string
|
|
482
495
|
if (this.isLogLevelEnabled('debug')) {
|
|
483
|
-
let logCompiled =
|
|
496
|
+
let logCompiled = (0, imap_handler_js_1.compiler)(data, {
|
|
484
497
|
isLogging: true
|
|
485
498
|
});
|
|
486
499
|
this.log.debug({ src: 'c', msg: logCompiled.toString(), cid: this.id, comment: options.comment });
|
|
@@ -737,9 +750,7 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
737
750
|
// parser would keep waiting on its backpressure callback forever, which is a
|
|
738
751
|
// silent permanent hang. Fail closed instead.
|
|
739
752
|
keepReading = false;
|
|
740
|
-
let error =
|
|
741
|
-
error.code = 'ResponseProcessingFailed';
|
|
742
|
-
error._err = err;
|
|
753
|
+
let error = (0, errors_js_1.createImapError)('Failed to process server response', 'ResponseProcessingFailed', { _err: err });
|
|
743
754
|
this.log.error({ msg: 'Failed to process server response', err, cid: this.id });
|
|
744
755
|
this.rejectCurrentRequest(error);
|
|
745
756
|
this.failProtocol(error);
|
|
@@ -790,6 +801,27 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
790
801
|
this.rejectCurrentRequest(err);
|
|
791
802
|
this.trySend().catch(sendErr => (0, tools_js_1.logConnectionError)(this, 'Failed to dispatch command', sendErr));
|
|
792
803
|
}
|
|
804
|
+
// RFC 9051 section 7.1: the text of an ALERT must be presented to the user. It can come
|
|
805
|
+
// with any status response, tagged or untagged, the greeting and BYE included. Called for
|
|
806
|
+
// responses that carry the ALERT code.
|
|
807
|
+
/** @internal */
|
|
808
|
+
reportAlert(parsed) {
|
|
809
|
+
let response = (parsed.command || '').toUpperCase();
|
|
810
|
+
if (!ALERT_RESPONSES.has(response)) {
|
|
811
|
+
return;
|
|
812
|
+
}
|
|
813
|
+
let alert = {
|
|
814
|
+
message: (0, tools_js_1.getTextValues)(parsed.attributes)
|
|
815
|
+
.map(value => value.trim())
|
|
816
|
+
.join(' '),
|
|
817
|
+
response: response
|
|
818
|
+
};
|
|
819
|
+
if (parsed.tag && parsed.tag !== '*') {
|
|
820
|
+
alert.tag = parsed.tag;
|
|
821
|
+
}
|
|
822
|
+
this.log.info({ msg: 'Server alert', alert: alert.message, response: alert.response, cid: this.id });
|
|
823
|
+
(0, tools_js_1.emitSafe)(this, 'alert', alert);
|
|
824
|
+
}
|
|
793
825
|
/**
|
|
794
826
|
* Handles a single parsed server response: telemetry, continuation requests, response-code
|
|
795
827
|
* section handlers, untagged handlers and tagged command completion.
|
|
@@ -841,7 +873,7 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
841
873
|
// skipped when the level is off.
|
|
842
874
|
let logLevel = /^\d+$/.test(parsed.command || '') && parsed.attributes && parsed.attributes[0] && parsed.attributes[0].value === 'FETCH' ? 'trace' : 'debug';
|
|
843
875
|
if (this.isLogLevelEnabled(logLevel)) {
|
|
844
|
-
let logCompiled =
|
|
876
|
+
let logCompiled = (0, imap_handler_js_1.compiler)(parsed, {
|
|
845
877
|
isLogging: true
|
|
846
878
|
});
|
|
847
879
|
this.log[logLevel]({ src: 's', msg: logCompiled.toString(), cid: this.id, nullBytesRemoved: parsed.nullBytesRemoved });
|
|
@@ -884,6 +916,9 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
884
916
|
// dereference must be guarded or one such line tears down the whole connection
|
|
885
917
|
if (section && section.length && section[0] && section[0].type === 'ATOM' && typeof section[0].value === 'string') {
|
|
886
918
|
let sectionKey = section[0].value.toUpperCase().trim();
|
|
919
|
+
if (sectionKey === 'ALERT') {
|
|
920
|
+
this.reportAlert(parsed);
|
|
921
|
+
}
|
|
887
922
|
let sectionHandler = this.getSectionHandler(sectionKey);
|
|
888
923
|
if (sectionHandler) {
|
|
889
924
|
try {
|
|
@@ -944,12 +979,12 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
944
979
|
// response ambiguous, so reject this request and fail the connection closed.
|
|
945
980
|
let request = this.requestTagMap.get(parsed.tag);
|
|
946
981
|
this.requestTagMap.delete(parsed.tag);
|
|
947
|
-
let err =
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
};
|
|
982
|
+
let err = (0, errors_js_1.createImapError)('Server sent a tagged response for a command that was not in flight', 'UnexpectedTag', {
|
|
983
|
+
details: {
|
|
984
|
+
received: parsed.tag,
|
|
985
|
+
expected: this.currentRequest ? this.currentRequest.tag : null
|
|
986
|
+
}
|
|
987
|
+
});
|
|
953
988
|
this.log.error({ msg: 'Protocol desynchronization', err, cid: this.id });
|
|
954
989
|
request.reject(err);
|
|
955
990
|
this.failProtocol(err);
|
|
@@ -993,9 +1028,9 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
993
1028
|
try {
|
|
994
1029
|
err.executedCommand =
|
|
995
1030
|
parsed.tag +
|
|
996
|
-
(
|
|
1031
|
+
(0, imap_handler_js_1.compiler)(request, {
|
|
997
1032
|
isLogging: true
|
|
998
|
-
})
|
|
1033
|
+
}).toString();
|
|
999
1034
|
}
|
|
1000
1035
|
catch {
|
|
1001
1036
|
// ignore
|
|
@@ -1048,9 +1083,7 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
1048
1083
|
break;
|
|
1049
1084
|
}
|
|
1050
1085
|
default: {
|
|
1051
|
-
let err =
|
|
1052
|
-
err.code = 'InvalidResponse';
|
|
1053
|
-
err.response = parsed;
|
|
1086
|
+
let err = (0, errors_js_1.createImapError)('Invalid server response', 'InvalidResponse', { response: parsed });
|
|
1054
1087
|
request.reject(err);
|
|
1055
1088
|
break;
|
|
1056
1089
|
}
|
|
@@ -1151,11 +1184,7 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
1151
1184
|
this._socketTimeout =
|
|
1152
1185
|
this._socketTimeout ||
|
|
1153
1186
|
(() => {
|
|
1154
|
-
const timeoutError = () =>
|
|
1155
|
-
const err = new Error('Socket timeout');
|
|
1156
|
-
err.code = 'ETIMEOUT';
|
|
1157
|
-
return err;
|
|
1158
|
-
};
|
|
1187
|
+
const timeoutError = () => (0, errors_js_1.createImapError)('Socket timeout', 'ETIMEOUT');
|
|
1159
1188
|
if (!this.usable || !this.socket || this.socket.destroyed) {
|
|
1160
1189
|
this.emitError(timeoutError());
|
|
1161
1190
|
return;
|
|
@@ -1339,7 +1368,10 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
1339
1368
|
// to call deflate.flush() after each IMAP command to push all pending
|
|
1340
1369
|
// compressed bytes to the server immediately (IMAP is request-response).
|
|
1341
1370
|
const writeSocket = new node_stream_1.PassThrough({
|
|
1342
|
-
highWaterMark: 64 * 1024 // 64KB buffer limit to prevent excessive memory usage
|
|
1371
|
+
highWaterMark: 64 * 1024, // 64KB buffer limit to prevent excessive memory usage
|
|
1372
|
+
// read() hands out each written chunk as is: in byte mode it joins whatever is
|
|
1373
|
+
// queued into a new Buffer, which copies every large literal once more
|
|
1374
|
+
readableObjectMode: true
|
|
1343
1375
|
});
|
|
1344
1376
|
this.writeSocket = writeSocket;
|
|
1345
1377
|
/* c8 ignore start */ // destroySoon override is never invoked by ImapFlow (close() calls destroy()); kept for stream API completeness
|
|
@@ -1467,9 +1499,7 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
1467
1499
|
// socket; injection that still races in afterwards corrupts the TLS handshake and
|
|
1468
1500
|
// is rejected there instead (with a generic TLS error rather than STARTTLS_INJECTION).
|
|
1469
1501
|
const failSTARTTLSInjection = () => {
|
|
1470
|
-
let err =
|
|
1471
|
-
err.code = 'STARTTLS_INJECTION';
|
|
1472
|
-
err.tlsFailed = true;
|
|
1502
|
+
let err = (0, errors_js_1.createImapError)('Server sent data after the STARTTLS response and before the TLS handshake; possible plaintext-injection attack', 'STARTTLS_INJECTION', { tlsFailed: true });
|
|
1473
1503
|
this.closeAfter();
|
|
1474
1504
|
return err;
|
|
1475
1505
|
};
|
|
@@ -1512,6 +1542,13 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
1512
1542
|
// socket event cannot re-enter an already settled upgrade or leave state behind.
|
|
1513
1543
|
const settle = (err, result) => {
|
|
1514
1544
|
if (settled) {
|
|
1545
|
+
// A failed handshake can produce more than one error (Bun emits ECONNRESET on
|
|
1546
|
+
// the TLS socket after the one that settled the upgrade). settle() stays the
|
|
1547
|
+
// error listener of both sockets until they are torn down, so later errors
|
|
1548
|
+
// end up here instead of being thrown as unhandled 'error' events.
|
|
1549
|
+
if (err) {
|
|
1550
|
+
this.log.debug({ msg: 'Socket error after the TLS upgrade was settled', err, cid: this.id });
|
|
1551
|
+
}
|
|
1515
1552
|
return;
|
|
1516
1553
|
}
|
|
1517
1554
|
settled = true;
|
|
@@ -1519,9 +1556,12 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
1519
1556
|
this.upgradeTimeout = null;
|
|
1520
1557
|
this.upgrading = false;
|
|
1521
1558
|
this._upgradeReject = null;
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1559
|
+
if (!err) {
|
|
1560
|
+
// the generic socket handlers took over in the success callback
|
|
1561
|
+
socketPlain.removeListener('error', settle);
|
|
1562
|
+
if (this.socket && this.socket !== socketPlain) {
|
|
1563
|
+
this.socket.removeListener('error', settle);
|
|
1564
|
+
}
|
|
1525
1565
|
}
|
|
1526
1566
|
if (err) {
|
|
1527
1567
|
(0, tools_js_1.clearTimer)(this.connectTimeout);
|
|
@@ -1539,11 +1579,10 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
1539
1579
|
// one function, one settlement, and removeListener() in settle() needs no separate
|
|
1540
1580
|
// handler references. A TLS handshake failure (bad certificate, protocol mismatch)
|
|
1541
1581
|
// is emitted on the new TLS socket rather than on the plain one, so both are covered.
|
|
1542
|
-
socketPlain.
|
|
1582
|
+
socketPlain.on('error', settle);
|
|
1543
1583
|
/* c8 ignore start */ // UPGRADE_TIMEOUT is 10s; firing it deterministically would make the test suite hang
|
|
1544
1584
|
this.upgradeTimeout = setTimeout(() => {
|
|
1545
|
-
let err =
|
|
1546
|
-
err.code = 'UPGRADE_TIMEOUT';
|
|
1585
|
+
let err = (0, errors_js_1.createImapError)('Failed to upgrade connection in required time', 'UPGRADE_TIMEOUT');
|
|
1547
1586
|
settle(err);
|
|
1548
1587
|
}, UPGRADE_TIMEOUT);
|
|
1549
1588
|
/* c8 ignore stop */
|
|
@@ -1617,7 +1656,7 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
1617
1656
|
// error listener during the handshake window; the generic handlers are installed
|
|
1618
1657
|
// by setSocketHandlers() inside the success callback above, so a handshake error
|
|
1619
1658
|
// has a single error path.
|
|
1620
|
-
tlsSocket.
|
|
1659
|
+
tlsSocket.on('error', settle);
|
|
1621
1660
|
this.writeSocket = tlsSocket;
|
|
1622
1661
|
});
|
|
1623
1662
|
if (upgraded) {
|
|
@@ -2047,9 +2086,7 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
2047
2086
|
async connect() {
|
|
2048
2087
|
if (this._connectCalled) {
|
|
2049
2088
|
// Prevent re-using ImapFlow instances by allowing to call connect just once.
|
|
2050
|
-
|
|
2051
|
-
err.code = 'InstanceReused';
|
|
2052
|
-
throw err;
|
|
2089
|
+
throw (0, errors_js_1.createImapError)('Can not re-use ImapFlow instance', 'InstanceReused');
|
|
2053
2090
|
}
|
|
2054
2091
|
this._connectCalled = true;
|
|
2055
2092
|
let closedError = () => this.createNoConnectionError(this.byeReason, { rejectedFrom: 'connect' });
|
|
@@ -2137,14 +2174,14 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
2137
2174
|
(0, proxy_connection_js_1.detachEarlyErrorHandler)(socket);
|
|
2138
2175
|
this.configureSocket(this.socket);
|
|
2139
2176
|
this.greetingTimeout = setTimeout(() => {
|
|
2140
|
-
let err =
|
|
2177
|
+
let err = (0, errors_js_1.createImapError)(
|
|
2141
2178
|
/* c8 ignore next */ // the greeting-timeout test uses a plaintext socket; the secure-socket branch of this hint is not separately exercised
|
|
2142
|
-
`Failed to receive greeting from server in required time${!this.secureConnection ? '. Maybe should use TLS?' : ''}
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
};
|
|
2179
|
+
`Failed to receive greeting from server in required time${!this.secureConnection ? '. Maybe should use TLS?' : ''}`, 'GREETING_TIMEOUT', {
|
|
2180
|
+
details: {
|
|
2181
|
+
/* c8 ignore next */ // firing the timeout with the default (large) value would hang the suite, so only the explicit-option path is tested
|
|
2182
|
+
greetingTimeout: this.options.greetingTimeout || GREETING_TIMEOUT
|
|
2183
|
+
}
|
|
2184
|
+
});
|
|
2148
2185
|
this.log.error({ err, cid: this.id });
|
|
2149
2186
|
this.closeAfter();
|
|
2150
2187
|
reject(err);
|
|
@@ -2368,9 +2405,9 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
2368
2405
|
let reject = this.initialReject;
|
|
2369
2406
|
this.initialResolve = false;
|
|
2370
2407
|
this.initialReject = false;
|
|
2371
|
-
let err =
|
|
2408
|
+
let err = (0, errors_js_1.createImapError)('Unexpected close',
|
|
2372
2409
|
/* c8 ignore next */ // closing a pending connect over an already-secure socket (the TLS branch) is not separately exercised
|
|
2373
|
-
|
|
2410
|
+
this.secureConnection ? 'ClosedAfterConnectTLS' : 'ClosedAfterConnectText');
|
|
2374
2411
|
// Surface the server's BYE reason (e.g. "Too many connections") when the
|
|
2375
2412
|
// connection was closed by an untagged BYE, so the caller sees why.
|
|
2376
2413
|
if (this.byeReason) {
|
|
@@ -2881,7 +2918,7 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
2881
2918
|
* Appends a new message to a mailbox
|
|
2882
2919
|
*
|
|
2883
2920
|
* @param path Mailbox path to upload the message to (unicode string). If value is an array then it is joined using current delimiter symbols. Namespace prefix is added automatically if required.
|
|
2884
|
-
* @param content RFC822 formatted email message
|
|
2921
|
+
* @param content RFC822 formatted email message, as a Buffer, Uint8Array or string
|
|
2885
2922
|
* @param flags an array of flags to be set for the uploaded message
|
|
2886
2923
|
* @param idate internal date to be set for the message
|
|
2887
2924
|
* @returns info about uploaded message
|
|
@@ -3152,7 +3189,21 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
3152
3189
|
if (!response || !response.list || !response.list.length) {
|
|
3153
3190
|
return false;
|
|
3154
3191
|
}
|
|
3155
|
-
|
|
3192
|
+
// Every FETCH row that arrived during the command is in the list, also unsolicited ones
|
|
3193
|
+
// for other messages or with only a flag change, and a server may split the answer for
|
|
3194
|
+
// one message over several rows. Taking the first row returned a flag update instead
|
|
3195
|
+
// of the requested data, which ended a download after its first chunk (issue #426).
|
|
3196
|
+
let rows = response.list;
|
|
3197
|
+
let requested = (0, tools_js_1.parseUintValue)(String(seq), tools_js_1.MAX_UINT32_DIGITS);
|
|
3198
|
+
// a range: the first message of the answer, as before
|
|
3199
|
+
let target = requested === false ? rows[0] : rows.find(row => (options && options.uid ? row.uid : row.seq) === requested);
|
|
3200
|
+
if (!target) {
|
|
3201
|
+
return false;
|
|
3202
|
+
}
|
|
3203
|
+
// rows of the same message, without the ones a malformed answer gives no usable
|
|
3204
|
+
// sequence number or another UID
|
|
3205
|
+
let { seq: targetSeq, uid: targetUid } = target;
|
|
3206
|
+
return targetSeq ? (0, tools_js_1.mergeFetchRows)(rows.filter(row => row.seq === targetSeq && (!row.uid || !targetUid || row.uid === targetUid))) : target;
|
|
3156
3207
|
}
|
|
3157
3208
|
/**
|
|
3158
3209
|
* Download either full rfc822 formatted message or a specific bodystructure part as a Stream.
|
|
@@ -3169,7 +3220,8 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
3169
3220
|
* // download body part nr '1.2' from latest message
|
|
3170
3221
|
* let download = await client.download('*', '1.2');
|
|
3171
3222
|
* if (download.content) {
|
|
3172
|
-
* download.
|
|
3223
|
+
* // pipeline() rejects when the download fails, a plain .pipe() would not report it
|
|
3224
|
+
* await stream.promises.pipeline(download.content, fs.createWriteStream(download.meta.filename));
|
|
3173
3225
|
* }
|
|
3174
3226
|
*/
|
|
3175
3227
|
async download(range, part, options) {
|
|
@@ -3506,9 +3558,7 @@ class ImapFlow extends node_events_1.EventEmitter {
|
|
|
3506
3558
|
const idx = this.locks.indexOf(lockEntry);
|
|
3507
3559
|
if (idx !== -1) {
|
|
3508
3560
|
this.locks.splice(idx, 1);
|
|
3509
|
-
let err =
|
|
3510
|
-
err.code = 'LockTimeout';
|
|
3511
|
-
err.lockId = lockEntry.lockId;
|
|
3561
|
+
let err = (0, errors_js_1.createImapError)('Timed out waiting for mailbox lock', 'LockTimeout', { lockId: lockEntry.lockId });
|
|
3512
3562
|
reject(err);
|
|
3513
3563
|
}
|
|
3514
3564
|
}, Number(lockOptions.acquireTimeout));
|
|
@@ -10,6 +10,7 @@ const node_net_1 = __importDefault(require("node:net"));
|
|
|
10
10
|
const node_tls_1 = __importDefault(require("node:tls"));
|
|
11
11
|
const connection_deadline_js_1 = require("./connection-deadline.js");
|
|
12
12
|
const tools_js_1 = require("./tools.js");
|
|
13
|
+
const errors_js_1 = require("./errors.js");
|
|
13
14
|
// Cap the CONNECT response buffered before the header terminator, so a proxy that never sends
|
|
14
15
|
// \r\n\r\n cannot grow memory without bound.
|
|
15
16
|
const MAX_RESPONSE_HEADER_BYTES = 64 * 1024;
|
|
@@ -33,11 +34,7 @@ const redactUrl = (proxyUrl) => {
|
|
|
33
34
|
}
|
|
34
35
|
return redacted.href;
|
|
35
36
|
};
|
|
36
|
-
const proxyError = (message, code) =>
|
|
37
|
-
let err = new Error(message);
|
|
38
|
-
err.code = code || 'ProxyError';
|
|
39
|
-
return err;
|
|
40
|
-
};
|
|
37
|
+
const proxyError = (message, code) => (0, errors_js_1.createImapError)(message, code || 'ProxyError');
|
|
41
38
|
// URL userinfo is percent-encoded, so it has to be decoded before it can be used as credentials.
|
|
42
39
|
// A password containing a bare '%' is not valid percent-encoding and makes decodeURIComponent
|
|
43
40
|
// throw, so such values are used as they came in rather than failing the connection.
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.searchCompiler = void 0;
|
|
5
5
|
const tools_js_1 = require("./tools.js");
|
|
6
|
+
const errors_js_1 = require("./errors.js");
|
|
6
7
|
// Matches any character outside the ASCII range
|
|
7
8
|
const UNICODE_PATTERN = /[^\x00-\x7F]/;
|
|
8
9
|
/**
|
|
@@ -104,9 +105,7 @@ let processDateField = (attributes, term, value) => {
|
|
|
104
105
|
* @param message - Error message
|
|
105
106
|
*/
|
|
106
107
|
let fail = (code, message) => {
|
|
107
|
-
|
|
108
|
-
error.code = code;
|
|
109
|
-
throw error;
|
|
108
|
+
throw (0, errors_js_1.createImapError)(message, code);
|
|
110
109
|
};
|
|
111
110
|
/**
|
|
112
111
|
* Checks whether any search value was compiled into a literal, which only
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Transform } from 'node:stream';
|
|
2
2
|
import type { ImapFlow } from './imap-flow.js';
|
|
3
|
-
import { type ConnectionErrorSite, type ImapFlowError } from './errors.js';
|
|
3
|
+
import { ImapFlowErrorCode, type ConnectionErrorSite, type ImapFlowError } from './errors.js';
|
|
4
4
|
import type { ImapAttributeList, ImapAttributeNode, ImapResponse } from './handler/types.js';
|
|
5
5
|
import type { FetchMessageObject, ListResponse, ListTreeResponse, MailboxObject, MessageEnvelopeObject, MessageStructureObject, ImapFlowEvents, StatusQuery } from './types.js';
|
|
6
6
|
export { AuthenticationFailure } from './errors.js';
|
|
@@ -33,7 +33,7 @@ export type CharsetDecoder = Transform & {
|
|
|
33
33
|
* @param meta - Fields to stamp on the error
|
|
34
34
|
* @returns The stamped error
|
|
35
35
|
*/
|
|
36
|
-
export declare function buildConnectionError(cid: string, code:
|
|
36
|
+
export declare function buildConnectionError(cid: string, code: ImapFlowErrorCode, message: string, meta?: ConnectionErrorSite | undefined): ImapFlowError;
|
|
37
37
|
/**
|
|
38
38
|
* Re-stamps an existing connection error for a different rejection site.
|
|
39
39
|
*
|
|
@@ -122,9 +122,12 @@ export declare function logConnectionError(connection: ImapFlow, msg: string, er
|
|
|
122
122
|
/**
|
|
123
123
|
* Whether a command failed because the server answered it with a tagged NO or BAD, as opposed
|
|
124
124
|
* to a lost connection, a timeout or a local failure that says nothing about the server's answer.
|
|
125
|
+
* A throttled command (ETHROTTLE, Microsoft 365 answers it with BAD) was not refused: the server
|
|
126
|
+
* asks to try again later, so a throttled login is not a rejected credential and a throttled
|
|
127
|
+
* IDLE does not mean the server lacks IDLE.
|
|
125
128
|
*
|
|
126
129
|
* @param err - The error the command failed with
|
|
127
|
-
* @returns True for a tagged NO or BAD
|
|
130
|
+
* @returns True for a tagged NO or BAD that is not throttling
|
|
128
131
|
*/
|
|
129
132
|
export declare function isServerRefusal(err: ImapFlowError | null | undefined): boolean;
|
|
130
133
|
/**
|
|
@@ -287,6 +290,16 @@ export declare function getColorFlags(color: string | null | undefined): {
|
|
|
287
290
|
add: string[];
|
|
288
291
|
remove: string[];
|
|
289
292
|
} | null;
|
|
293
|
+
/**
|
|
294
|
+
* Merges the FETCH rows a server sent for one message into one message object. A server may
|
|
295
|
+
* split the data items of a message over several FETCH responses, and may put an unsolicited
|
|
296
|
+
* one (a flag change made by another session) in between (RFC 9051 sections 7.5.2 and 5.2).
|
|
297
|
+
* Later rows win for single values, bodyParts, binaryParts and partialOrigins are combined.
|
|
298
|
+
*
|
|
299
|
+
* @param rows - Formatted rows of the same message, in the order they arrived
|
|
300
|
+
* @returns One message object holding the data of every row
|
|
301
|
+
*/
|
|
302
|
+
export declare function mergeFetchRows(rows: FetchMessageObject[]): FetchMessageObject;
|
|
290
303
|
/**
|
|
291
304
|
* Formats a raw untagged FETCH response into a structured message object.
|
|
292
305
|
*
|
|
@@ -423,6 +436,14 @@ export declare function isUnsafeKey(key: unknown): boolean;
|
|
|
423
436
|
* @returns The string values, in order, with unusable entries dropped.
|
|
424
437
|
*/
|
|
425
438
|
export declare function getStringList(list: unknown): string[];
|
|
439
|
+
/**
|
|
440
|
+
* Reads the text of a string value from a response. A server may send any string as a literal,
|
|
441
|
+
* which arrives as a Buffer and is decoded as UTF-8.
|
|
442
|
+
*
|
|
443
|
+
* @param attribute - Parsed attribute from a response
|
|
444
|
+
* @returns The string, or undefined when the attribute holds no string (NIL, a list)
|
|
445
|
+
*/
|
|
446
|
+
export declare function getStringValue(attribute: unknown): string | undefined;
|
|
426
447
|
/**
|
|
427
448
|
* Parses an untrusted decimal value from a server response into a BigInt.
|
|
428
449
|
*
|