@backstage/backend-defaults 0.3.0-next.3 → 0.3.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.
Files changed (72) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/auth/package.json +6 -0
  3. package/cache/package.json +1 -1
  4. package/config.d.ts +277 -0
  5. package/database/package.json +1 -1
  6. package/discovery/package.json +1 -1
  7. package/dist/auth.cjs.js +1025 -0
  8. package/dist/auth.cjs.js.map +1 -0
  9. package/dist/auth.d.ts +14 -0
  10. package/dist/cache.cjs.js.map +1 -1
  11. package/dist/cache.d.ts +31 -37
  12. package/dist/cjs/config-BDOwXIyo.cjs.js +64 -0
  13. package/dist/cjs/config-BDOwXIyo.cjs.js.map +1 -0
  14. package/dist/cjs/createConfigSecretEnumerator-DShyoWWL.cjs.js +33 -0
  15. package/dist/cjs/createConfigSecretEnumerator-DShyoWWL.cjs.js.map +1 -0
  16. package/dist/cjs/helpers-D2f1CG0o.cjs.js +53 -0
  17. package/dist/cjs/helpers-D2f1CG0o.cjs.js.map +1 -0
  18. package/dist/database.cjs.js +25 -26
  19. package/dist/database.cjs.js.map +1 -1
  20. package/dist/database.d.ts +7 -2
  21. package/dist/discovery.cjs.js +6 -6
  22. package/dist/discovery.cjs.js.map +1 -1
  23. package/dist/discovery.d.ts +9 -1
  24. package/dist/httpAuth.cjs.js +192 -0
  25. package/dist/httpAuth.cjs.js.map +1 -0
  26. package/dist/httpAuth.d.ts +15 -0
  27. package/dist/httpRouter.cjs.js +191 -0
  28. package/dist/httpRouter.cjs.js.map +1 -0
  29. package/dist/httpRouter.d.ts +55 -0
  30. package/dist/index.cjs.js +14 -8
  31. package/dist/index.cjs.js.map +1 -1
  32. package/dist/lifecycle.cjs.js.map +1 -1
  33. package/dist/lifecycle.d.ts +5 -1
  34. package/dist/logger.cjs.js +17 -0
  35. package/dist/logger.cjs.js.map +1 -0
  36. package/dist/logger.d.ts +14 -0
  37. package/dist/permissions.cjs.js.map +1 -1
  38. package/dist/permissions.d.ts +6 -0
  39. package/dist/rootConfig.cjs.js +3 -0
  40. package/dist/rootConfig.cjs.js.map +1 -1
  41. package/dist/rootConfig.d.ts +17 -2
  42. package/dist/rootHttpRouter.cjs.js +629 -0
  43. package/dist/rootHttpRouter.cjs.js.map +1 -0
  44. package/dist/rootHttpRouter.d.ts +283 -0
  45. package/dist/rootLifecycle.cjs.js.map +1 -1
  46. package/dist/rootLifecycle.d.ts +5 -1
  47. package/dist/rootLogger.cjs.js +143 -0
  48. package/dist/rootLogger.cjs.js.map +1 -0
  49. package/dist/rootLogger.d.ts +58 -0
  50. package/dist/scheduler.cjs.js +2 -3
  51. package/dist/scheduler.cjs.js.map +1 -1
  52. package/dist/scheduler.d.ts +5 -1
  53. package/dist/urlReader.cjs.js +68 -126
  54. package/dist/urlReader.cjs.js.map +1 -1
  55. package/dist/urlReader.d.ts +49 -43
  56. package/dist/userInfo.cjs.js +70 -0
  57. package/dist/userInfo.cjs.js.map +1 -0
  58. package/dist/userInfo.d.ts +14 -0
  59. package/httpAuth/package.json +6 -0
  60. package/httpRouter/package.json +6 -0
  61. package/lifecycle/package.json +1 -1
  62. package/logger/package.json +6 -0
  63. package/migrations/auth/20240327104803_public_keys.js +50 -0
  64. package/package.json +82 -12
  65. package/permissions/package.json +1 -1
  66. package/rootConfig/package.json +1 -1
  67. package/rootHttpRouter/package.json +6 -0
  68. package/rootLifecycle/package.json +1 -1
  69. package/rootLogger/package.json +6 -0
  70. package/scheduler/package.json +1 -1
  71. package/urlReader/package.json +1 -1
  72. package/userInfo/package.json +6 -0
@@ -9,19 +9,17 @@ var getRawBody = require('raw-body');
9
9
  var parseGitUrl = require('git-url-parse');
10
10
  var lodash = require('lodash');
11
11
  var base64Stream = require('base64-stream');
12
- var concatStream = require('concat-stream');
13
- var fs = require('fs-extra');
14
- var os = require('os');
15
- var platformPath = require('path');
16
- var tar = require('tar');
17
- var util = require('util');
18
- var isomorphicGit = require('isomorphic-git');
19
- var http = require('isomorphic-git/http/node');
20
12
  var integrationAwsNode = require('@backstage/integration-aws-node');
21
13
  var credentialProviders = require('@aws-sdk/credential-providers');
22
14
  var clientS3 = require('@aws-sdk/client-s3');
23
15
  var abortController = require('@aws-sdk/abort-controller');
24
16
  var posix = require('path/posix');
17
+ var platformPath = require('path');
18
+ var os = require('os');
19
+ var concatStream = require('concat-stream');
20
+ var fs = require('fs-extra');
21
+ var tar = require('tar');
22
+ var util = require('util');
25
23
  var archiver = require('archiver');
26
24
  var yauzl = require('yauzl');
27
25
  var backendPluginApi = require('@backstage/backend-plugin-api');
@@ -51,13 +49,11 @@ function _interopNamespaceCompat(e) {
51
49
  var fetch__default = /*#__PURE__*/_interopDefaultCompat(fetch);
52
50
  var getRawBody__default = /*#__PURE__*/_interopDefaultCompat(getRawBody);
53
51
  var parseGitUrl__default = /*#__PURE__*/_interopDefaultCompat(parseGitUrl);
52
+ var platformPath__default = /*#__PURE__*/_interopDefaultCompat(platformPath);
53
+ var os__default = /*#__PURE__*/_interopDefaultCompat(os);
54
54
  var concatStream__default = /*#__PURE__*/_interopDefaultCompat(concatStream);
55
55
  var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
56
- var os__default = /*#__PURE__*/_interopDefaultCompat(os);
57
- var platformPath__default = /*#__PURE__*/_interopDefaultCompat(platformPath);
58
56
  var tar__default = /*#__PURE__*/_interopDefaultCompat(tar);
59
- var isomorphicGit__default = /*#__PURE__*/_interopDefaultCompat(isomorphicGit);
60
- var http__default = /*#__PURE__*/_interopDefaultCompat(http);
61
57
  var archiver__default = /*#__PURE__*/_interopDefaultCompat(archiver);
62
58
  var yauzl__default = /*#__PURE__*/_interopDefaultCompat(yauzl);
63
59
  var GoogleCloud__namespace = /*#__PURE__*/_interopNamespaceCompat(GoogleCloud);
@@ -711,91 +707,18 @@ class BitbucketServerUrlReader {
711
707
  }
712
708
  }
713
709
 
714
- function isAuthCallbackOptions(options) {
715
- return "onAuth" in options;
716
- }
717
- class Git {
718
- constructor(config) {
719
- this.config = config;
720
- this.onAuth = config.onAuth;
721
- this.headers = {
722
- "user-agent": "git/@isomorphic-git",
723
- ...config.token ? { Authorization: `Bearer ${config.token}` } : {}
724
- };
725
- }
726
- headers;
727
- /** https://isomorphic-git.org/docs/en/clone */
728
- async clone(options) {
729
- const { url, dir, ref, depth, noCheckout } = options;
730
- this.config.logger?.info(`Cloning repo {dir=${dir},url=${url}}`);
731
- try {
732
- return await isomorphicGit__default.default.clone({
733
- fs: fs__default.default,
734
- http: http__default.default,
735
- url,
736
- dir,
737
- ref,
738
- singleBranch: true,
739
- depth: depth ?? 1,
740
- noCheckout,
741
- onProgress: this.onProgressHandler(),
742
- headers: this.headers,
743
- onAuth: this.onAuth
744
- });
745
- } catch (ex) {
746
- this.config.logger?.error(`Failed to clone repo {dir=${dir},url=${url}}`);
747
- if (ex.data) {
748
- throw new Error(`${ex.message} {data=${JSON.stringify(ex.data)}}`);
749
- }
750
- throw ex;
751
- }
752
- }
753
- onAuth;
754
- onProgressHandler = () => {
755
- let currentPhase = "";
756
- return (event) => {
757
- if (currentPhase !== event.phase) {
758
- currentPhase = event.phase;
759
- this.config.logger?.info(event.phase);
760
- }
761
- const total = event.total ? `${Math.round(event.loaded / event.total * 100)}%` : event.loaded;
762
- this.config.logger?.debug(`status={${event.phase},total={${total}}}`);
763
- };
764
- };
765
- static fromAuth = (options) => {
766
- if (isAuthCallbackOptions(options)) {
767
- const { onAuth, logger: logger2 } = options;
768
- return new Git({ onAuth, logger: logger2 });
769
- }
770
- const { username, password, token, logger } = options;
771
- return new Git({ onAuth: () => ({ username, password }), token, logger });
772
- };
773
- }
774
-
775
- const pipeline$3 = util.promisify(stream.pipeline);
776
- const GITILES_BASE_URL_DEPRECATION_MESSSAGE = `A gitilesBaseUrl must be provided for the gerrit integration to work. You can disable this check by setting DISABLE_GERRIT_GITILES_REQUIREMENT=1 but this will be removed in a future release. If you are not able to use the gitiles gerrit plugin, please open an issue towards https://github.com/backstage/backstage`;
777
- const createTemporaryDirectory = async (workDir) => await fs__default.default.mkdtemp(platformPath.join(workDir, "/gerrit-clone-"));
778
710
  class GerritUrlReader {
779
- constructor(integration, deps, workDir) {
711
+ constructor(integration, deps) {
780
712
  this.integration = integration;
781
713
  this.deps = deps;
782
- this.workDir = workDir;
783
714
  }
784
715
  static factory = ({ config, treeResponseFactory }) => {
785
716
  const integrations = integration.ScmIntegrations.fromConfig(config);
786
717
  if (!integrations.gerrit) {
787
718
  return [];
788
719
  }
789
- const workDir = config.getOptionalString("backend.workingDirectory") ?? os__default.default.tmpdir();
790
720
  return integrations.gerrit.list().map((integration) => {
791
- if (integration.config.gitilesBaseUrl === integration.config.baseUrl && process.env.DISABLE_GERRIT_GITILES_REQUIREMENT === void 0) {
792
- throw new Error(GITILES_BASE_URL_DEPRECATION_MESSSAGE);
793
- }
794
- const reader = new GerritUrlReader(
795
- integration,
796
- { treeResponseFactory },
797
- workDir
798
- );
721
+ const reader = new GerritUrlReader(integration, { treeResponseFactory });
799
722
  const predicate = (url) => {
800
723
  const gitilesUrl = new URL(integration.config.gitilesBaseUrl);
801
724
  return url.host === gitilesUrl.host;
@@ -870,10 +793,7 @@ class GerritUrlReader {
870
793
  if (options?.etag === branchInfo.revision) {
871
794
  throw new errors.NotModifiedError();
872
795
  }
873
- if (this.integration.config.gitilesBaseUrl !== this.integration.config.baseUrl) {
874
- return this.readTreeFromGitiles(url, branchInfo.revision, options);
875
- }
876
- return this.readTreeFromGitClone(url, branchInfo.revision, options);
796
+ return this.readTreeFromGitiles(url, branchInfo.revision, options);
877
797
  }
878
798
  async search() {
879
799
  throw new Error("GerritReader does not implement search");
@@ -882,40 +802,6 @@ class GerritUrlReader {
882
802
  const { host, password } = this.integration.config;
883
803
  return `gerrit{host=${host},authed=${Boolean(password)}}`;
884
804
  }
885
- async readTreeFromGitClone(url, revision, options) {
886
- const { filePath } = integration.parseGerritGitilesUrl(this.integration.config, url);
887
- const git = Git.fromAuth({
888
- username: this.integration.config.username,
889
- password: this.integration.config.password
890
- });
891
- const tempDir = await createTemporaryDirectory(this.workDir);
892
- const cloneUrl = integration.getGerritCloneRepoUrl(this.integration.config, url);
893
- try {
894
- await git.clone({
895
- url: cloneUrl,
896
- dir: platformPath.join(tempDir, "repo"),
897
- ref: revision,
898
- depth: 1
899
- });
900
- const data = await new Promise(async (resolve) => {
901
- await pipeline$3(
902
- tar__default.default.create({ cwd: tempDir }, [""]),
903
- concatStream__default.default(resolve)
904
- );
905
- });
906
- const tarArchive = stream.Readable.from(data);
907
- return await this.deps.treeResponseFactory.fromTarArchive({
908
- stream: tarArchive,
909
- subpath: filePath === "/" ? void 0 : filePath,
910
- etag: revision,
911
- filter: options?.filter
912
- });
913
- } catch (error) {
914
- throw new Error(`Could not clone ${cloneUrl}: ${error}`);
915
- } finally {
916
- await fs__default.default.rm(tempDir, { recursive: true, force: true });
917
- }
918
- }
919
805
  async readTreeFromGitiles(url, revision, options) {
920
806
  const { branch, filePath, project } = integration.parseGerritGitilesUrl(
921
807
  this.integration.config,
@@ -2416,7 +2302,7 @@ class DefaultReadTreeResponseFactory {
2416
2302
  }
2417
2303
 
2418
2304
  var name = "@backstage/backend-defaults";
2419
- var version = "0.3.0-next.3";
2305
+ var version = "0.3.0";
2420
2306
  var description = "Backend defaults used by Backstage backend apps";
2421
2307
  var backstage = {
2422
2308
  role: "node-library"
@@ -2436,21 +2322,31 @@ var repository = {
2436
2322
  var license = "Apache-2.0";
2437
2323
  var exports$1 = {
2438
2324
  ".": "./src/index.ts",
2325
+ "./auth": "./src/entrypoints/auth/index.ts",
2439
2326
  "./cache": "./src/entrypoints/cache/index.ts",
2440
2327
  "./database": "./src/entrypoints/database/index.ts",
2441
2328
  "./discovery": "./src/entrypoints/discovery/index.ts",
2329
+ "./httpAuth": "./src/entrypoints/httpAuth/index.ts",
2330
+ "./httpRouter": "./src/entrypoints/httpRouter/index.ts",
2442
2331
  "./lifecycle": "./src/entrypoints/lifecycle/index.ts",
2332
+ "./logger": "./src/entrypoints/logger/index.ts",
2443
2333
  "./permissions": "./src/entrypoints/permissions/index.ts",
2444
2334
  "./rootConfig": "./src/entrypoints/rootConfig/index.ts",
2335
+ "./rootHttpRouter": "./src/entrypoints/rootHttpRouter/index.ts",
2445
2336
  "./rootLifecycle": "./src/entrypoints/rootLifecycle/index.ts",
2337
+ "./rootLogger": "./src/entrypoints/rootLogger/index.ts",
2446
2338
  "./scheduler": "./src/entrypoints/scheduler/index.ts",
2447
2339
  "./urlReader": "./src/entrypoints/urlReader/index.ts",
2340
+ "./userInfo": "./src/entrypoints/userInfo/index.ts",
2448
2341
  "./package.json": "./package.json"
2449
2342
  };
2450
2343
  var main = "src/index.ts";
2451
2344
  var types = "src/index.ts";
2452
2345
  var typesVersions = {
2453
2346
  "*": {
2347
+ auth: [
2348
+ "src/entrypoints/auth/index.ts"
2349
+ ],
2454
2350
  cache: [
2455
2351
  "src/entrypoints/cache/index.ts"
2456
2352
  ],
@@ -2460,24 +2356,42 @@ var typesVersions = {
2460
2356
  discovery: [
2461
2357
  "src/entrypoints/discovery/index.ts"
2462
2358
  ],
2359
+ httpAuth: [
2360
+ "src/entrypoints/httpAuth/index.ts"
2361
+ ],
2362
+ httpRouter: [
2363
+ "src/entrypoints/httpRouter/index.ts"
2364
+ ],
2463
2365
  lifecycle: [
2464
2366
  "src/entrypoints/lifecycle/index.ts"
2465
2367
  ],
2368
+ logger: [
2369
+ "src/entrypoints/logger/index.ts"
2370
+ ],
2466
2371
  permissions: [
2467
2372
  "src/entrypoints/permissions/index.ts"
2468
2373
  ],
2469
2374
  rootConfig: [
2470
2375
  "src/entrypoints/rootConfig/index.ts"
2471
2376
  ],
2377
+ rootHttpRouter: [
2378
+ "src/entrypoints/rootHttpRouter/index.ts"
2379
+ ],
2472
2380
  rootLifecycle: [
2473
2381
  "src/entrypoints/rootLifecycle/index.ts"
2474
2382
  ],
2383
+ rootLogger: [
2384
+ "src/entrypoints/rootLogger/index.ts"
2385
+ ],
2475
2386
  scheduler: [
2476
2387
  "src/entrypoints/scheduler/index.ts"
2477
2388
  ],
2478
2389
  urlReader: [
2479
2390
  "src/entrypoints/urlReader/index.ts"
2480
2391
  ],
2392
+ userInfo: [
2393
+ "src/entrypoints/userInfo/index.ts"
2394
+ ],
2481
2395
  "package.json": [
2482
2396
  "package.json"
2483
2397
  ]
@@ -2507,40 +2421,62 @@ var dependencies = {
2507
2421
  "@backstage/backend-common": "workspace:^",
2508
2422
  "@backstage/backend-dev-utils": "workspace:^",
2509
2423
  "@backstage/backend-plugin-api": "workspace:^",
2424
+ "@backstage/cli-common": "workspace:^",
2510
2425
  "@backstage/config": "workspace:^",
2511
2426
  "@backstage/config-loader": "workspace:^",
2512
2427
  "@backstage/errors": "workspace:^",
2513
2428
  "@backstage/integration": "workspace:^",
2514
2429
  "@backstage/integration-aws-node": "workspace:^",
2430
+ "@backstage/plugin-auth-node": "workspace:^",
2515
2431
  "@backstage/plugin-events-node": "workspace:^",
2516
2432
  "@backstage/plugin-permission-node": "workspace:^",
2517
2433
  "@backstage/types": "workspace:^",
2518
2434
  "@google-cloud/storage": "^7.0.0",
2519
2435
  "@keyv/memcache": "^1.3.5",
2520
2436
  "@keyv/redis": "^2.5.3",
2437
+ "@manypkg/get-packages": "^1.1.3",
2521
2438
  "@octokit/rest": "^19.0.3",
2522
2439
  "@opentelemetry/api": "^1.3.0",
2440
+ "@types/cors": "^2.8.6",
2441
+ "@types/express": "^4.17.6",
2523
2442
  archiver: "^6.0.0",
2524
2443
  "base64-stream": "^1.0.0",
2525
2444
  "better-sqlite3": "^9.0.0",
2445
+ compression: "^1.7.4",
2526
2446
  "concat-stream": "^2.0.0",
2447
+ cookie: "^0.6.0",
2448
+ cors: "^2.8.5",
2527
2449
  cron: "^3.0.0",
2450
+ express: "^4.17.1",
2451
+ "express-promise-router": "^4.1.0",
2528
2452
  "fs-extra": "^11.2.0",
2529
2453
  "git-url-parse": "^14.0.0",
2454
+ helmet: "^6.0.0",
2530
2455
  "isomorphic-git": "^1.23.0",
2456
+ jose: "^5.0.0",
2531
2457
  keyv: "^4.5.2",
2532
2458
  knex: "^3.0.0",
2533
2459
  lodash: "^4.17.21",
2460
+ logform: "^2.3.2",
2534
2461
  luxon: "^3.0.0",
2535
2462
  minimatch: "^9.0.0",
2463
+ minimist: "^1.2.5",
2464
+ morgan: "^1.10.0",
2536
2465
  mysql2: "^3.0.0",
2537
2466
  "node-fetch": "^2.6.7",
2467
+ "node-forge": "^1.3.1",
2538
2468
  "p-limit": "^3.1.0",
2469
+ "path-to-regexp": "^6.2.1",
2539
2470
  pg: "^8.11.3",
2540
2471
  "pg-connection-string": "^2.3.0",
2541
2472
  "raw-body": "^2.4.1",
2473
+ selfsigned: "^2.0.0",
2474
+ stoppable: "^1.1.0",
2542
2475
  tar: "^6.1.12",
2476
+ "triple-beam": "^1.4.1",
2543
2477
  uuid: "^9.0.0",
2478
+ winston: "^3.2.1",
2479
+ "winston-transport": "^4.5.0",
2544
2480
  yauzl: "^3.0.0",
2545
2481
  yn: "^4.0.0",
2546
2482
  zod: "^3.22.4"
@@ -2550,8 +2486,14 @@ var devDependencies = {
2550
2486
  "@backstage/backend-plugin-api": "workspace:^",
2551
2487
  "@backstage/backend-test-utils": "workspace:^",
2552
2488
  "@backstage/cli": "workspace:^",
2489
+ "@types/http-errors": "^2.0.0",
2490
+ "@types/morgan": "^1.9.0",
2491
+ "@types/node-forge": "^1.3.0",
2492
+ "@types/stoppable": "^1.1.0",
2553
2493
  "aws-sdk-client-mock": "^4.0.0",
2494
+ "http-errors": "^2.0.0",
2554
2495
  msw: "^1.0.0",
2496
+ supertest: "^6.1.3",
2555
2497
  "wait-for-expect": "^3.0.2"
2556
2498
  };
2557
2499
  var configSchema = "config.d.ts";