@gitkraken/core-gitlens 0.3.1 → 0.4.100
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/CHANGELOG.md +83 -1
- package/README.md +22 -12
- package/dist/git/cache.d.ts +29 -2
- package/dist/git/cache.d.ts.map +1 -1
- package/dist/git/cache.js +67 -7
- package/dist/git/cache.js.map +1 -1
- package/dist/git/context.d.ts +4 -3
- package/dist/git/context.d.ts.map +1 -1
- package/dist/git/context.js.map +1 -1
- package/dist/git/errors.d.ts +31 -1
- package/dist/git/errors.d.ts.map +1 -1
- package/dist/git/errors.js +29 -0
- package/dist/git/errors.js.map +1 -1
- package/dist/git/models/author.d.ts.map +1 -1
- package/dist/git/models/author.js.map +1 -1
- package/dist/git/models/autolink.d.ts.map +1 -1
- package/dist/git/models/autolink.js.map +1 -1
- package/dist/git/models/blame.d.ts.map +1 -1
- package/dist/git/models/blame.js.map +1 -1
- package/dist/git/models/branch.d.ts.map +1 -1
- package/dist/git/models/branch.js.map +1 -1
- package/dist/git/models/commit.d.ts.map +1 -1
- package/dist/git/models/commit.js +1 -1
- package/dist/git/models/commit.js.map +1 -1
- package/dist/git/models/contributor.d.ts.map +1 -1
- package/dist/git/models/contributor.js.map +1 -1
- package/dist/git/models/defaultBranch.d.ts.map +1 -1
- package/dist/git/models/defaultBranch.js.map +1 -1
- package/dist/git/models/diff.d.ts.map +1 -1
- package/dist/git/models/diff.js.map +1 -1
- package/dist/git/models/file.d.ts.map +1 -1
- package/dist/git/models/file.js.map +1 -1
- package/dist/git/models/fileChange.d.ts.map +1 -1
- package/dist/git/models/fileChange.js.map +1 -1
- package/dist/git/models/fileStatus.d.ts +22 -22
- package/dist/git/models/fileStatus.d.ts.map +1 -1
- package/dist/git/models/fileStatus.js.map +1 -1
- package/dist/git/models/graph.d.ts +122 -1
- package/dist/git/models/graph.d.ts.map +1 -1
- package/dist/git/models/graph.js +4 -0
- package/dist/git/models/graph.js.map +1 -1
- package/dist/git/models/graphSearch.d.ts.map +1 -1
- package/dist/git/models/graphSearch.js.map +1 -1
- package/dist/git/models/graphSession.d.ts +177 -0
- package/dist/git/models/graphSession.d.ts.map +1 -0
- package/dist/git/models/graphSession.js +7 -0
- package/dist/git/models/graphSession.js.map +1 -0
- package/dist/git/models/issue.d.ts +12 -2
- package/dist/git/models/issue.d.ts.map +1 -1
- package/dist/git/models/issue.js +3 -1
- package/dist/git/models/issue.js.map +1 -1
- package/dist/git/models/issueOrPullRequest.d.ts.map +1 -1
- package/dist/git/models/issueOrPullRequest.js.map +1 -1
- package/dist/git/models/lineRange.d.ts.map +1 -1
- package/dist/git/models/lineRange.js.map +1 -1
- package/dist/git/models/log.d.ts.map +1 -1
- package/dist/git/models/log.js.map +1 -1
- package/dist/git/models/mergeConflicts.d.ts.map +1 -1
- package/dist/git/models/mergeConflicts.js.map +1 -1
- package/dist/git/models/patch.d.ts.map +1 -1
- package/dist/git/models/patch.js.map +1 -1
- package/dist/git/models/pausedOperationStatus.d.ts.map +1 -1
- package/dist/git/models/pausedOperationStatus.js.map +1 -1
- package/dist/git/models/pullRequest.d.ts +27 -2
- package/dist/git/models/pullRequest.d.ts.map +1 -1
- package/dist/git/models/pullRequest.js +7 -1
- package/dist/git/models/pullRequest.js.map +1 -1
- package/dist/git/models/rebase.d.ts.map +1 -1
- package/dist/git/models/rebase.js.map +1 -1
- package/dist/git/models/reference.d.ts.map +1 -1
- package/dist/git/models/reference.js.map +1 -1
- package/dist/git/models/reflog.d.ts.map +1 -1
- package/dist/git/models/reflog.js.map +1 -1
- package/dist/git/models/remote.d.ts.map +1 -1
- package/dist/git/models/remote.js.map +1 -1
- package/dist/git/models/remoteProvider.d.ts.map +1 -1
- package/dist/git/models/remoteProvider.js.map +1 -1
- package/dist/git/models/remoteResource.d.ts.map +1 -1
- package/dist/git/models/remoteResource.js.map +1 -1
- package/dist/git/models/repository.d.ts +20 -2
- package/dist/git/models/repository.d.ts.map +1 -1
- package/dist/git/models/repository.js +19 -0
- package/dist/git/models/repository.js.map +1 -1
- package/dist/git/models/repositoryChangeEvent.d.ts.map +1 -1
- package/dist/git/models/repositoryChangeEvent.js.map +1 -1
- package/dist/git/models/repositoryIdentities.d.ts.map +1 -1
- package/dist/git/models/repositoryIdentities.js.map +1 -1
- package/dist/git/models/repositoryMetadata.d.ts.map +1 -1
- package/dist/git/models/repositoryMetadata.js.map +1 -1
- package/dist/git/models/resourceDescriptor.d.ts +16 -0
- package/dist/git/models/resourceDescriptor.d.ts.map +1 -1
- package/dist/git/models/resourceDescriptor.js.map +1 -1
- package/dist/git/models/revision.d.ts.map +1 -1
- package/dist/git/models/revision.js.map +1 -1
- package/dist/git/models/search.d.ts.map +1 -1
- package/dist/git/models/search.js.map +1 -1
- package/dist/git/models/shortlog.d.ts.map +1 -1
- package/dist/git/models/shortlog.js.map +1 -1
- package/dist/git/models/signature.d.ts +14 -0
- package/dist/git/models/signature.d.ts.map +1 -1
- package/dist/git/models/signature.js.map +1 -1
- package/dist/git/models/staging.d.ts.map +1 -1
- package/dist/git/models/staging.js.map +1 -1
- package/dist/git/models/stash.d.ts.map +1 -1
- package/dist/git/models/stash.js.map +1 -1
- package/dist/git/models/status.d.ts.map +1 -1
- package/dist/git/models/status.js.map +1 -1
- package/dist/git/models/statusFile.d.ts.map +1 -1
- package/dist/git/models/statusFile.js.map +1 -1
- package/dist/git/models/tag.d.ts +11 -1
- package/dist/git/models/tag.d.ts.map +1 -1
- package/dist/git/models/tag.js +9 -2
- package/dist/git/models/tag.js.map +1 -1
- package/dist/git/models/tree.d.ts.map +1 -1
- package/dist/git/models/tree.js.map +1 -1
- package/dist/git/models/user.d.ts.map +1 -1
- package/dist/git/models/user.js.map +1 -1
- package/dist/git/models/worktree.d.ts.map +1 -1
- package/dist/git/models/worktree.js.map +1 -1
- package/dist/git/parsers/diffParser.d.ts.map +1 -1
- package/dist/git/parsers/diffParser.js +1 -1
- package/dist/git/parsers/diffParser.js.map +1 -1
- package/dist/git/parsers/rebaseTodoParser.d.ts.map +1 -1
- package/dist/git/parsers/rebaseTodoParser.js.map +1 -1
- package/dist/git/providers/blame.d.ts.map +1 -1
- package/dist/git/providers/blame.js.map +1 -1
- package/dist/git/providers/branches.d.ts +8 -1
- package/dist/git/providers/branches.d.ts.map +1 -1
- package/dist/git/providers/branches.js.map +1 -1
- package/dist/git/providers/commits.d.ts +6 -1
- package/dist/git/providers/commits.d.ts.map +1 -1
- package/dist/git/providers/commits.js.map +1 -1
- package/dist/git/providers/config.d.ts +6 -2
- package/dist/git/providers/config.d.ts.map +1 -1
- package/dist/git/providers/config.js.map +1 -1
- package/dist/git/providers/contributors.d.ts.map +1 -1
- package/dist/git/providers/contributors.js.map +1 -1
- package/dist/git/providers/diff.d.ts.map +1 -1
- package/dist/git/providers/diff.js.map +1 -1
- package/dist/git/providers/graph.d.ts +55 -1
- package/dist/git/providers/graph.d.ts.map +1 -1
- package/dist/git/providers/graph.js.map +1 -1
- package/dist/git/providers/operations.d.ts +1 -0
- package/dist/git/providers/operations.d.ts.map +1 -1
- package/dist/git/providers/operations.js.map +1 -1
- package/dist/git/providers/patch.d.ts.map +1 -1
- package/dist/git/providers/patch.js.map +1 -1
- package/dist/git/providers/pausedOperations.d.ts.map +1 -1
- package/dist/git/providers/pausedOperations.js.map +1 -1
- package/dist/git/providers/provider.d.ts.map +1 -1
- package/dist/git/providers/provider.js.map +1 -1
- package/dist/git/providers/refs.d.ts.map +1 -1
- package/dist/git/providers/refs.js.map +1 -1
- package/dist/git/providers/remotes.d.ts.map +1 -1
- package/dist/git/providers/remotes.js.map +1 -1
- package/dist/git/providers/revision.d.ts.map +1 -1
- package/dist/git/providers/revision.js.map +1 -1
- package/dist/git/providers/shared/remotes.d.ts.map +1 -1
- package/dist/git/providers/shared/remotes.js.map +1 -1
- package/dist/git/providers/staging.d.ts.map +1 -1
- package/dist/git/providers/staging.js.map +1 -1
- package/dist/git/providers/stash.d.ts.map +1 -1
- package/dist/git/providers/stash.js.map +1 -1
- package/dist/git/providers/status.d.ts +1 -0
- package/dist/git/providers/status.d.ts.map +1 -1
- package/dist/git/providers/status.js.map +1 -1
- package/dist/git/providers/tags.d.ts.map +1 -1
- package/dist/git/providers/tags.js.map +1 -1
- package/dist/git/providers/types.d.ts.map +1 -1
- package/dist/git/providers/types.js.map +1 -1
- package/dist/git/providers/worktrees.d.ts +5 -1
- package/dist/git/providers/worktrees.d.ts.map +1 -1
- package/dist/git/providers/worktrees.js.map +1 -1
- package/dist/git/remotes/azure-devops.d.ts.map +1 -1
- package/dist/git/remotes/azure-devops.js +27 -31
- package/dist/git/remotes/azure-devops.js.map +1 -1
- package/dist/git/remotes/bitbucket-server.d.ts.map +1 -1
- package/dist/git/remotes/bitbucket-server.js +21 -23
- package/dist/git/remotes/bitbucket-server.js.map +1 -1
- package/dist/git/remotes/bitbucket.d.ts.map +1 -1
- package/dist/git/remotes/bitbucket.js +21 -23
- package/dist/git/remotes/bitbucket.js.map +1 -1
- package/dist/git/remotes/custom.d.ts.map +1 -1
- package/dist/git/remotes/custom.js.map +1 -1
- package/dist/git/remotes/gerrit.d.ts.map +1 -1
- package/dist/git/remotes/gerrit.js +11 -13
- package/dist/git/remotes/gerrit.js.map +1 -1
- package/dist/git/remotes/gitea.d.ts.map +1 -1
- package/dist/git/remotes/gitea.js +12 -14
- package/dist/git/remotes/gitea.js.map +1 -1
- package/dist/git/remotes/github.d.ts.map +1 -1
- package/dist/git/remotes/github.js +54 -56
- package/dist/git/remotes/github.js.map +1 -1
- package/dist/git/remotes/gitlab.d.ts.map +1 -1
- package/dist/git/remotes/gitlab.js +93 -95
- package/dist/git/remotes/gitlab.js.map +1 -1
- package/dist/git/remotes/google-source.d.ts.map +1 -1
- package/dist/git/remotes/google-source.js.map +1 -1
- package/dist/git/remotes/matcher.d.ts.map +1 -1
- package/dist/git/remotes/matcher.js.map +1 -1
- package/dist/git/run.types.d.ts +62 -3
- package/dist/git/run.types.d.ts.map +1 -1
- package/dist/git/service.d.ts.map +1 -1
- package/dist/git/utils/autolink.utils.d.ts.map +1 -1
- package/dist/git/utils/autolink.utils.js.map +1 -1
- package/dist/git/utils/blame.utils.d.ts.map +1 -1
- package/dist/git/utils/blame.utils.js.map +1 -1
- package/dist/git/utils/branch.utils.d.ts.map +1 -1
- package/dist/git/utils/branch.utils.js +12 -1
- package/dist/git/utils/branch.utils.js.map +1 -1
- package/dist/git/utils/commit.utils.d.ts.map +1 -1
- package/dist/git/utils/commit.utils.js.map +1 -1
- package/dist/git/utils/conflictResolution.utils.d.ts +32 -0
- package/dist/git/utils/conflictResolution.utils.d.ts.map +1 -1
- package/dist/git/utils/conflictResolution.utils.js +95 -0
- package/dist/git/utils/conflictResolution.utils.js.map +1 -1
- package/dist/git/utils/contributor.utils.d.ts +1 -1
- package/dist/git/utils/contributor.utils.d.ts.map +1 -1
- package/dist/git/utils/contributor.utils.js +1 -2
- package/dist/git/utils/contributor.utils.js.map +1 -1
- package/dist/git/utils/fetch.utils.d.ts.map +1 -1
- package/dist/git/utils/fetch.utils.js.map +1 -1
- package/dist/git/utils/fileStatus.utils.d.ts +7 -0
- package/dist/git/utils/fileStatus.utils.d.ts.map +1 -1
- package/dist/git/utils/fileStatus.utils.js +6 -0
- package/dist/git/utils/fileStatus.utils.js.map +1 -1
- package/dist/git/utils/graph.utils.d.ts +20 -0
- package/dist/git/utils/graph.utils.d.ts.map +1 -0
- package/dist/git/utils/graph.utils.js +40 -0
- package/dist/git/utils/graph.utils.js.map +1 -0
- package/dist/git/utils/issue.utils.d.ts.map +1 -1
- package/dist/git/utils/issue.utils.js +1 -0
- package/dist/git/utils/issue.utils.js.map +1 -1
- package/dist/git/utils/issueOrPullRequest.utils.d.ts.map +1 -1
- package/dist/git/utils/issueOrPullRequest.utils.js.map +1 -1
- package/dist/git/utils/mergeConflicts.utils.d.ts.map +1 -1
- package/dist/git/utils/mergeConflicts.utils.js.map +1 -1
- package/dist/git/utils/pausedOperationStatus.utils.d.ts +13 -13
- package/dist/git/utils/pausedOperationStatus.utils.d.ts.map +1 -1
- package/dist/git/utils/pausedOperationStatus.utils.js.map +1 -1
- package/dist/git/utils/pullRequest.utils.d.ts.map +1 -1
- package/dist/git/utils/pullRequest.utils.js +9 -0
- package/dist/git/utils/pullRequest.utils.js.map +1 -1
- package/dist/git/utils/reachability.utils.d.ts +20 -2
- package/dist/git/utils/reachability.utils.d.ts.map +1 -1
- package/dist/git/utils/reachability.utils.js +68 -7
- package/dist/git/utils/reachability.utils.js.map +1 -1
- package/dist/git/utils/rebase.utils.d.ts.map +1 -1
- package/dist/git/utils/rebase.utils.js.map +1 -1
- package/dist/git/utils/reference.utils.d.ts.map +1 -1
- package/dist/git/utils/reference.utils.js.map +1 -1
- package/dist/git/utils/remote.utils.d.ts.map +1 -1
- package/dist/git/utils/remote.utils.js.map +1 -1
- package/dist/git/utils/repository.utils.d.ts.map +1 -1
- package/dist/git/utils/repository.utils.js.map +1 -1
- package/dist/git/utils/resourceDescriptor.utils.d.ts.map +1 -1
- package/dist/git/utils/resourceDescriptor.utils.js.map +1 -1
- package/dist/git/utils/revision.utils.d.ts.map +1 -1
- package/dist/git/utils/revision.utils.js.map +1 -1
- package/dist/git/utils/search.utils.d.ts.map +1 -1
- package/dist/git/utils/search.utils.js.map +1 -1
- package/dist/git/utils/sorting.d.ts.map +1 -1
- package/dist/git/utils/sorting.js.map +1 -1
- package/dist/git/utils/sshKey.utils.d.ts +7 -0
- package/dist/git/utils/sshKey.utils.d.ts.map +1 -0
- package/dist/git/utils/sshKey.utils.js +25 -0
- package/dist/git/utils/sshKey.utils.js.map +1 -0
- package/dist/git/utils/status.utils.d.ts.map +1 -1
- package/dist/git/utils/status.utils.js.map +1 -1
- package/dist/git/utils/statusFile.utils.d.ts.map +1 -1
- package/dist/git/utils/statusFile.utils.js.map +1 -1
- package/dist/git/utils/tag.utils.d.ts.map +1 -1
- package/dist/git/utils/tag.utils.js.map +1 -1
- package/dist/git/utils/tooltip.utils.d.ts.map +1 -1
- package/dist/git/utils/tooltip.utils.js.map +1 -1
- package/dist/git/utils/uriAuthority.d.ts.map +1 -1
- package/dist/git/utils/uriAuthority.js.map +1 -1
- package/dist/git/utils/user.utils.d.ts.map +1 -1
- package/dist/git/utils/user.utils.js.map +1 -1
- package/dist/git/utils/worktree.utils.d.ts.map +1 -1
- package/dist/git/utils/worktree.utils.js.map +1 -1
- package/dist/git/watching/changeEvent.d.ts.map +1 -1
- package/dist/git/watching/changeEvent.js.map +1 -1
- package/dist/git/watching/classifyChange.d.ts.map +1 -1
- package/dist/git/watching/classifyChange.js.map +1 -1
- package/dist/git/watching/gitIgnoreFilter.d.ts.map +1 -1
- package/dist/git/watching/gitIgnoreFilter.js.map +1 -1
- package/dist/git/watching/initWatcher.d.ts.map +1 -1
- package/dist/git/watching/initWatcher.js.map +1 -1
- package/dist/git/watching/provider.d.ts.map +1 -1
- package/dist/git/watching/provider.js.map +1 -1
- package/dist/git/watching/watchGroup.d.ts.map +1 -1
- package/dist/git/watching/watchGroup.js.map +1 -1
- package/dist/git/watching/watchService.d.ts +4 -0
- package/dist/git/watching/watchService.d.ts.map +1 -1
- package/dist/git/watching/watchService.js +15 -1
- package/dist/git/watching/watchService.js.map +1 -1
- package/dist/git/watching/watchSession.d.ts +7 -0
- package/dist/git/watching/watchSession.d.ts.map +1 -1
- package/dist/git/watching/watchSession.js +14 -2
- package/dist/git/watching/watchSession.js.map +1 -1
- package/dist/git/watching/watcherPatterns.d.ts.map +1 -1
- package/dist/git/watching/watcherPatterns.js.map +1 -1
- package/dist/git-cli/cliGitProvider.d.ts.map +1 -1
- package/dist/git-cli/exec/exec.d.ts.map +1 -1
- package/dist/git-cli/exec/exec.errors.d.ts.map +1 -1
- package/dist/git-cli/exec/exec.errors.js.map +1 -1
- package/dist/git-cli/exec/exec.js.map +1 -1
- package/dist/git-cli/exec/exec.types.d.ts.map +1 -1
- package/dist/git-cli/exec/exec.types.js.map +1 -1
- package/dist/git-cli/exec/features.d.ts.map +1 -1
- package/dist/git-cli/exec/features.js.map +1 -1
- package/dist/git-cli/exec/git.d.ts +19 -27
- package/dist/git-cli/exec/git.d.ts.map +1 -1
- package/dist/git-cli/exec/git.js +126 -34
- package/dist/git-cli/exec/git.js.map +1 -1
- package/dist/git-cli/exec/gitQueue.d.ts.map +1 -1
- package/dist/git-cli/exec/gitQueue.js.map +1 -1
- package/dist/git-cli/exec/locator.d.ts.map +1 -1
- package/dist/git-cli/exec/locator.js.map +1 -1
- package/dist/git-cli/parsers/blameParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/blameParser.js.map +1 -1
- package/dist/git-cli/parsers/indexParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/indexParser.js.map +1 -1
- package/dist/git-cli/parsers/logParser.d.ts +9 -1
- package/dist/git-cli/parsers/logParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/logParser.js +141 -60
- package/dist/git-cli/parsers/logParser.js.map +1 -1
- package/dist/git-cli/parsers/mergeTreeParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/mergeTreeParser.js.map +1 -1
- package/dist/git-cli/parsers/refParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/refParser.js.map +1 -1
- package/dist/git-cli/parsers/reflogParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/reflogParser.js.map +1 -1
- package/dist/git-cli/parsers/remoteParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/remoteParser.js.map +1 -1
- package/dist/git-cli/parsers/shortlogParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/shortlogParser.js.map +1 -1
- package/dist/git-cli/parsers/signatureParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/signatureParser.js.map +1 -1
- package/dist/git-cli/parsers/sshSignatureParser.d.ts +21 -0
- package/dist/git-cli/parsers/sshSignatureParser.d.ts.map +1 -0
- package/dist/git-cli/parsers/sshSignatureParser.js +78 -0
- package/dist/git-cli/parsers/sshSignatureParser.js.map +1 -0
- package/dist/git-cli/parsers/statusParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/statusParser.js.map +1 -1
- package/dist/git-cli/parsers/treeParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/treeParser.js.map +1 -1
- package/dist/git-cli/parsers/worktreeParser.d.ts.map +1 -1
- package/dist/git-cli/parsers/worktreeParser.js +5 -7
- package/dist/git-cli/parsers/worktreeParser.js.map +1 -1
- package/dist/git-cli/providers/blame.d.ts.map +1 -1
- package/dist/git-cli/providers/blame.js.map +1 -1
- package/dist/git-cli/providers/branches.d.ts +1 -0
- package/dist/git-cli/providers/branches.d.ts.map +1 -1
- package/dist/git-cli/providers/branches.js +51 -32
- package/dist/git-cli/providers/branches.js.map +1 -1
- package/dist/git-cli/providers/commitFilesetUtils.d.ts.map +1 -1
- package/dist/git-cli/providers/commitFilesetUtils.js.map +1 -1
- package/dist/git-cli/providers/commits.d.ts +12 -1
- package/dist/git-cli/providers/commits.d.ts.map +1 -1
- package/dist/git-cli/providers/commits.js +89 -8
- package/dist/git-cli/providers/commits.js.map +1 -1
- package/dist/git-cli/providers/config.d.ts.map +1 -1
- package/dist/git-cli/providers/config.js.map +1 -1
- package/dist/git-cli/providers/contributors.d.ts.map +1 -1
- package/dist/git-cli/providers/contributors.js.map +1 -1
- package/dist/git-cli/providers/diff.d.ts.map +1 -1
- package/dist/git-cli/providers/diff.js.map +1 -1
- package/dist/git-cli/providers/graph.d.ts +35 -1
- package/dist/git-cli/providers/graph.d.ts.map +1 -1
- package/dist/git-cli/providers/graph.js +1434 -330
- package/dist/git-cli/providers/graph.js.map +1 -1
- package/dist/git-cli/providers/operations.d.ts +1 -0
- package/dist/git-cli/providers/operations.d.ts.map +1 -1
- package/dist/git-cli/providers/operations.js +22 -1
- package/dist/git-cli/providers/operations.js.map +1 -1
- package/dist/git-cli/providers/patch.d.ts.map +1 -1
- package/dist/git-cli/providers/patch.js.map +1 -1
- package/dist/git-cli/providers/pausedOperations.d.ts.map +1 -1
- package/dist/git-cli/providers/pausedOperations.js +3 -3
- package/dist/git-cli/providers/pausedOperations.js.map +1 -1
- package/dist/git-cli/providers/refs.d.ts.map +1 -1
- package/dist/git-cli/providers/refs.js.map +1 -1
- package/dist/git-cli/providers/remotes.d.ts.map +1 -1
- package/dist/git-cli/providers/remotes.js.map +1 -1
- package/dist/git-cli/providers/revision.d.ts +1 -0
- package/dist/git-cli/providers/revision.d.ts.map +1 -1
- package/dist/git-cli/providers/revision.js +33 -0
- package/dist/git-cli/providers/revision.js.map +1 -1
- package/dist/git-cli/providers/staging.d.ts.map +1 -1
- package/dist/git-cli/providers/staging.js.map +1 -1
- package/dist/git-cli/providers/stash.d.ts.map +1 -1
- package/dist/git-cli/providers/stash.js.map +1 -1
- package/dist/git-cli/providers/status.d.ts +28 -0
- package/dist/git-cli/providers/status.d.ts.map +1 -1
- package/dist/git-cli/providers/status.js +240 -154
- package/dist/git-cli/providers/status.js.map +1 -1
- package/dist/git-cli/providers/tags.d.ts.map +1 -1
- package/dist/git-cli/providers/tags.js +2 -1
- package/dist/git-cli/providers/tags.js.map +1 -1
- package/dist/git-cli/providers/worktrees.d.ts +4 -1
- package/dist/git-cli/providers/worktrees.d.ts.map +1 -1
- package/dist/git-cli/providers/worktrees.js +31 -3
- package/dist/git-cli/providers/worktrees.js.map +1 -1
- package/dist/git-cli/service.d.ts.map +1 -1
- package/dist/git-cli/service.js +8 -0
- package/dist/git-cli/service.js.map +1 -1
- package/dist/ipc/ipcServer.d.ts.map +1 -1
- package/dist/ipc/ipcServer.js +1 -1
- package/dist/ipc/ipcServer.js.map +1 -1
- package/dist/plus/agents/providers/claudeCodeProvider.d.ts +6 -1
- package/dist/plus/agents/providers/claudeCodeProvider.d.ts.map +1 -1
- package/dist/plus/agents/providers/claudeCodeProvider.js +19 -0
- package/dist/plus/agents/providers/claudeCodeProvider.js.map +1 -1
- package/dist/plus/agents/providers/claudeCodeTranscript.d.ts +68 -0
- package/dist/plus/agents/providers/claudeCodeTranscript.d.ts.map +1 -1
- package/dist/plus/agents/providers/claudeCodeTranscript.js +262 -8
- package/dist/plus/agents/providers/claudeCodeTranscript.js.map +1 -1
- package/dist/plus/agents/types.d.ts +36 -2
- package/dist/plus/agents/types.d.ts.map +1 -1
- package/dist/plus/ai/constants.d.ts +1 -2
- package/dist/plus/ai/constants.d.ts.map +1 -1
- package/dist/plus/ai/constants.js +1 -8
- package/dist/plus/ai/constants.js.map +1 -1
- package/dist/plus/ai/errors.d.ts.map +1 -1
- package/dist/plus/ai/errors.js.map +1 -1
- package/dist/plus/ai/models/conversation.d.ts.map +1 -1
- package/dist/plus/ai/models/conversation.js.map +1 -1
- package/dist/plus/ai/models/model.d.ts +2 -1
- package/dist/plus/ai/models/model.d.ts.map +1 -1
- package/dist/plus/ai/models/model.js +50 -1
- package/dist/plus/ai/models/model.js.map +1 -1
- package/dist/plus/ai/models/promptTemplates.d.ts +5 -2
- package/dist/plus/ai/models/promptTemplates.d.ts.map +1 -1
- package/dist/plus/ai/models/promptTemplates.js.map +1 -1
- package/dist/plus/ai/models/provider.d.ts.map +1 -1
- package/dist/plus/ai/models/provider.js.map +1 -1
- package/dist/plus/ai/models/results.d.ts.map +1 -1
- package/dist/plus/ai/models/results.js.map +1 -1
- package/dist/plus/ai/prompts.d.ts +1 -1
- package/dist/plus/ai/prompts.d.ts.map +1 -1
- package/dist/plus/ai/prompts.js +15 -47
- package/dist/plus/ai/prompts.js.map +1 -1
- package/dist/plus/ai/providers/anthropicProvider.d.ts +5 -0
- package/dist/plus/ai/providers/anthropicProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/anthropicProvider.js +40 -3
- package/dist/plus/ai/providers/anthropicProvider.js.map +1 -1
- package/dist/plus/ai/providers/azureProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/azureProvider.js.map +1 -1
- package/dist/plus/ai/providers/context.d.ts.map +1 -1
- package/dist/plus/ai/providers/context.js.map +1 -1
- package/dist/plus/ai/providers/deepSeekProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/deepSeekProvider.js +17 -1
- package/dist/plus/ai/providers/deepSeekProvider.js.map +1 -1
- package/dist/plus/ai/providers/geminiProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/geminiProvider.js +25 -6
- package/dist/plus/ai/providers/geminiProvider.js.map +1 -1
- package/dist/plus/ai/providers/gitkrakenProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/gitkrakenProvider.js +1 -0
- package/dist/plus/ai/providers/gitkrakenProvider.js.map +1 -1
- package/dist/plus/ai/providers/huggingFaceProvider.d.ts +1 -1
- package/dist/plus/ai/providers/huggingFaceProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/huggingFaceProvider.js +21 -18
- package/dist/plus/ai/providers/huggingFaceProvider.js.map +1 -1
- package/dist/plus/ai/providers/mistralProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/mistralProvider.js.map +1 -1
- package/dist/plus/ai/providers/ollamaProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/ollamaProvider.js.map +1 -1
- package/dist/plus/ai/providers/openAICompatibleProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/openAICompatibleProvider.js.map +1 -1
- package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts +10 -1
- package/dist/plus/ai/providers/openAICompatibleProviderBase.d.ts.map +1 -1
- package/dist/plus/ai/providers/openAICompatibleProviderBase.js +9 -1
- package/dist/plus/ai/providers/openAICompatibleProviderBase.js.map +1 -1
- package/dist/plus/ai/providers/openRouterProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/openRouterProvider.js.map +1 -1
- package/dist/plus/ai/providers/openaiProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/openaiProvider.js.map +1 -1
- package/dist/plus/ai/providers/xaiProvider.d.ts.map +1 -1
- package/dist/plus/ai/providers/xaiProvider.js +14 -1
- package/dist/plus/ai/providers/xaiProvider.js.map +1 -1
- package/dist/plus/ai/utils/ai.utils.d.ts.map +1 -1
- package/dist/plus/ai/utils/ai.utils.js +5 -7
- package/dist/plus/ai/utils/ai.utils.js.map +1 -1
- package/dist/plus/ai/utils/results.utils.d.ts +3 -0
- package/dist/plus/ai/utils/results.utils.d.ts.map +1 -1
- package/dist/plus/ai/utils/results.utils.js +26 -0
- package/dist/plus/ai/utils/results.utils.js.map +1 -1
- package/dist/plus/ai/utils/truncation.utils.d.ts +1 -1
- package/dist/plus/ai/utils/truncation.utils.d.ts.map +1 -1
- package/dist/plus/ai/utils/truncation.utils.js.map +1 -1
- package/dist/plus/git-github/api/config.d.ts.map +1 -1
- package/dist/plus/git-github/api/config.js.map +1 -1
- package/dist/plus/git-github/api/github.d.ts +71 -15
- package/dist/plus/git-github/api/github.d.ts.map +1 -1
- package/dist/plus/git-github/api/github.js +350 -84
- package/dist/plus/git-github/api/github.js.map +1 -1
- package/dist/plus/git-github/api/github.utils.d.ts.map +1 -1
- package/dist/plus/git-github/api/github.utils.js.map +1 -1
- package/dist/plus/git-github/api/token.d.ts.map +1 -1
- package/dist/plus/git-github/api/token.js.map +1 -1
- package/dist/plus/git-github/api/tokenUtils.d.ts.map +1 -1
- package/dist/plus/git-github/api/tokenUtils.js.map +1 -1
- package/dist/plus/git-github/api/types.d.ts.map +1 -1
- package/dist/plus/git-github/api/types.js.map +1 -1
- package/dist/plus/git-github/context.d.ts.map +1 -1
- package/dist/plus/git-github/models.d.ts +5 -0
- package/dist/plus/git-github/models.d.ts.map +1 -1
- package/dist/plus/git-github/models.js +27 -2
- package/dist/plus/git-github/models.js.map +1 -1
- package/dist/plus/git-github/providers/github/blame.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/blame.js.map +1 -1
- package/dist/plus/git-github/providers/github/branches.d.ts +2 -1
- package/dist/plus/git-github/providers/github/branches.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/branches.js +7 -3
- package/dist/plus/git-github/providers/github/branches.js.map +1 -1
- package/dist/plus/git-github/providers/github/commits.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/commits.js.map +1 -1
- package/dist/plus/git-github/providers/github/config.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/config.js.map +1 -1
- package/dist/plus/git-github/providers/github/contributors.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/contributors.js.map +1 -1
- package/dist/plus/git-github/providers/github/diff.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/diff.js +2 -2
- package/dist/plus/git-github/providers/github/diff.js.map +1 -1
- package/dist/plus/git-github/providers/github/graph.d.ts +12 -1
- package/dist/plus/git-github/providers/github/graph.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/graph.js +85 -0
- package/dist/plus/git-github/providers/github/graph.js.map +1 -1
- package/dist/plus/git-github/providers/github/refs.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/refs.js.map +1 -1
- package/dist/plus/git-github/providers/github/remotes.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/remotes.js.map +1 -1
- package/dist/plus/git-github/providers/github/revision.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/revision.js.map +1 -1
- package/dist/plus/git-github/providers/github/status.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/status.js.map +1 -1
- package/dist/plus/git-github/providers/github/tags.d.ts.map +1 -1
- package/dist/plus/git-github/providers/github/tags.js +3 -1
- package/dist/plus/git-github/providers/github/tags.js.map +1 -1
- package/dist/plus/git-github/providers/githubGitProvider.d.ts.map +1 -1
- package/dist/plus/git-github/providers/githubGitProvider.js.map +1 -1
- package/dist/plus/git-github/providers/githubProvider.d.ts.map +1 -1
- package/dist/plus/git-github/providers/githubProvider.js.map +1 -1
- package/dist/plus/integrations/authentication/cloudIntegrationService.d.ts +30 -0
- package/dist/plus/integrations/authentication/cloudIntegrationService.d.ts.map +1 -0
- package/dist/plus/integrations/authentication/cloudIntegrationService.js +214 -0
- package/dist/plus/integrations/authentication/cloudIntegrationService.js.map +1 -0
- package/dist/plus/integrations/authentication/configuredIntegrationService.d.ts +114 -0
- package/dist/plus/integrations/authentication/configuredIntegrationService.d.ts.map +1 -0
- package/dist/plus/integrations/authentication/configuredIntegrationService.js +497 -0
- package/dist/plus/integrations/authentication/configuredIntegrationService.js.map +1 -0
- package/dist/plus/integrations/authentication/integrationAuthenticationProvider.d.ts +112 -0
- package/dist/plus/integrations/authentication/integrationAuthenticationProvider.d.ts.map +1 -0
- package/dist/plus/integrations/authentication/integrationAuthenticationProvider.js +217 -0
- package/dist/plus/integrations/authentication/integrationAuthenticationProvider.js.map +1 -0
- package/dist/plus/integrations/authentication/integrationAuthenticationService.d.ts +62 -0
- package/dist/plus/integrations/authentication/integrationAuthenticationService.d.ts.map +1 -0
- package/dist/plus/integrations/authentication/integrationAuthenticationService.js +126 -0
- package/dist/plus/integrations/authentication/integrationAuthenticationService.js.map +1 -0
- package/dist/plus/integrations/authentication/manualTokenProvider.d.ts +16 -0
- package/dist/plus/integrations/authentication/manualTokenProvider.d.ts.map +1 -0
- package/dist/plus/integrations/authentication/manualTokenProvider.js +53 -0
- package/dist/plus/integrations/authentication/manualTokenProvider.js.map +1 -0
- package/dist/plus/integrations/authentication/models.d.ts +120 -0
- package/dist/plus/integrations/authentication/models.d.ts.map +1 -0
- package/dist/plus/integrations/authentication/models.js +64 -0
- package/dist/plus/integrations/authentication/models.js.map +1 -0
- package/dist/plus/integrations/collectionMetadata.d.ts +21 -0
- package/dist/plus/integrations/collectionMetadata.d.ts.map +1 -0
- package/dist/plus/integrations/collectionMetadata.js +121 -0
- package/dist/plus/integrations/collectionMetadata.js.map +1 -0
- package/dist/plus/integrations/constants.d.ts +57 -0
- package/dist/plus/integrations/constants.d.ts.map +1 -0
- package/dist/plus/integrations/constants.js +138 -0
- package/dist/plus/integrations/constants.js.map +1 -0
- package/dist/plus/integrations/context.d.ts +358 -0
- package/dist/plus/integrations/context.d.ts.map +1 -0
- package/dist/plus/integrations/context.js +2 -0
- package/dist/plus/integrations/context.js.map +1 -0
- package/dist/plus/integrations/errors.d.ts +79 -0
- package/dist/plus/integrations/errors.d.ts.map +1 -0
- package/dist/plus/integrations/errors.js +150 -0
- package/dist/plus/integrations/errors.js.map +1 -0
- package/dist/plus/integrations/index.d.ts +77 -0
- package/dist/plus/integrations/index.d.ts.map +1 -0
- package/dist/plus/integrations/index.js +64 -0
- package/dist/plus/integrations/index.js.map +1 -0
- package/dist/plus/integrations/integrationService.d.ts +379 -0
- package/dist/plus/integrations/integrationService.d.ts.map +1 -0
- package/dist/plus/integrations/integrationService.js +1895 -0
- package/dist/plus/integrations/integrationService.js.map +1 -0
- package/dist/plus/integrations/lite.d.ts +47 -0
- package/dist/plus/integrations/lite.d.ts.map +1 -0
- package/dist/plus/integrations/lite.js +141 -0
- package/dist/plus/integrations/lite.js.map +1 -0
- package/dist/plus/integrations/manager.d.ts +332 -0
- package/dist/plus/integrations/manager.d.ts.map +1 -0
- package/dist/plus/integrations/manager.js +2 -0
- package/dist/plus/integrations/manager.js.map +1 -0
- package/dist/plus/integrations/models/gitHostIntegration.d.ts +341 -0
- package/dist/plus/integrations/models/gitHostIntegration.d.ts.map +1 -0
- package/dist/plus/integrations/models/gitHostIntegration.js +1146 -0
- package/dist/plus/integrations/models/gitHostIntegration.js.map +1 -0
- package/dist/plus/integrations/models/integration.d.ts +212 -0
- package/dist/plus/integrations/models/integration.d.ts.map +1 -0
- package/dist/plus/integrations/models/integration.js +627 -0
- package/dist/plus/integrations/models/integration.js.map +1 -0
- package/dist/plus/integrations/models/issuesIntegration.d.ts +108 -0
- package/dist/plus/integrations/models/issuesIntegration.d.ts.map +1 -0
- package/dist/plus/integrations/models/issuesIntegration.js +216 -0
- package/dist/plus/integrations/models/issuesIntegration.js.map +1 -0
- package/dist/plus/integrations/providerFilters.d.ts +12 -0
- package/dist/plus/integrations/providerFilters.d.ts.map +1 -0
- package/dist/plus/integrations/providerFilters.js +14 -0
- package/dist/plus/integrations/providerFilters.js.map +1 -0
- package/dist/plus/integrations/providers/apiClients.d.ts +25 -0
- package/dist/plus/integrations/providers/apiClients.d.ts.map +1 -0
- package/dist/plus/integrations/providers/apiClients.js +39 -0
- package/dist/plus/integrations/providers/apiClients.js.map +1 -0
- package/dist/plus/integrations/providers/apiConfig.d.ts +52 -0
- package/dist/plus/integrations/providers/apiConfig.d.ts.map +1 -0
- package/dist/plus/integrations/providers/apiConfig.js +19 -0
- package/dist/plus/integrations/providers/apiConfig.js.map +1 -0
- package/dist/plus/integrations/providers/azure/azure.d.ts +59 -0
- package/dist/plus/integrations/providers/azure/azure.d.ts.map +1 -0
- package/dist/plus/integrations/providers/azure/azure.js +519 -0
- package/dist/plus/integrations/providers/azure/azure.js.map +1 -0
- package/dist/plus/integrations/providers/azure/models.d.ts +302 -0
- package/dist/plus/integrations/providers/azure/models.d.ts.map +1 -0
- package/dist/plus/integrations/providers/azure/models.js +203 -0
- package/dist/plus/integrations/providers/azure/models.js.map +1 -0
- package/dist/plus/integrations/providers/azureDevOps.d.ts +141 -0
- package/dist/plus/integrations/providers/azureDevOps.d.ts.map +1 -0
- package/dist/plus/integrations/providers/azureDevOps.js +925 -0
- package/dist/plus/integrations/providers/azureDevOps.js.map +1 -0
- package/dist/plus/integrations/providers/bitbucket/bitbucket.d.ts +53 -0
- package/dist/plus/integrations/providers/bitbucket/bitbucket.d.ts.map +1 -0
- package/dist/plus/integrations/providers/bitbucket/bitbucket.js +589 -0
- package/dist/plus/integrations/providers/bitbucket/bitbucket.js.map +1 -0
- package/dist/plus/integrations/providers/bitbucket/models.d.ts +222 -0
- package/dist/plus/integrations/providers/bitbucket/models.d.ts.map +1 -0
- package/dist/plus/integrations/providers/bitbucket/models.js +158 -0
- package/dist/plus/integrations/providers/bitbucket/models.js.map +1 -0
- package/dist/plus/integrations/providers/bitbucket-server/models.d.ts +138 -0
- package/dist/plus/integrations/providers/bitbucket-server/models.d.ts.map +1 -0
- package/dist/plus/integrations/providers/bitbucket-server/models.js +130 -0
- package/dist/plus/integrations/providers/bitbucket-server/models.js.map +1 -0
- package/dist/plus/integrations/providers/bitbucket-server.d.ts +84 -0
- package/dist/plus/integrations/providers/bitbucket-server.d.ts.map +1 -0
- package/dist/plus/integrations/providers/bitbucket-server.js +242 -0
- package/dist/plus/integrations/providers/bitbucket-server.js.map +1 -0
- package/dist/plus/integrations/providers/bitbucket.d.ts +84 -0
- package/dist/plus/integrations/providers/bitbucket.d.ts.map +1 -0
- package/dist/plus/integrations/providers/bitbucket.js +477 -0
- package/dist/plus/integrations/providers/bitbucket.js.map +1 -0
- package/dist/plus/integrations/providers/github/github.d.ts +5 -0
- package/dist/plus/integrations/providers/github/github.d.ts.map +1 -0
- package/dist/plus/integrations/providers/github/github.js +47 -0
- package/dist/plus/integrations/providers/github/github.js.map +1 -0
- package/dist/plus/integrations/providers/github/github.utils.d.ts +11 -0
- package/dist/plus/integrations/providers/github/github.utils.d.ts.map +1 -0
- package/dist/plus/integrations/providers/github/github.utils.js +6 -0
- package/dist/plus/integrations/providers/github/github.utils.js.map +1 -0
- package/dist/plus/integrations/providers/github/models.d.ts +3 -0
- package/dist/plus/integrations/providers/github/models.d.ts.map +1 -0
- package/dist/plus/integrations/providers/github/models.js +2 -0
- package/dist/plus/integrations/providers/github/models.js.map +1 -0
- package/dist/plus/integrations/providers/github.d.ts +116 -0
- package/dist/plus/integrations/providers/github.d.ts.map +1 -0
- package/dist/plus/integrations/providers/github.js +445 -0
- package/dist/plus/integrations/providers/github.js.map +1 -0
- package/dist/plus/integrations/providers/gitlab/gitlab.d.ts +71 -0
- package/dist/plus/integrations/providers/gitlab/gitlab.d.ts.map +1 -0
- package/dist/plus/integrations/providers/gitlab/gitlab.js +902 -0
- package/dist/plus/integrations/providers/gitlab/gitlab.js.map +1 -0
- package/dist/plus/integrations/providers/gitlab/gitlab.utils.d.ts +27 -0
- package/dist/plus/integrations/providers/gitlab/gitlab.utils.d.ts.map +1 -0
- package/dist/plus/integrations/providers/gitlab/gitlab.utils.js +53 -0
- package/dist/plus/integrations/providers/gitlab/gitlab.utils.js.map +1 -0
- package/dist/plus/integrations/providers/gitlab/models.d.ts +138 -0
- package/dist/plus/integrations/providers/gitlab/models.d.ts.map +1 -0
- package/dist/plus/integrations/providers/gitlab/models.js +99 -0
- package/dist/plus/integrations/providers/gitlab/models.js.map +1 -0
- package/dist/plus/integrations/providers/gitlab.d.ts +124 -0
- package/dist/plus/integrations/providers/gitlab.d.ts.map +1 -0
- package/dist/plus/integrations/providers/gitlab.js +519 -0
- package/dist/plus/integrations/providers/gitlab.js.map +1 -0
- package/dist/plus/integrations/providers/jira.d.ts +57 -0
- package/dist/plus/integrations/providers/jira.d.ts.map +1 -0
- package/dist/plus/integrations/providers/jira.js +425 -0
- package/dist/plus/integrations/providers/jira.js.map +1 -0
- package/dist/plus/integrations/providers/linear.d.ts +58 -0
- package/dist/plus/integrations/providers/linear.d.ts.map +1 -0
- package/dist/plus/integrations/providers/linear.js +304 -0
- package/dist/plus/integrations/providers/linear.js.map +1 -0
- package/dist/plus/integrations/providers/models.d.ts +712 -0
- package/dist/plus/integrations/providers/models.d.ts.map +1 -0
- package/dist/plus/integrations/providers/models.js +850 -0
- package/dist/plus/integrations/providers/models.js.map +1 -0
- package/dist/plus/integrations/providers/providersApi.d.ts +262 -0
- package/dist/plus/integrations/providers/providersApi.d.ts.map +1 -0
- package/dist/plus/integrations/providers/providersApi.js +1033 -0
- package/dist/plus/integrations/providers/providersApi.js.map +1 -0
- package/dist/plus/integrations/providers/trello.d.ts +47 -0
- package/dist/plus/integrations/providers/trello.d.ts.map +1 -0
- package/dist/plus/integrations/providers/trello.js +141 -0
- package/dist/plus/integrations/providers/trello.js.map +1 -0
- package/dist/plus/integrations/providers/utils/providerPaging.d.ts +29 -0
- package/dist/plus/integrations/providers/utils/providerPaging.d.ts.map +1 -0
- package/dist/plus/integrations/providers/utils/providerPaging.js +154 -0
- package/dist/plus/integrations/providers/utils/providerPaging.js.map +1 -0
- package/dist/plus/integrations/providers/utils.d.ts +75 -0
- package/dist/plus/integrations/providers/utils.d.ts.map +1 -0
- package/dist/plus/integrations/providers/utils.js +313 -0
- package/dist/plus/integrations/providers/utils.js.map +1 -0
- package/dist/plus/integrations/reads/context.d.ts +52 -0
- package/dist/plus/integrations/reads/context.d.ts.map +1 -0
- package/dist/plus/integrations/reads/context.js +2 -0
- package/dist/plus/integrations/reads/context.js.map +1 -0
- package/dist/plus/integrations/reads/cursors.d.ts +66 -0
- package/dist/plus/integrations/reads/cursors.d.ts.map +1 -0
- package/dist/plus/integrations/reads/cursors.js +133 -0
- package/dist/plus/integrations/reads/cursors.js.map +1 -0
- package/dist/plus/integrations/reads/drains.d.ts +60 -0
- package/dist/plus/integrations/reads/drains.d.ts.map +1 -0
- package/dist/plus/integrations/reads/drains.js +255 -0
- package/dist/plus/integrations/reads/drains.js.map +1 -0
- package/dist/plus/integrations/reads/filters.d.ts +81 -0
- package/dist/plus/integrations/reads/filters.d.ts.map +1 -0
- package/dist/plus/integrations/reads/filters.js +87 -0
- package/dist/plus/integrations/reads/filters.js.map +1 -0
- package/dist/plus/integrations/reads/hierarchy.d.ts +17 -0
- package/dist/plus/integrations/reads/hierarchy.d.ts.map +1 -0
- package/dist/plus/integrations/reads/hierarchy.js +348 -0
- package/dist/plus/integrations/reads/hierarchy.js.map +1 -0
- package/dist/plus/integrations/reads/hierarchy.utils.d.ts +53 -0
- package/dist/plus/integrations/reads/hierarchy.utils.d.ts.map +1 -0
- package/dist/plus/integrations/reads/hierarchy.utils.js +85 -0
- package/dist/plus/integrations/reads/hierarchy.utils.js.map +1 -0
- package/dist/plus/integrations/reads/issueTracker.d.ts +19 -0
- package/dist/plus/integrations/reads/issueTracker.d.ts.map +1 -0
- package/dist/plus/integrations/reads/issueTracker.js +346 -0
- package/dist/plus/integrations/reads/issueTracker.js.map +1 -0
- package/dist/plus/integrations/reads/issues.d.ts +34 -0
- package/dist/plus/integrations/reads/issues.d.ts.map +1 -0
- package/dist/plus/integrations/reads/issues.js +244 -0
- package/dist/plus/integrations/reads/issues.js.map +1 -0
- package/dist/plus/integrations/reads/paging.d.ts +136 -0
- package/dist/plus/integrations/reads/paging.d.ts.map +1 -0
- package/dist/plus/integrations/reads/paging.js +221 -0
- package/dist/plus/integrations/reads/paging.js.map +1 -0
- package/dist/plus/integrations/reads/pullRequests.d.ts +32 -0
- package/dist/plus/integrations/reads/pullRequests.d.ts.map +1 -0
- package/dist/plus/integrations/reads/pullRequests.js +151 -0
- package/dist/plus/integrations/reads/pullRequests.js.map +1 -0
- package/dist/plus/integrations/reads/warnings.d.ts +47 -0
- package/dist/plus/integrations/reads/warnings.d.ts.map +1 -0
- package/dist/plus/integrations/reads/warnings.js +81 -0
- package/dist/plus/integrations/reads/warnings.js.map +1 -0
- package/dist/plus/integrations/results.d.ts +189 -0
- package/dist/plus/integrations/results.d.ts.map +1 -0
- package/dist/plus/integrations/results.js +62 -0
- package/dist/plus/integrations/results.js.map +1 -0
- package/dist/plus/integrations/telemetry.d.ts +26 -0
- package/dist/plus/integrations/telemetry.d.ts.map +1 -0
- package/dist/plus/integrations/telemetry.js +11 -0
- package/dist/plus/integrations/telemetry.js.map +1 -0
- package/dist/plus/integrations/utils/domain.utils.d.ts +5 -0
- package/dist/plus/integrations/utils/domain.utils.d.ts.map +1 -0
- package/dist/plus/integrations/utils/domain.utils.js +27 -0
- package/dist/plus/integrations/utils/domain.utils.js.map +1 -0
- package/dist/plus/integrations/utils/integration.utils.d.ts +40 -0
- package/dist/plus/integrations/utils/integration.utils.d.ts.map +1 -0
- package/dist/plus/integrations/utils/integration.utils.js +182 -0
- package/dist/plus/integrations/utils/integration.utils.js.map +1 -0
- package/dist/utils/array.d.ts.map +1 -1
- package/dist/utils/array.js.map +1 -1
- package/dist/utils/brand.d.ts.map +1 -1
- package/dist/utils/cancellation.d.ts +13 -0
- package/dist/utils/cancellation.d.ts.map +1 -1
- package/dist/utils/cancellation.js +52 -7
- package/dist/utils/cancellation.js.map +1 -1
- package/dist/utils/charCode.d.ts.map +1 -1
- package/dist/utils/coalescedRun.d.ts +16 -0
- package/dist/utils/coalescedRun.d.ts.map +1 -0
- package/dist/utils/coalescedRun.js +43 -0
- package/dist/utils/coalescedRun.js.map +1 -0
- package/dist/utils/color.d.ts.map +1 -1
- package/dist/utils/color.js +3 -3
- package/dist/utils/color.js.map +1 -1
- package/dist/utils/date.d.ts +24 -0
- package/dist/utils/date.d.ts.map +1 -1
- package/dist/utils/date.js +62 -0
- package/dist/utils/date.js.map +1 -1
- package/dist/utils/debounce.js +1 -1
- package/dist/utils/debounce.js.map +1 -1
- package/dist/utils/decorators/debounce.d.ts.map +1 -1
- package/dist/utils/decorators/debounce.js.map +1 -1
- package/dist/utils/decorators/gate.d.ts.map +1 -1
- package/dist/utils/decorators/gate.js +2 -2
- package/dist/utils/decorators/gate.js.map +1 -1
- package/dist/utils/decorators/log.d.ts.map +1 -1
- package/dist/utils/decorators/log.js +5 -5
- package/dist/utils/decorators/log.js.map +1 -1
- package/dist/utils/decorators/memoize.d.ts.map +1 -1
- package/dist/utils/decorators/memoize.js +2 -2
- package/dist/utils/decorators/memoize.js.map +1 -1
- package/dist/utils/decorators/resolver.d.ts.map +1 -1
- package/dist/utils/decorators/resolver.js.map +1 -1
- package/dist/utils/decorators/sequentialize.d.ts.map +1 -1
- package/dist/utils/decorators/sequentialize.js +2 -2
- package/dist/utils/decorators/sequentialize.js.map +1 -1
- package/dist/utils/decorators/serializable.d.ts.map +1 -1
- package/dist/utils/decorators/serializable.js +1 -1
- package/dist/utils/decorators/serializable.js.map +1 -1
- package/dist/utils/dedupedAsyncCache.d.ts.map +1 -1
- package/dist/utils/disposable.d.ts +15 -2
- package/dist/utils/disposable.d.ts.map +1 -1
- package/dist/utils/disposable.js.map +1 -1
- package/dist/utils/env/browser/base64.d.ts.map +1 -1
- package/dist/utils/env/browser/base64.js.map +1 -1
- package/dist/utils/env/browser/crypto.d.ts.map +1 -1
- package/dist/utils/env/browser/crypto.js.map +1 -1
- package/dist/utils/env/browser/fs.d.ts.map +1 -1
- package/dist/utils/env/browser/fs.js.map +1 -1
- package/dist/utils/env/browser/hex.d.ts.map +1 -1
- package/dist/utils/env/browser/hex.js.map +1 -1
- package/dist/utils/env/browser/hrtime.d.ts.map +1 -1
- package/dist/utils/env/browser/hrtime.js.map +1 -1
- package/dist/utils/env/browser/logScope.d.ts.map +1 -1
- package/dist/utils/env/browser/logScope.js.map +1 -1
- package/dist/utils/env/browser/md5.d.ts.map +1 -1
- package/dist/utils/env/browser/md5.js.map +1 -1
- package/dist/utils/env/browser/platform.d.ts.map +1 -1
- package/dist/utils/env/browser/platform.js.map +1 -1
- package/dist/utils/env/node/base64.d.ts.map +1 -1
- package/dist/utils/env/node/base64.js.map +1 -1
- package/dist/utils/env/node/crypto.d.ts.map +1 -1
- package/dist/utils/env/node/crypto.js.map +1 -1
- package/dist/utils/env/node/exec.d.ts +9 -1
- package/dist/utils/env/node/exec.d.ts.map +1 -1
- package/dist/utils/env/node/exec.js +11 -4
- package/dist/utils/env/node/exec.js.map +1 -1
- package/dist/utils/env/node/fs.d.ts.map +1 -1
- package/dist/utils/env/node/fs.js.map +1 -1
- package/dist/utils/env/node/hex.d.ts.map +1 -1
- package/dist/utils/env/node/hex.js.map +1 -1
- package/dist/utils/env/node/hrtime.d.ts.map +1 -1
- package/dist/utils/env/node/hrtime.js.map +1 -1
- package/dist/utils/env/node/logScope.d.ts.map +1 -1
- package/dist/utils/env/node/logScope.js.map +1 -1
- package/dist/utils/env/node/platform.d.ts.map +1 -1
- package/dist/utils/env/node/platform.js.map +1 -1
- package/dist/utils/event.d.ts.map +1 -1
- package/dist/utils/event.js +18 -22
- package/dist/utils/event.js.map +1 -1
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js.map +1 -1
- package/dist/utils/function.d.ts.map +1 -1
- package/dist/utils/function.js +3 -3
- package/dist/utils/function.js.map +1 -1
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/iterable.d.ts.map +1 -1
- package/dist/utils/iterable.js +2 -6
- package/dist/utils/iterable.js.map +1 -1
- package/dist/utils/lazy.d.ts.map +1 -1
- package/dist/utils/lazy.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/logger.scoped.js +1 -1
- package/dist/utils/logger.scoped.js.map +1 -1
- package/dist/utils/lruMap.d.ts.map +1 -1
- package/dist/utils/lruMap.js.map +1 -1
- package/dist/utils/mru.d.ts.map +1 -1
- package/dist/utils/mru.js.map +1 -1
- package/dist/utils/object.js.map +1 -1
- package/dist/utils/paging.d.ts +29 -0
- package/dist/utils/paging.d.ts.map +1 -1
- package/dist/utils/paging.js +18 -0
- package/dist/utils/paging.js.map +1 -1
- package/dist/utils/path.js.map +1 -1
- package/dist/utils/promise.d.ts +10 -0
- package/dist/utils/promise.d.ts.map +1 -1
- package/dist/utils/promise.js +26 -3
- package/dist/utils/promise.js.map +1 -1
- package/dist/utils/promiseCache.d.ts +12 -2
- package/dist/utils/promiseCache.d.ts.map +1 -1
- package/dist/utils/promiseCache.js +80 -50
- package/dist/utils/promiseCache.js.map +1 -1
- package/dist/utils/searchTree.d.ts.map +1 -1
- package/dist/utils/searchTree.js +4 -1
- package/dist/utils/searchTree.js.map +1 -1
- package/dist/utils/stopwatch.d.ts.map +1 -1
- package/dist/utils/string.js +1 -1
- package/dist/utils/string.js.map +1 -1
- package/dist/utils/subscriptionManager.d.ts.map +1 -1
- package/dist/utils/subscriptionManager.js.map +1 -1
- package/dist/utils/trie.d.ts.map +1 -1
- package/dist/utils/trie.js +1 -0
- package/dist/utils/trie.js.map +1 -1
- package/docs/integrations.md +372 -0
- package/docs/kepler-read-api-parity.md +112 -0
- package/package.json +238 -172
- package/src/git/cache.ts +75 -8
- package/src/git/context.ts +4 -3
- package/src/git/errors.ts +36 -1
- package/src/git/models/commit.ts +1 -1
- package/src/git/models/graph.ts +147 -0
- package/src/git/models/graphSession.ts +205 -0
- package/src/git/models/issue.ts +12 -1
- package/src/git/models/pullRequest.ts +27 -1
- package/src/git/models/repository.ts +24 -1
- package/src/git/models/resourceDescriptor.ts +17 -0
- package/src/git/models/signature.ts +16 -0
- package/src/git/models/tag.ts +6 -1
- package/src/git/parsers/diffParser.ts +1 -1
- package/src/git/providers/branches.ts +6 -1
- package/src/git/providers/commits.ts +6 -1
- package/src/git/providers/config.ts +5 -1
- package/src/git/providers/graph.ts +69 -2
- package/src/git/providers/operations.ts +1 -1
- package/src/git/providers/status.ts +1 -1
- package/src/git/providers/worktrees.ts +17 -3
- package/src/git/remotes/azure-devops.ts +29 -33
- package/src/git/remotes/bitbucket-server.ts +23 -25
- package/src/git/remotes/bitbucket.ts +23 -25
- package/src/git/remotes/gerrit.ts +12 -14
- package/src/git/remotes/gitea.ts +13 -15
- package/src/git/remotes/github.ts +56 -58
- package/src/git/remotes/gitlab.ts +102 -104
- package/src/git/run.types.ts +54 -4
- package/src/git/utils/branch.utils.ts +12 -1
- package/src/git/utils/conflictResolution.utils.ts +126 -0
- package/src/git/utils/contributor.utils.ts +1 -1
- package/src/git/utils/fileStatus.utils.ts +7 -0
- package/src/git/utils/graph.utils.ts +46 -0
- package/src/git/utils/issue.utils.ts +1 -0
- package/src/git/utils/pullRequest.utils.ts +9 -0
- package/src/git/utils/reachability.utils.ts +79 -8
- package/src/git/utils/sshKey.utils.ts +30 -0
- package/src/git/watching/watchService.ts +16 -1
- package/src/git/watching/watchSession.ts +20 -2
- package/src/git-cli/exec/git.ts +144 -42
- package/src/git-cli/parsers/logParser.ts +83 -1
- package/src/git-cli/parsers/sshSignatureParser.ts +85 -0
- package/src/git-cli/parsers/worktreeParser.ts +5 -7
- package/src/git-cli/providers/branches.ts +60 -38
- package/src/git-cli/providers/commits.ts +102 -9
- package/src/git-cli/providers/graph.ts +1771 -393
- package/src/git-cli/providers/operations.ts +22 -2
- package/src/git-cli/providers/pausedOperations.ts +3 -3
- package/src/git-cli/providers/revision.ts +42 -0
- package/src/git-cli/providers/status.ts +333 -178
- package/src/git-cli/providers/tags.ts +2 -0
- package/src/git-cli/providers/worktrees.ts +57 -6
- package/src/git-cli/service.ts +9 -0
- package/src/ipc/ipcServer.ts +1 -1
- package/src/plus/agents/providers/claudeCodeProvider.ts +25 -0
- package/src/plus/agents/providers/claudeCodeTranscript.ts +320 -8
- package/src/plus/agents/types.ts +34 -0
- package/src/plus/ai/constants.ts +1 -9
- package/src/plus/ai/models/model.ts +53 -2
- package/src/plus/ai/models/promptTemplates.ts +9 -2
- package/src/plus/ai/prompts.ts +16 -48
- package/src/plus/ai/providers/anthropicProvider.ts +45 -3
- package/src/plus/ai/providers/deepSeekProvider.ts +17 -1
- package/src/plus/ai/providers/geminiProvider.ts +25 -6
- package/src/plus/ai/providers/gitkrakenProvider.ts +2 -0
- package/src/plus/ai/providers/huggingFaceProvider.ts +28 -21
- package/src/plus/ai/providers/openAICompatibleProviderBase.ts +16 -1
- package/src/plus/ai/providers/xaiProvider.ts +14 -1
- package/src/plus/ai/utils/ai.utils.ts +5 -7
- package/src/plus/ai/utils/results.utils.ts +32 -0
- package/src/plus/ai/utils/truncation.utils.ts +0 -1
- package/src/plus/git-github/api/github.ts +497 -129
- package/src/plus/git-github/models.ts +33 -0
- package/src/plus/git-github/providers/github/branches.ts +6 -3
- package/src/plus/git-github/providers/github/diff.ts +1 -1
- package/src/plus/git-github/providers/github/graph.ts +131 -0
- package/src/plus/git-github/providers/github/tags.ts +2 -0
- package/src/plus/integrations/authentication/cloudIntegrationService.ts +292 -0
- package/src/plus/integrations/authentication/configuredIntegrationService.ts +651 -0
- package/src/plus/integrations/authentication/integrationAuthenticationProvider.ts +363 -0
- package/src/plus/integrations/authentication/integrationAuthenticationService.ts +148 -0
- package/src/plus/integrations/authentication/manualTokenProvider.ts +79 -0
- package/src/plus/integrations/authentication/models.ts +202 -0
- package/src/plus/integrations/collectionMetadata.ts +143 -0
- package/src/plus/integrations/constants.ts +190 -0
- package/src/plus/integrations/context.ts +382 -0
- package/src/plus/integrations/errors.ts +184 -0
- package/src/plus/integrations/index.ts +216 -0
- package/src/plus/integrations/integrationService.ts +2589 -0
- package/src/plus/integrations/lite.ts +233 -0
- package/src/plus/integrations/manager.ts +359 -0
- package/src/plus/integrations/models/gitHostIntegration.ts +1631 -0
- package/src/plus/integrations/models/integration.ts +926 -0
- package/src/plus/integrations/models/issuesIntegration.ts +264 -0
- package/src/plus/integrations/providerFilters.ts +12 -0
- package/src/plus/integrations/providers/apiClients.ts +69 -0
- package/src/plus/integrations/providers/apiConfig.ts +71 -0
- package/src/plus/integrations/providers/azure/azure.ts +822 -0
- package/src/plus/integrations/providers/azure/models.ts +618 -0
- package/src/plus/integrations/providers/azureDevOps.ts +1342 -0
- package/src/plus/integrations/providers/bitbucket/bitbucket.ts +904 -0
- package/src/plus/integrations/providers/bitbucket/models.ts +445 -0
- package/src/plus/integrations/providers/bitbucket-server/models.ts +283 -0
- package/src/plus/integrations/providers/bitbucket-server.ts +447 -0
- package/src/plus/integrations/providers/bitbucket.ts +794 -0
- package/src/plus/integrations/providers/github/github.ts +64 -0
- package/src/plus/integrations/providers/github/github.utils.ts +23 -0
- package/src/plus/integrations/providers/github/models.ts +29 -0
- package/src/plus/integrations/providers/github.ts +750 -0
- package/src/plus/integrations/providers/gitlab/gitlab.ts +1320 -0
- package/src/plus/integrations/providers/gitlab/gitlab.utils.ts +80 -0
- package/src/plus/integrations/providers/gitlab/models.ts +271 -0
- package/src/plus/integrations/providers/gitlab.ts +832 -0
- package/src/plus/integrations/providers/jira.ts +564 -0
- package/src/plus/integrations/providers/linear.ts +402 -0
- package/src/plus/integrations/providers/models.ts +1622 -0
- package/src/plus/integrations/providers/providersApi.ts +1889 -0
- package/src/plus/integrations/providers/trello.ts +205 -0
- package/src/plus/integrations/providers/utils/providerPaging.ts +177 -0
- package/src/plus/integrations/providers/utils.ts +419 -0
- package/src/plus/integrations/reads/context.ts +75 -0
- package/src/plus/integrations/reads/cursors.ts +224 -0
- package/src/plus/integrations/reads/drains.ts +343 -0
- package/src/plus/integrations/reads/filters.ts +124 -0
- package/src/plus/integrations/reads/hierarchy.ts +493 -0
- package/src/plus/integrations/reads/hierarchy.utils.ts +106 -0
- package/src/plus/integrations/reads/issueTracker.ts +480 -0
- package/src/plus/integrations/reads/issues.ts +407 -0
- package/src/plus/integrations/reads/paging.ts +277 -0
- package/src/plus/integrations/reads/pullRequests.ts +267 -0
- package/src/plus/integrations/reads/warnings.ts +170 -0
- package/src/plus/integrations/results.ts +275 -0
- package/src/plus/integrations/telemetry.ts +29 -0
- package/src/plus/integrations/utils/domain.utils.ts +26 -0
- package/src/plus/integrations/utils/integration.utils.ts +215 -0
- package/src/utils/brand.ts +0 -2
- package/src/utils/cancellation.ts +56 -7
- package/src/utils/coalescedRun.ts +45 -0
- package/src/utils/color.ts +3 -3
- package/src/utils/date.ts +72 -0
- package/src/utils/debounce.ts +1 -1
- package/src/utils/decorators/gate.ts +2 -2
- package/src/utils/decorators/log.ts +5 -5
- package/src/utils/decorators/memoize.ts +2 -2
- package/src/utils/decorators/sequentialize.ts +2 -2
- package/src/utils/decorators/serializable.ts +1 -1
- package/src/utils/disposable.ts +15 -2
- package/src/utils/env/node/exec.ts +20 -5
- package/src/utils/event.ts +19 -25
- package/src/utils/function.ts +3 -3
- package/src/utils/iterable.ts +2 -6
- package/src/utils/logger.scoped.ts +1 -1
- package/src/utils/logger.ts +1 -1
- package/src/utils/paging.ts +46 -0
- package/src/utils/promise.ts +33 -3
- package/src/utils/promiseCache.ts +81 -51
- package/src/utils/searchTree.ts +4 -2
- package/src/utils/string.ts +1 -1
- package/src/utils/trie.ts +1 -0
- package/dist/plus/ai/providers/githubModelsProvider.d.ts +0 -19
- package/dist/plus/ai/providers/githubModelsProvider.d.ts.map +0 -1
- package/dist/plus/ai/providers/githubModelsProvider.js +0 -51
- package/dist/plus/ai/providers/githubModelsProvider.js.map +0 -1
- package/src/plus/ai/providers/githubModelsProvider.ts +0 -92
|
@@ -0,0 +1,1033 @@
|
|
|
1
|
+
import ProviderApis from '@gitkraken/provider-apis';
|
|
2
|
+
import { base64 } from '../../../utils/base64.js';
|
|
3
|
+
import { toTokenWithInfo } from '../authentication/models.js';
|
|
4
|
+
import { GitCloudHostIntegrationId, GitSelfManagedHostIntegrationId, IssuesCloudHostIntegrationId, } from '../constants.js';
|
|
5
|
+
import { AuthenticationError, AuthenticationErrorReason, isRateLimitResponse, RequestClientError, RequestNotFoundError, toError, toRateLimitError, } from '../errors.js';
|
|
6
|
+
import { providersMetadata } from './models.js';
|
|
7
|
+
import { collectProviderPagedResult, mergeCollectionMetadata, parsePageCursor, toPageCursor, } from './utils/providerPaging.js';
|
|
8
|
+
const createProviderApis = ProviderApis.default ?? ProviderApis;
|
|
9
|
+
// Both GitHub and GitLab `getRepo` throw a missing-repo error whose message is exactly
|
|
10
|
+
// `Repository <x> not found`. Anchoring to that shape (rather than a loose `not found` substring) keeps
|
|
11
|
+
// the message fallbacks from misclassifying unrelated GraphQL/transport failures as a confident negative.
|
|
12
|
+
const repoNotFoundMessage = /^Repository .+ not found$/i;
|
|
13
|
+
// Duck-typed rather than `ex instanceof GraphQLErrors`, because importing the class as a value makes this
|
|
14
|
+
// module unloadable from plain Node ESM consumers: `@gitkraken/provider-apis` is CommonJS and declares its
|
|
15
|
+
// exports through getters, which Node's `cjs-module-lexer` cannot see, so the only named exports it can
|
|
16
|
+
// synthesize are `default` and `module.exports`. Bundled hosts (webpack/esbuild) bind the named export
|
|
17
|
+
// fine, but the published package keeps third-party deps external, so the named import survives into
|
|
18
|
+
// consumers and breaks linking there. The SDK's constructor always assigns `graphQLErrors` (defaulting to
|
|
19
|
+
// `[]`) and it is the only SDK error carrying that field, so the shape check is unambiguous.
|
|
20
|
+
function isGraphQLErrors(ex) {
|
|
21
|
+
return ex instanceof Error && Array.isArray(ex.graphQLErrors);
|
|
22
|
+
}
|
|
23
|
+
// `handleProviderError` classifies not-found by HTTP status (404/410/422), which only works for the
|
|
24
|
+
// REST `getRepo` clients (Bitbucket, Bitbucket Server, Azure DevOps). GitHub and GitLab `getRepo` are
|
|
25
|
+
// GraphQL: a missing repo comes back as HTTP 200 with a null node, and the SDK throws an unclassified
|
|
26
|
+
// error with no `response.status`, so it would otherwise fall through to the generic error bucket. This
|
|
27
|
+
// detects the SDK's not-found shapes so `getRepo` can rethrow them as `RequestNotFoundError`, keeping the
|
|
28
|
+
// facade's by-type mapping intact.
|
|
29
|
+
function isGraphQLRepoNotFoundError(ex) {
|
|
30
|
+
// GitHub throws `GraphQLErrors`. The SDK reports the null repository node with the same
|
|
31
|
+
// `Repository <x> not found` message regardless of the underlying cause, so a `FORBIDDEN` or
|
|
32
|
+
// `RATE_LIMITED` GraphQL error would also surface with that message. Trust the structured error type
|
|
33
|
+
// when entries are present (only `NOT_FOUND` is a real not-found), and fall back to the repo-specific
|
|
34
|
+
// message only when there are no entries to disambiguate (a bare null node).
|
|
35
|
+
if (isGraphQLErrors(ex)) {
|
|
36
|
+
const errors = ex.graphQLErrors;
|
|
37
|
+
// Scope NOT_FOUND to the `repository` field: `getRepo`'s query only selects that node today, but
|
|
38
|
+
// were it to grow other selections that can emit NOT_FOUND, an unscoped check would misclassify
|
|
39
|
+
// them. Tolerate a missing `path` so we degrade to the current behavior if the SDK stops populating
|
|
40
|
+
// it, rather than silently regressing to `error`.
|
|
41
|
+
if (errors?.length) {
|
|
42
|
+
return errors.some((e) => e.type === 'NOT_FOUND' && (e.path == null || e.path.includes('repository')));
|
|
43
|
+
}
|
|
44
|
+
return repoNotFoundMessage.test(ex.message);
|
|
45
|
+
}
|
|
46
|
+
// GitLab's `getRepo` throws a plain Error; match its not-found message specifically so unrelated
|
|
47
|
+
// bare Errors (network/parse failures) still reach the generic error bucket.
|
|
48
|
+
return ex instanceof Error && repoNotFoundMessage.test(ex.message);
|
|
49
|
+
}
|
|
50
|
+
const trelloBaseUrl = 'https://api.trello.com';
|
|
51
|
+
function getTrelloAuthHeaders(appKey, token) {
|
|
52
|
+
return {
|
|
53
|
+
Authorization: `OAuth oauth_consumer_key="${appKey}", oauth_token="${token}"`,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function getTrelloMemberAvatarUrl(member) {
|
|
57
|
+
if (member.avatarUrl != null)
|
|
58
|
+
return member.avatarUrl;
|
|
59
|
+
if (member.avatarHash == null)
|
|
60
|
+
return null;
|
|
61
|
+
return `https://trello-members.s3.amazonaws.com/${member.id}/${member.avatarHash}/50.png`;
|
|
62
|
+
}
|
|
63
|
+
function fromTrelloCard(card, trelloBoardListsById) {
|
|
64
|
+
const createdDate = new Date(1000 * parseInt(card.id.substring(0, 8), 16));
|
|
65
|
+
const list = card.idList != null ? trelloBoardListsById[card.idList] : undefined;
|
|
66
|
+
return {
|
|
67
|
+
id: card.id,
|
|
68
|
+
commentCount: card.badges?.comments ?? null,
|
|
69
|
+
number: String(card.idShort),
|
|
70
|
+
title: card.name,
|
|
71
|
+
url: card.url,
|
|
72
|
+
closedDate: null,
|
|
73
|
+
createdDate: new Date(createdDate.toISOString()),
|
|
74
|
+
author: null,
|
|
75
|
+
updatedDate: new Date(card.dateLastActivity),
|
|
76
|
+
assignees: (card.members ?? []).map(member => ({
|
|
77
|
+
id: member.id,
|
|
78
|
+
username: member.username ?? null,
|
|
79
|
+
name: member.fullName ?? null,
|
|
80
|
+
email: null,
|
|
81
|
+
avatarUrl: getTrelloMemberAvatarUrl(member),
|
|
82
|
+
url: null,
|
|
83
|
+
})),
|
|
84
|
+
description: null,
|
|
85
|
+
state: list != null ? { id: card.idList, name: list.name, color: null } : null,
|
|
86
|
+
type: null,
|
|
87
|
+
repository: null,
|
|
88
|
+
upvoteCount: card.badges?.votes ?? null,
|
|
89
|
+
labels: (card.labels ?? []).map(label => ({
|
|
90
|
+
color: label.color,
|
|
91
|
+
description: null,
|
|
92
|
+
id: label.id,
|
|
93
|
+
name: label.name,
|
|
94
|
+
})),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
export class ProvidersApi {
|
|
98
|
+
authenticationService;
|
|
99
|
+
providers;
|
|
100
|
+
request;
|
|
101
|
+
constructor(authenticationService) {
|
|
102
|
+
this.authenticationService = authenticationService;
|
|
103
|
+
const http = authenticationService.ctx.http;
|
|
104
|
+
const userAgent = http.userAgent;
|
|
105
|
+
const customFetch = async ({ url, ...options }) => {
|
|
106
|
+
const response = await http.fetch(url, {
|
|
107
|
+
...options,
|
|
108
|
+
headers: {
|
|
109
|
+
'User-Agent': userAgent,
|
|
110
|
+
...options.headers,
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
return parseFetchResponseForApi(response);
|
|
114
|
+
};
|
|
115
|
+
this.request = customFetch;
|
|
116
|
+
const providerApis = createProviderApis({ request: customFetch });
|
|
117
|
+
this.providers = {
|
|
118
|
+
[GitCloudHostIntegrationId.GitHub]: {
|
|
119
|
+
...providersMetadata[GitCloudHostIntegrationId.GitHub],
|
|
120
|
+
provider: providerApis.github,
|
|
121
|
+
getRepoFn: providerApis.github.getRepo.bind(providerApis.github),
|
|
122
|
+
getCurrentUserFn: providerApis.github.getCurrentUser.bind(providerApis.github),
|
|
123
|
+
getPullRequestsForReposFn: providerApis.github.getPullRequestsForRepos.bind(providerApis.github),
|
|
124
|
+
getPullRequestsForUserFn: providerApis.github.getPullRequestsAssociatedWithUser.bind(providerApis.github),
|
|
125
|
+
getIssuesForReposFn: providerApis.github.getIssuesForRepos.bind(providerApis.github),
|
|
126
|
+
getOrgsForCurrentUserFn: providerApis.github.getOrgsForCurrentUser.bind(providerApis.github),
|
|
127
|
+
getReposForOrgFn: providerApis.github.getReposForOrg.bind(providerApis.github),
|
|
128
|
+
getReposForCurrentUserFn: providerApis.github.getReposForCurrentUser.bind(providerApis.github),
|
|
129
|
+
},
|
|
130
|
+
[GitSelfManagedHostIntegrationId.CloudGitHubEnterprise]: {
|
|
131
|
+
...providersMetadata[GitSelfManagedHostIntegrationId.CloudGitHubEnterprise],
|
|
132
|
+
provider: providerApis.github,
|
|
133
|
+
getRepoFn: providerApis.github.getRepo.bind(providerApis.github),
|
|
134
|
+
getCurrentUserFn: providerApis.github.getCurrentUser.bind(providerApis.github),
|
|
135
|
+
getPullRequestsForReposFn: providerApis.github.getPullRequestsForRepos.bind(providerApis.github),
|
|
136
|
+
getPullRequestsForUserFn: providerApis.github.getPullRequestsAssociatedWithUser.bind(providerApis.github),
|
|
137
|
+
getIssuesForReposFn: providerApis.github.getIssuesForRepos.bind(providerApis.github),
|
|
138
|
+
getOrgsForCurrentUserFn: providerApis.github.getOrgsForCurrentUser.bind(providerApis.github),
|
|
139
|
+
getReposForOrgFn: providerApis.github.getReposForOrg.bind(providerApis.github),
|
|
140
|
+
getReposForCurrentUserFn: providerApis.github.getReposForCurrentUser.bind(providerApis.github),
|
|
141
|
+
},
|
|
142
|
+
[GitCloudHostIntegrationId.GitLab]: {
|
|
143
|
+
...providersMetadata[GitCloudHostIntegrationId.GitLab],
|
|
144
|
+
provider: providerApis.gitlab,
|
|
145
|
+
getRepoFn: providerApis.gitlab.getRepo.bind(providerApis.gitlab),
|
|
146
|
+
getCurrentUserFn: providerApis.gitlab.getCurrentUser.bind(providerApis.gitlab),
|
|
147
|
+
getPullRequestsForReposFn: providerApis.gitlab.getPullRequestsForRepos.bind(providerApis.gitlab),
|
|
148
|
+
getPullRequestsForRepoFn: providerApis.gitlab.getPullRequestsForRepo.bind(providerApis.gitlab),
|
|
149
|
+
getPullRequestsForUserFn: providerApis.gitlab.getPullRequestsAssociatedWithUser.bind(providerApis.gitlab),
|
|
150
|
+
getGitLabPullRequestsForUserAssociationFn: providerApis.gitlab.getPullRequestsForUser.bind(providerApis.gitlab),
|
|
151
|
+
getIssueFn: providerApis.gitlab.getIssue.bind(providerApis.gitlab),
|
|
152
|
+
getIssuesForReposFn: providerApis.gitlab.getIssuesForRepos.bind(providerApis.gitlab),
|
|
153
|
+
getIssuesForRepoFn: providerApis.gitlab.getIssuesForRepo.bind(providerApis.gitlab),
|
|
154
|
+
getIssuesForCurrentUserFn: providerApis.gitlab.getIssuesForCurrentUser.bind(providerApis.gitlab),
|
|
155
|
+
mergePullRequestFn: providerApis.gitlab.mergePullRequest.bind(providerApis.gitlab),
|
|
156
|
+
getGroupsForCurrentUserFn: providerApis.gitlab.getGroupsForCurrentUser.bind(providerApis.gitlab),
|
|
157
|
+
getReposForCurrentUserFn: providerApis.gitlab.getReposForCurrentUser.bind(providerApis.gitlab),
|
|
158
|
+
},
|
|
159
|
+
[GitSelfManagedHostIntegrationId.CloudGitLabSelfHosted]: {
|
|
160
|
+
...providersMetadata[GitSelfManagedHostIntegrationId.CloudGitLabSelfHosted],
|
|
161
|
+
provider: providerApis.gitlab,
|
|
162
|
+
getRepoFn: providerApis.gitlab.getRepo.bind(providerApis.gitlab),
|
|
163
|
+
getCurrentUserFn: providerApis.gitlab.getCurrentUser.bind(providerApis.gitlab),
|
|
164
|
+
getPullRequestsForReposFn: providerApis.gitlab.getPullRequestsForRepos.bind(providerApis.gitlab),
|
|
165
|
+
getPullRequestsForRepoFn: providerApis.gitlab.getPullRequestsForRepo.bind(providerApis.gitlab),
|
|
166
|
+
getPullRequestsForUserFn: providerApis.gitlab.getPullRequestsAssociatedWithUser.bind(providerApis.gitlab),
|
|
167
|
+
getGitLabPullRequestsForUserAssociationFn: providerApis.gitlab.getPullRequestsForUser.bind(providerApis.gitlab),
|
|
168
|
+
getIssueFn: providerApis.gitlab.getIssue.bind(providerApis.gitlab),
|
|
169
|
+
getIssuesForReposFn: providerApis.gitlab.getIssuesForRepos.bind(providerApis.gitlab),
|
|
170
|
+
getIssuesForRepoFn: providerApis.gitlab.getIssuesForRepo.bind(providerApis.gitlab),
|
|
171
|
+
getIssuesForCurrentUserFn: providerApis.gitlab.getIssuesForCurrentUser.bind(providerApis.gitlab),
|
|
172
|
+
mergePullRequestFn: providerApis.gitlab.mergePullRequest.bind(providerApis.gitlab),
|
|
173
|
+
getGroupsForCurrentUserFn: providerApis.gitlab.getGroupsForCurrentUser.bind(providerApis.gitlab),
|
|
174
|
+
getReposForCurrentUserFn: providerApis.gitlab.getReposForCurrentUser.bind(providerApis.gitlab),
|
|
175
|
+
},
|
|
176
|
+
[GitCloudHostIntegrationId.Bitbucket]: {
|
|
177
|
+
...providersMetadata[GitCloudHostIntegrationId.Bitbucket],
|
|
178
|
+
provider: providerApis.bitbucket,
|
|
179
|
+
getRepoFn: providerApis.bitbucket.getRepo.bind(providerApis.bitbucket),
|
|
180
|
+
getCurrentUserFn: providerApis.bitbucket.getCurrentUser.bind(providerApis.bitbucket),
|
|
181
|
+
getBitbucketResourcesForCurrentUserFn: providerApis.bitbucket.getWorkspacesForCurrentUser.bind(providerApis.bitbucket),
|
|
182
|
+
getBitbucketPullRequestsAuthoredByUserForWorkspaceFn: providerApis.bitbucket.getPullRequestsForUserAndWorkspace.bind(providerApis.bitbucket),
|
|
183
|
+
getPullRequestsForReposFn: providerApis.bitbucket.getPullRequestsForRepos.bind(providerApis.bitbucket),
|
|
184
|
+
getPullRequestsForRepoFn: providerApis.bitbucket.getPullRequestsForRepo.bind(providerApis.bitbucket),
|
|
185
|
+
mergePullRequestFn: providerApis.bitbucket.mergePullRequest.bind(providerApis.bitbucket),
|
|
186
|
+
getReposForWorkspaceFn: providerApis.bitbucket.getReposForWorkspace.bind(providerApis.bitbucket),
|
|
187
|
+
},
|
|
188
|
+
[GitSelfManagedHostIntegrationId.BitbucketServer]: {
|
|
189
|
+
...providersMetadata[GitSelfManagedHostIntegrationId.BitbucketServer],
|
|
190
|
+
provider: providerApis.bitbucketServer,
|
|
191
|
+
getRepoFn: providerApis.bitbucketServer.getRepo.bind(providerApis.bitbucketServer),
|
|
192
|
+
getCurrentUserFn: providerApis.bitbucketServer.getCurrentUser.bind(providerApis.bitbucketServer),
|
|
193
|
+
getBitbucketServerPullRequestsForCurrentUserFn: providerApis.bitbucketServer.getPullRequestsForCurrentUser.bind(providerApis.bitbucketServer),
|
|
194
|
+
getPullRequestsForReposFn: providerApis.bitbucketServer.getPullRequestsForRepos.bind(providerApis.bitbucketServer),
|
|
195
|
+
getPullRequestsForRepoFn: providerApis.bitbucketServer.getPullRequestsForRepo.bind(providerApis.bitbucketServer),
|
|
196
|
+
mergePullRequestFn: providerApis.bitbucketServer.mergePullRequest.bind(providerApis.bitbucketServer),
|
|
197
|
+
},
|
|
198
|
+
[GitCloudHostIntegrationId.AzureDevOps]: {
|
|
199
|
+
...providersMetadata[GitCloudHostIntegrationId.AzureDevOps],
|
|
200
|
+
provider: providerApis.azureDevOps,
|
|
201
|
+
getRepoOfProjectFn: providerApis.azureDevOps.getRepo.bind(providerApis.azureDevOps),
|
|
202
|
+
getCurrentUserFn: providerApis.azureDevOps.getCurrentUser.bind(providerApis.azureDevOps),
|
|
203
|
+
getCurrentUserForInstanceFn: providerApis.azureDevOps.getCurrentUserForInstance.bind(providerApis.azureDevOps),
|
|
204
|
+
getAzureResourcesForUserFn: providerApis.azureDevOps.getOrgsForUser.bind(providerApis.azureDevOps),
|
|
205
|
+
getAzureProjectsForResourceFn: providerApis.azureDevOps.getAzureProjects.bind(providerApis.azureDevOps),
|
|
206
|
+
getPullRequestsForReposFn: providerApis.azureDevOps.getPullRequestsForRepos.bind(providerApis.azureDevOps),
|
|
207
|
+
getPullRequestsForRepoFn: providerApis.azureDevOps.getPullRequestsForRepo.bind(providerApis.azureDevOps),
|
|
208
|
+
getPullRequestsForAzureProjectsFn: providerApis.azureDevOps.getPullRequestsForProjects.bind(providerApis.azureDevOps),
|
|
209
|
+
getPullRequestsForAzureProjectFn: providerApis.azureDevOps.getPullRequestsForProject.bind(providerApis.azureDevOps),
|
|
210
|
+
getIssuesForAzureProjectFn: providerApis.azureDevOps.getIssuesForAzureProject.bind(providerApis.azureDevOps),
|
|
211
|
+
getReposForAzureProjectFn: providerApis.azureDevOps.getReposForAzureProject.bind(providerApis.azureDevOps),
|
|
212
|
+
mergePullRequestFn: providerApis.azureDevOps.mergePullRequest.bind(providerApis.azureDevOps),
|
|
213
|
+
},
|
|
214
|
+
[GitSelfManagedHostIntegrationId.AzureDevOpsServer]: {
|
|
215
|
+
...providersMetadata[GitSelfManagedHostIntegrationId.AzureDevOpsServer],
|
|
216
|
+
provider: providerApis.azureDevOps,
|
|
217
|
+
getRepoOfProjectFn: providerApis.azureDevOps.getRepo.bind(providerApis.azureDevOps),
|
|
218
|
+
getCurrentUserFn: providerApis.azureDevOps.getCurrentUser.bind(providerApis.azureDevOps),
|
|
219
|
+
getCurrentUserForInstanceFn: providerApis.azureDevOps.getCurrentUserForInstance.bind(providerApis.azureDevOps),
|
|
220
|
+
getAzureResourcesForUserFn: providerApis.azureDevOps.getCollectionsForUser.bind(providerApis.azureDevOps),
|
|
221
|
+
getAzureProjectsForResourceFn: providerApis.azureDevOps.getAzureProjects.bind(providerApis.azureDevOps),
|
|
222
|
+
getPullRequestsForReposFn: providerApis.azureDevOps.getPullRequestsForRepos.bind(providerApis.azureDevOps),
|
|
223
|
+
getPullRequestsForRepoFn: providerApis.azureDevOps.getPullRequestsForRepo.bind(providerApis.azureDevOps),
|
|
224
|
+
getPullRequestsForAzureProjectsFn: providerApis.azureDevOps.getPullRequestsForProjects.bind(providerApis.azureDevOps),
|
|
225
|
+
getPullRequestsForAzureProjectFn: providerApis.azureDevOps.getPullRequestsForProject.bind(providerApis.azureDevOps),
|
|
226
|
+
getIssuesForAzureProjectFn: providerApis.azureDevOps.getIssuesForAzureProject.bind(providerApis.azureDevOps),
|
|
227
|
+
getReposForAzureProjectFn: providerApis.azureDevOps.getReposForAzureProject.bind(providerApis.azureDevOps),
|
|
228
|
+
mergePullRequestFn: providerApis.azureDevOps.mergePullRequest.bind(providerApis.azureDevOps),
|
|
229
|
+
},
|
|
230
|
+
[IssuesCloudHostIntegrationId.Jira]: {
|
|
231
|
+
...providersMetadata[IssuesCloudHostIntegrationId.Jira],
|
|
232
|
+
provider: providerApis.jira,
|
|
233
|
+
getCurrentUserForResourceFn: providerApis.jira.getCurrentUserForResource.bind(providerApis.jira),
|
|
234
|
+
getJiraResourcesForCurrentUserFn: providerApis.jira.getJiraResourcesForCurrentUser.bind(providerApis.jira),
|
|
235
|
+
getJiraProjectsForResourcesFn: providerApis.jira.getJiraProjectsForResources.bind(providerApis.jira),
|
|
236
|
+
getJiraProjectsForResourceFn: providerApis.jira.getJiraProjectsForResource.bind(providerApis.jira),
|
|
237
|
+
getIssueFn: providerApis.jira.getIssue.bind(providerApis.jira),
|
|
238
|
+
getIssuesForProjectFn: providerApis.jira.getIssuesForProject.bind(providerApis.jira),
|
|
239
|
+
getIssuesForResourceForCurrentUserFn: providerApis.jira.getIssuesForResourceForCurrentUser.bind(providerApis.jira),
|
|
240
|
+
},
|
|
241
|
+
[IssuesCloudHostIntegrationId.Linear]: {
|
|
242
|
+
...providersMetadata[IssuesCloudHostIntegrationId.Linear],
|
|
243
|
+
provider: providerApis.linear,
|
|
244
|
+
getIssueFn: providerApis.linear.getIssue.bind(providerApis.linear),
|
|
245
|
+
getIssuesForCurrentUserFn: providerApis.linear.getIssuesForCurrentUser.bind(providerApis.linear),
|
|
246
|
+
getLinearOrganizationFn: providerApis.linear.getLinearOrganization.bind(providerApis.linear),
|
|
247
|
+
getLinearTeamsForCurrentUserFn: providerApis.linear.getTeamsForCurrentUser.bind(providerApis.linear),
|
|
248
|
+
getLinearIssuesFn: providerApis.linear.getIssues.bind(providerApis.linear),
|
|
249
|
+
getLinearCurrentUserFn: providerApis.linear.getCurrentUser.bind(providerApis.linear),
|
|
250
|
+
},
|
|
251
|
+
[IssuesCloudHostIntegrationId.Trello]: {
|
|
252
|
+
...providersMetadata[IssuesCloudHostIntegrationId.Trello],
|
|
253
|
+
provider: providerApis.trello,
|
|
254
|
+
getTrelloCurrentUserFn: providerApis.trello.getCurrentUser.bind(providerApis.trello),
|
|
255
|
+
getTrelloBoardsForCurrentUserFn: providerApis.trello.getBoardsForCurrentUser.bind(providerApis.trello),
|
|
256
|
+
getTrelloListsForBoardFn: providerApis.trello.getListsForTrelloBoard.bind(providerApis.trello),
|
|
257
|
+
getTrelloAccountForIdFn: providerApis.trello.getAccountForId.bind(providerApis.trello),
|
|
258
|
+
getTrelloIssuesForBoardFn: providerApis.trello.getIssuesForBoard.bind(providerApis.trello),
|
|
259
|
+
getTrelloLabelsForBoardFn: providerApis.trello.getLabelsForBoard.bind(providerApis.trello),
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
getScopesForProvider(providerId) {
|
|
264
|
+
return this.providers[providerId]?.scopes;
|
|
265
|
+
}
|
|
266
|
+
getProviderDomain(providerId) {
|
|
267
|
+
return this.providers[providerId]?.domain;
|
|
268
|
+
}
|
|
269
|
+
getProviderPullRequestsPagingMode(providerId) {
|
|
270
|
+
return this.providers[providerId]?.pullRequestsPagingMode;
|
|
271
|
+
}
|
|
272
|
+
getProviderIssuesPagingMode(providerId) {
|
|
273
|
+
return this.providers[providerId]?.issuesPagingMode;
|
|
274
|
+
}
|
|
275
|
+
providerSupportsPullRequestFilters(providerId, filters) {
|
|
276
|
+
return (this.providers[providerId]?.supportedPullRequestFilters != null &&
|
|
277
|
+
filters.every(filter => this.providers[providerId]?.supportedPullRequestFilters?.includes(filter)));
|
|
278
|
+
}
|
|
279
|
+
providerSupportsIssueFilters(providerId, filters) {
|
|
280
|
+
return (this.providers[providerId]?.supportedIssueFilters != null &&
|
|
281
|
+
filters.every(filter => this.providers[providerId]?.supportedIssueFilters?.includes(filter)));
|
|
282
|
+
}
|
|
283
|
+
isRepoIdsInput(input) {
|
|
284
|
+
return (input != null &&
|
|
285
|
+
Array.isArray(input) &&
|
|
286
|
+
input.every((id) => typeof id === 'string' || typeof id === 'number'));
|
|
287
|
+
}
|
|
288
|
+
async getProviderToken(provider, options) {
|
|
289
|
+
// When a specific connection is requested, resolve that connection's cloud session (mirroring
|
|
290
|
+
// `Integration.resolveReadSession`); otherwise keep the plain descriptor so the primary is resolved.
|
|
291
|
+
// An empty string is not a real target, so it must also fall through to the primary path.
|
|
292
|
+
const providerDescriptor = options?.connectionId
|
|
293
|
+
? { domain: provider.domain, scopes: provider.scopes, connectionId: options.connectionId, cloud: true }
|
|
294
|
+
: { domain: provider.domain, scopes: provider.scopes };
|
|
295
|
+
try {
|
|
296
|
+
const authProvider = await this.authenticationService.get(provider.id);
|
|
297
|
+
const session = await authProvider.getSession(providerDescriptor, {
|
|
298
|
+
createIfNeeded: options?.createSessionIfNeeded,
|
|
299
|
+
});
|
|
300
|
+
if (session == null) {
|
|
301
|
+
return undefined;
|
|
302
|
+
}
|
|
303
|
+
return toTokenWithInfo(provider.id, session);
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
getAzurePATForOAuthToken(oauthToken) {
|
|
310
|
+
return base64(`PAT:${oauthToken}`);
|
|
311
|
+
}
|
|
312
|
+
async ensureProviderToken(tokenOptInfo) {
|
|
313
|
+
const providerId = tokenOptInfo.providerId;
|
|
314
|
+
const provider = this.providers[providerId];
|
|
315
|
+
if (provider == null) {
|
|
316
|
+
throw new Error(`Provider with id ${providerId} not registered`);
|
|
317
|
+
}
|
|
318
|
+
if (providerId !== provider.id) {
|
|
319
|
+
throw new Error(`Provider id mismatch: expected ${providerId} but got ${provider.id}`);
|
|
320
|
+
}
|
|
321
|
+
const connectionId = 'connectionId' in tokenOptInfo ? tokenOptInfo.connectionId : undefined;
|
|
322
|
+
const tokenWithInfo = tokenOptInfo?.accessToken
|
|
323
|
+
? tokenOptInfo
|
|
324
|
+
: await this.getProviderToken(provider, {
|
|
325
|
+
connectionId: connectionId,
|
|
326
|
+
});
|
|
327
|
+
if (tokenWithInfo == null) {
|
|
328
|
+
throw new Error(`Not connected to provider ${providerId}`);
|
|
329
|
+
}
|
|
330
|
+
return { provider: provider, tokenWithInfo: tokenWithInfo };
|
|
331
|
+
}
|
|
332
|
+
async ensureProviderTokenAndFunction(tokenOptInfo, providerFn) {
|
|
333
|
+
const { provider, tokenWithInfo } = await this.ensureProviderToken(tokenOptInfo);
|
|
334
|
+
const providerId = tokenOptInfo.providerId;
|
|
335
|
+
if (provider[providerFn] == null) {
|
|
336
|
+
throw new Error(`Provider with id ${providerId} does not support function: ${providerFn}`);
|
|
337
|
+
}
|
|
338
|
+
return { provider: provider, tokenWithInfo: tokenWithInfo };
|
|
339
|
+
}
|
|
340
|
+
handleProviderError(tokenWithInfo, error) {
|
|
341
|
+
const { accessToken: token, ...tokenInfo } = tokenWithInfo;
|
|
342
|
+
const providerId = tokenWithInfo.providerId;
|
|
343
|
+
const provider = this.providers[providerId];
|
|
344
|
+
if (provider == null) {
|
|
345
|
+
throw new Error(`Provider with id ${providerId} not registered`);
|
|
346
|
+
}
|
|
347
|
+
if (error?.response?.status != null) {
|
|
348
|
+
const status = error.response.status;
|
|
349
|
+
switch (status) {
|
|
350
|
+
case 404: // Not found
|
|
351
|
+
case 410: // Gone
|
|
352
|
+
case 422: // Unprocessable Entity
|
|
353
|
+
throw new RequestNotFoundError(error);
|
|
354
|
+
case 429: // Too Many Requests
|
|
355
|
+
throw toRateLimitError(error, token);
|
|
356
|
+
case 401: // Unauthorized
|
|
357
|
+
case 403: // Forbidden
|
|
358
|
+
// A throttled request arrives on both statuses depending on the host (see
|
|
359
|
+
// `isRateLimitResponse`); 403 previously skipped the check, so every provider going through the
|
|
360
|
+
// SDK reported a rate limit as `auth` and asked the user to reconnect a healthy account.
|
|
361
|
+
if (isRateLimitResponse({ status: status, message: error.message })) {
|
|
362
|
+
throw toRateLimitError(error, token);
|
|
363
|
+
}
|
|
364
|
+
throw new AuthenticationError(tokenInfo, status === 401 ? AuthenticationErrorReason.Unauthorized : AuthenticationErrorReason.Forbidden, error);
|
|
365
|
+
default:
|
|
366
|
+
if (status >= 400 && status < 500) {
|
|
367
|
+
throw new RequestClientError(error);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
throw error;
|
|
372
|
+
}
|
|
373
|
+
async getPagedResult(args, providerFn, tokenWithInfo, cursor = '{}', isPAT = false, baseUrl) {
|
|
374
|
+
let cursorInfo;
|
|
375
|
+
try {
|
|
376
|
+
cursorInfo = JSON.parse(cursor);
|
|
377
|
+
}
|
|
378
|
+
catch {
|
|
379
|
+
cursorInfo = {};
|
|
380
|
+
}
|
|
381
|
+
const cursorValue = cursorInfo.value;
|
|
382
|
+
const cursorType = cursorInfo.type;
|
|
383
|
+
// An explicit numbered `page` request wins over a page-typed cursor; otherwise follow the cursor. A
|
|
384
|
+
// live cursor-typed cursor still takes precedence so an in-flight continuation is never clobbered.
|
|
385
|
+
const requestedPage = typeof args?.page === 'number' ? args.page : undefined;
|
|
386
|
+
const requestedPageSize = typeof args?.pageSize === 'number' ? args.pageSize : undefined;
|
|
387
|
+
let cursorOrPage = {};
|
|
388
|
+
if (requestedPage != null && cursorType !== 'cursor') {
|
|
389
|
+
cursorOrPage = { page: requestedPage };
|
|
390
|
+
}
|
|
391
|
+
else if (cursorType === 'page') {
|
|
392
|
+
cursorOrPage = { page: cursorValue };
|
|
393
|
+
}
|
|
394
|
+
else if (cursorType === 'cursor') {
|
|
395
|
+
cursorOrPage = { cursor: cursorValue };
|
|
396
|
+
}
|
|
397
|
+
// Strip the caller's paging keys so `getPagedResult` fully controls them; otherwise `args.page` could
|
|
398
|
+
// survive alongside a resolved `cursor` (or the raw serialized wrapper `args.cursor` could leak in when
|
|
399
|
+
// following a page), letting the provider clobber the continuation we intended.
|
|
400
|
+
const { page: _page, pageSize: _pageSize, cursor: _cursor, ...restArgs } = args ?? {};
|
|
401
|
+
const input = {
|
|
402
|
+
...restArgs,
|
|
403
|
+
...cursorOrPage,
|
|
404
|
+
// `pageSize` is honored by numbered providers; GitHub reads `maxPageSize`. Set both so whichever
|
|
405
|
+
// the resolved provider understands takes effect; the other is ignored.
|
|
406
|
+
...(requestedPageSize != null ? { pageSize: requestedPageSize, maxPageSize: requestedPageSize } : {}),
|
|
407
|
+
};
|
|
408
|
+
try {
|
|
409
|
+
const result = await providerFn?.(input, {
|
|
410
|
+
token: tokenWithInfo.accessToken,
|
|
411
|
+
isPAT: isPAT,
|
|
412
|
+
baseUrl: baseUrl,
|
|
413
|
+
});
|
|
414
|
+
if (result == null) {
|
|
415
|
+
const continuationWasRequested = (cursor != null && cursor !== '{}') || (requestedPage != null && requestedPage > 1);
|
|
416
|
+
return continuationWasRequested
|
|
417
|
+
? {
|
|
418
|
+
values: [],
|
|
419
|
+
paging: { cursor: '{}', more: false, truncated: true },
|
|
420
|
+
metadata: { completeness: 'partial' },
|
|
421
|
+
}
|
|
422
|
+
: { values: [] };
|
|
423
|
+
}
|
|
424
|
+
const pageInfo = result.pageInfo;
|
|
425
|
+
const hasMore = pageInfo?.hasNextPage ?? false;
|
|
426
|
+
let nextCursor = '{}';
|
|
427
|
+
if (pageInfo?.endCursor != null) {
|
|
428
|
+
nextCursor = JSON.stringify({ value: pageInfo.endCursor, type: 'cursor' });
|
|
429
|
+
}
|
|
430
|
+
else if (pageInfo?.nextPage != null) {
|
|
431
|
+
nextCursor = JSON.stringify({ value: pageInfo.nextPage, type: 'page' });
|
|
432
|
+
}
|
|
433
|
+
const continuationBroken = hasMore && (nextCursor === '{}' || nextCursor === cursor);
|
|
434
|
+
const normalizedMetadata = mergeCollectionMetadata(result.metadata, continuationBroken ? { completeness: 'partial' } : undefined);
|
|
435
|
+
// SDK collection completeness is independent from provider-native pagination: a result can expose a
|
|
436
|
+
// real next page (`more`) and still have a failed sibling scope (`partial`/`unknown`). Surface the
|
|
437
|
+
// latter as `truncated` so consumers treat the page as incomplete. Absent metadata (old providers,
|
|
438
|
+
// test doubles) leaves `truncated` unset for backward compatibility.
|
|
439
|
+
const truncated = normalizedMetadata != null && normalizedMetadata.completeness !== 'complete' ? true : undefined;
|
|
440
|
+
return {
|
|
441
|
+
values: result.data,
|
|
442
|
+
paging: {
|
|
443
|
+
cursor: nextCursor,
|
|
444
|
+
more: hasMore && !continuationBroken,
|
|
445
|
+
truncated: truncated,
|
|
446
|
+
// Numbered-page metadata; left undefined by cursor-based providers (which don't report a
|
|
447
|
+
// currentPage), so we never echo the requested page for a provider that ignored it.
|
|
448
|
+
page: pageInfo?.currentPage ?? undefined,
|
|
449
|
+
pageSize: requestedPageSize,
|
|
450
|
+
nextPage: pageInfo?.nextPage ?? undefined,
|
|
451
|
+
totalPages: pageInfo?.totalPages ?? undefined,
|
|
452
|
+
totalCount: pageInfo?.totalCount ?? undefined,
|
|
453
|
+
},
|
|
454
|
+
metadata: normalizedMetadata,
|
|
455
|
+
};
|
|
456
|
+
}
|
|
457
|
+
catch (e) {
|
|
458
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
async getRepo(tokenOptInfo, owner, name, project, options) {
|
|
462
|
+
const providerId = tokenOptInfo.providerId;
|
|
463
|
+
const isAzureDevOps = providerId === GitCloudHostIntegrationId.AzureDevOps ||
|
|
464
|
+
providerId === GitSelfManagedHostIntegrationId.AzureDevOpsServer;
|
|
465
|
+
if (isAzureDevOps) {
|
|
466
|
+
if (project == null)
|
|
467
|
+
return undefined;
|
|
468
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getRepoOfProjectFn');
|
|
469
|
+
const token = tokenWithInfo.accessToken;
|
|
470
|
+
try {
|
|
471
|
+
const result = await provider['getRepoOfProjectFn']?.({ namespace: owner, name: name, project: project }, { token: token, isPAT: options?.isPAT, baseUrl: options?.baseUrl });
|
|
472
|
+
return result?.data;
|
|
473
|
+
}
|
|
474
|
+
catch (e) {
|
|
475
|
+
if (isGraphQLRepoNotFoundError(e))
|
|
476
|
+
throw new RequestNotFoundError(toError(e));
|
|
477
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
else {
|
|
481
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getRepoFn');
|
|
482
|
+
const token = tokenWithInfo.accessToken;
|
|
483
|
+
try {
|
|
484
|
+
const result = await provider['getRepoFn']?.({ namespace: owner, name: name, project: project }, { token: token, isPAT: options?.isPAT, baseUrl: options?.baseUrl });
|
|
485
|
+
return result?.data;
|
|
486
|
+
}
|
|
487
|
+
catch (e) {
|
|
488
|
+
if (isGraphQLRepoNotFoundError(e))
|
|
489
|
+
throw new RequestNotFoundError(toError(e));
|
|
490
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
async getCurrentUser(tokenOptInfo, options) {
|
|
495
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getCurrentUserFn');
|
|
496
|
+
const token = tokenWithInfo.accessToken;
|
|
497
|
+
try {
|
|
498
|
+
return (await provider.getCurrentUserFn?.({}, { token: token, isPAT: options?.isPAT, baseUrl: options?.baseUrl }))?.data;
|
|
499
|
+
}
|
|
500
|
+
catch (e) {
|
|
501
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
async getCurrentUserForInstance(tokenOptInfo, namespace, options) {
|
|
505
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getCurrentUserForInstanceFn');
|
|
506
|
+
const token = tokenWithInfo.accessToken;
|
|
507
|
+
return (await provider.getCurrentUserForInstanceFn?.({ namespace: namespace }, { token: token, isPAT: options?.isPAT, baseUrl: options?.baseUrl }))?.data;
|
|
508
|
+
}
|
|
509
|
+
async getCurrentUserForResource(tokenOptInfo, resourceId, options) {
|
|
510
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getCurrentUserForResourceFn');
|
|
511
|
+
const token = tokenWithInfo.accessToken;
|
|
512
|
+
try {
|
|
513
|
+
return (await provider.getCurrentUserForResourceFn?.({ resourceId: resourceId }, { token: token, isPAT: options?.isPAT, baseUrl: options?.baseUrl }))?.data;
|
|
514
|
+
}
|
|
515
|
+
catch (e) {
|
|
516
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
async getJiraResourcesForCurrentUser(tokenOptInfo) {
|
|
520
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getJiraResourcesForCurrentUserFn');
|
|
521
|
+
const token = tokenWithInfo.accessToken;
|
|
522
|
+
try {
|
|
523
|
+
return (await provider.getJiraResourcesForCurrentUserFn?.({ token: token }))?.data;
|
|
524
|
+
}
|
|
525
|
+
catch (e) {
|
|
526
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
async getLinearOrganization(tokenOptInfo) {
|
|
530
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getLinearOrganizationFn');
|
|
531
|
+
const token = tokenWithInfo.accessToken;
|
|
532
|
+
try {
|
|
533
|
+
const x = await provider.getLinearOrganizationFn?.({ token: token });
|
|
534
|
+
const y = x?.data;
|
|
535
|
+
return y;
|
|
536
|
+
}
|
|
537
|
+
catch (e) {
|
|
538
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
async getLinearTeamsForCurrentUser(tokenOptInfo) {
|
|
542
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getLinearTeamsForCurrentUserFn');
|
|
543
|
+
const token = tokenWithInfo.accessToken;
|
|
544
|
+
try {
|
|
545
|
+
return (await provider.getLinearTeamsForCurrentUserFn?.({ token: token }))?.data;
|
|
546
|
+
}
|
|
547
|
+
catch (e) {
|
|
548
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
/**
|
|
552
|
+
* Reads issues scoped to Linear teams/projects/labels (Linear's issue-list filter). One page per call —
|
|
553
|
+
* follow `paging.cursor`. Linear's `getIssues` has no author/assignee filter, so per-user scoping is
|
|
554
|
+
* applied client-side by the caller.
|
|
555
|
+
*/
|
|
556
|
+
async getLinearIssues(tokenOptInfo, input, options) {
|
|
557
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getLinearIssuesFn');
|
|
558
|
+
return this.getPagedResult({ ...input, ...options }, provider.getLinearIssuesFn, tokenWithInfo, options?.cursor ?? undefined);
|
|
559
|
+
}
|
|
560
|
+
/** Resolves Linear's current user (viewer). The viewer query returns only id/name/email/displayName. */
|
|
561
|
+
async getLinearCurrentUser(tokenOptInfo) {
|
|
562
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getLinearCurrentUserFn');
|
|
563
|
+
const token = tokenWithInfo.accessToken;
|
|
564
|
+
try {
|
|
565
|
+
return (await provider.getLinearCurrentUserFn?.({ token: token }))?.data;
|
|
566
|
+
}
|
|
567
|
+
catch (e) {
|
|
568
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
async getAzureResourcesForUser(tokenOptInfo, userId, options) {
|
|
572
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getAzureResourcesForUserFn');
|
|
573
|
+
const token = tokenWithInfo.accessToken;
|
|
574
|
+
try {
|
|
575
|
+
return (await provider.getAzureResourcesForUserFn?.({ userId: userId }, { token: token, isPAT: options?.isPAT, baseUrl: options?.baseUrl }))?.data;
|
|
576
|
+
}
|
|
577
|
+
catch (e) {
|
|
578
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
async getBitbucketResourcesForCurrentUser(tokenOptInfo) {
|
|
582
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getBitbucketResourcesForCurrentUserFn');
|
|
583
|
+
const token = tokenWithInfo.accessToken;
|
|
584
|
+
// Drain every workspace page (numbered): the SDK returns 50 per page, and a user in more than one page
|
|
585
|
+
// of workspaces would otherwise silently lose the rest (with them, their orgs/PRs). A scoped drain keeps
|
|
586
|
+
// a successful prefix plus structured failure metadata when a later page fails.
|
|
587
|
+
const result = await collectProviderPagedResult(async (cursor) => {
|
|
588
|
+
try {
|
|
589
|
+
const page = parsePageCursor(cursor);
|
|
590
|
+
const response = await provider.getBitbucketResourcesForCurrentUserFn?.({ page: page }, { token: token });
|
|
591
|
+
if (response == null)
|
|
592
|
+
return undefined;
|
|
593
|
+
const hasMore = response.pageInfo?.hasNextPage === true;
|
|
594
|
+
const nextPage = response.pageInfo?.nextPage;
|
|
595
|
+
return {
|
|
596
|
+
values: response.data,
|
|
597
|
+
paging: {
|
|
598
|
+
more: hasMore,
|
|
599
|
+
cursor: hasMore && nextPage != null ? toPageCursor(nextPage) : '{}',
|
|
600
|
+
},
|
|
601
|
+
};
|
|
602
|
+
}
|
|
603
|
+
catch (ex) {
|
|
604
|
+
return this.handleProviderError(tokenWithInfo, ex);
|
|
605
|
+
}
|
|
606
|
+
}, 20, { providerId: tokenWithInfo.providerId });
|
|
607
|
+
return {
|
|
608
|
+
values: result.values,
|
|
609
|
+
paging: { cursor: '{}', more: false, ...(result.truncated ? { truncated: true } : {}) },
|
|
610
|
+
...(result.metadata != null ? { metadata: result.metadata } : {}),
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
async getBitbucketPullRequestsAuthoredByUserForWorkspace(tokenOptInfo, userId, workspaceSlug, options) {
|
|
614
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getBitbucketPullRequestsAuthoredByUserForWorkspaceFn');
|
|
615
|
+
const token = tokenWithInfo.accessToken;
|
|
616
|
+
try {
|
|
617
|
+
const result = await provider.getBitbucketPullRequestsAuthoredByUserForWorkspaceFn?.({ userId: userId, workspaceSlug: workspaceSlug, states: options?.states, page: options?.page }, { token: token });
|
|
618
|
+
if (result == null)
|
|
619
|
+
return undefined;
|
|
620
|
+
return { data: result.data, hasMore: result.pageInfo.hasNextPage, nextPage: result.pageInfo.nextPage };
|
|
621
|
+
}
|
|
622
|
+
catch (e) {
|
|
623
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
async getBitbucketServerPullRequestsForCurrentUser(tokenOptInfo, baseUrl, options) {
|
|
627
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getBitbucketServerPullRequestsForCurrentUserFn');
|
|
628
|
+
const token = tokenWithInfo.accessToken;
|
|
629
|
+
try {
|
|
630
|
+
const result = await provider.getBitbucketServerPullRequestsForCurrentUserFn?.({ states: options?.states, page: options?.page }, { token: token, baseUrl: baseUrl });
|
|
631
|
+
if (result == null)
|
|
632
|
+
return undefined;
|
|
633
|
+
return { data: result.data, hasMore: result.pageInfo.hasNextPage, nextPage: result.pageInfo.nextPage };
|
|
634
|
+
}
|
|
635
|
+
catch (e) {
|
|
636
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
async getJiraProjectsForResources(tokenOptInfo, resourceIds) {
|
|
640
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getJiraProjectsForResourcesFn');
|
|
641
|
+
const token = tokenWithInfo.accessToken;
|
|
642
|
+
try {
|
|
643
|
+
const result = await provider.getJiraProjectsForResourcesFn?.({ resourceIds: resourceIds }, { token: token });
|
|
644
|
+
// Preserve the SDK's per-resource completeness/failures instead of collapsing to a bare array, so the
|
|
645
|
+
// Jira integration can cache only proven-successful resources and warn on the failed ones.
|
|
646
|
+
return { values: result?.data ?? [], metadata: result?.metadata };
|
|
647
|
+
}
|
|
648
|
+
catch (e) {
|
|
649
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
async getJiraProjectsForResource(tokenOptInfo, resourceId, options) {
|
|
653
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getJiraProjectsForResourceFn');
|
|
654
|
+
return this.getPagedResult({ resourceId: resourceId }, provider.getJiraProjectsForResourceFn, tokenWithInfo, options?.cursor);
|
|
655
|
+
}
|
|
656
|
+
async getAzureProjectsForResource(tokenOptInfo, namespace, options) {
|
|
657
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getAzureProjectsForResourceFn');
|
|
658
|
+
const token = tokenWithInfo.accessToken;
|
|
659
|
+
// Azure only supports PAT for this call
|
|
660
|
+
const azureToken = options?.isPAT ? token : this.getAzurePATForOAuthToken(token);
|
|
661
|
+
try {
|
|
662
|
+
return await this.getPagedResult({ namespace: namespace, ...options }, provider.getAzureProjectsForResourceFn, { ...tokenWithInfo, accessToken: azureToken }, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
663
|
+
}
|
|
664
|
+
catch (e) {
|
|
665
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
async getReposForAzureProject(tokenOptInfo, namespace, project, options) {
|
|
669
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getReposForAzureProjectFn');
|
|
670
|
+
return this.getPagedResult({ namespace: namespace, project: project, ...options }, provider.getReposForAzureProjectFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
671
|
+
}
|
|
672
|
+
async getGitHubOrgsForCurrentUser(tokenOptInfo, options) {
|
|
673
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getOrgsForCurrentUserFn');
|
|
674
|
+
// Drain all pages so a user in many orgs doesn't lose everything past the first page, while
|
|
675
|
+
// surfacing `truncated` when the defensive backstop stops before the listing is exhausted.
|
|
676
|
+
const result = await collectProviderPagedResult(cursor => this.getPagedResult({}, provider.getOrgsForCurrentUserFn, tokenWithInfo, cursor, options?.isPAT, options?.baseUrl), 20, { providerId: tokenWithInfo.providerId });
|
|
677
|
+
// This method drains internally and takes no cursor, so a backstop cursor isn't resumable by
|
|
678
|
+
// callers — keep only the truncation signal rather than exposing a misleading `paging`.
|
|
679
|
+
return {
|
|
680
|
+
values: result.values,
|
|
681
|
+
...(result.truncated ? { truncated: true } : {}),
|
|
682
|
+
...(result.metadata != null ? { metadata: result.metadata } : {}),
|
|
683
|
+
};
|
|
684
|
+
}
|
|
685
|
+
async getReposForOrg(tokenOptInfo, orgName, options) {
|
|
686
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getReposForOrgFn');
|
|
687
|
+
return this.getPagedResult({ orgName: orgName }, provider.getReposForOrgFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
688
|
+
}
|
|
689
|
+
async getReposForBitbucketWorkspace(tokenOptInfo, workspace, options) {
|
|
690
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getReposForWorkspaceFn');
|
|
691
|
+
return this.getPagedResult({ workspace: workspace }, provider.getReposForWorkspaceFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
692
|
+
}
|
|
693
|
+
async getReposForCurrentUser(tokenOptInfo, options) {
|
|
694
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getReposForCurrentUserFn');
|
|
695
|
+
return this.getPagedResult(options?.affiliations != null ? { affiliations: options.affiliations } : {}, provider.getReposForCurrentUserFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
696
|
+
}
|
|
697
|
+
async getGitlabGroupsForCurrentUser(tokenOptInfo, options) {
|
|
698
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getGroupsForCurrentUserFn');
|
|
699
|
+
// Drain all pages so a user in many groups doesn't lose everything past the first page, while
|
|
700
|
+
// surfacing `truncated` when the defensive backstop stops before the listing is exhausted.
|
|
701
|
+
const result = await collectProviderPagedResult(cursor => this.getPagedResult({ topLevelOnly: options?.topLevelOnly }, provider.getGroupsForCurrentUserFn, tokenWithInfo, cursor, options?.isPAT, options?.baseUrl), 20, { providerId: tokenWithInfo.providerId });
|
|
702
|
+
// This method drains internally and takes no cursor, so a backstop cursor isn't resumable by
|
|
703
|
+
// callers — keep only the truncation signal rather than exposing a misleading `paging`.
|
|
704
|
+
return {
|
|
705
|
+
values: result.values,
|
|
706
|
+
...(result.truncated ? { truncated: true } : {}),
|
|
707
|
+
...(result.metadata != null ? { metadata: result.metadata } : {}),
|
|
708
|
+
};
|
|
709
|
+
}
|
|
710
|
+
async getPullRequestsForRepos(tokenOptInfo, reposOrIds, options) {
|
|
711
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getPullRequestsForReposFn');
|
|
712
|
+
return this.getPagedResult({
|
|
713
|
+
...(this.isRepoIdsInput(reposOrIds) ? { repoIds: reposOrIds } : { repos: reposOrIds }),
|
|
714
|
+
...options,
|
|
715
|
+
}, provider.getPullRequestsForReposFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
716
|
+
}
|
|
717
|
+
async getPullRequestsForRepo(tokenOptInfo, repo, options) {
|
|
718
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getPullRequestsForRepoFn');
|
|
719
|
+
return this.getPagedResult({ repo: repo, ...options }, provider.getPullRequestsForRepoFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
720
|
+
}
|
|
721
|
+
async getPullRequestsForUser(tokenOptInfo, usernameOrId, options) {
|
|
722
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getPullRequestsForUserFn');
|
|
723
|
+
return this.getPagedResult({
|
|
724
|
+
...(tokenWithInfo.providerId === GitCloudHostIntegrationId.Bitbucket
|
|
725
|
+
? { userId: usernameOrId }
|
|
726
|
+
: { username: usernameOrId }),
|
|
727
|
+
...options,
|
|
728
|
+
}, provider.getPullRequestsForUserFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
729
|
+
}
|
|
730
|
+
async getGitLabPullRequestsForUserAssociation(tokenOptInfo, username, association, options) {
|
|
731
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getGitLabPullRequestsForUserAssociationFn');
|
|
732
|
+
return this.getPagedResult({
|
|
733
|
+
username: username,
|
|
734
|
+
association: association,
|
|
735
|
+
states: options?.states,
|
|
736
|
+
pageSize: options?.pageSize,
|
|
737
|
+
}, provider.getGitLabPullRequestsForUserAssociationFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
738
|
+
}
|
|
739
|
+
async getPullRequestsForAzureProjects(tokenOptInfo, projects, options) {
|
|
740
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getPullRequestsForAzureProjectsFn');
|
|
741
|
+
const token = tokenWithInfo.accessToken;
|
|
742
|
+
// Azure only supports PAT for this call
|
|
743
|
+
const azureToken = options?.isPAT ? token : this.getAzurePATForOAuthToken(token);
|
|
744
|
+
try {
|
|
745
|
+
const result = await provider.getPullRequestsForAzureProjectsFn?.({
|
|
746
|
+
projects: projects,
|
|
747
|
+
authorLogin: options?.authorLogin,
|
|
748
|
+
assigneeLogins: options?.assigneeLogins,
|
|
749
|
+
reviewerId: options?.reviewerId,
|
|
750
|
+
states: options?.states,
|
|
751
|
+
repo: options?.repo,
|
|
752
|
+
},
|
|
753
|
+
// `azureToken` is always a PAT here (the raw token when `isPAT`, otherwise a PAT derived from
|
|
754
|
+
// the OAuth token), so it must be sent as a PAT regardless of the incoming `options?.isPAT`.
|
|
755
|
+
{ token: azureToken, isPAT: true, baseUrl: options?.baseUrl });
|
|
756
|
+
// The SDK's multi-project aggregate preserves successful projects and reports failed/incomplete ones
|
|
757
|
+
// through `metadata` (it has no `pageInfo`); keep it so the account-wide drain can warn on the failed
|
|
758
|
+
// projects and set `fetchFailed` instead of publishing a partial Azure read as complete.
|
|
759
|
+
return { values: result?.data ?? [], metadata: result?.metadata };
|
|
760
|
+
}
|
|
761
|
+
catch (e) {
|
|
762
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
/**
|
|
766
|
+
* Single Azure project PR read, paginated by number. Unlike {@link getPullRequestsForAzureProjects} (which
|
|
767
|
+
* aggregates across projects and exposes no paging), this returns one page plus whether more remain, so a
|
|
768
|
+
* caller can drain a project fully.
|
|
769
|
+
*/
|
|
770
|
+
async getPullRequestsForAzureProject(tokenOptInfo, project, options) {
|
|
771
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getPullRequestsForAzureProjectFn');
|
|
772
|
+
const token = tokenWithInfo.accessToken;
|
|
773
|
+
// Azure only supports PAT for this call
|
|
774
|
+
const azureToken = options?.isPAT ? token : this.getAzurePATForOAuthToken(token);
|
|
775
|
+
try {
|
|
776
|
+
const result = await provider.getPullRequestsForAzureProjectFn?.({
|
|
777
|
+
namespace: project.namespace,
|
|
778
|
+
project: project.project,
|
|
779
|
+
authorLogin: options?.authorLogin,
|
|
780
|
+
assigneeLogins: options?.assigneeLogins,
|
|
781
|
+
reviewerId: options?.reviewerId,
|
|
782
|
+
states: options?.states,
|
|
783
|
+
repo: options?.repo,
|
|
784
|
+
page: options?.page,
|
|
785
|
+
},
|
|
786
|
+
// `azureToken` is always a PAT here (already PAT-formatted when `isPAT`, otherwise derived from
|
|
787
|
+
// the OAuth token), so it must be sent as a PAT regardless of the incoming `options?.isPAT`.
|
|
788
|
+
{ token: azureToken, isPAT: true, baseUrl: options?.baseUrl });
|
|
789
|
+
if (result == null)
|
|
790
|
+
return undefined;
|
|
791
|
+
return { data: result.data, hasMore: result.pageInfo.hasNextPage, nextPage: result.pageInfo.nextPage };
|
|
792
|
+
}
|
|
793
|
+
catch (e) {
|
|
794
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
async mergePullRequest(tokenOptInfo, pr, options) {
|
|
798
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'mergePullRequestFn');
|
|
799
|
+
const token = tokenWithInfo.accessToken;
|
|
800
|
+
const headRef = pr.refs?.head;
|
|
801
|
+
if (headRef == null)
|
|
802
|
+
return false;
|
|
803
|
+
if (provider.id === GitCloudHostIntegrationId.AzureDevOps && pr.project == null) {
|
|
804
|
+
return false;
|
|
805
|
+
}
|
|
806
|
+
try {
|
|
807
|
+
await provider.mergePullRequestFn?.({
|
|
808
|
+
pullRequest: {
|
|
809
|
+
headRef: { oid: headRef.sha },
|
|
810
|
+
id: pr.id,
|
|
811
|
+
number: Number.parseInt(pr.id, 10),
|
|
812
|
+
repository: {
|
|
813
|
+
id: pr.repository.repo,
|
|
814
|
+
name: pr.repository.repo,
|
|
815
|
+
project: pr.project?.name ?? '',
|
|
816
|
+
owner: {
|
|
817
|
+
login: pr.repository.owner,
|
|
818
|
+
},
|
|
819
|
+
},
|
|
820
|
+
version: pr.version,
|
|
821
|
+
},
|
|
822
|
+
...options,
|
|
823
|
+
}, { token: token, isPAT: options?.isPAT, baseUrl: options?.baseUrl });
|
|
824
|
+
return true;
|
|
825
|
+
}
|
|
826
|
+
catch (e) {
|
|
827
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
async getIssuesForRepos(tokenOptInfo, reposOrIds, options) {
|
|
831
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getIssuesForReposFn');
|
|
832
|
+
return this.getPagedResult({
|
|
833
|
+
...(this.isRepoIdsInput(reposOrIds) ? { repoIds: reposOrIds } : { repos: reposOrIds }),
|
|
834
|
+
...options,
|
|
835
|
+
}, provider.getIssuesForReposFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
836
|
+
}
|
|
837
|
+
async getIssuesForRepo(tokenOptInfo, repo, options) {
|
|
838
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getIssuesForRepoFn');
|
|
839
|
+
return this.getPagedResult({ repo: repo, ...options }, provider.getIssuesForRepoFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
840
|
+
}
|
|
841
|
+
async getIssuesForCurrentUser(tokenOptInfo, options) {
|
|
842
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getIssuesForCurrentUserFn');
|
|
843
|
+
return this.getPagedResult({
|
|
844
|
+
scope: options?.scope,
|
|
845
|
+
assigneeUsername: options?.assigneeUsername,
|
|
846
|
+
authorUsername: options?.authorUsername,
|
|
847
|
+
page: options?.page,
|
|
848
|
+
pageSize: options?.pageSize,
|
|
849
|
+
}, provider.getIssuesForCurrentUserFn, tokenWithInfo, options?.cursor ?? undefined, options?.isPAT, options?.baseUrl);
|
|
850
|
+
}
|
|
851
|
+
async getIssuesForAzureProject(tokenOptInfo, namespace, project, options) {
|
|
852
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getIssuesForAzureProjectFn');
|
|
853
|
+
return this.getPagedResult({ namespace: namespace, project: project, ...options }, provider.getIssuesForAzureProjectFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
854
|
+
}
|
|
855
|
+
async getIssuesForProject(tokenOptInfo, project, resourceId, options) {
|
|
856
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getIssuesForProjectFn');
|
|
857
|
+
const token = tokenWithInfo.accessToken;
|
|
858
|
+
try {
|
|
859
|
+
const result = await provider.getIssuesForProjectFn?.({ projectKey: project, resourceId: resourceId, ...options }, { token: token });
|
|
860
|
+
return result?.data;
|
|
861
|
+
}
|
|
862
|
+
catch (e) {
|
|
863
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
/**
|
|
867
|
+
* Single page of {@link getIssuesForProject} that preserves the SDK's `pageInfo` so a caller can drain
|
|
868
|
+
* every page (the plain {@link getIssuesForProject} discards it, silently capping at the first page).
|
|
869
|
+
* `nextCursor` is the raw provider cursor (Jira offset / nextPageToken) fed back verbatim as `options.cursor`.
|
|
870
|
+
*/
|
|
871
|
+
async getIssuesForProjectPaged(tokenOptInfo, project, resourceId, options) {
|
|
872
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getIssuesForProjectFn');
|
|
873
|
+
const token = tokenWithInfo.accessToken;
|
|
874
|
+
try {
|
|
875
|
+
const result = await provider.getIssuesForProjectFn?.({ projectKey: project, resourceId: resourceId, ...options }, { token: token });
|
|
876
|
+
if (result == null)
|
|
877
|
+
return undefined;
|
|
878
|
+
return {
|
|
879
|
+
data: result.data,
|
|
880
|
+
hasMore: result.pageInfo?.hasNextPage ?? false,
|
|
881
|
+
nextCursor: result.pageInfo?.endCursor ?? undefined,
|
|
882
|
+
};
|
|
883
|
+
}
|
|
884
|
+
catch (e) {
|
|
885
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
async getTrelloCard(tokenOptInfo, appKey, cardId, options) {
|
|
889
|
+
const { tokenWithInfo } = await this.ensureProviderToken(tokenOptInfo);
|
|
890
|
+
try {
|
|
891
|
+
const result = await this.request({
|
|
892
|
+
url: `${trelloBaseUrl}/1/cards/${encodeURIComponent(cardId)}?members=true`,
|
|
893
|
+
headers: getTrelloAuthHeaders(appKey, tokenWithInfo.accessToken),
|
|
894
|
+
});
|
|
895
|
+
return fromTrelloCard(result.body, options?.trelloBoardListsById ?? {});
|
|
896
|
+
}
|
|
897
|
+
catch (e) {
|
|
898
|
+
try {
|
|
899
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
900
|
+
}
|
|
901
|
+
catch (ex) {
|
|
902
|
+
if (RequestNotFoundError.is(ex))
|
|
903
|
+
return undefined;
|
|
904
|
+
throw ex;
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
// Trello reads. The Trello client is keyed by an `appKey` (the Trello app key from the cloud token exchange)
|
|
909
|
+
// paired with the OAuth token, so each wrapper threads `appKey` through alongside `tokenWithInfo`.
|
|
910
|
+
async getTrelloCurrentUser(tokenOptInfo, appKey) {
|
|
911
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getTrelloCurrentUserFn');
|
|
912
|
+
try {
|
|
913
|
+
const result = await provider.getTrelloCurrentUserFn?.({ appKey: appKey }, { token: tokenWithInfo.accessToken });
|
|
914
|
+
return result?.data;
|
|
915
|
+
}
|
|
916
|
+
catch (e) {
|
|
917
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
async getTrelloBoardsForCurrentUser(tokenOptInfo, appKey) {
|
|
921
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getTrelloBoardsForCurrentUserFn');
|
|
922
|
+
try {
|
|
923
|
+
const result = await provider.getTrelloBoardsForCurrentUserFn?.({ appKey: appKey }, { token: tokenWithInfo.accessToken });
|
|
924
|
+
return result?.data;
|
|
925
|
+
}
|
|
926
|
+
catch (e) {
|
|
927
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
async getTrelloListsForBoard(tokenOptInfo, appKey, boardId) {
|
|
931
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getTrelloListsForBoardFn');
|
|
932
|
+
try {
|
|
933
|
+
const result = await provider.getTrelloListsForBoardFn?.({ appKey: appKey, boardId: boardId }, { token: tokenWithInfo.accessToken });
|
|
934
|
+
return result?.data;
|
|
935
|
+
}
|
|
936
|
+
catch (e) {
|
|
937
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
async getTrelloIssuesForBoard(tokenOptInfo, appKey, boardId, options) {
|
|
941
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getTrelloIssuesForBoardFn');
|
|
942
|
+
try {
|
|
943
|
+
const result = await provider.getTrelloIssuesForBoardFn?.({ appKey: appKey, boardId: boardId, ...options }, { token: tokenWithInfo.accessToken });
|
|
944
|
+
// Trello's search caps results and reports the cap through `metadata.completeness` (never a cursor).
|
|
945
|
+
// Preserve it so the integration can signal a terminal truncation rather than a fake next page.
|
|
946
|
+
return { values: result?.data ?? [], metadata: result?.metadata };
|
|
947
|
+
}
|
|
948
|
+
catch (e) {
|
|
949
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
async getIssuesForResourceForCurrentUser(tokenOptInfo, resourceId, options) {
|
|
953
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getIssuesForResourceForCurrentUserFn');
|
|
954
|
+
return this.getPagedResult({ resourceId: resourceId }, provider.getIssuesForResourceForCurrentUserFn, tokenWithInfo, options?.cursor, options?.isPAT, options?.baseUrl);
|
|
955
|
+
}
|
|
956
|
+
async getIssue(tokenOptInfo, input, options) {
|
|
957
|
+
const { provider, tokenWithInfo } = await this.ensureProviderTokenAndFunction(tokenOptInfo, 'getIssueFn');
|
|
958
|
+
const token = tokenWithInfo.accessToken;
|
|
959
|
+
try {
|
|
960
|
+
const result = await provider.getIssueFn?.(input, {
|
|
961
|
+
token: token,
|
|
962
|
+
isPAT: options?.isPAT,
|
|
963
|
+
baseUrl: options?.baseUrl,
|
|
964
|
+
});
|
|
965
|
+
return result?.data;
|
|
966
|
+
}
|
|
967
|
+
catch (e) {
|
|
968
|
+
return this.handleProviderError(tokenWithInfo, e);
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
// This is copied over from the shared provider library because the current version is not respecting the "forceIsFetch: true"
|
|
973
|
+
// option in the config and our custom fetch function isn't being wrapped by the necessary fetch wrapper. Remove this once the library
|
|
974
|
+
// properly wraps our custom fetch and use `forceIsFetch: true` in the config.
|
|
975
|
+
async function parseFetchResponseForApi(response) {
|
|
976
|
+
const contentType = response.headers.get('content-type') || '';
|
|
977
|
+
let body;
|
|
978
|
+
// parse the response body
|
|
979
|
+
if (contentType.startsWith('application/json')) {
|
|
980
|
+
const text = await response.text();
|
|
981
|
+
body = text.trim().length > 0 ? JSON.parse(text) : null;
|
|
982
|
+
}
|
|
983
|
+
else if (contentType.startsWith('text/') || contentType === '') {
|
|
984
|
+
body = await response.text();
|
|
985
|
+
}
|
|
986
|
+
else if (contentType.startsWith('application/vnd.github.raw+json')) {
|
|
987
|
+
body = await response.arrayBuffer();
|
|
988
|
+
}
|
|
989
|
+
else {
|
|
990
|
+
throw new Error(`Unsupported content-type: ${contentType}`);
|
|
991
|
+
}
|
|
992
|
+
const result = {
|
|
993
|
+
body: body,
|
|
994
|
+
headers: Object.fromEntries(response.headers.entries()),
|
|
995
|
+
status: response.status,
|
|
996
|
+
statusText: response.statusText,
|
|
997
|
+
};
|
|
998
|
+
// throw an error if the response is not ok
|
|
999
|
+
if (!response.ok) {
|
|
1000
|
+
const status = `(${response.status})${response.statusText ? ` ${response.statusText}` : ''}.`;
|
|
1001
|
+
const detail = getProviderResponseBodyMessage(body);
|
|
1002
|
+
const error = new Error(detail != null ? `${status} ${detail}` : status);
|
|
1003
|
+
Object.assign(error, { response: result });
|
|
1004
|
+
throw error;
|
|
1005
|
+
}
|
|
1006
|
+
return result;
|
|
1007
|
+
}
|
|
1008
|
+
const maxProviderErrorBodyLength = 500;
|
|
1009
|
+
/** Extracts the useful provider prose from an already-parsed SDK response body. */
|
|
1010
|
+
function getProviderResponseBodyMessage(body) {
|
|
1011
|
+
let message;
|
|
1012
|
+
if (typeof body === 'string') {
|
|
1013
|
+
message = body;
|
|
1014
|
+
}
|
|
1015
|
+
else if (body != null && typeof body === 'object') {
|
|
1016
|
+
const { message: direct, error } = body;
|
|
1017
|
+
if (typeof direct === 'string') {
|
|
1018
|
+
message = direct;
|
|
1019
|
+
}
|
|
1020
|
+
else if (typeof error === 'string') {
|
|
1021
|
+
message = error;
|
|
1022
|
+
}
|
|
1023
|
+
else if (error != null && typeof error === 'object') {
|
|
1024
|
+
const nested = error.message;
|
|
1025
|
+
if (typeof nested === 'string') {
|
|
1026
|
+
message = nested;
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
message = message?.trim();
|
|
1031
|
+
return message ? message.slice(0, maxProviderErrorBodyLength) : undefined;
|
|
1032
|
+
}
|
|
1033
|
+
//# sourceMappingURL=providersApi.js.map
|