compfn 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 (134) hide show
  1. package/README.md +705 -0
  2. package/cli/dist/commands/attest.d.ts +7 -0
  3. package/cli/dist/commands/attest.d.ts.map +1 -0
  4. package/cli/dist/commands/attest.js +26 -0
  5. package/cli/dist/commands/attest.js.map +1 -0
  6. package/cli/dist/commands/export.d.ts +6 -0
  7. package/cli/dist/commands/export.d.ts.map +1 -0
  8. package/cli/dist/commands/export.js +30 -0
  9. package/cli/dist/commands/export.js.map +1 -0
  10. package/cli/dist/commands/init.d.ts +4 -0
  11. package/cli/dist/commands/init.d.ts.map +1 -0
  12. package/cli/dist/commands/init.js +22 -0
  13. package/cli/dist/commands/init.js.map +1 -0
  14. package/cli/dist/commands/run-checks.d.ts +5 -0
  15. package/cli/dist/commands/run-checks.d.ts.map +1 -0
  16. package/cli/dist/commands/run-checks.js +53 -0
  17. package/cli/dist/commands/run-checks.js.map +1 -0
  18. package/cli/dist/config.d.ts +7 -0
  19. package/cli/dist/config.d.ts.map +1 -0
  20. package/cli/dist/config.js +28 -0
  21. package/cli/dist/config.js.map +1 -0
  22. package/cli/dist/index.d.ts +3 -0
  23. package/cli/dist/index.d.ts.map +1 -0
  24. package/cli/dist/index.js +39 -0
  25. package/cli/dist/index.js.map +1 -0
  26. package/dist/adapters/authfn.d.ts +43 -0
  27. package/dist/adapters/authfn.d.ts.map +1 -0
  28. package/dist/adapters/authfn.js +67 -0
  29. package/dist/adapters/authfn.js.map +1 -0
  30. package/dist/adapters/secfn.d.ts +44 -0
  31. package/dist/adapters/secfn.d.ts.map +1 -0
  32. package/dist/adapters/secfn.js +68 -0
  33. package/dist/adapters/secfn.js.map +1 -0
  34. package/dist/adapters/types.d.ts +46 -0
  35. package/dist/adapters/types.d.ts.map +1 -0
  36. package/dist/adapters/types.js +7 -0
  37. package/dist/adapters/types.js.map +1 -0
  38. package/dist/api.d.ts +72 -0
  39. package/dist/api.d.ts.map +1 -0
  40. package/dist/api.js +5 -0
  41. package/dist/api.js.map +1 -0
  42. package/dist/bundles/loader.d.ts +39 -0
  43. package/dist/bundles/loader.d.ts.map +1 -0
  44. package/dist/bundles/loader.js +80 -0
  45. package/dist/bundles/loader.js.map +1 -0
  46. package/dist/check.d.ts +23 -0
  47. package/dist/check.d.ts.map +1 -0
  48. package/dist/check.js +5 -0
  49. package/dist/check.js.map +1 -0
  50. package/dist/checks/service.d.ts +31 -0
  51. package/dist/checks/service.d.ts.map +1 -0
  52. package/dist/checks/service.js +286 -0
  53. package/dist/checks/service.js.map +1 -0
  54. package/dist/compfn.d.ts +9 -0
  55. package/dist/compfn.d.ts.map +1 -0
  56. package/dist/compfn.js +94 -0
  57. package/dist/compfn.js.map +1 -0
  58. package/dist/constants.d.ts +14 -0
  59. package/dist/constants.d.ts.map +1 -0
  60. package/dist/constants.js +14 -0
  61. package/dist/constants.js.map +1 -0
  62. package/dist/control.d.ts +25 -0
  63. package/dist/control.d.ts.map +1 -0
  64. package/dist/control.js +5 -0
  65. package/dist/control.js.map +1 -0
  66. package/dist/controls/service.d.ts +22 -0
  67. package/dist/controls/service.d.ts.map +1 -0
  68. package/dist/controls/service.js +248 -0
  69. package/dist/controls/service.js.map +1 -0
  70. package/dist/errors.d.ts +23 -0
  71. package/dist/errors.d.ts.map +1 -0
  72. package/dist/errors.js +5 -0
  73. package/dist/errors.js.map +1 -0
  74. package/dist/evidence/service.d.ts +34 -0
  75. package/dist/evidence/service.d.ts.map +1 -0
  76. package/dist/evidence/service.js +218 -0
  77. package/dist/evidence/service.js.map +1 -0
  78. package/dist/evidence.d.ts +30 -0
  79. package/dist/evidence.d.ts.map +1 -0
  80. package/dist/evidence.js +20 -0
  81. package/dist/evidence.js.map +1 -0
  82. package/dist/export/service.d.ts +39 -0
  83. package/dist/export/service.d.ts.map +1 -0
  84. package/dist/export/service.js +108 -0
  85. package/dist/export/service.js.map +1 -0
  86. package/dist/export-types.d.ts +18 -0
  87. package/dist/export-types.d.ts.map +1 -0
  88. package/dist/export-types.js +5 -0
  89. package/dist/export-types.js.map +1 -0
  90. package/dist/framework.d.ts +24 -0
  91. package/dist/framework.d.ts.map +1 -0
  92. package/dist/framework.js +5 -0
  93. package/dist/framework.js.map +1 -0
  94. package/dist/frameworks/service.d.ts +22 -0
  95. package/dist/frameworks/service.d.ts.map +1 -0
  96. package/dist/frameworks/service.js +255 -0
  97. package/dist/frameworks/service.js.map +1 -0
  98. package/dist/http/routes.d.ts +4 -0
  99. package/dist/http/routes.d.ts.map +1 -0
  100. package/dist/http/routes.js +256 -0
  101. package/dist/http/routes.js.map +1 -0
  102. package/dist/index.d.ts +22 -0
  103. package/dist/index.d.ts.map +1 -0
  104. package/dist/index.js +15 -0
  105. package/dist/index.js.map +1 -0
  106. package/dist/logger.d.ts +19 -0
  107. package/dist/logger.d.ts.map +1 -0
  108. package/dist/logger.js +39 -0
  109. package/dist/logger.js.map +1 -0
  110. package/dist/readiness/service.d.ts +34 -0
  111. package/dist/readiness/service.d.ts.map +1 -0
  112. package/dist/readiness/service.js +160 -0
  113. package/dist/readiness/service.js.map +1 -0
  114. package/dist/readiness.d.ts +18 -0
  115. package/dist/readiness.d.ts.map +1 -0
  116. package/dist/readiness.js +5 -0
  117. package/dist/readiness.js.map +1 -0
  118. package/dist/storage/adapter.d.ts +21 -0
  119. package/dist/storage/adapter.d.ts.map +1 -0
  120. package/dist/storage/adapter.js +37 -0
  121. package/dist/storage/adapter.js.map +1 -0
  122. package/dist/storage/schema.d.ts +14 -0
  123. package/dist/storage/schema.d.ts.map +1 -0
  124. package/dist/storage/schema.js +92 -0
  125. package/dist/storage/schema.js.map +1 -0
  126. package/dist/types.d.ts +12 -0
  127. package/dist/types.d.ts.map +1 -0
  128. package/dist/types.js +5 -0
  129. package/dist/types.js.map +1 -0
  130. package/dist/validation.d.ts +52 -0
  131. package/dist/validation.d.ts.map +1 -0
  132. package/dist/validation.js +550 -0
  133. package/dist/validation.js.map +1 -0
  134. package/package.json +54 -0
package/dist/api.d.ts ADDED
@@ -0,0 +1,72 @@
1
+ /**
2
+ * CompFn config, EvidenceAdapter, and CompFnAPI interface (method signatures only).
3
+ */
4
+ import type { Adapter } from "@superfunctions/db";
5
+ import type { CompfnEnvelope } from "./errors.js";
6
+ import type { Control, CreateControlInput, UpdateControlInput } from "./control.js";
7
+ import type { Framework, CreateFrameworkInput } from "./framework.js";
8
+ import type { Evidence, EvidenceType, CreateEvidenceInput } from "./evidence.js";
9
+ import type { CheckDefinition, RunCheckResult } from "./check.js";
10
+ import type { ControlReadiness, FrameworkReadiness } from "./readiness.js";
11
+ import type { AuditorPack } from "./export-types.js";
12
+ import type { AdapterCheckInput, AdapterEvidence, EvidenceAdapter } from "./adapters/types.js";
13
+ import type { Logger } from "./logger.js";
14
+ export type { AdapterCheckInput, AdapterEvidence, EvidenceAdapter };
15
+ export interface CompFnConfig {
16
+ database: Adapter;
17
+ namespace?: string;
18
+ systemActorId?: string;
19
+ readinessWindowDays?: number;
20
+ evidencePayloadMaxBytes?: number;
21
+ retentionDays?: number;
22
+ exportMaxBytes?: number;
23
+ adapters?: Record<string, EvidenceAdapter>;
24
+ logger?: Logger;
25
+ }
26
+ export interface CompFnAPI {
27
+ controls: {
28
+ create(input: CreateControlInput): Promise<CompfnEnvelope<Control>>;
29
+ get(id: string): Promise<CompfnEnvelope<Control>>;
30
+ list(filters?: {
31
+ category?: string;
32
+ tags?: string[];
33
+ }): Promise<CompfnEnvelope<Control[]>>;
34
+ update(id: string, input: UpdateControlInput): Promise<CompfnEnvelope<Control>>;
35
+ delete(id: string): Promise<CompfnEnvelope<void>>;
36
+ };
37
+ frameworks: {
38
+ create(input: CreateFrameworkInput): Promise<CompfnEnvelope<Framework>>;
39
+ get(id: string): Promise<CompfnEnvelope<Framework>>;
40
+ list(): Promise<CompfnEnvelope<Framework[]>>;
41
+ update(id: string, input: Partial<CreateFrameworkInput>): Promise<CompfnEnvelope<Framework>>;
42
+ delete(id: string): Promise<CompfnEnvelope<void>>;
43
+ };
44
+ evidence: {
45
+ create(input: CreateEvidenceInput): Promise<CompfnEnvelope<Evidence>>;
46
+ get(id: string): Promise<CompfnEnvelope<Evidence>>;
47
+ list(filters: {
48
+ controlId?: string;
49
+ frameworkId?: string;
50
+ type?: EvidenceType;
51
+ since?: number;
52
+ }): Promise<CompfnEnvelope<Evidence[]>>;
53
+ };
54
+ checks: {
55
+ create(definition: Omit<CheckDefinition, "id" | "createdAt" | "updatedAt">): Promise<CompfnEnvelope<CheckDefinition>>;
56
+ get(id: string): Promise<CompfnEnvelope<CheckDefinition>>;
57
+ list(): Promise<CompfnEnvelope<CheckDefinition[]>>;
58
+ run(id: string): Promise<CompfnEnvelope<RunCheckResult>>;
59
+ delete(id: string): Promise<CompfnEnvelope<void>>;
60
+ };
61
+ readiness: {
62
+ forControl(controlId: string, frameworkId?: string): Promise<CompfnEnvelope<ControlReadiness>>;
63
+ forFramework(frameworkId: string): Promise<CompfnEnvelope<FrameworkReadiness>>;
64
+ };
65
+ export: {
66
+ auditorPack(options: {
67
+ frameworkId?: string;
68
+ since?: number;
69
+ }): Promise<CompfnEnvelope<AuditorPack>>;
70
+ };
71
+ }
72
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/api.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * CompFn config, EvidenceAdapter, and CompFnAPI interface (method signatures only).
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Bundle loader utilities for loading framework bundles into compfn.
3
+ * Bundles contain framework definitions and optional control definitions.
4
+ */
5
+ import type { CompFnAPI } from "../api.js";
6
+ import type { CreateFrameworkInput } from "../framework.js";
7
+ import type { CreateControlInput } from "../control.js";
8
+ import type { CompfnEnvelope } from "../types.js";
9
+ export interface FrameworkBundle {
10
+ framework: CreateFrameworkInput;
11
+ controls?: CreateControlInput[];
12
+ }
13
+ export interface BundleLoadResult {
14
+ framework: {
15
+ id: string;
16
+ name: string;
17
+ };
18
+ controls: Array<{
19
+ id: string;
20
+ name: string;
21
+ }>;
22
+ }
23
+ /**
24
+ * Load a framework bundle into compfn.
25
+ * Creates all controls first (if present in bundle), then creates the framework.
26
+ *
27
+ * @param api - The compfn API instance
28
+ * @param bundle - The framework bundle to load
29
+ * @param options - Optional configuration
30
+ * @returns Envelope with load result (framework id/name and control ids/names)
31
+ */
32
+ export declare function loadBundle(api: CompFnAPI, bundle: FrameworkBundle, options?: {
33
+ /**
34
+ * If true, use control IDs from bundle as-is when creating controls.
35
+ * If false or undefined, let compfn generate IDs.
36
+ */
37
+ useStableControlIds?: boolean;
38
+ }): Promise<CompfnEnvelope<BundleLoadResult>>;
39
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/bundles/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,oBAAoB,CAAC;IAChC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE;IACR;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,GACA,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CA8D3C"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Bundle loader utilities for loading framework bundles into compfn.
3
+ * Bundles contain framework definitions and optional control definitions.
4
+ */
5
+ /**
6
+ * Load a framework bundle into compfn.
7
+ * Creates all controls first (if present in bundle), then creates the framework.
8
+ *
9
+ * @param api - The compfn API instance
10
+ * @param bundle - The framework bundle to load
11
+ * @param options - Optional configuration
12
+ * @returns Envelope with load result (framework id/name and control ids/names)
13
+ */
14
+ export async function loadBundle(api, bundle, options) {
15
+ const createdControls = [];
16
+ const controlIdMap = new Map(); // bundle id -> created id
17
+ // Step 1: Create controls from bundle (if any)
18
+ if (bundle.controls && bundle.controls.length > 0) {
19
+ for (const controlInput of bundle.controls) {
20
+ // Generate stable ID from control name if needed
21
+ const stableId = options?.useStableControlIds
22
+ ? generateStableControlId(controlInput.name)
23
+ : undefined;
24
+ // Check if control already exists (by stable ID if provided)
25
+ let existingControl;
26
+ if (stableId) {
27
+ existingControl = await api.controls.get(stableId);
28
+ if (existingControl.ok) {
29
+ controlIdMap.set(stableId, stableId);
30
+ createdControls.push({ id: stableId, name: existingControl.result.name });
31
+ continue; // Skip creating if exists
32
+ }
33
+ }
34
+ // Create the control
35
+ const controlResult = await api.controls.create(controlInput);
36
+ if (!controlResult.ok) {
37
+ return controlResult;
38
+ }
39
+ const createdControl = controlResult.result;
40
+ if (stableId) {
41
+ controlIdMap.set(stableId, createdControl.id);
42
+ }
43
+ createdControls.push({ id: createdControl.id, name: createdControl.name });
44
+ }
45
+ }
46
+ // Step 2: Update framework requirements with created control IDs if needed
47
+ let frameworkInput = bundle.framework;
48
+ if (options?.useStableControlIds && controlIdMap.size > 0) {
49
+ frameworkInput = {
50
+ ...bundle.framework,
51
+ requirements: bundle.framework.requirements.map((req) => ({
52
+ ...req,
53
+ controlIds: req.controlIds.map((cid) => controlIdMap.get(cid) ?? cid),
54
+ })),
55
+ };
56
+ }
57
+ // Step 3: Create the framework
58
+ const frameworkResult = await api.frameworks.create(frameworkInput);
59
+ if (!frameworkResult.ok) {
60
+ return frameworkResult;
61
+ }
62
+ return {
63
+ ok: true,
64
+ result: {
65
+ framework: { id: frameworkResult.result.id, name: frameworkResult.result.name },
66
+ controls: createdControls,
67
+ },
68
+ };
69
+ }
70
+ /**
71
+ * Generate a stable control ID from a control name.
72
+ * Uses kebab-case conversion.
73
+ */
74
+ function generateStableControlId(name) {
75
+ return name
76
+ .toLowerCase()
77
+ .replace(/[^a-z0-9]+/g, "-")
78
+ .replace(/^-+|-+$/g, "");
79
+ }
80
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/bundles/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Check types: CheckDefinition, RunCheckResult.
3
+ */
4
+ export interface CheckDefinition {
5
+ id: string;
6
+ name: string;
7
+ controlId: string;
8
+ schedule?: string;
9
+ trigger?: string;
10
+ adapterName?: string;
11
+ adapterMethod?: string;
12
+ customConfig?: Record<string, unknown>;
13
+ createdAt: number;
14
+ updatedAt: number;
15
+ }
16
+ export interface RunCheckResult {
17
+ checkId: string;
18
+ controlId: string;
19
+ evidenceId: string;
20
+ outcome: "pass" | "fail" | "unknown";
21
+ timestamp: number;
22
+ }
23
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB"}
package/dist/check.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Check types: CheckDefinition, RunCheckResult.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Checks service: CRUD and run. run(id) loads check, resolves adapter, executes runCheck,
3
+ * persists one evidence record, returns RunCheckResult. CHECK_NOT_FOUND / ADAPTER_NOT_FOUND / ADAPTER_ERROR as specified.
4
+ */
5
+ import type { Adapter } from "@superfunctions/db";
6
+ import type { CheckDefinition, RunCheckResult } from "../check.js";
7
+ import type { Evidence, CreateEvidenceInput } from "../evidence.js";
8
+ import type { CompfnEnvelope } from "../errors.js";
9
+ import type { EvidenceAdapter } from "../api.js";
10
+ import type { Logger } from "../logger.js";
11
+ export interface ChecksServiceConfig {
12
+ database: Adapter;
13
+ namespace?: string;
14
+ /** Check that a control exists */
15
+ existsControl: (controlId: string) => Promise<boolean>;
16
+ /** Resolve adapter by name (from config.adapters[adapterName]) */
17
+ getAdapter: (adapterName: string) => EvidenceAdapter | undefined;
18
+ /** Default actor for automated check runs */
19
+ systemActorId?: string;
20
+ /** Create evidence record (from evidence service) */
21
+ evidenceCreate: (input: CreateEvidenceInput) => Promise<CompfnEnvelope<Evidence>>;
22
+ logger?: Logger;
23
+ }
24
+ export declare function createChecksService(config: ChecksServiceConfig): {
25
+ create(definition: Omit<CheckDefinition, "id" | "createdAt" | "updatedAt">): Promise<CompfnEnvelope<CheckDefinition>>;
26
+ get(id: string): Promise<CompfnEnvelope<CheckDefinition>>;
27
+ list(): Promise<CompfnEnvelope<CheckDefinition[]>>;
28
+ delete(id: string): Promise<CompfnEnvelope<void>>;
29
+ run(id: string): Promise<CompfnEnvelope<RunCheckResult>>;
30
+ };
31
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/checks/service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM3C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,kEAAkE;IAClE,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,eAAe,GAAG,SAAS,CAAC;IACjE,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,cAAc,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAgCD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB;uBAW7C,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAClE,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YAmD7B,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YA+BjD,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC;eAsBvC,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAqCzC,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;EAgHjE"}
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Checks service: CRUD and run. run(id) loads check, resolves adapter, executes runCheck,
3
+ * persists one evidence record, returns RunCheckResult. CHECK_NOT_FOUND / ADAPTER_NOT_FOUND / ADAPTER_ERROR as specified.
4
+ */
5
+ import { validateCreateCheckInput } from "../validation.js";
6
+ import { defaultLogger } from "../logger.js";
7
+ const MODEL = "checks";
8
+ function defaultNamespace() {
9
+ return "compfn";
10
+ }
11
+ function generateId() {
12
+ return crypto.randomUUID();
13
+ }
14
+ function now() {
15
+ return Date.now();
16
+ }
17
+ function rowToCheck(row) {
18
+ const check = {
19
+ id: String(row.id),
20
+ name: String(row.name),
21
+ controlId: String(row.controlId),
22
+ createdAt: Number(row.createdAt),
23
+ updatedAt: Number(row.updatedAt),
24
+ };
25
+ if (row.schedule != null && row.schedule !== "")
26
+ check.schedule = String(row.schedule);
27
+ if (row.trigger != null && row.trigger !== "")
28
+ check.trigger = String(row.trigger);
29
+ if (row.adapterName != null && row.adapterName !== "")
30
+ check.adapterName = String(row.adapterName);
31
+ if (row.adapterMethod != null && row.adapterMethod !== "")
32
+ check.adapterMethod = String(row.adapterMethod);
33
+ if (row.customConfig != null && typeof row.customConfig === "object")
34
+ check.customConfig = row.customConfig;
35
+ return check;
36
+ }
37
+ export function createChecksService(config) {
38
+ const namespace = config.namespace ?? defaultNamespace();
39
+ const systemActorId = config.systemActorId ?? "system";
40
+ const logger = config.logger ?? defaultLogger;
41
+ function withNamespace(params) {
42
+ return { ...params, namespace };
43
+ }
44
+ return {
45
+ async create(definition) {
46
+ const validation = validateCreateCheckInput(definition);
47
+ if (!validation.ok) {
48
+ return { ok: false, error: validation.error };
49
+ }
50
+ const value = validation.value;
51
+ const controlExists = await config.existsControl(value.controlId);
52
+ if (!controlExists) {
53
+ return {
54
+ ok: false,
55
+ error: {
56
+ code: "VALIDATION_FAILED",
57
+ message: "Control not found",
58
+ details: { controlId: value.controlId },
59
+ },
60
+ };
61
+ }
62
+ const id = generateId();
63
+ const ts = now();
64
+ const data = {
65
+ id,
66
+ name: value.name,
67
+ controlId: value.controlId,
68
+ createdAt: ts,
69
+ updatedAt: ts,
70
+ };
71
+ if (value.schedule != null)
72
+ data.schedule = value.schedule;
73
+ if (value.trigger != null)
74
+ data.trigger = value.trigger;
75
+ if (value.adapterName != null)
76
+ data.adapterName = value.adapterName;
77
+ if (value.adapterMethod != null)
78
+ data.adapterMethod = value.adapterMethod;
79
+ if (value.customConfig != null)
80
+ data.customConfig = value.customConfig;
81
+ try {
82
+ const created = await config.database.create(withNamespace({ model: MODEL, data }));
83
+ return { ok: true, result: rowToCheck(created) };
84
+ }
85
+ catch (err) {
86
+ return {
87
+ ok: false,
88
+ error: {
89
+ code: "STORAGE_ERROR",
90
+ message: err instanceof Error ? err.message : "Storage error",
91
+ details: {},
92
+ },
93
+ };
94
+ }
95
+ },
96
+ async get(id) {
97
+ try {
98
+ const row = await config.database.findOne(withNamespace({
99
+ model: MODEL,
100
+ where: [{ field: "id", operator: "eq", value: id }],
101
+ }));
102
+ if (row == null) {
103
+ return {
104
+ ok: false,
105
+ error: {
106
+ code: "CHECK_NOT_FOUND",
107
+ message: "Check not found",
108
+ details: { id },
109
+ },
110
+ };
111
+ }
112
+ return { ok: true, result: rowToCheck(row) };
113
+ }
114
+ catch (err) {
115
+ return {
116
+ ok: false,
117
+ error: {
118
+ code: "STORAGE_ERROR",
119
+ message: err instanceof Error ? err.message : "Storage error",
120
+ details: { id },
121
+ },
122
+ };
123
+ }
124
+ },
125
+ async list() {
126
+ try {
127
+ const params = withNamespace({
128
+ model: MODEL,
129
+ where: [],
130
+ orderBy: [{ field: "updatedAt", direction: "desc" }],
131
+ });
132
+ const rows = await config.database.findMany(params);
133
+ const checks = rows.map((r) => rowToCheck(r));
134
+ return { ok: true, result: checks };
135
+ }
136
+ catch (err) {
137
+ return {
138
+ ok: false,
139
+ error: {
140
+ code: "STORAGE_ERROR",
141
+ message: err instanceof Error ? err.message : "Storage error",
142
+ details: {},
143
+ },
144
+ };
145
+ }
146
+ },
147
+ async delete(id) {
148
+ try {
149
+ const existing = await config.database.findOne(withNamespace({
150
+ model: MODEL,
151
+ where: [{ field: "id", operator: "eq", value: id }],
152
+ }));
153
+ if (existing == null) {
154
+ return {
155
+ ok: false,
156
+ error: {
157
+ code: "CHECK_NOT_FOUND",
158
+ message: "Check not found",
159
+ details: { id },
160
+ },
161
+ };
162
+ }
163
+ await config.database.delete(withNamespace({
164
+ model: MODEL,
165
+ where: [{ field: "id", operator: "eq", value: id }],
166
+ }));
167
+ return { ok: true, result: undefined };
168
+ }
169
+ catch (err) {
170
+ return {
171
+ ok: false,
172
+ error: {
173
+ code: "STORAGE_ERROR",
174
+ message: err instanceof Error ? err.message : "Storage error",
175
+ details: { id },
176
+ },
177
+ };
178
+ }
179
+ },
180
+ async run(id) {
181
+ const checkRes = await this.get(id);
182
+ if (!checkRes.ok)
183
+ return checkRes;
184
+ const check = checkRes.result;
185
+ logger.info("check.run.started", {
186
+ event: "check.run.started",
187
+ checkId: check.id,
188
+ controlId: check.controlId,
189
+ });
190
+ if (check.adapterName == null || check.adapterName.trim() === "") {
191
+ return {
192
+ ok: false,
193
+ error: {
194
+ code: "ADAPTER_NOT_FOUND",
195
+ message: "Check has no adapter configured",
196
+ details: { adapterName: "" },
197
+ },
198
+ };
199
+ }
200
+ const adapter = config.getAdapter(check.adapterName);
201
+ if (adapter == null) {
202
+ return {
203
+ ok: false,
204
+ error: {
205
+ code: "ADAPTER_NOT_FOUND",
206
+ message: "Adapter not found",
207
+ details: { adapterName: check.adapterName },
208
+ },
209
+ };
210
+ }
211
+ let adapterEvidence;
212
+ try {
213
+ adapterEvidence = await adapter.runCheck({
214
+ checkId: check.id,
215
+ controlId: check.controlId,
216
+ method: check.adapterMethod,
217
+ customConfig: check.customConfig,
218
+ });
219
+ }
220
+ catch (err) {
221
+ const message = err instanceof Error ? err.message : String(err);
222
+ logger.error("check.run.error", {
223
+ event: "check.run.error",
224
+ checkId: check.id,
225
+ code: "ADAPTER_ERROR",
226
+ });
227
+ const failPayload = { error: message };
228
+ const failEvidenceRes = await config.evidenceCreate({
229
+ controlId: check.controlId,
230
+ type: "custom_check",
231
+ sourceId: check.id,
232
+ actorId: systemActorId,
233
+ outcome: "fail",
234
+ payload: failPayload,
235
+ });
236
+ return {
237
+ ok: false,
238
+ error: {
239
+ code: "ADAPTER_ERROR",
240
+ message,
241
+ details: { adapterName: check.adapterName },
242
+ },
243
+ };
244
+ }
245
+ const timestamp = adapterEvidence.timestamp ?? now();
246
+ const evidenceRes = await config.evidenceCreate({
247
+ controlId: check.controlId,
248
+ type: adapterEvidence.type,
249
+ sourceId: check.id,
250
+ actorId: systemActorId,
251
+ outcome: adapterEvidence.outcome,
252
+ timestamp,
253
+ payload: adapterEvidence.payload,
254
+ artifactRef: adapterEvidence.artifactRef,
255
+ frameworkRequirementId: adapterEvidence.frameworkRequirementId,
256
+ });
257
+ if (!evidenceRes.ok) {
258
+ return {
259
+ ok: false,
260
+ error: {
261
+ code: "STORAGE_ERROR",
262
+ message: "Failed to persist evidence after check run",
263
+ details: { ...evidenceRes.error.details },
264
+ },
265
+ };
266
+ }
267
+ const result = {
268
+ checkId: check.id,
269
+ controlId: check.controlId,
270
+ evidenceId: evidenceRes.result.id,
271
+ outcome: adapterEvidence.outcome,
272
+ timestamp,
273
+ };
274
+ logger.info("check.run.completed", {
275
+ event: "check.run.completed",
276
+ checkId: result.checkId,
277
+ outcome: result.outcome,
278
+ });
279
+ return {
280
+ ok: true,
281
+ result,
282
+ };
283
+ },
284
+ };
285
+ }
286
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/checks/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * compFn(config) factory: returns CompFnAPI with controls, frameworks, evidence, checks, readiness, and export.
3
+ */
4
+ import type { CompFnAPI, CompFnConfig } from "./api.js";
5
+ /**
6
+ * Create CompFn API instance. Returns API with controls.*, frameworks.*, and evidence.* (create, get, list) implemented.
7
+ */
8
+ export declare function compFn(config: CompFnConfig): CompFnAPI;
9
+ //# sourceMappingURL=compfn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compfn.d.ts","sourceRoot":"","sources":["../src/compfn.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAQxD;;GAEG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAuFtD"}