@backstage/backend-defaults 0.5.3 → 0.6.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.
Files changed (49) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/config.d.ts +0 -5
  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/httpAuth/httpAuthServiceFactory.cjs.js +22 -9
  17. package/dist/entrypoints/httpAuth/httpAuthServiceFactory.cjs.js.map +1 -1
  18. package/dist/entrypoints/httpRouter/http/createAuthIntegrationRouter.cjs.js.map +1 -0
  19. package/dist/entrypoints/httpRouter/http/createCookieAuthRefreshMiddleware.cjs.js.map +1 -0
  20. package/dist/entrypoints/httpRouter/http/createCredentialsBarrier.cjs.js.map +1 -0
  21. package/dist/entrypoints/httpRouter/http/createLifecycleMiddleware.cjs.js.map +1 -0
  22. package/dist/entrypoints/httpRouter/httpRouterServiceFactory.cjs.js +4 -4
  23. package/dist/entrypoints/httpRouter/httpRouterServiceFactory.cjs.js.map +1 -1
  24. package/dist/entrypoints/rootHttpRouter/http/MiddlewareFactory.cjs.js +36 -13
  25. package/dist/entrypoints/rootHttpRouter/http/MiddlewareFactory.cjs.js.map +1 -1
  26. package/dist/entrypoints/urlReader/lib/AzureBlobStorageUrlReader.cjs.js +156 -0
  27. package/dist/entrypoints/urlReader/lib/AzureBlobStorageUrlReader.cjs.js.map +1 -0
  28. package/dist/entrypoints/urlReader/lib/UrlReaders.cjs.js +2 -0
  29. package/dist/entrypoints/urlReader/lib/UrlReaders.cjs.js.map +1 -1
  30. package/dist/httpAuth.cjs.js +1 -0
  31. package/dist/httpAuth.cjs.js.map +1 -1
  32. package/dist/httpAuth.d.ts +36 -2
  33. package/dist/httpRouter.cjs.js +8 -0
  34. package/dist/httpRouter.cjs.js.map +1 -1
  35. package/dist/httpRouter.d.ts +62 -1
  36. package/dist/package.json.cjs.js +7 -6
  37. package/dist/package.json.cjs.js.map +1 -1
  38. package/dist/urlReader.cjs.js +2 -0
  39. package/dist/urlReader.cjs.js.map +1 -1
  40. package/dist/urlReader.d.ts +24 -3
  41. package/package.json +24 -23
  42. package/dist/entrypoints/httpRouter/createAuthIntegrationRouter.cjs.js.map +0 -1
  43. package/dist/entrypoints/httpRouter/createCookieAuthRefreshMiddleware.cjs.js.map +0 -1
  44. package/dist/entrypoints/httpRouter/createCredentialsBarrier.cjs.js.map +0 -1
  45. package/dist/entrypoints/httpRouter/createLifecycleMiddleware.cjs.js.map +0 -1
  46. /package/dist/entrypoints/httpRouter/{createAuthIntegrationRouter.cjs.js → http/createAuthIntegrationRouter.cjs.js} +0 -0
  47. /package/dist/entrypoints/httpRouter/{createCookieAuthRefreshMiddleware.cjs.js → http/createCookieAuthRefreshMiddleware.cjs.js} +0 -0
  48. /package/dist/entrypoints/httpRouter/{createCredentialsBarrier.cjs.js → http/createCredentialsBarrier.cjs.js} +0 -0
  49. /package/dist/entrypoints/httpRouter/{createLifecycleMiddleware.cjs.js → http/createLifecycleMiddleware.cjs.js} +0 -0
@@ -1,4 +1,9 @@
1
+ /// <reference types="express" />
1
2
  import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
3
+ import { AuthService, HttpAuthService, RootConfigService, HttpRouterServiceAuthPolicy, LifecycleService } from '@backstage/backend-plugin-api';
4
+ import * as express from 'express';
5
+ import express__default, { RequestHandler } from 'express';
6
+ import { HumanDuration } from '@backstage/types';
2
7
 
3
8
  /**
4
9
  * HTTP route registration for plugins.
@@ -11,4 +16,60 @@ import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
11
16
  */
12
17
  declare const httpRouterServiceFactory: _backstage_backend_plugin_api.ServiceFactory<_backstage_backend_plugin_api.HttpRouterService, "plugin", "singleton">;
13
18
 
14
- export { httpRouterServiceFactory };
19
+ /**
20
+ * @public
21
+ */
22
+ declare function createAuthIntegrationRouter(options: {
23
+ auth: AuthService;
24
+ }): express__default.Router;
25
+
26
+ /**
27
+ * @public
28
+ */
29
+ declare function createCredentialsBarrier(options: {
30
+ httpAuth: HttpAuthService;
31
+ config: RootConfigService;
32
+ }): {
33
+ middleware: RequestHandler;
34
+ addAuthPolicy: (policy: HttpRouterServiceAuthPolicy) => void;
35
+ };
36
+
37
+ /**
38
+ * Options for {@link createLifecycleMiddleware}.
39
+ * @public
40
+ */
41
+ interface LifecycleMiddlewareOptions {
42
+ lifecycle: LifecycleService;
43
+ /**
44
+ * The maximum time that paused requests will wait for the service to start, before returning an error.
45
+ *
46
+ * Defaults to 5 seconds.
47
+ */
48
+ startupRequestPauseTimeout?: HumanDuration;
49
+ }
50
+ /**
51
+ * Creates a middleware that pauses requests until the service has started.
52
+ *
53
+ * @remarks
54
+ *
55
+ * Requests that arrive before the service has started will be paused until startup is complete.
56
+ * If the service does not start within the provided timeout, the request will be rejected with a
57
+ * {@link @backstage/errors#ServiceUnavailableError}.
58
+ *
59
+ * If the service is shutting down, all requests will be rejected with a
60
+ * {@link @backstage/errors#ServiceUnavailableError}.
61
+ *
62
+ * @public
63
+ */
64
+ declare function createLifecycleMiddleware(options: LifecycleMiddlewareOptions): RequestHandler;
65
+
66
+ /**
67
+ * @public
68
+ * Creates a middleware that can be used to refresh the cookie for the user.
69
+ */
70
+ declare function createCookieAuthRefreshMiddleware(options: {
71
+ auth: AuthService;
72
+ httpAuth: HttpAuthService;
73
+ }): express.Router;
74
+
75
+ export { type LifecycleMiddlewareOptions, createAuthIntegrationRouter, createCookieAuthRefreshMiddleware, createCredentialsBarrier, createLifecycleMiddleware, httpRouterServiceFactory };
@@ -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.0";
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",
@@ -196,7 +197,6 @@ var devDependencies = {
196
197
  "@types/base64-stream": "^1.0.2",
197
198
  "@types/concat-stream": "^2.0.0",
198
199
  "@types/http-errors": "^2.0.0",
199
- "@types/morgan": "^1.9.0",
200
200
  "@types/node-forge": "^1.3.0",
201
201
  "@types/pg-format": "^1.0.5",
202
202
  "@types/stoppable": "^1.1.0",
@@ -204,6 +204,7 @@ var devDependencies = {
204
204
  "aws-sdk-client-mock": "^4.0.0",
205
205
  "http-errors": "^2.0.0",
206
206
  msw: "^1.0.0",
207
+ "node-mocks-http": "^1.0.0",
207
208
  supertest: "^7.0.0",
208
209
  "wait-for-expect": "^3.0.2"
209
210
  };
@@ -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
 
@@ -334,6 +334,27 @@ declare class AwsS3UrlReader implements UrlReaderService {
334
334
  toString(): string;
335
335
  }
336
336
 
337
+ /**
338
+ * Implements a {@link @backstage/backend-plugin-api#UrlReaderService} for Azure storage accounts urls.
339
+ *
340
+ * @public
341
+ */
342
+ declare class AzureBlobStorageUrlReader implements UrlReaderService {
343
+ private readonly credsManager;
344
+ private readonly integration;
345
+ private readonly deps;
346
+ static factory: ReaderFactory;
347
+ constructor(credsManager: AzureCredentialsManager, integration: AzureBlobStorageIntergation, deps: {
348
+ treeResponseFactory: ReadTreeResponseFactory;
349
+ });
350
+ private createContainerClient;
351
+ read(url: string): Promise<Buffer>;
352
+ readUrl(url: string, options?: UrlReaderServiceReadUrlOptions): Promise<UrlReaderServiceReadUrlResponse>;
353
+ readTree(url: string, options?: UrlReaderServiceReadTreeOptions): Promise<UrlReaderServiceReadTreeResponse>;
354
+ search(): Promise<UrlReaderServiceSearchResponse>;
355
+ toString(): string;
356
+ }
357
+
337
358
  /**
338
359
  * A {@link @backstage/backend-plugin-api#UrlReaderService} that does a plain fetch of the URL.
339
360
  *
@@ -437,4 +458,4 @@ declare const urlReaderFactoriesServiceRef: _backstage_backend_plugin_api.Servic
437
458
  */
438
459
  declare const urlReaderServiceFactory: _backstage_backend_plugin_api.ServiceFactory<_backstage_backend_plugin_api.UrlReaderService, "plugin", "singleton">;
439
460
 
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 };
461
+ 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.0",
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.0.3-next.0",
197
+ "@backstage/backend-dev-utils": "0.1.5",
198
+ "@backstage/backend-plugin-api": "1.0.3-next.0",
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.2",
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.0",
207
+ "@backstage/plugin-events-node": "0.4.6-next.0",
208
+ "@backstage/plugin-permission-node": "0.8.6-next.0",
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",
@@ -258,14 +259,13 @@
258
259
  },
259
260
  "devDependencies": {
260
261
  "@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",
262
+ "@backstage/backend-plugin-api": "1.0.3-next.0",
263
+ "@backstage/backend-test-utils": "1.2.0-next.0",
264
+ "@backstage/cli": "0.29.3-next.0",
264
265
  "@types/archiver": "^6.0.0",
265
266
  "@types/base64-stream": "^1.0.2",
266
267
  "@types/concat-stream": "^2.0.0",
267
268
  "@types/http-errors": "^2.0.0",
268
- "@types/morgan": "^1.9.0",
269
269
  "@types/node-forge": "^1.3.0",
270
270
  "@types/pg-format": "^1.0.5",
271
271
  "@types/stoppable": "^1.1.0",
@@ -273,6 +273,7 @@
273
273
  "aws-sdk-client-mock": "^4.0.0",
274
274
  "http-errors": "^2.0.0",
275
275
  "msw": "^1.0.0",
276
+ "node-mocks-http": "^1.0.0",
276
277
  "supertest": "^7.0.0",
277
278
  "wait-for-expect": "^3.0.2"
278
279
  },
@@ -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;;;;;"}