@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
@@ -1,15 +1,196 @@
1
1
  import { type Static } from "@sinclair/typebox";
2
- export declare const BootstrapClientSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"github-copilot-vscode">, import("@sinclair/typebox").TLiteral<"github-copilot-cli">]>;
2
+ export declare const BootstrapClientSchema: import("@sinclair/typebox").TLiteral<"github-copilot-cli">;
3
3
  export declare const OnboardingConfigV1Schema: import("@sinclair/typebox").TObject<{
4
4
  schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
5
- projectId: import("@sinclair/typebox").TString;
5
+ projectId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
6
6
  displayName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
7
- client: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"github-copilot-vscode">, import("@sinclair/typebox").TLiteral<"github-copilot-cli">]>>;
7
+ client: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TLiteral<"github-copilot-cli">>;
8
8
  environment: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
9
9
  targetScope: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
10
10
  iacTool: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"bicep">, import("@sinclair/typebox").TLiteral<"terraform">]>>;
11
+ riskOwner: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"partner">, import("@sinclair/typebox").TLiteral<"customer">]>>;
11
12
  createRepository: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
12
13
  }>;
13
14
  export type BootstrapClient = Static<typeof BootstrapClientSchema>;
14
15
  export type OnboardingConfigV1 = Static<typeof OnboardingConfigV1Schema>;
16
+ export declare const BootstrapPlanV1Schema: import("@sinclair/typebox").TObject<{
17
+ schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
18
+ config: import("@sinclair/typebox").TObject<{
19
+ schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
20
+ projectId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
21
+ displayName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
22
+ client: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TLiteral<"github-copilot-cli">>;
23
+ environment: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
24
+ targetScope: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
25
+ iacTool: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"bicep">, import("@sinclair/typebox").TLiteral<"terraform">]>>;
26
+ riskOwner: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"partner">, import("@sinclair/typebox").TLiteral<"customer">]>>;
27
+ createRepository: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
28
+ }>;
29
+ configHash: import("@sinclair/typebox").TString;
30
+ runtimeVersion: import("@sinclair/typebox").TString;
31
+ scope: import("@sinclair/typebox").TLiteral<"local-bootstrap-preflight-v1">;
32
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"pending">, import("@sinclair/typebox").TLiteral<"blocked">]>;
33
+ checks: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
34
+ id: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"repository">, import("@sinclair/typebox").TLiteral<"workspace-runtime">, import("@sinclair/typebox").TLiteral<"apex-state">]>;
35
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"pending">, import("@sinclair/typebox").TLiteral<"blocked">]>;
36
+ reason: import("@sinclair/typebox").TString;
37
+ }>>;
38
+ unassessed: import("@sinclair/typebox").TTuple<[import("@sinclair/typebox").TLiteral<"machine-prerequisites">, import("@sinclair/typebox").TLiteral<"client-health">, import("@sinclair/typebox").TLiteral<"remote-coe">, import("@sinclair/typebox").TLiteral<"github-repository">, import("@sinclair/typebox").TLiteral<"governance-oidc">, import("@sinclair/typebox").TLiteral<"reviewed-baseline">]>;
39
+ filesModified: import("@sinclair/typebox").TLiteral<false>;
40
+ executionAuthorized: import("@sinclair/typebox").TLiteral<false>;
41
+ }>;
42
+ export type BootstrapPlanV1 = Static<typeof BootstrapPlanV1Schema>;
43
+ export declare const RepositoryPublishConfigV1Schema: import("@sinclair/typebox").TObject<{
44
+ schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
45
+ owner: import("@sinclair/typebox").TString;
46
+ name: import("@sinclair/typebox").TString;
47
+ visibility: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"private">, import("@sinclair/typebox").TLiteral<"internal">, import("@sinclair/typebox").TLiteral<"public">]>;
48
+ branch: import("@sinclair/typebox").TString;
49
+ remote: import("@sinclair/typebox").TLiteral<"origin">;
50
+ }>;
51
+ export type RepositoryPublishConfigV1 = Static<typeof RepositoryPublishConfigV1Schema>;
52
+ export declare const RepositoryPublishPlanV1Schema: import("@sinclair/typebox").TObject<{
53
+ schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
54
+ config: import("@sinclair/typebox").TObject<{
55
+ schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
56
+ owner: import("@sinclair/typebox").TString;
57
+ name: import("@sinclair/typebox").TString;
58
+ visibility: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"private">, import("@sinclair/typebox").TLiteral<"internal">, import("@sinclair/typebox").TLiteral<"public">]>;
59
+ branch: import("@sinclair/typebox").TString;
60
+ remote: import("@sinclair/typebox").TLiteral<"origin">;
61
+ }>;
62
+ evidenceHash: import("@sinclair/typebox").TString;
63
+ planHash: import("@sinclair/typebox").TString;
64
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"pending">, import("@sinclair/typebox").TLiteral<"blocked">]>;
65
+ repository: import("@sinclair/typebox").TObject<{
66
+ fullName: import("@sinclair/typebox").TString;
67
+ owner: import("@sinclair/typebox").TString;
68
+ ownerType: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"user">, import("@sinclair/typebox").TLiteral<"organization">, import("@sinclair/typebox").TLiteral<"unknown">]>;
69
+ visibility: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"private">, import("@sinclair/typebox").TLiteral<"internal">, import("@sinclair/typebox").TLiteral<"public">]>;
70
+ exists: import("@sinclair/typebox").TBoolean;
71
+ }>;
72
+ actions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"create-repository">, import("@sinclair/typebox").TLiteral<"add-remote">, import("@sinclair/typebox").TLiteral<"push-branch">]>>;
73
+ push: import("@sinclair/typebox").TObject<{
74
+ branch: import("@sinclair/typebox").TString;
75
+ commit: import("@sinclair/typebox").TString;
76
+ commitCount: import("@sinclair/typebox").TInteger;
77
+ files: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
78
+ filesTruncated: import("@sinclair/typebox").TBoolean;
79
+ uncommittedChanges: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
80
+ forcePush: import("@sinclair/typebox").TLiteral<false>;
81
+ }>;
82
+ blockers: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
83
+ pendingActions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
84
+ filesModified: import("@sinclair/typebox").TLiteral<false>;
85
+ executionAuthorized: import("@sinclair/typebox").TLiteral<false>;
86
+ deploymentAuthorized: import("@sinclair/typebox").TLiteral<false>;
87
+ }>;
88
+ export type RepositoryPublishPlanV1 = Static<typeof RepositoryPublishPlanV1Schema>;
89
+ export declare const GovernanceSetupConfigV1Schema: import("@sinclair/typebox").TObject<{
90
+ schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
91
+ repository: import("@sinclair/typebox").TString;
92
+ tenantId: import("@sinclair/typebox").TString;
93
+ subscriptionId: import("@sinclair/typebox").TString;
94
+ managementGroupId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
95
+ identity: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
96
+ mode: import("@sinclair/typebox").TLiteral<"reuse">;
97
+ clientId: import("@sinclair/typebox").TString;
98
+ principalId: import("@sinclair/typebox").TString;
99
+ }>, import("@sinclair/typebox").TObject<{
100
+ mode: import("@sinclair/typebox").TLiteral<"create">;
101
+ displayName: import("@sinclair/typebox").TString;
102
+ }>]>;
103
+ }>;
104
+ export type GovernanceSetupConfigV1 = Static<typeof GovernanceSetupConfigV1Schema>;
105
+ export declare const GovernanceSetupPlanV1Schema: import("@sinclair/typebox").TObject<{
106
+ schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
107
+ config: import("@sinclair/typebox").TObject<{
108
+ schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
109
+ repository: import("@sinclair/typebox").TString;
110
+ tenantId: import("@sinclair/typebox").TString;
111
+ subscriptionId: import("@sinclair/typebox").TString;
112
+ managementGroupId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
113
+ identity: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
114
+ mode: import("@sinclair/typebox").TLiteral<"reuse">;
115
+ clientId: import("@sinclair/typebox").TString;
116
+ principalId: import("@sinclair/typebox").TString;
117
+ }>, import("@sinclair/typebox").TObject<{
118
+ mode: import("@sinclair/typebox").TLiteral<"create">;
119
+ displayName: import("@sinclair/typebox").TString;
120
+ }>]>;
121
+ }>;
122
+ evidenceHash: import("@sinclair/typebox").TString;
123
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"pending">, import("@sinclair/typebox").TLiteral<"blocked">]>;
124
+ federation: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
125
+ issuer: import("@sinclair/typebox").TLiteral<"https://token.actions.githubusercontent.com">;
126
+ audience: import("@sinclair/typebox").TLiteral<"api://AzureADTokenExchange">;
127
+ subject: import("@sinclair/typebox").TString;
128
+ }>>;
129
+ environment: import("@sinclair/typebox").TLiteral<"governance">;
130
+ proposedRole: import("@sinclair/typebox").TObject<{
131
+ id: import("@sinclair/typebox").TLiteral<"acdd72a7-3385-48ef-bd42-f606fba81ae7">;
132
+ name: import("@sinclair/typebox").TLiteral<"Reader">;
133
+ scope: import("@sinclair/typebox").TString;
134
+ }>;
135
+ variables: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TString>;
136
+ blockers: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
137
+ pendingActions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
138
+ filesModified: import("@sinclair/typebox").TLiteral<false>;
139
+ executionAuthorized: import("@sinclair/typebox").TLiteral<false>;
140
+ deploymentAuthorized: import("@sinclair/typebox").TLiteral<false>;
141
+ planHash: import("@sinclair/typebox").TString;
142
+ }>;
143
+ export type GovernanceSetupPlanV1 = Static<typeof GovernanceSetupPlanV1Schema>;
144
+ export declare const GovernanceProvisionPlanV1Schema: import("@sinclair/typebox").TObject<{
145
+ schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
146
+ setup: import("@sinclair/typebox").TObject<{
147
+ schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
148
+ config: import("@sinclair/typebox").TObject<{
149
+ schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
150
+ repository: import("@sinclair/typebox").TString;
151
+ tenantId: import("@sinclair/typebox").TString;
152
+ subscriptionId: import("@sinclair/typebox").TString;
153
+ managementGroupId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
154
+ identity: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
155
+ mode: import("@sinclair/typebox").TLiteral<"reuse">;
156
+ clientId: import("@sinclair/typebox").TString;
157
+ principalId: import("@sinclair/typebox").TString;
158
+ }>, import("@sinclair/typebox").TObject<{
159
+ mode: import("@sinclair/typebox").TLiteral<"create">;
160
+ displayName: import("@sinclair/typebox").TString;
161
+ }>]>;
162
+ }>;
163
+ evidenceHash: import("@sinclair/typebox").TString;
164
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"pending">, import("@sinclair/typebox").TLiteral<"blocked">]>;
165
+ federation: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
166
+ issuer: import("@sinclair/typebox").TLiteral<"https://token.actions.githubusercontent.com">;
167
+ audience: import("@sinclair/typebox").TLiteral<"api://AzureADTokenExchange">;
168
+ subject: import("@sinclair/typebox").TString;
169
+ }>>;
170
+ environment: import("@sinclair/typebox").TLiteral<"governance">;
171
+ proposedRole: import("@sinclair/typebox").TObject<{
172
+ id: import("@sinclair/typebox").TLiteral<"acdd72a7-3385-48ef-bd42-f606fba81ae7">;
173
+ name: import("@sinclair/typebox").TLiteral<"Reader">;
174
+ scope: import("@sinclair/typebox").TString;
175
+ }>;
176
+ variables: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TString>;
177
+ blockers: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
178
+ pendingActions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
179
+ filesModified: import("@sinclair/typebox").TLiteral<false>;
180
+ executionAuthorized: import("@sinclair/typebox").TLiteral<false>;
181
+ deploymentAuthorized: import("@sinclair/typebox").TLiteral<false>;
182
+ planHash: import("@sinclair/typebox").TString;
183
+ }>;
184
+ contextHash: import("@sinclair/typebox").TString;
185
+ evidenceHash: import("@sinclair/typebox").TString;
186
+ planHash: import("@sinclair/typebox").TString;
187
+ status: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"ready">, import("@sinclair/typebox").TLiteral<"blocked">]>;
188
+ applicationObjectId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
189
+ federationName: import("@sinclair/typebox").TString;
190
+ actions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"create-federation">, import("@sinclair/typebox").TLiteral<"assign-reader">]>>;
191
+ blockers: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
192
+ executionAuthorized: import("@sinclair/typebox").TLiteral<false>;
193
+ deploymentAuthorized: import("@sinclair/typebox").TLiteral<false>;
194
+ }>;
195
+ export type GovernanceProvisionPlanV1 = Static<typeof GovernanceProvisionPlanV1Schema>;
15
196
  //# sourceMappingURL=onboarding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../src/onboarding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAStD,eAAO,MAAM,qBAAqB,iKAGhC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;EAYpC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnE,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../src/onboarding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAWtD,eAAO,MAAM,qBAAqB,4DAAqC,CAAC;AAExE,eAAO,MAAM,wBAAwB;;;;;;;;;;EAapC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACnE,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEzE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;EA+BjC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEnE,eAAO,MAAM,+BAA+B;;;;;;;EAU3C,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAEvF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwCzC,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAKnF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;EAwBzC,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEnF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCvC,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAE/E,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmB3C,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAAC,OAAO,+BAA+B,CAAC,CAAC"}
@@ -1,17 +1,133 @@
1
1
  import { Type } from "@sinclair/typebox";
2
- import { ContractVersionSchema, EnvironmentSchema, IacToolSchema, NonEmptyStringSchema, ProjectIdSchema, } from "./common.js";
3
- export const BootstrapClientSchema = Type.Union([
4
- Type.Literal("github-copilot-vscode"),
5
- Type.Literal("github-copilot-cli"),
6
- ]);
2
+ import { ContractVersionSchema, EnvironmentSchema, IacToolSchema, NonEmptyStringSchema, ProjectIdSchema, RiskOwnerSchema, Sha256Schema, } from "./common.js";
3
+ export const BootstrapClientSchema = Type.Literal("github-copilot-cli");
7
4
  export const OnboardingConfigV1Schema = Type.Object({
8
5
  schemaVersion: ContractVersionSchema,
9
- projectId: ProjectIdSchema,
6
+ projectId: Type.Optional(ProjectIdSchema),
10
7
  displayName: Type.Optional(NonEmptyStringSchema),
11
8
  client: Type.Optional(BootstrapClientSchema),
12
9
  environment: Type.Optional(EnvironmentSchema),
13
10
  targetScope: Type.Optional(NonEmptyStringSchema),
14
11
  iacTool: Type.Optional(IacToolSchema),
12
+ riskOwner: Type.Optional(RiskOwnerSchema),
15
13
  createRepository: Type.Optional(Type.Boolean()),
16
14
  }, { $id: "https://schemas.apexops.dev/onboarding-config-v1.json", additionalProperties: false });
15
+ export const BootstrapPlanV1Schema = Type.Object({
16
+ schemaVersion: ContractVersionSchema,
17
+ config: OnboardingConfigV1Schema,
18
+ configHash: Sha256Schema,
19
+ runtimeVersion: NonEmptyStringSchema,
20
+ scope: Type.Literal("local-bootstrap-preflight-v1"),
21
+ status: Type.Union([Type.Literal("ready"), Type.Literal("pending"), Type.Literal("blocked")]),
22
+ checks: Type.Array(Type.Object({
23
+ id: Type.Union([Type.Literal("repository"), Type.Literal("workspace-runtime"), Type.Literal("apex-state")]),
24
+ status: Type.Union([Type.Literal("ready"), Type.Literal("pending"), Type.Literal("blocked")]),
25
+ reason: Type.String({ minLength: 1, maxLength: 1024 }),
26
+ }, { additionalProperties: false }), { minItems: 3, maxItems: 3 }),
27
+ unassessed: Type.Tuple([
28
+ Type.Literal("machine-prerequisites"),
29
+ Type.Literal("client-health"),
30
+ Type.Literal("remote-coe"),
31
+ Type.Literal("github-repository"),
32
+ Type.Literal("governance-oidc"),
33
+ Type.Literal("reviewed-baseline"),
34
+ ]),
35
+ filesModified: Type.Literal(false),
36
+ executionAuthorized: Type.Literal(false),
37
+ }, { $id: "https://schemas.apexops.dev/bootstrap-plan-v1.json", additionalProperties: false });
38
+ export const RepositoryPublishConfigV1Schema = Type.Object({
39
+ schemaVersion: ContractVersionSchema,
40
+ owner: Type.String({ pattern: "^[A-Za-z0-9][A-Za-z0-9-]{0,38}$(?![\\s\\S])" }),
41
+ name: Type.String({ pattern: "^[A-Za-z0-9][A-Za-z0-9_.-]{0,99}$(?![\\s\\S])" }),
42
+ visibility: Type.Union([Type.Literal("private"), Type.Literal("internal"), Type.Literal("public")]),
43
+ branch: Type.String({ pattern: "^[A-Za-z0-9][A-Za-z0-9._/-]{0,254}$(?![\\s\\S])" }),
44
+ remote: Type.Literal("origin"),
45
+ }, { $id: "https://schemas.apexops.dev/repository-publish-config-v1.json", additionalProperties: false });
46
+ export const RepositoryPublishPlanV1Schema = Type.Object({
47
+ schemaVersion: ContractVersionSchema,
48
+ config: RepositoryPublishConfigV1Schema,
49
+ evidenceHash: Sha256Schema,
50
+ planHash: Sha256Schema,
51
+ status: Type.Union([Type.Literal("ready"), Type.Literal("pending"), Type.Literal("blocked")]),
52
+ repository: Type.Object({
53
+ fullName: Type.String({ minLength: 3, maxLength: 140 }),
54
+ owner: Type.String({ minLength: 1, maxLength: 39 }),
55
+ ownerType: Type.Union([Type.Literal("user"), Type.Literal("organization"), Type.Literal("unknown")]),
56
+ visibility: Type.Union([Type.Literal("private"), Type.Literal("internal"), Type.Literal("public")]),
57
+ exists: Type.Boolean(),
58
+ }, { additionalProperties: false }),
59
+ actions: Type.Array(Type.Union([Type.Literal("create-repository"), Type.Literal("add-remote"), Type.Literal("push-branch")]), { maxItems: 3, uniqueItems: true }),
60
+ push: Type.Object({
61
+ branch: Type.String({ minLength: 1, maxLength: 255 }),
62
+ commit: Type.String({ pattern: "^[0-9a-f]{40}$(?![\\s\\S])" }),
63
+ commitCount: Type.Integer({ minimum: 0, maximum: 1_000_000 }),
64
+ files: Type.Array(Type.String({ minLength: 1, maxLength: 1024 }), { maxItems: 512 }),
65
+ filesTruncated: Type.Boolean(),
66
+ uncommittedChanges: Type.Array(Type.String({ minLength: 1, maxLength: 1024 }), { maxItems: 512 }),
67
+ forcePush: Type.Literal(false),
68
+ }, { additionalProperties: false }),
69
+ blockers: Type.Array(Type.String({ minLength: 1, maxLength: 512 }), { maxItems: 16 }),
70
+ pendingActions: Type.Array(Type.String({ minLength: 1, maxLength: 256 }), { maxItems: 16 }),
71
+ filesModified: Type.Literal(false),
72
+ executionAuthorized: Type.Literal(false),
73
+ deploymentAuthorized: Type.Literal(false),
74
+ }, { $id: "https://schemas.apexops.dev/repository-publish-plan-v1.json", additionalProperties: false });
75
+ const AzureId = Type.String({
76
+ 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])",
77
+ });
78
+ export const GovernanceSetupConfigV1Schema = Type.Object({
79
+ schemaVersion: ContractVersionSchema,
80
+ repository: Type.String({ pattern: "^[A-Za-z0-9][A-Za-z0-9-]{0,38}/[A-Za-z0-9][A-Za-z0-9_.-]{0,99}$(?![\\s\\S])" }),
81
+ tenantId: AzureId,
82
+ subscriptionId: AzureId,
83
+ managementGroupId: Type.Optional(Type.String({ pattern: "^[A-Za-z0-9](?:[A-Za-z0-9_().-]{0,88}[A-Za-z0-9_()-])?$(?![\\s\\S])" })),
84
+ identity: Type.Union([
85
+ Type.Object({ mode: Type.Literal("reuse"), clientId: AzureId, principalId: AzureId }, { additionalProperties: false }),
86
+ Type.Object({
87
+ mode: Type.Literal("create"),
88
+ displayName: Type.String({ pattern: "^[A-Za-z][A-Za-z0-9_.-]{0,79}$(?![\\s\\S])" }),
89
+ }, { additionalProperties: false }),
90
+ ]),
91
+ }, { $id: "https://schemas.apexops.dev/governance-setup-config-v1.json", additionalProperties: false });
92
+ export const GovernanceSetupPlanV1Schema = Type.Object({
93
+ schemaVersion: ContractVersionSchema,
94
+ config: GovernanceSetupConfigV1Schema,
95
+ evidenceHash: Sha256Schema,
96
+ status: Type.Union([Type.Literal("pending"), Type.Literal("blocked")]),
97
+ federation: Type.Optional(Type.Object({
98
+ issuer: Type.Literal("https://token.actions.githubusercontent.com"),
99
+ audience: Type.Literal("api://AzureADTokenExchange"),
100
+ subject: Type.String({ minLength: 1, maxLength: 512 }),
101
+ }, { additionalProperties: false })),
102
+ environment: Type.Literal("governance"),
103
+ proposedRole: Type.Object({
104
+ id: Type.Literal("acdd72a7-3385-48ef-bd42-f606fba81ae7"),
105
+ name: Type.Literal("Reader"),
106
+ scope: Type.String({ minLength: 1, maxLength: 256 }),
107
+ }, { additionalProperties: false }),
108
+ variables: Type.Record(Type.String({ pattern: "^[A-Z_]+$" }), Type.String({ maxLength: 256 })),
109
+ blockers: Type.Array(Type.String({ minLength: 1, maxLength: 512 }), { maxItems: 16 }),
110
+ pendingActions: Type.Array(Type.String({ minLength: 1, maxLength: 256 }), { maxItems: 16 }),
111
+ filesModified: Type.Literal(false),
112
+ executionAuthorized: Type.Literal(false),
113
+ deploymentAuthorized: Type.Literal(false),
114
+ planHash: Sha256Schema,
115
+ }, { $id: "https://schemas.apexops.dev/governance-setup-plan-v1.json", additionalProperties: false });
116
+ export const GovernanceProvisionPlanV1Schema = Type.Object({
117
+ schemaVersion: ContractVersionSchema,
118
+ setup: GovernanceSetupPlanV1Schema,
119
+ contextHash: Sha256Schema,
120
+ evidenceHash: Sha256Schema,
121
+ planHash: Sha256Schema,
122
+ status: Type.Union([Type.Literal("ready"), Type.Literal("blocked")]),
123
+ applicationObjectId: Type.Optional(AzureId),
124
+ federationName: Type.String({ pattern: "^apex-governance-[a-f0-9]{24}$" }),
125
+ actions: Type.Array(Type.Union([Type.Literal("create-federation"), Type.Literal("assign-reader")]), {
126
+ maxItems: 2,
127
+ uniqueItems: true,
128
+ }),
129
+ blockers: Type.Array(Type.String({ minLength: 1, maxLength: 512 }), { maxItems: 16 }),
130
+ executionAuthorized: Type.Literal(false),
131
+ deploymentAuthorized: Type.Literal(false),
132
+ }, { $id: "https://schemas.apexops.dev/governance-provision-plan-v1.json", additionalProperties: false });
17
133
  //# sourceMappingURL=onboarding.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../src/onboarding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC;IAC9C,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC;IACrC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,MAAM,CACjD;IACE,aAAa,EAAE,qBAAqB;IACpC,SAAS,EAAE,eAAe;IAC1B,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAChD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC5C,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC7C,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAChD,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;IACrC,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;CAChD,EACD,EAAE,GAAG,EAAE,uDAAuD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAC9F,CAAC"}
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../src/onboarding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { type Static } from "@sinclair/typebox";
2
+ import { PolicyPropertyMapV1Schema } from "./targets.js";
3
+ export declare const PolicyValidationV1Schema: import("@sinclair/typebox").TObject<{
4
+ schemaVersion: import("@sinclair/typebox").TLiteral<"1.0.0">;
5
+ projectId: import("@sinclair/typebox").TString;
6
+ runId: import("@sinclair/typebox").TString;
7
+ track: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"bicep">, import("@sinclair/typebox").TLiteral<"terraform">]>;
8
+ sourceHash: import("@sinclair/typebox").TString;
9
+ policyMapHash: import("@sinclair/typebox").TString;
10
+ policyMapContentHash: import("@sinclair/typebox").TString;
11
+ logicalResourceManifestHash: import("@sinclair/typebox").TString;
12
+ inputHash: import("@sinclair/typebox").TString;
13
+ outcome: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"pass">, import("@sinclair/typebox").TLiteral<"fail">, import("@sinclair/typebox").TLiteral<"unsupported">]>;
14
+ results: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
15
+ mappingIndex: import("@sinclair/typebox").TInteger;
16
+ mappingHash: import("@sinclair/typebox").TString;
17
+ policyAssignmentId: import("@sinclair/typebox").TString;
18
+ policyDefinitionId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
19
+ policyDefinitionReferenceId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
20
+ effect: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"deny">, import("@sinclair/typebox").TLiteral<"modify">, import("@sinclair/typebox").TLiteral<"append">, import("@sinclair/typebox").TLiteral<"audit">, import("@sinclair/typebox").TLiteral<"deployIfNotExists">, import("@sinclair/typebox").TLiteral<"disabled">]>;
21
+ disposition: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"satisfied">, import("@sinclair/typebox").TLiteral<"planned">, import("@sinclair/typebox").TLiteral<"exempt">, import("@sinclair/typebox").TLiteral<"blocked">, import("@sinclair/typebox").TLiteral<"not-applicable">]>;
22
+ logicalResourceId: import("@sinclair/typebox").TString;
23
+ propertyPath: import("@sinclair/typebox").TString;
24
+ expectedValueDigest: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
25
+ observedValueDigest: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
26
+ outcome: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"pass">, import("@sinclair/typebox").TLiteral<"fail">, import("@sinclair/typebox").TLiteral<"unsupported">]>;
27
+ reason: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"matched">, import("@sinclair/typebox").TLiteral<"value-mismatch">, import("@sinclair/typebox").TLiteral<"missing-property">, import("@sinclair/typebox").TLiteral<"blocked">, import("@sinclair/typebox").TLiteral<"missing-expected-value">, import("@sinclair/typebox").TLiteral<"unverified-exemption">, import("@sinclair/typebox").TLiteral<"unsupported-effect">, import("@sinclair/typebox").TLiteral<"unsupported-path">, import("@sinclair/typebox").TLiteral<"unsupported-expression">, import("@sinclair/typebox").TLiteral<"resource-not-bound">, import("@sinclair/typebox").TLiteral<"resource-not-found">, import("@sinclair/typebox").TLiteral<"ambiguous-resource">, import("@sinclair/typebox").TLiteral<"unsupported-resource">, import("@sinclair/typebox").TLiteral<"invalid-source">, import("@sinclair/typebox").TLiteral<"not-applicable">, import("@sinclair/typebox").TLiteral<"platform-remediated">]>;
28
+ }>>;
29
+ receiptHash: import("@sinclair/typebox").TString;
30
+ }>;
31
+ export type PolicyValidationV1 = Static<typeof PolicyValidationV1Schema>;
32
+ export declare function hasActionablePolicyMappings(policyMap: Static<typeof PolicyPropertyMapV1Schema>): boolean;
33
+ export type PolicyValidationResultV1 = PolicyValidationV1["results"][number];
34
+ export type PolicyValidationBinding = Pick<PolicyValidationV1, "track" | "sourceHash" | "policyMapHash" | "policyMapContentHash" | "logicalResourceManifestHash" | "inputHash">;
35
+ export declare const POLICY_VALIDATION_LIMITS: Readonly<{
36
+ bytes: number;
37
+ depth: 64;
38
+ nodes: 100000;
39
+ mappings: 1000;
40
+ }>;
41
+ export declare function assertPolicyValidationJson(value: unknown): void;
42
+ export declare function calculatePolicyValidationDigest(value: unknown): string;
43
+ export declare function calculatePolicyValidationHash(receipt: Omit<PolicyValidationV1, "receiptHash">): string;
44
+ export declare function hasValidPolicyValidation(value: unknown, binding: PolicyValidationBinding): value is PolicyValidationV1;
45
+ //# sourceMappingURL=policy-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-validation.d.ts","sourceRoot":"","sources":["../src/policy-validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAUtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAKzD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEzE,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,yBAAyB,CAAC,GAAG,OAAO,CAExG;AACD,MAAM,MAAM,wBAAwB,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7E,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,kBAAkB,EAClB,OAAO,GAAG,YAAY,GAAG,eAAe,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,WAAW,CAChH,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;EAKnC,CAAC;AAEH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAyC/D;AAqBD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKtE;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,GAAG,MAAM,CAEtG;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,uBAAuB,GAC/B,KAAK,IAAI,kBAAkB,CA0D7B"}
@@ -0,0 +1,194 @@
1
+ import { createHash } from "node:crypto";
2
+ import { Type } from "@sinclair/typebox";
3
+ import { Value } from "@sinclair/typebox/value";
4
+ import { ContractVersionSchema, IacToolSchema, NonEmptyStringSchema, ProjectIdSchema, RunIdSchema, Sha256Schema, } from "./common.js";
5
+ import { PolicyPropertyMapV1Schema } from "./targets.js";
6
+ const OutcomeSchema = Type.Union([Type.Literal("pass"), Type.Literal("fail"), Type.Literal("unsupported")]);
7
+ const mappingProperties = PolicyPropertyMapV1Schema.properties.mappings.items.properties;
8
+ export const PolicyValidationV1Schema = Type.Object({
9
+ schemaVersion: ContractVersionSchema,
10
+ projectId: ProjectIdSchema,
11
+ runId: RunIdSchema,
12
+ track: IacToolSchema,
13
+ sourceHash: Sha256Schema,
14
+ policyMapHash: Sha256Schema,
15
+ policyMapContentHash: Sha256Schema,
16
+ logicalResourceManifestHash: Sha256Schema,
17
+ inputHash: Sha256Schema,
18
+ outcome: OutcomeSchema,
19
+ results: Type.Array(Type.Object({
20
+ mappingIndex: Type.Integer({ minimum: 0 }),
21
+ mappingHash: Sha256Schema,
22
+ policyAssignmentId: NonEmptyStringSchema,
23
+ policyDefinitionId: Type.Optional(NonEmptyStringSchema),
24
+ policyDefinitionReferenceId: Type.Optional(NonEmptyStringSchema),
25
+ effect: mappingProperties.effect,
26
+ disposition: mappingProperties.disposition,
27
+ logicalResourceId: NonEmptyStringSchema,
28
+ propertyPath: NonEmptyStringSchema,
29
+ expectedValueDigest: Type.Optional(Sha256Schema),
30
+ observedValueDigest: Type.Optional(Sha256Schema),
31
+ outcome: OutcomeSchema,
32
+ reason: Type.Union([
33
+ Type.Literal("matched"),
34
+ Type.Literal("value-mismatch"),
35
+ Type.Literal("missing-property"),
36
+ Type.Literal("blocked"),
37
+ Type.Literal("missing-expected-value"),
38
+ Type.Literal("unverified-exemption"),
39
+ Type.Literal("unsupported-effect"),
40
+ Type.Literal("unsupported-path"),
41
+ Type.Literal("unsupported-expression"),
42
+ Type.Literal("resource-not-bound"),
43
+ Type.Literal("resource-not-found"),
44
+ Type.Literal("ambiguous-resource"),
45
+ Type.Literal("unsupported-resource"),
46
+ Type.Literal("invalid-source"),
47
+ Type.Literal("not-applicable"),
48
+ Type.Literal("platform-remediated"),
49
+ ]),
50
+ }, { additionalProperties: false })),
51
+ receiptHash: Sha256Schema,
52
+ }, { $id: "https://schemas.apexops.dev/policy-validation-v1.json", additionalProperties: false });
53
+ export function hasActionablePolicyMappings(policyMap) {
54
+ return policyMap.mappings.some(({ disposition }) => disposition !== "not-applicable");
55
+ }
56
+ export const POLICY_VALIDATION_LIMITS = Object.freeze({
57
+ bytes: 16 * 1024 * 1024,
58
+ depth: 64,
59
+ nodes: 100_000,
60
+ mappings: 1_000,
61
+ });
62
+ export function assertPolicyValidationJson(value) {
63
+ const pending = [{ value, depth: 0, exit: false }];
64
+ const ancestors = new Set();
65
+ let nodes = 1;
66
+ let bytes = 0;
67
+ while (pending.length > 0) {
68
+ const current = pending.pop();
69
+ if (current.exit) {
70
+ ancestors.delete(current.value);
71
+ continue;
72
+ }
73
+ if (current.depth > POLICY_VALIDATION_LIMITS.depth)
74
+ throw new TypeError("POLICY_VALIDATION_LIMIT_EXCEEDED");
75
+ const child = current.value;
76
+ if (child !== null && typeof child === "object") {
77
+ if ((!Array.isArray(child) && Object.getPrototypeOf(child) !== Object.prototype) || ancestors.has(child))
78
+ throw new TypeError("POLICY_VALIDATION_NON_JSON_VALUE");
79
+ ancestors.add(child);
80
+ pending.push({ ...current, exit: true });
81
+ const keys = Array.isArray(child) ? undefined : Object.keys(child);
82
+ const length = keys === undefined ? child.length : keys.length;
83
+ nodes += length;
84
+ if (nodes > POLICY_VALIDATION_LIMITS.nodes)
85
+ throw new TypeError("POLICY_VALIDATION_LIMIT_EXCEEDED");
86
+ bytes += 2 + Math.max(0, length - 1);
87
+ for (let index = 0; index < length; index++) {
88
+ const key = keys?.[index];
89
+ const entry = key === undefined ? child[index] : child[key];
90
+ if (key !== undefined)
91
+ bytes += Buffer.byteLength(JSON.stringify(key), "utf8") + 1;
92
+ pending.push({ value: entry, depth: current.depth + 1, exit: false });
93
+ }
94
+ }
95
+ else if (child === null ||
96
+ typeof child === "string" ||
97
+ typeof child === "boolean" ||
98
+ (typeof child === "number" && Number.isFinite(child))) {
99
+ bytes += Buffer.byteLength(JSON.stringify(child), "utf8");
100
+ }
101
+ else {
102
+ throw new TypeError("POLICY_VALIDATION_NON_JSON_VALUE");
103
+ }
104
+ if (bytes > POLICY_VALIDATION_LIMITS.bytes)
105
+ throw new TypeError("POLICY_VALIDATION_LIMIT_EXCEEDED");
106
+ }
107
+ }
108
+ function canonicalValue(value) {
109
+ if (Array.isArray(value))
110
+ return value.map(canonicalValue);
111
+ if (value !== null && typeof value === "object" && Object.getPrototypeOf(value) === Object.prototype) {
112
+ return Object.fromEntries(Object.entries(value)
113
+ .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))
114
+ .map(([key, child]) => [key, canonicalValue(child)]));
115
+ }
116
+ if (value === null ||
117
+ typeof value === "string" ||
118
+ typeof value === "boolean" ||
119
+ (typeof value === "number" && Number.isFinite(value)))
120
+ return value;
121
+ throw new TypeError("POLICY_VALIDATION_NON_JSON_VALUE");
122
+ }
123
+ export function calculatePolicyValidationDigest(value) {
124
+ assertPolicyValidationJson(value);
125
+ return createHash("sha256")
126
+ .update(JSON.stringify(canonicalValue(value)))
127
+ .digest("hex");
128
+ }
129
+ export function calculatePolicyValidationHash(receipt) {
130
+ return calculatePolicyValidationDigest(receipt);
131
+ }
132
+ export function hasValidPolicyValidation(value, binding) {
133
+ try {
134
+ assertPolicyValidationJson(value);
135
+ assertPolicyValidationJson(binding);
136
+ }
137
+ catch {
138
+ return false;
139
+ }
140
+ if (binding === null || typeof binding !== "object" || Array.isArray(binding))
141
+ return false;
142
+ if (!Value.Check(PolicyValidationV1Schema, value))
143
+ return false;
144
+ if (value.results.length > POLICY_VALIDATION_LIMITS.mappings)
145
+ return false;
146
+ const { receiptHash, ...receipt } = value;
147
+ const keys = [
148
+ "track",
149
+ "sourceHash",
150
+ "policyMapHash",
151
+ "policyMapContentHash",
152
+ "logicalResourceManifestHash",
153
+ "inputHash",
154
+ ];
155
+ if (keys.some((key) => receipt[key] !== binding[key]))
156
+ return false;
157
+ const outcome = receipt.results.some((result) => result.outcome === "fail")
158
+ ? "fail"
159
+ : receipt.results.length === 0 || receipt.results.some((result) => result.outcome === "unsupported")
160
+ ? "unsupported"
161
+ : "pass";
162
+ if (receipt.outcome !== outcome)
163
+ return false;
164
+ if (!receipt.results.every((result, index) => {
165
+ if (result.mappingIndex !== index)
166
+ return false;
167
+ if (result.reason === "matched") {
168
+ return (result.outcome === "pass" &&
169
+ result.expectedValueDigest !== undefined &&
170
+ result.expectedValueDigest === result.observedValueDigest &&
171
+ result.disposition !== "blocked" &&
172
+ result.disposition !== "exempt" &&
173
+ result.disposition !== "not-applicable" &&
174
+ result.effect !== "disabled");
175
+ }
176
+ if (result.reason === "not-applicable")
177
+ return result.outcome === "pass" && result.disposition === "not-applicable";
178
+ if (result.reason === "platform-remediated")
179
+ return (result.outcome === "pass" &&
180
+ ["modify", "deployIfNotExists"].includes(result.effect) &&
181
+ ["satisfied", "planned"].includes(result.disposition));
182
+ if (["blocked", "value-mismatch", "missing-property"].includes(result.reason))
183
+ return result.outcome === "fail";
184
+ return result.outcome === "unsupported";
185
+ }))
186
+ return false;
187
+ try {
188
+ return receiptHash === calculatePolicyValidationHash(receipt);
189
+ }
190
+ catch {
191
+ return false;
192
+ }
193
+ }
194
+ //# sourceMappingURL=policy-validation.js.map