@forge/manifest 8.2.0-next.0 → 8.2.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.
- package/CHANGELOG.md +19 -0
- package/out/text/errors.d.ts +3 -0
- package/out/text/errors.d.ts.map +1 -1
- package/out/text/errors.js +4 -1
- package/out/types/egress-types.d.ts +2 -0
- package/out/types/egress-types.d.ts.map +1 -1
- package/out/types/egress-types.js +3 -1
- package/out/validators/permissions-validator.d.ts.map +1 -1
- package/out/validators/permissions-validator.js +72 -18
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @forge/manifest
|
|
2
2
|
|
|
3
|
+
## 8.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- df04fc6: Added command pallete module
|
|
8
|
+
- 94c1eda: Add warning for un-necessary usage of egress permissions
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- 08e248c: jira:command - add property to i18n test
|
|
13
|
+
- 39aaa43: Update i18n unit tests to ensure test only apply to modules mantained locally.
|
|
14
|
+
- c01ab1f: Update manifest definitions
|
|
15
|
+
|
|
16
|
+
## 8.2.0-next.1
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- 39aaa43: Update i18n unit tests to ensure test only apply to modules mantained locally.
|
|
21
|
+
|
|
3
22
|
## 8.2.0-next.0
|
|
4
23
|
|
|
5
24
|
### Minor Changes
|
package/out/text/errors.d.ts
CHANGED
|
@@ -22,6 +22,9 @@ export declare const errors: {
|
|
|
22
22
|
missingEndpointPermissionFromScope: (scope: string, key: string) => string;
|
|
23
23
|
missingRemotePermissionFromScope: (scope: string, key: string) => string;
|
|
24
24
|
deprecatedPermission: (element: string, value: string[]) => string;
|
|
25
|
+
globalUrlNotRecommended: (element: string) => string;
|
|
26
|
+
imageUrlNotRecommended: (element: string, value: string) => string;
|
|
27
|
+
fontAndStylesNotRecommended: (element: string) => string;
|
|
25
28
|
};
|
|
26
29
|
connectModules: {
|
|
27
30
|
invalidConnectModule: (module: string) => string;
|
package/out/text/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,eAAO,MAAM,MAAM;8BACS,MAAM,KAAG,MAAM;2BACpB,MAAM;yBAEN,MAAM,GAAG,SAAS,QAAQ,MAAM,EAAE,UAAU,MAAM,GAAG,SAAS,KAAG,MAAM;;uBAO3E,MAAM,EAAE,EAAE,GAAG,SAAS,KAAG,MAAM;4BAI1B,MAAM,EAAE,KAAG,MAAM;mCACV,MAAM,SAAS,MAAM,mBAAmB,MAAM,KAAG,MAAM;mDAIvC,MAAM,KAAG,MAAM;4BAEtC,MAAM,EAAE,GAAG,SAAS,KAAG,MAAM;+CAIV,MAAM;6CACR,MAAM,gBAAgB,MAAM;qCAEpC,MAAM;2CACA,MAAM;6CACJ,MAAM;;;qCAGd,MAAM,SAAS,MAAM,KAAG,MAAM;4CAEvB,MAAM,SAAS,MAAM,KAAG,MAAM;oDAEtB,MAAM,OAAO,MAAM,KAAG,MAAM;kDAE9B,MAAM,OAAO,MAAM,KAAG,MAAM;wCAEtC,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM;;;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"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"}
|
package/out/text/errors.js
CHANGED
|
@@ -33,7 +33,10 @@ exports.errors = {
|
|
|
33
33
|
missingPermissionFromScope: (scope, event) => `Trigger event: '${event}' requires '${scope}' scope`,
|
|
34
34
|
missingEndpointPermissionFromScope: (scope, key) => `Endpoint module: '${key}' requires '${scope}' scope.`,
|
|
35
35
|
missingRemotePermissionFromScope: (scope, key) => `Remote: '${key}' requires '${scope}' scope.`,
|
|
36
|
-
deprecatedPermission: (element, value) => `There are deprecated scopes '${element}' in the manifest.yml file: '${value.join(', ')}'. You need to update this app to use new scopes and remove the deprecated scopes. Learn more at: https://go.atlassian.com/forge-permissions
|
|
36
|
+
deprecatedPermission: (element, value) => `There are deprecated scopes '${element}' in the manifest.yml file: '${value.join(', ')}'. You need to update this app to use new scopes and remove the deprecated scopes. Learn more at: https://go.atlassian.com/forge-permissions.`,
|
|
37
|
+
globalUrlNotRecommended: (element) => `Global URL usage detected for '${element}' permission in the manifest.yml file. We recommend using a more specific URL.`,
|
|
38
|
+
imageUrlNotRecommended: (element, value) => `Unnecessary URL detected for '${element}' permission in the manifest.yml file. Your app should not need the URL '${value}' to work properly.`,
|
|
39
|
+
fontAndStylesNotRecommended: (element) => `Unnecessary usage of '${element}' permission in the manifest.yml file. You can avoid using this permission by packaging the fonts and styles with your app code.`
|
|
37
40
|
},
|
|
38
41
|
connectModules: {
|
|
39
42
|
invalidConnectModule: (module) => `invalid value '${module}' in connectModules`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"egress-types.d.ts","sourceRoot":"","sources":["../../src/types/egress-types.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY;;CAExB,CAAC"}
|
|
1
|
+
{"version":3,"file":"egress-types.d.ts","sourceRoot":"","sources":["../../src/types/egress-types.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY;;CAExB,CAAC;AAEF,eAAO,MAAM,UAAU,MAAM,CAAC;AAE9B,eAAO,MAAM,WAAW,UAAmD,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EGRESS_TYPES = void 0;
|
|
3
|
+
exports.AVATAR_URLS = exports.GLOBAL_URL = exports.EGRESS_TYPES = void 0;
|
|
4
4
|
const ALLOWED_CSP_UNSAFE_SOURCES = ['unsafe-eval', 'unsafe-hashes', 'unsafe-inline'];
|
|
5
5
|
const ALLOWED_CSP_SCHEMA_SOURCES = ['blob:'];
|
|
6
6
|
exports.EGRESS_TYPES = {
|
|
7
7
|
ALLOWED_CSP_TYPES: [...ALLOWED_CSP_UNSAFE_SOURCES, ...ALLOWED_CSP_SCHEMA_SOURCES]
|
|
8
8
|
};
|
|
9
|
+
exports.GLOBAL_URL = '*';
|
|
10
|
+
exports.AVATAR_URLS = ['*.gravatar.com', '*.wp.com', '*.atl-paas.net'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions-validator.d.ts","sourceRoot":"","sources":["../../src/validators/permissions-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAmB,MAAM,UAAU,CAAC;AAGrF,OAAO,EAAE,cAAc,EAAU,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAM3D,qBAAa,oBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IAEzF,OAAO,CAAC,UAAU;IA+BlB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,8BAA8B;
|
|
1
|
+
{"version":3,"file":"permissions-validator.d.ts","sourceRoot":"","sources":["../../src/validators/permissions-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAmB,MAAM,UAAU,CAAC;AAGrF,OAAO,EAAE,cAAc,EAAU,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAM3D,qBAAa,oBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IAEzF,OAAO,CAAC,UAAU;IA+BlB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,8BAA8B;IA6ChC,QAAQ,CACZ,QAAQ,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,GACnD,OAAO,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;CAoGrD"}
|
|
@@ -58,6 +58,36 @@ class PermissionsValidator {
|
|
|
58
58
|
if (invalidPerms?.length) {
|
|
59
59
|
this.addValidationErrors(result, extPermType, invalidPerms, manifest);
|
|
60
60
|
}
|
|
61
|
+
const globalUrl = perms?.find((key) => key === egress_types_1.GLOBAL_URL);
|
|
62
|
+
if (globalUrl) {
|
|
63
|
+
result.push({
|
|
64
|
+
message: text_1.errors.permissions.globalUrlNotRecommended(extPermType),
|
|
65
|
+
reference: text_1.References.Permissions,
|
|
66
|
+
level: 'warning',
|
|
67
|
+
...(0, utils_1.findPosition)(extPermType.split('.')[1], manifest.yamlContentByLine)
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (['external.styles', 'external.fonts'].includes(extPermType) && perms?.length) {
|
|
71
|
+
result.push({
|
|
72
|
+
message: text_1.errors.permissions.fontAndStylesNotRecommended(extPermType),
|
|
73
|
+
reference: text_1.References.Permissions,
|
|
74
|
+
level: 'warning',
|
|
75
|
+
...(0, utils_1.findPosition)(extPermType.split('.')[1], manifest.yamlContentByLine)
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
if (extPermType === 'external.images') {
|
|
79
|
+
const invalidImageUrls = perms?.filter((key) => egress_types_1.AVATAR_URLS.includes(key));
|
|
80
|
+
if (invalidImageUrls?.length) {
|
|
81
|
+
invalidImageUrls.forEach((imageUrl) => {
|
|
82
|
+
result.push({
|
|
83
|
+
message: text_1.errors.permissions.imageUrlNotRecommended(extPermType, imageUrl),
|
|
84
|
+
reference: text_1.References.Permissions,
|
|
85
|
+
level: 'warning',
|
|
86
|
+
...(0, utils_1.findPosition)(extPermType.split('.')[1], manifest.yamlContentByLine)
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
61
91
|
}
|
|
62
92
|
async validate(manifest) {
|
|
63
93
|
if (!manifest || !manifest.typedContent || !manifest.typedContent.permissions) {
|
|
@@ -76,10 +106,45 @@ class PermissionsValidator {
|
|
|
76
106
|
if (invalidScripts?.length) {
|
|
77
107
|
this.addValidationErrors(errors, 'content.scripts', invalidScripts, manifest);
|
|
78
108
|
}
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
109
|
+
const mapping = [
|
|
110
|
+
{
|
|
111
|
+
element: 'external.fetch.backend',
|
|
112
|
+
perms: manifest.typedContent.permissions.external?.fetch?.backend?.filter((key) => typeof key === 'string')
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
element: 'external.fetch.client',
|
|
116
|
+
perms: manifest.typedContent.permissions.external?.fetch?.client?.filter((key) => typeof key === 'string')
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
element: 'external.navigation',
|
|
120
|
+
perms: manifest.typedContent.permissions.external?.navigation
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
element: 'external.styles',
|
|
124
|
+
perms: manifest.typedContent.permissions.external?.styles
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
element: 'external.frames',
|
|
128
|
+
perms: manifest.typedContent.permissions.external?.frames
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
element: 'external.fonts',
|
|
132
|
+
perms: manifest.typedContent.permissions.external?.fonts
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
element: 'external.images',
|
|
136
|
+
perms: manifest.typedContent.permissions.external?.images
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
element: 'external.media',
|
|
140
|
+
perms: manifest.typedContent.permissions.external?.media
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
element: 'external.scripts',
|
|
144
|
+
perms: manifest.typedContent.permissions.external?.scripts
|
|
145
|
+
}
|
|
146
|
+
];
|
|
147
|
+
mapping.forEach((item) => this.validateExternalPermissionURLs(errors, item.element, item.perms, manifest));
|
|
83
148
|
const remoteMap = manifest.typedContent.remotes?.reduce((prev, item) => {
|
|
84
149
|
const baseUrl = typeof item.baseUrl === 'string' ? item.baseUrl : item.baseUrl.default;
|
|
85
150
|
return prev.set(item.key, baseUrl);
|
|
@@ -91,24 +156,13 @@ class PermissionsValidator {
|
|
|
91
156
|
if (invalidBackendRemotes?.length) {
|
|
92
157
|
this.addValidationErrors(errors, 'external.fetch.backend', invalidBackendRemotes, manifest);
|
|
93
158
|
}
|
|
94
|
-
const
|
|
95
|
-
if (invalidClientStrings) {
|
|
96
|
-
this.addValidationErrors(errors, 'external.fetch.client', invalidClientStrings, manifest);
|
|
97
|
-
}
|
|
98
|
-
const invalidClients = manifest.typedContent.permissions.external?.fetch?.client
|
|
159
|
+
const invalidClientRemotes = manifest.typedContent.permissions.external?.fetch?.client
|
|
99
160
|
?.filter((item) => typeof item === 'object' &&
|
|
100
161
|
(!remoteMap || !remoteMap.has(item.remote) || !this.isValidURL(remoteMap.get(item.remote))))
|
|
101
162
|
.map((item) => item.remote);
|
|
102
|
-
if (
|
|
103
|
-
this.addValidationErrors(errors, 'external.fetch.client',
|
|
163
|
+
if (invalidClientRemotes?.length) {
|
|
164
|
+
this.addValidationErrors(errors, 'external.fetch.client', invalidClientRemotes, manifest);
|
|
104
165
|
}
|
|
105
|
-
this.validateExternalPermissionURLs(errors, 'external.navigation', manifest.typedContent.permissions.external?.navigation, manifest);
|
|
106
|
-
this.validateExternalPermissionURLs(errors, 'external.images', manifest.typedContent.permissions.external?.images, manifest);
|
|
107
|
-
this.validateExternalPermissionURLs(errors, 'external.frames', manifest.typedContent.permissions.external?.frames, manifest);
|
|
108
|
-
this.validateExternalPermissionURLs(errors, 'external.scripts', manifest.typedContent.permissions.external?.scripts, manifest);
|
|
109
|
-
this.validateExternalPermissionURLs(errors, 'external.styles', manifest.typedContent.permissions.external?.styles, manifest);
|
|
110
|
-
this.validateExternalPermissionURLs(errors, 'external.media', manifest.typedContent.permissions.external?.media, manifest);
|
|
111
|
-
this.validateExternalPermissionURLs(errors, 'external.fonts', manifest.typedContent.permissions.external?.fonts, manifest);
|
|
112
166
|
return {
|
|
113
167
|
success: errors.length === 0,
|
|
114
168
|
errors
|