@backstage/backend-defaults 0.5.3 → 0.6.0-next.1

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 (77) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/config.d.ts +34 -6
  3. package/dist/auth.cjs.js +1 -0
  4. package/dist/auth.cjs.js.map +1 -1
  5. package/dist/auth.d.ts +27 -1
  6. package/dist/cache.d.ts +0 -1
  7. package/dist/database.d.ts +1 -1
  8. package/dist/entrypoints/auth/DefaultAuthService.cjs.js +4 -1
  9. package/dist/entrypoints/auth/DefaultAuthService.cjs.js.map +1 -1
  10. package/dist/entrypoints/auth/authServiceFactory.cjs.js +30 -9
  11. package/dist/entrypoints/auth/authServiceFactory.cjs.js.map +1 -1
  12. package/dist/entrypoints/auth/plugin/PluginTokenHandler.cjs.js +6 -10
  13. package/dist/entrypoints/auth/plugin/PluginTokenHandler.cjs.js.map +1 -1
  14. package/dist/entrypoints/cache/CacheManager.cjs.js +20 -19
  15. package/dist/entrypoints/cache/CacheManager.cjs.js.map +1 -1
  16. package/dist/entrypoints/database/connectors/postgres.cjs.js +40 -6
  17. package/dist/entrypoints/database/connectors/postgres.cjs.js.map +1 -1
  18. package/dist/entrypoints/httpAuth/httpAuthServiceFactory.cjs.js +22 -9
  19. package/dist/entrypoints/httpAuth/httpAuthServiceFactory.cjs.js.map +1 -1
  20. package/dist/entrypoints/httpRouter/http/createAuthIntegrationRouter.cjs.js.map +1 -0
  21. package/dist/entrypoints/httpRouter/http/createCookieAuthRefreshMiddleware.cjs.js.map +1 -0
  22. package/dist/entrypoints/httpRouter/http/createCredentialsBarrier.cjs.js.map +1 -0
  23. package/dist/entrypoints/httpRouter/http/createLifecycleMiddleware.cjs.js.map +1 -0
  24. package/dist/entrypoints/httpRouter/httpRouterServiceFactory.cjs.js +4 -4
  25. package/dist/entrypoints/httpRouter/httpRouterServiceFactory.cjs.js.map +1 -1
  26. package/dist/entrypoints/rootHttpRouter/http/MiddlewareFactory.cjs.js +36 -13
  27. package/dist/entrypoints/rootHttpRouter/http/MiddlewareFactory.cjs.js.map +1 -1
  28. package/dist/entrypoints/rootLogger/WinstonLogger.cjs.js +9 -3
  29. package/dist/entrypoints/rootLogger/WinstonLogger.cjs.js.map +1 -1
  30. package/dist/entrypoints/scheduler/lib/PluginTaskSchedulerImpl.cjs.js +15 -0
  31. package/dist/entrypoints/scheduler/lib/PluginTaskSchedulerImpl.cjs.js.map +1 -1
  32. package/dist/entrypoints/urlReader/lib/AzureBlobStorageUrlReader.cjs.js +156 -0
  33. package/dist/entrypoints/urlReader/lib/AzureBlobStorageUrlReader.cjs.js.map +1 -0
  34. package/dist/entrypoints/urlReader/lib/AzureUrlReader.cjs.js +5 -11
  35. package/dist/entrypoints/urlReader/lib/AzureUrlReader.cjs.js.map +1 -1
  36. package/dist/entrypoints/urlReader/lib/BitbucketCloudUrlReader.cjs.js +5 -14
  37. package/dist/entrypoints/urlReader/lib/BitbucketCloudUrlReader.cjs.js.map +1 -1
  38. package/dist/entrypoints/urlReader/lib/BitbucketServerUrlReader.cjs.js +5 -14
  39. package/dist/entrypoints/urlReader/lib/BitbucketServerUrlReader.cjs.js.map +1 -1
  40. package/dist/entrypoints/urlReader/lib/BitbucketUrlReader.cjs.js +5 -14
  41. package/dist/entrypoints/urlReader/lib/BitbucketUrlReader.cjs.js.map +1 -1
  42. package/dist/entrypoints/urlReader/lib/FetchUrlReader.cjs.js +2 -10
  43. package/dist/entrypoints/urlReader/lib/FetchUrlReader.cjs.js.map +1 -1
  44. package/dist/entrypoints/urlReader/lib/GiteaUrlReader.cjs.js +4 -9
  45. package/dist/entrypoints/urlReader/lib/GiteaUrlReader.cjs.js.map +1 -1
  46. package/dist/entrypoints/urlReader/lib/GitlabUrlReader.cjs.js +7 -16
  47. package/dist/entrypoints/urlReader/lib/GitlabUrlReader.cjs.js.map +1 -1
  48. package/dist/entrypoints/urlReader/lib/ReadUrlResponseFactory.cjs.js +16 -2
  49. package/dist/entrypoints/urlReader/lib/ReadUrlResponseFactory.cjs.js.map +1 -1
  50. package/dist/entrypoints/urlReader/lib/UrlReaders.cjs.js +2 -0
  51. package/dist/entrypoints/urlReader/lib/UrlReaders.cjs.js.map +1 -1
  52. package/dist/entrypoints/urlReader/lib/tree/ReadTreeResponseFactory.cjs.js +23 -4
  53. package/dist/entrypoints/urlReader/lib/tree/ReadTreeResponseFactory.cjs.js.map +1 -1
  54. package/dist/entrypoints/urlReader/lib/util.cjs.js +29 -1
  55. package/dist/entrypoints/urlReader/lib/util.cjs.js.map +1 -1
  56. package/dist/entrypoints/userInfo/DefaultUserInfoService.cjs.js +1 -6
  57. package/dist/entrypoints/userInfo/DefaultUserInfoService.cjs.js.map +1 -1
  58. package/dist/httpAuth.cjs.js +1 -0
  59. package/dist/httpAuth.cjs.js.map +1 -1
  60. package/dist/httpAuth.d.ts +36 -2
  61. package/dist/httpRouter.cjs.js +8 -0
  62. package/dist/httpRouter.cjs.js.map +1 -1
  63. package/dist/httpRouter.d.ts +62 -1
  64. package/dist/package.json.cjs.js +20 -6
  65. package/dist/package.json.cjs.js.map +1 -1
  66. package/dist/urlReader.cjs.js +2 -0
  67. package/dist/urlReader.cjs.js.map +1 -1
  68. package/dist/urlReader.d.ts +41 -5
  69. package/package.json +33 -23
  70. package/dist/entrypoints/httpRouter/createAuthIntegrationRouter.cjs.js.map +0 -1
  71. package/dist/entrypoints/httpRouter/createCookieAuthRefreshMiddleware.cjs.js.map +0 -1
  72. package/dist/entrypoints/httpRouter/createCredentialsBarrier.cjs.js.map +0 -1
  73. package/dist/entrypoints/httpRouter/createLifecycleMiddleware.cjs.js.map +0 -1
  74. /package/dist/entrypoints/httpRouter/{createAuthIntegrationRouter.cjs.js → http/createAuthIntegrationRouter.cjs.js} +0 -0
  75. /package/dist/entrypoints/httpRouter/{createCookieAuthRefreshMiddleware.cjs.js → http/createCookieAuthRefreshMiddleware.cjs.js} +0 -0
  76. /package/dist/entrypoints/httpRouter/{createCredentialsBarrier.cjs.js → http/createCredentialsBarrier.cjs.js} +0 -0
  77. /package/dist/entrypoints/httpRouter/{createLifecycleMiddleware.cjs.js → http/createLifecycleMiddleware.cjs.js} +0 -0
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var name = "@backstage/backend-defaults";
6
- var version = "0.5.3";
6
+ var version = "0.6.0-next.1";
7
7
  var description = "Backend defaults used by Backstage backend apps";
8
8
  var backstage = {
9
9
  role: "node-library"
@@ -122,6 +122,8 @@ var dependencies = {
122
122
  "@aws-sdk/client-s3": "^3.350.0",
123
123
  "@aws-sdk/credential-providers": "^3.350.0",
124
124
  "@aws-sdk/types": "^3.347.0",
125
+ "@azure/identity": "^4.0.0",
126
+ "@azure/storage-blob": "^12.5.0",
125
127
  "@backstage/backend-app-api": "workspace:^",
126
128
  "@backstage/backend-dev-utils": "workspace:^",
127
129
  "@backstage/backend-plugin-api": "workspace:^",
@@ -137,8 +139,8 @@ var dependencies = {
137
139
  "@backstage/plugin-permission-node": "workspace:^",
138
140
  "@backstage/types": "workspace:^",
139
141
  "@google-cloud/storage": "^7.0.0",
140
- "@keyv/memcache": "^1.3.5",
141
- "@keyv/redis": "^2.5.3",
142
+ "@keyv/memcache": "^2.0.1",
143
+ "@keyv/redis": "^4.0.1",
142
144
  "@manypkg/get-packages": "^1.1.3",
143
145
  "@octokit/rest": "^19.0.3",
144
146
  "@opentelemetry/api": "^1.3.0",
@@ -159,14 +161,13 @@ var dependencies = {
159
161
  helmet: "^6.0.0",
160
162
  "isomorphic-git": "^1.23.0",
161
163
  jose: "^5.0.0",
162
- keyv: "^4.5.2",
164
+ keyv: "^5.2.1",
163
165
  knex: "^3.0.0",
164
166
  lodash: "^4.17.21",
165
167
  logform: "^2.3.2",
166
168
  luxon: "^3.0.0",
167
169
  minimatch: "^9.0.0",
168
170
  minimist: "^1.2.5",
169
- morgan: "^1.10.0",
170
171
  mysql2: "^3.0.0",
171
172
  "node-fetch": "^2.7.0",
172
173
  "node-forge": "^1.3.1",
@@ -187,16 +188,24 @@ var dependencies = {
187
188
  yn: "^4.0.0",
188
189
  zod: "^3.22.4"
189
190
  };
191
+ var peerDependencies = {
192
+ "@google-cloud/cloud-sql-connector": "^1.4.0"
193
+ };
194
+ var peerDependenciesMeta = {
195
+ "@google-cloud/cloud-sql-connector": {
196
+ optional: true
197
+ }
198
+ };
190
199
  var devDependencies = {
191
200
  "@aws-sdk/util-stream-node": "^3.350.0",
192
201
  "@backstage/backend-plugin-api": "workspace:^",
193
202
  "@backstage/backend-test-utils": "workspace:^",
194
203
  "@backstage/cli": "workspace:^",
204
+ "@google-cloud/cloud-sql-connector": "^1.4.0",
195
205
  "@types/archiver": "^6.0.0",
196
206
  "@types/base64-stream": "^1.0.2",
197
207
  "@types/concat-stream": "^2.0.0",
198
208
  "@types/http-errors": "^2.0.0",
199
- "@types/morgan": "^1.9.0",
200
209
  "@types/node-forge": "^1.3.0",
201
210
  "@types/pg-format": "^1.0.5",
202
211
  "@types/stoppable": "^1.1.0",
@@ -204,6 +213,7 @@ var devDependencies = {
204
213
  "aws-sdk-client-mock": "^4.0.0",
205
214
  "http-errors": "^2.0.0",
206
215
  msw: "^1.0.0",
216
+ "node-mocks-http": "^1.0.0",
207
217
  supertest: "^7.0.0",
208
218
  "wait-for-expect": "^3.0.2"
209
219
  };
@@ -225,6 +235,8 @@ var packageinfo = {
225
235
  files: files,
226
236
  scripts: scripts,
227
237
  dependencies: dependencies,
238
+ peerDependencies: peerDependencies,
239
+ peerDependenciesMeta: peerDependenciesMeta,
228
240
  devDependencies: devDependencies,
229
241
  configSchema: configSchema
230
242
  };
@@ -242,6 +254,8 @@ exports.keywords = keywords;
242
254
  exports.license = license;
243
255
  exports.main = main;
244
256
  exports.name = name;
257
+ exports.peerDependencies = peerDependencies;
258
+ exports.peerDependenciesMeta = peerDependenciesMeta;
245
259
  exports.publishConfig = publishConfig;
246
260
  exports.repository = repository;
247
261
  exports.scripts = scripts;
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -10,6 +10,7 @@ var GitlabUrlReader = require('./entrypoints/urlReader/lib/GitlabUrlReader.cjs.j
10
10
  var GiteaUrlReader = require('./entrypoints/urlReader/lib/GiteaUrlReader.cjs.js');
11
11
  var HarnessUrlReader = require('./entrypoints/urlReader/lib/HarnessUrlReader.cjs.js');
12
12
  var AwsS3UrlReader = require('./entrypoints/urlReader/lib/AwsS3UrlReader.cjs.js');
13
+ var AzureBlobStorageUrlReader = require('./entrypoints/urlReader/lib/AzureBlobStorageUrlReader.cjs.js');
13
14
  var FetchUrlReader = require('./entrypoints/urlReader/lib/FetchUrlReader.cjs.js');
14
15
  var ReadUrlResponseFactory = require('./entrypoints/urlReader/lib/ReadUrlResponseFactory.cjs.js');
15
16
  var UrlReaders = require('./entrypoints/urlReader/lib/UrlReaders.cjs.js');
@@ -27,6 +28,7 @@ exports.GitlabUrlReader = GitlabUrlReader.GitlabUrlReader;
27
28
  exports.GiteaUrlReader = GiteaUrlReader.GiteaUrlReader;
28
29
  exports.HarnessUrlReader = HarnessUrlReader.HarnessUrlReader;
29
30
  exports.AwsS3UrlReader = AwsS3UrlReader.AwsS3UrlReader;
31
+ exports.AzureBlobStorageUrlReader = AzureBlobStorageUrlReader.AzureBlobStorageUrlReader;
30
32
  exports.FetchUrlReader = FetchUrlReader.FetchUrlReader;
31
33
  exports.ReadUrlResponseFactory = ReadUrlResponseFactory.ReadUrlResponseFactory;
32
34
  exports.UrlReaders = UrlReaders.UrlReaders;
@@ -1 +1 @@
1
- {"version":3,"file":"urlReader.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"urlReader.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
3
- import { RootConfigService, LoggerService, UrlReaderServiceReadTreeResponse, UrlReaderService, UrlReaderServiceReadUrlOptions, UrlReaderServiceReadUrlResponse, UrlReaderServiceReadTreeOptions, UrlReaderServiceSearchOptions, UrlReaderServiceSearchResponse } from '@backstage/backend-plugin-api';
4
- import { AzureIntegration, AzureDevOpsCredentialsProvider, BitbucketCloudIntegration, BitbucketIntegration, BitbucketServerIntegration, GerritIntegration, GithubIntegration, GithubCredentialsProvider, GitLabIntegration, GiteaIntegration, HarnessIntegration, AwsS3Integration } from '@backstage/integration';
3
+ import { UrlReaderService, RootConfigService, LoggerService, UrlReaderServiceReadTreeResponse, UrlReaderServiceReadUrlOptions, UrlReaderServiceReadUrlResponse, UrlReaderServiceReadTreeOptions, UrlReaderServiceSearchOptions, UrlReaderServiceSearchResponse } from '@backstage/backend-plugin-api';
4
+ import { AzureIntegration, AzureDevOpsCredentialsProvider, BitbucketCloudIntegration, BitbucketIntegration, BitbucketServerIntegration, GerritIntegration, GithubIntegration, GithubCredentialsProvider, GitLabIntegration, GiteaIntegration, HarnessIntegration, AwsS3Integration, AzureCredentialsManager, AzureBlobStorageIntergation } from '@backstage/integration';
5
5
  import { Readable } from 'stream';
6
6
  import { AwsCredentialsManager } from '@backstage/integration-aws-node';
7
7
 
@@ -47,6 +47,17 @@ type ReadTreeResponseFactoryOptions = {
47
47
  filter?: (path: string, info?: {
48
48
  size: number;
49
49
  }) => boolean;
50
+ } | {
51
+ /** A response from a fetch request */
52
+ response: Response;
53
+ /** If unset, the files at the root of the tree will be read. Subpath must not contain the name of the top level directory. */
54
+ subpath?: string;
55
+ /** etag of the blob, to optionally override what the response header may or may not say */
56
+ etag?: string;
57
+ /** Filter passed on from the ReadTreeOptions */
58
+ filter?: (path: string, info?: {
59
+ size: number;
60
+ }) => boolean;
50
61
  };
51
62
  /**
52
63
  * Options that control {@link ReadTreeResponseFactory.fromReadableArray}
@@ -334,6 +345,27 @@ declare class AwsS3UrlReader implements UrlReaderService {
334
345
  toString(): string;
335
346
  }
336
347
 
348
+ /**
349
+ * Implements a {@link @backstage/backend-plugin-api#UrlReaderService} for Azure storage accounts urls.
350
+ *
351
+ * @public
352
+ */
353
+ declare class AzureBlobStorageUrlReader implements UrlReaderService {
354
+ private readonly credsManager;
355
+ private readonly integration;
356
+ private readonly deps;
357
+ static factory: ReaderFactory;
358
+ constructor(credsManager: AzureCredentialsManager, integration: AzureBlobStorageIntergation, deps: {
359
+ treeResponseFactory: ReadTreeResponseFactory;
360
+ });
361
+ private createContainerClient;
362
+ read(url: string): Promise<Buffer>;
363
+ readUrl(url: string, options?: UrlReaderServiceReadUrlOptions): Promise<UrlReaderServiceReadUrlResponse>;
364
+ readTree(url: string, options?: UrlReaderServiceReadTreeOptions): Promise<UrlReaderServiceReadTreeResponse>;
365
+ search(): Promise<UrlReaderServiceSearchResponse>;
366
+ toString(): string;
367
+ }
368
+
337
369
  /**
338
370
  * A {@link @backstage/backend-plugin-api#UrlReaderService} that does a plain fetch of the URL.
339
371
  *
@@ -368,13 +400,17 @@ declare class FetchUrlReader implements UrlReaderService {
368
400
  */
369
401
  declare class ReadUrlResponseFactory {
370
402
  /**
371
- * Resolves a ReadUrlResponse from a Readable stream.
403
+ * Resolves a UrlReaderServiceReadUrlResponse from a Readable stream.
372
404
  */
373
405
  static fromReadable(stream: Readable, options?: ReadUrlResponseFactoryFromStreamOptions): Promise<UrlReaderServiceReadUrlResponse>;
374
406
  /**
375
- * Resolves a ReadUrlResponse from an old-style NodeJS.ReadableStream.
407
+ * Resolves a UrlReaderServiceReadUrlResponse from an old-style NodeJS.ReadableStream.
376
408
  */
377
409
  static fromNodeJSReadable(oldStyleStream: NodeJS.ReadableStream, options?: ReadUrlResponseFactoryFromStreamOptions): Promise<UrlReaderServiceReadUrlResponse>;
410
+ /**
411
+ * Resolves a UrlReaderServiceReadUrlResponse from a native fetch response body.
412
+ */
413
+ static fromResponse(response: Response): Promise<UrlReaderServiceReadUrlResponse>;
378
414
  }
379
415
 
380
416
  /**
@@ -437,4 +473,4 @@ declare const urlReaderFactoriesServiceRef: _backstage_backend_plugin_api.Servic
437
473
  */
438
474
  declare const urlReaderServiceFactory: _backstage_backend_plugin_api.ServiceFactory<_backstage_backend_plugin_api.UrlReaderService, "plugin", "singleton">;
439
475
 
440
- export { AwsS3UrlReader, AzureUrlReader, BitbucketCloudUrlReader, BitbucketServerUrlReader, BitbucketUrlReader, FetchUrlReader, type FromReadableArrayOptions, GerritUrlReader, GiteaUrlReader, GithubUrlReader, GitlabUrlReader, HarnessUrlReader, type ReadTreeResponseFactory, type ReadTreeResponseFactoryOptions, ReadUrlResponseFactory, type ReadUrlResponseFactoryFromStreamOptions, type ReaderFactory, type UrlReaderPredicateTuple, UrlReaders, type UrlReadersOptions, urlReaderFactoriesServiceRef, urlReaderServiceFactory };
476
+ export { AwsS3UrlReader, AzureBlobStorageUrlReader, AzureUrlReader, BitbucketCloudUrlReader, BitbucketServerUrlReader, BitbucketUrlReader, FetchUrlReader, type FromReadableArrayOptions, GerritUrlReader, GiteaUrlReader, GithubUrlReader, GitlabUrlReader, HarnessUrlReader, type ReadTreeResponseFactory, type ReadTreeResponseFactoryOptions, ReadUrlResponseFactory, type ReadUrlResponseFactoryFromStreamOptions, type ReaderFactory, type UrlReaderPredicateTuple, UrlReaders, type UrlReadersOptions, urlReaderFactoriesServiceRef, urlReaderServiceFactory };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/backend-defaults",
3
- "version": "0.5.3",
3
+ "version": "0.6.0-next.1",
4
4
  "description": "Backend defaults used by Backstage backend apps",
5
5
  "backstage": {
6
6
  "role": "node-library"
@@ -191,23 +191,25 @@
191
191
  "@aws-sdk/client-s3": "^3.350.0",
192
192
  "@aws-sdk/credential-providers": "^3.350.0",
193
193
  "@aws-sdk/types": "^3.347.0",
194
- "@backstage/backend-app-api": "^1.0.2",
195
- "@backstage/backend-dev-utils": "^0.1.5",
196
- "@backstage/backend-plugin-api": "^1.0.2",
197
- "@backstage/cli-common": "^0.1.15",
198
- "@backstage/cli-node": "^0.2.10",
199
- "@backstage/config": "^1.3.0",
200
- "@backstage/config-loader": "^1.9.2",
201
- "@backstage/errors": "^1.2.5",
202
- "@backstage/integration": "^1.15.2",
203
- "@backstage/integration-aws-node": "^0.1.13",
204
- "@backstage/plugin-auth-node": "^0.5.4",
205
- "@backstage/plugin-events-node": "^0.4.5",
206
- "@backstage/plugin-permission-node": "^0.8.5",
207
- "@backstage/types": "^1.2.0",
194
+ "@azure/identity": "^4.0.0",
195
+ "@azure/storage-blob": "^12.5.0",
196
+ "@backstage/backend-app-api": "1.1.0-next.1",
197
+ "@backstage/backend-dev-utils": "0.1.5",
198
+ "@backstage/backend-plugin-api": "1.1.0-next.1",
199
+ "@backstage/cli-common": "0.1.15",
200
+ "@backstage/cli-node": "0.2.11-next.0",
201
+ "@backstage/config": "1.3.0",
202
+ "@backstage/config-loader": "1.9.3-next.0",
203
+ "@backstage/errors": "1.2.5",
204
+ "@backstage/integration": "1.16.0-next.0",
205
+ "@backstage/integration-aws-node": "0.1.13",
206
+ "@backstage/plugin-auth-node": "0.5.5-next.1",
207
+ "@backstage/plugin-events-node": "0.4.6-next.1",
208
+ "@backstage/plugin-permission-node": "0.8.6-next.1",
209
+ "@backstage/types": "1.2.0",
208
210
  "@google-cloud/storage": "^7.0.0",
209
- "@keyv/memcache": "^1.3.5",
210
- "@keyv/redis": "^2.5.3",
211
+ "@keyv/memcache": "^2.0.1",
212
+ "@keyv/redis": "^4.0.1",
211
213
  "@manypkg/get-packages": "^1.1.3",
212
214
  "@octokit/rest": "^19.0.3",
213
215
  "@opentelemetry/api": "^1.3.0",
@@ -228,14 +230,13 @@
228
230
  "helmet": "^6.0.0",
229
231
  "isomorphic-git": "^1.23.0",
230
232
  "jose": "^5.0.0",
231
- "keyv": "^4.5.2",
233
+ "keyv": "^5.2.1",
232
234
  "knex": "^3.0.0",
233
235
  "lodash": "^4.17.21",
234
236
  "logform": "^2.3.2",
235
237
  "luxon": "^3.0.0",
236
238
  "minimatch": "^9.0.0",
237
239
  "minimist": "^1.2.5",
238
- "morgan": "^1.10.0",
239
240
  "mysql2": "^3.0.0",
240
241
  "node-fetch": "^2.7.0",
241
242
  "node-forge": "^1.3.1",
@@ -256,16 +257,24 @@
256
257
  "yn": "^4.0.0",
257
258
  "zod": "^3.22.4"
258
259
  },
260
+ "peerDependencies": {
261
+ "@google-cloud/cloud-sql-connector": "^1.4.0"
262
+ },
263
+ "peerDependenciesMeta": {
264
+ "@google-cloud/cloud-sql-connector": {
265
+ "optional": true
266
+ }
267
+ },
259
268
  "devDependencies": {
260
269
  "@aws-sdk/util-stream-node": "^3.350.0",
261
- "@backstage/backend-plugin-api": "^1.0.2",
262
- "@backstage/backend-test-utils": "^1.1.0",
263
- "@backstage/cli": "^0.29.0",
270
+ "@backstage/backend-plugin-api": "1.1.0-next.1",
271
+ "@backstage/backend-test-utils": "1.2.0-next.1",
272
+ "@backstage/cli": "0.29.3-next.1",
273
+ "@google-cloud/cloud-sql-connector": "^1.4.0",
264
274
  "@types/archiver": "^6.0.0",
265
275
  "@types/base64-stream": "^1.0.2",
266
276
  "@types/concat-stream": "^2.0.0",
267
277
  "@types/http-errors": "^2.0.0",
268
- "@types/morgan": "^1.9.0",
269
278
  "@types/node-forge": "^1.3.0",
270
279
  "@types/pg-format": "^1.0.5",
271
280
  "@types/stoppable": "^1.1.0",
@@ -273,6 +282,7 @@
273
282
  "aws-sdk-client-mock": "^4.0.0",
274
283
  "http-errors": "^2.0.0",
275
284
  "msw": "^1.0.0",
285
+ "node-mocks-http": "^1.0.0",
276
286
  "supertest": "^7.0.0",
277
287
  "wait-for-expect": "^3.0.2"
278
288
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"createAuthIntegrationRouter.cjs.js","sources":["../../../src/entrypoints/httpRouter/createAuthIntegrationRouter.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 */\n\nimport { AuthService } from '@backstage/backend-plugin-api';\nimport express from 'express';\nimport Router from 'express-promise-router';\n\nexport function createAuthIntegrationRouter(options: {\n auth: AuthService;\n}): express.Router {\n const router = Router();\n\n router.get('/.backstage/auth/v1/jwks.json', async (_req, res) => {\n const { keys } = await options.auth.listPublicServiceKeys();\n\n res.json({ keys });\n });\n\n return router;\n}\n"],"names":["Router"],"mappings":";;;;;;;;AAoBO,SAAS,4BAA4B,OAEzB,EAAA;AACjB,EAAA,MAAM,SAASA,uBAAO,EAAA;AAEtB,EAAA,MAAA,CAAO,GAAI,CAAA,+BAAA,EAAiC,OAAO,IAAA,EAAM,GAAQ,KAAA;AAC/D,IAAA,MAAM,EAAE,IAAK,EAAA,GAAI,MAAM,OAAA,CAAQ,KAAK,qBAAsB,EAAA;AAE1D,IAAI,GAAA,CAAA,IAAA,CAAK,EAAE,IAAA,EAAM,CAAA;AAAA,GAClB,CAAA;AAED,EAAO,OAAA,MAAA;AACT;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"createCookieAuthRefreshMiddleware.cjs.js","sources":["../../../src/entrypoints/httpRouter/createCookieAuthRefreshMiddleware.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 */\n\nimport { AuthService, HttpAuthService } from '@backstage/backend-plugin-api';\nimport Router from 'express-promise-router';\n\nconst WELL_KNOWN_COOKIE_PATH_V1 = '/.backstage/auth/v1/cookie';\n\n/**\n * @public\n * Creates a middleware that can be used to refresh the cookie for the user.\n */\nexport function createCookieAuthRefreshMiddleware(options: {\n auth: AuthService;\n httpAuth: HttpAuthService;\n}) {\n const { auth, httpAuth } = options;\n const router = Router();\n\n // Endpoint that sets the cookie for the user\n router.get(WELL_KNOWN_COOKIE_PATH_V1, async (_, res) => {\n const { expiresAt } = await httpAuth.issueUserCookie(res);\n res.json({ expiresAt: expiresAt.toISOString() });\n });\n\n // Endpoint that removes the cookie for the user\n router.delete(WELL_KNOWN_COOKIE_PATH_V1, async (_, res) => {\n const credentials = await auth.getNoneCredentials();\n await httpAuth.issueUserCookie(res, { credentials });\n res.status(204).end();\n });\n\n return router;\n}\n"],"names":["Router"],"mappings":";;;;;;;;AAmBA,MAAM,yBAA4B,GAAA,4BAAA;AAM3B,SAAS,kCAAkC,OAG/C,EAAA;AACD,EAAM,MAAA,EAAE,IAAM,EAAA,QAAA,EAAa,GAAA,OAAA;AAC3B,EAAA,MAAM,SAASA,uBAAO,EAAA;AAGtB,EAAA,MAAA,CAAO,GAAI,CAAA,yBAAA,EAA2B,OAAO,CAAA,EAAG,GAAQ,KAAA;AACtD,IAAA,MAAM,EAAE,SAAU,EAAA,GAAI,MAAM,QAAA,CAAS,gBAAgB,GAAG,CAAA;AACxD,IAAA,GAAA,CAAI,KAAK,EAAE,SAAA,EAAW,SAAU,CAAA,WAAA,IAAe,CAAA;AAAA,GAChD,CAAA;AAGD,EAAA,MAAA,CAAO,MAAO,CAAA,yBAAA,EAA2B,OAAO,CAAA,EAAG,GAAQ,KAAA;AACzD,IAAM,MAAA,WAAA,GAAc,MAAM,IAAA,CAAK,kBAAmB,EAAA;AAClD,IAAA,MAAM,QAAS,CAAA,eAAA,CAAgB,GAAK,EAAA,EAAE,aAAa,CAAA;AACnD,IAAI,GAAA,CAAA,MAAA,CAAO,GAAG,CAAA,CAAE,GAAI,EAAA;AAAA,GACrB,CAAA;AAED,EAAO,OAAA,MAAA;AACT;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"createCredentialsBarrier.cjs.js","sources":["../../../src/entrypoints/httpRouter/createCredentialsBarrier.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 */\n\nimport {\n HttpAuthService,\n HttpRouterServiceAuthPolicy,\n RootConfigService,\n} from '@backstage/backend-plugin-api';\nimport { RequestHandler } from 'express';\nimport { pathToRegexp } from 'path-to-regexp';\n\nexport function createPathPolicyPredicate(policyPath: string) {\n if (policyPath === '/' || policyPath === '*') {\n return () => true;\n }\n\n const { regexp: pathRegex } = pathToRegexp(policyPath, {\n end: false,\n });\n\n return (path: string): boolean => {\n return pathRegex.test(path);\n };\n}\n\nexport function createCredentialsBarrier(options: {\n httpAuth: HttpAuthService;\n config: RootConfigService;\n}): {\n middleware: RequestHandler;\n addAuthPolicy: (policy: HttpRouterServiceAuthPolicy) => void;\n} {\n const { httpAuth, config } = options;\n\n const disableDefaultAuthPolicy = config.getOptionalBoolean(\n 'backend.auth.dangerouslyDisableDefaultAuthPolicy',\n );\n\n if (disableDefaultAuthPolicy) {\n return {\n middleware: (_req, _res, next) => next(),\n addAuthPolicy: () => {},\n };\n }\n\n const unauthenticatedPredicates = new Array<(path: string) => boolean>();\n const cookiePredicates = new Array<(path: string) => boolean>();\n\n const middleware: RequestHandler = (req, _, next) => {\n const allowsUnauthenticated = unauthenticatedPredicates.some(predicate =>\n predicate(req.path),\n );\n\n if (allowsUnauthenticated) {\n next();\n return;\n }\n\n const allowsCookie = cookiePredicates.some(predicate =>\n predicate(req.path),\n );\n\n httpAuth\n .credentials(req, {\n allow: ['user', 'service'],\n allowLimitedAccess: allowsCookie,\n })\n .then(\n () => next(),\n err => next(err),\n );\n };\n\n const addAuthPolicy = (policy: HttpRouterServiceAuthPolicy) => {\n if (policy.allow === 'unauthenticated') {\n unauthenticatedPredicates.push(createPathPolicyPredicate(policy.path));\n } else if (policy.allow === 'user-cookie') {\n cookiePredicates.push(createPathPolicyPredicate(policy.path));\n } else {\n throw new Error('Invalid auth policy');\n }\n };\n\n return { middleware, addAuthPolicy };\n}\n"],"names":["pathToRegexp"],"mappings":";;;;AAwBO,SAAS,0BAA0B,UAAoB,EAAA;AAC5D,EAAI,IAAA,UAAA,KAAe,GAAO,IAAA,UAAA,KAAe,GAAK,EAAA;AAC5C,IAAA,OAAO,MAAM,IAAA;AAAA;AAGf,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAU,EAAA,GAAIA,0BAAa,UAAY,EAAA;AAAA,IACrD,GAAK,EAAA;AAAA,GACN,CAAA;AAED,EAAA,OAAO,CAAC,IAA0B,KAAA;AAChC,IAAO,OAAA,SAAA,CAAU,KAAK,IAAI,CAAA;AAAA,GAC5B;AACF;AAEO,SAAS,yBAAyB,OAMvC,EAAA;AACA,EAAM,MAAA,EAAE,QAAU,EAAA,MAAA,EAAW,GAAA,OAAA;AAE7B,EAAA,MAAM,2BAA2B,MAAO,CAAA,kBAAA;AAAA,IACtC;AAAA,GACF;AAEA,EAAA,IAAI,wBAA0B,EAAA;AAC5B,IAAO,OAAA;AAAA,MACL,UAAY,EAAA,CAAC,IAAM,EAAA,IAAA,EAAM,SAAS,IAAK,EAAA;AAAA,MACvC,eAAe,MAAM;AAAA;AAAC,KACxB;AAAA;AAGF,EAAM,MAAA,yBAAA,GAA4B,IAAI,KAAiC,EAAA;AACvE,EAAM,MAAA,gBAAA,GAAmB,IAAI,KAAiC,EAAA;AAE9D,EAAA,MAAM,UAA6B,GAAA,CAAC,GAAK,EAAA,CAAA,EAAG,IAAS,KAAA;AACnD,IAAA,MAAM,wBAAwB,yBAA0B,CAAA,IAAA;AAAA,MAAK,CAAA,SAAA,KAC3D,SAAU,CAAA,GAAA,CAAI,IAAI;AAAA,KACpB;AAEA,IAAA,IAAI,qBAAuB,EAAA;AACzB,MAAK,IAAA,EAAA;AACL,MAAA;AAAA;AAGF,IAAA,MAAM,eAAe,gBAAiB,CAAA,IAAA;AAAA,MAAK,CAAA,SAAA,KACzC,SAAU,CAAA,GAAA,CAAI,IAAI;AAAA,KACpB;AAEA,IAAA,QAAA,CACG,YAAY,GAAK,EAAA;AAAA,MAChB,KAAA,EAAO,CAAC,MAAA,EAAQ,SAAS,CAAA;AAAA,MACzB,kBAAoB,EAAA;AAAA,KACrB,CACA,CAAA,IAAA;AAAA,MACC,MAAM,IAAK,EAAA;AAAA,MACX,CAAA,GAAA,KAAO,KAAK,GAAG;AAAA,KACjB;AAAA,GACJ;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,MAAwC,KAAA;AAC7D,IAAI,IAAA,MAAA,CAAO,UAAU,iBAAmB,EAAA;AACtC,MAAA,yBAAA,CAA0B,IAAK,CAAA,yBAAA,CAA0B,MAAO,CAAA,IAAI,CAAC,CAAA;AAAA,KACvE,MAAA,IAAW,MAAO,CAAA,KAAA,KAAU,aAAe,EAAA;AACzC,MAAA,gBAAA,CAAiB,IAAK,CAAA,yBAAA,CAA0B,MAAO,CAAA,IAAI,CAAC,CAAA;AAAA,KACvD,MAAA;AACL,MAAM,MAAA,IAAI,MAAM,qBAAqB,CAAA;AAAA;AACvC,GACF;AAEA,EAAO,OAAA,EAAE,YAAY,aAAc,EAAA;AACrC;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"createLifecycleMiddleware.cjs.js","sources":["../../../src/entrypoints/httpRouter/createLifecycleMiddleware.ts"],"sourcesContent":["/*\n * Copyright 2022 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 */\n\nimport { LifecycleService } from '@backstage/backend-plugin-api';\nimport { ServiceUnavailableError } from '@backstage/errors';\nimport { HumanDuration, durationToMilliseconds } from '@backstage/types';\nimport { RequestHandler } from 'express';\n\nexport const DEFAULT_TIMEOUT = { seconds: 5 };\n\n/**\n * Options for {@link createLifecycleMiddleware}.\n * @internal\n */\nexport interface LifecycleMiddlewareOptions {\n lifecycle: LifecycleService;\n /**\n * The maximum time that paused requests will wait for the service to start, before returning an error.\n *\n * Defaults to 5 seconds.\n */\n startupRequestPauseTimeout?: HumanDuration;\n}\n\n/**\n * Creates a middleware that pauses requests until the service has started.\n *\n * @remarks\n *\n * Requests that arrive before the service has started will be paused until startup is complete.\n * If the service does not start within the provided timeout, the request will be rejected with a\n * {@link @backstage/errors#ServiceUnavailableError}.\n *\n * If the service is shutting down, all requests will be rejected with a\n * {@link @backstage/errors#ServiceUnavailableError}.\n *\n * @internal\n */\nexport function createLifecycleMiddleware(\n options: LifecycleMiddlewareOptions,\n): RequestHandler {\n const { lifecycle, startupRequestPauseTimeout = DEFAULT_TIMEOUT } = options;\n\n let state: 'init' | 'up' | 'down' = 'init';\n const waiting = new Set<{\n next: (err?: Error) => void;\n timeout: NodeJS.Timeout;\n }>();\n\n lifecycle.addStartupHook(async () => {\n if (state === 'init') {\n state = 'up';\n for (const item of waiting) {\n clearTimeout(item.timeout);\n item.next();\n }\n waiting.clear();\n }\n });\n\n lifecycle.addShutdownHook(async () => {\n state = 'down';\n\n for (const item of waiting) {\n clearTimeout(item.timeout);\n item.next(new ServiceUnavailableError('Service is shutting down'));\n }\n waiting.clear();\n });\n\n const timeoutMs = durationToMilliseconds(startupRequestPauseTimeout);\n\n return (_req, _res, next) => {\n if (state === 'up') {\n next();\n return;\n } else if (state === 'down') {\n next(new ServiceUnavailableError('Service is shutting down'));\n return;\n }\n\n const item = {\n next,\n timeout: setTimeout(() => {\n if (waiting.delete(item)) {\n next(new ServiceUnavailableError('Service has not started up yet'));\n }\n }, timeoutMs),\n };\n\n waiting.add(item);\n };\n}\n"],"names":["ServiceUnavailableError","durationToMilliseconds"],"mappings":";;;;;AAqBa,MAAA,eAAA,GAAkB,EAAE,OAAA,EAAS,CAAE;AA8BrC,SAAS,0BACd,OACgB,EAAA;AAChB,EAAA,MAAM,EAAE,SAAA,EAAW,0BAA6B,GAAA,eAAA,EAAoB,GAAA,OAAA;AAEpE,EAAA,IAAI,KAAgC,GAAA,MAAA;AACpC,EAAM,MAAA,OAAA,uBAAc,GAGjB,EAAA;AAEH,EAAA,SAAA,CAAU,eAAe,YAAY;AACnC,IAAA,IAAI,UAAU,MAAQ,EAAA;AACpB,MAAQ,KAAA,GAAA,IAAA;AACR,MAAA,KAAA,MAAW,QAAQ,OAAS,EAAA;AAC1B,QAAA,YAAA,CAAa,KAAK,OAAO,CAAA;AACzB,QAAA,IAAA,CAAK,IAAK,EAAA;AAAA;AAEZ,MAAA,OAAA,CAAQ,KAAM,EAAA;AAAA;AAChB,GACD,CAAA;AAED,EAAA,SAAA,CAAU,gBAAgB,YAAY;AACpC,IAAQ,KAAA,GAAA,MAAA;AAER,IAAA,KAAA,MAAW,QAAQ,OAAS,EAAA;AAC1B,MAAA,YAAA,CAAa,KAAK,OAAO,CAAA;AACzB,MAAA,IAAA,CAAK,IAAK,CAAA,IAAIA,8BAAwB,CAAA,0BAA0B,CAAC,CAAA;AAAA;AAEnE,IAAA,OAAA,CAAQ,KAAM,EAAA;AAAA,GACf,CAAA;AAED,EAAM,MAAA,SAAA,GAAYC,6BAAuB,0BAA0B,CAAA;AAEnE,EAAO,OAAA,CAAC,IAAM,EAAA,IAAA,EAAM,IAAS,KAAA;AAC3B,IAAA,IAAI,UAAU,IAAM,EAAA;AAClB,MAAK,IAAA,EAAA;AACL,MAAA;AAAA,KACF,MAAA,IAAW,UAAU,MAAQ,EAAA;AAC3B,MAAK,IAAA,CAAA,IAAID,8BAAwB,CAAA,0BAA0B,CAAC,CAAA;AAC5D,MAAA;AAAA;AAGF,IAAA,MAAM,IAAO,GAAA;AAAA,MACX,IAAA;AAAA,MACA,OAAA,EAAS,WAAW,MAAM;AACxB,QAAI,IAAA,OAAA,CAAQ,MAAO,CAAA,IAAI,CAAG,EAAA;AACxB,UAAK,IAAA,CAAA,IAAIA,8BAAwB,CAAA,gCAAgC,CAAC,CAAA;AAAA;AACpE,SACC,SAAS;AAAA,KACd;AAEA,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,GAClB;AACF;;;;;"}