@backstage/backend-defaults 0.9.0-next.0 → 0.9.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,44 @@
1
1
  # @backstage/backend-defaults
2
2
 
3
+ ## 0.9.0-next.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 175528c: Adds `backend.auditor.severityLogLevelMappings` to map severity levels to log levels.
8
+ - Updated dependencies
9
+ - @backstage/backend-app-api@1.2.1
10
+ - @backstage/backend-dev-utils@0.1.5
11
+ - @backstage/backend-plugin-api@1.2.1
12
+ - @backstage/cli-node@0.2.13
13
+ - @backstage/config@1.3.2
14
+ - @backstage/config-loader@1.10.0
15
+ - @backstage/errors@1.2.7
16
+ - @backstage/integration@1.16.3-next.0
17
+ - @backstage/integration-aws-node@0.1.15
18
+ - @backstage/types@1.2.1
19
+ - @backstage/plugin-auth-node@0.6.1
20
+ - @backstage/plugin-events-node@0.4.9
21
+ - @backstage/plugin-permission-node@0.9.0
22
+
23
+ ## 0.9.0-next.1
24
+
25
+ ### Patch Changes
26
+
27
+ - Updated dependencies
28
+ - @backstage/integration@1.16.3-next.0
29
+ - @backstage/backend-app-api@1.2.1
30
+ - @backstage/plugin-auth-node@0.6.1
31
+ - @backstage/plugin-permission-node@0.9.0
32
+ - @backstage/backend-dev-utils@0.1.5
33
+ - @backstage/backend-plugin-api@1.2.1
34
+ - @backstage/cli-node@0.2.13
35
+ - @backstage/config@1.3.2
36
+ - @backstage/config-loader@1.10.0
37
+ - @backstage/errors@1.2.7
38
+ - @backstage/integration-aws-node@0.1.15
39
+ - @backstage/types@1.2.1
40
+ - @backstage/plugin-events-node@0.4.9
41
+
3
42
  ## 0.9.0-next.0
4
43
 
5
44
  ### Minor Changes
package/config.d.ts CHANGED
@@ -82,6 +82,32 @@ export interface Config {
82
82
  };
83
83
  };
84
84
 
85
+ /**
86
+ * Options used by the default auditor service.
87
+ */
88
+ auditor?: {
89
+ /**
90
+ * Defines how audit event severity levels are mapped to log levels.
91
+ * This allows you to control the verbosity of audit logs based on the
92
+ * severity of the event. For example, you might want to log 'low' severity
93
+ * events as 'debug' messages, while logging 'critical' events as 'error'
94
+ * messages. Each severity level ('low', 'medium', 'high', 'critical')
95
+ * can be mapped to one of the standard log levels ('debug', 'info', 'warn', 'error').
96
+ *
97
+ * By default, audit events are mapped to log levels as follows:
98
+ * - `low`: `debug`
99
+ * - `medium`: `info`
100
+ * - `high`: `info`
101
+ * - `critical`: `info`
102
+ */
103
+ severityLogLevelMappings?: {
104
+ low?: 'debug' | 'info' | 'warn' | 'error';
105
+ medium?: 'debug' | 'info' | 'warn' | 'error';
106
+ high?: 'debug' | 'info' | 'warn' | 'error';
107
+ critical?: 'debug' | 'info' | 'warn' | 'error';
108
+ };
109
+ };
110
+
85
111
  /**
86
112
  * Options used by the default auth, httpAuth and userInfo services.
87
113
  */
@@ -2,25 +2,51 @@
2
2
 
3
3
  var backendPluginApi = require('@backstage/backend-plugin-api');
4
4
  var DefaultAuditorService = require('./DefaultAuditorService.cjs.js');
5
+ var zod = require('zod');
6
+ var errors = require('@backstage/errors');
5
7
 
8
+ const CONFIG_ROOT_KEY = "backend.auditor";
9
+ const severityLogLevelMappingsSchema = zod.z.record(
10
+ zod.z.enum(["low", "medium", "high", "critical"]),
11
+ zod.z.enum(["debug", "info", "warn", "error"])
12
+ );
6
13
  const auditorServiceFactory = backendPluginApi.createServiceFactory({
7
14
  service: backendPluginApi.coreServices.auditor,
8
15
  deps: {
16
+ config: backendPluginApi.coreServices.rootConfig,
9
17
  logger: backendPluginApi.coreServices.logger,
10
18
  auth: backendPluginApi.coreServices.auth,
11
19
  httpAuth: backendPluginApi.coreServices.httpAuth,
12
20
  plugin: backendPluginApi.coreServices.pluginMetadata
13
21
  },
14
- factory({ logger, plugin, auth, httpAuth }) {
22
+ factory({ config, logger, plugin, auth, httpAuth }) {
15
23
  const auditLogger = logger.child({ isAuditEvent: true });
24
+ const auditorConfig = config.getOptionalConfig(CONFIG_ROOT_KEY);
25
+ const severityLogLevelMappings = {
26
+ low: auditorConfig?.getOptionalString("severityLogLevelMappings.low") ?? "debug",
27
+ medium: auditorConfig?.getOptionalString("severityLogLevelMappings.medium") ?? "info",
28
+ high: auditorConfig?.getOptionalString("severityLogLevelMappings.high") ?? "info",
29
+ critical: auditorConfig?.getOptionalString("severityLogLevelMappings.critical") ?? "info"
30
+ };
31
+ const res = severityLogLevelMappingsSchema.safeParse(
32
+ severityLogLevelMappings
33
+ );
34
+ if (!res.success) {
35
+ const key = res.error.issues.at(0)?.path.at(0);
36
+ const value = res.error.issues.at(0).received;
37
+ const validKeys = res.error.issues.at(0).options;
38
+ throw new errors.InputError(
39
+ `The configuration value for 'backend.auditor.severityLogLevelMappings.${key}' was given an invalid value: '${value}'. Expected one of the following valid values: '${validKeys.join(
40
+ ", "
41
+ )}'.`
42
+ );
43
+ }
16
44
  return DefaultAuditorService.DefaultAuditorService.create(
17
45
  (event) => {
18
- const message = `${event.plugin}.${event.eventId}`;
19
- if (event.severityLevel === "low") {
20
- auditLogger.debug(message, event);
21
- } else {
22
- auditLogger.info(message, event);
23
- }
46
+ auditLogger[severityLogLevelMappings[event.severityLevel]](
47
+ `${event.plugin}.${event.eventId}`,
48
+ event
49
+ );
24
50
  },
25
51
  { plugin, auth, httpAuth }
26
52
  );
@@ -1 +1 @@
1
- {"version":3,"file":"auditorServiceFactory.cjs.js","sources":["../../../src/entrypoints/auditor/auditorServiceFactory.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 coreServices,\n createServiceFactory,\n} from '@backstage/backend-plugin-api';\nimport { DefaultAuditorService } from './DefaultAuditorService';\n\n/**\n * Plugin-level auditing.\n *\n * See {@link @backstage/code-plugin-api#AuditorService}\n * and {@link https://backstage.io/docs/backend-system/core-services/auditor | the service docs}\n * for more information.\n *\n * @public\n */\nexport const auditorServiceFactory = createServiceFactory({\n service: coreServices.auditor,\n deps: {\n logger: coreServices.logger,\n auth: coreServices.auth,\n httpAuth: coreServices.httpAuth,\n plugin: coreServices.pluginMetadata,\n },\n factory({ logger, plugin, auth, httpAuth }) {\n const auditLogger = logger.child({ isAuditEvent: true });\n return DefaultAuditorService.create(\n event => {\n const message = `${event.plugin}.${event.eventId}`;\n if (event.severityLevel === 'low') {\n auditLogger.debug(message, event);\n } else {\n auditLogger.info(message, event);\n }\n },\n { plugin, auth, httpAuth },\n );\n },\n});\n"],"names":["createServiceFactory","coreServices","DefaultAuditorService"],"mappings":";;;;;AA+BO,MAAM,wBAAwBA,qCAAqB,CAAA;AAAA,EACxD,SAASC,6BAAa,CAAA,OAAA;AAAA,EACtB,IAAM,EAAA;AAAA,IACJ,QAAQA,6BAAa,CAAA,MAAA;AAAA,IACrB,MAAMA,6BAAa,CAAA,IAAA;AAAA,IACnB,UAAUA,6BAAa,CAAA,QAAA;AAAA,IACvB,QAAQA,6BAAa,CAAA;AAAA,GACvB;AAAA,EACA,QAAQ,EAAE,MAAA,EAAQ,MAAQ,EAAA,IAAA,EAAM,UAAY,EAAA;AAC1C,IAAA,MAAM,cAAc,MAAO,CAAA,KAAA,CAAM,EAAE,YAAA,EAAc,MAAM,CAAA;AACvD,IAAA,OAAOC,2CAAsB,CAAA,MAAA;AAAA,MAC3B,CAAS,KAAA,KAAA;AACP,QAAA,MAAM,UAAU,CAAG,EAAA,KAAA,CAAM,MAAM,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAChD,QAAI,IAAA,KAAA,CAAM,kBAAkB,KAAO,EAAA;AACjC,UAAY,WAAA,CAAA,KAAA,CAAM,SAAS,KAAK,CAAA;AAAA,SAC3B,MAAA;AACL,UAAY,WAAA,CAAA,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA;AACjC,OACF;AAAA,MACA,EAAE,MAAQ,EAAA,IAAA,EAAM,QAAS;AAAA,KAC3B;AAAA;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"auditorServiceFactory.cjs.js","sources":["../../../src/entrypoints/auditor/auditorServiceFactory.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 coreServices,\n createServiceFactory,\n} from '@backstage/backend-plugin-api';\nimport { DefaultAuditorService } from './DefaultAuditorService';\nimport { z } from 'zod';\nimport { InputError } from '@backstage/errors';\n\nconst CONFIG_ROOT_KEY = 'backend.auditor';\n\nconst severityLogLevelMappingsSchema = z.record(\n z.enum(['low', 'medium', 'high', 'critical']),\n z.enum(['debug', 'info', 'warn', 'error']),\n);\n\n/**\n * Plugin-level auditing.\n *\n * See {@link @backstage/code-plugin-api#AuditorService}\n * and {@link https://backstage.io/docs/backend-system/core-services/auditor | the service docs}\n * for more information.\n *\n * @public\n */\nexport const auditorServiceFactory = createServiceFactory({\n service: coreServices.auditor,\n deps: {\n config: coreServices.rootConfig,\n logger: coreServices.logger,\n auth: coreServices.auth,\n httpAuth: coreServices.httpAuth,\n plugin: coreServices.pluginMetadata,\n },\n factory({ config, logger, plugin, auth, httpAuth }) {\n const auditLogger = logger.child({ isAuditEvent: true });\n const auditorConfig = config.getOptionalConfig(CONFIG_ROOT_KEY);\n\n const severityLogLevelMappings = {\n low:\n auditorConfig?.getOptionalString('severityLogLevelMappings.low') ??\n 'debug',\n medium:\n auditorConfig?.getOptionalString('severityLogLevelMappings.medium') ??\n 'info',\n high:\n auditorConfig?.getOptionalString('severityLogLevelMappings.high') ??\n 'info',\n critical:\n auditorConfig?.getOptionalString('severityLogLevelMappings.critical') ??\n 'info',\n } as Required<z.infer<typeof severityLogLevelMappingsSchema>>;\n\n const res = severityLogLevelMappingsSchema.safeParse(\n severityLogLevelMappings,\n );\n if (!res.success) {\n const key = res.error.issues.at(0)?.path.at(0) as string;\n const value = (\n res.error.issues.at(0) as unknown as Record<PropertyKey, unknown>\n ).received as string;\n const validKeys = (\n res.error.issues.at(0) as unknown as Record<PropertyKey, unknown>\n ).options as string[];\n throw new InputError(\n `The configuration value for 'backend.auditor.severityLogLevelMappings.${key}' was given an invalid value: '${value}'. Expected one of the following valid values: '${validKeys.join(\n ', ',\n )}'.`,\n );\n }\n\n return DefaultAuditorService.create(\n event => {\n auditLogger[severityLogLevelMappings[event.severityLevel]](\n `${event.plugin}.${event.eventId}`,\n event,\n );\n },\n { plugin, auth, httpAuth },\n );\n },\n});\n"],"names":["z","createServiceFactory","coreServices","InputError","DefaultAuditorService"],"mappings":";;;;;;;AAwBA,MAAM,eAAkB,GAAA,iBAAA;AAExB,MAAM,iCAAiCA,KAAE,CAAA,MAAA;AAAA,EACvCA,MAAE,IAAK,CAAA,CAAC,OAAO,QAAU,EAAA,MAAA,EAAQ,UAAU,CAAC,CAAA;AAAA,EAC5CA,MAAE,IAAK,CAAA,CAAC,SAAS,MAAQ,EAAA,MAAA,EAAQ,OAAO,CAAC;AAC3C,CAAA;AAWO,MAAM,wBAAwBC,qCAAqB,CAAA;AAAA,EACxD,SAASC,6BAAa,CAAA,OAAA;AAAA,EACtB,IAAM,EAAA;AAAA,IACJ,QAAQA,6BAAa,CAAA,UAAA;AAAA,IACrB,QAAQA,6BAAa,CAAA,MAAA;AAAA,IACrB,MAAMA,6BAAa,CAAA,IAAA;AAAA,IACnB,UAAUA,6BAAa,CAAA,QAAA;AAAA,IACvB,QAAQA,6BAAa,CAAA;AAAA,GACvB;AAAA,EACA,QAAQ,EAAE,MAAA,EAAQ,QAAQ,MAAQ,EAAA,IAAA,EAAM,UAAY,EAAA;AAClD,IAAA,MAAM,cAAc,MAAO,CAAA,KAAA,CAAM,EAAE,YAAA,EAAc,MAAM,CAAA;AACvD,IAAM,MAAA,aAAA,GAAgB,MAAO,CAAA,iBAAA,CAAkB,eAAe,CAAA;AAE9D,IAAA,MAAM,wBAA2B,GAAA;AAAA,MAC/B,GACE,EAAA,aAAA,EAAe,iBAAkB,CAAA,8BAA8B,CAC/D,IAAA,OAAA;AAAA,MACF,MACE,EAAA,aAAA,EAAe,iBAAkB,CAAA,iCAAiC,CAClE,IAAA,MAAA;AAAA,MACF,IACE,EAAA,aAAA,EAAe,iBAAkB,CAAA,+BAA+B,CAChE,IAAA,MAAA;AAAA,MACF,QACE,EAAA,aAAA,EAAe,iBAAkB,CAAA,mCAAmC,CACpE,IAAA;AAAA,KACJ;AAEA,IAAA,MAAM,MAAM,8BAA+B,CAAA,SAAA;AAAA,MACzC;AAAA,KACF;AACA,IAAI,IAAA,CAAC,IAAI,OAAS,EAAA;AAChB,MAAM,MAAA,GAAA,GAAM,IAAI,KAAM,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,EAAG,IAAK,CAAA,EAAA,CAAG,CAAC,CAAA;AAC7C,MAAA,MAAM,QACJ,GAAI,CAAA,KAAA,CAAM,MAAO,CAAA,EAAA,CAAG,CAAC,CACrB,CAAA,QAAA;AACF,MAAA,MAAM,YACJ,GAAI,CAAA,KAAA,CAAM,MAAO,CAAA,EAAA,CAAG,CAAC,CACrB,CAAA,OAAA;AACF,MAAA,MAAM,IAAIC,iBAAA;AAAA,QACR,CAAyE,sEAAA,EAAA,GAAG,CAAkC,+BAAA,EAAA,KAAK,mDAAmD,SAAU,CAAA,IAAA;AAAA,UAC9K;AAAA,SACD,CAAA,EAAA;AAAA,OACH;AAAA;AAGF,IAAA,OAAOC,2CAAsB,CAAA,MAAA;AAAA,MAC3B,CAAS,KAAA,KAAA;AACP,QAAY,WAAA,CAAA,wBAAA,CAAyB,KAAM,CAAA,aAAa,CAAC,CAAA;AAAA,UACvD,CAAG,EAAA,KAAA,CAAM,MAAM,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAAA,UAChC;AAAA,SACF;AAAA,OACF;AAAA,MACA,EAAE,MAAQ,EAAA,IAAA,EAAM,QAAS;AAAA,KAC3B;AAAA;AAEJ,CAAC;;;;"}
@@ -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.9.0-next.0";
6
+ var version = "0.9.0-next.2";
7
7
  var description = "Backend defaults used by Backstage backend apps";
8
8
  var backstage = {
9
9
  role: "node-library"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/backend-defaults",
3
- "version": "0.9.0-next.0",
3
+ "version": "0.9.0-next.2",
4
4
  "description": "Backend defaults used by Backstage backend apps",
5
5
  "backstage": {
6
6
  "role": "node-library"
@@ -125,9 +125,6 @@
125
125
  "types": "./dist/index.d.ts",
126
126
  "typesVersions": {
127
127
  "*": {
128
- "*": [
129
- "dist/index.d.ts"
130
- ],
131
128
  "auditor": [
132
129
  "dist/auditor.d.ts"
133
130
  ],
@@ -184,6 +181,9 @@
184
181
  ],
185
182
  "userInfo": [
186
183
  "dist/userInfo.d.ts"
184
+ ],
185
+ "package.json": [
186
+ "package.json"
187
187
  ]
188
188
  }
189
189
  },
@@ -215,7 +215,7 @@
215
215
  "@backstage/config": "1.3.2",
216
216
  "@backstage/config-loader": "1.10.0",
217
217
  "@backstage/errors": "1.2.7",
218
- "@backstage/integration": "1.16.2",
218
+ "@backstage/integration": "1.16.3-next.0",
219
219
  "@backstage/integration-aws-node": "0.1.15",
220
220
  "@backstage/plugin-auth-node": "0.6.1",
221
221
  "@backstage/plugin-events-node": "0.4.9",
@@ -272,8 +272,8 @@
272
272
  "devDependencies": {
273
273
  "@aws-sdk/util-stream-node": "^3.350.0",
274
274
  "@backstage/backend-plugin-api": "1.2.1",
275
- "@backstage/backend-test-utils": "1.3.2-next.0",
276
- "@backstage/cli": "0.32.0-next.0",
275
+ "@backstage/backend-test-utils": "1.3.2-next.2",
276
+ "@backstage/cli": "0.32.0-next.2",
277
277
  "@google-cloud/cloud-sql-connector": "^1.4.0",
278
278
  "@types/archiver": "^6.0.0",
279
279
  "@types/base64-stream": "^1.0.2",