@backstage/backend-defaults 0.10.1-next.1 → 0.11.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 +23 -0
- package/dist/auditor.d.ts +3 -1
- package/dist/entrypoints/auditor/DefaultAuditorService.cjs.js +1 -1
- package/dist/entrypoints/auditor/DefaultAuditorService.cjs.js.map +1 -1
- package/dist/entrypoints/auditor/WinstonRootAuditorService.cjs.js +17 -4
- package/dist/entrypoints/auditor/WinstonRootAuditorService.cjs.js.map +1 -1
- package/dist/entrypoints/auditor/auditorServiceFactory.cjs.js +15 -31
- package/dist/entrypoints/auditor/auditorServiceFactory.cjs.js.map +1 -1
- package/dist/entrypoints/auditor/types.cjs.js +13 -0
- package/dist/entrypoints/auditor/types.cjs.js.map +1 -0
- package/dist/entrypoints/auditor/utils.cjs.js +31 -0
- package/dist/entrypoints/auditor/utils.cjs.js.map +1 -0
- package/dist/package.json.cjs.js +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @backstage/backend-defaults
|
|
2
2
|
|
|
3
|
+
## 0.11.0-next.2
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 3ccb7fc: Enhanced error handling in the auditor service factory to pass errors as objects. Aligned WinstonRootAuditorService with the default service factory's error handling.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
- @backstage/backend-app-api@1.2.4-next.2
|
|
13
|
+
- @backstage/backend-dev-utils@0.1.5
|
|
14
|
+
- @backstage/backend-plugin-api@1.4.0-next.1
|
|
15
|
+
- @backstage/cli-node@0.2.13
|
|
16
|
+
- @backstage/config@1.3.2
|
|
17
|
+
- @backstage/config-loader@1.10.1
|
|
18
|
+
- @backstage/errors@1.2.7
|
|
19
|
+
- @backstage/integration@1.17.0
|
|
20
|
+
- @backstage/integration-aws-node@0.1.16
|
|
21
|
+
- @backstage/types@1.2.1
|
|
22
|
+
- @backstage/plugin-auth-node@0.6.4-next.1
|
|
23
|
+
- @backstage/plugin-events-node@0.4.12-next.1
|
|
24
|
+
- @backstage/plugin-permission-node@0.10.1-next.1
|
|
25
|
+
|
|
3
26
|
## 0.10.1-next.1
|
|
4
27
|
|
|
5
28
|
### Patch Changes
|
package/dist/auditor.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import * as _backstage_backend_plugin_api from '@backstage/backend-plugin-api';
|
|
|
2
2
|
import { AuditorServiceEventSeverityLevel, AuditorService, AuthService, HttpAuthService, PluginMetadataService, AuditorServiceCreateEventOptions, AuditorServiceEvent } from '@backstage/backend-plugin-api';
|
|
3
3
|
import { JsonObject } from '@backstage/types';
|
|
4
4
|
import { Request } from 'express';
|
|
5
|
+
import { Config } from '@backstage/config';
|
|
5
6
|
import { Format } from 'logform';
|
|
6
7
|
import * as winston from 'winston';
|
|
7
8
|
|
|
@@ -24,7 +25,7 @@ type AuditorEventStatus = {
|
|
|
24
25
|
status: 'succeeded';
|
|
25
26
|
} | {
|
|
26
27
|
status: 'failed';
|
|
27
|
-
error:
|
|
28
|
+
error: Error;
|
|
28
29
|
};
|
|
29
30
|
/**
|
|
30
31
|
* Options for creating an auditor event.
|
|
@@ -158,6 +159,7 @@ declare class WinstonRootAuditorService {
|
|
|
158
159
|
static create(options?: WinstonRootAuditorServiceOptions): WinstonRootAuditorService;
|
|
159
160
|
forPlugin(deps: {
|
|
160
161
|
auth: AuthService;
|
|
162
|
+
config: Config;
|
|
161
163
|
httpAuth: HttpAuthService;
|
|
162
164
|
plugin: PluginMetadataService;
|
|
163
165
|
}): AuditorService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultAuditorService.cjs.js","sources":["../../../src/entrypoints/auditor/DefaultAuditorService.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 type {\n AuditorService,\n AuditorServiceCreateEventOptions,\n AuditorServiceEvent,\n AuditorServiceEventSeverityLevel,\n AuthService,\n BackstageCredentials,\n HttpAuthService,\n PluginMetadataService,\n} from '@backstage/backend-plugin-api';\nimport { ForwardedError } from '@backstage/errors';\nimport type { JsonObject } from '@backstage/types';\nimport type { Request } from 'express';\n\n/** @public */\nexport type AuditorEventActorDetails = {\n actorId?: string;\n ip?: string;\n hostname?: string;\n userAgent?: string;\n};\n\n/** @public */\nexport type AuditorEventRequest = {\n url: string;\n method: string;\n};\n\n/** @public */\nexport type AuditorEventStatus =\n | { status: 'initiated' }\n | { status: 'succeeded' }\n | {\n status: 'failed';\n error:
|
|
1
|
+
{"version":3,"file":"DefaultAuditorService.cjs.js","sources":["../../../src/entrypoints/auditor/DefaultAuditorService.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 type {\n AuditorService,\n AuditorServiceCreateEventOptions,\n AuditorServiceEvent,\n AuditorServiceEventSeverityLevel,\n AuthService,\n BackstageCredentials,\n HttpAuthService,\n PluginMetadataService,\n} from '@backstage/backend-plugin-api';\nimport { ForwardedError } from '@backstage/errors';\nimport type { JsonObject } from '@backstage/types';\nimport type { Request } from 'express';\n\n/** @public */\nexport type AuditorEventActorDetails = {\n actorId?: string;\n ip?: string;\n hostname?: string;\n userAgent?: string;\n};\n\n/** @public */\nexport type AuditorEventRequest = {\n url: string;\n method: string;\n};\n\n/** @public */\nexport type AuditorEventStatus =\n | { status: 'initiated' }\n | { status: 'succeeded' }\n | {\n status: 'failed';\n error: Error;\n };\n\n/**\n * Options for creating an auditor event.\n *\n * @public\n */\nexport type AuditorEventOptions<TMeta extends JsonObject> = {\n /**\n * Use kebab-case to name audit events (e.g., \"user-login\", \"file-download\").\n *\n * The `pluginId` already provides plugin/module context, so avoid redundant prefixes in the `eventId`.\n */\n eventId: string;\n\n severityLevel?: AuditorServiceEventSeverityLevel;\n\n /** (Optional) The associated HTTP request, if applicable. */\n request?: Request<any, any, any, any, any>;\n\n /** (Optional) Additional metadata relevant to the event, structured as a JSON object. */\n meta?: TMeta;\n} & AuditorEventStatus;\n\n/**\n * Common fields of an audit event.\n *\n * @public\n */\nexport type AuditorEvent = {\n plugin: string;\n eventId: string;\n severityLevel: AuditorServiceEventSeverityLevel;\n actor: AuditorEventActorDetails;\n meta?: JsonObject;\n request?: AuditorEventRequest;\n} & AuditorEventStatus;\n\n/**\n * Logging function used by the auditor.\n * @public\n */\nexport type AuditorLogFunction = (event: AuditorEvent) => void | Promise<void>;\n\n/**\n * A {@link @backstage/backend-plugin-api#AuditorService} implementation that logs events using a provided callback.\n *\n * @public\n *\n * @example\n * ```ts\n * export 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 => auditLogger.info(`${event.plugin}.${event.eventId}`, event),\n * { plugin, auth, httpAuth },\n * );\n * },\n * });\n * ```\n */\nexport class DefaultAuditorService implements AuditorService {\n private readonly logFn: AuditorLogFunction;\n private readonly auth: AuthService;\n private readonly httpAuth: HttpAuthService;\n private readonly plugin: PluginMetadataService;\n\n private constructor(\n logFn: AuditorLogFunction,\n deps: {\n auth: AuthService;\n httpAuth: HttpAuthService;\n plugin: PluginMetadataService;\n },\n ) {\n this.logFn = logFn;\n this.auth = deps.auth;\n this.httpAuth = deps.httpAuth;\n this.plugin = deps.plugin;\n }\n\n /**\n * Creates a {@link DefaultAuditorService} instance.\n */\n static create(\n logFn: AuditorLogFunction,\n deps: {\n auth: AuthService;\n httpAuth: HttpAuthService;\n plugin: PluginMetadataService;\n },\n ): DefaultAuditorService {\n return new DefaultAuditorService(logFn, deps);\n }\n\n private async log<TMeta extends JsonObject>(\n options: AuditorEventOptions<TMeta>,\n ): Promise<void> {\n const { eventId, severityLevel = 'low', request, meta, ...rest } = options;\n\n await this.logFn({\n plugin: this.plugin.getId(),\n eventId,\n severityLevel,\n actor: {\n actorId: await this.getActorId(request),\n ip: request?.ip,\n hostname: request?.hostname,\n userAgent: request?.get('user-agent'),\n },\n request: request\n ? {\n url: request?.originalUrl,\n method: request?.method,\n }\n : undefined,\n meta: Object.keys(meta ?? {}).length === 0 ? undefined : meta,\n ...rest,\n });\n }\n\n async createEvent(\n options: AuditorServiceCreateEventOptions,\n ): Promise<AuditorServiceEvent> {\n await this.log({ ...options, status: 'initiated' });\n\n return {\n success: async params => {\n await this.log({\n ...options,\n meta: { ...options.meta, ...params?.meta },\n status: 'succeeded',\n });\n },\n fail: async params => {\n await this.log({\n ...options,\n ...params,\n error: params.error,\n meta: { ...options.meta, ...params?.meta },\n status: 'failed',\n });\n },\n };\n }\n\n private async getActorId(\n request?: Request<any, any, any, any, any>,\n ): Promise<string | undefined> {\n let credentials: BackstageCredentials =\n await this.auth.getOwnServiceCredentials();\n\n if (request) {\n try {\n credentials = await this.httpAuth.credentials(request);\n } catch (error) {\n throw new ForwardedError('Could not resolve credentials', error);\n }\n }\n\n if (this.auth.isPrincipal(credentials, 'user')) {\n return credentials.principal.userEntityRef;\n }\n\n if (this.auth.isPrincipal(credentials, 'service')) {\n return credentials.principal.subject;\n }\n\n return undefined;\n }\n}\n"],"names":["ForwardedError"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ var winston = require('winston');
|
|
|
4
4
|
require('../rootLogger/rootLoggerServiceFactory.cjs.js');
|
|
5
5
|
var WinstonLogger = require('../rootLogger/WinstonLogger.cjs.js');
|
|
6
6
|
var DefaultAuditorService = require('./DefaultAuditorService.cjs.js');
|
|
7
|
+
var utils = require('./utils.cjs.js');
|
|
7
8
|
|
|
8
9
|
function _interopNamespaceCompat(e) {
|
|
9
10
|
if (e && typeof e === 'object' && 'default' in e) return e;
|
|
@@ -61,10 +62,22 @@ class WinstonRootAuditorService {
|
|
|
61
62
|
return new WinstonRootAuditorService(winstonLogger);
|
|
62
63
|
}
|
|
63
64
|
forPlugin(deps) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
const severityLogLevelMappings = utils.getSeverityLogLevelMappings(deps.config);
|
|
66
|
+
return DefaultAuditorService.DefaultAuditorService.create((event) => {
|
|
67
|
+
if ("error" in event) {
|
|
68
|
+
const { error, ...rest } = event;
|
|
69
|
+
const childAuditLogger = this.winstonLogger.child(rest);
|
|
70
|
+
childAuditLogger[severityLogLevelMappings[event.severityLevel]](
|
|
71
|
+
`${event.plugin}.${event.eventId}`,
|
|
72
|
+
error
|
|
73
|
+
);
|
|
74
|
+
} else {
|
|
75
|
+
this.winstonLogger[severityLogLevelMappings[event.severityLevel]](
|
|
76
|
+
`${event.plugin}.${event.eventId}`,
|
|
77
|
+
event
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
}, deps);
|
|
68
81
|
}
|
|
69
82
|
}
|
|
70
83
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WinstonRootAuditorService.cjs.js","sources":["../../../src/entrypoints/auditor/WinstonRootAuditorService.ts"],"sourcesContent":["/*\n * Copyright 2025 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 type {\n AuditorService,\n AuthService,\n HttpAuthService,\n PluginMetadataService,\n} from '@backstage/backend-plugin-api';\nimport type { JsonObject } from '@backstage/types';\nimport type { Format } from 'logform';\nimport * as winston from 'winston';\nimport { WinstonLogger } from '../rootLogger';\nimport { DefaultAuditorService } from './DefaultAuditorService';\n\n/** @public */\nexport const defaultFormatter = winston.format.combine(\n winston.format.timestamp({\n format: 'YYYY-MM-DD HH:mm:ss',\n }),\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n winston.format.json(),\n);\n\n/**\n * Adds `isAuditEvent` field\n *\n * @public\n */\nexport const auditorFieldFormat = winston.format(info => {\n return { ...info, isAuditEvent: true };\n})();\n\n/**\n * Options for creating a {@link WinstonRootAuditorService}.\n * @public\n */\nexport type WinstonRootAuditorServiceOptions = {\n meta?: JsonObject;\n format?: Format;\n transports?: winston.transport[];\n};\n\n/**\n * An implementation of the {@link @backstage/backend-plugin-api#AuditorService} that logs events using a separate winston logger.\n *\n * @public\n *\n * @example\n * ```ts\n * export const auditorServiceFactory = createServiceFactory({\n * service: coreServices.auditor,\n * deps: {\n * auth: coreServices.auth,\n * httpAuth: coreServices.httpAuth,\n * plugin: coreServices.pluginMetadata,\n * },\n * createRootContext() {\n * return WinstonRootAuditorService.create();\n * },\n * factory({ plugin, auth, httpAuth }, root) {\n * return root.forPlugin({ plugin, auth, httpAuth });\n * },\n * });\n * ```\n */\nexport class WinstonRootAuditorService {\n private constructor(private readonly winstonLogger: WinstonLogger) {}\n\n /**\n * Creates a {@link WinstonRootAuditorService} instance.\n */\n static create(\n options?: WinstonRootAuditorServiceOptions,\n ): WinstonRootAuditorService {\n let winstonLogger = WinstonLogger.create({\n meta: {\n service: 'backstage',\n },\n level: 'info',\n format: winston.format.combine(\n auditorFieldFormat,\n options?.format ?? defaultFormatter,\n ),\n transports: options?.transports,\n });\n\n if (options?.meta) {\n winstonLogger = winstonLogger.child(options.meta) as WinstonLogger;\n }\n\n return new WinstonRootAuditorService(winstonLogger);\n }\n\n forPlugin(deps: {\n auth: AuthService;\n httpAuth: HttpAuthService;\n plugin: PluginMetadataService;\n }): AuditorService {\n return DefaultAuditorService.create(\n
|
|
1
|
+
{"version":3,"file":"WinstonRootAuditorService.cjs.js","sources":["../../../src/entrypoints/auditor/WinstonRootAuditorService.ts"],"sourcesContent":["/*\n * Copyright 2025 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 type {\n AuditorService,\n AuthService,\n HttpAuthService,\n PluginMetadataService,\n} from '@backstage/backend-plugin-api';\nimport { Config } from '@backstage/config';\nimport type { JsonObject } from '@backstage/types';\nimport type { Format } from 'logform';\nimport * as winston from 'winston';\nimport { WinstonLogger } from '../rootLogger';\nimport { DefaultAuditorService } from './DefaultAuditorService';\nimport { getSeverityLogLevelMappings } from './utils';\n\n/** @public */\nexport const defaultFormatter = winston.format.combine(\n winston.format.timestamp({\n format: 'YYYY-MM-DD HH:mm:ss',\n }),\n winston.format.errors({ stack: true }),\n winston.format.splat(),\n winston.format.json(),\n);\n\n/**\n * Adds `isAuditEvent` field\n *\n * @public\n */\nexport const auditorFieldFormat = winston.format(info => {\n return { ...info, isAuditEvent: true };\n})();\n\n/**\n * Options for creating a {@link WinstonRootAuditorService}.\n * @public\n */\nexport type WinstonRootAuditorServiceOptions = {\n meta?: JsonObject;\n format?: Format;\n transports?: winston.transport[];\n};\n\n/**\n * An implementation of the {@link @backstage/backend-plugin-api#AuditorService} that logs events using a separate winston logger.\n *\n * @public\n *\n * @example\n * ```ts\n * export const auditorServiceFactory = createServiceFactory({\n * service: coreServices.auditor,\n * deps: {\n * auth: coreServices.auth,\n * httpAuth: coreServices.httpAuth,\n * plugin: coreServices.pluginMetadata,\n * },\n * createRootContext() {\n * return WinstonRootAuditorService.create();\n * },\n * factory({ plugin, auth, httpAuth }, root) {\n * return root.forPlugin({ plugin, auth, httpAuth });\n * },\n * });\n * ```\n */\nexport class WinstonRootAuditorService {\n private constructor(private readonly winstonLogger: WinstonLogger) {}\n\n /**\n * Creates a {@link WinstonRootAuditorService} instance.\n */\n static create(\n options?: WinstonRootAuditorServiceOptions,\n ): WinstonRootAuditorService {\n let winstonLogger = WinstonLogger.create({\n meta: {\n service: 'backstage',\n },\n level: 'info',\n format: winston.format.combine(\n auditorFieldFormat,\n options?.format ?? defaultFormatter,\n ),\n transports: options?.transports,\n });\n\n if (options?.meta) {\n winstonLogger = winstonLogger.child(options.meta) as WinstonLogger;\n }\n\n return new WinstonRootAuditorService(winstonLogger);\n }\n\n forPlugin(deps: {\n auth: AuthService;\n config: Config;\n httpAuth: HttpAuthService;\n plugin: PluginMetadataService;\n }): AuditorService {\n const severityLogLevelMappings = getSeverityLogLevelMappings(deps.config);\n\n return DefaultAuditorService.create(event => {\n if ('error' in event) {\n const { error, ...rest } = event;\n const childAuditLogger = this.winstonLogger.child(rest);\n\n childAuditLogger[severityLogLevelMappings[event.severityLevel]](\n `${event.plugin}.${event.eventId}`,\n error,\n );\n } else {\n // the else statement is required for typechecking\n this.winstonLogger[severityLogLevelMappings[event.severityLevel]](\n `${event.plugin}.${event.eventId}`,\n event,\n );\n }\n }, deps);\n }\n}\n"],"names":["winston","WinstonLogger","getSeverityLogLevelMappings","DefaultAuditorService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+Ba,MAAA,gBAAA,GAAmBA,mBAAQ,MAAO,CAAA,OAAA;AAAA,EAC7CA,kBAAA,CAAQ,OAAO,SAAU,CAAA;AAAA,IACvB,MAAQ,EAAA;AAAA,GACT,CAAA;AAAA,EACDA,mBAAQ,MAAO,CAAA,MAAA,CAAO,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,EACrCA,kBAAA,CAAQ,OAAO,KAAM,EAAA;AAAA,EACrBA,kBAAA,CAAQ,OAAO,IAAK;AACtB;AAOa,MAAA,kBAAA,GAAqBA,kBAAQ,CAAA,MAAA,CAAO,CAAQ,IAAA,KAAA;AACvD,EAAA,OAAO,EAAE,GAAG,IAAM,EAAA,YAAA,EAAc,IAAK,EAAA;AACvC,CAAC,CAAE;AAmCI,MAAM,yBAA0B,CAAA;AAAA,EAC7B,YAA6B,aAA8B,EAAA;AAA9B,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AAAA;AAA+B;AAAA;AAAA;AAAA,EAKpE,OAAO,OACL,OAC2B,EAAA;AAC3B,IAAI,IAAA,aAAA,GAAgBC,4BAAc,MAAO,CAAA;AAAA,MACvC,IAAM,EAAA;AAAA,QACJ,OAAS,EAAA;AAAA,OACX;AAAA,MACA,KAAO,EAAA,MAAA;AAAA,MACP,MAAA,EAAQD,mBAAQ,MAAO,CAAA,OAAA;AAAA,QACrB,kBAAA;AAAA,QACA,SAAS,MAAU,IAAA;AAAA,OACrB;AAAA,MACA,YAAY,OAAS,EAAA;AAAA,KACtB,CAAA;AAED,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAgB,aAAA,GAAA,aAAA,CAAc,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAA;AAAA;AAGlD,IAAO,OAAA,IAAI,0BAA0B,aAAa,CAAA;AAAA;AACpD,EAEA,UAAU,IAKS,EAAA;AACjB,IAAM,MAAA,wBAAA,GAA2BE,iCAA4B,CAAA,IAAA,CAAK,MAAM,CAAA;AAExE,IAAO,OAAAC,2CAAA,CAAsB,OAAO,CAAS,KAAA,KAAA;AAC3C,MAAA,IAAI,WAAW,KAAO,EAAA;AACpB,QAAA,MAAM,EAAE,KAAA,EAAO,GAAG,IAAA,EAAS,GAAA,KAAA;AAC3B,QAAA,MAAM,gBAAmB,GAAA,IAAA,CAAK,aAAc,CAAA,KAAA,CAAM,IAAI,CAAA;AAEtD,QAAiB,gBAAA,CAAA,wBAAA,CAAyB,KAAM,CAAA,aAAa,CAAC,CAAA;AAAA,UAC5D,CAAG,EAAA,KAAA,CAAM,MAAM,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAAA,UAChC;AAAA,SACF;AAAA,OACK,MAAA;AAEL,QAAA,IAAA,CAAK,aAAc,CAAA,wBAAA,CAAyB,KAAM,CAAA,aAAa,CAAC,CAAA;AAAA,UAC9D,CAAG,EAAA,KAAA,CAAM,MAAM,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAAA,UAChC;AAAA,SACF;AAAA;AACF,OACC,IAAI,CAAA;AAAA;AAEX;;;;;;"}
|
|
@@ -2,14 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var backendPluginApi = require('@backstage/backend-plugin-api');
|
|
4
4
|
var DefaultAuditorService = require('./DefaultAuditorService.cjs.js');
|
|
5
|
-
var
|
|
6
|
-
var errors = require('@backstage/errors');
|
|
5
|
+
var utils = require('./utils.cjs.js');
|
|
7
6
|
|
|
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
|
-
);
|
|
13
7
|
const auditorServiceFactory = backendPluginApi.createServiceFactory({
|
|
14
8
|
service: backendPluginApi.coreServices.auditor,
|
|
15
9
|
deps: {
|
|
@@ -21,32 +15,22 @@ const auditorServiceFactory = backendPluginApi.createServiceFactory({
|
|
|
21
15
|
},
|
|
22
16
|
factory({ config, logger, plugin, auth, httpAuth }) {
|
|
23
17
|
const auditLogger = logger.child({ isAuditEvent: true });
|
|
24
|
-
const
|
|
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
|
-
}
|
|
18
|
+
const severityLogLevelMappings = utils.getSeverityLogLevelMappings(config);
|
|
44
19
|
return DefaultAuditorService.DefaultAuditorService.create(
|
|
45
20
|
(event) => {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
21
|
+
if ("error" in event) {
|
|
22
|
+
const { error, ...rest } = event;
|
|
23
|
+
const childAuditLogger = auditLogger.child(rest);
|
|
24
|
+
childAuditLogger[severityLogLevelMappings[event.severityLevel]](
|
|
25
|
+
`${event.plugin}.${event.eventId}`,
|
|
26
|
+
error
|
|
27
|
+
);
|
|
28
|
+
} else {
|
|
29
|
+
auditLogger[severityLogLevelMappings[event.severityLevel]](
|
|
30
|
+
`${event.plugin}.${event.eventId}`,
|
|
31
|
+
event
|
|
32
|
+
);
|
|
33
|
+
}
|
|
50
34
|
},
|
|
51
35
|
{ plugin, auth, httpAuth }
|
|
52
36
|
);
|
|
@@ -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';\nimport {
|
|
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 { getSeverityLogLevelMappings } from './utils';\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\n const severityLogLevelMappings = getSeverityLogLevelMappings(config);\n\n return DefaultAuditorService.create(\n event => {\n if ('error' in event) {\n const { error, ...rest } = event;\n const childAuditLogger = auditLogger.child(rest);\n\n childAuditLogger[severityLogLevelMappings[event.severityLevel]](\n `${event.plugin}.${event.eventId}`,\n error,\n );\n } else {\n // the else statement is required for typechecking\n auditLogger[severityLogLevelMappings[event.severityLevel]](\n `${event.plugin}.${event.eventId}`,\n event,\n );\n }\n },\n { plugin, auth, httpAuth },\n );\n },\n});\n"],"names":["createServiceFactory","coreServices","getSeverityLogLevelMappings","DefaultAuditorService"],"mappings":";;;;;;AAgCO,MAAM,wBAAwBA,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;AAEvD,IAAM,MAAA,wBAAA,GAA2BC,kCAA4B,MAAM,CAAA;AAEnE,IAAA,OAAOC,2CAAsB,CAAA,MAAA;AAAA,MAC3B,CAAS,KAAA,KAAA;AACP,QAAA,IAAI,WAAW,KAAO,EAAA;AACpB,UAAA,MAAM,EAAE,KAAA,EAAO,GAAG,IAAA,EAAS,GAAA,KAAA;AAC3B,UAAM,MAAA,gBAAA,GAAmB,WAAY,CAAA,KAAA,CAAM,IAAI,CAAA;AAE/C,UAAiB,gBAAA,CAAA,wBAAA,CAAyB,KAAM,CAAA,aAAa,CAAC,CAAA;AAAA,YAC5D,CAAG,EAAA,KAAA,CAAM,MAAM,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAAA,YAChC;AAAA,WACF;AAAA,SACK,MAAA;AAEL,UAAY,WAAA,CAAA,wBAAA,CAAyB,KAAM,CAAA,aAAa,CAAC,CAAA;AAAA,YACvD,CAAG,EAAA,KAAA,CAAM,MAAM,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAAA,YAChC;AAAA,WACF;AAAA;AACF,OACF;AAAA,MACA,EAAE,MAAQ,EAAA,IAAA,EAAM,QAAS;AAAA,KAC3B;AAAA;AAEJ,CAAC;;;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var zod = require('zod');
|
|
4
|
+
|
|
5
|
+
const severityLogLevelMappingsSchema = zod.z.record(
|
|
6
|
+
zod.z.enum(["low", "medium", "high", "critical"]),
|
|
7
|
+
zod.z.enum(["debug", "info", "warn", "error"])
|
|
8
|
+
);
|
|
9
|
+
const CONFIG_ROOT_KEY = "backend.auditor";
|
|
10
|
+
|
|
11
|
+
exports.CONFIG_ROOT_KEY = CONFIG_ROOT_KEY;
|
|
12
|
+
exports.severityLogLevelMappingsSchema = severityLogLevelMappingsSchema;
|
|
13
|
+
//# sourceMappingURL=types.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.cjs.js","sources":["../../../src/entrypoints/auditor/types.ts"],"sourcesContent":["/*\n * Copyright 2025 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 { z } from 'zod';\n\n/** @internal */\nexport const severityLogLevelMappingsSchema = z.record(\n z.enum(['low', 'medium', 'high', 'critical']),\n z.enum(['debug', 'info', 'warn', 'error']),\n);\n\n/** @internal */\nexport const CONFIG_ROOT_KEY = 'backend.auditor';\n"],"names":["z"],"mappings":";;;;AAmBO,MAAM,iCAAiCA,KAAE,CAAA,MAAA;AAAA,EAC9CA,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;AAGO,MAAM,eAAkB,GAAA;;;;;"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var errors = require('@backstage/errors');
|
|
4
|
+
var types = require('./types.cjs.js');
|
|
5
|
+
|
|
6
|
+
function getSeverityLogLevelMappings(config) {
|
|
7
|
+
const auditorConfig = config.getOptionalConfig(types.CONFIG_ROOT_KEY);
|
|
8
|
+
const severityLogLevelMappings = {
|
|
9
|
+
low: auditorConfig?.getOptionalString("severityLogLevelMappings.low") ?? "debug",
|
|
10
|
+
medium: auditorConfig?.getOptionalString("severityLogLevelMappings.medium") ?? "info",
|
|
11
|
+
high: auditorConfig?.getOptionalString("severityLogLevelMappings.high") ?? "info",
|
|
12
|
+
critical: auditorConfig?.getOptionalString("severityLogLevelMappings.critical") ?? "info"
|
|
13
|
+
};
|
|
14
|
+
const res = types.severityLogLevelMappingsSchema.safeParse(
|
|
15
|
+
severityLogLevelMappings
|
|
16
|
+
);
|
|
17
|
+
if (!res.success) {
|
|
18
|
+
const key = res.error.issues.at(0)?.path.at(0);
|
|
19
|
+
const value = res.error.issues.at(0).received;
|
|
20
|
+
const validKeys = res.error.issues.at(0).options;
|
|
21
|
+
throw new errors.InputError(
|
|
22
|
+
`The configuration value for 'backend.auditor.severityLogLevelMappings.${key}' was given an invalid value: '${value}'. Expected one of the following valid values: '${validKeys.join(
|
|
23
|
+
", "
|
|
24
|
+
)}'.`
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
return severityLogLevelMappings;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
exports.getSeverityLogLevelMappings = getSeverityLogLevelMappings;
|
|
31
|
+
//# sourceMappingURL=utils.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.cjs.js","sources":["../../../src/entrypoints/auditor/utils.ts"],"sourcesContent":["/*\n * Copyright 2025 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 type { Config } from '@backstage/config';\nimport { InputError } from '@backstage/errors';\nimport { z } from 'zod';\nimport { CONFIG_ROOT_KEY, severityLogLevelMappingsSchema } from './types';\n\n/**\n * Gets the `backend.auditor.severityLogLevelMappings` configuration.\n *\n * @param config - The root Backstage {@link @backstage/config#Config} object.\n * @returns The validated severity-to-log-level mappings.\n * @throws error - {@link @backstage/errors#InputError} if the mapping configuration is invalid.\n */\nexport function getSeverityLogLevelMappings(config: Config) {\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 severityLogLevelMappings;\n}\n"],"names":["CONFIG_ROOT_KEY","severityLogLevelMappingsSchema","InputError"],"mappings":";;;;;AA4BO,SAAS,4BAA4B,MAAgB,EAAA;AAC1D,EAAM,MAAA,aAAA,GAAgB,MAAO,CAAA,iBAAA,CAAkBA,qBAAe,CAAA;AAE9D,EAAA,MAAM,wBAA2B,GAAA;AAAA,IAC/B,GACE,EAAA,aAAA,EAAe,iBAAkB,CAAA,8BAA8B,CAC/D,IAAA,OAAA;AAAA,IACF,MACE,EAAA,aAAA,EAAe,iBAAkB,CAAA,iCAAiC,CAClE,IAAA,MAAA;AAAA,IACF,IACE,EAAA,aAAA,EAAe,iBAAkB,CAAA,+BAA+B,CAChE,IAAA,MAAA;AAAA,IACF,QACE,EAAA,aAAA,EAAe,iBAAkB,CAAA,mCAAmC,CACpE,IAAA;AAAA,GACJ;AAEA,EAAA,MAAM,MAAMC,oCAA+B,CAAA,SAAA;AAAA,IACzC;AAAA,GACF;AACA,EAAI,IAAA,CAAC,IAAI,OAAS,EAAA;AAChB,IAAM,MAAA,GAAA,GAAM,IAAI,KAAM,CAAA,MAAA,CAAO,GAAG,CAAC,CAAA,EAAG,IAAK,CAAA,EAAA,CAAG,CAAC,CAAA;AAC7C,IAAA,MAAM,QACJ,GAAI,CAAA,KAAA,CAAM,MAAO,CAAA,EAAA,CAAG,CAAC,CACrB,CAAA,QAAA;AACF,IAAA,MAAM,YACJ,GAAI,CAAA,KAAA,CAAM,MAAO,CAAA,EAAA,CAAG,CAAC,CACrB,CAAA,OAAA;AACF,IAAA,MAAM,IAAIC,iBAAA;AAAA,MACR,CAAyE,sEAAA,EAAA,GAAG,CAAkC,+BAAA,EAAA,KAAK,mDAAmD,SAAU,CAAA,IAAA;AAAA,QAC9K;AAAA,OACD,CAAA,EAAA;AAAA,KACH;AAAA;AAGF,EAAO,OAAA,wBAAA;AACT;;;;"}
|
package/dist/package.json.cjs.js
CHANGED
|
@@ -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.
|
|
6
|
+
var version = "0.11.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.
|
|
3
|
+
"version": "0.11.0-next.2",
|
|
4
4
|
"description": "Backend defaults used by Backstage backend apps",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "node-library"
|
|
@@ -224,7 +224,7 @@
|
|
|
224
224
|
"@aws-sdk/credential-providers": "^3.350.0",
|
|
225
225
|
"@aws-sdk/types": "^3.347.0",
|
|
226
226
|
"@azure/storage-blob": "^12.5.0",
|
|
227
|
-
"@backstage/backend-app-api": "1.2.4-next.
|
|
227
|
+
"@backstage/backend-app-api": "1.2.4-next.2",
|
|
228
228
|
"@backstage/backend-dev-utils": "0.1.5",
|
|
229
229
|
"@backstage/backend-plugin-api": "1.4.0-next.1",
|
|
230
230
|
"@backstage/cli-node": "0.2.13",
|
|
@@ -290,8 +290,8 @@
|
|
|
290
290
|
"devDependencies": {
|
|
291
291
|
"@aws-sdk/util-stream-node": "^3.350.0",
|
|
292
292
|
"@backstage/backend-plugin-api": "1.4.0-next.1",
|
|
293
|
-
"@backstage/backend-test-utils": "1.6.0-next.
|
|
294
|
-
"@backstage/cli": "0.
|
|
293
|
+
"@backstage/backend-test-utils": "1.6.0-next.2",
|
|
294
|
+
"@backstage/cli": "0.33.0-next.1",
|
|
295
295
|
"@google-cloud/cloud-sql-connector": "^1.4.0",
|
|
296
296
|
"@types/archiver": "^6.0.0",
|
|
297
297
|
"@types/base64-stream": "^1.0.2",
|