@backstage/integration 1.6.0 → 1.7.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/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import parseGitUrl from 'git-url-parse';
2
2
  import { trimEnd, trimStart } from 'lodash';
3
- import { ClientSecretCredential, ManagedIdentityCredential } from '@azure/identity';
3
+ import { ManagedIdentityCredential, ClientSecretCredential, DefaultAzureCredential } from '@azure/identity';
4
4
  import fetch from 'cross-fetch';
5
5
  import { createAppAuth } from '@octokit/auth-app';
6
6
  import { Octokit } from '@octokit/rest';
@@ -112,10 +112,10 @@ function readAwsS3IntegrationConfigs(configs) {
112
112
  return result;
113
113
  }
114
114
 
115
- var __defProp$c = Object.defineProperty;
116
- var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
117
- var __publicField$c = (obj, key, value) => {
118
- __defNormalProp$c(obj, typeof key !== "symbol" ? key + "" : key, value);
115
+ var __defProp$d = Object.defineProperty;
116
+ var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
117
+ var __publicField$d = (obj, key, value) => {
118
+ __defNormalProp$d(obj, typeof key !== "symbol" ? key + "" : key, value);
119
119
  return value;
120
120
  };
121
121
  const _AwsS3Integration = class _AwsS3Integration {
@@ -139,7 +139,7 @@ const _AwsS3Integration = class _AwsS3Integration {
139
139
  return url;
140
140
  }
141
141
  };
142
- __publicField$c(_AwsS3Integration, "factory", ({ config }) => {
142
+ __publicField$d(_AwsS3Integration, "factory", ({ config }) => {
143
143
  var _a;
144
144
  const configs = readAwsS3IntegrationConfigs(
145
145
  (_a = config.getOptionalConfigArray("integrations.awsS3")) != null ? _a : []
@@ -341,43 +341,146 @@ _baseUrl = new WeakMap();
341
341
  let AzureUrl = _AzureUrl;
342
342
 
343
343
  const AZURE_HOST = "dev.azure.com";
344
- const isAzureClientSecretCredential = (credential) => {
345
- const clientSecretCredential = credential;
346
- return Object.keys(credential).length === 3 && clientSecretCredential.clientId !== void 0 && clientSecretCredential.clientSecret !== void 0 && clientSecretCredential.tenantId !== void 0;
347
- };
348
- const isAzureManagedIdentityCredential = (credential) => {
349
- return Object.keys(credential).length === 1 && credential.clientId !== void 0;
350
- };
344
+ const AzureDevOpsCredentialFields = [
345
+ "clientId",
346
+ "clientSecret",
347
+ "tenantId",
348
+ "personalAccessToken"
349
+ ];
350
+ const AzureDevopsCredentialFieldMap = /* @__PURE__ */ new Map([
351
+ ["ClientSecret", ["clientId", "clientSecret", "tenantId"]],
352
+ ["ManagedIdentity", ["clientId"]],
353
+ ["PersonalAccessToken", ["personalAccessToken"]]
354
+ ]);
355
+ function asAzureDevOpsCredential(credential) {
356
+ for (const entry of AzureDevopsCredentialFieldMap.entries()) {
357
+ const [kind, requiredFields] = entry;
358
+ const forbiddenFields = AzureDevOpsCredentialFields.filter(
359
+ (field) => !requiredFields.includes(field)
360
+ );
361
+ if (requiredFields.every((field) => credential[field] !== void 0) && forbiddenFields.every((field) => credential[field] === void 0)) {
362
+ return {
363
+ kind,
364
+ organizations: credential.organizations,
365
+ ...requiredFields.reduce((acc, field) => {
366
+ acc[field] = credential[field];
367
+ return acc;
368
+ }, {})
369
+ };
370
+ }
371
+ }
372
+ throw new Error("is not a valid credential");
373
+ }
351
374
  function readAzureIntegrationConfig(config) {
352
- var _a;
375
+ var _a, _b, _c, _d;
353
376
  const host = (_a = config.getOptionalString("host")) != null ? _a : AZURE_HOST;
377
+ let credentialConfigs = (_b = config.getOptionalConfigArray("credentials")) == null ? void 0 : _b.map((credential) => {
378
+ const result = {
379
+ organizations: credential.getOptionalStringArray("organizations"),
380
+ personalAccessToken: credential.getOptionalString(
381
+ "personalAccessToken"
382
+ ),
383
+ tenantId: credential.getOptionalString("tenantId"),
384
+ clientId: credential.getOptionalString("clientId"),
385
+ clientSecret: credential.getOptionalString("clientSecret")
386
+ };
387
+ return result;
388
+ });
354
389
  const token = config.getOptionalString("token");
355
- const credential = config.getOptional("credential") ? {
356
- tenantId: config.getOptionalString("credential.tenantId"),
357
- clientId: config.getOptionalString("credential.clientId"),
358
- clientSecret: config.getOptionalString("credential.clientSecret")
359
- } : void 0;
360
- if (!isValidHost(host)) {
390
+ if (config.getOptional("credential") !== void 0 && config.getOptional("credentials") !== void 0) {
361
391
  throw new Error(
362
- `Invalid Azure integration config, '${host}' is not a valid host`
392
+ `Invalid Azure integration config, 'credential' and 'credentials' cannot be used together. Use 'credentials' instead.`
363
393
  );
364
394
  }
365
- if (credential && !isAzureClientSecretCredential(credential) && !isAzureManagedIdentityCredential(credential)) {
395
+ if (config.getOptional("token") !== void 0 && config.getOptional("credentials") !== void 0) {
366
396
  throw new Error(
367
- `Invalid Azure integration config, credential is not valid`
397
+ `Invalid Azure integration config, 'token' and 'credentials' cannot be used together. Use 'credentials' instead.`
368
398
  );
369
399
  }
370
- if (credential && host !== AZURE_HOST) {
400
+ if (token !== void 0) {
401
+ const mapped = [{ personalAccessToken: token }];
402
+ credentialConfigs = (_c = credentialConfigs == null ? void 0 : credentialConfigs.concat(mapped)) != null ? _c : mapped;
403
+ }
404
+ if (config.getOptional("credential") !== void 0) {
405
+ const mapped = [
406
+ {
407
+ organizations: config.getOptionalStringArray(
408
+ "credential.organizations"
409
+ ),
410
+ token: config.getOptionalString("credential.token"),
411
+ tenantId: config.getOptionalString("credential.tenantId"),
412
+ clientId: config.getOptionalString("credential.clientId"),
413
+ clientSecret: config.getOptionalString("credential.clientSecret")
414
+ }
415
+ ];
416
+ credentialConfigs = (_d = credentialConfigs == null ? void 0 : credentialConfigs.concat(mapped)) != null ? _d : mapped;
417
+ }
418
+ if (!isValidHost(host)) {
371
419
  throw new Error(
372
- `Invalid Azure integration config, credential can only be used with ${AZURE_HOST}`
420
+ `Invalid Azure integration config, '${host}' is not a valid host`
373
421
  );
374
422
  }
375
- if (credential && token) {
376
- throw new Error(
377
- `Invalid Azure integration config, specify either a token or a credential but not both`
423
+ let credentials = void 0;
424
+ if (credentialConfigs !== void 0) {
425
+ const errors = credentialConfigs == null ? void 0 : credentialConfigs.reduce((acc, credentialConfig, index) => {
426
+ let error = void 0;
427
+ try {
428
+ asAzureDevOpsCredential(credentialConfig);
429
+ } catch (e) {
430
+ error = e.message;
431
+ }
432
+ if (error !== void 0) {
433
+ acc.push(`credential at position ${index + 1} ${error}`);
434
+ }
435
+ return acc;
436
+ }, Array.of()).concat(
437
+ Object.entries(
438
+ credentialConfigs.filter(
439
+ (credential) => credential.organizations !== void 0 && credential.organizations.length > 0
440
+ ).reduce((acc, credential, index) => {
441
+ var _a2;
442
+ (_a2 = credential.organizations) == null ? void 0 : _a2.forEach((organization) => {
443
+ if (!acc[organization]) {
444
+ acc[organization] = [];
445
+ }
446
+ acc[organization].push(index + 1);
447
+ });
448
+ return acc;
449
+ }, {})
450
+ ).filter(([_, indexes]) => indexes.length > 1).reduce((acc, [org, indexes]) => {
451
+ acc.push(
452
+ `organization ${org} is specified multiple times in credentials at positions ${indexes.slice(0, indexes.length - 1).join(", ")} and ${indexes[indexes.length - 1]}`
453
+ );
454
+ return acc;
455
+ }, Array.of())
456
+ );
457
+ if ((errors == null ? void 0 : errors.length) > 0) {
458
+ throw new Error(
459
+ `Invalid Azure integration config for ${host}: ${errors.join("; ")}`
460
+ );
461
+ }
462
+ credentials = credentialConfigs.map(
463
+ (credentialConfig) => asAzureDevOpsCredential(credentialConfig)
378
464
  );
465
+ if (credentials.some(
466
+ (credential) => credential.kind !== "PersonalAccessToken"
467
+ ) && host !== AZURE_HOST) {
468
+ throw new Error(
469
+ `Invalid Azure integration config for ${host}, only personal access tokens can be used with hosts other than ${AZURE_HOST}`
470
+ );
471
+ }
472
+ if (credentials.filter(
473
+ (credential) => credential.organizations === void 0 || credential.organizations.length === 0
474
+ ).length > 1) {
475
+ throw new Error(
476
+ `Invalid Azure integration config for ${host}, you cannot specify multiple credentials without organizations`
477
+ );
478
+ }
379
479
  }
380
- return { host, token, credential };
480
+ return {
481
+ host,
482
+ credentials
483
+ };
381
484
  }
382
485
  function readAzureIntegrationConfigs(configs) {
383
486
  const result = configs.map(readAzureIntegrationConfig);
@@ -387,10 +490,10 @@ function readAzureIntegrationConfigs(configs) {
387
490
  return result;
388
491
  }
389
492
 
390
- var __defProp$b = Object.defineProperty;
391
- var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
392
- var __publicField$b = (obj, key, value) => {
393
- __defNormalProp$b(obj, typeof key !== "symbol" ? key + "" : key, value);
493
+ var __defProp$c = Object.defineProperty;
494
+ var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
495
+ var __publicField$c = (obj, key, value) => {
496
+ __defNormalProp$c(obj, typeof key !== "symbol" ? key + "" : key, value);
394
497
  return value;
395
498
  };
396
499
  const _AzureIntegration = class _AzureIntegration {
@@ -438,7 +541,7 @@ const _AzureIntegration = class _AzureIntegration {
438
541
  return url;
439
542
  }
440
543
  };
441
- __publicField$b(_AzureIntegration, "factory", ({ config }) => {
544
+ __publicField$c(_AzureIntegration, "factory", ({ config }) => {
442
545
  var _a;
443
546
  const configs = readAzureIntegrationConfigs(
444
547
  (_a = config.getOptionalConfigArray("integrations.azure")) != null ? _a : []
@@ -459,29 +562,171 @@ function getAzureDownloadUrl(url) {
459
562
  function getAzureCommitsUrl(url) {
460
563
  return AzureUrl.fromRepoUrl(url).toCommitsUrl();
461
564
  }
565
+
566
+ var __defProp$b = Object.defineProperty;
567
+ var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
568
+ var __publicField$b = (obj, key, value) => {
569
+ __defNormalProp$b(obj, typeof key !== "symbol" ? key + "" : key, value);
570
+ return value;
571
+ };
572
+ const tenMinutes = 1e3 * 60 * 10;
573
+ class CachedAzureDevOpsCredentialsProvider {
574
+ constructor(credential) {
575
+ this.credential = credential;
576
+ __publicField$b(this, "azureDevOpsScope", "499b84ac-1321-427f-aa17-267ca6975798/.default");
577
+ __publicField$b(this, "cached");
578
+ }
579
+ static fromAzureDevOpsCredential(credential) {
580
+ switch (credential.kind) {
581
+ case "PersonalAccessToken":
582
+ return CachedAzureDevOpsCredentialsProvider.fromPersonalAccessTokenCredential(
583
+ credential
584
+ );
585
+ case "ClientSecret":
586
+ return CachedAzureDevOpsCredentialsProvider.fromTokenCredential(
587
+ new ClientSecretCredential(
588
+ credential.tenantId,
589
+ credential.clientId,
590
+ credential.clientSecret
591
+ )
592
+ );
593
+ case "ManagedIdentity":
594
+ return CachedAzureDevOpsCredentialsProvider.fromTokenCredential(
595
+ new ManagedIdentityCredential(credential.clientId)
596
+ );
597
+ default:
598
+ throw new Error(
599
+ `Credential kind '${credential.kind}' not supported`
600
+ );
601
+ }
602
+ }
603
+ static fromTokenCredential(credential) {
604
+ return new CachedAzureDevOpsCredentialsProvider(credential);
605
+ }
606
+ static fromPersonalAccessTokenCredential(credential) {
607
+ return new CachedAzureDevOpsCredentialsProvider(
608
+ credential.personalAccessToken
609
+ );
610
+ }
611
+ async getCredentials() {
612
+ if (this.cached === void 0 || this.cached.expiresAt !== void 0 && Date.now() > this.cached.expiresAt) {
613
+ if (typeof this.credential === "string") {
614
+ this.cached = {
615
+ headers: {
616
+ Authorization: `Basic ${btoa(`:${this.credential}`)}`
617
+ },
618
+ type: "pat",
619
+ token: this.credential
620
+ };
621
+ } else {
622
+ const accessToken = await this.credential.getToken(
623
+ this.azureDevOpsScope
624
+ );
625
+ if (!accessToken) {
626
+ throw new Error("Failed to retrieve access token");
627
+ }
628
+ this.cached = {
629
+ expiresAt: accessToken.expiresOnTimestamp - tenMinutes,
630
+ headers: {
631
+ Authorization: `Bearer ${accessToken.token}`
632
+ },
633
+ type: "bearer",
634
+ token: accessToken.token
635
+ };
636
+ }
637
+ }
638
+ return this.cached;
639
+ }
640
+ }
641
+
642
+ class DefaultAzureDevOpsCredentialsProvider {
643
+ constructor(providers) {
644
+ this.providers = providers;
645
+ }
646
+ static fromIntegrations(integrations) {
647
+ const providers = integrations.azure.list().reduce((acc, integration) => {
648
+ var _a;
649
+ (_a = integration.config.credentials) == null ? void 0 : _a.forEach((credential) => {
650
+ var _a2;
651
+ if (credential.organizations === void 0 || credential.organizations.length === 0) {
652
+ if (acc.get(integration.config.host) === void 0) {
653
+ acc.set(
654
+ integration.config.host,
655
+ CachedAzureDevOpsCredentialsProvider.fromAzureDevOpsCredential(
656
+ credential
657
+ )
658
+ );
659
+ }
660
+ } else {
661
+ const provider = CachedAzureDevOpsCredentialsProvider.fromAzureDevOpsCredential(
662
+ credential
663
+ );
664
+ (_a2 = credential.organizations) == null ? void 0 : _a2.forEach((organization) => {
665
+ acc.set(`${integration.config.host}/${organization}`, provider);
666
+ });
667
+ }
668
+ });
669
+ if (integration.config.host === "dev.azure.com" && acc.get(integration.config.host) === void 0) {
670
+ acc.set(
671
+ integration.config.host,
672
+ CachedAzureDevOpsCredentialsProvider.fromTokenCredential(
673
+ new DefaultAzureCredential()
674
+ )
675
+ );
676
+ }
677
+ return acc;
678
+ }, /* @__PURE__ */ new Map());
679
+ return new DefaultAzureDevOpsCredentialsProvider(providers);
680
+ }
681
+ forAzureDevOpsServerOrganization(url) {
682
+ const parts = url.pathname.split("/").filter((part) => part !== "");
683
+ if (url.host !== "dev.azure.com" && parts.length > 0) {
684
+ if (parts[0] !== "tfs") {
685
+ return this.providers.get(`${url.host}/${parts[0]}`);
686
+ } else if (parts[0] === "tfs" && parts.length > 1) {
687
+ return this.providers.get(`${url.host}/${parts[1]}`);
688
+ }
689
+ }
690
+ return void 0;
691
+ }
692
+ forAzureDevOpsOrganization(url) {
693
+ const parts = url.pathname.split("/").filter((part) => part !== "");
694
+ if (url.host === "dev.azure.com" && parts.length > 0) {
695
+ return this.providers.get(`${url.host}/${parts[0]}`);
696
+ }
697
+ return void 0;
698
+ }
699
+ forHost(url) {
700
+ return this.providers.get(url.host);
701
+ }
702
+ async getCredentials(opts) {
703
+ var _a, _b;
704
+ const url = new URL(opts.url);
705
+ const provider = (_b = (_a = this.forAzureDevOpsOrganization(url)) != null ? _a : this.forAzureDevOpsServerOrganization(url)) != null ? _b : this.forHost(url);
706
+ if (provider === void 0) {
707
+ return void 0;
708
+ }
709
+ return provider.getCredentials(opts);
710
+ }
711
+ }
712
+
462
713
  async function getAzureRequestOptions(config, additionalHeaders) {
463
- const azureDevOpsScope = "499b84ac-1321-427f-aa17-267ca6975798/.default";
714
+ var _a;
464
715
  const headers = additionalHeaders ? { ...additionalHeaders } : {};
465
- const { token, credential } = config;
466
- if (credential) {
467
- if (isAzureClientSecretCredential(credential)) {
468
- const servicePrincipal = new ClientSecretCredential(
469
- credential.tenantId,
470
- credential.clientId,
471
- credential.clientSecret
472
- );
473
- const accessToken = await servicePrincipal.getToken(azureDevOpsScope);
474
- headers.Authorization = `Bearer ${accessToken.token}`;
475
- } else if (isAzureManagedIdentityCredential(credential)) {
476
- const managedIdentity = new ManagedIdentityCredential(
477
- credential.clientId
478
- );
479
- const accessToken = await managedIdentity.getToken(azureDevOpsScope);
480
- headers.Authorization = `Bearer ${accessToken.token}`;
481
- }
482
- } else if (token) {
483
- const buffer = Buffer.from(`:${config.token}`, "utf8");
484
- headers.Authorization = `Basic ${buffer.toString("base64")}`;
716
+ const credentialConfig = (_a = config.credentials) == null ? void 0 : _a.filter(
717
+ (credential) => credential.organizations === void 0 || credential.organizations.length === 0
718
+ )[0];
719
+ if (credentialConfig) {
720
+ const credentialsProvider = CachedAzureDevOpsCredentialsProvider.fromAzureDevOpsCredential(
721
+ credentialConfig
722
+ );
723
+ const credentials = await credentialsProvider.getCredentials();
724
+ return {
725
+ headers: {
726
+ ...credentials == null ? void 0 : credentials.headers,
727
+ ...headers
728
+ }
729
+ };
485
730
  }
486
731
  return { headers };
487
732
  }
@@ -1029,9 +1274,12 @@ function getAuthenticationPrefix(config) {
1029
1274
  }
1030
1275
  function getGitilesAuthenticationUrl(config) {
1031
1276
  const parsedUrl = new URL(config.gitilesBaseUrl);
1032
- return `${parsedUrl.protocol}//${parsedUrl.host}${getAuthenticationPrefix(
1033
- config
1034
- )}${parsedUrl.pathname.substring(1)}`;
1277
+ parsedUrl.pathname = parsedUrl.pathname.replace(/\/?$/, "");
1278
+ parsedUrl.pathname = parsedUrl.pathname.replace(
1279
+ /\/([^\/]*)$/,
1280
+ `${getAuthenticationPrefix(config)}$1`
1281
+ );
1282
+ return parsedUrl.toString();
1035
1283
  }
1036
1284
  function getGerritBranchApiUrl(config, url) {
1037
1285
  const { branch, project } = parseGerritGitilesUrl(config, url);
@@ -1950,5 +2198,5 @@ class ScmIntegrations {
1950
2198
  }
1951
2199
  }
1952
2200
 
1953
- export { AwsS3Integration, AzureIntegration, BitbucketCloudIntegration, BitbucketIntegration, BitbucketServerIntegration, DefaultGithubCredentialsProvider, DefaultGitlabCredentialsProvider, GerritIntegration, GitHubIntegration, GitLabIntegration, GiteaIntegration, GithubAppCredentialsMux, GithubIntegration, ScmIntegrations, SingleInstanceGithubCredentialsProvider, buildGerritGitilesArchiveUrl, defaultScmResolveUrl, getAzureCommitsUrl, getAzureDownloadUrl, getAzureFileFetchUrl, getAzureRequestOptions, getBitbucketCloudDefaultBranch, getBitbucketCloudDownloadUrl, getBitbucketCloudFileFetchUrl, getBitbucketCloudRequestOptions, getBitbucketDefaultBranch, getBitbucketDownloadUrl, getBitbucketFileFetchUrl, getBitbucketRequestOptions, getBitbucketServerDefaultBranch, getBitbucketServerDownloadUrl, getBitbucketServerFileFetchUrl, getBitbucketServerRequestOptions, getGerritBranchApiUrl, getGerritCloneRepoUrl, getGerritFileContentsApiUrl, getGerritProjectsApiUrl, getGerritRequestOptions, getGitHubFileFetchUrl, getGitHubRequestOptions, getGitLabFileFetchUrl, getGitLabIntegrationRelativePath, getGitLabRequestOptions, getGiteaFileContentsUrl, getGiteaRequestOptions, getGithubFileFetchUrl, parseGerritGitilesUrl, parseGerritJsonResponse, readAwsS3IntegrationConfig, readAwsS3IntegrationConfigs, readAzureIntegrationConfig, readAzureIntegrationConfigs, readBitbucketCloudIntegrationConfig, readBitbucketCloudIntegrationConfigs, readBitbucketIntegrationConfig, readBitbucketIntegrationConfigs, readBitbucketServerIntegrationConfig, readBitbucketServerIntegrationConfigs, readGerritIntegrationConfig, readGerritIntegrationConfigs, readGitHubIntegrationConfig, readGitHubIntegrationConfigs, readGitLabIntegrationConfig, readGitLabIntegrationConfigs, readGiteaConfig, readGithubIntegrationConfig, readGithubIntegrationConfigs, readGoogleGcsIntegrationConfig, replaceGitHubUrlType, replaceGitLabUrlType, replaceGithubUrlType };
2201
+ export { AwsS3Integration, AzureIntegration, BitbucketCloudIntegration, BitbucketIntegration, BitbucketServerIntegration, DefaultAzureDevOpsCredentialsProvider, DefaultGithubCredentialsProvider, DefaultGitlabCredentialsProvider, GerritIntegration, GitHubIntegration, GitLabIntegration, GiteaIntegration, GithubAppCredentialsMux, GithubIntegration, ScmIntegrations, SingleInstanceGithubCredentialsProvider, buildGerritGitilesArchiveUrl, defaultScmResolveUrl, getAzureCommitsUrl, getAzureDownloadUrl, getAzureFileFetchUrl, getAzureRequestOptions, getBitbucketCloudDefaultBranch, getBitbucketCloudDownloadUrl, getBitbucketCloudFileFetchUrl, getBitbucketCloudRequestOptions, getBitbucketDefaultBranch, getBitbucketDownloadUrl, getBitbucketFileFetchUrl, getBitbucketRequestOptions, getBitbucketServerDefaultBranch, getBitbucketServerDownloadUrl, getBitbucketServerFileFetchUrl, getBitbucketServerRequestOptions, getGerritBranchApiUrl, getGerritCloneRepoUrl, getGerritFileContentsApiUrl, getGerritProjectsApiUrl, getGerritRequestOptions, getGitHubFileFetchUrl, getGitHubRequestOptions, getGitLabFileFetchUrl, getGitLabIntegrationRelativePath, getGitLabRequestOptions, getGiteaFileContentsUrl, getGiteaRequestOptions, getGithubFileFetchUrl, parseGerritGitilesUrl, parseGerritJsonResponse, readAwsS3IntegrationConfig, readAwsS3IntegrationConfigs, readAzureIntegrationConfig, readAzureIntegrationConfigs, readBitbucketCloudIntegrationConfig, readBitbucketCloudIntegrationConfigs, readBitbucketIntegrationConfig, readBitbucketIntegrationConfigs, readBitbucketServerIntegrationConfig, readBitbucketServerIntegrationConfigs, readGerritIntegrationConfig, readGerritIntegrationConfigs, readGitHubIntegrationConfig, readGitHubIntegrationConfigs, readGitLabIntegrationConfig, readGitLabIntegrationConfigs, readGiteaConfig, readGithubIntegrationConfig, readGithubIntegrationConfigs, readGoogleGcsIntegrationConfig, replaceGitHubUrlType, replaceGitLabUrlType, replaceGithubUrlType };
1954
2202
  //# sourceMappingURL=index.esm.js.map