@backstage-community/plugin-servicenow-backend 1.13.1 → 1.14.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.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @backstage-community/plugin-servicenow-backend
|
|
2
2
|
|
|
3
|
+
## 1.14.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 3b2eddd: Backstage version bump to v1.54.7
|
|
8
|
+
- Updated dependencies [3b2eddd]
|
|
9
|
+
- @backstage-community/plugin-servicenow-common@1.13.1
|
|
10
|
+
|
|
11
|
+
## 1.14.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- ede61dd: Backstage version bump to v1.54.5
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- 7640966: Improve automated coverage for plugin init, Table API client query contracts, and frontend backend client wiring so Backstage version bumps fail in CI when those surfaces break. The backend client now includes the entity annotation field in ServiceNow incident queries.
|
|
20
|
+
- Updated dependencies [7640966]
|
|
21
|
+
- Updated dependencies [ede61dd]
|
|
22
|
+
- @backstage-community/plugin-servicenow-common@1.13.0
|
|
23
|
+
|
|
3
24
|
## 1.13.1
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -27,8 +27,6 @@ It provides an API that connects to your ServiceNow instance and returns inciden
|
|
|
27
27
|
|
|
28
28
|
Refer to [Configuration.md](../../docs/Configuration.md) for detailed setup instructions, including authentication and ServiceNow instance configuration.
|
|
29
29
|
|
|
30
|
-
##
|
|
30
|
+
## Contributing
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
package with `yarn start`. It is a limited setup that is most convenient when
|
|
34
|
-
developing the plugin backend itself.
|
|
32
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for the local `dev/` harness, config path notes, scoped tests, and curl smoke checklist.
|
|
@@ -37,6 +37,10 @@ class DefaultServiceNowClient {
|
|
|
37
37
|
responseFields.push(key);
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
+
if (options.u_backstage_entity_id) {
|
|
41
|
+
queryParts.push(`u_backstage_entity_id=${options.u_backstage_entity_id}`);
|
|
42
|
+
responseFields.push("u_backstage_entity_id");
|
|
43
|
+
}
|
|
40
44
|
if (options.userEmail) {
|
|
41
45
|
const id = await this.getUserSysIdByEmail(options.userEmail);
|
|
42
46
|
queryParts.push(`caller_id=${id}^ORopened_by=${id}^ORassigned_to=${id}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.cjs.js","sources":["../../src/service-now-rest/client.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 { LoggerService } from '@backstage/backend-plugin-api';\nimport {\n IncidentPick,\n PaginatedIncidents,\n} from '@backstage-community/plugin-servicenow-common';\nimport { ServiceNowConnection } from './connection';\n\nconst INCIDENT_QUERY_KEYS_ARRAY = [\n 'userEmail',\n 'u_backstage_entity_id',\n 'state',\n 'priority',\n 'search',\n 'limit',\n 'offset',\n 'order',\n 'orderBy',\n] as const;\n\nexport type IncidentQueryKeyString = (typeof INCIDENT_QUERY_KEYS_ARRAY)[number];\n\n// Plugin UI specific query parameters (pagination, search, ordering, tickets filter)\nexport type PredefinedIncidentQueryParams = {\n [K in IncidentQueryKeyString]?: K extends 'order'\n ? 'asc' | 'desc'\n : K extends 'limit' | 'offset'\n ? number\n : string;\n};\n\n// UI-specific query parameters joined with user's custom incident table fields query parameters\nexport type IncidentQueryParams = PredefinedIncidentQueryParams & {\n [key: string]: any;\n};\n\nexport type IncidentQueryKeys = keyof IncidentQueryParams;\n\nexport function isPredefinedIncidentQueryKey(keyName: string): boolean {\n return INCIDENT_QUERY_KEYS_ARRAY.includes(keyName as IncidentQueryKeyString);\n}\n\nexport interface ServiceNowClient {\n fetchIncidents(options: IncidentQueryParams): Promise<PaginatedIncidents>;\n}\n\nexport class DefaultServiceNowClient implements ServiceNowClient {\n constructor(\n private readonly conn: ServiceNowConnection,\n private readonly logger: LoggerService,\n ) {}\n\n async fetchIncidents(options: IncidentQueryParams): Promise<{\n items: IncidentPick[];\n totalCount: number;\n }> {\n const authHeaders = await this.conn.getAuthHeaders();\n const queryParts: string[] = [];\n\n const responseFields = [\n 'sys_id',\n 'number',\n 'short_description',\n 'description',\n 'sys_created_on',\n 'priority',\n 'incident_state',\n ];\n for (const [key, value] of Object.entries(options)) {\n if (!isPredefinedIncidentQueryKey(key)) {\n queryParts.push(`${key}=${value}`);\n responseFields.push(key);\n }\n }\n\n if (options.userEmail) {\n const id = await this.getUserSysIdByEmail(options.userEmail);\n queryParts.push(`caller_id=${id}^ORopened_by=${id}^ORassigned_to=${id}`);\n }\n\n if (options.state) queryParts.push(`state${options.state}`);\n if (options.priority) queryParts.push(`priority${options.priority}`);\n\n if (options.search) {\n const searchTerm = options.search;\n queryParts.push(\n `numberLIKE${searchTerm}^ORshort_descriptionLIKE${searchTerm}^ORdescriptionLIKE${searchTerm}`,\n );\n }\n\n if (options.orderBy) {\n queryParts.push(\n `${options.order === 'desc' ? 'ORDERBYDESC' : 'ORDERBY'}${\n options.orderBy\n }`,\n );\n }\n\n const sysparmQuery = queryParts.join('^');\n\n const params = new URLSearchParams();\n if (sysparmQuery) params.append('sysparm_query', sysparmQuery);\n if (options.limit !== undefined)\n params.append('sysparm_limit', String(options.limit));\n if (options.offset !== undefined)\n params.append('sysparm_offset', String(options.offset));\n\n params.append('sysparm_fields', responseFields.join(','));\n params.append('sysparm_count', 'true');\n\n const requestUrl = `api/now/table/incident?${params.toString()}`;\n this.logger.info(`Fetching incidents from ServiceNow: ${requestUrl}`);\n\n try {\n const response = await this.conn.getAxiosInstance().get(requestUrl, {\n headers: {\n ...authHeaders,\n Accept: 'application/json',\n },\n timeout: 30000,\n });\n\n const countHeader =\n response.headers['x-total-count'] ?? response.headers['X-Total-Count'];\n const totalCount = Number(countHeader ?? 0);\n\n const instanceUrl = this.conn.getInstanceUrl();\n const items =\n response.data?.result?.map((incident: any) => ({\n ...incident,\n url: `${instanceUrl}/nav_to.do?uri=incident.do?sys_id=${incident.sys_id}`,\n })) ?? [];\n\n return { items, totalCount };\n } catch (error: any) {\n this.logger.error(`Failed to fetch incidents: ${error.message}`, {\n error,\n });\n throw new Error(`Failed to fetch incidents: ${error.message}`);\n }\n }\n\n private async getUserSysIdByEmail(email: string): Promise<string | null> {\n const authHeaders = await this.conn.getAuthHeaders();\n const url = `api/now/table/sys_user?sysparm_query=email=${encodeURIComponent(\n email,\n )}&sysparm_fields=sys_id`;\n const response = await this.conn.getAxiosInstance().get(url, {\n headers: {\n ...authHeaders,\n Accept: 'application/json',\n },\n });\n const users = response.data?.result;\n if (users && users.length > 0) return users[0].sys_id;\n\n throw new Error(`User with email ${email} not found in ServiceNow.`);\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.cjs.js","sources":["../../src/service-now-rest/client.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 { LoggerService } from '@backstage/backend-plugin-api';\nimport {\n IncidentPick,\n PaginatedIncidents,\n} from '@backstage-community/plugin-servicenow-common';\nimport { ServiceNowConnection } from './connection';\n\nconst INCIDENT_QUERY_KEYS_ARRAY = [\n 'userEmail',\n 'u_backstage_entity_id',\n 'state',\n 'priority',\n 'search',\n 'limit',\n 'offset',\n 'order',\n 'orderBy',\n] as const;\n\nexport type IncidentQueryKeyString = (typeof INCIDENT_QUERY_KEYS_ARRAY)[number];\n\n// Plugin UI specific query parameters (pagination, search, ordering, tickets filter)\nexport type PredefinedIncidentQueryParams = {\n [K in IncidentQueryKeyString]?: K extends 'order'\n ? 'asc' | 'desc'\n : K extends 'limit' | 'offset'\n ? number\n : string;\n};\n\n// UI-specific query parameters joined with user's custom incident table fields query parameters\nexport type IncidentQueryParams = PredefinedIncidentQueryParams & {\n [key: string]: any;\n};\n\nexport type IncidentQueryKeys = keyof IncidentQueryParams;\n\nexport function isPredefinedIncidentQueryKey(keyName: string): boolean {\n return INCIDENT_QUERY_KEYS_ARRAY.includes(keyName as IncidentQueryKeyString);\n}\n\nexport interface ServiceNowClient {\n fetchIncidents(options: IncidentQueryParams): Promise<PaginatedIncidents>;\n}\n\nexport class DefaultServiceNowClient implements ServiceNowClient {\n constructor(\n private readonly conn: ServiceNowConnection,\n private readonly logger: LoggerService,\n ) {}\n\n async fetchIncidents(options: IncidentQueryParams): Promise<{\n items: IncidentPick[];\n totalCount: number;\n }> {\n const authHeaders = await this.conn.getAuthHeaders();\n const queryParts: string[] = [];\n\n const responseFields = [\n 'sys_id',\n 'number',\n 'short_description',\n 'description',\n 'sys_created_on',\n 'priority',\n 'incident_state',\n ];\n for (const [key, value] of Object.entries(options)) {\n if (!isPredefinedIncidentQueryKey(key)) {\n queryParts.push(`${key}=${value}`);\n responseFields.push(key);\n }\n }\n\n // Predefined entity annotation field (mapped from entityId by the validator).\n if (options.u_backstage_entity_id) {\n queryParts.push(`u_backstage_entity_id=${options.u_backstage_entity_id}`);\n responseFields.push('u_backstage_entity_id');\n }\n\n if (options.userEmail) {\n const id = await this.getUserSysIdByEmail(options.userEmail);\n queryParts.push(`caller_id=${id}^ORopened_by=${id}^ORassigned_to=${id}`);\n }\n\n if (options.state) queryParts.push(`state${options.state}`);\n if (options.priority) queryParts.push(`priority${options.priority}`);\n\n if (options.search) {\n const searchTerm = options.search;\n queryParts.push(\n `numberLIKE${searchTerm}^ORshort_descriptionLIKE${searchTerm}^ORdescriptionLIKE${searchTerm}`,\n );\n }\n\n if (options.orderBy) {\n queryParts.push(\n `${options.order === 'desc' ? 'ORDERBYDESC' : 'ORDERBY'}${\n options.orderBy\n }`,\n );\n }\n\n const sysparmQuery = queryParts.join('^');\n\n const params = new URLSearchParams();\n if (sysparmQuery) params.append('sysparm_query', sysparmQuery);\n if (options.limit !== undefined)\n params.append('sysparm_limit', String(options.limit));\n if (options.offset !== undefined)\n params.append('sysparm_offset', String(options.offset));\n\n params.append('sysparm_fields', responseFields.join(','));\n params.append('sysparm_count', 'true');\n\n const requestUrl = `api/now/table/incident?${params.toString()}`;\n this.logger.info(`Fetching incidents from ServiceNow: ${requestUrl}`);\n\n try {\n const response = await this.conn.getAxiosInstance().get(requestUrl, {\n headers: {\n ...authHeaders,\n Accept: 'application/json',\n },\n timeout: 30000,\n });\n\n const countHeader =\n response.headers['x-total-count'] ?? response.headers['X-Total-Count'];\n const totalCount = Number(countHeader ?? 0);\n\n const instanceUrl = this.conn.getInstanceUrl();\n const items =\n response.data?.result?.map((incident: any) => ({\n ...incident,\n url: `${instanceUrl}/nav_to.do?uri=incident.do?sys_id=${incident.sys_id}`,\n })) ?? [];\n\n return { items, totalCount };\n } catch (error: any) {\n this.logger.error(`Failed to fetch incidents: ${error.message}`, {\n error,\n });\n throw new Error(`Failed to fetch incidents: ${error.message}`);\n }\n }\n\n private async getUserSysIdByEmail(email: string): Promise<string | null> {\n const authHeaders = await this.conn.getAuthHeaders();\n const url = `api/now/table/sys_user?sysparm_query=email=${encodeURIComponent(\n email,\n )}&sysparm_fields=sys_id`;\n const response = await this.conn.getAxiosInstance().get(url, {\n headers: {\n ...authHeaders,\n Accept: 'application/json',\n },\n });\n const users = response.data?.result;\n if (users && users.length > 0) return users[0].sys_id;\n\n throw new Error(`User with email ${email} not found in ServiceNow.`);\n }\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage-community/plugin-servicenow-backend",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.14.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/index.cjs.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -36,21 +36,21 @@
|
|
|
36
36
|
"postpack": "backstage-cli package postpack"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@backstage-community/plugin-servicenow-common": "^1.
|
|
40
|
-
"@backstage/backend-defaults": "^0.17.
|
|
41
|
-
"@backstage/backend-plugin-api": "^1.
|
|
39
|
+
"@backstage-community/plugin-servicenow-common": "^1.13.1",
|
|
40
|
+
"@backstage/backend-defaults": "^0.17.8",
|
|
41
|
+
"@backstage/backend-plugin-api": "^1.10.0",
|
|
42
42
|
"@backstage/config": "^1.3.8",
|
|
43
43
|
"@backstage/errors": "^1.3.1",
|
|
44
|
-
"@backstage/plugin-catalog-node": "^2.2.
|
|
44
|
+
"@backstage/plugin-catalog-node": "^2.2.4",
|
|
45
45
|
"axios": "^1.18.0",
|
|
46
46
|
"express": "^4.17.1",
|
|
47
47
|
"express-promise-router": "^4.1.0",
|
|
48
48
|
"simple-oauth2": "^5.1.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@backstage/backend-test-utils": "^1.11.
|
|
52
|
-
"@backstage/cli": "^0.36.
|
|
53
|
-
"@backstage/plugin-catalog-node": "^2.2.
|
|
51
|
+
"@backstage/backend-test-utils": "^1.11.6",
|
|
52
|
+
"@backstage/cli": "^0.36.5",
|
|
53
|
+
"@backstage/plugin-catalog-node": "^2.2.4",
|
|
54
54
|
"@types/express": "^4.17.6",
|
|
55
55
|
"@types/qs": "^6",
|
|
56
56
|
"@types/simple-oauth2": "^5",
|