@backstage/integration 1.11.0-next.0 → 1.12.0-next.0
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 +18 -0
- package/dist/ScmIntegrations.esm.js +4 -10
- package/dist/ScmIntegrations.esm.js.map +1 -1
- package/dist/awsCodeCommit/AwsCodeCommitIntegration.esm.js +13 -21
- package/dist/awsCodeCommit/AwsCodeCommitIntegration.esm.js.map +1 -1
- package/dist/awsCodeCommit/config.esm.js +1 -2
- package/dist/awsCodeCommit/config.esm.js.map +1 -1
- package/dist/awsS3/AwsS3Integration.esm.js +11 -19
- package/dist/awsS3/AwsS3Integration.esm.js.map +1 -1
- package/dist/awsS3/config.esm.js +2 -3
- package/dist/awsS3/config.esm.js.map +1 -1
- package/dist/azure/AzureIntegration.esm.js +12 -21
- package/dist/azure/AzureIntegration.esm.js.map +1 -1
- package/dist/azure/AzureUrl.esm.js +72 -76
- package/dist/azure/AzureUrl.esm.js.map +1 -1
- package/dist/azure/CachedAzureDevOpsCredentialsProvider.esm.js +2 -8
- package/dist/azure/CachedAzureDevOpsCredentialsProvider.esm.js.map +1 -1
- package/dist/azure/DefaultAzureDevOpsCredentialsProvider.esm.js +3 -6
- package/dist/azure/DefaultAzureDevOpsCredentialsProvider.esm.js.map +1 -1
- package/dist/azure/config.esm.js +12 -15
- package/dist/azure/config.esm.js.map +1 -1
- package/dist/azure/deprecated.esm.js +2 -3
- package/dist/azure/deprecated.esm.js.map +1 -1
- package/dist/bitbucket/BitbucketIntegration.esm.js +19 -27
- package/dist/bitbucket/BitbucketIntegration.esm.js.map +1 -1
- package/dist/bitbucket/config.esm.js +3 -4
- package/dist/bitbucket/config.esm.js.map +1 -1
- package/dist/bitbucketCloud/BitbucketCloudIntegration.esm.js +13 -21
- package/dist/bitbucketCloud/BitbucketCloudIntegration.esm.js.map +1 -1
- package/dist/bitbucketCloud/config.esm.js +1 -2
- package/dist/bitbucketCloud/config.esm.js.map +1 -1
- package/dist/bitbucketServer/BitbucketServerIntegration.esm.js +13 -21
- package/dist/bitbucketServer/BitbucketServerIntegration.esm.js.map +1 -1
- package/dist/bitbucketServer/config.esm.js +1 -2
- package/dist/bitbucketServer/config.esm.js.map +1 -1
- package/dist/gerrit/GerritIntegration.esm.js +11 -19
- package/dist/gerrit/GerritIntegration.esm.js.map +1 -1
- package/dist/gerrit/config.esm.js +1 -2
- package/dist/gerrit/config.esm.js.map +1 -1
- package/dist/gitea/GiteaIntegration.esm.js +10 -18
- package/dist/gitea/GiteaIntegration.esm.js.map +1 -1
- package/dist/gitea/config.esm.js +1 -2
- package/dist/gitea/config.esm.js.map +1 -1
- package/dist/gitea/core.esm.js +1 -2
- package/dist/gitea/core.esm.js.map +1 -1
- package/dist/github/GithubIntegration.esm.js +11 -19
- package/dist/github/GithubIntegration.esm.js.map +1 -1
- package/dist/github/SingleInstanceGithubCredentialsProvider.esm.js +22 -40
- package/dist/github/SingleInstanceGithubCredentialsProvider.esm.js.map +1 -1
- package/dist/github/config.esm.js +3 -4
- package/dist/github/config.esm.js.map +1 -1
- package/dist/github/deprecated.esm.js +1 -7
- package/dist/github/deprecated.esm.js.map +1 -1
- package/dist/gitlab/GitLabIntegration.esm.js +11 -19
- package/dist/gitlab/GitLabIntegration.esm.js.map +1 -1
- package/dist/gitlab/SingleInstanceGitlabCredentialsProvider.esm.js +5 -12
- package/dist/gitlab/SingleInstanceGitlabCredentialsProvider.esm.js.map +1 -1
- package/dist/gitlab/config.esm.js +1 -2
- package/dist/gitlab/config.esm.js.map +1 -1
- package/dist/harness/HarnessIntegration.esm.js +10 -18
- package/dist/harness/HarnessIntegration.esm.js.map +1 -1
- package/dist/harness/core.esm.js +48 -46
- package/dist/harness/core.esm.js.map +1 -1
- package/dist/index.cjs.js +323 -471
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +50 -2
- package/dist/index.esm.js +1 -1
- package/package.json +2 -2
|
@@ -2,16 +2,18 @@ import { basicIntegrations, defaultScmResolveUrl } from '../helpers.esm.js';
|
|
|
2
2
|
import { readHarnessConfig } from './config.esm.js';
|
|
3
3
|
import { getHarnessEditContentsUrl } from './core.esm.js';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
7
|
-
var __publicField = (obj, key, value) => {
|
|
8
|
-
__defNormalProp(obj, key + "" , value);
|
|
9
|
-
return value;
|
|
10
|
-
};
|
|
11
|
-
const _HarnessIntegration = class _HarnessIntegration {
|
|
5
|
+
class HarnessIntegration {
|
|
12
6
|
constructor(config) {
|
|
13
7
|
this.config = config;
|
|
14
8
|
}
|
|
9
|
+
static factory = ({ config }) => {
|
|
10
|
+
const configs = config.getOptionalConfigArray("integrations.harness") ?? [];
|
|
11
|
+
const harnessConfigs = configs.map((c) => readHarnessConfig(c));
|
|
12
|
+
return basicIntegrations(
|
|
13
|
+
harnessConfigs.map((c) => new HarnessIntegration(c)),
|
|
14
|
+
(harness) => harness.config.host
|
|
15
|
+
);
|
|
16
|
+
};
|
|
15
17
|
get type() {
|
|
16
18
|
return "harness";
|
|
17
19
|
}
|
|
@@ -24,17 +26,7 @@ const _HarnessIntegration = class _HarnessIntegration {
|
|
|
24
26
|
resolveEditUrl(url) {
|
|
25
27
|
return getHarnessEditContentsUrl(this.config, url);
|
|
26
28
|
}
|
|
27
|
-
}
|
|
28
|
-
__publicField(_HarnessIntegration, "factory", ({ config }) => {
|
|
29
|
-
var _a;
|
|
30
|
-
const configs = (_a = config.getOptionalConfigArray("integrations.harness")) != null ? _a : [];
|
|
31
|
-
const harnessConfigs = configs.map((c) => readHarnessConfig(c));
|
|
32
|
-
return basicIntegrations(
|
|
33
|
-
harnessConfigs.map((c) => new _HarnessIntegration(c)),
|
|
34
|
-
(harness) => harness.config.host
|
|
35
|
-
);
|
|
36
|
-
});
|
|
37
|
-
let HarnessIntegration = _HarnessIntegration;
|
|
29
|
+
}
|
|
38
30
|
|
|
39
31
|
export { HarnessIntegration };
|
|
40
32
|
//# sourceMappingURL=HarnessIntegration.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HarnessIntegration.esm.js","sources":["../../src/harness/HarnessIntegration.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { basicIntegrations, defaultScmResolveUrl } from '../helpers';\nimport { ScmIntegration, ScmIntegrationsFactory } from '../types';\nimport { HarnessIntegrationConfig, readHarnessConfig } from './config';\nimport { getHarnessEditContentsUrl } from './core';\n\n/**\n * A Harness Code based integration.\n *\n * @public\n */\nexport class HarnessIntegration implements ScmIntegration {\n static factory: ScmIntegrationsFactory<HarnessIntegration> = ({ config }) => {\n const configs = config.getOptionalConfigArray('integrations.harness') ?? [];\n const harnessConfigs = configs.map(c => readHarnessConfig(c));\n\n return basicIntegrations(\n harnessConfigs.map(c => new HarnessIntegration(c)),\n (harness: HarnessIntegration) => harness.config.host,\n );\n };\n\n constructor(readonly config: HarnessIntegrationConfig) {}\n\n get type(): string {\n return 'harness';\n }\n\n get title(): string {\n return this.config.host;\n }\n\n resolveUrl(options: {\n url: string;\n base: string;\n lineNumber?: number | undefined;\n }): string {\n return defaultScmResolveUrl(options);\n }\n\n resolveEditUrl(url: string): string {\n return getHarnessEditContentsUrl(this.config, url);\n }\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HarnessIntegration.esm.js","sources":["../../src/harness/HarnessIntegration.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { basicIntegrations, defaultScmResolveUrl } from '../helpers';\nimport { ScmIntegration, ScmIntegrationsFactory } from '../types';\nimport { HarnessIntegrationConfig, readHarnessConfig } from './config';\nimport { getHarnessEditContentsUrl } from './core';\n\n/**\n * A Harness Code based integration.\n *\n * @public\n */\nexport class HarnessIntegration implements ScmIntegration {\n static factory: ScmIntegrationsFactory<HarnessIntegration> = ({ config }) => {\n const configs = config.getOptionalConfigArray('integrations.harness') ?? [];\n const harnessConfigs = configs.map(c => readHarnessConfig(c));\n\n return basicIntegrations(\n harnessConfigs.map(c => new HarnessIntegration(c)),\n (harness: HarnessIntegration) => harness.config.host,\n );\n };\n\n constructor(readonly config: HarnessIntegrationConfig) {}\n\n get type(): string {\n return 'harness';\n }\n\n get title(): string {\n return this.config.host;\n }\n\n resolveUrl(options: {\n url: string;\n base: string;\n lineNumber?: number | undefined;\n }): string {\n return defaultScmResolveUrl(options);\n }\n\n resolveEditUrl(url: string): string {\n return getHarnessEditContentsUrl(this.config, url);\n }\n}\n"],"names":[],"mappings":";;;;AAyBO,MAAM,kBAA6C,CAAA;AAAA,EAWxD,YAAqB,MAAkC,EAAA;AAAlC,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAAA,GAAmC;AAAA,EAVxD,OAAO,OAAA,GAAsD,CAAC,EAAE,QAAa,KAAA;AAC3E,IAAA,MAAM,OAAU,GAAA,MAAA,CAAO,sBAAuB,CAAA,sBAAsB,KAAK,EAAC,CAAA;AAC1E,IAAA,MAAM,iBAAiB,OAAQ,CAAA,GAAA,CAAI,CAAK,CAAA,KAAA,iBAAA,CAAkB,CAAC,CAAC,CAAA,CAAA;AAE5D,IAAO,OAAA,iBAAA;AAAA,MACL,eAAe,GAAI,CAAA,CAAA,CAAA,KAAK,IAAI,kBAAA,CAAmB,CAAC,CAAC,CAAA;AAAA,MACjD,CAAC,OAAgC,KAAA,OAAA,CAAQ,MAAO,CAAA,IAAA;AAAA,KAClD,CAAA;AAAA,GACF,CAAA;AAAA,EAIA,IAAI,IAAe,GAAA;AACjB,IAAO,OAAA,SAAA,CAAA;AAAA,GACT;AAAA,EAEA,IAAI,KAAgB,GAAA;AAClB,IAAA,OAAO,KAAK,MAAO,CAAA,IAAA,CAAA;AAAA,GACrB;AAAA,EAEA,WAAW,OAIA,EAAA;AACT,IAAA,OAAO,qBAAqB,OAAO,CAAA,CAAA;AAAA,GACrC;AAAA,EAEA,eAAe,GAAqB,EAAA;AAClC,IAAO,OAAA,yBAAA,CAA0B,IAAK,CAAA,MAAA,EAAQ,GAAG,CAAA,CAAA;AAAA,GACnD;AACF;;;;"}
|
package/dist/harness/core.esm.js
CHANGED
|
@@ -1,8 +1,38 @@
|
|
|
1
1
|
function getHarnessEditContentsUrl(config, url) {
|
|
2
|
+
const parsedUrl = parseHarnessUrl(config, url);
|
|
3
|
+
return `${parsedUrl.baseUrl}/ng/account/${parsedUrl.accountId}/module/code/orgs/${parsedUrl.orgName}/projects/${parsedUrl.projectName}/${parsedUrl.repoName}/files/${parsedUrl.branch}/~/${parsedUrl.path}`;
|
|
4
|
+
}
|
|
5
|
+
function getHarnessFileContentsUrl(config, url) {
|
|
6
|
+
const parsedUrl = parseHarnessUrl(config, url);
|
|
7
|
+
return `${parsedUrl.baseUrl}/gateway/code/api/v1/repos/${parsedUrl.accountId}/${parsedUrl.orgName}/${parsedUrl.projectName}/${parsedUrl.repoName}/+/raw/${parsedUrl.path}?routingId=${parsedUrl.accountId}&git_ref=refs/heads/${parsedUrl.refString}`;
|
|
8
|
+
}
|
|
9
|
+
function getHarnessArchiveUrl(config, url) {
|
|
10
|
+
const parsedUrl = parseHarnessUrl(config, url);
|
|
11
|
+
return `${parsedUrl.baseUrl}/gateway/code/api/v1/repos/${parsedUrl.accountId}/${parsedUrl.orgName}/${parsedUrl.projectName}/${parsedUrl.repoName}/+/archive/${parsedUrl.branch}.zip?routingId=${parsedUrl.accountId}`;
|
|
12
|
+
}
|
|
13
|
+
function getHarnessLatestCommitUrl(config, url) {
|
|
14
|
+
const parsedUrl = parseHarnessUrl(config, url);
|
|
15
|
+
return `${parsedUrl.baseUrl}/gateway/code/api/v1/repos/${parsedUrl.accountId}/${parsedUrl.orgName}/${parsedUrl.projectName}/${parsedUrl.repoName}/+/content?routingId=${parsedUrl.accountId}&include_commit=true&git_ref=refs/heads/${parsedUrl.branch}`;
|
|
16
|
+
}
|
|
17
|
+
function getHarnessRequestOptions(config) {
|
|
18
|
+
const headers = {};
|
|
19
|
+
const { token, apiKey } = config;
|
|
20
|
+
if (apiKey) {
|
|
21
|
+
headers["x-api-key"] = apiKey;
|
|
22
|
+
} else if (token) {
|
|
23
|
+
headers.Authorization = `Bearer ${token}`;
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
headers
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function parseHarnessUrl(config, url) {
|
|
30
|
+
const baseUrl = `https://${config.host}`;
|
|
2
31
|
try {
|
|
3
|
-
const
|
|
32
|
+
const pathUrl = new URL(url);
|
|
33
|
+
const pathSegments = pathUrl.pathname.split("/").filter((segment) => segment !== "");
|
|
34
|
+
const urlParts = pathUrl.pathname.split("/");
|
|
4
35
|
const [
|
|
5
|
-
_blank,
|
|
6
36
|
_ng,
|
|
7
37
|
_account,
|
|
8
38
|
accountId,
|
|
@@ -17,57 +47,29 @@ function getHarnessEditContentsUrl(config, url) {
|
|
|
17
47
|
_files,
|
|
18
48
|
_ref,
|
|
19
49
|
_branch,
|
|
20
|
-
...
|
|
21
|
-
] =
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const baseUrl = `https://${config.host}`;
|
|
31
|
-
const [
|
|
32
|
-
_blank,
|
|
33
|
-
_ng,
|
|
34
|
-
_account,
|
|
50
|
+
..._path
|
|
51
|
+
] = pathSegments;
|
|
52
|
+
const refAndPath = urlParts.slice(
|
|
53
|
+
urlParts.findIndex((i) => i === "files" || i === "edit") + 1
|
|
54
|
+
);
|
|
55
|
+
const refIndex = refAndPath.findIndex((item) => item === "~");
|
|
56
|
+
const refString = refAndPath.slice(0, refIndex).join("/");
|
|
57
|
+
const pathWithoutSlash = refIndex !== -1 ? refAndPath.slice(refIndex + 1).join("/").replace(/^\//, "") : "";
|
|
58
|
+
return {
|
|
59
|
+
baseUrl,
|
|
35
60
|
accountId,
|
|
36
|
-
_module,
|
|
37
|
-
_moduleName,
|
|
38
|
-
_org,
|
|
39
61
|
orgName,
|
|
40
|
-
_projects,
|
|
41
62
|
projectName,
|
|
42
|
-
|
|
63
|
+
refString,
|
|
64
|
+
path: pathWithoutSlash,
|
|
43
65
|
repoName,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
...path
|
|
48
|
-
] = url.replace(baseUrl, "").split("/");
|
|
49
|
-
const urlParts = url.replace(baseUrl, "").split("/");
|
|
50
|
-
const refAndPath = urlParts.slice(13);
|
|
51
|
-
const refIndex = refAndPath.findIndex((item) => item === "~");
|
|
52
|
-
const refString = refAndPath.slice(0, refIndex);
|
|
53
|
-
const pathWithoutSlash = path.join("/").replace(/^\//, "");
|
|
54
|
-
return `${baseUrl}/gateway/code/api/v1/repos/${accountId}/${orgName}/${projectName}/${repoName}/+/raw/${pathWithoutSlash}?routingId=${accountId}&git_ref=${refString}`;
|
|
66
|
+
refDashStr: refAndPath.slice(0, refIndex).join("-"),
|
|
67
|
+
branch: refIndex !== -1 ? refAndPath.slice(0, refIndex).join("/") : refAndPath.join("/")
|
|
68
|
+
};
|
|
55
69
|
} catch (e) {
|
|
56
70
|
throw new Error(`Incorrect URL: ${url}, ${e}`);
|
|
57
71
|
}
|
|
58
72
|
}
|
|
59
|
-
function getHarnessRequestOptions(config) {
|
|
60
|
-
const headers = {};
|
|
61
|
-
const { token, apiKey } = config;
|
|
62
|
-
if (apiKey) {
|
|
63
|
-
headers["x-api-key"] = apiKey;
|
|
64
|
-
} else if (token) {
|
|
65
|
-
headers.Authorization = `Bearer ${token}`;
|
|
66
|
-
}
|
|
67
|
-
return {
|
|
68
|
-
headers
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
73
|
|
|
72
|
-
export { getHarnessEditContentsUrl, getHarnessFileContentsUrl, getHarnessRequestOptions };
|
|
74
|
+
export { getHarnessArchiveUrl, getHarnessEditContentsUrl, getHarnessFileContentsUrl, getHarnessLatestCommitUrl, getHarnessRequestOptions, parseHarnessUrl };
|
|
73
75
|
//# sourceMappingURL=core.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.esm.js","sources":["../../src/harness/core.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { HarnessIntegrationConfig } from './config';\n\n/**\n * Given a URL pointing to a file, returns a URL\n * for editing the contents of the data.\n *\n * @remarks\n *\n * Converts\n * from: https://app.harness.io/a/b/src/branchname/path/to/c.yaml\n * or: https://app.harness.io/a/b/_edit/branchname/path/to/c.yaml\n *\n * @param url - A URL pointing to a file\n * @param config - The relevant provider config\n * @public\n */\nexport function getHarnessEditContentsUrl(\n config: HarnessIntegrationConfig,\n url: string,\n) {\n try {\n const baseUrl = `https://${config.host}`;\n const [\n _blank,\n _ng,\n _account,\n accountId,\n _module,\n _moduleName,\n _org,\n orgName,\n _projects,\n projectName,\n _repos,\n repoName,\n _files,\n _ref,\n _branch,\n ...path\n ] = url.replace(baseUrl, '').split('/');\n const pathWithoutSlash = path.join('/').replace(/^\\//, '');\n return `${baseUrl}/gateway/code/api/v1/repos/${accountId}/${orgName}/${projectName}/${repoName}/+/edit/${pathWithoutSlash}`;\n } catch (e) {\n throw new Error(`Incorrect URL: ${url}, ${e}`);\n }\n}\n\n/**\n * Given a file path URL,\n * it returns an API URL which returns the contents of the file.\n * @remarks\n *\n * Converts\n * from: https://app.harness.io/ng/account/accountId/module/code/orgs/orgName/projects/projName/repos/repoName/files/refMain/~/all-apis.yaml\n * to: https://app.harness.io/gateway/code/api/v1/repos/accountId/orgName/projName/repoName/+/content/all-apis.yaml?routingId=accountId&include_commit=false&ref=refMain\n *\n * @param url - A URL pointing to a file\n * @param config - The relevant provider config\n * @public\n */\nexport function getHarnessFileContentsUrl(\n config: HarnessIntegrationConfig,\n url: string,\n) {\n try {\n const baseUrl = `https://${config.host}`;\n const [\n _blank,\n _ng,\n _account,\n accountId,\n _module,\n _moduleName,\n _org,\n orgName,\n _projects,\n projectName,\n _repos,\n repoName,\n _files,\n _ref,\n _branch,\n ...path\n ] = url.replace(baseUrl, '').split('/');\n const urlParts = url.replace(baseUrl, '').split('/');\n const refAndPath = urlParts.slice(13);\n const refIndex = refAndPath.findIndex(item => item === '~');\n const refString = refAndPath.slice(0, refIndex);\n const pathWithoutSlash = path.join('/').replace(/^\\//, '');\n return `${baseUrl}/gateway/code/api/v1/repos/${accountId}/${orgName}/${projectName}/${repoName}/+/raw/${pathWithoutSlash}?routingId=${accountId}&git_ref=${refString}`;\n } catch (e) {\n throw new Error(`Incorrect URL: ${url}, ${e}`);\n }\n}\n\n/**\n * Return request headers for a Harness Code provider.\n *\n * @param config - A Harness Code provider config\n * @public\n */\nexport function getHarnessRequestOptions(config: HarnessIntegrationConfig): {\n headers?: Record<string, string>;\n} {\n const headers: Record<string, string> = {};\n const { token, apiKey } = config;\n\n if (apiKey) {\n headers['x-api-key'] = apiKey;\n } else if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n\n return {\n headers,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.esm.js","sources":["../../src/harness/core.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { HarnessIntegrationConfig } from './config';\n\n/**\n * Given a URL pointing to a file, returns a URL\n * for editing the contents of the data.\n *\n * @remarks\n *\n * Converts\n * from: https://app.harness.io/a/b/src/branchname/path/to/c.yaml\n * or: https://app.harness.io/a/b/_edit/branchname/path/to/c.yaml\n *\n * @param url - A URL pointing to a file\n * @param config - The relevant provider config\n * @public\n */\nexport function getHarnessEditContentsUrl(\n config: HarnessIntegrationConfig,\n url: string,\n) {\n const parsedUrl = parseHarnessUrl(config, url);\n return `${parsedUrl.baseUrl}/ng/account/${parsedUrl.accountId}/module/code/orgs/${parsedUrl.orgName}/projects/${parsedUrl.projectName}/${parsedUrl.repoName}/files/${parsedUrl.branch}/~/${parsedUrl.path}`;\n}\n\n/**\n * Given a file path URL,\n * it returns an API URL which returns the contents of the file .\n * @remarks\n *\n * Converts\n * from: https://app.harness.io/ng/account/accountId/module/code/orgs/orgName/projects/projName/repos/repoName/files/refMain/~/all-apis.yaml\n * to: https://app.harness.io/gateway/code/api/v1/repos/accountId/orgName/projName/repoName/+/content/all-apis.yaml?routingId=accountId&include_commit=false&ref=refMain\n *\n * @param url - A URL pointing to a file\n * @param config - The relevant provider config\n * @public\n */\nexport function getHarnessFileContentsUrl(\n config: HarnessIntegrationConfig,\n url: string,\n) {\n const parsedUrl = parseHarnessUrl(config, url);\n return `${parsedUrl.baseUrl}/gateway/code/api/v1/repos/${parsedUrl.accountId}/${parsedUrl.orgName}/${parsedUrl.projectName}/${parsedUrl.repoName}/+/raw/${parsedUrl.path}?routingId=${parsedUrl.accountId}&git_ref=refs/heads/${parsedUrl.refString}`;\n}\n\n/**\n * Given a URL pointing to a repository/path, returns a URL\n * for archive contents of the repository.\n *\n * @remarks\n *\n * Converts\n * from: https://qa.harness.io/ng/account/accountId/module/code/orgs/orgId/projects/projectName/repos/repoName/files/branch/~/fileName\n * to: https://qa.harness.io/gateway/code/api/v1/repos/accountId/orgId/projectName/repoName/+/archive/branch.zip?routingId=accountId\n *\n * @param url - A URL pointing to a repository/path\n * @param config - The relevant provider config\n * @public\n */\nexport function getHarnessArchiveUrl(\n config: HarnessIntegrationConfig,\n url: string,\n) {\n const parsedUrl = parseHarnessUrl(config, url);\n return `${parsedUrl.baseUrl}/gateway/code/api/v1/repos/${parsedUrl.accountId}/${parsedUrl.orgName}/${parsedUrl.projectName}/${parsedUrl.repoName}/+/archive/${parsedUrl.branch}.zip?routingId=${parsedUrl.accountId}`;\n}\n\n/**\n * Given a URL pointing to a repository branch, returns a URL\n * for latest commit information.\n *\n * @remarks\n *\n * Converts\n * from: https://app.harness.io/ng/account/accountId/module/code/orgs/orgName/projects/projectName/repos/repoName/files/branchName\n * to: https://app.harness.io/gateway/code/api/v1/repos/accountId/orgName/projectName/repoName/+/content?routingId=accountId&include_commit=true&git_ref=refs/heads/branchName\n *\n * @param url - A URL pointing to a repository branch\n * @param config - The relevant provider config\n * @public\n */\nexport function getHarnessLatestCommitUrl(\n config: HarnessIntegrationConfig,\n url: string,\n) {\n const parsedUrl = parseHarnessUrl(config, url);\n return `${parsedUrl.baseUrl}/gateway/code/api/v1/repos/${parsedUrl.accountId}/${parsedUrl.orgName}/${parsedUrl.projectName}/${parsedUrl.repoName}/+/content?routingId=${parsedUrl.accountId}&include_commit=true&git_ref=refs/heads/${parsedUrl.branch}`;\n}\n\n/**\n * Return request headers for a Harness Code provider.\n *\n * @param config - A Harness Code provider config\n * @public\n */\nexport function getHarnessRequestOptions(config: HarnessIntegrationConfig): {\n headers?: Record<string, string>;\n} {\n const headers: Record<string, string> = {};\n const { token, apiKey } = config;\n\n if (apiKey) {\n headers['x-api-key'] = apiKey;\n } else if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n\n return {\n headers,\n };\n}\n\n/**\n * Return parsed git url properties.\n *\n * @param config - A Harness provider config\n * @param url - A URL pointing to a repository\n * @public\n */\nexport function parseHarnessUrl(\n config: HarnessIntegrationConfig,\n url: string,\n): {\n baseUrl: string;\n accountId: string;\n orgName: string;\n projectName: string;\n refString: string;\n repoName: string;\n path: string;\n refDashStr: string;\n branch: string;\n} {\n const baseUrl = `https://${config.host}`;\n try {\n const pathUrl = new URL(url);\n const pathSegments = pathUrl.pathname\n .split('/')\n .filter(segment => segment !== '');\n const urlParts = pathUrl.pathname.split('/');\n const [\n _ng,\n _account,\n accountId,\n _module,\n _moduleName,\n _org,\n orgName,\n _projects,\n projectName,\n _repos,\n repoName,\n _files,\n _ref,\n _branch,\n ..._path\n ] = pathSegments;\n const refAndPath = urlParts.slice(\n urlParts.findIndex(i => i === 'files' || i === 'edit') + 1,\n );\n const refIndex = refAndPath.findIndex(item => item === '~');\n const refString = refAndPath.slice(0, refIndex).join('/');\n const pathWithoutSlash =\n refIndex !== -1\n ? refAndPath\n .slice(refIndex + 1)\n .join('/')\n .replace(/^\\//, '')\n : '';\n return {\n baseUrl: baseUrl,\n accountId: accountId,\n orgName: orgName,\n projectName: projectName,\n refString: refString,\n path: pathWithoutSlash,\n repoName: repoName,\n refDashStr: refAndPath.slice(0, refIndex).join('-'),\n branch:\n refIndex !== -1\n ? refAndPath.slice(0, refIndex).join('/')\n : refAndPath.join('/'),\n };\n } catch (e) {\n throw new Error(`Incorrect URL: ${url}, ${e}`);\n }\n}\n"],"names":[],"mappings":"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"}
|