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
@@ -0,0 +1,550 @@
1
+ /**
2
+ * Validation for CompFn create/update inputs.
3
+ * CreateControlInput: name, description, category required; tags optional array.
4
+ * UpdateControlInput: all optional (partial update).
5
+ * CreateFrameworkInput: name required; requirements array with requirementId, controlIds; limits (LIMIT-001).
6
+ */
7
+ import { EVIDENCE_TYPES } from "./evidence.js";
8
+ import { MAX_REQUIREMENTS_PER_FRAMEWORK, MAX_CONTROL_IDS_PER_REQUIREMENT } from "./constants.js";
9
+ /**
10
+ * Validate CreateControlInput. Required: name, description, category (non-empty strings).
11
+ * Optional: tags (array of strings).
12
+ */
13
+ export function validateCreateControlInput(input, path = "input") {
14
+ if (input === null || typeof input !== "object" || Array.isArray(input)) {
15
+ return {
16
+ ok: false,
17
+ error: {
18
+ code: "VALIDATION_FAILED",
19
+ message: "CreateControlInput must be an object",
20
+ details: { path },
21
+ },
22
+ };
23
+ }
24
+ const obj = input;
25
+ const name = obj.name;
26
+ const description = obj.description;
27
+ const category = obj.category;
28
+ const tags = obj.tags;
29
+ if (typeof name !== "string" || name.trim() === "") {
30
+ return {
31
+ ok: false,
32
+ error: {
33
+ code: "VALIDATION_FAILED",
34
+ message: "name is required and must be a non-empty string",
35
+ details: { path: `${path}.name` },
36
+ },
37
+ };
38
+ }
39
+ if (typeof description !== "string" || description.trim() === "") {
40
+ return {
41
+ ok: false,
42
+ error: {
43
+ code: "VALIDATION_FAILED",
44
+ message: "description is required and must be a non-empty string",
45
+ details: { path: `${path}.description` },
46
+ },
47
+ };
48
+ }
49
+ if (typeof category !== "string" || category.trim() === "") {
50
+ return {
51
+ ok: false,
52
+ error: {
53
+ code: "VALIDATION_FAILED",
54
+ message: "category is required and must be a non-empty string",
55
+ details: { path: `${path}.category` },
56
+ },
57
+ };
58
+ }
59
+ if (tags !== undefined) {
60
+ if (!Array.isArray(tags)) {
61
+ return {
62
+ ok: false,
63
+ error: {
64
+ code: "VALIDATION_FAILED",
65
+ message: "tags must be an array of strings",
66
+ details: { path: `${path}.tags` },
67
+ },
68
+ };
69
+ }
70
+ const invalid = tags.some((t) => typeof t !== "string");
71
+ if (invalid) {
72
+ return {
73
+ ok: false,
74
+ error: {
75
+ code: "VALIDATION_FAILED",
76
+ message: "tags must be an array of strings",
77
+ details: { path: `${path}.tags` },
78
+ },
79
+ };
80
+ }
81
+ }
82
+ const result = {
83
+ name: name.trim(),
84
+ description: description.trim(),
85
+ category: category.trim(),
86
+ };
87
+ if (tags !== undefined) {
88
+ result.tags = tags.map((t) => String(t).trim()).filter(Boolean);
89
+ }
90
+ return { ok: true, value: result };
91
+ }
92
+ /**
93
+ * Validate UpdateControlInput. All fields optional; if present must be correct type.
94
+ * name, description, category: non-empty string if provided. tags: array of strings if provided.
95
+ */
96
+ export function validateUpdateControlInput(input, path = "input") {
97
+ if (input === null || typeof input !== "object" || Array.isArray(input)) {
98
+ return {
99
+ ok: false,
100
+ error: {
101
+ code: "VALIDATION_FAILED",
102
+ message: "UpdateControlInput must be an object",
103
+ details: { path },
104
+ },
105
+ };
106
+ }
107
+ const obj = input;
108
+ const result = {};
109
+ if (Object.prototype.hasOwnProperty.call(obj, "name")) {
110
+ const name = obj.name;
111
+ if (typeof name !== "string" || name.trim() === "") {
112
+ return {
113
+ ok: false,
114
+ error: {
115
+ code: "VALIDATION_FAILED",
116
+ message: "name must be a non-empty string",
117
+ details: { path: `${path}.name` },
118
+ },
119
+ };
120
+ }
121
+ result.name = name.trim();
122
+ }
123
+ if (Object.prototype.hasOwnProperty.call(obj, "description")) {
124
+ const description = obj.description;
125
+ if (typeof description !== "string" || description.trim() === "") {
126
+ return {
127
+ ok: false,
128
+ error: {
129
+ code: "VALIDATION_FAILED",
130
+ message: "description must be a non-empty string",
131
+ details: { path: `${path}.description` },
132
+ },
133
+ };
134
+ }
135
+ result.description = description.trim();
136
+ }
137
+ if (Object.prototype.hasOwnProperty.call(obj, "category")) {
138
+ const category = obj.category;
139
+ if (typeof category !== "string" || category.trim() === "") {
140
+ return {
141
+ ok: false,
142
+ error: {
143
+ code: "VALIDATION_FAILED",
144
+ message: "category must be a non-empty string",
145
+ details: { path: `${path}.category` },
146
+ },
147
+ };
148
+ }
149
+ result.category = category.trim();
150
+ }
151
+ if (Object.prototype.hasOwnProperty.call(obj, "tags")) {
152
+ const tags = obj.tags;
153
+ if (!Array.isArray(tags)) {
154
+ return {
155
+ ok: false,
156
+ error: {
157
+ code: "VALIDATION_FAILED",
158
+ message: "tags must be an array of strings",
159
+ details: { path: `${path}.tags` },
160
+ },
161
+ };
162
+ }
163
+ const invalid = tags.some((t) => typeof t !== "string");
164
+ if (invalid) {
165
+ return {
166
+ ok: false,
167
+ error: {
168
+ code: "VALIDATION_FAILED",
169
+ message: "tags must be an array of strings",
170
+ details: { path: `${path}.tags` },
171
+ },
172
+ };
173
+ }
174
+ result.tags = tags.map((t) => String(t).trim()).filter(Boolean);
175
+ }
176
+ return { ok: true, value: result };
177
+ }
178
+ function validateRequirementsArray(requirements, path) {
179
+ if (!Array.isArray(requirements)) {
180
+ return {
181
+ ok: false,
182
+ error: {
183
+ code: "VALIDATION_FAILED",
184
+ message: "requirements must be an array",
185
+ details: { path: `${path}.requirements` },
186
+ },
187
+ };
188
+ }
189
+ if (requirements.length > MAX_REQUIREMENTS_PER_FRAMEWORK) {
190
+ return {
191
+ ok: false,
192
+ error: {
193
+ code: "VALIDATION_FAILED",
194
+ message: `requirements must not exceed ${MAX_REQUIREMENTS_PER_FRAMEWORK} items`,
195
+ details: { path: `${path}.requirements`, count: requirements.length },
196
+ },
197
+ };
198
+ }
199
+ const out = [];
200
+ for (let i = 0; i < requirements.length; i++) {
201
+ const item = requirements[i];
202
+ if (item === null || typeof item !== "object" || Array.isArray(item)) {
203
+ return {
204
+ ok: false,
205
+ error: {
206
+ code: "VALIDATION_FAILED",
207
+ message: "each requirement must be an object with requirementId and controlIds",
208
+ details: { path: `${path}.requirements[${i}]` },
209
+ },
210
+ };
211
+ }
212
+ const obj = item;
213
+ const requirementId = obj.requirementId;
214
+ const controlIds = obj.controlIds;
215
+ if (typeof requirementId !== "string" || requirementId.trim() === "") {
216
+ return {
217
+ ok: false,
218
+ error: {
219
+ code: "VALIDATION_FAILED",
220
+ message: "requirementId is required and must be a non-empty string",
221
+ details: { path: `${path}.requirements[${i}].requirementId` },
222
+ },
223
+ };
224
+ }
225
+ if (!Array.isArray(controlIds)) {
226
+ return {
227
+ ok: false,
228
+ error: {
229
+ code: "VALIDATION_FAILED",
230
+ message: "controlIds must be an array of strings",
231
+ details: { path: `${path}.requirements[${i}].controlIds` },
232
+ },
233
+ };
234
+ }
235
+ if (controlIds.length > MAX_CONTROL_IDS_PER_REQUIREMENT) {
236
+ return {
237
+ ok: false,
238
+ error: {
239
+ code: "VALIDATION_FAILED",
240
+ message: `controlIds per requirement must not exceed ${MAX_CONTROL_IDS_PER_REQUIREMENT}`,
241
+ details: { path: `${path}.requirements[${i}].controlIds`, count: controlIds.length },
242
+ },
243
+ };
244
+ }
245
+ const invalid = controlIds.some((c) => typeof c !== "string");
246
+ if (invalid) {
247
+ return {
248
+ ok: false,
249
+ error: {
250
+ code: "VALIDATION_FAILED",
251
+ message: "controlIds must be an array of strings",
252
+ details: { path: `${path}.requirements[${i}].controlIds` },
253
+ },
254
+ };
255
+ }
256
+ const req = {
257
+ requirementId: requirementId.trim(),
258
+ controlIds: controlIds.map((c) => String(c)),
259
+ };
260
+ if (typeof obj.name === "string" && obj.name.trim() !== "") {
261
+ req.name = obj.name.trim();
262
+ }
263
+ out.push(req);
264
+ }
265
+ return { ok: true, value: out };
266
+ }
267
+ /**
268
+ * Validate CreateFrameworkInput. Required: name (non-empty), requirements (array; each requirementId + controlIds; limits).
269
+ */
270
+ export function validateCreateFrameworkInput(input, path = "input") {
271
+ if (input === null || typeof input !== "object" || Array.isArray(input)) {
272
+ return {
273
+ ok: false,
274
+ error: {
275
+ code: "VALIDATION_FAILED",
276
+ message: "CreateFrameworkInput must be an object",
277
+ details: { path },
278
+ },
279
+ };
280
+ }
281
+ const obj = input;
282
+ const name = obj.name;
283
+ if (typeof name !== "string" || name.trim() === "") {
284
+ return {
285
+ ok: false,
286
+ error: {
287
+ code: "VALIDATION_FAILED",
288
+ message: "name is required and must be a non-empty string",
289
+ details: { path: `${path}.name` },
290
+ },
291
+ };
292
+ }
293
+ const requirementsOut = validateRequirementsArray(obj.requirements, path);
294
+ if (!requirementsOut.ok)
295
+ return requirementsOut;
296
+ const result = {
297
+ name: name.trim(),
298
+ requirements: requirementsOut.value,
299
+ };
300
+ if (typeof obj.version === "string")
301
+ result.version = obj.version.trim() || undefined;
302
+ if (typeof obj.description === "string")
303
+ result.description = obj.description.trim() || undefined;
304
+ return { ok: true, value: result };
305
+ }
306
+ /**
307
+ * Validate partial framework input for update. Same rules for name/requirements when provided.
308
+ */
309
+ export function validateUpdateFrameworkInput(input, path = "input") {
310
+ if (input === null || typeof input !== "object" || Array.isArray(input)) {
311
+ return {
312
+ ok: false,
313
+ error: {
314
+ code: "VALIDATION_FAILED",
315
+ message: "UpdateFrameworkInput must be an object",
316
+ details: { path },
317
+ },
318
+ };
319
+ }
320
+ const obj = input;
321
+ const result = {};
322
+ if (Object.prototype.hasOwnProperty.call(obj, "name")) {
323
+ const name = obj.name;
324
+ if (typeof name !== "string" || name.trim() === "") {
325
+ return {
326
+ ok: false,
327
+ error: {
328
+ code: "VALIDATION_FAILED",
329
+ message: "name must be a non-empty string",
330
+ details: { path: `${path}.name` },
331
+ },
332
+ };
333
+ }
334
+ result.name = name.trim();
335
+ }
336
+ if (Object.prototype.hasOwnProperty.call(obj, "requirements")) {
337
+ const requirementsOut = validateRequirementsArray(obj.requirements, path);
338
+ if (!requirementsOut.ok)
339
+ return requirementsOut;
340
+ result.requirements = requirementsOut.value;
341
+ }
342
+ if (Object.prototype.hasOwnProperty.call(obj, "version")) {
343
+ result.version = typeof obj.version === "string" ? obj.version.trim() || undefined : undefined;
344
+ }
345
+ if (Object.prototype.hasOwnProperty.call(obj, "description")) {
346
+ result.description =
347
+ typeof obj.description === "string" ? obj.description.trim() || undefined : undefined;
348
+ }
349
+ return { ok: true, value: result };
350
+ }
351
+ const VALID_OUTCOMES = ["pass", "fail", "unknown"];
352
+ const SCOPING_STATUSES = ["applicable", "not_applicable"];
353
+ /**
354
+ * Validate CreateEvidenceInput. Required: controlId, type (EvidenceType), actorId, outcome.
355
+ * Optional: sourceId, frameworkRequirementId, timestamp, payload, artifactRef.
356
+ * For type "scoping_decision": outcome MUST be "unknown"; payload.status MUST be "applicable" or "not_applicable".
357
+ */
358
+ export function validateCreateEvidenceInput(input, path = "input") {
359
+ if (input === null || typeof input !== "object" || Array.isArray(input)) {
360
+ return {
361
+ ok: false,
362
+ error: {
363
+ code: "VALIDATION_FAILED",
364
+ message: "CreateEvidenceInput must be an object",
365
+ details: { path },
366
+ },
367
+ };
368
+ }
369
+ const obj = input;
370
+ const controlId = obj.controlId;
371
+ const type = obj.type;
372
+ const actorId = obj.actorId;
373
+ const outcome = obj.outcome;
374
+ if (typeof controlId !== "string" || controlId.trim() === "") {
375
+ return {
376
+ ok: false,
377
+ error: {
378
+ code: "VALIDATION_FAILED",
379
+ message: "controlId is required and must be a non-empty string",
380
+ details: { path: `${path}.controlId`, controlId: typeof controlId === "string" ? controlId : undefined },
381
+ },
382
+ };
383
+ }
384
+ if (typeof type !== "string" || !EVIDENCE_TYPES.includes(type)) {
385
+ return {
386
+ ok: false,
387
+ error: {
388
+ code: "VALIDATION_FAILED",
389
+ message: "type must be a valid EvidenceType",
390
+ details: { path: `${path}.type`, type: type ?? undefined },
391
+ },
392
+ };
393
+ }
394
+ if (typeof actorId !== "string" || actorId.trim() === "") {
395
+ return {
396
+ ok: false,
397
+ error: {
398
+ code: "VALIDATION_FAILED",
399
+ message: "actorId is required and must be a non-empty string",
400
+ details: { path: `${path}.actorId` },
401
+ },
402
+ };
403
+ }
404
+ if (!VALID_OUTCOMES.includes(outcome)) {
405
+ return {
406
+ ok: false,
407
+ error: {
408
+ code: "VALIDATION_FAILED",
409
+ message: "outcome must be one of pass, fail, unknown",
410
+ details: { path: `${path}.outcome`, outcome: outcome ?? undefined },
411
+ },
412
+ };
413
+ }
414
+ if (type === "scoping_decision") {
415
+ if (outcome !== "unknown") {
416
+ return {
417
+ ok: false,
418
+ error: {
419
+ code: "VALIDATION_FAILED",
420
+ message: "scoping_decision evidence must have outcome 'unknown'",
421
+ details: { path: `${path}.outcome` },
422
+ },
423
+ };
424
+ }
425
+ const payload = obj.payload;
426
+ if (payload === null || typeof payload !== "object" || Array.isArray(payload)) {
427
+ return {
428
+ ok: false,
429
+ error: {
430
+ code: "VALIDATION_FAILED",
431
+ message: "scoping_decision requires payload with status",
432
+ details: { path: `${path}.payload` },
433
+ },
434
+ };
435
+ }
436
+ const status = payload.status;
437
+ if (typeof status !== "string" ||
438
+ !SCOPING_STATUSES.includes(status)) {
439
+ return {
440
+ ok: false,
441
+ error: {
442
+ code: "VALIDATION_FAILED",
443
+ message: "scoping_decision payload.status must be 'applicable' or 'not_applicable'",
444
+ details: { path: `${path}.payload.status`, status: status ?? undefined },
445
+ },
446
+ };
447
+ }
448
+ }
449
+ const result = {
450
+ controlId: controlId.trim(),
451
+ type: type,
452
+ actorId: actorId.trim(),
453
+ outcome: outcome,
454
+ };
455
+ if (typeof obj.sourceId === "string" && obj.sourceId.trim() !== "") {
456
+ result.sourceId = obj.sourceId.trim();
457
+ }
458
+ if (typeof obj.frameworkRequirementId === "string" && obj.frameworkRequirementId.trim() !== "") {
459
+ result.frameworkRequirementId = obj.frameworkRequirementId.trim();
460
+ }
461
+ if (typeof obj.timestamp === "number" && Number.isFinite(obj.timestamp)) {
462
+ result.timestamp = obj.timestamp;
463
+ }
464
+ if (obj.payload !== undefined && obj.payload !== null && typeof obj.payload === "object" && !Array.isArray(obj.payload)) {
465
+ result.payload = obj.payload;
466
+ }
467
+ if (typeof obj.artifactRef === "string" && obj.artifactRef.trim() !== "") {
468
+ result.artifactRef = obj.artifactRef.trim();
469
+ }
470
+ return { ok: true, value: result };
471
+ }
472
+ /**
473
+ * Validate CreateCheckInput. Required: name, controlId (non-empty).
474
+ * At least one of: schedule, trigger, (adapterName and adapterMethod), or customConfig must be present.
475
+ */
476
+ export function validateCreateCheckInput(input, path = "input") {
477
+ if (input === null || typeof input !== "object" || Array.isArray(input)) {
478
+ return {
479
+ ok: false,
480
+ error: {
481
+ code: "VALIDATION_FAILED",
482
+ message: "Check definition must be an object",
483
+ details: { path },
484
+ },
485
+ };
486
+ }
487
+ const obj = input;
488
+ const name = obj.name;
489
+ const controlId = obj.controlId;
490
+ if (typeof name !== "string" || name.trim() === "") {
491
+ return {
492
+ ok: false,
493
+ error: {
494
+ code: "VALIDATION_FAILED",
495
+ message: "name is required and must be a non-empty string",
496
+ details: { path: `${path}.name` },
497
+ },
498
+ };
499
+ }
500
+ if (typeof controlId !== "string" || controlId.trim() === "") {
501
+ return {
502
+ ok: false,
503
+ error: {
504
+ code: "VALIDATION_FAILED",
505
+ message: "controlId is required and must be a non-empty string",
506
+ details: { path: `${path}.controlId` },
507
+ },
508
+ };
509
+ }
510
+ const schedule = obj.schedule;
511
+ const trigger = obj.trigger;
512
+ const adapterName = obj.adapterName;
513
+ const adapterMethod = obj.adapterMethod;
514
+ const customConfig = obj.customConfig;
515
+ const hasSchedule = typeof schedule === "string" && schedule.trim() !== "";
516
+ const hasTrigger = typeof trigger === "string" && trigger.trim() !== "";
517
+ const hasAdapter = typeof adapterName === "string" &&
518
+ adapterName.trim() !== "" &&
519
+ typeof adapterMethod === "string" &&
520
+ adapterMethod.trim() !== "";
521
+ const hasCustomConfig = customConfig !== null && typeof customConfig === "object" && !Array.isArray(customConfig);
522
+ if (!hasSchedule && !hasTrigger && !hasAdapter && !hasCustomConfig) {
523
+ return {
524
+ ok: false,
525
+ error: {
526
+ code: "VALIDATION_FAILED",
527
+ message: "At least one of schedule, trigger, (adapterName and adapterMethod), or customConfig is required",
528
+ details: { path },
529
+ },
530
+ };
531
+ }
532
+ const result = {
533
+ name: name.trim(),
534
+ controlId: controlId.trim(),
535
+ };
536
+ if (hasSchedule)
537
+ result.schedule = schedule.trim();
538
+ if (hasTrigger)
539
+ result.trigger = trigger.trim();
540
+ if (typeof adapterName === "string" && adapterName.trim() !== "") {
541
+ result.adapterName = adapterName.trim();
542
+ }
543
+ if (typeof adapterMethod === "string" && adapterMethod.trim() !== "") {
544
+ result.adapterMethod = adapterMethod.trim();
545
+ }
546
+ if (hasCustomConfig)
547
+ result.customConfig = customConfig;
548
+ return { ok: true, value: result };
549
+ }
550
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "compfn",
3
+ "version": "0.1.0",
4
+ "description": "Self-hosted compliance function: controls, frameworks, evidence, checks, audit-ready export",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "bin": {
15
+ "compfn": "./cli/dist/index.js"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "cli/dist"
20
+ ],
21
+ "scripts": {
22
+ "build": "npm run build:core && npm run build:cli",
23
+ "build:core": "tsc",
24
+ "build:cli": "tsc -p cli/tsconfig.json",
25
+ "test": "vitest",
26
+ "typecheck": "tsc --noEmit && tsc --noEmit -p cli/tsconfig.json",
27
+ "clean": "rm -rf dist cli/dist"
28
+ },
29
+ "keywords": [
30
+ "compliance",
31
+ "controls",
32
+ "frameworks",
33
+ "evidence",
34
+ "audit",
35
+ "superfunctions"
36
+ ],
37
+ "author": "21n",
38
+ "license": "MIT",
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+https://github.com/21nCo/super-functions.git",
42
+ "directory": "superfunctions/compfn"
43
+ },
44
+ "dependencies": {
45
+ "@superfunctions/db": "*",
46
+ "commander": "^4.1.1",
47
+ "hono": "^4.11.9"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^22.0.0",
51
+ "typescript": "^5.6.0",
52
+ "vitest": "^3.2.4"
53
+ }
54
+ }