@pax8-cta/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/LICENSE +198 -0
  2. package/dist/auth/device-code-login.d.ts +40 -0
  3. package/dist/auth/device-code-login.d.ts.map +1 -0
  4. package/dist/auth/device-code-login.js +59 -0
  5. package/dist/auth/device-code-login.js.map +1 -0
  6. package/dist/auth/gdap-client.d.ts +81 -0
  7. package/dist/auth/gdap-client.d.ts.map +1 -0
  8. package/dist/auth/gdap-client.js +128 -0
  9. package/dist/auth/gdap-client.js.map +1 -0
  10. package/dist/auth/index.d.ts +19 -0
  11. package/dist/auth/index.d.ts.map +1 -0
  12. package/dist/auth/index.js +19 -0
  13. package/dist/auth/index.js.map +1 -0
  14. package/dist/auth/token-manager.d.ts +54 -0
  15. package/dist/auth/token-manager.d.ts.map +1 -0
  16. package/dist/auth/token-manager.js +150 -0
  17. package/dist/auth/token-manager.js.map +1 -0
  18. package/dist/client.d.ts +27 -0
  19. package/dist/client.d.ts.map +1 -0
  20. package/dist/client.js +27 -0
  21. package/dist/client.js.map +1 -0
  22. package/dist/config/client.d.ts +24 -0
  23. package/dist/config/client.d.ts.map +1 -0
  24. package/dist/config/client.js +18 -0
  25. package/dist/config/client.js.map +1 -0
  26. package/dist/config/index.d.ts +18 -0
  27. package/dist/config/index.d.ts.map +1 -0
  28. package/dist/config/index.js +18 -0
  29. package/dist/config/index.js.map +1 -0
  30. package/dist/config/loader.d.ts +81 -0
  31. package/dist/config/loader.d.ts.map +1 -0
  32. package/dist/config/loader.js +271 -0
  33. package/dist/config/loader.js.map +1 -0
  34. package/dist/config/schema.d.ts +751 -0
  35. package/dist/config/schema.d.ts.map +1 -0
  36. package/dist/config/schema.js +556 -0
  37. package/dist/config/schema.js.map +1 -0
  38. package/dist/constants.d.ts +116 -0
  39. package/dist/constants.d.ts.map +1 -0
  40. package/dist/constants.js +170 -0
  41. package/dist/constants.js.map +1 -0
  42. package/dist/dataverse/agent-resolver.d.ts +98 -0
  43. package/dist/dataverse/agent-resolver.d.ts.map +1 -0
  44. package/dist/dataverse/agent-resolver.js +185 -0
  45. package/dist/dataverse/agent-resolver.js.map +1 -0
  46. package/dist/dataverse/client.d.ts +104 -0
  47. package/dist/dataverse/client.d.ts.map +1 -0
  48. package/dist/dataverse/client.js +272 -0
  49. package/dist/dataverse/client.js.map +1 -0
  50. package/dist/dataverse/connection-refs.d.ts +115 -0
  51. package/dist/dataverse/connection-refs.d.ts.map +1 -0
  52. package/dist/dataverse/connection-refs.js +203 -0
  53. package/dist/dataverse/connection-refs.js.map +1 -0
  54. package/dist/dataverse/index.d.ts +20 -0
  55. package/dist/dataverse/index.d.ts.map +1 -0
  56. package/dist/dataverse/index.js +20 -0
  57. package/dist/dataverse/index.js.map +1 -0
  58. package/dist/dataverse/solution-ops.d.ts +100 -0
  59. package/dist/dataverse/solution-ops.d.ts.map +1 -0
  60. package/dist/dataverse/solution-ops.js +288 -0
  61. package/dist/dataverse/solution-ops.js.map +1 -0
  62. package/dist/errors.d.ts +171 -0
  63. package/dist/errors.d.ts.map +1 -0
  64. package/dist/errors.js +178 -0
  65. package/dist/errors.js.map +1 -0
  66. package/dist/index.d.ts +27 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +40 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/mock/demo-data.d.ts +213 -0
  71. package/dist/mock/demo-data.d.ts.map +1 -0
  72. package/dist/mock/demo-data.js +1096 -0
  73. package/dist/mock/demo-data.js.map +1 -0
  74. package/dist/mock/demo-deployment-store.d.ts +77 -0
  75. package/dist/mock/demo-deployment-store.d.ts.map +1 -0
  76. package/dist/mock/demo-deployment-store.js +85 -0
  77. package/dist/mock/demo-deployment-store.js.map +1 -0
  78. package/dist/powerplatform/admin-client.d.ts +226 -0
  79. package/dist/powerplatform/admin-client.d.ts.map +1 -0
  80. package/dist/powerplatform/admin-client.js +315 -0
  81. package/dist/powerplatform/admin-client.js.map +1 -0
  82. package/dist/powerplatform/index.d.ts +18 -0
  83. package/dist/powerplatform/index.d.ts.map +1 -0
  84. package/dist/powerplatform/index.js +18 -0
  85. package/dist/powerplatform/index.js.map +1 -0
  86. package/dist/powerplatform/tenant-discovery.d.ts +100 -0
  87. package/dist/powerplatform/tenant-discovery.d.ts.map +1 -0
  88. package/dist/powerplatform/tenant-discovery.js +205 -0
  89. package/dist/powerplatform/tenant-discovery.js.map +1 -0
  90. package/dist/preconditions/check.d.ts +41 -0
  91. package/dist/preconditions/check.d.ts.map +1 -0
  92. package/dist/preconditions/check.js +173 -0
  93. package/dist/preconditions/check.js.map +1 -0
  94. package/dist/preconditions/index.d.ts +20 -0
  95. package/dist/preconditions/index.d.ts.map +1 -0
  96. package/dist/preconditions/index.js +20 -0
  97. package/dist/preconditions/index.js.map +1 -0
  98. package/dist/preconditions/loader.d.ts +33 -0
  99. package/dist/preconditions/loader.d.ts.map +1 -0
  100. package/dist/preconditions/loader.js +65 -0
  101. package/dist/preconditions/loader.js.map +1 -0
  102. package/dist/preconditions/schema.d.ts +103 -0
  103. package/dist/preconditions/schema.d.ts.map +1 -0
  104. package/dist/preconditions/schema.js +93 -0
  105. package/dist/preconditions/schema.js.map +1 -0
  106. package/dist/preconditions/types.d.ts +118 -0
  107. package/dist/preconditions/types.d.ts.map +1 -0
  108. package/dist/preconditions/types.js +17 -0
  109. package/dist/preconditions/types.js.map +1 -0
  110. package/dist/queue/index.d.ts +17 -0
  111. package/dist/queue/index.d.ts.map +1 -0
  112. package/dist/queue/index.js +17 -0
  113. package/dist/queue/index.js.map +1 -0
  114. package/dist/queue/memory-queue.d.ts +86 -0
  115. package/dist/queue/memory-queue.d.ts.map +1 -0
  116. package/dist/queue/memory-queue.js +221 -0
  117. package/dist/queue/memory-queue.js.map +1 -0
  118. package/dist/services/audit-log.d.ts +59 -0
  119. package/dist/services/audit-log.d.ts.map +1 -0
  120. package/dist/services/audit-log.js +193 -0
  121. package/dist/services/audit-log.js.map +1 -0
  122. package/dist/services/auth-error-parser.d.ts +36 -0
  123. package/dist/services/auth-error-parser.d.ts.map +1 -0
  124. package/dist/services/auth-error-parser.js +90 -0
  125. package/dist/services/auth-error-parser.js.map +1 -0
  126. package/dist/services/deployment-doctor.d.ts +109 -0
  127. package/dist/services/deployment-doctor.d.ts.map +1 -0
  128. package/dist/services/deployment-doctor.js +476 -0
  129. package/dist/services/deployment-doctor.js.map +1 -0
  130. package/dist/services/deployment-notifications.d.ts +41 -0
  131. package/dist/services/deployment-notifications.d.ts.map +1 -0
  132. package/dist/services/deployment-notifications.js +161 -0
  133. package/dist/services/deployment-notifications.js.map +1 -0
  134. package/dist/services/deployment-progress.d.ts +89 -0
  135. package/dist/services/deployment-progress.d.ts.map +1 -0
  136. package/dist/services/deployment-progress.js +244 -0
  137. package/dist/services/deployment-progress.js.map +1 -0
  138. package/dist/services/deployment-service.d.ts +97 -0
  139. package/dist/services/deployment-service.d.ts.map +1 -0
  140. package/dist/services/deployment-service.js +375 -0
  141. package/dist/services/deployment-service.js.map +1 -0
  142. package/dist/services/drift-analyzer.d.ts +86 -0
  143. package/dist/services/drift-analyzer.d.ts.map +1 -0
  144. package/dist/services/drift-analyzer.js +273 -0
  145. package/dist/services/drift-analyzer.js.map +1 -0
  146. package/dist/services/environment-setup.d.ts +97 -0
  147. package/dist/services/environment-setup.d.ts.map +1 -0
  148. package/dist/services/environment-setup.js +250 -0
  149. package/dist/services/environment-setup.js.map +1 -0
  150. package/dist/services/health-check.d.ts +168 -0
  151. package/dist/services/health-check.d.ts.map +1 -0
  152. package/dist/services/health-check.js +705 -0
  153. package/dist/services/health-check.js.map +1 -0
  154. package/dist/services/index.d.ts +39 -0
  155. package/dist/services/index.d.ts.map +1 -0
  156. package/dist/services/index.js +39 -0
  157. package/dist/services/index.js.map +1 -0
  158. package/dist/services/logger.d.ts +139 -0
  159. package/dist/services/logger.d.ts.map +1 -0
  160. package/dist/services/logger.js +268 -0
  161. package/dist/services/logger.js.map +1 -0
  162. package/dist/services/notification-service.d.ts +55 -0
  163. package/dist/services/notification-service.d.ts.map +1 -0
  164. package/dist/services/notification-service.js +184 -0
  165. package/dist/services/notification-service.js.map +1 -0
  166. package/dist/services/risk-analyzer.d.ts +252 -0
  167. package/dist/services/risk-analyzer.d.ts.map +1 -0
  168. package/dist/services/risk-analyzer.js +866 -0
  169. package/dist/services/risk-analyzer.js.map +1 -0
  170. package/dist/services/rollback.d.ts +57 -0
  171. package/dist/services/rollback.d.ts.map +1 -0
  172. package/dist/services/rollback.js +270 -0
  173. package/dist/services/rollback.js.map +1 -0
  174. package/dist/services/scheduler.d.ts +80 -0
  175. package/dist/services/scheduler.d.ts.map +1 -0
  176. package/dist/services/scheduler.js +350 -0
  177. package/dist/services/scheduler.js.map +1 -0
  178. package/dist/services/secrets.d.ts +31 -0
  179. package/dist/services/secrets.d.ts.map +1 -0
  180. package/dist/services/secrets.js +206 -0
  181. package/dist/services/secrets.js.map +1 -0
  182. package/dist/services/settings-service.d.ts +132 -0
  183. package/dist/services/settings-service.d.ts.map +1 -0
  184. package/dist/services/settings-service.js +378 -0
  185. package/dist/services/settings-service.js.map +1 -0
  186. package/dist/services/solution-diff.d.ts +127 -0
  187. package/dist/services/solution-diff.d.ts.map +1 -0
  188. package/dist/services/solution-diff.js +260 -0
  189. package/dist/services/solution-diff.js.map +1 -0
  190. package/dist/services/solution-mode-detector.d.ts +35 -0
  191. package/dist/services/solution-mode-detector.d.ts.map +1 -0
  192. package/dist/services/solution-mode-detector.js +84 -0
  193. package/dist/services/solution-mode-detector.js.map +1 -0
  194. package/dist/services/tenant-resolver.d.ts +55 -0
  195. package/dist/services/tenant-resolver.d.ts.map +1 -0
  196. package/dist/services/tenant-resolver.js +126 -0
  197. package/dist/services/tenant-resolver.js.map +1 -0
  198. package/dist/services/unmanaged-customizations.d.ts +104 -0
  199. package/dist/services/unmanaged-customizations.d.ts.map +1 -0
  200. package/dist/services/unmanaged-customizations.js +521 -0
  201. package/dist/services/unmanaged-customizations.js.map +1 -0
  202. package/dist/services/url-templater.d.ts +184 -0
  203. package/dist/services/url-templater.d.ts.map +1 -0
  204. package/dist/services/url-templater.js +327 -0
  205. package/dist/services/url-templater.js.map +1 -0
  206. package/dist/services/version-checker.d.ts +108 -0
  207. package/dist/services/version-checker.d.ts.map +1 -0
  208. package/dist/services/version-checker.js +403 -0
  209. package/dist/services/version-checker.js.map +1 -0
  210. package/dist/services/waves.d.ts +90 -0
  211. package/dist/services/waves.d.ts.map +1 -0
  212. package/dist/services/waves.js +222 -0
  213. package/dist/services/waves.js.map +1 -0
  214. package/dist/services/webhook.d.ts +95 -0
  215. package/dist/services/webhook.d.ts.map +1 -0
  216. package/dist/services/webhook.js +244 -0
  217. package/dist/services/webhook.js.map +1 -0
  218. package/dist/utils/deployment-tools.d.ts +110 -0
  219. package/dist/utils/deployment-tools.d.ts.map +1 -0
  220. package/dist/utils/deployment-tools.js +121 -0
  221. package/dist/utils/deployment-tools.js.map +1 -0
  222. package/dist/utils/index.d.ts +17 -0
  223. package/dist/utils/index.d.ts.map +1 -0
  224. package/dist/utils/index.js +18 -0
  225. package/dist/utils/index.js.map +1 -0
  226. package/package.json +49 -0
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { z } from "zod";
17
+ import type { PreconditionManifest } from "./types.js";
18
+ /**
19
+ * Zod schemas mirroring `./types.ts`. Used by the manifest loader to
20
+ * surface specific, actionable error messages (e.g.
21
+ * "preconditions[2].matcher.displayName is required") instead of TypeScript's
22
+ * silent "did you check the JSON?" failures.
23
+ */
24
+ export declare const ComparisonOpSchema: z.ZodEnum<{
25
+ includes: "includes";
26
+ equals: "equals";
27
+ "not-equals": "not-equals";
28
+ "at-least": "at-least";
29
+ "subset-of": "subset-of";
30
+ }>;
31
+ export declare const PreconditionRequirementSchema: z.ZodObject<{
32
+ property: z.ZodString;
33
+ op: z.ZodEnum<{
34
+ includes: "includes";
35
+ equals: "equals";
36
+ "not-equals": "not-equals";
37
+ "at-least": "at-least";
38
+ "subset-of": "subset-of";
39
+ }>;
40
+ value: z.ZodUnknown;
41
+ }, z.core.$strip>;
42
+ export declare const RemediationSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
43
+ kind: z.ZodLiteral<"link">;
44
+ title: z.ZodString;
45
+ urlTemplate: z.ZodString;
46
+ manualSteps: z.ZodDefault<z.ZodArray<z.ZodString>>;
47
+ }, z.core.$strip>, z.ZodObject<{
48
+ kind: z.ZodLiteral<"command">;
49
+ title: z.ZodString;
50
+ cmd: z.ZodString;
51
+ description: z.ZodString;
52
+ }, z.core.$strip>, z.ZodObject<{
53
+ kind: z.ZodLiteral<"manual">;
54
+ title: z.ZodString;
55
+ steps: z.ZodArray<z.ZodString>;
56
+ }, z.core.$strip>], "kind">;
57
+ export declare const PreconditionSchema: z.ZodObject<{
58
+ id: z.ZodString;
59
+ description: z.ZodString;
60
+ resourceType: z.ZodString;
61
+ matcher: z.ZodRecord<z.ZodString, z.ZodString>;
62
+ requirements: z.ZodArray<z.ZodObject<{
63
+ property: z.ZodString;
64
+ op: z.ZodEnum<{
65
+ includes: "includes";
66
+ equals: "equals";
67
+ "not-equals": "not-equals";
68
+ "at-least": "at-least";
69
+ "subset-of": "subset-of";
70
+ }>;
71
+ value: z.ZodUnknown;
72
+ }, z.core.$strip>>;
73
+ severity: z.ZodEnum<{
74
+ error: "error";
75
+ warning: "warning";
76
+ }>;
77
+ remediation: z.ZodDiscriminatedUnion<[z.ZodObject<{
78
+ kind: z.ZodLiteral<"link">;
79
+ title: z.ZodString;
80
+ urlTemplate: z.ZodString;
81
+ manualSteps: z.ZodDefault<z.ZodArray<z.ZodString>>;
82
+ }, z.core.$strip>, z.ZodObject<{
83
+ kind: z.ZodLiteral<"command">;
84
+ title: z.ZodString;
85
+ cmd: z.ZodString;
86
+ description: z.ZodString;
87
+ }, z.core.$strip>, z.ZodObject<{
88
+ kind: z.ZodLiteral<"manual">;
89
+ title: z.ZodString;
90
+ steps: z.ZodArray<z.ZodString>;
91
+ }, z.core.$strip>], "kind">;
92
+ }, z.core.$strip>;
93
+ export declare const PreconditionManifestSchema: z.ZodType<PreconditionManifest>;
94
+ /**
95
+ * Thrown when a manifest exists on disk but fails schema validation.
96
+ * Carries the path so callers can include it in the user-facing message.
97
+ */
98
+ export declare class PreconditionManifestValidationError extends Error {
99
+ readonly path: string;
100
+ readonly issues: z.ZodIssue[];
101
+ constructor(path: string, issues: z.ZodIssue[]);
102
+ }
103
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/preconditions/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD;;;;;GAKG;AAEH,eAAO,MAAM,kBAAkB;;;;;;EAM7B,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;iBAMxC,CAAC;AAsBH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;2BAI5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ7B,CAAC;AAEH,eAAO,MAAM,0BAA0B,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAIlC,CAAC;AAEtC;;;GAGG;AACH,qBAAa,mCAAoC,SAAQ,KAAK;aAE1C,IAAI,EAAE,MAAM;aACZ,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;gBADpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAWvC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { z } from "zod";
17
+ /**
18
+ * Zod schemas mirroring `./types.ts`. Used by the manifest loader to
19
+ * surface specific, actionable error messages (e.g.
20
+ * "preconditions[2].matcher.displayName is required") instead of TypeScript's
21
+ * silent "did you check the JSON?" failures.
22
+ */
23
+ export const ComparisonOpSchema = z.enum([
24
+ "equals",
25
+ "not-equals",
26
+ "at-least",
27
+ "includes",
28
+ "subset-of",
29
+ ]);
30
+ export const PreconditionRequirementSchema = z.object({
31
+ property: z.string().min(1, "property is required"),
32
+ op: ComparisonOpSchema,
33
+ // `unknown` here is intentional — Zod has no first-class "any JSON" type
34
+ // and the YAML loader hands us anything from primitives to nested objects.
35
+ value: z.unknown(),
36
+ });
37
+ const RemediationLinkSchema = z.object({
38
+ kind: z.literal("link"),
39
+ title: z.string().min(1),
40
+ urlTemplate: z.string().min(1, "urlTemplate is required for link remediation"),
41
+ manualSteps: z.array(z.string()).default([]),
42
+ });
43
+ const RemediationCommandSchema = z.object({
44
+ kind: z.literal("command"),
45
+ title: z.string().min(1),
46
+ cmd: z.string().min(1, "cmd is required for command remediation"),
47
+ description: z.string().min(1),
48
+ });
49
+ const RemediationManualSchema = z.object({
50
+ kind: z.literal("manual"),
51
+ title: z.string().min(1),
52
+ steps: z.array(z.string()).min(1, "manual remediation requires at least one step"),
53
+ });
54
+ export const RemediationSchema = z.discriminatedUnion("kind", [
55
+ RemediationLinkSchema,
56
+ RemediationCommandSchema,
57
+ RemediationManualSchema,
58
+ ]);
59
+ export const PreconditionSchema = z.object({
60
+ id: z.string().min(1, "id is required"),
61
+ description: z.string().min(1, "description is required"),
62
+ resourceType: z.string().min(1, "resourceType is required"),
63
+ matcher: z.record(z.string(), z.string()),
64
+ requirements: z.array(PreconditionRequirementSchema).min(1, "at least one requirement required"),
65
+ severity: z.enum(["error", "warning"]),
66
+ remediation: RemediationSchema,
67
+ });
68
+ export const PreconditionManifestSchema = z.object({
69
+ solution: z.string().min(1, "solution is required"),
70
+ version: z.string().min(1, "version is required"),
71
+ preconditions: z.array(PreconditionSchema),
72
+ });
73
+ /**
74
+ * Thrown when a manifest exists on disk but fails schema validation.
75
+ * Carries the path so callers can include it in the user-facing message.
76
+ */
77
+ export class PreconditionManifestValidationError extends Error {
78
+ path;
79
+ issues;
80
+ constructor(path, issues) {
81
+ const formatted = issues
82
+ .map((issue) => {
83
+ const where = issue.path.length === 0 ? "<root>" : issue.path.join(".");
84
+ return ` - ${where}: ${issue.message}`;
85
+ })
86
+ .join("\n");
87
+ super(`Invalid precondition manifest at ${path}:\n${formatted}`);
88
+ this.path = path;
89
+ this.issues = issues;
90
+ this.name = "PreconditionManifestValidationError";
91
+ }
92
+ }
93
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/preconditions/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /**
17
+ * Preflight (precondition) types — Phase 1.
18
+ *
19
+ * The preflight feature surfaces tenant-config requirements that must be
20
+ * satisfied before a solution can deploy. Phase 1 reads these from a sibling
21
+ * YAML manifest and matches them against synthetic per-tenant state on
22
+ * `DEMO_TENANTS`. Phase 2 will replace the synthetic resolver with real
23
+ * Microsoft Graph TCM calls; the diff engine and types stay the same.
24
+ */
25
+ /**
26
+ * Comparison operators supported in a precondition requirement.
27
+ *
28
+ * - `equals` / `not-equals` — strict deep equality.
29
+ * - `at-least` — booleans (true >= true|false), numbers (>= required), arrays
30
+ * (current ⊇ required, i.e. current is a superset of required).
31
+ * - `includes` — current is an array containing the required value.
32
+ * - `subset-of` — current is an array, every element appears in required.
33
+ */
34
+ export type ComparisonOp = "equals" | "not-equals" | "at-least" | "includes" | "subset-of";
35
+ /**
36
+ * A single property check on a matched resource.
37
+ * `property` is a dot-path within the resource's `currentProperties`.
38
+ */
39
+ export interface PreconditionRequirement {
40
+ property: string;
41
+ op: ComparisonOp;
42
+ value: unknown;
43
+ }
44
+ /**
45
+ * Structured remediation. Three kinds, mutually exclusive:
46
+ * - `link` — open a deep link to fix in a portal.
47
+ * - `command` — runnable CLI command the user can fire from pax8-cta.
48
+ * - `manual` — list of instructions when no automation exists.
49
+ *
50
+ * `urlTemplate` and any string in `manualSteps` / `cmd` may include `{tenantId}`
51
+ * `{tenantName}` `{resourceId}` `{resourceDisplayName}` placeholders, which the
52
+ * CLI substitutes at render time.
53
+ */
54
+ export type Remediation = {
55
+ kind: "link";
56
+ title: string;
57
+ urlTemplate: string;
58
+ manualSteps: string[];
59
+ } | {
60
+ kind: "command";
61
+ title: string;
62
+ cmd: string;
63
+ description: string;
64
+ } | {
65
+ kind: "manual";
66
+ title: string;
67
+ steps: string[];
68
+ };
69
+ /**
70
+ * One precondition. A resource must match `matcher` (e.g. by `displayName`)
71
+ * and then every entry in `requirements` must hold.
72
+ */
73
+ export interface Precondition {
74
+ id: string;
75
+ description: string;
76
+ resourceType: string;
77
+ matcher: Record<string, string>;
78
+ requirements: PreconditionRequirement[];
79
+ /** `error` blocks deploy; `warning` is informational. */
80
+ severity: "error" | "warning";
81
+ remediation: Remediation;
82
+ }
83
+ /**
84
+ * The on-disk manifest format. Lives next to the solution `.zip` as
85
+ * `<solution>.preconditions.yaml`.
86
+ */
87
+ export interface PreconditionManifest {
88
+ solution: string;
89
+ version: string;
90
+ preconditions: Precondition[];
91
+ }
92
+ /**
93
+ * One materialized "this requirement failed" record. Built by the diff
94
+ * engine; rendered by the CLI; flattened into the analyze envelope under
95
+ * `preconditions.failures`.
96
+ */
97
+ export interface PreconditionFailure {
98
+ tenantId: string;
99
+ tenantName: string;
100
+ preconditionId: string;
101
+ description: string;
102
+ resourceType: string;
103
+ resourceDisplayName: string;
104
+ /**
105
+ * Resource id pulled from `currentProperties.id` when the resolver returned
106
+ * a state object with one. Empty string when unknown (e.g. the resource
107
+ * was missing from this tenant). Used to fill `{resourceId}` placeholders
108
+ * in remediation templates.
109
+ */
110
+ resourceId: string;
111
+ failedProperty: string;
112
+ currentValue: unknown;
113
+ requiredValue: unknown;
114
+ comparisonOp: ComparisonOp;
115
+ severity: "error" | "warning";
116
+ remediation: Remediation;
117
+ }
118
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/preconditions/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;GAQG;AAEH;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAE3F;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,YAAY,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,YAAY,EAAE,uBAAuB,EAAE,CAAC;IACxC,yDAAyD;IACzD,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,WAAW,CAAC;CAC1B"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/preconditions/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ export * from "./memory-queue.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ export * from "./memory-queue.js";
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,86 @@
1
+ export type JobStatus = "pending" | "active" | "completed" | "failed";
2
+ export interface MemoryJob<T = unknown, R = unknown> {
3
+ id: string;
4
+ name: string;
5
+ data: T;
6
+ status: JobStatus;
7
+ progress: number;
8
+ result?: R;
9
+ error?: string;
10
+ createdAt: Date;
11
+ startedAt?: Date;
12
+ completedAt?: Date;
13
+ attempts: number;
14
+ maxAttempts: number;
15
+ }
16
+ export type JobProcessor<T, R> = (job: MemoryJob<T, R>) => Promise<R>;
17
+ export interface MemoryQueueOptions {
18
+ concurrency?: number;
19
+ maxRetries?: number;
20
+ retryDelay?: number;
21
+ }
22
+ export declare class MemoryQueue<T = unknown, R = unknown> {
23
+ readonly name: string;
24
+ private jobs;
25
+ private queue;
26
+ private processing;
27
+ private processor?;
28
+ private concurrency;
29
+ private maxRetries;
30
+ private retryDelay;
31
+ private isRunning;
32
+ private eventListeners;
33
+ constructor(name: string, options?: MemoryQueueOptions);
34
+ /**
35
+ * Add a job to the queue
36
+ */
37
+ add(name: string, data: T): Promise<MemoryJob<T, R>>;
38
+ /**
39
+ * Add multiple jobs at once
40
+ */
41
+ addBulk(jobs: {
42
+ name: string;
43
+ data: T;
44
+ }[]): Promise<MemoryJob<T, R>[]>;
45
+ /**
46
+ * Set the job processor
47
+ */
48
+ process(processor: JobProcessor<T, R>): void;
49
+ /**
50
+ * Get a job by ID
51
+ */
52
+ getJob(id: string): MemoryJob<T, R> | undefined;
53
+ /**
54
+ * Get all jobs with optional status filter
55
+ */
56
+ getJobs(status?: JobStatus): MemoryJob<T, R>[];
57
+ /**
58
+ * Get queue counts
59
+ */
60
+ getCounts(): {
61
+ pending: number;
62
+ active: number;
63
+ completed: number;
64
+ failed: number;
65
+ };
66
+ /**
67
+ * Update job progress
68
+ */
69
+ updateProgress(jobId: string, progress: number): void;
70
+ /**
71
+ * Listen to queue events
72
+ */
73
+ on(event: "waiting" | "active" | "completed" | "failed" | "progress", listener: (job: MemoryJob<T, R>, result?: R, error?: Error) => void): void;
74
+ private emit;
75
+ /**
76
+ * Stop processing
77
+ */
78
+ close(): void;
79
+ /**
80
+ * Clear all jobs
81
+ */
82
+ clear(): void;
83
+ private processNext;
84
+ }
85
+ export declare function getMemoryQueue<T = unknown, R = unknown>(name?: string, options?: MemoryQueueOptions): MemoryQueue<T, R>;
86
+ //# sourceMappingURL=memory-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-queue.d.ts","sourceRoot":"","sources":["../../src/queue/memory-queue.ts"],"names":[],"mappings":"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"}