@mesrai/cli 0.4.21
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/README.md +670 -0
- package/dist/agents/agent.interface.d.ts +41 -0
- package/dist/agents/agent.interface.d.ts.map +1 -0
- package/dist/agents/agent.interface.js +2 -0
- package/dist/agents/agent.interface.js.map +1 -0
- package/dist/agents/claude-code.agent.d.ts +14 -0
- package/dist/agents/claude-code.agent.d.ts.map +1 -0
- package/dist/agents/claude-code.agent.js +90 -0
- package/dist/agents/claude-code.agent.js.map +1 -0
- package/dist/agents/codex.agent.d.ts +14 -0
- package/dist/agents/codex.agent.d.ts.map +1 -0
- package/dist/agents/codex.agent.js +77 -0
- package/dist/agents/codex.agent.js.map +1 -0
- package/dist/agents/cursor.agent.d.ts +29 -0
- package/dist/agents/cursor.agent.d.ts.map +1 -0
- package/dist/agents/cursor.agent.js +85 -0
- package/dist/agents/cursor.agent.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +60 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth/index.d.ts +3 -0
- package/dist/commands/auth/index.d.ts.map +1 -0
- package/dist/commands/auth/index.js +37 -0
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/auth/login.d.ts +11 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +158 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +2 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +26 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/status.d.ts +2 -0
- package/dist/commands/auth/status.d.ts.map +1 -0
- package/dist/commands/auth/status.js +82 -0
- package/dist/commands/auth/status.js.map +1 -0
- package/dist/commands/auth/team-key.d.ts +5 -0
- package/dist/commands/auth/team-key.d.ts.map +1 -0
- package/dist/commands/auth/team-key.js +112 -0
- package/dist/commands/auth/team-key.js.map +1 -0
- package/dist/commands/auth/token.d.ts +2 -0
- package/dist/commands/auth/token.d.ts.map +1 -0
- package/dist/commands/auth/token.js +33 -0
- package/dist/commands/auth/token.js.map +1 -0
- package/dist/commands/config.d.ts +5 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +26 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/diff.d.ts +3 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +23 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/hook/index.d.ts +3 -0
- package/dist/commands/hook/index.d.ts.map +1 -0
- package/dist/commands/hook/index.js +24 -0
- package/dist/commands/hook/index.js.map +1 -0
- package/dist/commands/hook/install.d.ts +11 -0
- package/dist/commands/hook/install.d.ts.map +1 -0
- package/dist/commands/hook/install.js +149 -0
- package/dist/commands/hook/install.js.map +1 -0
- package/dist/commands/hook/status.d.ts +2 -0
- package/dist/commands/hook/status.d.ts.map +1 -0
- package/dist/commands/hook/status.js +36 -0
- package/dist/commands/hook/status.js.map +1 -0
- package/dist/commands/hook/uninstall.d.ts +5 -0
- package/dist/commands/hook/uninstall.d.ts.map +1 -0
- package/dist/commands/hook/uninstall.js +66 -0
- package/dist/commands/hook/uninstall.js.map +1 -0
- package/dist/commands/memory/capture.d.ts +8 -0
- package/dist/commands/memory/capture.d.ts.map +1 -0
- package/dist/commands/memory/capture.js +124 -0
- package/dist/commands/memory/capture.js.map +1 -0
- package/dist/commands/memory/disable.d.ts +5 -0
- package/dist/commands/memory/disable.d.ts.map +1 -0
- package/dist/commands/memory/disable.js +67 -0
- package/dist/commands/memory/disable.js.map +1 -0
- package/dist/commands/memory/enable.d.ts +7 -0
- package/dist/commands/memory/enable.d.ts.map +1 -0
- package/dist/commands/memory/enable.js +74 -0
- package/dist/commands/memory/enable.js.map +1 -0
- package/dist/commands/memory/hooks.d.ts +31 -0
- package/dist/commands/memory/hooks.d.ts.map +1 -0
- package/dist/commands/memory/hooks.js +283 -0
- package/dist/commands/memory/hooks.js.map +1 -0
- package/dist/commands/memory/index.d.ts +3 -0
- package/dist/commands/memory/index.d.ts.map +1 -0
- package/dist/commands/memory/index.js +36 -0
- package/dist/commands/memory/index.js.map +1 -0
- package/dist/commands/memory/session-hooks/claude-code.d.ts +2 -0
- package/dist/commands/memory/session-hooks/claude-code.d.ts.map +1 -0
- package/dist/commands/memory/session-hooks/claude-code.js +24 -0
- package/dist/commands/memory/session-hooks/claude-code.js.map +1 -0
- package/dist/commands/memory/session-hooks/codex.d.ts +2 -0
- package/dist/commands/memory/session-hooks/codex.d.ts.map +1 -0
- package/dist/commands/memory/session-hooks/codex.js +16 -0
- package/dist/commands/memory/session-hooks/codex.js.map +1 -0
- package/dist/commands/memory/session-hooks/cursor.d.ts +2 -0
- package/dist/commands/memory/session-hooks/cursor.d.ts.map +1 -0
- package/dist/commands/memory/session-hooks/cursor.js +20 -0
- package/dist/commands/memory/session-hooks/cursor.js.map +1 -0
- package/dist/commands/memory/session-hooks/index.d.ts +3 -0
- package/dist/commands/memory/session-hooks/index.d.ts.map +1 -0
- package/dist/commands/memory/session-hooks/index.js +21 -0
- package/dist/commands/memory/session-hooks/index.js.map +1 -0
- package/dist/commands/memory/session-hooks/shared.d.ts +7 -0
- package/dist/commands/memory/session-hooks/shared.d.ts.map +1 -0
- package/dist/commands/memory/session-hooks/shared.js +52 -0
- package/dist/commands/memory/session-hooks/shared.js.map +1 -0
- package/dist/commands/memory/session-hooks-install-codex.d.ts +19 -0
- package/dist/commands/memory/session-hooks-install-codex.d.ts.map +1 -0
- package/dist/commands/memory/session-hooks-install-codex.js +91 -0
- package/dist/commands/memory/session-hooks-install-codex.js.map +1 -0
- package/dist/commands/memory/session-hooks-install-cursor.d.ts +9 -0
- package/dist/commands/memory/session-hooks-install-cursor.d.ts.map +1 -0
- package/dist/commands/memory/session-hooks-install-cursor.js +119 -0
- package/dist/commands/memory/session-hooks-install-cursor.js.map +1 -0
- package/dist/commands/memory/session-hooks-install.d.ts +9 -0
- package/dist/commands/memory/session-hooks-install.d.ts.map +1 -0
- package/dist/commands/memory/session-hooks-install.js +173 -0
- package/dist/commands/memory/session-hooks-install.js.map +1 -0
- package/dist/commands/pr.d.ts +2 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +2 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/review.d.ts +2 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +2 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/rules.d.ts +31 -0
- package/dist/commands/rules.d.ts.map +1 -0
- package/dist/commands/rules.js +159 -0
- package/dist/commands/rules.js.map +1 -0
- package/dist/commands/schema.d.ts +3 -0
- package/dist/commands/schema.d.ts.map +1 -0
- package/dist/commands/schema.js +62 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/skills.d.ts +3 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +85 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +99 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/subscribe.d.ts +4 -0
- package/dist/commands/subscribe.d.ts.map +1 -0
- package/dist/commands/subscribe.js +25 -0
- package/dist/commands/subscribe.js.map +1 -0
- package/dist/commands/update.d.ts +10 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +112 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +6 -0
- package/dist/constants.js.map +1 -0
- package/dist/features/centralized-config/actions.d.ts +20 -0
- package/dist/features/centralized-config/actions.d.ts.map +1 -0
- package/dist/features/centralized-config/actions.js +114 -0
- package/dist/features/centralized-config/actions.js.map +1 -0
- package/dist/features/centralized-config/command.d.ts +4 -0
- package/dist/features/centralized-config/command.d.ts.map +1 -0
- package/dist/features/centralized-config/command.js +43 -0
- package/dist/features/centralized-config/command.js.map +1 -0
- package/dist/features/pr/command.d.ts +4 -0
- package/dist/features/pr/command.d.ts.map +1 -0
- package/dist/features/pr/command.js +222 -0
- package/dist/features/pr/command.js.map +1 -0
- package/dist/features/repo-config/actions.d.ts +33 -0
- package/dist/features/repo-config/actions.d.ts.map +1 -0
- package/dist/features/repo-config/actions.js +271 -0
- package/dist/features/repo-config/actions.js.map +1 -0
- package/dist/features/repo-config/command.d.ts +15 -0
- package/dist/features/repo-config/command.d.ts.map +1 -0
- package/dist/features/repo-config/command.js +135 -0
- package/dist/features/repo-config/command.js.map +1 -0
- package/dist/features/review/command.d.ts +4 -0
- package/dist/features/review/command.d.ts.map +1 -0
- package/dist/features/review/command.js +404 -0
- package/dist/features/review/command.js.map +1 -0
- package/dist/features/review/diff.d.ts +23 -0
- package/dist/features/review/diff.d.ts.map +1 -0
- package/dist/features/review/diff.js +47 -0
- package/dist/features/review/diff.js.map +1 -0
- package/dist/features/review/errors.d.ts +3 -0
- package/dist/features/review/errors.d.ts.map +1 -0
- package/dist/features/review/errors.js +26 -0
- package/dist/features/review/errors.js.map +1 -0
- package/dist/features/review/hunk-context.d.ts +25 -0
- package/dist/features/review/hunk-context.d.ts.map +1 -0
- package/dist/features/review/hunk-context.js +158 -0
- package/dist/features/review/hunk-context.js.map +1 -0
- package/dist/features/review/hunk-viewer.d.ts +25 -0
- package/dist/features/review/hunk-viewer.d.ts.map +1 -0
- package/dist/features/review/hunk-viewer.js +59 -0
- package/dist/features/review/hunk-viewer.js.map +1 -0
- package/dist/features/review/no-changes.d.ts +6 -0
- package/dist/features/review/no-changes.d.ts.map +1 -0
- package/dist/features/review/no-changes.js +31 -0
- package/dist/features/review/no-changes.js.map +1 -0
- package/dist/features/review/options.d.ts +7 -0
- package/dist/features/review/options.d.ts.map +1 -0
- package/dist/features/review/options.js +18 -0
- package/dist/features/review/options.js.map +1 -0
- package/dist/features/review/result.d.ts +40 -0
- package/dist/features/review/result.d.ts.map +1 -0
- package/dist/features/review/result.js +95 -0
- package/dist/features/review/result.js.map +1 -0
- package/dist/formatters/json.d.ts +7 -0
- package/dist/formatters/json.d.ts.map +1 -0
- package/dist/formatters/json.js +7 -0
- package/dist/formatters/json.js.map +1 -0
- package/dist/formatters/markdown.d.ts +7 -0
- package/dist/formatters/markdown.d.ts.map +1 -0
- package/dist/formatters/markdown.js +93 -0
- package/dist/formatters/markdown.js.map +1 -0
- package/dist/formatters/prompt.d.ts +12 -0
- package/dist/formatters/prompt.d.ts.map +1 -0
- package/dist/formatters/prompt.js +90 -0
- package/dist/formatters/prompt.js.map +1 -0
- package/dist/formatters/repo-config.d.ts +7 -0
- package/dist/formatters/repo-config.d.ts.map +1 -0
- package/dist/formatters/repo-config.js +99 -0
- package/dist/formatters/repo-config.js.map +1 -0
- package/dist/formatters/terminal.d.ts +7 -0
- package/dist/formatters/terminal.d.ts.map +1 -0
- package/dist/formatters/terminal.js +130 -0
- package/dist/formatters/terminal.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/services/api/api-core.d.ts +27 -0
- package/dist/services/api/api-core.d.ts.map +1 -0
- package/dist/services/api/api-core.js +451 -0
- package/dist/services/api/api-core.js.map +1 -0
- package/dist/services/api/api.interface.d.ts +101 -0
- package/dist/services/api/api.interface.d.ts.map +1 -0
- package/dist/services/api/api.interface.js +2 -0
- package/dist/services/api/api.interface.js.map +1 -0
- package/dist/services/api/api.real.d.ts +19 -0
- package/dist/services/api/api.real.d.ts.map +1 -0
- package/dist/services/api/api.real.js +20 -0
- package/dist/services/api/api.real.js.map +1 -0
- package/dist/services/api/auth.api.d.ts +17 -0
- package/dist/services/api/auth.api.d.ts.map +1 -0
- package/dist/services/api/auth.api.js +73 -0
- package/dist/services/api/auth.api.js.map +1 -0
- package/dist/services/api/cli-auth.api.d.ts +29 -0
- package/dist/services/api/cli-auth.api.d.ts.map +1 -0
- package/dist/services/api/cli-auth.api.js +23 -0
- package/dist/services/api/cli-auth.api.js.map +1 -0
- package/dist/services/api/config.api.d.ts +34 -0
- package/dist/services/api/config.api.d.ts.map +1 -0
- package/dist/services/api/config.api.js +108 -0
- package/dist/services/api/config.api.js.map +1 -0
- package/dist/services/api/index.d.ts +4 -0
- package/dist/services/api/index.d.ts.map +1 -0
- package/dist/services/api/index.js +3 -0
- package/dist/services/api/index.js.map +1 -0
- package/dist/services/api/memory.api.d.ts +10 -0
- package/dist/services/api/memory.api.d.ts.map +1 -0
- package/dist/services/api/memory.api.js +19 -0
- package/dist/services/api/memory.api.js.map +1 -0
- package/dist/services/api/review.api.d.ts +27 -0
- package/dist/services/api/review.api.d.ts.map +1 -0
- package/dist/services/api/review.api.js +140 -0
- package/dist/services/api/review.api.js.map +1 -0
- package/dist/services/api/rules.api.d.ts +13 -0
- package/dist/services/api/rules.api.d.ts.map +1 -0
- package/dist/services/api/rules.api.js +41 -0
- package/dist/services/api/rules.api.js.map +1 -0
- package/dist/services/api/sessions.api.d.ts +6 -0
- package/dist/services/api/sessions.api.d.ts.map +1 -0
- package/dist/services/api/sessions.api.js +129 -0
- package/dist/services/api/sessions.api.js.map +1 -0
- package/dist/services/api/trial.api.d.ts +10 -0
- package/dist/services/api/trial.api.d.ts.map +1 -0
- package/dist/services/api/trial.api.js +11 -0
- package/dist/services/api/trial.api.js.map +1 -0
- package/dist/services/auth.service.d.ts +29 -0
- package/dist/services/auth.service.d.ts.map +1 -0
- package/dist/services/auth.service.js +190 -0
- package/dist/services/auth.service.js.map +1 -0
- package/dist/services/browser-login.service.d.ts +23 -0
- package/dist/services/browser-login.service.d.ts.map +1 -0
- package/dist/services/browser-login.service.js +187 -0
- package/dist/services/browser-login.service.js.map +1 -0
- package/dist/services/centralized-config.service.d.ts +24 -0
- package/dist/services/centralized-config.service.d.ts.map +1 -0
- package/dist/services/centralized-config.service.js +112 -0
- package/dist/services/centralized-config.service.js.map +1 -0
- package/dist/services/context.service.d.ts +25 -0
- package/dist/services/context.service.d.ts.map +1 -0
- package/dist/services/context.service.js +134 -0
- package/dist/services/context.service.js.map +1 -0
- package/dist/services/device-login.service.d.ts +23 -0
- package/dist/services/device-login.service.d.ts.map +1 -0
- package/dist/services/device-login.service.js +70 -0
- package/dist/services/device-login.service.js.map +1 -0
- package/dist/services/fix.service.d.ts +31 -0
- package/dist/services/fix.service.d.ts.map +1 -0
- package/dist/services/fix.service.js +121 -0
- package/dist/services/fix.service.js.map +1 -0
- package/dist/services/git-hooks.service.d.ts +20 -0
- package/dist/services/git-hooks.service.d.ts.map +1 -0
- package/dist/services/git-hooks.service.js +126 -0
- package/dist/services/git-hooks.service.js.map +1 -0
- package/dist/services/git.service.d.ts +44 -0
- package/dist/services/git.service.d.ts.map +1 -0
- package/dist/services/git.service.js +321 -0
- package/dist/services/git.service.js.map +1 -0
- package/dist/services/hook-logger.service.d.ts +18 -0
- package/dist/services/hook-logger.service.d.ts.map +1 -0
- package/dist/services/hook-logger.service.js +48 -0
- package/dist/services/hook-logger.service.js.map +1 -0
- package/dist/services/lifecycle-events.d.ts +49 -0
- package/dist/services/lifecycle-events.d.ts.map +1 -0
- package/dist/services/lifecycle-events.js +86 -0
- package/dist/services/lifecycle-events.js.map +1 -0
- package/dist/services/lifecycle-git-context.d.ts +15 -0
- package/dist/services/lifecycle-git-context.d.ts.map +1 -0
- package/dist/services/lifecycle-git-context.js +23 -0
- package/dist/services/lifecycle-git-context.js.map +1 -0
- package/dist/services/lifecycle-local-turn-state.d.ts +14 -0
- package/dist/services/lifecycle-local-turn-state.d.ts.map +1 -0
- package/dist/services/lifecycle-local-turn-state.js +18 -0
- package/dist/services/lifecycle-local-turn-state.js.map +1 -0
- package/dist/services/lifecycle-transcript.d.ts +25 -0
- package/dist/services/lifecycle-transcript.d.ts.map +1 -0
- package/dist/services/lifecycle-transcript.js +29 -0
- package/dist/services/lifecycle-transcript.js.map +1 -0
- package/dist/services/lifecycle-turn-data.d.ts +11 -0
- package/dist/services/lifecycle-turn-data.d.ts.map +1 -0
- package/dist/services/lifecycle-turn-data.js +23 -0
- package/dist/services/lifecycle-turn-data.js.map +1 -0
- package/dist/services/lifecycle.service.d.ts +14 -0
- package/dist/services/lifecycle.service.d.ts.map +1 -0
- package/dist/services/lifecycle.service.js +276 -0
- package/dist/services/lifecycle.service.js.map +1 -0
- package/dist/services/repo-config.service.d.ts +22 -0
- package/dist/services/repo-config.service.d.ts.map +1 -0
- package/dist/services/repo-config.service.js +81 -0
- package/dist/services/repo-config.service.js.map +1 -0
- package/dist/services/repo-settings-wizard.service.d.ts +19 -0
- package/dist/services/repo-settings-wizard.service.d.ts.map +1 -0
- package/dist/services/repo-settings-wizard.service.js +260 -0
- package/dist/services/repo-settings-wizard.service.js.map +1 -0
- package/dist/services/repo-settings.service.d.ts +30 -0
- package/dist/services/repo-settings.service.d.ts.map +1 -0
- package/dist/services/repo-settings.service.js +99 -0
- package/dist/services/repo-settings.service.js.map +1 -0
- package/dist/services/review-auth-fallback.d.ts +7 -0
- package/dist/services/review-auth-fallback.d.ts.map +1 -0
- package/dist/services/review-auth-fallback.js +25 -0
- package/dist/services/review-auth-fallback.js.map +1 -0
- package/dist/services/review-config-builder.d.ts +19 -0
- package/dist/services/review-config-builder.d.ts.map +1 -0
- package/dist/services/review-config-builder.js +29 -0
- package/dist/services/review-config-builder.js.map +1 -0
- package/dist/services/review-file-filter.d.ts +3 -0
- package/dist/services/review-file-filter.d.ts.map +1 -0
- package/dist/services/review-file-filter.js +35 -0
- package/dist/services/review-file-filter.js.map +1 -0
- package/dist/services/review-normalizer.d.ts +6 -0
- package/dist/services/review-normalizer.d.ts.map +1 -0
- package/dist/services/review-normalizer.js +62 -0
- package/dist/services/review-normalizer.js.map +1 -0
- package/dist/services/review-verbose.d.ts +28 -0
- package/dist/services/review-verbose.d.ts.map +1 -0
- package/dist/services/review-verbose.js +52 -0
- package/dist/services/review-verbose.js.map +1 -0
- package/dist/services/review.service.d.ts +38 -0
- package/dist/services/review.service.d.ts.map +1 -0
- package/dist/services/review.service.js +152 -0
- package/dist/services/review.service.js.map +1 -0
- package/dist/services/rules.service.d.ts +16 -0
- package/dist/services/rules.service.d.ts.map +1 -0
- package/dist/services/rules.service.js +98 -0
- package/dist/services/rules.service.js.map +1 -0
- package/dist/services/session-local.service.d.ts +25 -0
- package/dist/services/session-local.service.d.ts.map +1 -0
- package/dist/services/session-local.service.js +79 -0
- package/dist/services/session-local.service.js.map +1 -0
- package/dist/services/transcript-parser.service.d.ts +10 -0
- package/dist/services/transcript-parser.service.d.ts.map +1 -0
- package/dist/services/transcript-parser.service.js +127 -0
- package/dist/services/transcript-parser.service.js.map +1 -0
- package/dist/services/transcript.service.d.ts +33 -0
- package/dist/services/transcript.service.d.ts.map +1 -0
- package/dist/services/transcript.service.js +264 -0
- package/dist/services/transcript.service.js.map +1 -0
- package/dist/types/auth.d.ts +18 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +2 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/cli.d.ts +41 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +2 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/command-output.d.ts +29 -0
- package/dist/types/command-output.d.ts.map +1 -0
- package/dist/types/command-output.js +2 -0
- package/dist/types/command-output.js.map +1 -0
- package/dist/types/config.d.ts +68 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/errors.d.ts +8 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +15 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/memory.d.ts +39 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +2 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/types/repo-config.d.ts +24 -0
- package/dist/types/repo-config.d.ts.map +1 -0
- package/dist/types/repo-config.js +2 -0
- package/dist/types/repo-config.js.map +1 -0
- package/dist/types/review.d.ts +112 -0
- package/dist/types/review.d.ts.map +1 -0
- package/dist/types/review.js +2 -0
- package/dist/types/review.js.map +1 -0
- package/dist/types/rules.d.ts +42 -0
- package/dist/types/rules.d.ts.map +1 -0
- package/dist/types/rules.js +7 -0
- package/dist/types/rules.js.map +1 -0
- package/dist/types/session-events.d.ts +48 -0
- package/dist/types/session-events.d.ts.map +1 -0
- package/dist/types/session-events.js +2 -0
- package/dist/types/session-events.js.map +1 -0
- package/dist/types/session.d.ts +150 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/session.js +9 -0
- package/dist/types/session.js.map +1 -0
- package/dist/types/trial.d.ts +10 -0
- package/dist/types/trial.d.ts.map +1 -0
- package/dist/types/trial.js +2 -0
- package/dist/types/trial.js.map +1 -0
- package/dist/ui/interactive-formatters.d.ts +6 -0
- package/dist/ui/interactive-formatters.d.ts.map +1 -0
- package/dist/ui/interactive-formatters.js +61 -0
- package/dist/ui/interactive-formatters.js.map +1 -0
- package/dist/ui/interactive-helpers.d.ts +20 -0
- package/dist/ui/interactive-helpers.d.ts.map +1 -0
- package/dist/ui/interactive-helpers.js +82 -0
- package/dist/ui/interactive-helpers.js.map +1 -0
- package/dist/ui/interactive-renderers.d.ts +6 -0
- package/dist/ui/interactive-renderers.d.ts.map +1 -0
- package/dist/ui/interactive-renderers.js +82 -0
- package/dist/ui/interactive-renderers.js.map +1 -0
- package/dist/ui/interactive.d.ts +25 -0
- package/dist/ui/interactive.d.ts.map +1 -0
- package/dist/ui/interactive.js +228 -0
- package/dist/ui/interactive.js.map +1 -0
- package/dist/utils/auth-mode.d.ts +7 -0
- package/dist/utils/auth-mode.d.ts.map +1 -0
- package/dist/utils/auth-mode.js +42 -0
- package/dist/utils/auth-mode.js.map +1 -0
- package/dist/utils/banner.d.ts +2 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +180 -0
- package/dist/utils/banner.js.map +1 -0
- package/dist/utils/cli-exit.d.ts +13 -0
- package/dist/utils/cli-exit.d.ts.map +1 -0
- package/dist/utils/cli-exit.js +29 -0
- package/dist/utils/cli-exit.js.map +1 -0
- package/dist/utils/clipboard.d.ts +2 -0
- package/dist/utils/clipboard.d.ts.map +1 -0
- package/dist/utils/clipboard.js +11 -0
- package/dist/utils/clipboard.js.map +1 -0
- package/dist/utils/command-context.d.ts +12 -0
- package/dist/utils/command-context.d.ts.map +1 -0
- package/dist/utils/command-context.js +15 -0
- package/dist/utils/command-context.js.map +1 -0
- package/dist/utils/command-errors.d.ts +12 -0
- package/dist/utils/command-errors.d.ts.map +1 -0
- package/dist/utils/command-errors.js +112 -0
- package/dist/utils/command-errors.js.map +1 -0
- package/dist/utils/command-output.d.ts +5 -0
- package/dist/utils/command-output.d.ts.map +1 -0
- package/dist/utils/command-output.js +46 -0
- package/dist/utils/command-output.js.map +1 -0
- package/dist/utils/command-schema.d.ts +29 -0
- package/dist/utils/command-schema.d.ts.map +1 -0
- package/dist/utils/command-schema.js +74 -0
- package/dist/utils/command-schema.js.map +1 -0
- package/dist/utils/commander-errors.d.ts +8 -0
- package/dist/utils/commander-errors.d.ts.map +1 -0
- package/dist/utils/commander-errors.js +79 -0
- package/dist/utils/commander-errors.js.map +1 -0
- package/dist/utils/commander-setup.d.ts +3 -0
- package/dist/utils/commander-setup.d.ts.map +1 -0
- package/dist/utils/commander-setup.js +10 -0
- package/dist/utils/commander-setup.js.map +1 -0
- package/dist/utils/config.d.ts +13 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +71 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/credentials.d.ts +6 -0
- package/dist/utils/credentials.d.ts.map +1 -0
- package/dist/utils/credentials.js +64 -0
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/device.d.ts +7 -0
- package/dist/utils/device.d.ts.map +1 -0
- package/dist/utils/device.js +133 -0
- package/dist/utils/device.js.map +1 -0
- package/dist/utils/field-mask.d.ts +2 -0
- package/dist/utils/field-mask.d.ts.map +1 -0
- package/dist/utils/field-mask.js +93 -0
- package/dist/utils/field-mask.js.map +1 -0
- package/dist/utils/git-diff.d.ts +5 -0
- package/dist/utils/git-diff.d.ts.map +1 -0
- package/dist/utils/git-diff.js +14 -0
- package/dist/utils/git-diff.js.map +1 -0
- package/dist/utils/git-file-reader.d.ts +22 -0
- package/dist/utils/git-file-reader.d.ts.map +1 -0
- package/dist/utils/git-file-reader.js +45 -0
- package/dist/utils/git-file-reader.js.map +1 -0
- package/dist/utils/git-file-selection.d.ts +14 -0
- package/dist/utils/git-file-selection.d.ts.map +1 -0
- package/dist/utils/git-file-selection.js +20 -0
- package/dist/utils/git-file-selection.js.map +1 -0
- package/dist/utils/git-file-targets.d.ts +4 -0
- package/dist/utils/git-file-targets.d.ts.map +1 -0
- package/dist/utils/git-file-targets.js +11 -0
- package/dist/utils/git-file-targets.js.map +1 -0
- package/dist/utils/git-remote.d.ts +7 -0
- package/dist/utils/git-remote.d.ts.map +1 -0
- package/dist/utils/git-remote.js +94 -0
- package/dist/utils/git-remote.js.map +1 -0
- package/dist/utils/git-status.d.ts +7 -0
- package/dist/utils/git-status.d.ts.map +1 -0
- package/dist/utils/git-status.js +36 -0
- package/dist/utils/git-status.js.map +1 -0
- package/dist/utils/hunk.d.ts +15 -0
- package/dist/utils/hunk.d.ts.map +1 -0
- package/dist/utils/hunk.js +44 -0
- package/dist/utils/hunk.js.map +1 -0
- package/dist/utils/input-validation.d.ts +11 -0
- package/dist/utils/input-validation.d.ts.map +1 -0
- package/dist/utils/input-validation.js +73 -0
- package/dist/utils/input-validation.js.map +1 -0
- package/dist/utils/install-instructions.d.ts +6 -0
- package/dist/utils/install-instructions.d.ts.map +1 -0
- package/dist/utils/install-instructions.js +18 -0
- package/dist/utils/install-instructions.js.map +1 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +48 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/rate-limit.d.ts +5 -0
- package/dist/utils/rate-limit.d.ts.map +1 -0
- package/dist/utils/rate-limit.js +56 -0
- package/dist/utils/rate-limit.js.map +1 -0
- package/dist/utils/recent-activity.d.ts +9 -0
- package/dist/utils/recent-activity.d.ts.map +1 -0
- package/dist/utils/recent-activity.js +139 -0
- package/dist/utils/recent-activity.js.map +1 -0
- package/dist/utils/repo-settings-dashboard.d.ts +6 -0
- package/dist/utils/repo-settings-dashboard.d.ts.map +1 -0
- package/dist/utils/repo-settings-dashboard.js +36 -0
- package/dist/utils/repo-settings-dashboard.js.map +1 -0
- package/dist/utils/repo-settings-patterns.d.ts +7 -0
- package/dist/utils/repo-settings-patterns.d.ts.map +1 -0
- package/dist/utils/repo-settings-patterns.js +66 -0
- package/dist/utils/repo-settings-patterns.js.map +1 -0
- package/dist/utils/repo-settings-schema.d.ts +6 -0
- package/dist/utils/repo-settings-schema.d.ts.map +1 -0
- package/dist/utils/repo-settings-schema.js +70 -0
- package/dist/utils/repo-settings-schema.js.map +1 -0
- package/dist/utils/review-output.d.ts +4 -0
- package/dist/utils/review-output.d.ts.map +1 -0
- package/dist/utils/review-output.js +18 -0
- package/dist/utils/review-output.js.map +1 -0
- package/dist/utils/skills-sync-manifest.d.ts +5 -0
- package/dist/utils/skills-sync-manifest.d.ts.map +1 -0
- package/dist/utils/skills-sync-manifest.js +39 -0
- package/dist/utils/skills-sync-manifest.js.map +1 -0
- package/dist/utils/skills-sync-paths.d.ts +5 -0
- package/dist/utils/skills-sync-paths.d.ts.map +1 -0
- package/dist/utils/skills-sync-paths.js +60 -0
- package/dist/utils/skills-sync-paths.js.map +1 -0
- package/dist/utils/skills-sync-targets.d.ts +3 -0
- package/dist/utils/skills-sync-targets.d.ts.map +1 -0
- package/dist/utils/skills-sync-targets.js +218 -0
- package/dist/utils/skills-sync-targets.js.map +1 -0
- package/dist/utils/skills-sync.d.ts +39 -0
- package/dist/utils/skills-sync.d.ts.map +1 -0
- package/dist/utils/skills-sync.js +200 -0
- package/dist/utils/skills-sync.js.map +1 -0
- package/dist/utils/skills.d.ts +13 -0
- package/dist/utils/skills.d.ts.map +1 -0
- package/dist/utils/skills.js +117 -0
- package/dist/utils/skills.js.map +1 -0
- package/dist/utils/stream-input.d.ts +13 -0
- package/dist/utils/stream-input.d.ts.map +1 -0
- package/dist/utils/stream-input.js +36 -0
- package/dist/utils/stream-input.js.map +1 -0
- package/dist/utils/team-key-auth.d.ts +5 -0
- package/dist/utils/team-key-auth.d.ts.map +1 -0
- package/dist/utils/team-key-auth.js +14 -0
- package/dist/utils/team-key-auth.js.map +1 -0
- package/dist/utils/update-check.d.ts +2 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +30 -0
- package/dist/utils/update-check.js.map +1 -0
- package/package.json +90 -0
- package/skills/README.md +64 -0
- package/skills/hunk-review/SKILL.md +154 -0
- package/skills/mesrai-business-rules-validation/SKILL.md +65 -0
- package/skills/mesrai-centralized-config/SKILL.md +102 -0
- package/skills/mesrai-mesrai-rules/SKILL.md +103 -0
- package/skills/mesrai-mesrai-rules/instructions/create-mesrai-rule.md +56 -0
- package/skills/mesrai-mesrai-rules/instructions/update-mesrai-rule.md +63 -0
- package/skills/mesrai-mesrai-rules/instructions/view-mesrai-rules.md +65 -0
- package/skills/mesrai-mesrai-rules/rules/create-mesrai-rule.md +48 -0
- package/skills/mesrai-mesrai-rules/rules/update-mesrai-rule.md +55 -0
- package/skills/mesrai-mesrai-rules/rules/view-mesrai-rules.md +56 -0
- package/skills/mesrai-pr-suggestions-resolver/SKILL.md +61 -0
- package/skills/mesrai-review/SKILL.md +53 -0
- package/skills/mesrai-review-dev/SKILL.md +55 -0
- package/skills/mesrai-review-dev/scripts/run-local-cli.sh +49 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.api.d.ts","sourceRoot":"","sources":["../../../src/services/api/sessions.api.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA0GvD,qBAAa,eAAgB,YAAW,YAAY;IAC1C,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA0C3E"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { request } from './api.real.js';
|
|
4
|
+
import { ApiError } from '../../types/errors.js';
|
|
5
|
+
const PENDING_FILE = '.mesrai/pending-events.jsonl';
|
|
6
|
+
const MAX_BUFFER_LINES = 1000;
|
|
7
|
+
const ENDPOINT = '/cli/sessions/events';
|
|
8
|
+
async function getAuthToken() {
|
|
9
|
+
try {
|
|
10
|
+
const { authService } = await import('../auth.service.js');
|
|
11
|
+
return await authService.getValidToken();
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function buildHeaders(token) {
|
|
18
|
+
const isTeamKey = token.startsWith('mesrai_');
|
|
19
|
+
return isTeamKey
|
|
20
|
+
? { 'X-Team-Key': token }
|
|
21
|
+
: { Authorization: `Bearer ${token}` };
|
|
22
|
+
}
|
|
23
|
+
async function pendingPath(repoRoot) {
|
|
24
|
+
return path.join(repoRoot, PENDING_FILE);
|
|
25
|
+
}
|
|
26
|
+
async function readPending(repoRoot) {
|
|
27
|
+
const filePath = await pendingPath(repoRoot);
|
|
28
|
+
try {
|
|
29
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
30
|
+
return content.split('\n').filter(Boolean);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function writePending(repoRoot, lines) {
|
|
37
|
+
const filePath = await pendingPath(repoRoot);
|
|
38
|
+
const dir = path.dirname(filePath);
|
|
39
|
+
await fs.mkdir(dir, { recursive: true });
|
|
40
|
+
// Truncate old events if buffer exceeds limit
|
|
41
|
+
const truncated = lines.length > MAX_BUFFER_LINES
|
|
42
|
+
? lines.slice(lines.length - MAX_BUFFER_LINES)
|
|
43
|
+
: lines;
|
|
44
|
+
await fs.writeFile(filePath, truncated.join('\n') + '\n', 'utf-8');
|
|
45
|
+
}
|
|
46
|
+
async function appendPending(repoRoot, event) {
|
|
47
|
+
const filePath = await pendingPath(repoRoot);
|
|
48
|
+
const dir = path.dirname(filePath);
|
|
49
|
+
await fs.mkdir(dir, { recursive: true });
|
|
50
|
+
await fs.appendFile(filePath, `${JSON.stringify(event)}\n`, 'utf-8');
|
|
51
|
+
}
|
|
52
|
+
async function postEvent(event, token) {
|
|
53
|
+
await request(ENDPOINT, {
|
|
54
|
+
method: 'POST',
|
|
55
|
+
headers: buildHeaders(token),
|
|
56
|
+
body: JSON.stringify(event),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async function flushPending(repoRoot, token) {
|
|
60
|
+
const lines = await readPending(repoRoot);
|
|
61
|
+
if (lines.length === 0) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const failed = [];
|
|
65
|
+
for (let i = 0; i < lines.length; i++) {
|
|
66
|
+
const line = lines[i];
|
|
67
|
+
try {
|
|
68
|
+
const event = JSON.parse(line);
|
|
69
|
+
await postEvent(event, token);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (error instanceof ApiError &&
|
|
73
|
+
error.statusCode < 500 &&
|
|
74
|
+
error.statusCode !== 429) {
|
|
75
|
+
// 4xx (except 429) — discard, retry won't help
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
// Network or 5xx/429 — API likely unreachable. Bail out and
|
|
79
|
+
// keep this line plus all remaining for the next flush, so we
|
|
80
|
+
// don't sit here for hours hitting the same dead endpoint.
|
|
81
|
+
failed.push(...lines.slice(i));
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (failed.length > 0) {
|
|
86
|
+
await writePending(repoRoot, failed);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Clean up file
|
|
90
|
+
const filePath = await pendingPath(repoRoot);
|
|
91
|
+
await fs.unlink(filePath).catch(() => { });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export class RealSessionsApi {
|
|
95
|
+
async sendEvent(event, repoRoot) {
|
|
96
|
+
const token = await getAuthToken();
|
|
97
|
+
if (!token) {
|
|
98
|
+
if (process.env.MESRAI_VERBOSE) {
|
|
99
|
+
console.log('[sessions] No auth token, skipping event:', event.type);
|
|
100
|
+
}
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// Try to flush pending events first
|
|
104
|
+
try {
|
|
105
|
+
await flushPending(repoRoot, token);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Non-blocking — continue with current event
|
|
109
|
+
}
|
|
110
|
+
// Send current event
|
|
111
|
+
try {
|
|
112
|
+
await postEvent(event, token);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
if (error instanceof ApiError &&
|
|
116
|
+
error.statusCode < 500 &&
|
|
117
|
+
error.statusCode !== 429) {
|
|
118
|
+
// 4xx — discard
|
|
119
|
+
if (process.env.MESRAI_VERBOSE) {
|
|
120
|
+
console.error('[sessions] Discarding event due to client error:', error.statusCode);
|
|
121
|
+
}
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// Network or retryable — buffer locally
|
|
125
|
+
await appendPending(repoRoot, event).catch(() => { });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=sessions.api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.api.js","sourceRoot":"","sources":["../../../src/services/api/sessions.api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TrialStatus } from '../../types/trial.js';
|
|
2
|
+
import type { ITrialApi } from './api.interface.js';
|
|
3
|
+
type RequestWithRetry = <T>(endpoint: string, options?: RequestInit) => Promise<T>;
|
|
4
|
+
export declare class RealTrialApi implements ITrialApi {
|
|
5
|
+
private readonly requester;
|
|
6
|
+
constructor(requester?: RequestWithRetry);
|
|
7
|
+
getStatus(fingerprint: string): Promise<TrialStatus>;
|
|
8
|
+
}
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=trial.api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trial.api.d.ts","sourceRoot":"","sources":["../../../src/services/api/trial.api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,KAAK,gBAAgB,GAAG,CAAC,CAAC,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,WAAW,KACpB,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhB,qBAAa,YAAa,YAAW,SAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,GAAE,gBAAmC;IAErE,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAK7D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { requestWithRetry } from './api-core.js';
|
|
2
|
+
export class RealTrialApi {
|
|
3
|
+
requester;
|
|
4
|
+
constructor(requester = requestWithRetry) {
|
|
5
|
+
this.requester = requester;
|
|
6
|
+
}
|
|
7
|
+
async getStatus(fingerprint) {
|
|
8
|
+
return this.requester(`/cli/trial/status?fingerprint=${fingerprint}`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=trial.api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trial.api.js","sourceRoot":"","sources":["../../../src/services/api/trial.api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAOjD,MAAM,OAAO,YAAY;IACQ;IAA7B,YAA6B,YAA8B,gBAAgB;QAA9C,cAAS,GAAT,SAAS,CAAqC;IAAG,CAAC;IAE/E,KAAK,CAAC,SAAS,CAAC,WAAmB;QAC/B,OAAO,IAAI,CAAC,SAAS,CACjB,iCAAiC,WAAW,EAAE,CACjD,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { StoredCredentials, UserInfo } from '../types/auth.js';
|
|
2
|
+
import { type DeviceLoginPrompt } from './device-login.service.js';
|
|
3
|
+
declare class AuthService {
|
|
4
|
+
private cachedCredentials;
|
|
5
|
+
private refreshInFlight;
|
|
6
|
+
private getEnvAuthToken;
|
|
7
|
+
login(email: string, password: string): Promise<void>;
|
|
8
|
+
loginViaBrowser({ onOpenUrl, }?: {
|
|
9
|
+
onOpenUrl?: (url: string) => void;
|
|
10
|
+
}): Promise<UserInfo>;
|
|
11
|
+
loginViaDeviceCode({ onPrompt, }: {
|
|
12
|
+
onPrompt: (prompt: DeviceLoginPrompt) => void | Promise<void>;
|
|
13
|
+
}): Promise<UserInfo>;
|
|
14
|
+
private buildAuthResponse;
|
|
15
|
+
logout(): Promise<void>;
|
|
16
|
+
isAuthenticated(): Promise<boolean>;
|
|
17
|
+
getCredentials(): Promise<StoredCredentials | null>;
|
|
18
|
+
getValidToken(): Promise<string>;
|
|
19
|
+
generateCIToken(): Promise<string>;
|
|
20
|
+
verifyToken(): Promise<{
|
|
21
|
+
valid: boolean;
|
|
22
|
+
user?: any;
|
|
23
|
+
}>;
|
|
24
|
+
private storeAuthResponse;
|
|
25
|
+
private refreshTokenOrFallback;
|
|
26
|
+
}
|
|
27
|
+
export { AuthService };
|
|
28
|
+
export declare const authService: AuthService;
|
|
29
|
+
//# sourceMappingURL=auth.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAgB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGlF,OAAO,EAEH,KAAK,iBAAiB,EACzB,MAAM,2BAA2B,CAAC;AAInC,cAAM,WAAW;IACb,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,eAAe,CAAgC;IAEvD,OAAO,CAAC,eAAe;IAcjB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD,eAAe,CAAC,EAClB,SAAS,GACZ,GAAE;QACC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;KAChC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAYpB,kBAAkB,CAAC,EACrB,QAAQ,GACX,EAAE;QACC,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACjE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAYrB,OAAO,CAAC,iBAAiB;IAkBnB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAevB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAcnC,cAAc,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IASnD,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IA6BhC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAKlC,WAAW,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;YAU9C,iBAAiB;YAYjB,sBAAsB;CA+BvC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { api } from './api/index.js';
|
|
2
|
+
import { loadCredentials, saveCredentials, clearCredentials, } from '../utils/credentials.js';
|
|
3
|
+
import { loadConfig, clearConfig } from '../utils/config.js';
|
|
4
|
+
import { AuthError } from '../types/errors.js';
|
|
5
|
+
import { loginViaBrowser } from './browser-login.service.js';
|
|
6
|
+
import { loginViaDeviceCode, } from './device-login.service.js';
|
|
7
|
+
const TOKEN_REFRESH_BUFFER_MS = 5 * 60 * 1000;
|
|
8
|
+
class AuthService {
|
|
9
|
+
cachedCredentials = null;
|
|
10
|
+
refreshInFlight = null;
|
|
11
|
+
getEnvAuthToken() {
|
|
12
|
+
const token = process.env.MESRAI_TOKEN?.trim();
|
|
13
|
+
if (token) {
|
|
14
|
+
return token;
|
|
15
|
+
}
|
|
16
|
+
const teamKey = process.env.MESRAI_TEAM_KEY?.trim();
|
|
17
|
+
if (teamKey) {
|
|
18
|
+
return teamKey;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
async login(email, password) {
|
|
23
|
+
const response = await api.auth.login(email, password);
|
|
24
|
+
await this.storeAuthResponse(response);
|
|
25
|
+
// Successful login switches auth mode to user credentials.
|
|
26
|
+
try {
|
|
27
|
+
await clearConfig();
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Best effort cleanup.
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async loginViaBrowser({ onOpenUrl, } = {}) {
|
|
34
|
+
const result = await loginViaBrowser({ onOpenUrl });
|
|
35
|
+
const response = this.buildAuthResponse(result);
|
|
36
|
+
await this.storeAuthResponse(response);
|
|
37
|
+
try {
|
|
38
|
+
await clearConfig();
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Best effort cleanup.
|
|
42
|
+
}
|
|
43
|
+
return response.user;
|
|
44
|
+
}
|
|
45
|
+
async loginViaDeviceCode({ onPrompt, }) {
|
|
46
|
+
const result = await loginViaDeviceCode({ onPrompt });
|
|
47
|
+
const response = this.buildAuthResponse(result);
|
|
48
|
+
await this.storeAuthResponse(response);
|
|
49
|
+
try {
|
|
50
|
+
await clearConfig();
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// Best effort cleanup.
|
|
54
|
+
}
|
|
55
|
+
return response.user;
|
|
56
|
+
}
|
|
57
|
+
buildAuthResponse(input) {
|
|
58
|
+
const decoded = decodeJwtClaims(input.accessToken);
|
|
59
|
+
return {
|
|
60
|
+
accessToken: input.accessToken,
|
|
61
|
+
refreshToken: input.refreshToken,
|
|
62
|
+
expiresIn: decoded.expiresIn ?? 3600,
|
|
63
|
+
user: {
|
|
64
|
+
id: decoded.sub ?? 'unknown',
|
|
65
|
+
email: input.userEmail ?? decoded.email ?? 'unknown',
|
|
66
|
+
orgs: decoded.organizationId ? [decoded.organizationId] : [],
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
async logout() {
|
|
71
|
+
const credentials = await this.getCredentials();
|
|
72
|
+
if (credentials) {
|
|
73
|
+
try {
|
|
74
|
+
await api.auth.logout(credentials.accessToken);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Ignore logout errors
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
await Promise.all([clearCredentials(), clearConfig()]);
|
|
81
|
+
this.cachedCredentials = null;
|
|
82
|
+
}
|
|
83
|
+
async isAuthenticated() {
|
|
84
|
+
if (this.getEnvAuthToken()) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
const credentials = await this.getCredentials();
|
|
88
|
+
if (credentials !== null) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
const config = await loadConfig();
|
|
92
|
+
return !!config?.teamKey;
|
|
93
|
+
}
|
|
94
|
+
async getCredentials() {
|
|
95
|
+
if (this.cachedCredentials) {
|
|
96
|
+
return this.cachedCredentials;
|
|
97
|
+
}
|
|
98
|
+
this.cachedCredentials = await loadCredentials();
|
|
99
|
+
return this.cachedCredentials;
|
|
100
|
+
}
|
|
101
|
+
async getValidToken() {
|
|
102
|
+
const envToken = this.getEnvAuthToken();
|
|
103
|
+
if (envToken) {
|
|
104
|
+
return envToken;
|
|
105
|
+
}
|
|
106
|
+
const credentials = await this.getCredentials();
|
|
107
|
+
if (credentials) {
|
|
108
|
+
const isExpired = Date.now() > credentials.expiresAt - TOKEN_REFRESH_BUFFER_MS;
|
|
109
|
+
if (isExpired) {
|
|
110
|
+
return this.refreshTokenOrFallback(credentials.refreshToken);
|
|
111
|
+
}
|
|
112
|
+
return credentials.accessToken;
|
|
113
|
+
}
|
|
114
|
+
const config = await loadConfig();
|
|
115
|
+
if (config?.teamKey) {
|
|
116
|
+
return config.teamKey;
|
|
117
|
+
}
|
|
118
|
+
throw new AuthError('Not authenticated. Run: mesrai auth login or mesrai auth team-key --key <your-key>');
|
|
119
|
+
}
|
|
120
|
+
async generateCIToken() {
|
|
121
|
+
const token = await this.getValidToken();
|
|
122
|
+
return api.auth.generateCIToken(token);
|
|
123
|
+
}
|
|
124
|
+
async verifyToken() {
|
|
125
|
+
const credentials = await this.getCredentials();
|
|
126
|
+
if (!credentials) {
|
|
127
|
+
return { valid: false };
|
|
128
|
+
}
|
|
129
|
+
return api.auth.verify(credentials.accessToken);
|
|
130
|
+
}
|
|
131
|
+
async storeAuthResponse(response) {
|
|
132
|
+
const credentials = {
|
|
133
|
+
accessToken: response.accessToken,
|
|
134
|
+
refreshToken: response.refreshToken,
|
|
135
|
+
expiresAt: Date.now() + response.expiresIn * 1000,
|
|
136
|
+
user: response.user,
|
|
137
|
+
};
|
|
138
|
+
await saveCredentials(credentials);
|
|
139
|
+
this.cachedCredentials = credentials;
|
|
140
|
+
}
|
|
141
|
+
async refreshTokenOrFallback(refreshToken) {
|
|
142
|
+
if (!this.refreshInFlight) {
|
|
143
|
+
this.refreshInFlight = (async () => {
|
|
144
|
+
try {
|
|
145
|
+
const response = await api.auth.refresh(refreshToken);
|
|
146
|
+
await this.storeAuthResponse(response);
|
|
147
|
+
return response.accessToken;
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
await clearCredentials();
|
|
151
|
+
this.cachedCredentials = null;
|
|
152
|
+
const config = await loadConfig();
|
|
153
|
+
if (config?.teamKey) {
|
|
154
|
+
return config.teamKey;
|
|
155
|
+
}
|
|
156
|
+
throw new AuthError('Session expired. Run: mesrai auth login');
|
|
157
|
+
}
|
|
158
|
+
})();
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
return await this.refreshInFlight;
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
this.refreshInFlight = null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
export { AuthService };
|
|
169
|
+
export const authService = new AuthService();
|
|
170
|
+
function decodeJwtClaims(token) {
|
|
171
|
+
try {
|
|
172
|
+
const parts = token.split('.');
|
|
173
|
+
if (parts.length !== 3)
|
|
174
|
+
return {};
|
|
175
|
+
const payload = JSON.parse(Buffer.from(parts[1], 'base64').toString());
|
|
176
|
+
const expiresIn = typeof payload.exp === 'number'
|
|
177
|
+
? Math.max(0, payload.exp - Math.floor(Date.now() / 1000))
|
|
178
|
+
: undefined;
|
|
179
|
+
return {
|
|
180
|
+
sub: payload.sub,
|
|
181
|
+
email: payload.email,
|
|
182
|
+
organizationId: payload.organizationId,
|
|
183
|
+
expiresIn,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return {};
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=auth.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface BrowserLoginResult {
|
|
2
|
+
accessToken: string;
|
|
3
|
+
refreshToken: string;
|
|
4
|
+
userEmail?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Loopback OAuth-style login (RFC 8252).
|
|
8
|
+
*
|
|
9
|
+
* Flow:
|
|
10
|
+
* 1. Spin up an HTTP server on a random localhost port.
|
|
11
|
+
* 2. POST /cli/auth/login-init with that port — backend returns the
|
|
12
|
+
* verification URI (already composed from API_FRONTEND_URL on the
|
|
13
|
+
* server side, so self-hosted just works).
|
|
14
|
+
* 3. Open the verification URI in the user's browser.
|
|
15
|
+
* 4. After the user clicks "Authorize" on the web, the backend redirects
|
|
16
|
+
* the browser to http://127.0.0.1:<port>/callback?state=<state>.
|
|
17
|
+
* 5. Server resolves the callback, then we GET /cli/auth/login-poll?state=
|
|
18
|
+
* over HTTPS to fetch the JWT. The token never traverses the browser.
|
|
19
|
+
*/
|
|
20
|
+
export declare function loginViaBrowser({ onOpenUrl, }?: {
|
|
21
|
+
onOpenUrl?: (url: string) => void;
|
|
22
|
+
}): Promise<BrowserLoginResult>;
|
|
23
|
+
//# sourceMappingURL=browser-login.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-login.service.d.ts","sourceRoot":"","sources":["../../src/services/browser-login.service.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,kBAAkB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CAAC,EAClC,SAAS,GACZ,GAAE;IACC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4CnC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import http from 'node:http';
|
|
2
|
+
import open from 'open';
|
|
3
|
+
import { cliAuthApi } from './api/cli-auth.api.js';
|
|
4
|
+
const POLL_INTERVAL_MS = 1_000;
|
|
5
|
+
const POLL_MAX_DELAY_MS = 5_000;
|
|
6
|
+
const TOTAL_TIMEOUT_MS = 10 * 60 * 1000;
|
|
7
|
+
const CALLBACK_HTML = `<!doctype html>
|
|
8
|
+
<html lang="en">
|
|
9
|
+
<head>
|
|
10
|
+
<meta charset="utf-8">
|
|
11
|
+
<title>Mesrai CLI authorized</title>
|
|
12
|
+
<style>
|
|
13
|
+
body { font: 14px system-ui, sans-serif; padding: 4rem; text-align: center; color: #1f2937; }
|
|
14
|
+
h1 { font-size: 1.25rem; }
|
|
15
|
+
p { color: #6b7280; }
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
<body>
|
|
19
|
+
<h1>You're all set</h1>
|
|
20
|
+
<p>The Mesrai CLI received your authorization. You can close this tab.</p>
|
|
21
|
+
</body>
|
|
22
|
+
</html>`;
|
|
23
|
+
/**
|
|
24
|
+
* Loopback OAuth-style login (RFC 8252).
|
|
25
|
+
*
|
|
26
|
+
* Flow:
|
|
27
|
+
* 1. Spin up an HTTP server on a random localhost port.
|
|
28
|
+
* 2. POST /cli/auth/login-init with that port — backend returns the
|
|
29
|
+
* verification URI (already composed from API_FRONTEND_URL on the
|
|
30
|
+
* server side, so self-hosted just works).
|
|
31
|
+
* 3. Open the verification URI in the user's browser.
|
|
32
|
+
* 4. After the user clicks "Authorize" on the web, the backend redirects
|
|
33
|
+
* the browser to http://127.0.0.1:<port>/callback?state=<state>.
|
|
34
|
+
* 5. Server resolves the callback, then we GET /cli/auth/login-poll?state=
|
|
35
|
+
* over HTTPS to fetch the JWT. The token never traverses the browser.
|
|
36
|
+
*/
|
|
37
|
+
export async function loginViaBrowser({ onOpenUrl, } = {}) {
|
|
38
|
+
const { server, port, callbackPromise } = await startCallbackServer();
|
|
39
|
+
try {
|
|
40
|
+
const init = await cliAuthApi.initLoopback(port);
|
|
41
|
+
if (onOpenUrl) {
|
|
42
|
+
onOpenUrl(init.verificationUri);
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
await open(init.verificationUri);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// Browser may not be available; user can still copy the URL
|
|
49
|
+
// manually. The callback server keeps waiting either way.
|
|
50
|
+
}
|
|
51
|
+
// Race the callback against an expiry timeout. We MUST cancel the
|
|
52
|
+
// timer once the callback wins — without `cancel()` the underlying
|
|
53
|
+
// `setTimeout` keeps the Node event loop alive for the full
|
|
54
|
+
// `expiresIn` window (10 min by default), so the CLI hangs after a
|
|
55
|
+
// successful login until the timer naturally fires.
|
|
56
|
+
const expiry = timeout(init.expiresIn * 1000, 'Authorization timed out. Run `mesrai auth login` again.');
|
|
57
|
+
let callback;
|
|
58
|
+
try {
|
|
59
|
+
callback = await Promise.race([callbackPromise, expiry.promise]);
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
expiry.cancel();
|
|
63
|
+
}
|
|
64
|
+
if (callback.state !== init.state) {
|
|
65
|
+
throw new Error('Authorization state mismatch. The callback did not match the initial request — refusing to use the response for security reasons.');
|
|
66
|
+
}
|
|
67
|
+
const tokens = await pollUntilTerminal(init.state);
|
|
68
|
+
return tokens;
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
await closeServer(server);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function startCallbackServer() {
|
|
75
|
+
let resolveCallback;
|
|
76
|
+
let rejectCallback;
|
|
77
|
+
const callbackPromise = new Promise((resolve, reject) => {
|
|
78
|
+
resolveCallback = resolve;
|
|
79
|
+
rejectCallback = reject;
|
|
80
|
+
});
|
|
81
|
+
const server = http.createServer((req, res) => {
|
|
82
|
+
if (!req.url) {
|
|
83
|
+
res.writeHead(400).end();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const url = new URL(req.url, 'http://127.0.0.1');
|
|
87
|
+
if (url.pathname !== '/callback') {
|
|
88
|
+
res.writeHead(404, { Connection: 'close' }).end();
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const state = url.searchParams.get('state');
|
|
92
|
+
const error = url.searchParams.get('error');
|
|
93
|
+
// Connection: close — keep-alive sockets would block the Node event
|
|
94
|
+
// loop after server.close(), leaving the CLI hanging when the user
|
|
95
|
+
// tries to run another command in the same shell.
|
|
96
|
+
res.writeHead(error ? 400 : 200, {
|
|
97
|
+
'Content-Type': 'text/html; charset=utf-8',
|
|
98
|
+
Connection: 'close',
|
|
99
|
+
});
|
|
100
|
+
res.end(CALLBACK_HTML);
|
|
101
|
+
if (error) {
|
|
102
|
+
rejectCallback(new Error(`Authorization denied: ${error}`));
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (!state) {
|
|
106
|
+
rejectCallback(new Error('Callback missing state parameter'));
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
resolveCallback({ state });
|
|
110
|
+
});
|
|
111
|
+
// Don't keep keep-alive sockets idle — the browser will sometimes hold
|
|
112
|
+
// the connection open after the response, which would prevent the
|
|
113
|
+
// process from exiting after the login finishes.
|
|
114
|
+
server.keepAliveTimeout = 0;
|
|
115
|
+
// Bind only to loopback — never expose this server to other hosts.
|
|
116
|
+
await new Promise((resolve, reject) => {
|
|
117
|
+
server.once('error', reject);
|
|
118
|
+
server.listen(0, '127.0.0.1', () => resolve());
|
|
119
|
+
});
|
|
120
|
+
const address = server.address();
|
|
121
|
+
return { server, port: address.port, callbackPromise };
|
|
122
|
+
}
|
|
123
|
+
function closeServer(server) {
|
|
124
|
+
return new Promise((resolve) => {
|
|
125
|
+
// closeAllConnections is available on Node 18.2+. Force any
|
|
126
|
+
// lingering keep-alive sockets to drop so the process can exit.
|
|
127
|
+
const anyServer = server;
|
|
128
|
+
try {
|
|
129
|
+
anyServer.closeIdleConnections?.();
|
|
130
|
+
anyServer.closeAllConnections?.();
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// ignore — best effort
|
|
134
|
+
}
|
|
135
|
+
server.close(() => resolve());
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
async function pollUntilTerminal(state) {
|
|
139
|
+
const startedAt = Date.now();
|
|
140
|
+
let delay = POLL_INTERVAL_MS;
|
|
141
|
+
while (Date.now() - startedAt < TOTAL_TIMEOUT_MS) {
|
|
142
|
+
const response = await cliAuthApi.poll({ state });
|
|
143
|
+
if (response.status === 'completed') {
|
|
144
|
+
if (!response.accessToken || !response.refreshToken) {
|
|
145
|
+
throw new Error('Authorization completed but the server returned no tokens');
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
accessToken: response.accessToken,
|
|
149
|
+
refreshToken: response.refreshToken,
|
|
150
|
+
userEmail: response.userEmail,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
if (response.status === 'expired' ||
|
|
154
|
+
response.status === 'denied' ||
|
|
155
|
+
response.status === 'consumed' ||
|
|
156
|
+
response.status === 'not_found') {
|
|
157
|
+
throw new Error(`Authorization ${response.status}. Run \`mesrai auth login\` again.`);
|
|
158
|
+
}
|
|
159
|
+
await sleep(delay);
|
|
160
|
+
delay = Math.min(delay * 2, POLL_MAX_DELAY_MS);
|
|
161
|
+
}
|
|
162
|
+
throw new Error('Authorization timed out while polling for tokens');
|
|
163
|
+
}
|
|
164
|
+
function sleep(ms) {
|
|
165
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Cancellable timeout: returns a promise that rejects after `ms`, plus a
|
|
169
|
+
* `cancel()` to clear the underlying timer when the caller no longer
|
|
170
|
+
* needs it (e.g. when racing against another promise that won). Without
|
|
171
|
+
* `cancel()`, the unref'd timer would keep the event loop alive for the
|
|
172
|
+
* full duration even after the race resolved.
|
|
173
|
+
*/
|
|
174
|
+
function timeout(ms, message) {
|
|
175
|
+
let timer;
|
|
176
|
+
const promise = new Promise((_, reject) => {
|
|
177
|
+
timer = setTimeout(() => reject(new Error(message)), ms);
|
|
178
|
+
});
|
|
179
|
+
return {
|
|
180
|
+
promise,
|
|
181
|
+
cancel: () => {
|
|
182
|
+
if (timer)
|
|
183
|
+
clearTimeout(timer);
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=browser-login.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-login.service.js","sourceRoot":"","sources":["../../src/services/browser-login.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CentralizedConfigActionResponse, CentralizedConfigStatus, ConfigRepository } from '../types/config.js';
|
|
2
|
+
type InitOptions = {
|
|
3
|
+
repository?: string;
|
|
4
|
+
syncOption: 'pr' | 'manual';
|
|
5
|
+
};
|
|
6
|
+
declare class CentralizedConfigService {
|
|
7
|
+
getStatus(): Promise<CentralizedConfigStatus>;
|
|
8
|
+
init(options: InitOptions): Promise<CentralizedConfigActionResponse & {
|
|
9
|
+
repository: ConfigRepository;
|
|
10
|
+
}>;
|
|
11
|
+
sync(): Promise<CentralizedConfigActionResponse>;
|
|
12
|
+
disable(): Promise<CentralizedConfigActionResponse>;
|
|
13
|
+
download(outPath: string): Promise<{
|
|
14
|
+
outputPath: string;
|
|
15
|
+
bytes: number;
|
|
16
|
+
}>;
|
|
17
|
+
private resolveRepositoryForInit;
|
|
18
|
+
private resolveCurrentRepositoryReference;
|
|
19
|
+
private toRepositoryFullName;
|
|
20
|
+
private requireTeamKey;
|
|
21
|
+
}
|
|
22
|
+
export declare const centralizedConfigService: CentralizedConfigService;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=centralized-config.service.d.ts.map
|