@backstage/integration 1.0.0 → 1.1.0-next.2
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 +28 -0
- package/config.d.ts +6 -0
- package/dist/index.cjs.js +69 -3
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +50 -1
- package/dist/index.esm.js +67 -5
- package/dist/index.esm.js.map +1 -1
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -314,6 +314,13 @@ declare type GerritIntegrationConfig = {
|
|
|
314
314
|
* in a browser.
|
|
315
315
|
*/
|
|
316
316
|
baseUrl?: string;
|
|
317
|
+
/**
|
|
318
|
+
* Optional base url for Gitiles. This is needed for creating a valid
|
|
319
|
+
* user-friendly url that can be used for browsing the content of the
|
|
320
|
+
* provider. If not set a default value will be created in the same way
|
|
321
|
+
* as the "baseUrl" option.
|
|
322
|
+
*/
|
|
323
|
+
gitilesBaseUrl?: string;
|
|
317
324
|
/**
|
|
318
325
|
* The username to use for requests to gerrit.
|
|
319
326
|
*/
|
|
@@ -360,6 +367,36 @@ declare class GerritIntegration implements ScmIntegration {
|
|
|
360
367
|
resolveEditUrl(url: string): string;
|
|
361
368
|
}
|
|
362
369
|
|
|
370
|
+
/**
|
|
371
|
+
* Return the url to fetch the contents of a file using the Gerrit API.
|
|
372
|
+
*
|
|
373
|
+
* @param url - An url pointing to a file in git.
|
|
374
|
+
* @public
|
|
375
|
+
*/
|
|
376
|
+
declare function getGerritFileContentsApiUrl(config: GerritIntegrationConfig, url: string): string;
|
|
377
|
+
/**
|
|
378
|
+
* Return request headers for a Gerrit provider.
|
|
379
|
+
*
|
|
380
|
+
* @param config - A Gerrit provider config
|
|
381
|
+
* @public
|
|
382
|
+
*/
|
|
383
|
+
declare function getGerritRequestOptions(config: GerritIntegrationConfig): {
|
|
384
|
+
headers?: Record<string, string>;
|
|
385
|
+
};
|
|
386
|
+
/**
|
|
387
|
+
* Parse the json response from Gerrit and strip the magic prefix.
|
|
388
|
+
*
|
|
389
|
+
* @remarks
|
|
390
|
+
*
|
|
391
|
+
* To prevent against XSSI attacks the JSON response body from Gerrit starts
|
|
392
|
+
* with a magic prefix that must be stripped before it can be fed to a JSON
|
|
393
|
+
* parser.
|
|
394
|
+
*
|
|
395
|
+
* @param response - An API response.
|
|
396
|
+
* @public
|
|
397
|
+
*/
|
|
398
|
+
declare function parseGerritJsonResponse(response: Response): Promise<unknown>;
|
|
399
|
+
|
|
363
400
|
/**
|
|
364
401
|
* The configuration parameters for a single GitHub integration.
|
|
365
402
|
*
|
|
@@ -552,6 +589,10 @@ declare type AwsS3IntegrationConfig = {
|
|
|
552
589
|
* (Optional) ARN of role to be assumed
|
|
553
590
|
*/
|
|
554
591
|
roleArn?: string;
|
|
592
|
+
/**
|
|
593
|
+
* (Optional) External ID to use when assuming role
|
|
594
|
+
*/
|
|
595
|
+
externalId?: string;
|
|
555
596
|
};
|
|
556
597
|
/**
|
|
557
598
|
* Reads a single Aws S3 integration config.
|
|
@@ -683,6 +724,14 @@ declare class GitLabIntegration implements ScmIntegration {
|
|
|
683
724
|
}): string;
|
|
684
725
|
resolveEditUrl(url: string): string;
|
|
685
726
|
}
|
|
727
|
+
/**
|
|
728
|
+
* Takes a GitLab URL and replaces the type part (blob, tree etc).
|
|
729
|
+
*
|
|
730
|
+
* @param url - The original URL
|
|
731
|
+
* @param type - The desired type, e.g. 'blob', 'tree', 'edit'
|
|
732
|
+
* @public
|
|
733
|
+
*/
|
|
734
|
+
declare function replaceGitLabUrlType(url: string, type: 'blob' | 'tree' | 'edit'): string;
|
|
686
735
|
|
|
687
736
|
/**
|
|
688
737
|
* Holds all registered SCM integrations, of all types.
|
|
@@ -928,4 +977,4 @@ declare class ScmIntegrations implements ScmIntegrationRegistry {
|
|
|
928
977
|
resolveEditUrl(url: string): string;
|
|
929
978
|
}
|
|
930
979
|
|
|
931
|
-
export { AwsS3Integration, AwsS3IntegrationConfig, AzureIntegration, AzureIntegrationConfig, BitbucketIntegration, BitbucketIntegrationConfig, DefaultGithubCredentialsProvider, GerritIntegration, GerritIntegrationConfig, GitHubIntegration, GitHubIntegrationConfig, GitLabIntegration, GitLabIntegrationConfig, GithubAppConfig, GithubAppCredentialsMux, GithubCredentialType, GithubCredentials, GithubCredentialsProvider, GoogleGcsIntegrationConfig, IntegrationsByType, ScmIntegration, ScmIntegrationRegistry, ScmIntegrations, ScmIntegrationsFactory, ScmIntegrationsGroup, SingleInstanceGithubCredentialsProvider, defaultScmResolveUrl, getAzureCommitsUrl, getAzureDownloadUrl, getAzureFileFetchUrl, getAzureRequestOptions, getBitbucketDefaultBranch, getBitbucketDownloadUrl, getBitbucketFileFetchUrl, getBitbucketRequestOptions, getGitHubFileFetchUrl, getGitHubRequestOptions, getGitLabFileFetchUrl, getGitLabRequestOptions, readAwsS3IntegrationConfig, readAwsS3IntegrationConfigs, readAzureIntegrationConfig, readAzureIntegrationConfigs, readBitbucketIntegrationConfig, readBitbucketIntegrationConfigs, readGerritIntegrationConfig, readGerritIntegrationConfigs, readGitHubIntegrationConfig, readGitHubIntegrationConfigs, readGitLabIntegrationConfig, readGitLabIntegrationConfigs, readGoogleGcsIntegrationConfig, replaceGitHubUrlType };
|
|
980
|
+
export { AwsS3Integration, AwsS3IntegrationConfig, AzureIntegration, AzureIntegrationConfig, BitbucketIntegration, BitbucketIntegrationConfig, DefaultGithubCredentialsProvider, GerritIntegration, GerritIntegrationConfig, GitHubIntegration, GitHubIntegrationConfig, GitLabIntegration, GitLabIntegrationConfig, GithubAppConfig, GithubAppCredentialsMux, GithubCredentialType, GithubCredentials, GithubCredentialsProvider, GoogleGcsIntegrationConfig, IntegrationsByType, ScmIntegration, ScmIntegrationRegistry, ScmIntegrations, ScmIntegrationsFactory, ScmIntegrationsGroup, SingleInstanceGithubCredentialsProvider, defaultScmResolveUrl, getAzureCommitsUrl, getAzureDownloadUrl, getAzureFileFetchUrl, getAzureRequestOptions, getBitbucketDefaultBranch, getBitbucketDownloadUrl, getBitbucketFileFetchUrl, getBitbucketRequestOptions, getGerritFileContentsApiUrl, getGerritRequestOptions, getGitHubFileFetchUrl, getGitHubRequestOptions, getGitLabFileFetchUrl, getGitLabRequestOptions, parseGerritJsonResponse, readAwsS3IntegrationConfig, readAwsS3IntegrationConfigs, readAzureIntegrationConfig, readAzureIntegrationConfigs, readBitbucketIntegrationConfig, readBitbucketIntegrationConfigs, readGerritIntegrationConfig, readGerritIntegrationConfigs, readGitHubIntegrationConfig, readGitHubIntegrationConfigs, readGitLabIntegrationConfig, readGitLabIntegrationConfigs, readGoogleGcsIntegrationConfig, replaceGitHubUrlType, replaceGitLabUrlType };
|
package/dist/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import parseGitUrl from 'git-url-parse';
|
|
2
|
-
import { trimEnd } from 'lodash';
|
|
2
|
+
import { trimEnd, trimStart } from 'lodash';
|
|
3
3
|
import fetch from 'cross-fetch';
|
|
4
4
|
import { createAppAuth } from '@octokit/auth-app';
|
|
5
5
|
import { Octokit } from '@octokit/rest';
|
|
@@ -445,21 +445,30 @@ function getBitbucketRequestOptions(config) {
|
|
|
445
445
|
function readGerritIntegrationConfig(config) {
|
|
446
446
|
const host = config.getString("host");
|
|
447
447
|
let baseUrl = config.getOptionalString("baseUrl");
|
|
448
|
+
let gitilesBaseUrl = config.getOptionalString("gitilesBaseUrl");
|
|
448
449
|
const username = config.getOptionalString("username");
|
|
449
450
|
const password = config.getOptionalString("password");
|
|
450
451
|
if (!isValidHost(host)) {
|
|
451
452
|
throw new Error(`Invalid Gerrit integration config, '${host}' is not a valid host`);
|
|
452
453
|
} else if (baseUrl && !isValidUrl(baseUrl)) {
|
|
453
454
|
throw new Error(`Invalid Gerrit integration config, '${baseUrl}' is not a valid baseUrl`);
|
|
455
|
+
} else if (gitilesBaseUrl && !isValidUrl(gitilesBaseUrl)) {
|
|
456
|
+
throw new Error(`Invalid Gerrit integration config, '${gitilesBaseUrl}' is not a valid gitilesBaseUrl`);
|
|
454
457
|
}
|
|
455
458
|
if (baseUrl) {
|
|
456
459
|
baseUrl = trimEnd(baseUrl, "/");
|
|
457
460
|
} else {
|
|
458
461
|
baseUrl = `https://${host}`;
|
|
459
462
|
}
|
|
463
|
+
if (gitilesBaseUrl) {
|
|
464
|
+
gitilesBaseUrl = trimEnd(gitilesBaseUrl, "/");
|
|
465
|
+
} else {
|
|
466
|
+
gitilesBaseUrl = `https://${host}`;
|
|
467
|
+
}
|
|
460
468
|
return {
|
|
461
469
|
host,
|
|
462
470
|
baseUrl,
|
|
471
|
+
gitilesBaseUrl,
|
|
463
472
|
username,
|
|
464
473
|
password
|
|
465
474
|
};
|
|
@@ -505,6 +514,57 @@ GerritIntegration.factory = ({ config }) => {
|
|
|
505
514
|
return basicIntegrations(configs.map((c) => new _GerritIntegration(c)), (i) => i.config.host);
|
|
506
515
|
};
|
|
507
516
|
|
|
517
|
+
const GERRIT_BODY_PREFIX = ")]}'";
|
|
518
|
+
function parseGitilesUrl(config, url) {
|
|
519
|
+
const urlPath = url.replace(config.gitilesBaseUrl, "");
|
|
520
|
+
const parts = urlPath.split("/").filter((p) => !!p);
|
|
521
|
+
const projectEndIndex = parts.indexOf("+");
|
|
522
|
+
if (projectEndIndex <= 0) {
|
|
523
|
+
throw new Error(`Unable to parse project from url: ${url}`);
|
|
524
|
+
}
|
|
525
|
+
const project = trimStart(parts.slice(0, projectEndIndex).join("/"), "/");
|
|
526
|
+
const branchIndex = parts.indexOf("heads");
|
|
527
|
+
if (branchIndex <= 0) {
|
|
528
|
+
throw new Error(`Unable to parse branch from url: ${url}`);
|
|
529
|
+
}
|
|
530
|
+
const branch = parts[branchIndex + 1];
|
|
531
|
+
const filePath = parts.slice(branchIndex + 2).join("/");
|
|
532
|
+
return {
|
|
533
|
+
branch,
|
|
534
|
+
filePath: filePath === "" ? "/" : filePath,
|
|
535
|
+
project
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
function getAuthenticationPrefix(config) {
|
|
539
|
+
return config.password ? "/a/" : "/";
|
|
540
|
+
}
|
|
541
|
+
function getGerritFileContentsApiUrl(config, url) {
|
|
542
|
+
const { branch, filePath, project } = parseGitilesUrl(config, url);
|
|
543
|
+
return `${config.baseUrl}${getAuthenticationPrefix(config)}projects/${encodeURIComponent(project)}/branches/${branch}/files/${encodeURIComponent(filePath)}/content`;
|
|
544
|
+
}
|
|
545
|
+
function getGerritRequestOptions(config) {
|
|
546
|
+
const headers = {};
|
|
547
|
+
if (!config.password) {
|
|
548
|
+
return headers;
|
|
549
|
+
}
|
|
550
|
+
const buffer = Buffer.from(`${config.username}:${config.password}`, "utf8");
|
|
551
|
+
headers.Authorization = `Basic ${buffer.toString("base64")}`;
|
|
552
|
+
return {
|
|
553
|
+
headers
|
|
554
|
+
};
|
|
555
|
+
}
|
|
556
|
+
async function parseGerritJsonResponse(response) {
|
|
557
|
+
const responseBody = await response.text();
|
|
558
|
+
if (responseBody.startsWith(GERRIT_BODY_PREFIX)) {
|
|
559
|
+
try {
|
|
560
|
+
return JSON.parse(responseBody.slice(GERRIT_BODY_PREFIX.length));
|
|
561
|
+
} catch (ex) {
|
|
562
|
+
throw new Error(`Invalid response from Gerrit: ${responseBody.slice(0, 10)} - ${ex}`);
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
throw new Error(`Gerrit JSON body prefix missing. Found: ${responseBody.slice(0, 10)}`);
|
|
566
|
+
}
|
|
567
|
+
|
|
508
568
|
const GITHUB_HOST = "github.com";
|
|
509
569
|
const GITHUB_API_BASE_URL = "https://api.github.com";
|
|
510
570
|
const GITHUB_RAW_BASE_URL = "https://raw.githubusercontent.com";
|
|
@@ -901,7 +961,7 @@ const _GitLabIntegration = class {
|
|
|
901
961
|
return defaultScmResolveUrl(options);
|
|
902
962
|
}
|
|
903
963
|
resolveEditUrl(url) {
|
|
904
|
-
return
|
|
964
|
+
return replaceGitLabUrlType(url, "edit");
|
|
905
965
|
}
|
|
906
966
|
};
|
|
907
967
|
let GitLabIntegration = _GitLabIntegration;
|
|
@@ -910,7 +970,7 @@ GitLabIntegration.factory = ({ config }) => {
|
|
|
910
970
|
const configs = readGitLabIntegrationConfigs((_a = config.getOptionalConfigArray("integrations.gitlab")) != null ? _a : []);
|
|
911
971
|
return basicIntegrations(configs.map((c) => new _GitLabIntegration(c)), (i) => i.config.host);
|
|
912
972
|
};
|
|
913
|
-
function
|
|
973
|
+
function replaceGitLabUrlType(url, type) {
|
|
914
974
|
return url.replace(/\/\-\/(blob|tree|edit)\//, `/-/${type}/`);
|
|
915
975
|
}
|
|
916
976
|
|
|
@@ -950,13 +1010,15 @@ function readAwsS3IntegrationConfig(config) {
|
|
|
950
1010
|
const accessKeyId = config.getOptionalString("accessKeyId");
|
|
951
1011
|
const secretAccessKey = config.getOptionalString("secretAccessKey");
|
|
952
1012
|
const roleArn = config.getOptionalString("roleArn");
|
|
1013
|
+
const externalId = config.getOptionalString("externalId");
|
|
953
1014
|
return {
|
|
954
1015
|
host,
|
|
955
1016
|
endpoint,
|
|
956
1017
|
s3ForcePathStyle,
|
|
957
1018
|
accessKeyId,
|
|
958
1019
|
secretAccessKey,
|
|
959
|
-
roleArn
|
|
1020
|
+
roleArn,
|
|
1021
|
+
externalId
|
|
960
1022
|
};
|
|
961
1023
|
}
|
|
962
1024
|
function readAwsS3IntegrationConfigs(configs) {
|
|
@@ -1054,5 +1116,5 @@ class ScmIntegrations {
|
|
|
1054
1116
|
}
|
|
1055
1117
|
}
|
|
1056
1118
|
|
|
1057
|
-
export { AwsS3Integration, AzureIntegration, BitbucketIntegration, DefaultGithubCredentialsProvider, GerritIntegration, GitHubIntegration, GitLabIntegration, GithubAppCredentialsMux, ScmIntegrations, SingleInstanceGithubCredentialsProvider, defaultScmResolveUrl, getAzureCommitsUrl, getAzureDownloadUrl, getAzureFileFetchUrl, getAzureRequestOptions, getBitbucketDefaultBranch, getBitbucketDownloadUrl, getBitbucketFileFetchUrl, getBitbucketRequestOptions, getGitHubFileFetchUrl, getGitHubRequestOptions, getGitLabFileFetchUrl, getGitLabRequestOptions, readAwsS3IntegrationConfig, readAwsS3IntegrationConfigs, readAzureIntegrationConfig, readAzureIntegrationConfigs, readBitbucketIntegrationConfig, readBitbucketIntegrationConfigs, readGerritIntegrationConfig, readGerritIntegrationConfigs, readGitHubIntegrationConfig, readGitHubIntegrationConfigs, readGitLabIntegrationConfig, readGitLabIntegrationConfigs, readGoogleGcsIntegrationConfig, replaceGitHubUrlType };
|
|
1119
|
+
export { AwsS3Integration, AzureIntegration, BitbucketIntegration, DefaultGithubCredentialsProvider, GerritIntegration, GitHubIntegration, GitLabIntegration, GithubAppCredentialsMux, ScmIntegrations, SingleInstanceGithubCredentialsProvider, defaultScmResolveUrl, getAzureCommitsUrl, getAzureDownloadUrl, getAzureFileFetchUrl, getAzureRequestOptions, getBitbucketDefaultBranch, getBitbucketDownloadUrl, getBitbucketFileFetchUrl, getBitbucketRequestOptions, getGerritFileContentsApiUrl, getGerritRequestOptions, getGitHubFileFetchUrl, getGitHubRequestOptions, getGitLabFileFetchUrl, getGitLabRequestOptions, parseGerritJsonResponse, readAwsS3IntegrationConfig, readAwsS3IntegrationConfigs, readAzureIntegrationConfig, readAzureIntegrationConfigs, readBitbucketIntegrationConfig, readBitbucketIntegrationConfigs, readGerritIntegrationConfig, readGerritIntegrationConfigs, readGitHubIntegrationConfig, readGitHubIntegrationConfigs, readGitLabIntegrationConfig, readGitLabIntegrationConfigs, readGoogleGcsIntegrationConfig, replaceGitHubUrlType, replaceGitLabUrlType };
|
|
1058
1120
|
//# sourceMappingURL=index.esm.js.map
|