@ameshkin/ticket-mate 0.1.20
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/LICENSE +22 -0
- package/README.md +1214 -0
- package/config/_design-specs.json +39 -0
- package/config/bugs-demo.json +186 -0
- package/config/design-specs.ts +39 -0
- package/config/envSpec.ts +120 -0
- package/config/nav.admin.ts +165 -0
- package/config/nav.main.json +90 -0
- package/config/nav.main.ts +92 -0
- package/package.json +299 -0
- package/public/acceptance-criteria/extractors.d.ts +30 -0
- package/public/acceptance-criteria/extractors.d.ts.map +1 -0
- package/public/acceptance-criteria/extractors.js +133 -0
- package/public/acceptance-criteria/extractors.js.map +1 -0
- package/public/acceptance-criteria/file-discovery.d.ts +22 -0
- package/public/acceptance-criteria/file-discovery.d.ts.map +1 -0
- package/public/acceptance-criteria/file-discovery.js +102 -0
- package/public/acceptance-criteria/file-discovery.js.map +1 -0
- package/public/acceptance-criteria/file-utils.d.ts +29 -0
- package/public/acceptance-criteria/file-utils.d.ts.map +1 -0
- package/public/acceptance-criteria/file-utils.js +103 -0
- package/public/acceptance-criteria/file-utils.js.map +1 -0
- package/public/acceptance-criteria/merger.d.ts +17 -0
- package/public/acceptance-criteria/merger.d.ts.map +1 -0
- package/public/acceptance-criteria/merger.js +73 -0
- package/public/acceptance-criteria/merger.js.map +1 -0
- package/public/acceptance-criteria/sync.d.ts +12 -0
- package/public/acceptance-criteria/sync.d.ts.map +1 -0
- package/public/acceptance-criteria/sync.js +72 -0
- package/public/acceptance-criteria/sync.js.map +1 -0
- package/public/acceptance-criteria/verifier.d.ts +10 -0
- package/public/acceptance-criteria/verifier.d.ts.map +1 -0
- package/public/acceptance-criteria/verifier.js +54 -0
- package/public/acceptance-criteria/verifier.js.map +1 -0
- package/public/ai/agent-handler-integration.d.ts +67 -0
- package/public/ai/agent-handler-integration.d.ts.map +1 -0
- package/public/ai/agent-handler-integration.js +277 -0
- package/public/ai/agent-handler-integration.js.map +1 -0
- package/public/ai/agent-integration.d.ts +96 -0
- package/public/ai/agent-integration.d.ts.map +1 -0
- package/public/ai/agent-integration.js +82 -0
- package/public/ai/agent-integration.js.map +1 -0
- package/public/ai/ai-ready.d.ts +28 -0
- package/public/ai/ai-ready.d.ts.map +1 -0
- package/public/ai/ai-ready.js +70 -0
- package/public/ai/ai-ready.js.map +1 -0
- package/public/ai/executor.d.ts +108 -0
- package/public/ai/executor.d.ts.map +1 -0
- package/public/ai/executor.js +30 -0
- package/public/ai/executor.js.map +1 -0
- package/public/ai/jira-updates.d.ts +25 -0
- package/public/ai/jira-updates.d.ts.map +1 -0
- package/public/ai/jira-updates.js +132 -0
- package/public/ai/jira-updates.js.map +1 -0
- package/public/ai/progress.d.ts +59 -0
- package/public/ai/progress.d.ts.map +1 -0
- package/public/ai/progress.js +92 -0
- package/public/ai/progress.js.map +1 -0
- package/public/ai/repo.d.ts +54 -0
- package/public/ai/repo.d.ts.map +1 -0
- package/public/ai/repo.js +171 -0
- package/public/ai/repo.js.map +1 -0
- package/public/ai/safeguards.d.ts +59 -0
- package/public/ai/safeguards.d.ts.map +1 -0
- package/public/ai/safeguards.js +139 -0
- package/public/ai/safeguards.js.map +1 -0
- package/public/ai/test-runner.d.ts +37 -0
- package/public/ai/test-runner.d.ts.map +1 -0
- package/public/ai/test-runner.js +114 -0
- package/public/ai/test-runner.js.map +1 -0
- package/public/ai/workflow.d.ts +41 -0
- package/public/ai/workflow.d.ts.map +1 -0
- package/public/ai/workflow.js +205 -0
- package/public/ai/workflow.js.map +1 -0
- package/public/app/api/acceptance-criteria/acceptance-criteria.service.d.ts +8 -0
- package/public/app/api/acceptance-criteria/acceptance-criteria.service.d.ts.map +1 -0
- package/public/app/api/acceptance-criteria/acceptance-criteria.service.js +18 -0
- package/public/app/api/acceptance-criteria/acceptance-criteria.service.js.map +1 -0
- package/public/app/api/automation/automation.service.d.ts +20 -0
- package/public/app/api/automation/automation.service.d.ts.map +1 -0
- package/public/app/api/automation/automation.service.js +112 -0
- package/public/app/api/automation/automation.service.js.map +1 -0
- package/public/app/api/automation/bulk-operations.d.ts +41 -0
- package/public/app/api/automation/bulk-operations.d.ts.map +1 -0
- package/public/app/api/automation/bulk-operations.js +146 -0
- package/public/app/api/automation/bulk-operations.js.map +1 -0
- package/public/app/api/automation/fix-now.d.ts +27 -0
- package/public/app/api/automation/fix-now.d.ts.map +1 -0
- package/public/app/api/automation/fix-now.js +82 -0
- package/public/app/api/automation/fix-now.js.map +1 -0
- package/public/app/api/batch/batch.service.d.ts +7 -0
- package/public/app/api/batch/batch.service.d.ts.map +1 -0
- package/public/app/api/batch/batch.service.js +11 -0
- package/public/app/api/batch/batch.service.js.map +1 -0
- package/public/app/api/bugs/bugs-jira.service.d.ts +27 -0
- package/public/app/api/bugs/bugs-jira.service.d.ts.map +1 -0
- package/public/app/api/bugs/bugs-jira.service.js +103 -0
- package/public/app/api/bugs/bugs-jira.service.js.map +1 -0
- package/public/app/api/bugs/bugs.service.d.ts +29 -0
- package/public/app/api/bugs/bugs.service.d.ts.map +1 -0
- package/public/app/api/bugs/bugs.service.js +51 -0
- package/public/app/api/bugs/bugs.service.js.map +1 -0
- package/public/app/api/config/config.service.d.ts +12 -0
- package/public/app/api/config/config.service.d.ts.map +1 -0
- package/public/app/api/config/config.service.js +45 -0
- package/public/app/api/config/config.service.js.map +1 -0
- package/public/app/api/google/google-maps.service.d.ts +30 -0
- package/public/app/api/google/google-maps.service.d.ts.map +1 -0
- package/public/app/api/google/google-maps.service.js +74 -0
- package/public/app/api/google/google-maps.service.js.map +1 -0
- package/public/app/api/google/google-search.service.d.ts +73 -0
- package/public/app/api/google/google-search.service.d.ts.map +1 -0
- package/public/app/api/google/google-search.service.js +83 -0
- package/public/app/api/google/google-search.service.js.map +1 -0
- package/public/app/api/issues/execution.service.d.ts +13 -0
- package/public/app/api/issues/execution.service.d.ts.map +1 -0
- package/public/app/api/issues/execution.service.js +27 -0
- package/public/app/api/issues/execution.service.js.map +1 -0
- package/public/app/api/issues/git.service.d.ts +10 -0
- package/public/app/api/issues/git.service.d.ts.map +1 -0
- package/public/app/api/issues/git.service.js +22 -0
- package/public/app/api/issues/git.service.js.map +1 -0
- package/public/app/api/issues/issues.service.d.ts +14 -0
- package/public/app/api/issues/issues.service.d.ts.map +1 -0
- package/public/app/api/issues/issues.service.js +32 -0
- package/public/app/api/issues/issues.service.js.map +1 -0
- package/public/app/api/jira/jira-auth.service.d.ts +36 -0
- package/public/app/api/jira/jira-auth.service.d.ts.map +1 -0
- package/public/app/api/jira/jira-auth.service.js +89 -0
- package/public/app/api/jira/jira-auth.service.js.map +1 -0
- package/public/app/api/orchestrator/orchestrator-processor.d.ts +32 -0
- package/public/app/api/orchestrator/orchestrator-processor.d.ts.map +1 -0
- package/public/app/api/orchestrator/orchestrator-processor.js +130 -0
- package/public/app/api/orchestrator/orchestrator-processor.js.map +1 -0
- package/public/app/api/orchestrator/orchestrator.service.d.ts +56 -0
- package/public/app/api/orchestrator/orchestrator.service.d.ts.map +1 -0
- package/public/app/api/orchestrator/orchestrator.service.js +91 -0
- package/public/app/api/orchestrator/orchestrator.service.js.map +1 -0
- package/public/app/api/projects/projects.service.d.ts +12 -0
- package/public/app/api/projects/projects.service.d.ts.map +1 -0
- package/public/app/api/projects/projects.service.js +13 -0
- package/public/app/api/projects/projects.service.js.map +1 -0
- package/public/app/api/prompts/pr.service.d.ts +13 -0
- package/public/app/api/prompts/pr.service.d.ts.map +1 -0
- package/public/app/api/prompts/pr.service.js +12 -0
- package/public/app/api/prompts/pr.service.js.map +1 -0
- package/public/app/api/prompts/prompts.service.d.ts +5 -0
- package/public/app/api/prompts/prompts.service.d.ts.map +1 -0
- package/public/app/api/prompts/prompts.service.js +7 -0
- package/public/app/api/prompts/prompts.service.js.map +1 -0
- package/public/app/api/report/api-report.d.ts +60 -0
- package/public/app/api/report/api-report.d.ts.map +1 -0
- package/public/app/api/report/api-report.js +212 -0
- package/public/app/api/report/api-report.js.map +1 -0
- package/public/app/api/research/research.service.d.ts +82 -0
- package/public/app/api/research/research.service.d.ts.map +1 -0
- package/public/app/api/research/research.service.js +115 -0
- package/public/app/api/research/research.service.js.map +1 -0
- package/public/app/api/sync/sync.service.d.ts +11 -0
- package/public/app/api/sync/sync.service.d.ts.map +1 -0
- package/public/app/api/sync/sync.service.js +20 -0
- package/public/app/api/sync/sync.service.js.map +1 -0
- package/public/app/api/task-folders/task-folders.service.d.ts +15 -0
- package/public/app/api/task-folders/task-folders.service.d.ts.map +1 -0
- package/public/app/api/task-folders/task-folders.service.js +27 -0
- package/public/app/api/task-folders/task-folders.service.js.map +1 -0
- package/public/app/api/ticket-mate-config/ticket-mate-config.service.d.ts +129 -0
- package/public/app/api/ticket-mate-config/ticket-mate-config.service.d.ts.map +1 -0
- package/public/app/api/ticket-mate-config/ticket-mate-config.service.js +140 -0
- package/public/app/api/ticket-mate-config/ticket-mate-config.service.js.map +1 -0
- package/public/app/api/webhooks/webhooks.service.d.ts +11 -0
- package/public/app/api/webhooks/webhooks.service.d.ts.map +1 -0
- package/public/app/api/webhooks/webhooks.service.js +12 -0
- package/public/app/api/webhooks/webhooks.service.js.map +1 -0
- package/public/assets/images/logo.jpg +0 -0
- package/public/automation/bugs-sync.d.ts +36 -0
- package/public/automation/bugs-sync.d.ts.map +1 -0
- package/public/automation/bugs-sync.js +234 -0
- package/public/automation/bugs-sync.js.map +1 -0
- package/public/automation/bugs-watcher.d.ts +22 -0
- package/public/automation/bugs-watcher.d.ts.map +1 -0
- package/public/automation/bugs-watcher.js +100 -0
- package/public/automation/bugs-watcher.js.map +1 -0
- package/public/automation/index.d.ts +17 -0
- package/public/automation/index.d.ts.map +1 -0
- package/public/automation/index.js +21 -0
- package/public/automation/index.js.map +1 -0
- package/public/automation/json-reader.d.ts +102 -0
- package/public/automation/json-reader.d.ts.map +1 -0
- package/public/automation/json-reader.js +147 -0
- package/public/automation/json-reader.js.map +1 -0
- package/public/automation/label-assigner.d.ts +54 -0
- package/public/automation/label-assigner.d.ts.map +1 -0
- package/public/automation/label-assigner.js +233 -0
- package/public/automation/label-assigner.js.map +1 -0
- package/public/automation/pattern-learner.d.ts +47 -0
- package/public/automation/pattern-learner.d.ts.map +1 -0
- package/public/automation/pattern-learner.js +192 -0
- package/public/automation/pattern-learner.js.map +1 -0
- package/public/automation/pattern-matcher.d.ts +86 -0
- package/public/automation/pattern-matcher.d.ts.map +1 -0
- package/public/automation/pattern-matcher.js +215 -0
- package/public/automation/pattern-matcher.js.map +1 -0
- package/public/automation/pattern-store.d.ts +32 -0
- package/public/automation/pattern-store.d.ts.map +1 -0
- package/public/automation/pattern-store.js +97 -0
- package/public/automation/pattern-store.js.map +1 -0
- package/public/automation/ticket-creator.d.ts +54 -0
- package/public/automation/ticket-creator.d.ts.map +1 -0
- package/public/automation/ticket-creator.js +267 -0
- package/public/automation/ticket-creator.js.map +1 -0
- package/public/automation/types.d.ts +96 -0
- package/public/automation/types.d.ts.map +1 -0
- package/public/automation/types.js +7 -0
- package/public/automation/types.js.map +1 -0
- package/public/batch/batch-execute.d.ts +88 -0
- package/public/batch/batch-execute.d.ts.map +1 -0
- package/public/batch/batch-execute.js +182 -0
- package/public/batch/batch-execute.js.map +1 -0
- package/public/batch/batch-sync.d.ts +46 -0
- package/public/batch/batch-sync.d.ts.map +1 -0
- package/public/batch/batch-sync.js +83 -0
- package/public/batch/batch-sync.js.map +1 -0
- package/public/cache/cache.d.ts +65 -0
- package/public/cache/cache.d.ts.map +1 -0
- package/public/cache/cache.js +198 -0
- package/public/cache/cache.js.map +1 -0
- package/public/cache/etag.d.ts +51 -0
- package/public/cache/etag.d.ts.map +1 -0
- package/public/cache/etag.js +108 -0
- package/public/cache/etag.js.map +1 -0
- package/public/ci/github-sync.d.ts +92 -0
- package/public/ci/github-sync.d.ts.map +1 -0
- package/public/ci/github-sync.js +166 -0
- package/public/ci/github-sync.js.map +1 -0
- package/public/cli/commands/agent-instruct.d.ts +8 -0
- package/public/cli/commands/agent-instruct.d.ts.map +1 -0
- package/public/cli/commands/agent-instruct.js +138 -0
- package/public/cli/commands/agent-instruct.js.map +1 -0
- package/public/cli/commands/assign-to-cursor.d.ts +8 -0
- package/public/cli/commands/assign-to-cursor.d.ts.map +1 -0
- package/public/cli/commands/assign-to-cursor.js +84 -0
- package/public/cli/commands/assign-to-cursor.js.map +1 -0
- package/public/cli/commands/assign.d.ts +8 -0
- package/public/cli/commands/assign.d.ts.map +1 -0
- package/public/cli/commands/assign.js +84 -0
- package/public/cli/commands/assign.js.map +1 -0
- package/public/cli/commands/auth-check.d.ts +8 -0
- package/public/cli/commands/auth-check.d.ts.map +1 -0
- package/public/cli/commands/auth-check.js +72 -0
- package/public/cli/commands/auth-check.js.map +1 -0
- package/public/cli/commands/autoplay.d.ts +3 -0
- package/public/cli/commands/autoplay.d.ts.map +1 -0
- package/public/cli/commands/autoplay.js +188 -0
- package/public/cli/commands/autoplay.js.map +1 -0
- package/public/cli/commands/batch.d.ts +8 -0
- package/public/cli/commands/batch.d.ts.map +1 -0
- package/public/cli/commands/batch.js +125 -0
- package/public/cli/commands/batch.js.map +1 -0
- package/public/cli/commands/bug-tix.d.ts +9 -0
- package/public/cli/commands/bug-tix.d.ts.map +1 -0
- package/public/cli/commands/bug-tix.js +306 -0
- package/public/cli/commands/bug-tix.js.map +1 -0
- package/public/cli/commands/bugs-create-jira.d.ts +8 -0
- package/public/cli/commands/bugs-create-jira.d.ts.map +1 -0
- package/public/cli/commands/bugs-create-jira.js +113 -0
- package/public/cli/commands/bugs-create-jira.js.map +1 -0
- package/public/cli/commands/bugs-ls.d.ts +8 -0
- package/public/cli/commands/bugs-ls.d.ts.map +1 -0
- package/public/cli/commands/bugs-ls.js +63 -0
- package/public/cli/commands/bugs-ls.js.map +1 -0
- package/public/cli/commands/bugs-open.d.ts +8 -0
- package/public/cli/commands/bugs-open.d.ts.map +1 -0
- package/public/cli/commands/bugs-open.js +69 -0
- package/public/cli/commands/bugs-open.js.map +1 -0
- package/public/cli/commands/bugs-sync.d.ts +8 -0
- package/public/cli/commands/bugs-sync.d.ts.map +1 -0
- package/public/cli/commands/bugs-sync.js +76 -0
- package/public/cli/commands/bugs-sync.js.map +1 -0
- package/public/cli/commands/check-permissions.d.ts +9 -0
- package/public/cli/commands/check-permissions.d.ts.map +1 -0
- package/public/cli/commands/check-permissions.js +180 -0
- package/public/cli/commands/check-permissions.js.map +1 -0
- package/public/cli/commands/check-statuses.d.ts +8 -0
- package/public/cli/commands/check-statuses.d.ts.map +1 -0
- package/public/cli/commands/check-statuses.js +58 -0
- package/public/cli/commands/check-statuses.js.map +1 -0
- package/public/cli/commands/ci-sync.d.ts +8 -0
- package/public/cli/commands/ci-sync.d.ts.map +1 -0
- package/public/cli/commands/ci-sync.js +45 -0
- package/public/cli/commands/ci-sync.js.map +1 -0
- package/public/cli/commands/clone-project.d.ts +11 -0
- package/public/cli/commands/clone-project.d.ts.map +1 -0
- package/public/cli/commands/clone-project.js +139 -0
- package/public/cli/commands/clone-project.js.map +1 -0
- package/public/cli/commands/cloud-projects.d.ts +9 -0
- package/public/cli/commands/cloud-projects.d.ts.map +1 -0
- package/public/cli/commands/cloud-projects.js +164 -0
- package/public/cli/commands/cloud-projects.js.map +1 -0
- package/public/cli/commands/comment.d.ts +8 -0
- package/public/cli/commands/comment.d.ts.map +1 -0
- package/public/cli/commands/comment.js +64 -0
- package/public/cli/commands/comment.js.map +1 -0
- package/public/cli/commands/config-test.d.ts +10 -0
- package/public/cli/commands/config-test.d.ts.map +1 -0
- package/public/cli/commands/config-test.js +92 -0
- package/public/cli/commands/config-test.js.map +1 -0
- package/public/cli/commands/create-board.d.ts +8 -0
- package/public/cli/commands/create-board.d.ts.map +1 -0
- package/public/cli/commands/create-board.js +84 -0
- package/public/cli/commands/create-board.js.map +1 -0
- package/public/cli/commands/create-bug.d.ts +8 -0
- package/public/cli/commands/create-bug.d.ts.map +1 -0
- package/public/cli/commands/create-bug.js +33 -0
- package/public/cli/commands/create-bug.js.map +1 -0
- package/public/cli/commands/create-epic.d.ts +8 -0
- package/public/cli/commands/create-epic.d.ts.map +1 -0
- package/public/cli/commands/create-epic.js +31 -0
- package/public/cli/commands/create-epic.js.map +1 -0
- package/public/cli/commands/create-label.d.ts +8 -0
- package/public/cli/commands/create-label.d.ts.map +1 -0
- package/public/cli/commands/create-label.js +48 -0
- package/public/cli/commands/create-label.js.map +1 -0
- package/public/cli/commands/create-story.d.ts +8 -0
- package/public/cli/commands/create-story.d.ts.map +1 -0
- package/public/cli/commands/create-story.js +33 -0
- package/public/cli/commands/create-story.js.map +1 -0
- package/public/cli/commands/create-task-folder.d.ts +8 -0
- package/public/cli/commands/create-task-folder.d.ts.map +1 -0
- package/public/cli/commands/create-task-folder.js +45 -0
- package/public/cli/commands/create-task-folder.js.map +1 -0
- package/public/cli/commands/create-ticket.d.ts +32 -0
- package/public/cli/commands/create-ticket.d.ts.map +1 -0
- package/public/cli/commands/create-ticket.js +610 -0
- package/public/cli/commands/create-ticket.js.map +1 -0
- package/public/cli/commands/env-check.d.ts +8 -0
- package/public/cli/commands/env-check.d.ts.map +1 -0
- package/public/cli/commands/env-check.js +131 -0
- package/public/cli/commands/env-check.js.map +1 -0
- package/public/cli/commands/env-debug.d.ts +8 -0
- package/public/cli/commands/env-debug.d.ts.map +1 -0
- package/public/cli/commands/env-debug.js +169 -0
- package/public/cli/commands/env-debug.js.map +1 -0
- package/public/cli/commands/execute.d.ts +9 -0
- package/public/cli/commands/execute.d.ts.map +1 -0
- package/public/cli/commands/execute.js +97 -0
- package/public/cli/commands/execute.js.map +1 -0
- package/public/cli/commands/export.d.ts +8 -0
- package/public/cli/commands/export.d.ts.map +1 -0
- package/public/cli/commands/export.js +126 -0
- package/public/cli/commands/export.js.map +1 -0
- package/public/cli/commands/go.d.ts +15 -0
- package/public/cli/commands/go.d.ts.map +1 -0
- package/public/cli/commands/go.js +326 -0
- package/public/cli/commands/go.js.map +1 -0
- package/public/cli/commands/health-check.d.ts +8 -0
- package/public/cli/commands/health-check.d.ts.map +1 -0
- package/public/cli/commands/health-check.js +209 -0
- package/public/cli/commands/health-check.js.map +1 -0
- package/public/cli/commands/import-template.d.ts +8 -0
- package/public/cli/commands/import-template.d.ts.map +1 -0
- package/public/cli/commands/import-template.js +98 -0
- package/public/cli/commands/import-template.js.map +1 -0
- package/public/cli/commands/init-repo.d.ts +8 -0
- package/public/cli/commands/init-repo.d.ts.map +1 -0
- package/public/cli/commands/init-repo.js +112 -0
- package/public/cli/commands/init-repo.js.map +1 -0
- package/public/cli/commands/interactive.d.ts +11 -0
- package/public/cli/commands/interactive.d.ts.map +1 -0
- package/public/cli/commands/interactive.js +124 -0
- package/public/cli/commands/interactive.js.map +1 -0
- package/public/cli/commands/jm-status.d.ts +8 -0
- package/public/cli/commands/jm-status.d.ts.map +1 -0
- package/public/cli/commands/jm-status.js +81 -0
- package/public/cli/commands/jm-status.js.map +1 -0
- package/public/cli/commands/list-jira-projects.d.ts +12 -0
- package/public/cli/commands/list-jira-projects.d.ts.map +1 -0
- package/public/cli/commands/list-jira-projects.js +109 -0
- package/public/cli/commands/list-jira-projects.js.map +1 -0
- package/public/cli/commands/list-tickets.d.ts +9 -0
- package/public/cli/commands/list-tickets.d.ts.map +1 -0
- package/public/cli/commands/list-tickets.js +73 -0
- package/public/cli/commands/list-tickets.js.map +1 -0
- package/public/cli/commands/ls-issues.d.ts +14 -0
- package/public/cli/commands/ls-issues.d.ts.map +1 -0
- package/public/cli/commands/ls-issues.js +54 -0
- package/public/cli/commands/ls-issues.js.map +1 -0
- package/public/cli/commands/ls-projects.d.ts +10 -0
- package/public/cli/commands/ls-projects.d.ts.map +1 -0
- package/public/cli/commands/ls-projects.js +14 -0
- package/public/cli/commands/ls-projects.js.map +1 -0
- package/public/cli/commands/my-tickets.d.ts +8 -0
- package/public/cli/commands/my-tickets.d.ts.map +1 -0
- package/public/cli/commands/my-tickets.js +96 -0
- package/public/cli/commands/my-tickets.js.map +1 -0
- package/public/cli/commands/orc-go.d.ts +3 -0
- package/public/cli/commands/orc-go.d.ts.map +1 -0
- package/public/cli/commands/orc-go.js +272 -0
- package/public/cli/commands/orc-go.js.map +1 -0
- package/public/cli/commands/orc-notes-get.d.ts +3 -0
- package/public/cli/commands/orc-notes-get.d.ts.map +1 -0
- package/public/cli/commands/orc-notes-get.js +78 -0
- package/public/cli/commands/orc-notes-get.js.map +1 -0
- package/public/cli/commands/orc-notes-go.d.ts +3 -0
- package/public/cli/commands/orc-notes-go.d.ts.map +1 -0
- package/public/cli/commands/orc-notes-go.js +182 -0
- package/public/cli/commands/orc-notes-go.js.map +1 -0
- package/public/cli/commands/orc-notes-status.d.ts +3 -0
- package/public/cli/commands/orc-notes-status.d.ts.map +1 -0
- package/public/cli/commands/orc-notes-status.js +89 -0
- package/public/cli/commands/orc-notes-status.js.map +1 -0
- package/public/cli/commands/plan-ticket.d.ts +8 -0
- package/public/cli/commands/plan-ticket.d.ts.map +1 -0
- package/public/cli/commands/plan-ticket.js +61 -0
- package/public/cli/commands/plan-ticket.js.map +1 -0
- package/public/cli/commands/process-bugs.d.ts +8 -0
- package/public/cli/commands/process-bugs.d.ts.map +1 -0
- package/public/cli/commands/process-bugs.js +106 -0
- package/public/cli/commands/process-bugs.js.map +1 -0
- package/public/cli/commands/project-config.d.ts +8 -0
- package/public/cli/commands/project-config.d.ts.map +1 -0
- package/public/cli/commands/project-config.js +172 -0
- package/public/cli/commands/project-config.js.map +1 -0
- package/public/cli/commands/project-info.d.ts +8 -0
- package/public/cli/commands/project-info.d.ts.map +1 -0
- package/public/cli/commands/project-info.js +289 -0
- package/public/cli/commands/project-info.js.map +1 -0
- package/public/cli/commands/project-link-repo.d.ts +8 -0
- package/public/cli/commands/project-link-repo.d.ts.map +1 -0
- package/public/cli/commands/project-link-repo.js +95 -0
- package/public/cli/commands/project-link-repo.js.map +1 -0
- package/public/cli/commands/project-list.d.ts +8 -0
- package/public/cli/commands/project-list.d.ts.map +1 -0
- package/public/cli/commands/project-list.js +44 -0
- package/public/cli/commands/project-list.js.map +1 -0
- package/public/cli/commands/queue.d.ts +8 -0
- package/public/cli/commands/queue.d.ts.map +1 -0
- package/public/cli/commands/queue.js +106 -0
- package/public/cli/commands/queue.js.map +1 -0
- package/public/cli/commands/quick-sync.d.ts +8 -0
- package/public/cli/commands/quick-sync.d.ts.map +1 -0
- package/public/cli/commands/quick-sync.js +105 -0
- package/public/cli/commands/quick-sync.js.map +1 -0
- package/public/cli/commands/replit-test-webhook.d.ts +8 -0
- package/public/cli/commands/replit-test-webhook.d.ts.map +1 -0
- package/public/cli/commands/replit-test-webhook.js +123 -0
- package/public/cli/commands/replit-test-webhook.js.map +1 -0
- package/public/cli/commands/report.d.ts +8 -0
- package/public/cli/commands/report.d.ts.map +1 -0
- package/public/cli/commands/report.js +86 -0
- package/public/cli/commands/report.js.map +1 -0
- package/public/cli/commands/search.d.ts +9 -0
- package/public/cli/commands/search.d.ts.map +1 -0
- package/public/cli/commands/search.js +87 -0
- package/public/cli/commands/search.js.map +1 -0
- package/public/cli/commands/setup-cursor-board.d.ts +8 -0
- package/public/cli/commands/setup-cursor-board.d.ts.map +1 -0
- package/public/cli/commands/setup-cursor-board.js +72 -0
- package/public/cli/commands/setup-cursor-board.js.map +1 -0
- package/public/cli/commands/show-issue.d.ts +8 -0
- package/public/cli/commands/show-issue.d.ts.map +1 -0
- package/public/cli/commands/show-issue.js +71 -0
- package/public/cli/commands/show-issue.js.map +1 -0
- package/public/cli/commands/start-work.d.ts +12 -0
- package/public/cli/commands/start-work.d.ts.map +1 -0
- package/public/cli/commands/start-work.js +281 -0
- package/public/cli/commands/start-work.js.map +1 -0
- package/public/cli/commands/start.d.ts +3 -0
- package/public/cli/commands/start.d.ts.map +1 -0
- package/public/cli/commands/start.js +127 -0
- package/public/cli/commands/start.js.map +1 -0
- package/public/cli/commands/status.d.ts +13 -0
- package/public/cli/commands/status.d.ts.map +1 -0
- package/public/cli/commands/status.js +175 -0
- package/public/cli/commands/status.js.map +1 -0
- package/public/cli/commands/sync-acceptance.d.ts +8 -0
- package/public/cli/commands/sync-acceptance.d.ts.map +1 -0
- package/public/cli/commands/sync-acceptance.js +167 -0
- package/public/cli/commands/sync-acceptance.js.map +1 -0
- package/public/cli/commands/sync-fields.d.ts +8 -0
- package/public/cli/commands/sync-fields.d.ts.map +1 -0
- package/public/cli/commands/sync-fields.js +71 -0
- package/public/cli/commands/sync-fields.js.map +1 -0
- package/public/cli/commands/sync-tickets.d.ts +8 -0
- package/public/cli/commands/sync-tickets.d.ts.map +1 -0
- package/public/cli/commands/sync-tickets.js +203 -0
- package/public/cli/commands/sync-tickets.js.map +1 -0
- package/public/cli/commands/test-workflow.d.ts +8 -0
- package/public/cli/commands/test-workflow.d.ts.map +1 -0
- package/public/cli/commands/test-workflow.js +205 -0
- package/public/cli/commands/test-workflow.js.map +1 -0
- package/public/cli/commands/tickets-list.d.ts +8 -0
- package/public/cli/commands/tickets-list.d.ts.map +1 -0
- package/public/cli/commands/tickets-list.js +346 -0
- package/public/cli/commands/tickets-list.js.map +1 -0
- package/public/cli/commands/transition.d.ts +8 -0
- package/public/cli/commands/transition.d.ts.map +1 -0
- package/public/cli/commands/transition.js +112 -0
- package/public/cli/commands/transition.js.map +1 -0
- package/public/cli/commands/validate-branch.d.ts +5 -0
- package/public/cli/commands/validate-branch.d.ts.map +1 -0
- package/public/cli/commands/validate-branch.js +35 -0
- package/public/cli/commands/validate-branch.js.map +1 -0
- package/public/cli/commands/validate-commit.d.ts +5 -0
- package/public/cli/commands/validate-commit.d.ts.map +1 -0
- package/public/cli/commands/validate-commit.js +38 -0
- package/public/cli/commands/validate-commit.js.map +1 -0
- package/public/cli/commands/watch-bugs.d.ts +8 -0
- package/public/cli/commands/watch-bugs.d.ts.map +1 -0
- package/public/cli/commands/watch-bugs.js +61 -0
- package/public/cli/commands/watch-bugs.js.map +1 -0
- package/public/cli/commands/watch.d.ts +12 -0
- package/public/cli/commands/watch.d.ts.map +1 -0
- package/public/cli/commands/watch.js +193 -0
- package/public/cli/commands/watch.js.map +1 -0
- package/public/cli/commands/webhooks-debug.d.ts +3 -0
- package/public/cli/commands/webhooks-debug.d.ts.map +1 -0
- package/public/cli/commands/webhooks-debug.js +209 -0
- package/public/cli/commands/webhooks-debug.js.map +1 -0
- package/public/cli/commands/workflow.d.ts +8 -0
- package/public/cli/commands/workflow.d.ts.map +1 -0
- package/public/cli/commands/workflow.js +67 -0
- package/public/cli/commands/workflow.js.map +1 -0
- package/public/cli/index.d.ts +7 -0
- package/public/cli/index.d.ts.map +1 -0
- package/public/cli/index.js +375 -0
- package/public/cli/index.js.map +1 -0
- package/public/cli/orchestrator.d.ts +10 -0
- package/public/cli/orchestrator.d.ts.map +1 -0
- package/public/cli/orchestrator.js +183 -0
- package/public/cli/orchestrator.js.map +1 -0
- package/public/cli/project-list.d.ts +9 -0
- package/public/cli/project-list.d.ts.map +1 -0
- package/public/cli/project-list.js +37 -0
- package/public/cli/project-list.js.map +1 -0
- package/public/cli/utils/auth-helper.d.ts +28 -0
- package/public/cli/utils/auth-helper.d.ts.map +1 -0
- package/public/cli/utils/auth-helper.js +83 -0
- package/public/cli/utils/auth-helper.js.map +1 -0
- package/public/cli/utils/get-cli-client.d.ts +13 -0
- package/public/cli/utils/get-cli-client.d.ts.map +1 -0
- package/public/cli/utils/get-cli-client.js +81 -0
- package/public/cli/utils/get-cli-client.js.map +1 -0
- package/public/cli/utils/oauth-cli-helper.d.ts +32 -0
- package/public/cli/utils/oauth-cli-helper.d.ts.map +1 -0
- package/public/cli/utils/oauth-cli-helper.js +226 -0
- package/public/cli/utils/oauth-cli-helper.js.map +1 -0
- package/public/cli/utils/session-reader.d.ts +14 -0
- package/public/cli/utils/session-reader.d.ts.map +1 -0
- package/public/cli/utils/session-reader.js +48 -0
- package/public/cli/utils/session-reader.js.map +1 -0
- package/public/cli/utils/table.d.ts +35 -0
- package/public/cli/utils/table.d.ts.map +1 -0
- package/public/cli/utils/table.js +179 -0
- package/public/cli/utils/table.js.map +1 -0
- package/public/client/errors.d.ts +63 -0
- package/public/client/errors.d.ts.map +1 -0
- package/public/client/errors.js +219 -0
- package/public/client/errors.js.map +1 -0
- package/public/client/jira-client.d.ts +153 -0
- package/public/client/jira-client.d.ts.map +1 -0
- package/public/client/jira-client.js +636 -0
- package/public/client/jira-client.js.map +1 -0
- package/public/client/jira-debug.d.ts +27 -0
- package/public/client/jira-debug.d.ts.map +1 -0
- package/public/client/jira-debug.js +63 -0
- package/public/client/jira-debug.js.map +1 -0
- package/public/client/jira-errors.d.ts +26 -0
- package/public/client/jira-errors.d.ts.map +1 -0
- package/public/client/jira-errors.js +46 -0
- package/public/client/jira-errors.js.map +1 -0
- package/public/client/jira-sprint.d.ts +39 -0
- package/public/client/jira-sprint.d.ts.map +1 -0
- package/public/client/jira-sprint.js +187 -0
- package/public/client/jira-sprint.js.map +1 -0
- package/public/client/jira-user.d.ts +43 -0
- package/public/client/jira-user.d.ts.map +1 -0
- package/public/client/jira-user.js +96 -0
- package/public/client/jira-user.js.map +1 -0
- package/public/client/resolve-reporter.d.ts +27 -0
- package/public/client/resolve-reporter.d.ts.map +1 -0
- package/public/client/resolve-reporter.js +54 -0
- package/public/client/resolve-reporter.js.map +1 -0
- package/public/client/ticket-mate-client.d.ts +202 -0
- package/public/client/ticket-mate-client.d.ts.map +1 -0
- package/public/client/ticket-mate-client.js +280 -0
- package/public/client/ticket-mate-client.js.map +1 -0
- package/public/components/keyboard/CommandPalette.d.ts +2 -0
- package/public/components/keyboard/CommandPalette.d.ts.map +1 -0
- package/public/components/keyboard/CommandPalette.js +123 -0
- package/public/components/keyboard/CommandPalette.js.map +1 -0
- package/public/components/keyboard/GlobalShortcuts.d.ts +2 -0
- package/public/components/keyboard/GlobalShortcuts.d.ts.map +1 -0
- package/public/components/keyboard/GlobalShortcuts.js +32 -0
- package/public/components/keyboard/GlobalShortcuts.js.map +1 -0
- package/public/config/auth-mode.d.ts +38 -0
- package/public/config/auth-mode.d.ts.map +1 -0
- package/public/config/auth-mode.js +125 -0
- package/public/config/auth-mode.js.map +1 -0
- package/public/config/config-loader.d.ts +142 -0
- package/public/config/config-loader.d.ts.map +1 -0
- package/public/config/config-loader.js +247 -0
- package/public/config/config-loader.js.map +1 -0
- package/public/config/config-wizard.d.ts +58 -0
- package/public/config/config-wizard.d.ts.map +1 -0
- package/public/config/config-wizard.js +147 -0
- package/public/config/config-wizard.js.map +1 -0
- package/public/config/config.d.ts +79 -0
- package/public/config/config.d.ts.map +1 -0
- package/public/config/config.js +462 -0
- package/public/config/config.js.map +1 -0
- package/public/config/jira-mate-config.types.d.ts +27 -0
- package/public/config/jira-mate-config.types.d.ts.map +1 -0
- package/public/config/jira-mate-config.types.js +7 -0
- package/public/config/jira-mate-config.types.js.map +1 -0
- package/public/config/jira-pat-config.d.ts +44 -0
- package/public/config/jira-pat-config.d.ts.map +1 -0
- package/public/config/jira-pat-config.js +78 -0
- package/public/config/jira-pat-config.js.map +1 -0
- package/public/config/jiraConnection.d.ts +81 -0
- package/public/config/jiraConnection.d.ts.map +1 -0
- package/public/config/jiraConnection.js +207 -0
- package/public/config/jiraConnection.js.map +1 -0
- package/public/config/jiraCredentials.d.ts +20 -0
- package/public/config/jiraCredentials.d.ts.map +1 -0
- package/public/config/jiraCredentials.js +35 -0
- package/public/config/jiraCredentials.js.map +1 -0
- package/public/config/jiraProject.d.ts +32 -0
- package/public/config/jiraProject.d.ts.map +1 -0
- package/public/config/jiraProject.js +72 -0
- package/public/config/jiraProject.js.map +1 -0
- package/public/config/loadJiraMateConfig.d.ts +24 -0
- package/public/config/loadJiraMateConfig.d.ts.map +1 -0
- package/public/config/loadJiraMateConfig.js +100 -0
- package/public/config/loadJiraMateConfig.js.map +1 -0
- package/public/config/pricing.d.ts +65 -0
- package/public/config/pricing.d.ts.map +1 -0
- package/public/config/pricing.js +166 -0
- package/public/config/pricing.js.map +1 -0
- package/public/config/project-mapping.d.ts +36 -0
- package/public/config/project-mapping.d.ts.map +1 -0
- package/public/config/project-mapping.js +136 -0
- package/public/config/project-mapping.js.map +1 -0
- package/public/config/project-store.d.ts +35 -0
- package/public/config/project-store.d.ts.map +1 -0
- package/public/config/project-store.js +99 -0
- package/public/config/project-store.js.map +1 -0
- package/public/config/scanMonorepo.d.ts +23 -0
- package/public/config/scanMonorepo.d.ts.map +1 -0
- package/public/config/scanMonorepo.js +96 -0
- package/public/config/scanMonorepo.js.map +1 -0
- package/public/config/ticket-mate-config.types.d.ts +139 -0
- package/public/config/ticket-mate-config.types.d.ts.map +1 -0
- package/public/config/ticket-mate-config.types.js +8 -0
- package/public/config/ticket-mate-config.types.js.map +1 -0
- package/public/diff/diff-engine.d.ts +40 -0
- package/public/diff/diff-engine.d.ts.map +1 -0
- package/public/diff/diff-engine.js +222 -0
- package/public/diff/diff-engine.js.map +1 -0
- package/public/export/export.d.ts +67 -0
- package/public/export/export.d.ts.map +1 -0
- package/public/export/export.js +208 -0
- package/public/export/export.js.map +1 -0
- package/public/fast-tasks/index.d.ts +3 -0
- package/public/fast-tasks/index.d.ts.map +1 -0
- package/public/fast-tasks/index.js +3 -0
- package/public/fast-tasks/index.js.map +1 -0
- package/public/fast-tasks/storage.d.ts +38 -0
- package/public/fast-tasks/storage.d.ts.map +1 -0
- package/public/fast-tasks/storage.js +126 -0
- package/public/fast-tasks/storage.js.map +1 -0
- package/public/fast-tasks/types.d.ts +47 -0
- package/public/fast-tasks/types.d.ts.map +1 -0
- package/public/fast-tasks/types.js +7 -0
- package/public/fast-tasks/types.js.map +1 -0
- package/public/fields/field-generators.d.ts +33 -0
- package/public/fields/field-generators.d.ts.map +1 -0
- package/public/fields/field-generators.js +162 -0
- package/public/fields/field-generators.js.map +1 -0
- package/public/fields/field-mapper.d.ts +87 -0
- package/public/fields/field-mapper.d.ts.map +1 -0
- package/public/fields/field-mapper.js +231 -0
- package/public/fields/field-mapper.js.map +1 -0
- package/public/fields/field-sync.d.ts +45 -0
- package/public/fields/field-sync.d.ts.map +1 -0
- package/public/fields/field-sync.js +98 -0
- package/public/fields/field-sync.js.map +1 -0
- package/public/fields/index.d.ts +9 -0
- package/public/fields/index.d.ts.map +1 -0
- package/public/fields/index.js +9 -0
- package/public/fields/index.js.map +1 -0
- package/public/fields/llm-generator.d.ts +28 -0
- package/public/fields/llm-generator.d.ts.map +1 -0
- package/public/fields/llm-generator.js +90 -0
- package/public/fields/llm-generator.js.map +1 -0
- package/public/git/branch-generator.d.ts +40 -0
- package/public/git/branch-generator.d.ts.map +1 -0
- package/public/git/branch-generator.js +93 -0
- package/public/git/branch-generator.js.map +1 -0
- package/public/git/branch-validation.d.ts +28 -0
- package/public/git/branch-validation.d.ts.map +1 -0
- package/public/git/branch-validation.js +97 -0
- package/public/git/branch-validation.js.map +1 -0
- package/public/git/commit-validation.d.ts +32 -0
- package/public/git/commit-validation.d.ts.map +1 -0
- package/public/git/commit-validation.js +90 -0
- package/public/git/commit-validation.js.map +1 -0
- package/public/import/import.d.ts +49 -0
- package/public/import/import.d.ts.map +1 -0
- package/public/import/import.js +193 -0
- package/public/import/import.js.map +1 -0
- package/public/index.d.ts +120 -0
- package/public/index.d.ts.map +1 -0
- package/public/index.js +161 -0
- package/public/index.js.map +1 -0
- package/public/instrumentation.d.ts +8 -0
- package/public/instrumentation.d.ts.map +1 -0
- package/public/instrumentation.js +14 -0
- package/public/instrumentation.js.map +1 -0
- package/public/integrations/orchestrator-client.d.ts +69 -0
- package/public/integrations/orchestrator-client.d.ts.map +1 -0
- package/public/integrations/orchestrator-client.js +151 -0
- package/public/integrations/orchestrator-client.js.map +1 -0
- package/public/integrations/orchestrator-work-trigger.d.ts +54 -0
- package/public/integrations/orchestrator-work-trigger.d.ts.map +1 -0
- package/public/integrations/orchestrator-work-trigger.js +184 -0
- package/public/integrations/orchestrator-work-trigger.js.map +1 -0
- package/public/jira/jiraClient.d.ts +19 -0
- package/public/jira/jiraClient.d.ts.map +1 -0
- package/public/jira/jiraClient.js +144 -0
- package/public/jira/jiraClient.js.map +1 -0
- package/public/jira-management/boards.d.ts +80 -0
- package/public/jira-management/boards.d.ts.map +1 -0
- package/public/jira-management/boards.js +306 -0
- package/public/jira-management/boards.js.map +1 -0
- package/public/jira-management/cursor-board.d.ts +37 -0
- package/public/jira-management/cursor-board.d.ts.map +1 -0
- package/public/jira-management/cursor-board.js +222 -0
- package/public/jira-management/cursor-board.js.map +1 -0
- package/public/jira-management/custom-fields.d.ts +32 -0
- package/public/jira-management/custom-fields.d.ts.map +1 -0
- package/public/jira-management/custom-fields.js +94 -0
- package/public/jira-management/custom-fields.js.map +1 -0
- package/public/jira-management/epics.d.ts +25 -0
- package/public/jira-management/epics.d.ts.map +1 -0
- package/public/jira-management/epics.js +98 -0
- package/public/jira-management/epics.js.map +1 -0
- package/public/jira-management/index.d.ts +19 -0
- package/public/jira-management/index.d.ts.map +1 -0
- package/public/jira-management/index.js +19 -0
- package/public/jira-management/index.js.map +1 -0
- package/public/jira-management/labels.d.ts +35 -0
- package/public/jira-management/labels.d.ts.map +1 -0
- package/public/jira-management/labels.js +153 -0
- package/public/jira-management/labels.js.map +1 -0
- package/public/jira-management/project-templates.d.ts +48 -0
- package/public/jira-management/project-templates.d.ts.map +1 -0
- package/public/jira-management/project-templates.js +120 -0
- package/public/jira-management/project-templates.js.map +1 -0
- package/public/jira-management/projects.d.ts +45 -0
- package/public/jira-management/projects.d.ts.map +1 -0
- package/public/jira-management/projects.js +127 -0
- package/public/jira-management/projects.js.map +1 -0
- package/public/jira-management/statuses.d.ts +46 -0
- package/public/jira-management/statuses.d.ts.map +1 -0
- package/public/jira-management/statuses.js +116 -0
- package/public/jira-management/statuses.js.map +1 -0
- package/public/jira-management/templates.d.ts +68 -0
- package/public/jira-management/templates.d.ts.map +1 -0
- package/public/jira-management/templates.js +244 -0
- package/public/jira-management/templates.js.map +1 -0
- package/public/jira-management/workflow-columns.d.ts +43 -0
- package/public/jira-management/workflow-columns.d.ts.map +1 -0
- package/public/jira-management/workflow-columns.js +195 -0
- package/public/jira-management/workflow-columns.js.map +1 -0
- package/public/jira-notes/index.d.ts +3 -0
- package/public/jira-notes/index.d.ts.map +1 -0
- package/public/jira-notes/index.js +5 -0
- package/public/jira-notes/index.js.map +1 -0
- package/public/jira-notes/lib/jiraNotesClient.d.ts +18 -0
- package/public/jira-notes/lib/jiraNotesClient.d.ts.map +1 -0
- package/public/jira-notes/lib/jiraNotesClient.js +61 -0
- package/public/jira-notes/lib/jiraNotesClient.js.map +1 -0
- package/public/jira-notes/lib/jiraNotesTypes.d.ts +28 -0
- package/public/jira-notes/lib/jiraNotesTypes.d.ts.map +1 -0
- package/public/jira-notes/lib/jiraNotesTypes.js +2 -0
- package/public/jira-notes/lib/jiraNotesTypes.js.map +1 -0
- package/public/lib/ai/ai-errors.d.ts +49 -0
- package/public/lib/ai/ai-errors.d.ts.map +1 -0
- package/public/lib/ai/ai-errors.js +115 -0
- package/public/lib/ai/ai-errors.js.map +1 -0
- package/public/lib/ai/llmRouter.d.ts +56 -0
- package/public/lib/ai/llmRouter.d.ts.map +1 -0
- package/public/lib/ai/llmRouter.js +190 -0
- package/public/lib/ai/llmRouter.js.map +1 -0
- package/public/lib/ai/models.d.ts +56 -0
- package/public/lib/ai/models.d.ts.map +1 -0
- package/public/lib/ai/models.js +84 -0
- package/public/lib/ai/models.js.map +1 -0
- package/public/lib/ai/openaiClient.d.ts +31 -0
- package/public/lib/ai/openaiClient.d.ts.map +1 -0
- package/public/lib/ai/openaiClient.js +92 -0
- package/public/lib/ai/openaiClient.js.map +1 -0
- package/public/lib/ai/planLimits.d.ts +43 -0
- package/public/lib/ai/planLimits.d.ts.map +1 -0
- package/public/lib/ai/planLimits.js +154 -0
- package/public/lib/ai/planLimits.js.map +1 -0
- package/public/lib/ai/priceConfig.d.ts +53 -0
- package/public/lib/ai/priceConfig.d.ts.map +1 -0
- package/public/lib/ai/priceConfig.js +111 -0
- package/public/lib/ai/priceConfig.js.map +1 -0
- package/public/lib/ai/provider.d.ts +63 -0
- package/public/lib/ai/provider.d.ts.map +1 -0
- package/public/lib/ai/provider.js +199 -0
- package/public/lib/ai/provider.js.map +1 -0
- package/public/lib/ai/replitClient.d.ts +44 -0
- package/public/lib/ai/replitClient.d.ts.map +1 -0
- package/public/lib/ai/replitClient.js +88 -0
- package/public/lib/ai/replitClient.js.map +1 -0
- package/public/lib/ai/usageLogger.d.ts +30 -0
- package/public/lib/ai/usageLogger.d.ts.map +1 -0
- package/public/lib/ai/usageLogger.js +113 -0
- package/public/lib/ai/usageLogger.js.map +1 -0
- package/public/lib/auth/debug.d.ts +3 -0
- package/public/lib/auth/debug.d.ts.map +1 -0
- package/public/lib/auth/debug.js +12 -0
- package/public/lib/auth/debug.js.map +1 -0
- package/public/lib/auth/index.d.ts +2 -0
- package/public/lib/auth/index.d.ts.map +1 -0
- package/public/lib/auth/index.js +2 -0
- package/public/lib/auth/index.js.map +1 -0
- package/public/lib/auth/options.d.ts +16 -0
- package/public/lib/auth/options.d.ts.map +1 -0
- package/public/lib/auth/options.js +893 -0
- package/public/lib/auth/options.js.map +1 -0
- package/public/lib/auth/requireAuthPage.d.ts +23 -0
- package/public/lib/auth/requireAuthPage.d.ts.map +1 -0
- package/public/lib/auth/requireAuthPage.js +33 -0
- package/public/lib/auth/requireAuthPage.js.map +1 -0
- package/public/lib/auth/superadmin.d.ts +20 -0
- package/public/lib/auth/superadmin.d.ts.map +1 -0
- package/public/lib/auth/superadmin.js +40 -0
- package/public/lib/auth/superadmin.js.map +1 -0
- package/public/lib/auth/token-mutex.d.ts +20 -0
- package/public/lib/auth/token-mutex.d.ts.map +1 -0
- package/public/lib/auth/token-mutex.js +36 -0
- package/public/lib/auth/token-mutex.js.map +1 -0
- package/public/lib/automation/engine.d.ts +12 -0
- package/public/lib/automation/engine.d.ts.map +1 -0
- package/public/lib/automation/engine.js +150 -0
- package/public/lib/automation/engine.js.map +1 -0
- package/public/lib/dashboard-widgets.d.ts +22 -0
- package/public/lib/dashboard-widgets.d.ts.map +1 -0
- package/public/lib/dashboard-widgets.js +99 -0
- package/public/lib/dashboard-widgets.js.map +1 -0
- package/public/lib/data/templates/index.d.ts +16 -0
- package/public/lib/data/templates/index.d.ts.map +1 -0
- package/public/lib/data/templates/index.js +37 -0
- package/public/lib/data/templates/index.js.map +1 -0
- package/public/lib/data/templates/it-service.json +122 -0
- package/public/lib/data/templates/marketing.json +122 -0
- package/public/lib/data/templates/software.json +122 -0
- package/public/lib/docs.d.ts +14 -0
- package/public/lib/docs.d.ts.map +1 -0
- package/public/lib/docs.js +87 -0
- package/public/lib/docs.js.map +1 -0
- package/public/lib/email/client.d.ts +18 -0
- package/public/lib/email/client.d.ts.map +1 -0
- package/public/lib/email/client.js +31 -0
- package/public/lib/email/client.js.map +1 -0
- package/public/lib/email/templates/TeamInviteEmail.d.ts +12 -0
- package/public/lib/email/templates/TeamInviteEmail.d.ts.map +1 -0
- package/public/lib/email/templates/TeamInviteEmail.js +12 -0
- package/public/lib/email/templates/TeamInviteEmail.js.map +1 -0
- package/public/lib/encryption/webhook-encryption.d.ts +11 -0
- package/public/lib/encryption/webhook-encryption.d.ts.map +1 -0
- package/public/lib/encryption/webhook-encryption.js +46 -0
- package/public/lib/encryption/webhook-encryption.js.map +1 -0
- package/public/lib/encryption.d.ts +17 -0
- package/public/lib/encryption.d.ts.map +1 -0
- package/public/lib/encryption.js +65 -0
- package/public/lib/encryption.js.map +1 -0
- package/public/lib/env/baseUrl.d.ts +34 -0
- package/public/lib/env/baseUrl.d.ts.map +1 -0
- package/public/lib/env/baseUrl.js +51 -0
- package/public/lib/env/baseUrl.js.map +1 -0
- package/public/lib/env/externalUrl.d.ts +34 -0
- package/public/lib/env/externalUrl.d.ts.map +1 -0
- package/public/lib/env/externalUrl.js +66 -0
- package/public/lib/env/externalUrl.js.map +1 -0
- package/public/lib/env/server.d.ts +26 -0
- package/public/lib/env/server.d.ts.map +1 -0
- package/public/lib/env/server.js +45 -0
- package/public/lib/env/server.js.map +1 -0
- package/public/lib/env.d.ts +75 -0
- package/public/lib/env.d.ts.map +1 -0
- package/public/lib/env.js +108 -0
- package/public/lib/env.js.map +1 -0
- package/public/lib/events/jira-connect-events.d.ts +47 -0
- package/public/lib/events/jira-connect-events.d.ts.map +1 -0
- package/public/lib/events/jira-connect-events.js +104 -0
- package/public/lib/events/jira-connect-events.js.map +1 -0
- package/public/lib/git/local.d.ts +27 -0
- package/public/lib/git/local.d.ts.map +1 -0
- package/public/lib/git/local.js +100 -0
- package/public/lib/git/local.js.map +1 -0
- package/public/lib/git/remote.d.ts +18 -0
- package/public/lib/git/remote.d.ts.map +1 -0
- package/public/lib/git/remote.js +92 -0
- package/public/lib/git/remote.js.map +1 -0
- package/public/lib/github/user-client.d.ts +8 -0
- package/public/lib/github/user-client.d.ts.map +1 -0
- package/public/lib/github/user-client.js +23 -0
- package/public/lib/github/user-client.js.map +1 -0
- package/public/lib/github-public.d.ts +37 -0
- package/public/lib/github-public.d.ts.map +1 -0
- package/public/lib/github-public.js +120 -0
- package/public/lib/github-public.js.map +1 -0
- package/public/lib/integrations/teams/auth.d.ts +14 -0
- package/public/lib/integrations/teams/auth.d.ts.map +1 -0
- package/public/lib/integrations/teams/auth.js +46 -0
- package/public/lib/integrations/teams/auth.js.map +1 -0
- package/public/lib/integrations/teams/event-router.d.ts +15 -0
- package/public/lib/integrations/teams/event-router.d.ts.map +1 -0
- package/public/lib/integrations/teams/event-router.js +122 -0
- package/public/lib/integrations/teams/event-router.js.map +1 -0
- package/public/lib/integrations/teams/message-builder.d.ts +5 -0
- package/public/lib/integrations/teams/message-builder.d.ts.map +1 -0
- package/public/lib/integrations/teams/message-builder.js +19 -0
- package/public/lib/integrations/teams/message-builder.js.map +1 -0
- package/public/lib/integrations/teams/templates.d.ts +237 -0
- package/public/lib/integrations/teams/templates.d.ts.map +1 -0
- package/public/lib/integrations/teams/templates.js +237 -0
- package/public/lib/integrations/teams/templates.js.map +1 -0
- package/public/lib/integrations/teams/transformer.d.ts +39 -0
- package/public/lib/integrations/teams/transformer.d.ts.map +1 -0
- package/public/lib/integrations/teams/transformer.js +83 -0
- package/public/lib/integrations/teams/transformer.js.map +1 -0
- package/public/lib/integrations.d.ts +28 -0
- package/public/lib/integrations.d.ts.map +1 -0
- package/public/lib/integrations.js +40 -0
- package/public/lib/integrations.js.map +1 -0
- package/public/lib/invite/accept.d.ts +30 -0
- package/public/lib/invite/accept.d.ts.map +1 -0
- package/public/lib/invite/accept.js +196 -0
- package/public/lib/invite/accept.js.map +1 -0
- package/public/lib/invite/service.d.ts +11 -0
- package/public/lib/invite/service.d.ts.map +1 -0
- package/public/lib/invite/service.js +87 -0
- package/public/lib/invite/service.js.map +1 -0
- package/public/lib/invite/types.d.ts +19 -0
- package/public/lib/invite/types.d.ts.map +1 -0
- package/public/lib/invite/types.js +2 -0
- package/public/lib/invite/types.js.map +1 -0
- package/public/lib/jql/jqlBuilder.d.ts +47 -0
- package/public/lib/jql/jqlBuilder.d.ts.map +1 -0
- package/public/lib/jql/jqlBuilder.js +258 -0
- package/public/lib/jql/jqlBuilder.js.map +1 -0
- package/public/lib/jql/useJqlBuilder.d.ts +12 -0
- package/public/lib/jql/useJqlBuilder.d.ts.map +1 -0
- package/public/lib/jql/useJqlBuilder.js +97 -0
- package/public/lib/jql/useJqlBuilder.js.map +1 -0
- package/public/lib/keyboard/ShortcutContext.d.ts +7 -0
- package/public/lib/keyboard/ShortcutContext.d.ts.map +1 -0
- package/public/lib/keyboard/ShortcutContext.js +37 -0
- package/public/lib/keyboard/ShortcutContext.js.map +1 -0
- package/public/lib/keyboard/types.d.ts +22 -0
- package/public/lib/keyboard/types.d.ts.map +1 -0
- package/public/lib/keyboard/types.js +2 -0
- package/public/lib/keyboard/types.js.map +1 -0
- package/public/lib/keyboard/useShortcut.d.ts +12 -0
- package/public/lib/keyboard/useShortcut.d.ts.map +1 -0
- package/public/lib/keyboard/useShortcut.js +55 -0
- package/public/lib/keyboard/useShortcut.js.map +1 -0
- package/public/lib/markdown/fallback-handler.d.ts +25 -0
- package/public/lib/markdown/fallback-handler.d.ts.map +1 -0
- package/public/lib/markdown/fallback-handler.js +104 -0
- package/public/lib/markdown/fallback-handler.js.map +1 -0
- package/public/lib/notifications-cli.d.ts +16 -0
- package/public/lib/notifications-cli.d.ts.map +1 -0
- package/public/lib/notifications-cli.js +36 -0
- package/public/lib/notifications-cli.js.map +1 -0
- package/public/lib/notifications.d.ts +77 -0
- package/public/lib/notifications.d.ts.map +1 -0
- package/public/lib/notifications.js +161 -0
- package/public/lib/notifications.js.map +1 -0
- package/public/lib/ollama.d.ts +94 -0
- package/public/lib/ollama.d.ts.map +1 -0
- package/public/lib/ollama.js +249 -0
- package/public/lib/ollama.js.map +1 -0
- package/public/lib/orcMcp/client.d.ts +55 -0
- package/public/lib/orcMcp/client.d.ts.map +1 -0
- package/public/lib/orcMcp/client.js +134 -0
- package/public/lib/orcMcp/client.js.map +1 -0
- package/public/lib/orcMcp/execution.d.ts +24 -0
- package/public/lib/orcMcp/execution.d.ts.map +1 -0
- package/public/lib/orcMcp/execution.js +19 -0
- package/public/lib/orcMcp/execution.js.map +1 -0
- package/public/lib/password.d.ts +12 -0
- package/public/lib/password.d.ts.map +1 -0
- package/public/lib/password.js +18 -0
- package/public/lib/password.js.map +1 -0
- package/public/lib/platform-event-bus.d.ts +15 -0
- package/public/lib/platform-event-bus.d.ts.map +1 -0
- package/public/lib/platform-event-bus.js +46 -0
- package/public/lib/platform-event-bus.js.map +1 -0
- package/public/lib/prisma.d.ts +23 -0
- package/public/lib/prisma.d.ts.map +1 -0
- package/public/lib/prisma.js +135 -0
- package/public/lib/prisma.js.map +1 -0
- package/public/lib/projects.d.ts +38 -0
- package/public/lib/projects.d.ts.map +1 -0
- package/public/lib/projects.js +91 -0
- package/public/lib/projects.js.map +1 -0
- package/public/lib/soft-failure.d.ts +38 -0
- package/public/lib/soft-failure.d.ts.map +1 -0
- package/public/lib/soft-failure.js +46 -0
- package/public/lib/soft-failure.js.map +1 -0
- package/public/lib/ticket-mate/dataLoader.d.ts +52 -0
- package/public/lib/ticket-mate/dataLoader.d.ts.map +1 -0
- package/public/lib/ticket-mate/dataLoader.js +128 -0
- package/public/lib/ticket-mate/dataLoader.js.map +1 -0
- package/public/lib/ticket-mate/filtering.d.ts +33 -0
- package/public/lib/ticket-mate/filtering.d.ts.map +1 -0
- package/public/lib/ticket-mate/filtering.js +190 -0
- package/public/lib/ticket-mate/filtering.js.map +1 -0
- package/public/lib/ticket-mate/logging.d.ts +42 -0
- package/public/lib/ticket-mate/logging.d.ts.map +1 -0
- package/public/lib/ticket-mate/logging.js +83 -0
- package/public/lib/ticket-mate/logging.js.map +1 -0
- package/public/lib/ticket-mate/repoRoot.d.ts +15 -0
- package/public/lib/ticket-mate/repoRoot.d.ts.map +1 -0
- package/public/lib/ticket-mate/repoRoot.js +34 -0
- package/public/lib/ticket-mate/repoRoot.js.map +1 -0
- package/public/lib/webhook-events-store.d.ts +23 -0
- package/public/lib/webhook-events-store.d.ts.map +1 -0
- package/public/lib/webhook-events-store.js +39 -0
- package/public/lib/webhook-events-store.js.map +1 -0
- package/public/lib/webhook-notifications.d.ts +32 -0
- package/public/lib/webhook-notifications.d.ts.map +1 -0
- package/public/lib/webhook-notifications.js +107 -0
- package/public/lib/webhook-notifications.js.map +1 -0
- package/public/lib/webhooks/delivery.d.ts +11 -0
- package/public/lib/webhooks/delivery.d.ts.map +1 -0
- package/public/lib/webhooks/delivery.js +54 -0
- package/public/lib/webhooks/delivery.js.map +1 -0
- package/public/lib/workflow-compiler.d.ts +6 -0
- package/public/lib/workflow-compiler.d.ts.map +1 -0
- package/public/lib/workflow-compiler.js +110 -0
- package/public/lib/workflow-compiler.js.map +1 -0
- package/public/observability/metrics.d.ts +52 -0
- package/public/observability/metrics.d.ts.map +1 -0
- package/public/observability/metrics.js +177 -0
- package/public/observability/metrics.js.map +1 -0
- package/public/pr/pr-builder.d.ts +16 -0
- package/public/pr/pr-builder.d.ts.map +1 -0
- package/public/pr/pr-builder.js +117 -0
- package/public/pr/pr-builder.js.map +1 -0
- package/public/progress/task-manager.d.ts +53 -0
- package/public/progress/task-manager.d.ts.map +1 -0
- package/public/progress/task-manager.js +204 -0
- package/public/progress/task-manager.js.map +1 -0
- package/public/progress/template.d.ts +38 -0
- package/public/progress/template.d.ts.map +1 -0
- package/public/progress/template.js +232 -0
- package/public/progress/template.js.map +1 -0
- package/public/prompts/prompt-builder.d.ts +11 -0
- package/public/prompts/prompt-builder.d.ts.map +1 -0
- package/public/prompts/prompt-builder.js +161 -0
- package/public/prompts/prompt-builder.js.map +1 -0
- package/public/research/types.d.ts +158 -0
- package/public/research/types.d.ts.map +1 -0
- package/public/research/types.js +5 -0
- package/public/research/types.js.map +1 -0
- package/public/scripts/seed-epics.d.ts +2 -0
- package/public/scripts/seed-epics.d.ts.map +1 -0
- package/public/scripts/seed-epics.js +88 -0
- package/public/scripts/seed-epics.js.map +1 -0
- package/public/search/search-engine.d.ts +75 -0
- package/public/search/search-engine.d.ts.map +1 -0
- package/public/search/search-engine.js +176 -0
- package/public/search/search-engine.js.map +1 -0
- package/public/server/auth/account-provisioning.d.ts +16 -0
- package/public/server/auth/account-provisioning.d.ts.map +1 -0
- package/public/server/auth/account-provisioning.js +109 -0
- package/public/server/auth/account-provisioning.js.map +1 -0
- package/public/server/auth/atlassian-user-mapping.d.ts +36 -0
- package/public/server/auth/atlassian-user-mapping.d.ts.map +1 -0
- package/public/server/auth/atlassian-user-mapping.js +97 -0
- package/public/server/auth/atlassian-user-mapping.js.map +1 -0
- package/public/server/auth.d.ts +14 -0
- package/public/server/auth.d.ts.map +1 -0
- package/public/server/auth.js +35 -0
- package/public/server/auth.js.map +1 -0
- package/public/server/jira/client.d.ts +17 -0
- package/public/server/jira/client.d.ts.map +1 -0
- package/public/server/jira/client.js +55 -0
- package/public/server/jira/client.js.map +1 -0
- package/public/server/jira/cloudInfo.d.ts +30 -0
- package/public/server/jira/cloudInfo.d.ts.map +1 -0
- package/public/server/jira/cloudInfo.js +152 -0
- package/public/server/jira/cloudInfo.js.map +1 -0
- package/public/server/jira/ensure-user.d.ts +20 -0
- package/public/server/jira/ensure-user.d.ts.map +1 -0
- package/public/server/jira/ensure-user.js +59 -0
- package/public/server/jira/ensure-user.js.map +1 -0
- package/public/server/jira/errors.d.ts +18 -0
- package/public/server/jira/errors.d.ts.map +1 -0
- package/public/server/jira/errors.js +30 -0
- package/public/server/jira/errors.js.map +1 -0
- package/public/server/jira/fieldResolver.d.ts +76 -0
- package/public/server/jira/fieldResolver.d.ts.map +1 -0
- package/public/server/jira/fieldResolver.js +320 -0
- package/public/server/jira/fieldResolver.js.map +1 -0
- package/public/server/jira/jiraClient.d.ts +84 -0
- package/public/server/jira/jiraClient.d.ts.map +1 -0
- package/public/server/jira/jiraClient.js +330 -0
- package/public/server/jira/jiraClient.js.map +1 -0
- package/public/server/jira/tokens.d.ts +37 -0
- package/public/server/jira/tokens.d.ts.map +1 -0
- package/public/server/jira/tokens.js +161 -0
- package/public/server/jira/tokens.js.map +1 -0
- package/public/server/jira/unified-client.d.ts +48 -0
- package/public/server/jira/unified-client.d.ts.map +1 -0
- package/public/server/jira/unified-client.js +227 -0
- package/public/server/jira/unified-client.js.map +1 -0
- package/public/server/mcp/execution.d.ts +22 -0
- package/public/server/mcp/execution.d.ts.map +1 -0
- package/public/server/mcp/execution.js +15 -0
- package/public/server/mcp/execution.js.map +1 -0
- package/public/server/openai/client.d.ts +23 -0
- package/public/server/openai/client.d.ts.map +1 -0
- package/public/server/openai/client.js +43 -0
- package/public/server/openai/client.js.map +1 -0
- package/public/server/startup/orcMcpHealthCheck.d.ts +8 -0
- package/public/server/startup/orcMcpHealthCheck.d.ts.map +1 -0
- package/public/server/startup/orcMcpHealthCheck.js +24 -0
- package/public/server/startup/orcMcpHealthCheck.js.map +1 -0
- package/public/services/config.service.d.ts +2 -0
- package/public/services/config.service.d.ts.map +1 -0
- package/public/services/config.service.js +3 -0
- package/public/services/config.service.js.map +1 -0
- package/public/services/index.d.ts +20 -0
- package/public/services/index.d.ts.map +1 -0
- package/public/services/index.js +21 -0
- package/public/services/index.js.map +1 -0
- package/public/services/issues.service.d.ts +2 -0
- package/public/services/issues.service.d.ts.map +1 -0
- package/public/services/issues.service.js +3 -0
- package/public/services/issues.service.js.map +1 -0
- package/public/services/jiraBootstrap.d.ts +18 -0
- package/public/services/jiraBootstrap.d.ts.map +1 -0
- package/public/services/jiraBootstrap.js +288 -0
- package/public/services/jiraBootstrap.js.map +1 -0
- package/public/services/jiraProjectCheck.d.ts +60 -0
- package/public/services/jiraProjectCheck.d.ts.map +1 -0
- package/public/services/jiraProjectCheck.js +264 -0
- package/public/services/jiraProjectCheck.js.map +1 -0
- package/public/services/prompts.service.d.ts +2 -0
- package/public/services/prompts.service.d.ts.map +1 -0
- package/public/services/prompts.service.js +3 -0
- package/public/services/prompts.service.js.map +1 -0
- package/public/services/sync.service.d.ts +2 -0
- package/public/services/sync.service.d.ts.map +1 -0
- package/public/services/sync.service.js +3 -0
- package/public/services/sync.service.js.map +1 -0
- package/public/shared/migrations/bugsMigrations.d.ts +46 -0
- package/public/shared/migrations/bugsMigrations.d.ts.map +1 -0
- package/public/shared/migrations/bugsMigrations.js +252 -0
- package/public/shared/migrations/bugsMigrations.js.map +1 -0
- package/public/shared/migrations/ticketMateMigrations.d.ts +53 -0
- package/public/shared/migrations/ticketMateMigrations.d.ts.map +1 -0
- package/public/shared/migrations/ticketMateMigrations.js +223 -0
- package/public/shared/migrations/ticketMateMigrations.js.map +1 -0
- package/public/shared/ticketMateHelpers.d.ts +46 -0
- package/public/shared/ticketMateHelpers.d.ts.map +1 -0
- package/public/shared/ticketMateHelpers.js +197 -0
- package/public/shared/ticketMateHelpers.js.map +1 -0
- package/public/shared/ticketMateProjectLinks.d.ts +27 -0
- package/public/shared/ticketMateProjectLinks.d.ts.map +1 -0
- package/public/shared/ticketMateProjectLinks.js +64 -0
- package/public/shared/ticketMateProjectLinks.js.map +1 -0
- package/public/shared/ticketMateTypes.d.ts +155 -0
- package/public/shared/ticketMateTypes.d.ts.map +1 -0
- package/public/shared/ticketMateTypes.js +56 -0
- package/public/shared/ticketMateTypes.js.map +1 -0
- package/public/sync/authoritative-sync.d.ts +111 -0
- package/public/sync/authoritative-sync.d.ts.map +1 -0
- package/public/sync/authoritative-sync.js +459 -0
- package/public/sync/authoritative-sync.js.map +1 -0
- package/public/sync/ensure-jira-before-md.d.ts +34 -0
- package/public/sync/ensure-jira-before-md.d.ts.map +1 -0
- package/public/sync/ensure-jira-before-md.js +40 -0
- package/public/sync/ensure-jira-before-md.js.map +1 -0
- package/public/sync/epic-sync.d.ts +23 -0
- package/public/sync/epic-sync.d.ts.map +1 -0
- package/public/sync/epic-sync.js +77 -0
- package/public/sync/epic-sync.js.map +1 -0
- package/public/sync/index.d.ts +11 -0
- package/public/sync/index.d.ts.map +1 -0
- package/public/sync/index.js +92 -0
- package/public/sync/index.js.map +1 -0
- package/public/sync/reports.d.ts +9 -0
- package/public/sync/reports.d.ts.map +1 -0
- package/public/sync/reports.js +55 -0
- package/public/sync/reports.js.map +1 -0
- package/public/sync/status.d.ts +31 -0
- package/public/sync/status.d.ts.map +1 -0
- package/public/sync/status.js +100 -0
- package/public/sync/status.js.map +1 -0
- package/public/sync/sync-engine.d.ts +38 -0
- package/public/sync/sync-engine.d.ts.map +1 -0
- package/public/sync/sync-engine.js +166 -0
- package/public/sync/sync-engine.js.map +1 -0
- package/public/sync/ticket-sync.d.ts +25 -0
- package/public/sync/ticket-sync.d.ts.map +1 -0
- package/public/sync/ticket-sync.js +148 -0
- package/public/sync/ticket-sync.js.map +1 -0
- package/public/templates/template-engine.d.ts +86 -0
- package/public/templates/template-engine.d.ts.map +1 -0
- package/public/templates/template-engine.js +214 -0
- package/public/templates/template-engine.js.map +1 -0
- package/public/ticket-mate/bugs/loader.d.ts +30 -0
- package/public/ticket-mate/bugs/loader.d.ts.map +1 -0
- package/public/ticket-mate/bugs/loader.js +242 -0
- package/public/ticket-mate/bugs/loader.js.map +1 -0
- package/public/ticket-mate/bugs/paths.d.ts +12 -0
- package/public/ticket-mate/bugs/paths.d.ts.map +1 -0
- package/public/ticket-mate/bugs/paths.js +17 -0
- package/public/ticket-mate/bugs/paths.js.map +1 -0
- package/public/ticket-mate/bugs/types.d.ts +99 -0
- package/public/ticket-mate/bugs/types.d.ts.map +1 -0
- package/public/ticket-mate/bugs/types.js +9 -0
- package/public/ticket-mate/bugs/types.js.map +1 -0
- package/public/ticket-mate/errors.d.ts +57 -0
- package/public/ticket-mate/errors.d.ts.map +1 -0
- package/public/ticket-mate/errors.js +98 -0
- package/public/ticket-mate/errors.js.map +1 -0
- package/public/ticket-mate/fsConfig.d.ts +34 -0
- package/public/ticket-mate/fsConfig.d.ts.map +1 -0
- package/public/ticket-mate/fsConfig.js +68 -0
- package/public/ticket-mate/fsConfig.js.map +1 -0
- package/public/ticket-mate/fsHelpers.d.ts +34 -0
- package/public/ticket-mate/fsHelpers.d.ts.map +1 -0
- package/public/ticket-mate/fsHelpers.js +199 -0
- package/public/ticket-mate/fsHelpers.js.map +1 -0
- package/public/ticket-mate/fsLayout.d.ts +115 -0
- package/public/ticket-mate/fsLayout.d.ts.map +1 -0
- package/public/ticket-mate/fsLayout.js +282 -0
- package/public/ticket-mate/fsLayout.js.map +1 -0
- package/public/ticket-mate/fsTickets.d.ts +62 -0
- package/public/ticket-mate/fsTickets.d.ts.map +1 -0
- package/public/ticket-mate/fsTickets.js +303 -0
- package/public/ticket-mate/fsTickets.js.map +1 -0
- package/public/ticket-mate/replitWebhook.d.ts +13 -0
- package/public/ticket-mate/replitWebhook.d.ts.map +1 -0
- package/public/ticket-mate/replitWebhook.js +102 -0
- package/public/ticket-mate/replitWebhook.js.map +1 -0
- package/public/ticket-mate/types.d.ts +89 -0
- package/public/ticket-mate/types.d.ts.map +1 -0
- package/public/ticket-mate/types.js +11 -0
- package/public/ticket-mate/types.js.map +1 -0
- package/public/ticket-mate/webhookSigning.d.ts +12 -0
- package/public/ticket-mate/webhookSigning.d.ts.map +1 -0
- package/public/ticket-mate/webhookSigning.js +21 -0
- package/public/ticket-mate/webhookSigning.js.map +1 -0
- package/public/types/common.d.ts +59 -0
- package/public/types/common.d.ts.map +1 -0
- package/public/types/common.js +28 -0
- package/public/types/common.js.map +1 -0
- package/public/types/workflow.d.ts +35 -0
- package/public/types/workflow.d.ts.map +1 -0
- package/public/types/workflow.js +2 -0
- package/public/types/workflow.js.map +1 -0
- package/public/types.d.ts +311 -0
- package/public/types.d.ts.map +1 -0
- package/public/types.js +5 -0
- package/public/types.js.map +1 -0
- package/public/utils/adf.d.ts +45 -0
- package/public/utils/adf.d.ts.map +1 -0
- package/public/utils/adf.js +197 -0
- package/public/utils/adf.js.map +1 -0
- package/public/utils/bug-reporter.d.ts +39 -0
- package/public/utils/bug-reporter.d.ts.map +1 -0
- package/public/utils/bug-reporter.js +189 -0
- package/public/utils/bug-reporter.js.map +1 -0
- package/public/utils/filesystem.d.ts +32 -0
- package/public/utils/filesystem.d.ts.map +1 -0
- package/public/utils/filesystem.js +78 -0
- package/public/utils/filesystem.js.map +1 -0
- package/public/utils/formatCurrency.d.ts +11 -0
- package/public/utils/formatCurrency.d.ts.map +1 -0
- package/public/utils/formatCurrency.js +27 -0
- package/public/utils/formatCurrency.js.map +1 -0
- package/public/utils/instruction-writer.d.ts +35 -0
- package/public/utils/instruction-writer.d.ts.map +1 -0
- package/public/utils/instruction-writer.js +84 -0
- package/public/utils/instruction-writer.js.map +1 -0
- package/public/utils/jira-keys.d.ts +26 -0
- package/public/utils/jira-keys.d.ts.map +1 -0
- package/public/utils/jira-keys.js +46 -0
- package/public/utils/jira-keys.js.map +1 -0
- package/public/utils/jiraAvatar.d.ts +20 -0
- package/public/utils/jiraAvatar.d.ts.map +1 -0
- package/public/utils/jiraAvatar.js +78 -0
- package/public/utils/jiraAvatar.js.map +1 -0
- package/public/utils/logger.d.ts +33 -0
- package/public/utils/logger.d.ts.map +1 -0
- package/public/utils/logger.js +73 -0
- package/public/utils/logger.js.map +1 -0
- package/public/utils/path-migration.d.ts +7 -0
- package/public/utils/path-migration.d.ts.map +1 -0
- package/public/utils/path-migration.js +57 -0
- package/public/utils/path-migration.js.map +1 -0
- package/public/utils/progress-reporter.d.ts +39 -0
- package/public/utils/progress-reporter.d.ts.map +1 -0
- package/public/utils/progress-reporter.js +66 -0
- package/public/utils/progress-reporter.js.map +1 -0
- package/public/utils/project-code-generator.d.ts +88 -0
- package/public/utils/project-code-generator.d.ts.map +1 -0
- package/public/utils/project-code-generator.js +212 -0
- package/public/utils/project-code-generator.js.map +1 -0
- package/public/utils/retry.d.ts +20 -0
- package/public/utils/retry.d.ts.map +1 -0
- package/public/utils/retry.js +82 -0
- package/public/utils/retry.js.map +1 -0
- package/public/utils/slugify.d.ts +5 -0
- package/public/utils/slugify.d.ts.map +1 -0
- package/public/utils/slugify.js +13 -0
- package/public/utils/slugify.js.map +1 -0
- package/public/utils/string.d.ts +8 -0
- package/public/utils/string.d.ts.map +1 -0
- package/public/utils/string.js +19 -0
- package/public/utils/string.js.map +1 -0
- package/public/utils/ticket-template.d.ts +28 -0
- package/public/utils/ticket-template.d.ts.map +1 -0
- package/public/utils/ticket-template.js +55 -0
- package/public/utils/ticket-template.js.map +1 -0
- package/public/utils/validation.d.ts +33 -0
- package/public/utils/validation.d.ts.map +1 -0
- package/public/utils/validation.js +86 -0
- package/public/utils/validation.js.map +1 -0
- package/public/validation/brief-validator.d.ts +55 -0
- package/public/validation/brief-validator.d.ts.map +1 -0
- package/public/validation/brief-validator.js +168 -0
- package/public/validation/brief-validator.js.map +1 -0
- package/public/validation/ticket-validator.d.ts +47 -0
- package/public/validation/ticket-validator.d.ts.map +1 -0
- package/public/validation/ticket-validator.js +155 -0
- package/public/validation/ticket-validator.js.map +1 -0
- package/public/webhooks/assignment-handler.d.ts +33 -0
- package/public/webhooks/assignment-handler.d.ts.map +1 -0
- package/public/webhooks/assignment-handler.js +187 -0
- package/public/webhooks/assignment-handler.js.map +1 -0
- package/public/webhooks/in-progress-handler.d.ts +36 -0
- package/public/webhooks/in-progress-handler.d.ts.map +1 -0
- package/public/webhooks/in-progress-handler.js +170 -0
- package/public/webhooks/in-progress-handler.js.map +1 -0
- package/public/webhooks/orchestrator-notifier.d.ts +42 -0
- package/public/webhooks/orchestrator-notifier.d.ts.map +1 -0
- package/public/webhooks/orchestrator-notifier.js +84 -0
- package/public/webhooks/orchestrator-notifier.js.map +1 -0
- package/public/webhooks/ticket-created-handler.d.ts +33 -0
- package/public/webhooks/ticket-created-handler.d.ts.map +1 -0
- package/public/webhooks/ticket-created-handler.js +150 -0
- package/public/webhooks/ticket-created-handler.js.map +1 -0
- package/public/webhooks/webhook-handler.d.ts +81 -0
- package/public/webhooks/webhook-handler.d.ts.map +1 -0
- package/public/webhooks/webhook-handler.js +186 -0
- package/public/webhooks/webhook-handler.js.map +1 -0
- package/public/webhooks/webhook-security.d.ts +58 -0
- package/public/webhooks/webhook-security.d.ts.map +1 -0
- package/public/webhooks/webhook-security.js +258 -0
- package/public/webhooks/webhook-security.js.map +1 -0
- package/public/workers/teams-delivery-worker.d.ts +91 -0
- package/public/workers/teams-delivery-worker.d.ts.map +1 -0
- package/public/workers/teams-delivery-worker.js +328 -0
- package/public/workers/teams-delivery-worker.js.map +1 -0
- package/scripts/cli-wrapper.mjs +28 -0
|
@@ -0,0 +1,893 @@
|
|
|
1
|
+
import AtlassianProvider from "next-auth/providers/atlassian";
|
|
2
|
+
import GitHubProvider from "next-auth/providers/github";
|
|
3
|
+
import GoogleProvider from "next-auth/providers/google";
|
|
4
|
+
import AppleProvider from "next-auth/providers/apple";
|
|
5
|
+
import CredentialsProvider from "next-auth/providers/credentials";
|
|
6
|
+
import { PrismaAdapter } from "@next-auth/prisma-adapter";
|
|
7
|
+
import { prisma } from "@/lib/prisma";
|
|
8
|
+
import { verifyPassword } from "@/lib/password";
|
|
9
|
+
import { encrypt } from "@/lib/encryption";
|
|
10
|
+
import { upsertUserFromAtlassianProfile, } from "@/server/auth/atlassian-user-mapping";
|
|
11
|
+
import { logJiraConnectEvent, getRemediationHint, } from "@/lib/events/jira-connect-events";
|
|
12
|
+
import { ensureAccountForUser, getPrimaryAccountId, } from "@/server/auth/account-provisioning";
|
|
13
|
+
/**
|
|
14
|
+
* Extract Atlassian identity from OAuth profile with fallback logic
|
|
15
|
+
*
|
|
16
|
+
* Atlassian returns different field names depending on the OAuth flow:
|
|
17
|
+
* - profile.id (common)
|
|
18
|
+
* - profile.account_id (OAuthProfile)
|
|
19
|
+
* - profile.accountId (legacy)
|
|
20
|
+
* - profile.sub (OIDC standard)
|
|
21
|
+
* - account.providerAccountId (NextAuth adapter)
|
|
22
|
+
*/
|
|
23
|
+
function getAtlassianIdentity({ profile, account, user, }) {
|
|
24
|
+
// Try all possible sources for accountId
|
|
25
|
+
const accountId = profile?.id ||
|
|
26
|
+
profile?.account_id ||
|
|
27
|
+
profile?.accountId ||
|
|
28
|
+
profile?.sub ||
|
|
29
|
+
account?.providerAccountId ||
|
|
30
|
+
"";
|
|
31
|
+
// Try all possible sources for email
|
|
32
|
+
const email = user?.email || profile?.email || profile?.emailAddress || "";
|
|
33
|
+
// Try all possible sources for name
|
|
34
|
+
const name = user?.name || profile?.name || profile?.displayName || null;
|
|
35
|
+
// Try all possible sources for picture
|
|
36
|
+
const picture = profile?.picture || profile?.avatarUrl || profile?.avatar || null;
|
|
37
|
+
// Validate we have the minimum required fields
|
|
38
|
+
if (!accountId || !email) {
|
|
39
|
+
console.error("[ticket-mate] ❌ Failed to extract Atlassian identity. Missing accountId or email.", {
|
|
40
|
+
hasAccountId: !!accountId,
|
|
41
|
+
hasEmail: !!email,
|
|
42
|
+
profileKeys: profile ? Object.keys(profile) : [],
|
|
43
|
+
accountKeys: account ? Object.keys(account) : [],
|
|
44
|
+
userKeys: user ? Object.keys(user) : [],
|
|
45
|
+
// Log full objects once for debugging (sanitize sensitive data)
|
|
46
|
+
profile: profile
|
|
47
|
+
? { ...profile, access_token: undefined, refresh_token: undefined }
|
|
48
|
+
: null,
|
|
49
|
+
});
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return { accountId, email, name, picture };
|
|
53
|
+
}
|
|
54
|
+
// Validate critical environment variables at module load time
|
|
55
|
+
// Skip validation in test environment (tests mock these dependencies or use different env setup)
|
|
56
|
+
const isTestEnv = process.env.NODE_ENV === "test" ||
|
|
57
|
+
typeof process.env.VITEST !== "undefined" ||
|
|
58
|
+
process.argv.some((arg) => arg.includes("vitest"));
|
|
59
|
+
const requiredEnvVars = {
|
|
60
|
+
NEXTAUTH_SECRET: process.env.NEXTAUTH_SECRET,
|
|
61
|
+
NEXTAUTH_URL: process.env.NEXTAUTH_URL,
|
|
62
|
+
DATABASE_URL: process.env.DATABASE_URL,
|
|
63
|
+
};
|
|
64
|
+
const missingVars = Object.entries(requiredEnvVars)
|
|
65
|
+
.filter(([_, value]) => !value)
|
|
66
|
+
.map(([key]) => key);
|
|
67
|
+
if (missingVars.length > 0 && !isTestEnv) {
|
|
68
|
+
console.error("[ticket-mate] ⚠️ Missing required environment variables:", missingVars.join(", "));
|
|
69
|
+
console.error("[ticket-mate] NextAuth will not work without these variables.");
|
|
70
|
+
console.error("[ticket-mate] Please set them in your .env.local file or Vercel environment variables.");
|
|
71
|
+
}
|
|
72
|
+
// Use ATLASSIAN_CLIENT_ID and ATLASSIAN_CLIENT_SECRET as canonical env vars
|
|
73
|
+
const atlassianClientId = process.env.ATLASSIAN_CLIENT_ID?.trim();
|
|
74
|
+
const atlassianClientSecret = process.env.ATLASSIAN_CLIENT_SECRET?.trim();
|
|
75
|
+
// Validate required Atlassian OAuth env vars
|
|
76
|
+
if (!atlassianClientId) {
|
|
77
|
+
console.warn("⚠️ ATLASSIAN_CLIENT_ID is not set. " +
|
|
78
|
+
"Atlassian OAuth will not work. " +
|
|
79
|
+
"Set ATLASSIAN_CLIENT_ID and ATLASSIAN_CLIENT_SECRET in your .env file.");
|
|
80
|
+
}
|
|
81
|
+
if (!atlassianClientSecret) {
|
|
82
|
+
console.warn("⚠️ ATLASSIAN_CLIENT_SECRET is not set. " +
|
|
83
|
+
"Atlassian OAuth will not work. " +
|
|
84
|
+
"Set ATLASSIAN_CLIENT_ID and ATLASSIAN_CLIENT_SECRET in your .env file.");
|
|
85
|
+
}
|
|
86
|
+
// Check if GitHub OAuth is enabled (only log once at startup, not on every request)
|
|
87
|
+
const githubEnabled = !!(process.env.GITHUB_CLIENT_ID && process.env.GITHUB_CLIENT_SECRET);
|
|
88
|
+
/**
|
|
89
|
+
* Jira OAuth Scopes Configuration
|
|
90
|
+
*
|
|
91
|
+
* Two-tier scope design:
|
|
92
|
+
* 1. BASELINE scopes: Minimal set required for login and basic Jira read access
|
|
93
|
+
* 2. ELEVATED scopes: Additional admin permissions for workspace management
|
|
94
|
+
*
|
|
95
|
+
* Use ATLASSIAN_USE_ELEVATED_SCOPES=true to request elevated scopes.
|
|
96
|
+
* Start with baseline scopes (default) to ensure consent works, then enable elevated scopes
|
|
97
|
+
* after confirming your Atlassian app is configured for those permissions.
|
|
98
|
+
*/
|
|
99
|
+
// Baseline scopes: Minimal set for login and basic Jira read access
|
|
100
|
+
// These scopes almost always work and don't require special Atlassian app configuration
|
|
101
|
+
export const BASELINE_JIRA_SCOPES = [
|
|
102
|
+
"offline_access", // Required for refresh tokens
|
|
103
|
+
"read:me", // Read current user profile
|
|
104
|
+
"read:account", // Read account information
|
|
105
|
+
"read:jira-user", // Read Jira user information
|
|
106
|
+
"read:jira-work", // Read Jira issues and work items
|
|
107
|
+
"write:jira-work", // Create/update Jira issues
|
|
108
|
+
].join(" ");
|
|
109
|
+
// Elevated scopes: Additional permissions for workspace management and admin operations
|
|
110
|
+
// These scopes require your Atlassian app to be configured with the appropriate permissions
|
|
111
|
+
export const ELEVATED_JIRA_SCOPES = [
|
|
112
|
+
...BASELINE_JIRA_SCOPES.split(" "),
|
|
113
|
+
"write:jira-work", // Create/update Jira issues
|
|
114
|
+
"manage:jira-project", // Manage Jira projects
|
|
115
|
+
"manage:jira-configuration", // Manage Jira configuration
|
|
116
|
+
"manage:jira-webhook", // Manage Jira webhooks
|
|
117
|
+
"manage:jira-data-provider", // Manage Jira data providers
|
|
118
|
+
].join(" ");
|
|
119
|
+
// Determine which scope set to use
|
|
120
|
+
// Default to BASELINE for maximum compatibility
|
|
121
|
+
// Set ATLASSIAN_USE_ELEVATED_SCOPES=true to request elevated permissions
|
|
122
|
+
const useElevatedScopes = process.env.ATLASSIAN_USE_ELEVATED_SCOPES === "true";
|
|
123
|
+
const jiraScopes = useElevatedScopes
|
|
124
|
+
? ELEVATED_JIRA_SCOPES
|
|
125
|
+
: BASELINE_JIRA_SCOPES;
|
|
126
|
+
// Log minimal config info
|
|
127
|
+
if (process.env.NODE_ENV === "development") {
|
|
128
|
+
console.log(`[ticket-mate] Jira Scopes: ${useElevatedScopes ? "ELEVATED" : "BASELINE"}`);
|
|
129
|
+
}
|
|
130
|
+
// Log Atlassian OAuth config in all environments to debug production issues
|
|
131
|
+
// This helps identify when NEXTAUTH_URL is misconfigured (e.g., localhost in production)
|
|
132
|
+
const nextAuthUrl = process.env.NEXTAUTH_URL?.trim();
|
|
133
|
+
// Enforce callback path normalization (ANTIGRAVITY DIRECTIVE)
|
|
134
|
+
if (!nextAuthUrl) {
|
|
135
|
+
console.error("[ticket-mate] 🚨 NEXTAUTH_URL is missing! Hard failing.");
|
|
136
|
+
if (process.env.NODE_ENV === "production") {
|
|
137
|
+
throw new Error("NEXTAUTH_URL must be set in production");
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
const expectedCallbackPath = "/api/auth/callback/atlassian";
|
|
141
|
+
const callbackUrl = nextAuthUrl
|
|
142
|
+
? `${nextAuthUrl}${expectedCallbackPath}`
|
|
143
|
+
: "(NEXTAUTH_URL not set)";
|
|
144
|
+
console.log("[ticket-mate] 🔒 Atlassian OAuth Configuration:");
|
|
145
|
+
console.log(`[ticket-mate] Provider ID: atlassian`);
|
|
146
|
+
console.log(`[ticket-mate] Callback Path: ${expectedCallbackPath}`);
|
|
147
|
+
console.log(`[ticket-mate] Full Callback URL: ${callbackUrl}`);
|
|
148
|
+
console.log(`[ticket-mate] NEXTAUTH_URL: ${nextAuthUrl}`);
|
|
149
|
+
const githubCallbackPath = "/api/auth/callback/github";
|
|
150
|
+
const githubCallbackUrl = nextAuthUrl
|
|
151
|
+
? `${nextAuthUrl}${githubCallbackPath}`
|
|
152
|
+
: "(NEXTAUTH_URL not set)";
|
|
153
|
+
console.log("[ticket-mate] 🐙 GitHub OAuth Configuration:");
|
|
154
|
+
console.log(`[ticket-mate] Provider ID: github`);
|
|
155
|
+
console.log(`[ticket-mate] Enabled: ${githubEnabled}`);
|
|
156
|
+
console.log(`[ticket-mate] Callback Path: ${githubCallbackPath}`);
|
|
157
|
+
console.log(`[ticket-mate] Full Callback URL: ${githubCallbackUrl}`);
|
|
158
|
+
console.log(`[ticket-mate] Client ID Set: ${!!process.env.GITHUB_CLIENT_ID}`);
|
|
159
|
+
// Hard validation of environment
|
|
160
|
+
if (nextAuthUrl &&
|
|
161
|
+
nextAuthUrl.includes("localhost") &&
|
|
162
|
+
process.env.NODE_ENV === "production") {
|
|
163
|
+
console.error("[ticket-mate] 🚨 NEXTAUTH_URL is localhost in PRODUCTION! This will break OAuth.");
|
|
164
|
+
}
|
|
165
|
+
// Check if we're actually in a production deployment (Vercel sets VERCEL=1)
|
|
166
|
+
const isProductionDeployment = process.env.VERCEL === "1" || process.env.VERCEL_ENV === "production";
|
|
167
|
+
const isLocalBuild = !isProductionDeployment && process.env.NODE_ENV === "production";
|
|
168
|
+
/**
|
|
169
|
+
* NextAuth Configuration
|
|
170
|
+
*
|
|
171
|
+
* IMPORTANT: NextAuth v4 does NOT support a `url` property in authOptions.
|
|
172
|
+
* The base URL is controlled by the NEXTAUTH_URL environment variable.
|
|
173
|
+
*
|
|
174
|
+
* NextAuth automatically constructs callback URLs as:
|
|
175
|
+
* ${NEXTAUTH_URL}/api/auth/callback/atlassian
|
|
176
|
+
*
|
|
177
|
+
* This must match EXACTLY what's registered in Atlassian Developer Console.
|
|
178
|
+
* The callback URL is derived from NEXTAUTH_URL environment variable.
|
|
179
|
+
*
|
|
180
|
+
* Environment Configuration:
|
|
181
|
+
* - Local dev (.env.local): NEXTAUTH_URL="http://localhost:4000"
|
|
182
|
+
* - Vercel production: Set NEXTAUTH_URL="https://ticket-mate.app" in Vercel dashboard
|
|
183
|
+
*
|
|
184
|
+
* NOTE: Do not test /api/auth/callback/atlassian directly.
|
|
185
|
+
* It must be reached via the "Sign in with Jira" button,
|
|
186
|
+
* so NextAuth can set and validate the state cookie correctly.
|
|
187
|
+
*/
|
|
188
|
+
// Validate NEXTAUTH_SECRET (required for NextAuth to work)
|
|
189
|
+
if (!process.env.NEXTAUTH_SECRET) {
|
|
190
|
+
console.error("[ticket-mate] ⚠️ NEXTAUTH_SECRET is not set! NextAuth will not work.");
|
|
191
|
+
console.error("[ticket-mate] Set NEXTAUTH_SECRET in your environment:");
|
|
192
|
+
console.error("[ticket-mate] - Generate a secret: openssl rand -base64 32");
|
|
193
|
+
console.error('[ticket-mate] - Add to .env.local: NEXTAUTH_SECRET="your-secret-here"');
|
|
194
|
+
console.error("[ticket-mate] - For production: Set in Vercel dashboard → Environment Variables");
|
|
195
|
+
}
|
|
196
|
+
export const authOptions = {
|
|
197
|
+
adapter: PrismaAdapter(prisma),
|
|
198
|
+
secret: process.env.NEXTAUTH_SECRET, // Required for JWT signing
|
|
199
|
+
session: {
|
|
200
|
+
strategy: "jwt", // Use JWT even with adapter for better control
|
|
201
|
+
},
|
|
202
|
+
// NextAuth automatically uses secure cookies when NEXTAUTH_URL starts with https://
|
|
203
|
+
providers: [
|
|
204
|
+
CredentialsProvider({
|
|
205
|
+
name: "Credentials",
|
|
206
|
+
credentials: {
|
|
207
|
+
email: { label: "Email", type: "email" },
|
|
208
|
+
password: { label: "Password", type: "password" },
|
|
209
|
+
},
|
|
210
|
+
async authorize(credentials) {
|
|
211
|
+
try {
|
|
212
|
+
console.log("[ticket-mate] CredentialsProvider: authorize called for email:", credentials?.email);
|
|
213
|
+
if (!credentials?.email || !credentials?.password) {
|
|
214
|
+
console.log("[ticket-mate] CredentialsProvider: Missing email or password");
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
let user;
|
|
218
|
+
try {
|
|
219
|
+
console.log("[ticket-mate] CredentialsProvider: Looking up user in database...");
|
|
220
|
+
console.log("[ticket-mate] Database connection:", {
|
|
221
|
+
url: process.env.DATABASE_URL
|
|
222
|
+
? process.env.DATABASE_URL.replace(/:[^:@]+@/, ":****@")
|
|
223
|
+
: "(not set)",
|
|
224
|
+
});
|
|
225
|
+
user = await prisma.user.findUnique({
|
|
226
|
+
where: { email: credentials.email },
|
|
227
|
+
});
|
|
228
|
+
console.log("[ticket-mate] CredentialsProvider: User lookup result:", user ? `Found user ID: ${user.id}` : "User not found");
|
|
229
|
+
}
|
|
230
|
+
catch (dbError) {
|
|
231
|
+
console.error("[ticket-mate] Database error in CredentialsProvider:", dbError);
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
if (!user) {
|
|
235
|
+
// User not found - don't reveal this to prevent email enumeration
|
|
236
|
+
console.log("[ticket-mate] CredentialsProvider: User not found (silent return)");
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
// Check if user has a password set (for local auth)
|
|
240
|
+
if (!user.hashedPassword) {
|
|
241
|
+
// User exists but no password set - they need to use OAuth or set a password
|
|
242
|
+
console.log("[ticket-mate] CredentialsProvider: User has no password set, must use OAuth");
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
// Check if email is verified (allow login if emailVerified is null for backward compatibility)
|
|
246
|
+
// TODO: Implement email verification flow if required
|
|
247
|
+
// For now, we allow login even if emailVerified is null to support existing users
|
|
248
|
+
// if (!user.emailVerified) {
|
|
249
|
+
// console.log('[ticket-mate] CredentialsProvider: Email not verified for', credentials.email);
|
|
250
|
+
// throw new Error('Please verify your email address before signing in.');
|
|
251
|
+
// }
|
|
252
|
+
// Verify password
|
|
253
|
+
console.log("[ticket-mate] CredentialsProvider: Verifying password...");
|
|
254
|
+
const isValid = await verifyPassword(credentials.password, user.hashedPassword);
|
|
255
|
+
if (!isValid) {
|
|
256
|
+
console.log("[ticket-mate] CredentialsProvider: Password verification failed for", credentials.email);
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
console.log("[ticket-mate] CredentialsProvider: Login successful for", credentials.email, "userId:", user.id);
|
|
260
|
+
// Return user object for NextAuth
|
|
261
|
+
return {
|
|
262
|
+
id: user.id,
|
|
263
|
+
email: user.email,
|
|
264
|
+
name: user.name || undefined,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
console.error("[ticket-mate] CredentialsProvider authorize error:", error);
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
}),
|
|
273
|
+
// GitHub OAuth App (NextAuth) - for user login and identity
|
|
274
|
+
// Purpose: User authentication, consent, mapping GitHub user → internal User
|
|
275
|
+
// Callback URL: https://ticket-mate.app/api/auth/callback/github (handled by NextAuth)
|
|
276
|
+
//
|
|
277
|
+
// IMPORTANT: This is separate from GitHub App (installation/automation)
|
|
278
|
+
// - OAuth App = Human identity + consent
|
|
279
|
+
// - GitHub App = System authority (repos, PRs, automation)
|
|
280
|
+
// Never use OAuth tokens for repo mutations in production
|
|
281
|
+
...(githubEnabled
|
|
282
|
+
? [
|
|
283
|
+
GitHubProvider({
|
|
284
|
+
clientId: process.env.GITHUB_CLIENT_ID,
|
|
285
|
+
clientSecret: process.env.GITHUB_CLIENT_SECRET,
|
|
286
|
+
allowDangerousEmailAccountLinking: true, // Allow linking accounts with same email
|
|
287
|
+
authorization: {
|
|
288
|
+
params: {
|
|
289
|
+
scope: "read:user user:email repo",
|
|
290
|
+
},
|
|
291
|
+
},
|
|
292
|
+
// NextAuth automatically constructs callback URL as:
|
|
293
|
+
// ${NEXTAUTH_URL}/api/auth/callback/github
|
|
294
|
+
// This must match what's configured in GitHub OAuth App settings
|
|
295
|
+
}),
|
|
296
|
+
]
|
|
297
|
+
: []),
|
|
298
|
+
AtlassianProvider({
|
|
299
|
+
/**
|
|
300
|
+
* Jira/Atlassian OAuth Provider Configuration
|
|
301
|
+
*
|
|
302
|
+
* Uses ATLASSIAN_CLIENT_ID and ATLASSIAN_CLIENT_SECRET env vars.
|
|
303
|
+
* These must be set in your environment:
|
|
304
|
+
* - ATLASSIAN_CLIENT_ID - must match Atlassian Developer Console Client ID exactly
|
|
305
|
+
* - ATLASSIAN_CLIENT_SECRET - from same Atlassian app
|
|
306
|
+
* - NEXTAUTH_URL (REQUIRED - no default, must be set per environment)
|
|
307
|
+
* - ATLASSIAN_USE_ELEVATED_SCOPES (optional) - set to "true" to request admin scopes
|
|
308
|
+
*
|
|
309
|
+
* The callback URL is automatically constructed by NextAuth as:
|
|
310
|
+
* ${NEXTAUTH_URL}/api/auth/callback/atlassian
|
|
311
|
+
*
|
|
312
|
+
* Atlassian Developer Console Configuration:
|
|
313
|
+
* - Go to: https://developer.atlassian.com/console/myapps/
|
|
314
|
+
* - Select your TICKET MATE app → Authorization → OAuth 2.0 (3LO)
|
|
315
|
+
* - Client ID must match ATLASSIAN_CLIENT_ID exactly
|
|
316
|
+
* - Callback URLs (one per line, EXACT match, no trailing slash):
|
|
317
|
+
* * http://localhost:4000/api/auth/callback/atlassian
|
|
318
|
+
* * https://ticket-mate.app/api/auth/callback/atlassian
|
|
319
|
+
* - Permissions: Ensure your app has the permissions for the requested scopes
|
|
320
|
+
* * Baseline scopes: Usually work by default
|
|
321
|
+
* * Elevated scopes: Require explicit permission configuration in Atlassian
|
|
322
|
+
*
|
|
323
|
+
* Scope Configuration:
|
|
324
|
+
* - Default: BASELINE scopes (read-only, recommended for initial setup)
|
|
325
|
+
* - Elevated: Set ATLASSIAN_USE_ELEVATED_SCOPES=true for admin permissions
|
|
326
|
+
* - If consent fails, start with baseline scopes and add elevated scopes incrementally
|
|
327
|
+
*/
|
|
328
|
+
id: "atlassian",
|
|
329
|
+
clientId: atlassianClientId,
|
|
330
|
+
clientSecret: atlassianClientSecret,
|
|
331
|
+
authorization: {
|
|
332
|
+
url: "https://auth.atlassian.com/authorize",
|
|
333
|
+
params: {
|
|
334
|
+
audience: "api.atlassian.com",
|
|
335
|
+
prompt: "consent",
|
|
336
|
+
// NextAuth will automatically add: client_id, redirect_uri, response_type=code
|
|
337
|
+
scope: jiraScopes,
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
token: "https://auth.atlassian.com/oauth/token",
|
|
341
|
+
allowDangerousEmailAccountLinking: true,
|
|
342
|
+
}),
|
|
343
|
+
GoogleProvider({
|
|
344
|
+
clientId: process.env.GOOGLE_CLIENT_ID ?? "",
|
|
345
|
+
clientSecret: process.env.GOOGLE_CLIENT_SECRET ?? "",
|
|
346
|
+
allowDangerousEmailAccountLinking: true,
|
|
347
|
+
}),
|
|
348
|
+
AppleProvider({
|
|
349
|
+
clientId: process.env.APPLE_ID ?? "",
|
|
350
|
+
clientSecret: process.env.APPLE_SECRET ?? "",
|
|
351
|
+
allowDangerousEmailAccountLinking: true,
|
|
352
|
+
}),
|
|
353
|
+
],
|
|
354
|
+
callbacks: {
|
|
355
|
+
// redirect callback moved to avoid duplication - see below
|
|
356
|
+
async jwt({ token, account, user, profile }) {
|
|
357
|
+
// On first sign-in (when account and user are present), map Atlassian profile to internal User
|
|
358
|
+
if (account && user && account.provider === "atlassian" && profile) {
|
|
359
|
+
try {
|
|
360
|
+
// Extract Atlassian profile data using helper with fallback logic
|
|
361
|
+
const identity = getAtlassianIdentity({ profile, account, user });
|
|
362
|
+
if (!identity) {
|
|
363
|
+
console.error("[ticket-mate] ❌ JWT callback: Failed to extract Atlassian identity");
|
|
364
|
+
// Don't block token creation - use what we have from user object
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
// Construct AtlassianProfile for upsert
|
|
368
|
+
const atlassianProfile = {
|
|
369
|
+
accountId: identity.accountId,
|
|
370
|
+
email: identity.email,
|
|
371
|
+
name: identity.name,
|
|
372
|
+
picture: identity.picture,
|
|
373
|
+
avatarUrl: identity.picture,
|
|
374
|
+
};
|
|
375
|
+
// Upsert user from Atlassian profile - this ensures we have an internal User id
|
|
376
|
+
const internalUserId = await upsertUserFromAtlassianProfile(atlassianProfile);
|
|
377
|
+
// Store internal User id in token (this is the Prisma pk, not Atlassian account id)
|
|
378
|
+
token.userId = internalUserId;
|
|
379
|
+
token.id = String(internalUserId);
|
|
380
|
+
token.email = atlassianProfile.email;
|
|
381
|
+
token.name = atlassianProfile.name || atlassianProfile.email;
|
|
382
|
+
token.atlassianAccountId = atlassianProfile.accountId; // Store for reference only
|
|
383
|
+
console.log("[ticket-mate] Atlassian profile mapped to User:", {
|
|
384
|
+
atlassianAccountId: atlassianProfile.accountId,
|
|
385
|
+
internalUserId,
|
|
386
|
+
email: atlassianProfile.email,
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
console.error("[ticket-mate] Error mapping Atlassian profile in jwt callback:", error);
|
|
392
|
+
// Don't block token creation - use what we have
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
// Ensure token.userId is set if user object is present (standard login)
|
|
396
|
+
// This must happen BEFORE processing account-specific logic below (like GitHub credential storage)
|
|
397
|
+
if (user) {
|
|
398
|
+
if (!token.userId) {
|
|
399
|
+
token.userId = user.id;
|
|
400
|
+
token.id = String(user.id);
|
|
401
|
+
console.log("[ticket-mate] JWT callback: Set userId from user object:", user.id, "(type:", typeof user.id, ")");
|
|
402
|
+
}
|
|
403
|
+
if (!token.email && user.email) {
|
|
404
|
+
token.email = user.email || undefined;
|
|
405
|
+
}
|
|
406
|
+
if (!token.name && user.name) {
|
|
407
|
+
token.name = user.name || undefined;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
if (account) {
|
|
411
|
+
// Store provider-specific tokens (for reference, but adapter stores in DB)
|
|
412
|
+
if (account.provider === "github") {
|
|
413
|
+
token.githubAccessToken = account.access_token;
|
|
414
|
+
// GITHUB-1: Store GitHub credentials persistently
|
|
415
|
+
if (token.userId && account.access_token) {
|
|
416
|
+
console.log("[ticket-mate] 💾 Storing GitHub credentials...");
|
|
417
|
+
const { encrypt } = await import("@/lib/encryption");
|
|
418
|
+
const encryptedToken = encrypt(account.access_token);
|
|
419
|
+
const encryptedRefreshToken = account.refresh_token
|
|
420
|
+
? encrypt(account.refresh_token)
|
|
421
|
+
: null;
|
|
422
|
+
const githubProfile = profile;
|
|
423
|
+
const userIdStr = String(token.userId);
|
|
424
|
+
await prisma.gitHubCredential.upsert({
|
|
425
|
+
where: { userId: userIdStr },
|
|
426
|
+
create: {
|
|
427
|
+
userId: userIdStr,
|
|
428
|
+
accessToken: encryptedToken,
|
|
429
|
+
refreshToken: encryptedRefreshToken,
|
|
430
|
+
scope: account.scope || null,
|
|
431
|
+
githubUserId: githubProfile.id ? parseInt(String(githubProfile.id)) : null,
|
|
432
|
+
githubLogin: githubProfile.login || null,
|
|
433
|
+
githubName: githubProfile.name || null,
|
|
434
|
+
githubEmail: githubProfile.email || null,
|
|
435
|
+
},
|
|
436
|
+
update: {
|
|
437
|
+
accessToken: encryptedToken,
|
|
438
|
+
refreshToken: encryptedRefreshToken,
|
|
439
|
+
scope: account.scope || null,
|
|
440
|
+
githubUserId: githubProfile.id ? parseInt(String(githubProfile.id)) : null,
|
|
441
|
+
githubLogin: githubProfile.login || null,
|
|
442
|
+
githubName: githubProfile.name || null,
|
|
443
|
+
githubEmail: githubProfile.email || null,
|
|
444
|
+
},
|
|
445
|
+
});
|
|
446
|
+
console.log("[ticket-mate] ✅ GitHub credentials stored");
|
|
447
|
+
token.hasGitHub = true;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
else if (account.provider === "atlassian") {
|
|
451
|
+
token.atlassianAccessToken = account.access_token;
|
|
452
|
+
token.atlassianRefreshToken = account.refresh_token;
|
|
453
|
+
if (typeof account.expires_at === "number") {
|
|
454
|
+
token.atlassianExpiresAt = account.expires_at * 1000;
|
|
455
|
+
}
|
|
456
|
+
// Store Atlassian account ID for reference (but use internal User id as primary)
|
|
457
|
+
token.atlassianAccountId =
|
|
458
|
+
token.atlassianAccountId || profile?.accountId;
|
|
459
|
+
// ANTIGRAVITY DIRECTIVE: Normalize Credential Storage
|
|
460
|
+
// Store Jira credentials immediately upon login/link to avoid needing a separate flow
|
|
461
|
+
console.log("[ticket-mate] 🔍 Jira credential storage check:", {
|
|
462
|
+
hasUserId: !!token.userId,
|
|
463
|
+
userId: token.userId,
|
|
464
|
+
hasAccessToken: !!account.access_token,
|
|
465
|
+
hasRefreshToken: !!account.refresh_token,
|
|
466
|
+
});
|
|
467
|
+
if (token.userId && account.access_token && account.refresh_token) {
|
|
468
|
+
console.log("[ticket-mate] ✅ All conditions met, attempting to store Jira credentials...");
|
|
469
|
+
// Log connect start event
|
|
470
|
+
await logJiraConnectEvent({
|
|
471
|
+
eventType: "jira.connect.start",
|
|
472
|
+
userId: String(token.userId),
|
|
473
|
+
metadata: {
|
|
474
|
+
atlassianCallbackUrlResolved: `${process.env.NEXTAUTH_URL}/api/auth/callback/atlassian`,
|
|
475
|
+
nextAuthUrlResolved: process.env.NEXTAUTH_URL,
|
|
476
|
+
},
|
|
477
|
+
});
|
|
478
|
+
try {
|
|
479
|
+
const userIdStr = String(token.userId);
|
|
480
|
+
// 1. Fetch accessible resources (Jira Cloud ID)
|
|
481
|
+
console.log("[ticket-mate] 📡 Fetching accessible Jira resources...");
|
|
482
|
+
const resourcesResponse = await fetch("https://api.atlassian.com/oauth/token/accessible-resources", {
|
|
483
|
+
headers: {
|
|
484
|
+
Authorization: `Bearer ${account.access_token}`,
|
|
485
|
+
Accept: "application/json",
|
|
486
|
+
},
|
|
487
|
+
});
|
|
488
|
+
console.log("[ticket-mate] 📡 Resources response status:", resourcesResponse.status);
|
|
489
|
+
if (resourcesResponse.ok) {
|
|
490
|
+
const resources = (await resourcesResponse.json());
|
|
491
|
+
console.log("[ticket-mate] 📡 Found", resources.length, "accessible resources");
|
|
492
|
+
const jiraResource = resources.find((r) => r.url.includes(".atlassian.net"));
|
|
493
|
+
if (jiraResource) {
|
|
494
|
+
console.log("[ticket-mate] 🎯 Found Jira resource:", {
|
|
495
|
+
id: jiraResource.id,
|
|
496
|
+
url: jiraResource.url,
|
|
497
|
+
name: jiraResource.name,
|
|
498
|
+
});
|
|
499
|
+
console.log("[ticket-mate] 🔐 Encrypting tokens...");
|
|
500
|
+
const encryptedAccessToken = encrypt(account.access_token);
|
|
501
|
+
const encryptedRefreshToken = encrypt(account.refresh_token);
|
|
502
|
+
console.log("[ticket-mate] ✅ Tokens encrypted successfully");
|
|
503
|
+
const expiresAt = typeof account.expires_at === "number"
|
|
504
|
+
? new Date(account.expires_at * 1000)
|
|
505
|
+
: new Date(Date.now() + 3600 * 1000);
|
|
506
|
+
// Ensure User exists before creating JiraCredential (prevents P2025)
|
|
507
|
+
const { ensureUserExists } = await import("../../server/jira/ensure-user");
|
|
508
|
+
await ensureUserExists(userIdStr);
|
|
509
|
+
console.log("[ticket-mate] 💾 Upserting Jira credential to database...");
|
|
510
|
+
await prisma.jiraCredential.upsert({
|
|
511
|
+
where: { userId: userIdStr },
|
|
512
|
+
create: {
|
|
513
|
+
userId: userIdStr,
|
|
514
|
+
cloudId: jiraResource.id,
|
|
515
|
+
jiraBaseUrl: jiraResource.url,
|
|
516
|
+
accessToken: encryptedAccessToken,
|
|
517
|
+
refreshToken: encryptedRefreshToken,
|
|
518
|
+
scope: account.scope || "",
|
|
519
|
+
expiresAt,
|
|
520
|
+
},
|
|
521
|
+
update: {
|
|
522
|
+
cloudId: jiraResource.id,
|
|
523
|
+
jiraBaseUrl: jiraResource.url,
|
|
524
|
+
accessToken: encryptedAccessToken,
|
|
525
|
+
refreshToken: encryptedRefreshToken,
|
|
526
|
+
scope: account.scope || "",
|
|
527
|
+
expiresAt,
|
|
528
|
+
},
|
|
529
|
+
});
|
|
530
|
+
console.log("[ticket-mate] ✅ ✅ ✅ Auto-stored Jira credentials for user:", userIdStr);
|
|
531
|
+
// Log success event
|
|
532
|
+
await logJiraConnectEvent({
|
|
533
|
+
eventType: "jira.connect.callback.success",
|
|
534
|
+
userId: userIdStr,
|
|
535
|
+
metadata: {
|
|
536
|
+
cloudId: jiraResource.id,
|
|
537
|
+
jiraBaseUrl: jiraResource.url,
|
|
538
|
+
scope: account.scope || "",
|
|
539
|
+
expiresAt,
|
|
540
|
+
},
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
else {
|
|
544
|
+
console.warn("[ticket-mate] ⚠️ No Jira resource found in accessible resources");
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
else {
|
|
548
|
+
console.error("[ticket-mate] ❌ Failed to fetch accessible resources:", resourcesResponse.statusText);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
catch (credError) {
|
|
552
|
+
console.error("[ticket-mate] ❌ Failed to auto-store Jira credential:", credError);
|
|
553
|
+
console.error("[ticket-mate] ❌ Error stack:", credError.stack);
|
|
554
|
+
// Log failure event
|
|
555
|
+
await logJiraConnectEvent({
|
|
556
|
+
eventType: "jira.connect.callback.failed",
|
|
557
|
+
userId: String(token.userId),
|
|
558
|
+
metadata: {
|
|
559
|
+
errorClass: credError.name,
|
|
560
|
+
errorMessage: credError.message,
|
|
561
|
+
remediationHint: getRemediationHint(credError),
|
|
562
|
+
},
|
|
563
|
+
});
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
console.warn("[ticket-mate] ⚠️ Skipping Jira credential storage - missing required data");
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
else if (account.provider === "google") {
|
|
571
|
+
token.googleAccessToken = account.access_token;
|
|
572
|
+
}
|
|
573
|
+
else if (account.provider === "apple") {
|
|
574
|
+
token.appleAccessToken = account.access_token;
|
|
575
|
+
}
|
|
576
|
+
// Store provider info for session
|
|
577
|
+
token.lastProvider = account.provider;
|
|
578
|
+
}
|
|
579
|
+
// Note: User info assignment moved to top of function (lines 533+) to ensure token.userId is available
|
|
580
|
+
// ANTIGRAVITY DIRECTIVE: Tenancy - Ensure Account Exists
|
|
581
|
+
// This runs on every JWT generation (sign-in, refresh), creating a safe checkpoint
|
|
582
|
+
if (token.userId) {
|
|
583
|
+
try {
|
|
584
|
+
// We use token.email/name which might be populated from user object above
|
|
585
|
+
const userId = String(token.userId);
|
|
586
|
+
const userEmail = token.email || null;
|
|
587
|
+
const userName = token.name || null;
|
|
588
|
+
// Ensure account exists and get active account ID
|
|
589
|
+
// This is efficient because ensureAccountForUser checks existence first
|
|
590
|
+
const accountId = await ensureAccountForUser(userId, userEmail, userName);
|
|
591
|
+
// Store in token for session callback to use without DB hit (optimization)
|
|
592
|
+
token.accountId = accountId;
|
|
593
|
+
}
|
|
594
|
+
catch (err) {
|
|
595
|
+
console.error("[ticket-mate] ❌ Failed to ensure account tenancy in JWT callback:", err);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
return token;
|
|
599
|
+
},
|
|
600
|
+
async session({ session, token }) {
|
|
601
|
+
try {
|
|
602
|
+
// session.user.id is the internal User id (Prisma pk), not Atlassian account id
|
|
603
|
+
// This is set from token.userId which comes from user.id in jwt callback
|
|
604
|
+
if (token.userId) {
|
|
605
|
+
// token.userId is already a string (from Prisma User.id)
|
|
606
|
+
session.user.id = String(token.userId); // Ensure it's a string for NextAuth compatibility
|
|
607
|
+
session.userId = token.userId; // Internal User id (string, for backward compatibility)
|
|
608
|
+
console.log("[ticket-mate] Session callback: Set user.id from token.userId:", token.userId);
|
|
609
|
+
}
|
|
610
|
+
else if (token.id) {
|
|
611
|
+
session.user.id = String(token.id);
|
|
612
|
+
// token.id is a string (from Prisma User.id), so userId should also be string
|
|
613
|
+
session.userId = String(token.id);
|
|
614
|
+
console.log("[ticket-mate] Session callback: Set user.id from token.id:", token.id);
|
|
615
|
+
}
|
|
616
|
+
else {
|
|
617
|
+
console.warn("[ticket-mate] Session callback: No userId or id in token!", {
|
|
618
|
+
tokenKeys: Object.keys(token),
|
|
619
|
+
});
|
|
620
|
+
}
|
|
621
|
+
// Add provider info to session
|
|
622
|
+
// Note: We don't expose access tokens in session for security
|
|
623
|
+
// Tokens are stored in DB via PrismaAdapter and can be accessed server-side
|
|
624
|
+
session.atlassian = {
|
|
625
|
+
hasJira: Boolean(token.atlassianAccessToken),
|
|
626
|
+
accountId: token.atlassianAccountId || null, // Atlassian account ID for reference
|
|
627
|
+
// Do NOT expose accessToken in session (security risk)
|
|
628
|
+
};
|
|
629
|
+
// ANTIGRAVITY DIRECTIVE: Tenancy - Expose Account ID
|
|
630
|
+
if (token.accountId) {
|
|
631
|
+
session.user.accountId = token.accountId;
|
|
632
|
+
}
|
|
633
|
+
else if (token.userId) {
|
|
634
|
+
// Fallback: If token doesn't have it (legacy), fetch from DB
|
|
635
|
+
const pId = await getPrimaryAccountId(String(token.userId));
|
|
636
|
+
if (pId) {
|
|
637
|
+
session.user.accountId = pId;
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
// GITHUB-1: Query GitHubCredential to get actual connection status
|
|
641
|
+
if (token.userId) {
|
|
642
|
+
try {
|
|
643
|
+
const githubCred = await prisma.gitHubCredential.findUnique({
|
|
644
|
+
where: { userId: String(token.userId) },
|
|
645
|
+
// select: { githubLogin: true }, // Removed to avoid Prisma mismatch
|
|
646
|
+
});
|
|
647
|
+
if (githubCred) {
|
|
648
|
+
session.github = {
|
|
649
|
+
hasGitHub: true,
|
|
650
|
+
login: githubCred.githubLogin || githubCred.login,
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
else {
|
|
654
|
+
session.github = {
|
|
655
|
+
hasGitHub: false,
|
|
656
|
+
};
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
catch (error) {
|
|
660
|
+
console.warn("[ticket-mate] Failed to check GitHub credential:", error);
|
|
661
|
+
session.github = {
|
|
662
|
+
hasGitHub: Boolean(token.githubAccessToken),
|
|
663
|
+
};
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
else {
|
|
667
|
+
session.github = {
|
|
668
|
+
hasGitHub: Boolean(token.githubAccessToken),
|
|
669
|
+
};
|
|
670
|
+
}
|
|
671
|
+
session.google = {
|
|
672
|
+
hasGoogle: Boolean(token.googleAccessToken),
|
|
673
|
+
};
|
|
674
|
+
session.apple = {
|
|
675
|
+
hasApple: Boolean(token.appleAccessToken),
|
|
676
|
+
};
|
|
677
|
+
session.lastProvider = token.lastProvider; // Last provider used for sign-in
|
|
678
|
+
return session;
|
|
679
|
+
}
|
|
680
|
+
catch (error) {
|
|
681
|
+
console.error("[ticket-mate] Session callback error:", error);
|
|
682
|
+
return session; // Return existing session on error
|
|
683
|
+
}
|
|
684
|
+
},
|
|
685
|
+
async signIn({ user, account, profile }) {
|
|
686
|
+
// Validate Atlassian sign-in has required profile data
|
|
687
|
+
// The actual user mapping happens in jwt callback where we have full control
|
|
688
|
+
if (account?.provider === "atlassian") {
|
|
689
|
+
if (!profile) {
|
|
690
|
+
console.error("[ticket-mate] Atlassian sign-in missing profile data");
|
|
691
|
+
return false;
|
|
692
|
+
}
|
|
693
|
+
// Use helper to extract identity with comprehensive fallback logic
|
|
694
|
+
const identity = getAtlassianIdentity({ profile, account, user });
|
|
695
|
+
if (!identity) {
|
|
696
|
+
console.error("[ticket-mate] ❌ Atlassian sign-in rejected: Could not extract accountId or email from profile");
|
|
697
|
+
return false;
|
|
698
|
+
}
|
|
699
|
+
console.log("[ticket-mate] ✅ Atlassian identity extracted successfully:", {
|
|
700
|
+
accountId: identity.accountId,
|
|
701
|
+
email: identity.email,
|
|
702
|
+
hasName: !!identity.name,
|
|
703
|
+
hasPicture: !!identity.picture,
|
|
704
|
+
});
|
|
705
|
+
// Sign-in is valid - user mapping will happen in jwt callback
|
|
706
|
+
// NOTE: We do NOT store JiraCredential here
|
|
707
|
+
// Credential storage happens in the "Connect Jira workspace" flow (separate from login)
|
|
708
|
+
// This separation ensures login = identity, workspace connection = which Jira site to use
|
|
709
|
+
}
|
|
710
|
+
else if (account?.provider === "github" && user?.email) {
|
|
711
|
+
// Handle GitHub sign-in (existing logic)
|
|
712
|
+
try {
|
|
713
|
+
let dbUser = await prisma.user.findUnique({
|
|
714
|
+
where: { email: user.email },
|
|
715
|
+
});
|
|
716
|
+
if (!dbUser) {
|
|
717
|
+
// Create new user for GitHub
|
|
718
|
+
// Note: firstName, lastName, isNewUser, onboardingStep, status don't exist in simplified User schema
|
|
719
|
+
// User.id is String in schema and required - generate a cuid
|
|
720
|
+
const { randomUUID } = await import("crypto");
|
|
721
|
+
dbUser = await prisma.user.create({
|
|
722
|
+
data: {
|
|
723
|
+
id: randomUUID(),
|
|
724
|
+
email: user.email,
|
|
725
|
+
name: user.name || null,
|
|
726
|
+
subscription: "free", // Default subscription
|
|
727
|
+
},
|
|
728
|
+
});
|
|
729
|
+
}
|
|
730
|
+
// Store GitHub tokens
|
|
731
|
+
if (account.access_token) {
|
|
732
|
+
const expiresAt = account.expires_at
|
|
733
|
+
? new Date(account.expires_at * 1000)
|
|
734
|
+
: undefined;
|
|
735
|
+
// Note: githubAccessToken, githubRefreshToken, githubTokenExpiresAt, onboardingStep don't exist in simplified User schema
|
|
736
|
+
// GitHub tokens are not stored in User model - they're handled by NextAuth Account model (if it exists)
|
|
737
|
+
// For now, just update the user's name if provided
|
|
738
|
+
if (user.name && user.name !== dbUser.name) {
|
|
739
|
+
await prisma.user.update({
|
|
740
|
+
where: { id: dbUser.id },
|
|
741
|
+
data: {
|
|
742
|
+
name: user.name,
|
|
743
|
+
},
|
|
744
|
+
});
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
// Update user object with internal id
|
|
748
|
+
user.id = String(dbUser.id);
|
|
749
|
+
}
|
|
750
|
+
catch (error) {
|
|
751
|
+
console.error("[ticket-mate] Error handling GitHub sign-in:", error);
|
|
752
|
+
// Allow sign-in to proceed even if token storage fails
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
// Allow all sign-ins (authentication succeeded)
|
|
756
|
+
return true;
|
|
757
|
+
},
|
|
758
|
+
// Explicit redirect callback to ensure URLs are properly constructed
|
|
759
|
+
// For Atlassian OAuth, NextAuth automatically constructs the callback URL as:
|
|
760
|
+
// ${NEXTAUTH_URL}/api/auth/callback/atlassian
|
|
761
|
+
// This must match exactly what's registered in Atlassian Developer Console
|
|
762
|
+
async redirect({ url, baseUrl }) {
|
|
763
|
+
if (process.env.OAUTH_DEBUG === "true") {
|
|
764
|
+
try {
|
|
765
|
+
console.log("[oauth-debug] NEXTAUTH_REDIRECT_CALLBACK", JSON.stringify({ url, baseUrl }, null, 2));
|
|
766
|
+
}
|
|
767
|
+
catch {
|
|
768
|
+
console.log("[oauth-debug] NEXTAUTH_REDIRECT_CALLBACK", {
|
|
769
|
+
url,
|
|
770
|
+
baseUrl,
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
// baseUrl is automatically set from NEXTAUTH_URL or request origin
|
|
775
|
+
// For local dev: http://localhost:4000
|
|
776
|
+
// For production: ${NEXTAUTH_URL}
|
|
777
|
+
// Force admin dashboard for root and dashboard paths
|
|
778
|
+
if (url === "/" ||
|
|
779
|
+
url === "/dashboard" ||
|
|
780
|
+
url === `${baseUrl}/` ||
|
|
781
|
+
url === `${baseUrl}/dashboard`) {
|
|
782
|
+
return `${baseUrl}/admin/dashboard`;
|
|
783
|
+
}
|
|
784
|
+
if (url.startsWith("/")) {
|
|
785
|
+
return `${baseUrl}${url}`;
|
|
786
|
+
}
|
|
787
|
+
if (new URL(url).origin === baseUrl) {
|
|
788
|
+
return url;
|
|
789
|
+
}
|
|
790
|
+
return `${baseUrl}/admin/dashboard`;
|
|
791
|
+
},
|
|
792
|
+
},
|
|
793
|
+
pages: {
|
|
794
|
+
signIn: "/login",
|
|
795
|
+
error: "/login?error=oauth_error", // Error page redirects to login with error param
|
|
796
|
+
},
|
|
797
|
+
events: {
|
|
798
|
+
async signIn({ user, account, profile, isNewUser }) {
|
|
799
|
+
if (account?.provider === "atlassian") {
|
|
800
|
+
console.log("[ticket-mate] ✅ Atlassian sign-in successful:", {
|
|
801
|
+
userId: user.id,
|
|
802
|
+
email: user.email,
|
|
803
|
+
accountId: account.providerAccountId,
|
|
804
|
+
isNewUser,
|
|
805
|
+
});
|
|
806
|
+
}
|
|
807
|
+
// ANTIGRAVITY DIRECTIVE: FEAT-002 - Token Encryption
|
|
808
|
+
// Clear plain text tokens from the Account table immediately after sign-in.
|
|
809
|
+
// We store encrypted tokens in JiraCredential (for Atlassian) or rely on re-auth (for others).
|
|
810
|
+
if (account && user) {
|
|
811
|
+
try {
|
|
812
|
+
console.log("[ticket-mate] 🔒 Clearing plain-text tokens from Account table...");
|
|
813
|
+
await prisma.account.updateMany({
|
|
814
|
+
where: {
|
|
815
|
+
provider: account.provider,
|
|
816
|
+
providerAccountId: account.providerAccountId,
|
|
817
|
+
},
|
|
818
|
+
data: {
|
|
819
|
+
access_token: null,
|
|
820
|
+
refresh_token: null,
|
|
821
|
+
},
|
|
822
|
+
});
|
|
823
|
+
console.log("[ticket-mate] ✨ Account tokens cleared successfully");
|
|
824
|
+
}
|
|
825
|
+
catch (error) {
|
|
826
|
+
// Non-critical: if the account record isn't found yet (race condition) or update fails
|
|
827
|
+
console.warn("[ticket-mate] ⚠️ Failed to clear account tokens:", error);
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
},
|
|
831
|
+
},
|
|
832
|
+
logger: {
|
|
833
|
+
error(code, metadata) {
|
|
834
|
+
// Enhanced error logging for OAuth/OAuthCallback errors
|
|
835
|
+
if (code === "OAUTH_CALLBACK_ERROR" ||
|
|
836
|
+
code === "OAUTH_CALLBACK_HANDLER_ERROR") {
|
|
837
|
+
console.error("[ticket-mate] ❌ Atlassian OAuth Callback Error:", {
|
|
838
|
+
code,
|
|
839
|
+
message: metadata?.message,
|
|
840
|
+
error: metadata?.error,
|
|
841
|
+
// Safely log error_description if present (Atlassian often includes this)
|
|
842
|
+
errorDescription: metadata?.error_description,
|
|
843
|
+
// Log stack only in development
|
|
844
|
+
stack: process.env.NODE_ENV === "development"
|
|
845
|
+
? metadata?.stack
|
|
846
|
+
: undefined,
|
|
847
|
+
});
|
|
848
|
+
// If Atlassian returned error params, provide actionable hints
|
|
849
|
+
const error = metadata?.error;
|
|
850
|
+
const errorDescription = metadata?.error_description;
|
|
851
|
+
if (error || errorDescription) {
|
|
852
|
+
console.error("[ticket-mate] 💡 Atlassian Error Details:", {
|
|
853
|
+
error,
|
|
854
|
+
errorDescription,
|
|
855
|
+
});
|
|
856
|
+
console.error("[ticket-mate] 💡 Common causes:");
|
|
857
|
+
console.error("[ticket-mate] 1. Requested scopes not allowed in Atlassian app configuration");
|
|
858
|
+
console.error("[ticket-mate] 2. Redirect URI mismatch (check Atlassian Developer Console)");
|
|
859
|
+
console.error("[ticket-mate] 3. App not authorized for requested permissions");
|
|
860
|
+
console.error("[ticket-mate] 💡 Try: Set ATLASSIAN_USE_ELEVATED_SCOPES=false to use baseline scopes");
|
|
861
|
+
}
|
|
862
|
+
return;
|
|
863
|
+
}
|
|
864
|
+
// Suppress JWT_SESSION_ERROR from console.error as it's often transient/recoverable (e.g. secret rotation)
|
|
865
|
+
// We log it as a warning to keep it in "logs" but reduce noise
|
|
866
|
+
if (code === "JWT_SESSION_ERROR") {
|
|
867
|
+
// Log strictly to stdout or a warning, avoiding the scary console.error trace
|
|
868
|
+
console.warn(`[ticket-mate] NextAuth Warning: ${code} - ${metadata?.message || "Decryption failed"}. This is expected if secrets rotated.`);
|
|
869
|
+
return;
|
|
870
|
+
}
|
|
871
|
+
// Log other errors
|
|
872
|
+
console.error(`[ticket-mate] NextAuth Error [${code}]:`, metadata);
|
|
873
|
+
},
|
|
874
|
+
warn(code, metadata) {
|
|
875
|
+
// Enhanced warning for OAuth-related warnings
|
|
876
|
+
if (code?.includes("OAUTH") || code?.includes("oauth")) {
|
|
877
|
+
console.warn(`[ticket-mate] ⚠️ NextAuth OAuth Warning [${code}]:`, metadata);
|
|
878
|
+
}
|
|
879
|
+
else {
|
|
880
|
+
console.warn(`[ticket-mate] NextAuth Warning [${code}]:`, metadata);
|
|
881
|
+
}
|
|
882
|
+
},
|
|
883
|
+
debug(code, metadata) {
|
|
884
|
+
// Enable debug logging in development for OAuth flows
|
|
885
|
+
if (process.env.NODE_ENV === "development" &&
|
|
886
|
+
(code?.includes("OAUTH") || code?.includes("oauth"))) {
|
|
887
|
+
console.debug(`[ticket-mate] 🔍 NextAuth OAuth Debug [${code}]:`, metadata);
|
|
888
|
+
}
|
|
889
|
+
},
|
|
890
|
+
},
|
|
891
|
+
debug: false, // Disable debug logging to reduce JWT error noise (errors still logged at error level)
|
|
892
|
+
};
|
|
893
|
+
//# sourceMappingURL=options.js.map
|