@forge/manifest 2.1.0 → 2.2.0-next.3

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.
@@ -0,0 +1,191 @@
1
+ [
2
+ "access-email-addresses:connect-jira",
3
+ "act-as-user:connect-jira",
4
+ "admin:connect-jira",
5
+ "delete:connect-jira",
6
+ "delete:content:confluence",
7
+ "delete:space:confluence",
8
+ "manage:confluence-configuration",
9
+ "manage:jira-configuration",
10
+ "manage:jira-data-provider",
11
+ "manage:jira-project",
12
+ "manage:jira-webhook",
13
+ "project-admin:connect-jira",
14
+ "read:account",
15
+ "read:component:compass",
16
+ "read:confluence-content.all",
17
+ "read:confluence-content.permission",
18
+ "read:confluence-content.summary",
19
+ "read:confluence-groups",
20
+ "read:confluence-props",
21
+ "read:confluence-space.summary",
22
+ "read:confluence-user",
23
+ "read:connect-jira",
24
+ "read:event:compass",
25
+ "read:jira-user",
26
+ "read:jira-work",
27
+ "read:me",
28
+ "read:scorecard:compass",
29
+ "readonly:analytics.content:confluence",
30
+ "readonly:attachment:confluence",
31
+ "readonly:audit-log:confluence",
32
+ "readonly:audit-log:jira",
33
+ "readonly:avatar:jira",
34
+ "readonly:board-scope.admin:jira-software",
35
+ "readonly:board-scope:jira-software",
36
+ "readonly:build:jira-software",
37
+ "readonly:configuration:confluence",
38
+ "readonly:configuration:jira",
39
+ "readonly:content.attachment:confluence",
40
+ "readonly:content.comment:confluence",
41
+ "readonly:content.inlinetask:confluence",
42
+ "readonly:content.label:confluence",
43
+ "readonly:content.permission:confluence",
44
+ "readonly:content.property:confluence",
45
+ "readonly:content.restriction:confluence",
46
+ "readonly:content.summary:confluence",
47
+ "readonly:content.template:confluence",
48
+ "readonly:content.watcher:confluence",
49
+ "readonly:content:confluence",
50
+ "readonly:dashboard.property:jira",
51
+ "readonly:dashboard:jira",
52
+ "readonly:deployment:jira-software",
53
+ "readonly:epic:jira-software",
54
+ "readonly:feature-flag:jira-software",
55
+ "readonly:field-configuration-scheme:jira",
56
+ "readonly:field:jira",
57
+ "readonly:filter:jira",
58
+ "readonly:group:confluence",
59
+ "readonly:group:jira",
60
+ "readonly:information:jira",
61
+ "readonly:instance:jira",
62
+ "readonly:issue-link-type:jira",
63
+ "readonly:issue-security-scheme:jira",
64
+ "readonly:issue-type-scheme:jira",
65
+ "readonly:issue-type-screen-scheme:jira",
66
+ "readonly:issue-type.property:jira",
67
+ "readonly:issue-type:jira",
68
+ "readonly:issue.attachment:jira",
69
+ "readonly:issue.comment.property:jira",
70
+ "readonly:issue.comment:jira",
71
+ "readonly:issue.link:jira",
72
+ "readonly:issue.property:jira",
73
+ "readonly:issue.remote-link:jira",
74
+ "readonly:issue.time-tracking:jira",
75
+ "readonly:issue.watchers:jira",
76
+ "readonly:issue.workflow:jira",
77
+ "readonly:issue.worklog.property:jira",
78
+ "readonly:issue.worklog:jira",
79
+ "readonly:issue:jira",
80
+ "readonly:issue:jira-software",
81
+ "readonly:label:jira",
82
+ "readonly:notification-scheme:jira",
83
+ "readonly:permissions:jira",
84
+ "readonly:priority:jira",
85
+ "readonly:project-category:jira",
86
+ "readonly:project.components:jira",
87
+ "readonly:project.permissions:jira",
88
+ "readonly:project.property:jira",
89
+ "readonly:project.version:jira",
90
+ "readonly:project:jira",
91
+ "readonly:relation:confluence",
92
+ "readonly:remote-link:jira-software",
93
+ "readonly:resolution:jira",
94
+ "readonly:role:jira",
95
+ "readonly:screen:jira",
96
+ "readonly:source-code:jira-software",
97
+ "readonly:space.permission:confluence",
98
+ "readonly:space.property:confluence",
99
+ "readonly:space.setting:confluence",
100
+ "readonly:space:confluence",
101
+ "readonly:sprint:jira-software",
102
+ "readonly:status:jira",
103
+ "readonly:user-group:jira",
104
+ "readonly:user.property:jira",
105
+ "readonly:user:confluence",
106
+ "readonly:user:jira",
107
+ "readonly:webhook:jira",
108
+ "readonly:workflow.property:jira",
109
+ "readonly:workflow:jira",
110
+ "search:confluence",
111
+ "search:issue:jira",
112
+ "search:jira",
113
+ "search:user:jira",
114
+ "send:notification:jira",
115
+ "storage:app",
116
+ "write:component:compass",
117
+ "write:confluence-content",
118
+ "write:confluence-file",
119
+ "write:confluence-groups",
120
+ "write:confluence-props",
121
+ "write:confluence-space",
122
+ "write:connect-jira",
123
+ "write:event:compass",
124
+ "write:jira-work",
125
+ "write:scorecard:compass",
126
+ "writeonly:attachment:confluence",
127
+ "writeonly:audit-log:confluence",
128
+ "writeonly:avatar:jira",
129
+ "writeonly:board-scope.admin:jira-software",
130
+ "writeonly:board-scope:jira-software",
131
+ "writeonly:build:jira-software",
132
+ "writeonly:configuration:confluence",
133
+ "writeonly:content.inlinetask:confluence",
134
+ "writeonly:content.label:confluence",
135
+ "writeonly:content.property:confluence",
136
+ "writeonly:content.restriction:confluence",
137
+ "writeonly:content.template:confluence",
138
+ "writeonly:content.watcher:confluence",
139
+ "writeonly:content:confluence",
140
+ "writeonly:dashboard.property:jira",
141
+ "writeonly:dashboard:jira",
142
+ "writeonly:deployment:jira-software",
143
+ "writeonly:epic:jira-software",
144
+ "writeonly:feature-flag:jira-software",
145
+ "writeonly:field-configuration-scheme:jira",
146
+ "writeonly:field:jira",
147
+ "writeonly:filter:jira",
148
+ "writeonly:group:confluence",
149
+ "writeonly:group:jira",
150
+ "writeonly:issue-link-type:jira",
151
+ "writeonly:issue-type-scheme:jira",
152
+ "writeonly:issue-type-screen-scheme:jira",
153
+ "writeonly:issue-type.property:jira",
154
+ "writeonly:issue-type:jira",
155
+ "writeonly:issue.attachment:jira",
156
+ "writeonly:issue.comment.property:jira",
157
+ "writeonly:issue.comment:jira",
158
+ "writeonly:issue.link:jira",
159
+ "writeonly:issue.property:jira",
160
+ "writeonly:issue.remote-link:jira",
161
+ "writeonly:issue.time-tracking:jira",
162
+ "writeonly:issue.watchers:jira",
163
+ "writeonly:issue.workflow:jira",
164
+ "writeonly:issue.worklog.property:jira",
165
+ "writeonly:issue.worklog:jira",
166
+ "writeonly:issue:jira",
167
+ "writeonly:issue:jira-software",
168
+ "writeonly:permissions:jira",
169
+ "writeonly:project-category:jira",
170
+ "writeonly:project.components:jira",
171
+ "writeonly:project.permissions:jira",
172
+ "writeonly:project.property:jira",
173
+ "writeonly:project.version:jira",
174
+ "writeonly:project:jira",
175
+ "writeonly:relation:confluence",
176
+ "writeonly:remote-link:jira-software",
177
+ "writeonly:role:jira",
178
+ "writeonly:screen:jira",
179
+ "writeonly:source-code:jira-software",
180
+ "writeonly:space.permission:confluence",
181
+ "writeonly:space.property:confluence",
182
+ "writeonly:space.setting:confluence",
183
+ "writeonly:space:confluence",
184
+ "writeonly:sprint:jira-software",
185
+ "writeonly:user-group:jira",
186
+ "writeonly:user.property:jira",
187
+ "writeonly:user:jira",
188
+ "writeonly:webhook:jira",
189
+ "writeonly:workflow.property:jira",
190
+ "writeonly:workflow:jira"
191
+ ]
@@ -38,6 +38,9 @@ export declare const errors: {
38
38
  fullPage: {
39
39
  children: (moduleType: string) => string;
40
40
  };
41
+ customFields: {
42
+ searchAlias: (aliases: string[]) => string;
43
+ };
41
44
  function: {
42
45
  invalidKeyLength: (key: string) => string;
43
46
  handler: {
@@ -60,6 +63,7 @@ export declare const errors: {
60
63
  providers: {
61
64
  missingRemote: (provider: string, remote: string) => string;
62
65
  missingEgress: (remote: string) => string;
66
+ missingProfileFunction: (provider: string, functionKey: string) => string;
63
67
  };
64
68
  app: {
65
69
  missingAppConnectRemote: () => string;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"AAGA,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,0CAA4B,MAAM;mDAIvC,MAAM,KAAG,MAAM;;;qCAI7B,MAAM,SAAS,MAAM,KAAG,MAAM;4CAEvB,MAAM,SAAS,MAAM,KAAG,MAAM;;;uCAInC,MAAM,KAAG,MAAM;oCACpB,MAAM;iCAEP,MAAM,KAAG,MAAM;4CACJ,MAAM,KAAG,MAAM;;;gCAG3B,MAAM,KAAG,MAAM;6BACpB,MAAM;+BACJ,MAAM;iCACF,MAAM,KAAG,MAAM;yCACP,MAAM,eAAe,MAAM,KAAG,MAAM;yCAEpC,MAAM,eAAe,MAAM,KAAG,MAAM;;yCAGtC,MAAM,KAAG,MAAM;iCAEvB,MAAM,KAAG,MAAM;4CACJ,MAAM,gBAAgB,MAAM,KAAG,MAAM;sCAE3C,MAAM,gBAAgB,MAAM,gBAAgB,MAAM,KAAG,MAAM;;;mCAI9D,MAAM,KAAG,MAAM;mCAEf,MAAM,KAAG,MAAM;;;mCAIf,MAAM,KAAG,MAAM;;;oCAId,MAAM,KAAG,MAAM;;oCAEjB,MAAM,SAAS,MAAM,KAAG,MAAM;qCAI7B,MAAM,YAAY,MAAM,KAAG,MAAM;;;;;mCAQ/B,MAAM,OAAO,MAAM,KAAG,MAAM;iCAE9B,MAAM,OAAO,MAAM,KAAG,MAAM;oCAEzB,MAAM,OAAO,MAAM,KAAG,MAAM;uCAEzB,MAAM,KAAG,MAAM;;;;;;;;kCAQpB,MAAM,UAAU,MAAM,KAAG,MAAM;gCAEjC,MAAM,KAAG,MAAM;;;uCAIV,MAAM;uCAEJ,MAAM,KAAG,MAAM;;CAGjD,CAAC;AAEF,oBAAY,UAAU;IACpB,eAAe,2BAA2B;IAC1C,eAAe,wBAAwB;IACvC,WAAW,4BAA4B;IACvC,WAAW,+BAA+B;IAC1C,aAAa,8BAA8B;IAC3C,OAAO,0BAA0B;IACjC,cAAc,kCAAkC;IAChD,mBAAmB,0BAA0B;IAC7C,SAAS,4BAA4B;IACrC,SAAS,4BAA4B;IACrC,UAAU,wBAAwB;IAClC,GAAG,8BAA8B;CAClC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/text/errors.ts"],"names":[],"mappings":"AAGA,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,0CAA4B,MAAM;mDAIvC,MAAM,KAAG,MAAM;;;qCAI7B,MAAM,SAAS,MAAM,KAAG,MAAM;4CAEvB,MAAM,SAAS,MAAM,KAAG,MAAM;;;uCAInC,MAAM,KAAG,MAAM;oCACpB,MAAM;iCAEP,MAAM,KAAG,MAAM;4CACJ,MAAM,KAAG,MAAM;;;gCAG3B,MAAM,KAAG,MAAM;6BACpB,MAAM;+BACJ,MAAM;iCACF,MAAM,KAAG,MAAM;yCACP,MAAM,eAAe,MAAM,KAAG,MAAM;yCAEpC,MAAM,eAAe,MAAM,KAAG,MAAM;;yCAGtC,MAAM,KAAG,MAAM;iCAEvB,MAAM,KAAG,MAAM;4CACJ,MAAM,gBAAgB,MAAM,KAAG,MAAM;sCAE3C,MAAM,gBAAgB,MAAM,gBAAgB,MAAM,KAAG,MAAM;;;mCAI9D,MAAM,KAAG,MAAM;mCAEf,MAAM,KAAG,MAAM;;;mCAIf,MAAM,KAAG,MAAM;;;mCAIf,MAAM,EAAE,KAAG,MAAM;;;oCAIhB,MAAM,KAAG,MAAM;;oCAEjB,MAAM,SAAS,MAAM,KAAG,MAAM;qCAI7B,MAAM,YAAY,MAAM,KAAG,MAAM;;;;;mCAQ/B,MAAM,OAAO,MAAM,KAAG,MAAM;iCAE9B,MAAM,OAAO,MAAM,KAAG,MAAM;oCAEzB,MAAM,OAAO,MAAM,KAAG,MAAM;uCAEzB,MAAM,KAAG,MAAM;;;;;;;;kCAQpB,MAAM,UAAU,MAAM,KAAG,MAAM;gCAEjC,MAAM,KAAG,MAAM;2CAEJ,MAAM,eAAe,MAAM,KAAG,MAAM;;;uCAI1C,MAAM;uCAEJ,MAAM,KAAG,MAAM;;CAGjD,CAAC;AAEF,oBAAY,UAAU;IACpB,eAAe,2BAA2B;IAC1C,eAAe,wBAAwB;IACvC,WAAW,4BAA4B;IACvC,WAAW,+BAA+B;IAC1C,aAAa,8BAA8B;IAC3C,OAAO,0BAA0B;IACjC,cAAc,kCAAkC;IAChD,mBAAmB,0BAA0B;IAC7C,SAAS,4BAA4B;IACrC,SAAS,4BAA4B;IACrC,UAAU,wBAAwB;IAClC,GAAG,8BAA8B;CAClC"}
@@ -50,6 +50,9 @@ exports.errors = {
50
50
  fullPage: {
51
51
  children: (moduleType) => `Only a single entry of the ${moduleType} module can be defined in the manifest`
52
52
  },
53
+ customFields: {
54
+ searchAlias: (aliases) => `Search alias should be always unique per field. Found duplicates: ${aliases.join(', ')}.`
55
+ },
53
56
  function: {
54
57
  invalidKeyLength: (key) => `The function key exceeds 23 characters: ‘${key}’.`,
55
58
  handler: {
@@ -71,7 +74,8 @@ exports.errors = {
71
74
  },
72
75
  providers: {
73
76
  missingRemote: (provider, remote) => `missing remote '${remote}' is being referenced by '${provider}' in providers`,
74
- missingEgress: (remote) => `missing egress permissions for remote '${remote}'. Please add the remote to permissions.fetch`
77
+ missingEgress: (remote) => `missing egress permissions for remote '${remote}'. Please add the remote to permissions.fetch`,
78
+ missingProfileFunction: (provider, functionKey) => `missing function '${functionKey}' is being referenced by '${provider}' in providers`
75
79
  },
76
80
  app: {
77
81
  missingAppConnectRemote: () => `missing app.connect.remote. app.connect.remote is required if connectModules are present.`,
@@ -1,6 +1,5 @@
1
1
  export * from './errors';
2
2
  export * from './module-types';
3
3
  export * from './constants';
4
- export * from './scopes-types';
5
4
  export * from './validation-types';
6
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC"}
@@ -4,5 +4,4 @@ const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./errors"), exports);
5
5
  tslib_1.__exportStar(require("./module-types"), exports);
6
6
  tslib_1.__exportStar(require("./constants"), exports);
7
- tslib_1.__exportStar(require("./scopes-types"), exports);
8
7
  tslib_1.__exportStar(require("./validation-types"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"modules-validator.d.ts","sourceRoot":"","sources":["../../src/validators/modules-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAE,wBAAwB,EAAsC,MAAM,UAAU,CAAC;AAGxH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAK3D,qBAAa,gBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IACzF,OAAO,CAAC,oBAAoB,CAA0C;IAEtE,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,wBAAwB,CAAC,cAAc,CAAC;CAuKzG"}
1
+ {"version":3,"file":"modules-validator.d.ts","sourceRoot":"","sources":["../../src/validators/modules-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAE,wBAAwB,EAAsC,MAAM,UAAU,CAAC;AAGxH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAK3D,qBAAa,gBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IACzF,OAAO,CAAC,oBAAoB,CAA0C;IAEtE,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,wBAAwB,CAAC,cAAc,CAAC;CAgMzG"}
@@ -92,6 +92,22 @@ class ModulesValidator {
92
92
  validationErrors.push(Object.assign({ message: text_1.errors.modules.fullPage.children(moduleType), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition(module[1].key, yamlContentByLine)));
93
93
  }
94
94
  });
95
+ [types_1.AllModuleTypes.JiraCustomField, types_1.AllModuleTypes.JiraCustomFieldType].forEach((moduleType) => {
96
+ var _a;
97
+ (_a = modules[moduleType]) === null || _a === void 0 ? void 0 : _a.forEach((module) => {
98
+ if (!module || module.type !== 'object' || !module.schema)
99
+ return;
100
+ const getAliases = (properties = {}) => Object.values(properties)
101
+ .map((v) => [v.searchAlias, ...getAliases(v.properties)])
102
+ .reduce((acc, val) => acc.concat(val), [])
103
+ .filter(Boolean);
104
+ const aliases = getAliases(module.schema.properties);
105
+ const duplicates = Array.from(new Set(aliases.filter((item, index) => aliases.indexOf(item) != index)));
106
+ if (duplicates.length) {
107
+ validationErrors.push(Object.assign({ message: text_1.errors.modules.customFields.searchAlias(duplicates), reference: text_1.References.Modules, level: 'error' }, utils_1.findPosition(module.key, yamlContentByLine)));
108
+ }
109
+ });
110
+ });
95
111
  }
96
112
  return {
97
113
  success: validationErrors.length === 0,
@@ -1 +1 @@
1
- {"version":3,"file":"permissions-validator.d.ts","sourceRoot":"","sources":["../../src/validators/permissions-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,wBAAwB,EAAmB,MAAM,UAAU,CAAC;AAGjG,OAAO,EAAE,cAAc,EAAU,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAI3D,qBAAa,oBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IACzF,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,wBAAwB,CAAC,cAAc,CAAC;CAwHzG"}
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;AAK3D,qBAAa,oBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IACzF,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,wBAAwB,CAAC,cAAc,CAAC;CAwHzG"}
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PermissionsValidator = void 0;
4
- const types_1 = require("../types");
4
+ const tslib_1 = require("tslib");
5
5
  const utils_1 = require("../utils");
6
6
  const text_1 = require("../text");
7
7
  const egress_types_1 = require("../types/egress-types");
8
8
  const url_1 = require("url");
9
+ const shipyard_scopes_json_1 = tslib_1.__importDefault(require("../scopes/shipyard-scopes.json"));
9
10
  class PermissionsValidator {
10
11
  validate(manifest) {
11
12
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
@@ -53,7 +54,7 @@ class PermissionsValidator {
53
54
  return false;
54
55
  }
55
56
  }
56
- const invalidScope = (_a = manifest.typedContent.permissions.scopes) === null || _a === void 0 ? void 0 : _a.find((key) => !types_1.ALL_SCOPES.includes(key));
57
+ const invalidScope = (_a = manifest.typedContent.permissions.scopes) === null || _a === void 0 ? void 0 : _a.find((key) => !shipyard_scopes_json_1.default.includes(key));
57
58
  if (invalidScope) {
58
59
  addValidationError('scopes', invalidScope, manifest);
59
60
  }
@@ -3,5 +3,6 @@ import { ManifestSchema } from '../schema/manifest';
3
3
  import { ValidatorInterface } from './validator-interface';
4
4
  export declare class ProvidersValidator implements ValidatorInterface<ManifestObject<ManifestSchema> | undefined, ManifestSchema> {
5
5
  validate(manifest: ManifestObject<ManifestSchema> | undefined): ManifestValidationResult<ManifestSchema>;
6
+ private isValidProfileRetrieverFunction;
6
7
  }
7
8
  //# sourceMappingURL=providers-validator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"providers-validator.d.ts","sourceRoot":"","sources":["../../src/validators/providers-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAmB,MAAM,UAAU,CAAC;AAGrF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,qBAAa,kBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IACzF,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,wBAAwB,CAAC,cAAc,CAAC;CAuEzG"}
1
+ {"version":3,"file":"providers-validator.d.ts","sourceRoot":"","sources":["../../src/validators/providers-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAmB,MAAM,UAAU,CAAC;AAGrF,OAAO,EAA8C,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,qBAAa,kBACX,YAAW,kBAAkB,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,cAAc,CAAC;IACzF,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,SAAS,GAAG,wBAAwB,CAAC,cAAc,CAAC;IA+ExG,OAAO,CAAC,+BAA+B;CAiBxC"}
@@ -46,10 +46,26 @@ class ProvidersValidator {
46
46
  });
47
47
  }
48
48
  });
49
+ auth === null || auth === void 0 ? void 0 : auth.forEach((provider) => {
50
+ const message = this.isValidProfileRetrieverFunction(provider, manifest);
51
+ if (message) {
52
+ validationErrors.push(message);
53
+ }
54
+ });
49
55
  return {
50
56
  success: validationErrors.length === 0,
51
57
  errors: validationErrors
52
58
  };
53
59
  }
60
+ isValidProfileRetrieverFunction(provider, manifest) {
61
+ var _a, _b, _c;
62
+ if ('actions' in provider && 'function' in provider.actions.retrieveProfile) {
63
+ const { function: functionKey } = provider.actions.retrieveProfile;
64
+ const hasFunction = (_c = (_b = (_a = manifest.typedContent) === null || _a === void 0 ? void 0 : _a.modules) === null || _b === void 0 ? void 0 : _b.function) === null || _c === void 0 ? void 0 : _c.find((func) => func.key === functionKey);
65
+ if (!hasFunction) {
66
+ return Object.assign({ message: text_1.errors.providers.missingProfileFunction(provider.key, functionKey), reference: text_1.References.Providers, level: 'error' }, utils_1.findPosition(functionKey, manifest.yamlContentByLine));
67
+ }
68
+ }
69
+ }
54
70
  }
55
71
  exports.ProvidersValidator = ProvidersValidator;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/manifest",
3
- "version": "2.1.0",
3
+ "version": "2.2.0-next.3",
4
4
  "description": "Definitions and validations of the Forge manifest",
5
5
  "main": "out/index.js",
6
6
  "scripts": {
@@ -1,2 +0,0 @@
1
- export declare const ALL_SCOPES: string[];
2
- //# sourceMappingURL=scopes-types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scopes-types.d.ts","sourceRoot":"","sources":["../../src/types/scopes-types.ts"],"names":[],"mappings":"AAyMA,eAAO,MAAM,UAAU,UAStB,CAAC"}
@@ -1,200 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ALL_SCOPES = void 0;
4
- const FORGE_SCOPES = ['storage:app'];
5
- const IDENTITY_SCOPES = ['read:me', 'report:personal-data'];
6
- const COMPASS_SCOPES = [
7
- 'read:component:compass',
8
- 'write:component:compass',
9
- 'read:scorecard:compass',
10
- 'write:scorecard:compass',
11
- 'read:event:compass',
12
- 'write:event:compass'
13
- ];
14
- const CONNECT_SCOPES = [
15
- 'read:connect-jira',
16
- 'write:connect-jira',
17
- 'delete:connect-jira',
18
- 'admin:connect-jira',
19
- 'project-admin:connect-jira',
20
- 'act-as-user:connect-jira',
21
- 'access-email-addresses:connect-jira',
22
- 'read:connect-confluence',
23
- 'write:connect-confluence',
24
- 'delete:connect-confluence',
25
- 'admin:connect-confluence',
26
- 'space-admin:connect-confluence',
27
- 'act-as-user:connect-confluence',
28
- 'access-email-addresses:connect-confluence'
29
- ];
30
- const CONFLUENCE_SCOPES = [
31
- 'readonly:audit-log:confluence',
32
- 'writeonly:audit-log:confluence',
33
- 'readonly:content:confluence',
34
- 'writeonly:content:confluence',
35
- 'delete:content:confluence',
36
- 'readonly:attachment:confluence',
37
- 'writeonly:attachment:confluence',
38
- 'readonly:content.comment:confluence',
39
- 'readonly:content.inlinetask:confluence',
40
- 'writeonly:content.inlinetask:confluence',
41
- 'readonly:content.label:confluence',
42
- 'writeonly:content.label:confluence',
43
- 'readonly:content.permission:confluence',
44
- 'readonly:content.property:confluence',
45
- 'writeonly:content.property:confluence',
46
- 'readonly:content.restriction:confluence',
47
- 'writeonly:content.restriction:confluence',
48
- 'readonly:content.summary:confluence',
49
- 'readonly:content.template:confluence',
50
- 'writeonly:content.template:confluence',
51
- 'readonly:content.watcher:confluence',
52
- 'writeonly:content.watcher:confluence',
53
- 'readonly:group:confluence',
54
- 'writeonly:group:confluence',
55
- 'readonly:relation:confluence',
56
- 'writeonly:relation:confluence',
57
- 'readonly:user:confluence',
58
- 'readonly:configuration:confluence',
59
- 'writeonly:configuration:confluence',
60
- 'readonly:space:confluence',
61
- 'writeonly:space:confluence',
62
- 'delete:space:confluence',
63
- 'readonly:space.permission:confluence',
64
- 'writeonly:space.permission:confluence',
65
- 'readonly:space.property:confluence',
66
- 'writeonly:space.property:confluence',
67
- 'readonly:space.setting:confluence',
68
- 'writeonly:space.setting:confluence',
69
- 'readonly:analytics.content:confluence'
70
- ];
71
- const JIRA_SCOPES = [
72
- 'readonly:information:jira',
73
- 'readonly:audit-log:jira',
74
- 'readonly:avatar:jira',
75
- 'writeonly:avatar:jira',
76
- 'readonly:dashboard:jira',
77
- 'writeonly:dashboard:jira',
78
- 'readonly:dashboard.property:jira',
79
- 'writeonly:dashboard.property:jira',
80
- 'readonly:filter:jira',
81
- 'writeonly:filter:jira',
82
- 'readonly:user-group:jira',
83
- 'writeonly:user-group:jira',
84
- 'readonly:group:jira',
85
- 'writeonly:group:jira',
86
- 'readonly:instance:jira',
87
- 'readonly:issue:jira',
88
- 'writeonly:issue:jira',
89
- 'send:notification:jira',
90
- 'readonly:issue.workflow:jira',
91
- 'writeonly:issue.workflow:jira',
92
- 'readonly:issue.attachment:jira',
93
- 'writeonly:issue.attachment:jira',
94
- 'readonly:issue.comment:jira',
95
- 'writeonly:issue.comment:jira',
96
- 'readonly:issue.comment.property:jira',
97
- 'writeonly:issue.comment.property:jira',
98
- 'readonly:field:jira',
99
- 'writeonly:field:jira',
100
- 'readonly:field-configuration-scheme:jira',
101
- 'writeonly:field-configuration-scheme:jira',
102
- 'readonly:issue.link:jira',
103
- 'writeonly:issue.link:jira',
104
- 'readonly:issue-link-type:jira',
105
- 'writeonly:issue.link:jira',
106
- 'readonly:issue-link-type:jira',
107
- 'writeonly:issue-link-type:jira',
108
- 'readonly:notification-scheme:jira',
109
- 'readonly:priority:jira',
110
- 'readonly:issue.property:jira',
111
- 'writeonly:issue.property:jira',
112
- 'readonly:issue.remote-link:jira',
113
- 'writeonly:issue.remote-link:jira',
114
- 'readonly:resolution:jira',
115
- 'search:issue:jira',
116
- 'readonly:issue-security-scheme:jira',
117
- 'readonly:issue-type:jira',
118
- 'writeonly:issue-type:jira',
119
- 'readonly:issue-type-scheme:jira',
120
- 'writeonly:issue-type-scheme:jira',
121
- 'readonly:issue-type-screen-scheme:jira',
122
- 'writeonly:issue-type-screen-scheme:jira',
123
- 'readonly:issue-type.property:jira',
124
- 'writeonly:issue-type.property:jira',
125
- 'readonly:issue.watchers:jira',
126
- 'writeonly:issue.watchers:jira',
127
- 'readonly:issue.worklog:jira',
128
- 'writeonly:issue.worklog:jira',
129
- 'readonly:issue.worklog.property:jira',
130
- 'writeonly:issue.worklog.property:jira',
131
- 'search:jira',
132
- 'readonly:configuration:jira',
133
- 'readonly:user:jira',
134
- 'writeonly:user:jira',
135
- 'readonly:label:jira',
136
- 'readonly:permissions:jira',
137
- 'writeonly:permissions:jira',
138
- 'readonly:project:jira',
139
- 'writeonly:project:jira',
140
- 'readonly:project-category:jira',
141
- 'writeonly:project-category:jira',
142
- 'readonly:project.components:jira',
143
- 'writeonly:project.components:jira',
144
- 'readonly:project.permissions:jira',
145
- 'writeonly:project.permissions:jira',
146
- 'readonly:project.property:jira',
147
- 'writeonly:project.property:jira',
148
- 'readonly:role:jira',
149
- 'writeonly:role:jira',
150
- 'readonly:project.version:jira',
151
- 'writeonly:project.version:jira',
152
- 'readonly:screen:jira',
153
- 'writeonly:screen:jira',
154
- 'readonly:issue.time-tracking:jira',
155
- 'writeonly:issue.time-tracking:jira',
156
- 'readonly:user.property:jira',
157
- 'writeonly:user.property:jira',
158
- 'search:user:jira',
159
- 'readonly:webhook:jira',
160
- 'writeonly:webhook:jira',
161
- 'readonly:workflow:jira',
162
- 'writeonly:workflow:jira',
163
- 'readonly:status:jira',
164
- 'readonly:workflow.property:jira',
165
- 'writeonly:workflow.property:jira'
166
- ];
167
- const DEPRECATED_CONFLUENCE_SCOPES = [
168
- 'manage:confluence-configuration',
169
- 'read:confluence-content.all',
170
- 'read:confluence-content.permission',
171
- 'read:confluence-content.summary',
172
- 'read:confluence-space.summary',
173
- 'read:confluence-props',
174
- 'search:confluence',
175
- 'write:confluence-content',
176
- 'write:confluence-file',
177
- 'write:confluence-props',
178
- 'write:confluence-space',
179
- 'read:confluence-groups',
180
- 'write:confluence-groups',
181
- 'read:confluence-user'
182
- ];
183
- const DEPRECATED_JIRA_SCOPES = [
184
- 'read:jira-user',
185
- 'read:jira-work',
186
- 'manage:jira-configuration',
187
- 'manage:jira-data-provider',
188
- 'manage:jira-project',
189
- 'write:jira-work'
190
- ];
191
- exports.ALL_SCOPES = [
192
- ...IDENTITY_SCOPES,
193
- ...FORGE_SCOPES,
194
- ...DEPRECATED_CONFLUENCE_SCOPES,
195
- ...DEPRECATED_JIRA_SCOPES,
196
- ...CONFLUENCE_SCOPES,
197
- ...JIRA_SCOPES,
198
- ...COMPASS_SCOPES,
199
- ...CONNECT_SCOPES
200
- ];