@apexops/contracts 0.10.0-next.5 → 0.11.0-next.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.
Files changed (76) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/archetype-source.d.ts +70 -0
  3. package/dist/archetype-source.d.ts.map +1 -0
  4. package/dist/archetype-source.js +58 -0
  5. package/dist/archetype-source.js.map +1 -0
  6. package/dist/artifacts.d.ts +64 -0
  7. package/dist/artifacts.d.ts.map +1 -1
  8. package/dist/artifacts.js +69 -0
  9. package/dist/artifacts.js.map +1 -1
  10. package/dist/common.d.ts +2 -0
  11. package/dist/common.d.ts.map +1 -1
  12. package/dist/common.js +1 -0
  13. package/dist/common.js.map +1 -1
  14. package/dist/evidence.d.ts.map +1 -1
  15. package/dist/evidence.js +2 -0
  16. package/dist/evidence.js.map +1 -1
  17. package/dist/governance-observation.d.ts +15 -0
  18. package/dist/governance-observation.d.ts.map +1 -0
  19. package/dist/governance-observation.js +15 -0
  20. package/dist/governance-observation.js.map +1 -0
  21. package/dist/index.d.ts +616 -3
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +47 -4
  24. package/dist/index.js.map +1 -1
  25. package/dist/native-validation.d.ts +136 -0
  26. package/dist/native-validation.d.ts.map +1 -0
  27. package/dist/native-validation.js +276 -0
  28. package/dist/native-validation.js.map +1 -0
  29. package/dist/onboarding.d.ts +184 -3
  30. package/dist/onboarding.d.ts.map +1 -1
  31. package/dist/onboarding.js +122 -6
  32. package/dist/onboarding.js.map +1 -1
  33. package/dist/policy-validation.d.ts +45 -0
  34. package/dist/policy-validation.d.ts.map +1 -0
  35. package/dist/policy-validation.js +194 -0
  36. package/dist/policy-validation.js.map +1 -0
  37. package/dist/runtime.d.ts +72 -0
  38. package/dist/runtime.d.ts.map +1 -1
  39. package/dist/runtime.js +34 -1
  40. package/dist/runtime.js.map +1 -1
  41. package/dist/targets.d.ts +158 -1
  42. package/dist/targets.d.ts.map +1 -1
  43. package/dist/targets.js +168 -2
  44. package/dist/targets.js.map +1 -1
  45. package/dist/test/contracts.test.js +751 -3
  46. package/dist/test/contracts.test.js.map +1 -1
  47. package/package.json +2 -2
  48. package/schemas/archetype-batch-config-v1.schema.json +51 -0
  49. package/schemas/archetype-batch-plan-v1.schema.json +227 -0
  50. package/schemas/archetype-source-proposal-v1.schema.json +113 -0
  51. package/schemas/architecture-v1.schema.json +278 -0
  52. package/schemas/bootstrap-plan-v1.schema.json +206 -0
  53. package/schemas/contract-metadata.json +85 -0
  54. package/schemas/cost-estimate-v1.schema.json +54 -1
  55. package/schemas/diagnosis-v1.schema.json +323 -0
  56. package/schemas/governance-constraints-v1.schema.json +13 -0
  57. package/schemas/governance-observation-receipt-v1.schema.json +60 -0
  58. package/schemas/governance-provision-plan-v1.schema.json +307 -0
  59. package/schemas/governance-setup-config-v1.schema.json +80 -0
  60. package/schemas/governance-setup-plan-v1.schema.json +217 -0
  61. package/schemas/iac-binding-v1.schema.json +60 -0
  62. package/schemas/input-request-v1.schema.json +190 -0
  63. package/schemas/logical-resource-manifest-v1.schema.json +4 -0
  64. package/schemas/native-validation-receipt-v1.schema.json +862 -0
  65. package/schemas/onboarding-config-v1.schema.json +15 -12
  66. package/schemas/policy-property-map-v1.schema.json +17 -0
  67. package/schemas/policy-validation-v1.schema.json +278 -0
  68. package/schemas/project-config-v1.schema.json +14 -1
  69. package/schemas/repeat-guard-records-v1.schema.json +76 -0
  70. package/schemas/repository-publish-config-v1.schema.json +52 -0
  71. package/schemas/repository-publish-plan-v1.schema.json +265 -0
  72. package/schemas/requirements-amendment-v1.schema.json +213 -0
  73. package/schemas/requirements-change-proposal-v1.schema.json +196 -0
  74. package/schemas/review-capture-v1.schema.json +67 -0
  75. package/schemas/review-findings-v1.schema.json +103 -0
  76. package/schemas/review-request-v1.schema.json +111 -0
@@ -0,0 +1,307 @@
1
+ {
2
+ "$id": "https://schemas.apexops.dev/governance-provision-plan-v1.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "additionalProperties": false,
5
+ "properties": {
6
+ "actions": {
7
+ "items": {
8
+ "anyOf": [
9
+ {
10
+ "const": "create-federation",
11
+ "type": "string"
12
+ },
13
+ {
14
+ "const": "assign-reader",
15
+ "type": "string"
16
+ }
17
+ ]
18
+ },
19
+ "maxItems": 2,
20
+ "type": "array",
21
+ "uniqueItems": true
22
+ },
23
+ "applicationObjectId": {
24
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
25
+ "type": "string"
26
+ },
27
+ "blockers": {
28
+ "items": {
29
+ "maxLength": 512,
30
+ "minLength": 1,
31
+ "type": "string"
32
+ },
33
+ "maxItems": 16,
34
+ "type": "array"
35
+ },
36
+ "contextHash": {
37
+ "pattern": "^[0-9a-f]{64}$",
38
+ "type": "string"
39
+ },
40
+ "deploymentAuthorized": {
41
+ "const": false,
42
+ "type": "boolean"
43
+ },
44
+ "evidenceHash": {
45
+ "pattern": "^[0-9a-f]{64}$",
46
+ "type": "string"
47
+ },
48
+ "executionAuthorized": {
49
+ "const": false,
50
+ "type": "boolean"
51
+ },
52
+ "federationName": {
53
+ "pattern": "^apex-governance-[a-f0-9]{24}$",
54
+ "type": "string"
55
+ },
56
+ "planHash": {
57
+ "pattern": "^[0-9a-f]{64}$",
58
+ "type": "string"
59
+ },
60
+ "schemaVersion": {
61
+ "const": "1.0.0",
62
+ "type": "string"
63
+ },
64
+ "setup": {
65
+ "$id": "https://schemas.apexops.dev/governance-setup-plan-v1.json",
66
+ "additionalProperties": false,
67
+ "properties": {
68
+ "blockers": {
69
+ "items": {
70
+ "maxLength": 512,
71
+ "minLength": 1,
72
+ "type": "string"
73
+ },
74
+ "maxItems": 16,
75
+ "type": "array"
76
+ },
77
+ "config": {
78
+ "$id": "https://schemas.apexops.dev/governance-setup-config-v1.json",
79
+ "additionalProperties": false,
80
+ "properties": {
81
+ "identity": {
82
+ "anyOf": [
83
+ {
84
+ "additionalProperties": false,
85
+ "properties": {
86
+ "clientId": {
87
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
88
+ "type": "string"
89
+ },
90
+ "mode": {
91
+ "const": "reuse",
92
+ "type": "string"
93
+ },
94
+ "principalId": {
95
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
96
+ "type": "string"
97
+ }
98
+ },
99
+ "required": [
100
+ "mode",
101
+ "clientId",
102
+ "principalId"
103
+ ],
104
+ "type": "object"
105
+ },
106
+ {
107
+ "additionalProperties": false,
108
+ "properties": {
109
+ "displayName": {
110
+ "pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,79}$(?![\\s\\S])",
111
+ "type": "string"
112
+ },
113
+ "mode": {
114
+ "const": "create",
115
+ "type": "string"
116
+ }
117
+ },
118
+ "required": [
119
+ "mode",
120
+ "displayName"
121
+ ],
122
+ "type": "object"
123
+ }
124
+ ]
125
+ },
126
+ "managementGroupId": {
127
+ "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9_().-]{0,88}[A-Za-z0-9_()-])?$(?![\\s\\S])",
128
+ "type": "string"
129
+ },
130
+ "repository": {
131
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9-]{0,38}/[A-Za-z0-9][A-Za-z0-9_.-]{0,99}$(?![\\s\\S])",
132
+ "type": "string"
133
+ },
134
+ "schemaVersion": {
135
+ "const": "1.0.0",
136
+ "type": "string"
137
+ },
138
+ "subscriptionId": {
139
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
140
+ "type": "string"
141
+ },
142
+ "tenantId": {
143
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
144
+ "type": "string"
145
+ }
146
+ },
147
+ "required": [
148
+ "schemaVersion",
149
+ "repository",
150
+ "tenantId",
151
+ "subscriptionId",
152
+ "identity"
153
+ ],
154
+ "type": "object"
155
+ },
156
+ "deploymentAuthorized": {
157
+ "const": false,
158
+ "type": "boolean"
159
+ },
160
+ "environment": {
161
+ "const": "governance",
162
+ "type": "string"
163
+ },
164
+ "evidenceHash": {
165
+ "pattern": "^[0-9a-f]{64}$",
166
+ "type": "string"
167
+ },
168
+ "executionAuthorized": {
169
+ "const": false,
170
+ "type": "boolean"
171
+ },
172
+ "federation": {
173
+ "additionalProperties": false,
174
+ "properties": {
175
+ "audience": {
176
+ "const": "api://AzureADTokenExchange",
177
+ "type": "string"
178
+ },
179
+ "issuer": {
180
+ "const": "https://token.actions.githubusercontent.com",
181
+ "type": "string"
182
+ },
183
+ "subject": {
184
+ "maxLength": 512,
185
+ "minLength": 1,
186
+ "type": "string"
187
+ }
188
+ },
189
+ "required": [
190
+ "issuer",
191
+ "audience",
192
+ "subject"
193
+ ],
194
+ "type": "object"
195
+ },
196
+ "filesModified": {
197
+ "const": false,
198
+ "type": "boolean"
199
+ },
200
+ "pendingActions": {
201
+ "items": {
202
+ "maxLength": 256,
203
+ "minLength": 1,
204
+ "type": "string"
205
+ },
206
+ "maxItems": 16,
207
+ "type": "array"
208
+ },
209
+ "planHash": {
210
+ "pattern": "^[0-9a-f]{64}$",
211
+ "type": "string"
212
+ },
213
+ "proposedRole": {
214
+ "additionalProperties": false,
215
+ "properties": {
216
+ "id": {
217
+ "const": "acdd72a7-3385-48ef-bd42-f606fba81ae7",
218
+ "type": "string"
219
+ },
220
+ "name": {
221
+ "const": "Reader",
222
+ "type": "string"
223
+ },
224
+ "scope": {
225
+ "maxLength": 256,
226
+ "minLength": 1,
227
+ "type": "string"
228
+ }
229
+ },
230
+ "required": [
231
+ "id",
232
+ "name",
233
+ "scope"
234
+ ],
235
+ "type": "object"
236
+ },
237
+ "schemaVersion": {
238
+ "const": "1.0.0",
239
+ "type": "string"
240
+ },
241
+ "status": {
242
+ "anyOf": [
243
+ {
244
+ "const": "pending",
245
+ "type": "string"
246
+ },
247
+ {
248
+ "const": "blocked",
249
+ "type": "string"
250
+ }
251
+ ]
252
+ },
253
+ "variables": {
254
+ "patternProperties": {
255
+ "^[A-Z_]+$": {
256
+ "maxLength": 256,
257
+ "type": "string"
258
+ }
259
+ },
260
+ "type": "object"
261
+ }
262
+ },
263
+ "required": [
264
+ "schemaVersion",
265
+ "config",
266
+ "evidenceHash",
267
+ "status",
268
+ "environment",
269
+ "proposedRole",
270
+ "variables",
271
+ "blockers",
272
+ "pendingActions",
273
+ "filesModified",
274
+ "executionAuthorized",
275
+ "deploymentAuthorized",
276
+ "planHash"
277
+ ],
278
+ "type": "object"
279
+ },
280
+ "status": {
281
+ "anyOf": [
282
+ {
283
+ "const": "ready",
284
+ "type": "string"
285
+ },
286
+ {
287
+ "const": "blocked",
288
+ "type": "string"
289
+ }
290
+ ]
291
+ }
292
+ },
293
+ "required": [
294
+ "schemaVersion",
295
+ "setup",
296
+ "contextHash",
297
+ "evidenceHash",
298
+ "planHash",
299
+ "status",
300
+ "federationName",
301
+ "actions",
302
+ "blockers",
303
+ "executionAuthorized",
304
+ "deploymentAuthorized"
305
+ ],
306
+ "type": "object"
307
+ }
@@ -0,0 +1,80 @@
1
+ {
2
+ "$id": "https://schemas.apexops.dev/governance-setup-config-v1.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "additionalProperties": false,
5
+ "properties": {
6
+ "identity": {
7
+ "anyOf": [
8
+ {
9
+ "additionalProperties": false,
10
+ "properties": {
11
+ "clientId": {
12
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
13
+ "type": "string"
14
+ },
15
+ "mode": {
16
+ "const": "reuse",
17
+ "type": "string"
18
+ },
19
+ "principalId": {
20
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
21
+ "type": "string"
22
+ }
23
+ },
24
+ "required": [
25
+ "mode",
26
+ "clientId",
27
+ "principalId"
28
+ ],
29
+ "type": "object"
30
+ },
31
+ {
32
+ "additionalProperties": false,
33
+ "properties": {
34
+ "displayName": {
35
+ "pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,79}$(?![\\s\\S])",
36
+ "type": "string"
37
+ },
38
+ "mode": {
39
+ "const": "create",
40
+ "type": "string"
41
+ }
42
+ },
43
+ "required": [
44
+ "mode",
45
+ "displayName"
46
+ ],
47
+ "type": "object"
48
+ }
49
+ ]
50
+ },
51
+ "managementGroupId": {
52
+ "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9_().-]{0,88}[A-Za-z0-9_()-])?$(?![\\s\\S])",
53
+ "type": "string"
54
+ },
55
+ "repository": {
56
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9-]{0,38}/[A-Za-z0-9][A-Za-z0-9_.-]{0,99}$(?![\\s\\S])",
57
+ "type": "string"
58
+ },
59
+ "schemaVersion": {
60
+ "const": "1.0.0",
61
+ "type": "string"
62
+ },
63
+ "subscriptionId": {
64
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
65
+ "type": "string"
66
+ },
67
+ "tenantId": {
68
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
69
+ "type": "string"
70
+ }
71
+ },
72
+ "required": [
73
+ "schemaVersion",
74
+ "repository",
75
+ "tenantId",
76
+ "subscriptionId",
77
+ "identity"
78
+ ],
79
+ "type": "object"
80
+ }
@@ -0,0 +1,217 @@
1
+ {
2
+ "$id": "https://schemas.apexops.dev/governance-setup-plan-v1.json",
3
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
4
+ "additionalProperties": false,
5
+ "properties": {
6
+ "blockers": {
7
+ "items": {
8
+ "maxLength": 512,
9
+ "minLength": 1,
10
+ "type": "string"
11
+ },
12
+ "maxItems": 16,
13
+ "type": "array"
14
+ },
15
+ "config": {
16
+ "$id": "https://schemas.apexops.dev/governance-setup-config-v1.json",
17
+ "additionalProperties": false,
18
+ "properties": {
19
+ "identity": {
20
+ "anyOf": [
21
+ {
22
+ "additionalProperties": false,
23
+ "properties": {
24
+ "clientId": {
25
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
26
+ "type": "string"
27
+ },
28
+ "mode": {
29
+ "const": "reuse",
30
+ "type": "string"
31
+ },
32
+ "principalId": {
33
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
34
+ "type": "string"
35
+ }
36
+ },
37
+ "required": [
38
+ "mode",
39
+ "clientId",
40
+ "principalId"
41
+ ],
42
+ "type": "object"
43
+ },
44
+ {
45
+ "additionalProperties": false,
46
+ "properties": {
47
+ "displayName": {
48
+ "pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,79}$(?![\\s\\S])",
49
+ "type": "string"
50
+ },
51
+ "mode": {
52
+ "const": "create",
53
+ "type": "string"
54
+ }
55
+ },
56
+ "required": [
57
+ "mode",
58
+ "displayName"
59
+ ],
60
+ "type": "object"
61
+ }
62
+ ]
63
+ },
64
+ "managementGroupId": {
65
+ "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9_().-]{0,88}[A-Za-z0-9_()-])?$(?![\\s\\S])",
66
+ "type": "string"
67
+ },
68
+ "repository": {
69
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9-]{0,38}/[A-Za-z0-9][A-Za-z0-9_.-]{0,99}$(?![\\s\\S])",
70
+ "type": "string"
71
+ },
72
+ "schemaVersion": {
73
+ "const": "1.0.0",
74
+ "type": "string"
75
+ },
76
+ "subscriptionId": {
77
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
78
+ "type": "string"
79
+ },
80
+ "tenantId": {
81
+ "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$(?![\\s\\S])",
82
+ "type": "string"
83
+ }
84
+ },
85
+ "required": [
86
+ "schemaVersion",
87
+ "repository",
88
+ "tenantId",
89
+ "subscriptionId",
90
+ "identity"
91
+ ],
92
+ "type": "object"
93
+ },
94
+ "deploymentAuthorized": {
95
+ "const": false,
96
+ "type": "boolean"
97
+ },
98
+ "environment": {
99
+ "const": "governance",
100
+ "type": "string"
101
+ },
102
+ "evidenceHash": {
103
+ "pattern": "^[0-9a-f]{64}$",
104
+ "type": "string"
105
+ },
106
+ "executionAuthorized": {
107
+ "const": false,
108
+ "type": "boolean"
109
+ },
110
+ "federation": {
111
+ "additionalProperties": false,
112
+ "properties": {
113
+ "audience": {
114
+ "const": "api://AzureADTokenExchange",
115
+ "type": "string"
116
+ },
117
+ "issuer": {
118
+ "const": "https://token.actions.githubusercontent.com",
119
+ "type": "string"
120
+ },
121
+ "subject": {
122
+ "maxLength": 512,
123
+ "minLength": 1,
124
+ "type": "string"
125
+ }
126
+ },
127
+ "required": [
128
+ "issuer",
129
+ "audience",
130
+ "subject"
131
+ ],
132
+ "type": "object"
133
+ },
134
+ "filesModified": {
135
+ "const": false,
136
+ "type": "boolean"
137
+ },
138
+ "pendingActions": {
139
+ "items": {
140
+ "maxLength": 256,
141
+ "minLength": 1,
142
+ "type": "string"
143
+ },
144
+ "maxItems": 16,
145
+ "type": "array"
146
+ },
147
+ "planHash": {
148
+ "pattern": "^[0-9a-f]{64}$",
149
+ "type": "string"
150
+ },
151
+ "proposedRole": {
152
+ "additionalProperties": false,
153
+ "properties": {
154
+ "id": {
155
+ "const": "acdd72a7-3385-48ef-bd42-f606fba81ae7",
156
+ "type": "string"
157
+ },
158
+ "name": {
159
+ "const": "Reader",
160
+ "type": "string"
161
+ },
162
+ "scope": {
163
+ "maxLength": 256,
164
+ "minLength": 1,
165
+ "type": "string"
166
+ }
167
+ },
168
+ "required": [
169
+ "id",
170
+ "name",
171
+ "scope"
172
+ ],
173
+ "type": "object"
174
+ },
175
+ "schemaVersion": {
176
+ "const": "1.0.0",
177
+ "type": "string"
178
+ },
179
+ "status": {
180
+ "anyOf": [
181
+ {
182
+ "const": "pending",
183
+ "type": "string"
184
+ },
185
+ {
186
+ "const": "blocked",
187
+ "type": "string"
188
+ }
189
+ ]
190
+ },
191
+ "variables": {
192
+ "patternProperties": {
193
+ "^[A-Z_]+$": {
194
+ "maxLength": 256,
195
+ "type": "string"
196
+ }
197
+ },
198
+ "type": "object"
199
+ }
200
+ },
201
+ "required": [
202
+ "schemaVersion",
203
+ "config",
204
+ "evidenceHash",
205
+ "status",
206
+ "environment",
207
+ "proposedRole",
208
+ "variables",
209
+ "blockers",
210
+ "pendingActions",
211
+ "filesModified",
212
+ "executionAuthorized",
213
+ "deploymentAuthorized",
214
+ "planHash"
215
+ ],
216
+ "type": "object"
217
+ }
@@ -26,6 +26,66 @@
26
26
  },
27
27
  "type": "object"
28
28
  },
29
+ "physicalResources": {
30
+ "description": "Accepted intended authorization scope, not observed resource attribution.",
31
+ "items": {
32
+ "additionalProperties": false,
33
+ "properties": {
34
+ "ownership": {
35
+ "anyOf": [
36
+ {
37
+ "const": "managed",
38
+ "type": "string"
39
+ },
40
+ {
41
+ "const": "existing",
42
+ "type": "string"
43
+ }
44
+ ]
45
+ },
46
+ "resourceId": {
47
+ "maxLength": 2048,
48
+ "minLength": 1,
49
+ "pattern": "^/[sS][uU][bB][sS][cC][rR][iI][pP][tT][iI][oO][nN][sS]/[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/[rR][eE][sS][oO][uU][rR][cC][eE][gG][rR][oO][uU][pP][sS]/[A-Za-z0-9_()-][A-Za-z0-9_.()-]*/[pP][rR][oO][vV][iI][dD][eE][rR][sS]/[A-Za-z0-9_.()/-]+$(?![\\s\\S])",
50
+ "type": "string"
51
+ },
52
+ "role": {
53
+ "anyOf": [
54
+ {
55
+ "const": "primary",
56
+ "type": "string"
57
+ },
58
+ {
59
+ "const": "ancillary",
60
+ "type": "string"
61
+ }
62
+ ]
63
+ },
64
+ "type": {
65
+ "maxLength": 256,
66
+ "minLength": 1,
67
+ "pattern": "^[mM][iI][cC][rR][oO][sS][oO][fF][tT]\\.[A-Za-z0-9.]+(?:/[A-Za-z][A-Za-z0-9]*)+$(?![\\s\\S])",
68
+ "type": "string"
69
+ }
70
+ },
71
+ "required": [
72
+ "resourceId",
73
+ "type",
74
+ "ownership",
75
+ "role"
76
+ ],
77
+ "type": "object"
78
+ },
79
+ "maxItems": 128,
80
+ "minItems": 1,
81
+ "type": "array",
82
+ "uniqueItems": true
83
+ },
84
+ "scopeLogicalId": {
85
+ "maxLength": 256,
86
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
87
+ "type": "string"
88
+ },
29
89
  "version": {
30
90
  "minLength": 1,
31
91
  "type": "string"