@forge/manifest 13.4.0-next.3-experimental-e9e08bb → 13.4.0-next.3-experimental-241de51

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,16 +1,18 @@
1
1
  # @forge/manifest
2
2
 
3
- ## 13.4.0-next.3-experimental-e9e08bb
3
+ ## 13.4.0-next.3-experimental-241de51
4
4
 
5
5
  ### Minor Changes
6
6
 
7
7
  - a804b36: Add migration:macrosToIndex module
8
+ - d477002: Allow all optional contexts for global apps EAP
8
9
 
9
10
  ### Patch Changes
10
11
 
11
12
  - db66d54: Stop requiring app.compatibility for global:ui and global:fullPage modules
12
13
  - 40260f5: Add dashboards filter module
13
14
  - 0795370: Accept `.cjs` function handler files
15
+ - c62c72a: Update manifest definitions
14
16
 
15
17
  ## 13.4.0-next.3
16
18
 
@@ -56,7 +56,6 @@
56
56
  "title": "compatibility",
57
57
  "description": "The app compatibility configuration. If not set, app is not a cross-context or global app.",
58
58
  "additionalProperties": false,
59
- "minProperties": 1,
60
59
  "properties": {
61
60
  "confluence": {
62
61
  "type": "object",
@@ -56,7 +56,6 @@
56
56
  "title": "compatibility",
57
57
  "description": "The app compatibility configuration. If not set, app is not a cross-context or global app.",
58
58
  "additionalProperties": false,
59
- "minProperties": 1,
60
59
  "properties": {
61
60
  "confluence": {
62
61
  "type": "object",
@@ -2121,6 +2120,16 @@
2121
2120
  "maxLength": 300,
2122
2121
  "pattern": "^[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)*$"
2123
2122
  },
2123
+ "category": {
2124
+ "type": "string",
2125
+ "enum": [
2126
+ "structure",
2127
+ "media",
2128
+ "embed",
2129
+ "text-formatting",
2130
+ "data-and-charts"
2131
+ ]
2132
+ },
2124
2133
  "refDataSchema": {
2125
2134
  "type": "object",
2126
2135
  "additionalProperties": false,
@@ -2338,6 +2347,16 @@
2338
2347
  "maxLength": 300,
2339
2348
  "pattern": "^[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)*$"
2340
2349
  },
2350
+ "category": {
2351
+ "type": "string",
2352
+ "enum": [
2353
+ "structure",
2354
+ "media",
2355
+ "embed",
2356
+ "text-formatting",
2357
+ "data-and-charts"
2358
+ ]
2359
+ },
2341
2360
  "adfExport": {
2342
2361
  "type": "object",
2343
2362
  "additionalProperties": false,
@@ -2364,6 +2383,36 @@
2364
2383
  "minLength": 1,
2365
2384
  "maxLength": 255,
2366
2385
  "pattern": "^[a-zA-Z0-9-_]+$"
2386
+ },
2387
+ "concurrency": {
2388
+ "type": "integer",
2389
+ "minimum": 1
2390
+ },
2391
+ "cacheConfiguration": {
2392
+ "type": "object",
2393
+ "additionalProperties": false,
2394
+ "properties": {
2395
+ "keyComposition": {
2396
+ "type": "array",
2397
+ "minItems": 1,
2398
+ "uniqueItems": true,
2399
+ "items": {
2400
+ "type": "string",
2401
+ "enum": [
2402
+ "macro.id",
2403
+ "macro.body",
2404
+ "macro.params",
2405
+ "content.id",
2406
+ "content.type",
2407
+ "content.version",
2408
+ "space.id"
2409
+ ]
2410
+ }
2411
+ }
2412
+ },
2413
+ "required": [
2414
+ "keyComposition"
2415
+ ]
2367
2416
  }
2368
2417
  },
2369
2418
  "required": [
@@ -2379,6 +2428,36 @@
2379
2428
  "minLength": 1,
2380
2429
  "maxLength": 255,
2381
2430
  "pattern": "^[a-zA-Z0-9-_]+$"
2431
+ },
2432
+ "concurrency": {
2433
+ "type": "integer",
2434
+ "minimum": 1
2435
+ },
2436
+ "cacheConfiguration": {
2437
+ "type": "object",
2438
+ "additionalProperties": false,
2439
+ "properties": {
2440
+ "keyComposition": {
2441
+ "type": "array",
2442
+ "minItems": 1,
2443
+ "uniqueItems": true,
2444
+ "items": {
2445
+ "type": "string",
2446
+ "enum": [
2447
+ "macro.id",
2448
+ "macro.body",
2449
+ "macro.params",
2450
+ "content.id",
2451
+ "content.type",
2452
+ "content.version",
2453
+ "space.id"
2454
+ ]
2455
+ }
2456
+ }
2457
+ },
2458
+ "required": [
2459
+ "keyComposition"
2460
+ ]
2382
2461
  }
2383
2462
  },
2384
2463
  "required": [
@@ -2952,33 +3031,32 @@
2952
3031
  "native"
2953
3032
  ],
2954
3033
  "type": "string"
3034
+ }
3035
+ },
3036
+ "required": [
3037
+ "resource"
3038
+ ]
3039
+ },
3040
+ "edit.sidePanel": {
3041
+ "type": "object",
3042
+ "properties": {
3043
+ "resource": {
3044
+ "type": "string",
3045
+ "minLength": 1,
3046
+ "maxLength": 23,
3047
+ "pattern": "^[a-zA-Z0-9_\\-]+$"
2955
3048
  },
2956
- "sidePanel": {
2957
- "type": "object",
2958
- "properties": {
2959
- "resource": {
2960
- "type": "string",
2961
- "minLength": 1,
2962
- "maxLength": 23,
2963
- "pattern": "^[a-zA-Z0-9_\\-]+$"
2964
- },
2965
- "render": {
2966
- "default": "default",
2967
- "enum": [
2968
- "default",
2969
- "native"
2970
- ],
2971
- "type": "string"
2972
- }
2973
- },
2974
- "required": [
2975
- "resource"
2976
- ]
3049
+ "render": {
3050
+ "default": "default",
3051
+ "enum": [
3052
+ "default",
3053
+ "native"
3054
+ ],
3055
+ "type": "string"
2977
3056
  }
2978
3057
  },
2979
3058
  "required": [
2980
- "resource",
2981
- "sidePanel"
3059
+ "resource"
2982
3060
  ]
2983
3061
  },
2984
3062
  "resolver": {
@@ -3024,6 +3102,7 @@
3024
3102
  "icon",
3025
3103
  "resource",
3026
3104
  "edit",
3105
+ "edit.sidePanel",
3027
3106
  "key"
3028
3107
  ],
3029
3108
  "not": {
@@ -12538,6 +12538,7 @@ export interface Modules {
12538
12538
  }
12539
12539
  | string;
12540
12540
  description__i18n?: string;
12541
+ category?: 'structure' | 'media' | 'embed' | 'text-formatting' | 'data-and-charts';
12541
12542
  refDataSchema?: {
12542
12543
  inputType: string;
12543
12544
  };
@@ -12735,15 +12736,62 @@ export interface Modules {
12735
12736
  }
12736
12737
  | string;
12737
12738
  description__i18n?: string;
12739
+ category?: 'structure' | 'media' | 'embed' | 'text-formatting' | 'data-and-charts';
12738
12740
  adfExport?: {
12739
12741
  function: string;
12740
12742
  };
12741
12743
  static?:
12742
12744
  | {
12743
12745
  function: string;
12746
+ concurrency?: number;
12747
+ cacheConfiguration?: {
12748
+ keyComposition: [
12749
+ (
12750
+ | 'macro.id'
12751
+ | 'macro.body'
12752
+ | 'macro.params'
12753
+ | 'content.id'
12754
+ | 'content.type'
12755
+ | 'content.version'
12756
+ | 'space.id'
12757
+ ),
12758
+ ...(
12759
+ | 'macro.id'
12760
+ | 'macro.body'
12761
+ | 'macro.params'
12762
+ | 'content.id'
12763
+ | 'content.type'
12764
+ | 'content.version'
12765
+ | 'space.id'
12766
+ )[]
12767
+ ];
12768
+ };
12744
12769
  }
12745
12770
  | {
12746
12771
  endpoint: string;
12772
+ concurrency?: number;
12773
+ cacheConfiguration?: {
12774
+ keyComposition: [
12775
+ (
12776
+ | 'macro.id'
12777
+ | 'macro.body'
12778
+ | 'macro.params'
12779
+ | 'content.id'
12780
+ | 'content.type'
12781
+ | 'content.version'
12782
+ | 'space.id'
12783
+ ),
12784
+ ...(
12785
+ | 'macro.id'
12786
+ | 'macro.body'
12787
+ | 'macro.params'
12788
+ | 'content.id'
12789
+ | 'content.type'
12790
+ | 'content.version'
12791
+ | 'space.id'
12792
+ )[]
12793
+ ];
12794
+ };
12747
12795
  };
12748
12796
  refDataSchema?: {
12749
12797
  inputType: string;
@@ -12837,6 +12885,7 @@ export interface Modules {
12837
12885
  }
12838
12886
  | string;
12839
12887
  description__i18n?: string;
12888
+ category?: 'structure' | 'media' | 'embed' | 'text-formatting' | 'data-and-charts';
12840
12889
  refDataSchema?: {
12841
12890
  inputType: string;
12842
12891
  };
@@ -13034,15 +13083,62 @@ export interface Modules {
13034
13083
  }
13035
13084
  | string;
13036
13085
  description__i18n?: string;
13086
+ category?: 'structure' | 'media' | 'embed' | 'text-formatting' | 'data-and-charts';
13037
13087
  adfExport?: {
13038
13088
  function: string;
13039
13089
  };
13040
13090
  static?:
13041
13091
  | {
13042
13092
  function: string;
13093
+ concurrency?: number;
13094
+ cacheConfiguration?: {
13095
+ keyComposition: [
13096
+ (
13097
+ | 'macro.id'
13098
+ | 'macro.body'
13099
+ | 'macro.params'
13100
+ | 'content.id'
13101
+ | 'content.type'
13102
+ | 'content.version'
13103
+ | 'space.id'
13104
+ ),
13105
+ ...(
13106
+ | 'macro.id'
13107
+ | 'macro.body'
13108
+ | 'macro.params'
13109
+ | 'content.id'
13110
+ | 'content.type'
13111
+ | 'content.version'
13112
+ | 'space.id'
13113
+ )[]
13114
+ ];
13115
+ };
13043
13116
  }
13044
13117
  | {
13045
13118
  endpoint: string;
13119
+ concurrency?: number;
13120
+ cacheConfiguration?: {
13121
+ keyComposition: [
13122
+ (
13123
+ | 'macro.id'
13124
+ | 'macro.body'
13125
+ | 'macro.params'
13126
+ | 'content.id'
13127
+ | 'content.type'
13128
+ | 'content.version'
13129
+ | 'space.id'
13130
+ ),
13131
+ ...(
13132
+ | 'macro.id'
13133
+ | 'macro.body'
13134
+ | 'macro.params'
13135
+ | 'content.id'
13136
+ | 'content.type'
13137
+ | 'content.version'
13138
+ | 'space.id'
13139
+ )[]
13140
+ ];
13141
+ };
13046
13142
  };
13047
13143
  refDataSchema?: {
13048
13144
  inputType: string;
@@ -13215,11 +13311,11 @@ export interface Modules {
13215
13311
  edit: {
13216
13312
  resource: string;
13217
13313
  render?: 'default' | 'native';
13218
- sidePanel: {
13219
- resource: string;
13220
- render?: 'default' | 'native';
13221
- [k: string]: unknown;
13222
- };
13314
+ [k: string]: unknown;
13315
+ };
13316
+ 'edit.sidePanel': {
13317
+ resource: string;
13318
+ render?: 'default' | 'native';
13223
13319
  [k: string]: unknown;
13224
13320
  };
13225
13321
  resolver?:
@@ -13240,11 +13336,11 @@ export interface Modules {
13240
13336
  edit: {
13241
13337
  resource: string;
13242
13338
  render?: 'default' | 'native';
13243
- sidePanel: {
13244
- resource: string;
13245
- render?: 'default' | 'native';
13246
- [k: string]: unknown;
13247
- };
13339
+ [k: string]: unknown;
13340
+ };
13341
+ 'edit.sidePanel': {
13342
+ resource: string;
13343
+ render?: 'default' | 'native';
13248
13344
  [k: string]: unknown;
13249
13345
  };
13250
13346
  resolver?:
@@ -69,7 +69,6 @@
69
69
  "delete:issue.remote-link:jira",
70
70
  "delete:notes:customer-notes",
71
71
  "delete:object:jira",
72
- "delete:object:jira",
73
72
  "delete:operations-info:jira",
74
73
  "delete:ops-alert:jira-service-management",
75
74
  "delete:ops-config:jira-service-management",
@@ -226,8 +225,78 @@
226
225
  "read:forge-app:confluence",
227
226
  "read:forge-app:jira",
228
227
  "read:forge-proxy:support-api-gateway",
228
+ "read:graph:assets-object:atlassian",
229
+ "read:graph:blogpost:confluence",
230
+ "read:graph:board:jira",
231
+ "read:graph:branch:external",
232
+ "read:graph:build:external",
233
+ "read:graph:calendar-event:external",
234
+ "read:graph:change-proposal:focus",
235
+ "read:graph:comment:atlassian",
236
+ "read:graph:comment:confluence",
237
+ "read:graph:comment:external",
238
+ "read:graph:comment:loom",
239
+ "read:graph:commit:external",
240
+ "read:graph:component-link:compass",
241
+ "read:graph:component:compass",
229
242
  "read:graph:confluence",
243
+ "read:graph:conversation:external",
244
+ "read:graph:customer-contact:external",
245
+ "read:graph:customer-org-category:external",
246
+ "read:graph:customer-org:external",
247
+ "read:graph:dashboard:external",
248
+ "read:graph:data-table:external",
249
+ "read:graph:database:confluence",
250
+ "read:graph:deal:external",
251
+ "read:graph:deployment:external",
252
+ "read:graph:design:external",
253
+ "read:graph:document:external",
254
+ "read:graph:feature-flag:external",
255
+ "read:graph:focus-area-status-update:focus",
256
+ "read:graph:focus-area:focus",
257
+ "read:graph:folder:confluence",
258
+ "read:graph:goal-update:atlassian",
259
+ "read:graph:goal:atlassian",
260
+ "read:graph:issue-comment:jira",
261
+ "read:graph:issue-remote-link:jira",
262
+ "read:graph:issue-status:jira",
263
+ "read:graph:issue-worklog:jira",
264
+ "read:graph:issue:jira",
230
265
  "read:graph:jira",
266
+ "read:graph:meeting-recurrence:loom",
267
+ "read:graph:meeting:loom",
268
+ "read:graph:message:external",
269
+ "read:graph:organisation:external",
270
+ "read:graph:page:confluence",
271
+ "read:graph:position:external",
272
+ "read:graph:position:talent",
273
+ "read:graph:priority:jira",
274
+ "read:graph:project-update:atlassian",
275
+ "read:graph:project:atlassian",
276
+ "read:graph:project:external",
277
+ "read:graph:project:jira",
278
+ "read:graph:pull-request:external",
279
+ "read:graph:remote-link:external",
280
+ "read:graph:repository:external",
281
+ "read:graph:scorecard:compass",
282
+ "read:graph:service:external",
283
+ "read:graph:space:confluence",
284
+ "read:graph:space:external",
285
+ "read:graph:space:loom",
286
+ "read:graph:sprint:jira",
287
+ "read:graph:tag:atlassian",
288
+ "read:graph:team-type:atlassian",
289
+ "read:graph:team:atlassian",
290
+ "read:graph:team:opsgenie",
291
+ "read:graph:user:atlassian",
292
+ "read:graph:version:jira",
293
+ "read:graph:video:external",
294
+ "read:graph:video:loom",
295
+ "read:graph:vulnerability:external",
296
+ "read:graph:whiteboard:confluence",
297
+ "read:graph:work-item:external",
298
+ "read:graph:worker:external",
299
+ "read:graph:worker:talent",
231
300
  "read:group:confluence",
232
301
  "read:group:jira",
233
302
  "read:hierarchical-content:confluence",
@@ -279,7 +348,6 @@
279
348
  "read:notes:customer-notes",
280
349
  "read:notification-scheme:jira",
281
350
  "read:object:jira",
282
- "read:object:jira",
283
351
  "read:operations-info:jira",
284
352
  "read:ops-alert:jira-service-management",
285
353
  "read:ops-config:jira-service-management",
@@ -494,7 +562,6 @@
494
562
  "write:non-project-work:capacity-planning",
495
563
  "write:notes:customer-notes",
496
564
  "write:object:jira",
497
- "write:object:jira",
498
565
  "write:operations-info:jira",
499
566
  "write:ops-alert:jira-service-management",
500
567
  "write:ops-config:jira-service-management",
@@ -288,7 +288,7 @@ exports.errors = {
288
288
  invalidConfluenceModuleInJira: () => 'Using the module `confluence:fullPage` is invalid when the required product is Jira. Full page modules must match the required product. Use `jira:fullPage` as the module type, or change the required product to Confluence in your manifest.yml compatibility settings.',
289
289
  invalidJiraModuleInConfluence: () => 'Using the module `jira:fullPage` is invalid when the required product is Confluence. Full page modules must match the required product. Use `confluence:fullPage` as the module type, or change the required product to Jira in your manifest.yml compatibility settings.',
290
290
  invalidProduct: (product) => `Invalid product '${product}' in app.compatibility. Only 'jira' and 'confluence' are supported as compatibility products for this module.`,
291
- oneRequiredContext: () => 'One context (Jira, Confluence, or Compass) must have `required:true` in app.compatibility.'
291
+ oneRequiredContext: () => 'Only one context (Jira, Confluence, or Compass) must have `required:true` in app.compatibility.'
292
292
  }
293
293
  },
294
294
  translations: {
@@ -18,7 +18,7 @@ class CompatibilityValidator {
18
18
  const compatibility = app?.compatibility || {};
19
19
  const hasCompatibilityKeys = Object.keys(compatibility).length > 0;
20
20
  const requiredContexts = Object.keys(compatibility).filter((key) => compatibility[key]?.required === true);
21
- if (hasCompatibilityKeys && requiredContexts.length !== 1) {
21
+ if (hasCompatibilityKeys && requiredContexts.length > 1) {
22
22
  validationErrors.push({
23
23
  message: text_1.errors.app.compatibility.oneRequiredContext(),
24
24
  reference: text_2.References.SchemaError,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/manifest",
3
- "version": "13.4.0-next.3-experimental-e9e08bb",
3
+ "version": "13.4.0-next.3-experimental-241de51",
4
4
  "description": "Definitions and validations of the Forge manifest",
5
5
  "main": "out/index.js",
6
6
  "scripts": {