@hasna/microservices 0.0.16 → 0.0.17

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 (293) hide show
  1. package/README.md +143 -23
  2. package/bin/index.js +711 -13998
  3. package/bin/mcp.js +228 -10987
  4. package/dist/index.js +166 -10056
  5. package/package.json +25 -25
  6. package/microservices/microservice-ads/package.json +0 -28
  7. package/microservices/microservice-ads/src/cli/index.ts +0 -605
  8. package/microservices/microservice-ads/src/db/campaigns.ts +0 -797
  9. package/microservices/microservice-ads/src/db/database.ts +0 -91
  10. package/microservices/microservice-ads/src/db/migrations.ts +0 -60
  11. package/microservices/microservice-ads/src/index.ts +0 -39
  12. package/microservices/microservice-ads/src/mcp/index.ts +0 -480
  13. package/microservices/microservice-analytics/package.json +0 -28
  14. package/microservices/microservice-analytics/src/cli/index.ts +0 -373
  15. package/microservices/microservice-analytics/src/db/analytics.ts +0 -564
  16. package/microservices/microservice-analytics/src/db/database.ts +0 -91
  17. package/microservices/microservice-analytics/src/db/migrations.ts +0 -50
  18. package/microservices/microservice-analytics/src/index.ts +0 -37
  19. package/microservices/microservice-analytics/src/mcp/index.ts +0 -334
  20. package/microservices/microservice-assets/package.json +0 -28
  21. package/microservices/microservice-assets/src/cli/index.ts +0 -375
  22. package/microservices/microservice-assets/src/db/assets.ts +0 -370
  23. package/microservices/microservice-assets/src/db/database.ts +0 -91
  24. package/microservices/microservice-assets/src/db/migrations.ts +0 -51
  25. package/microservices/microservice-assets/src/index.ts +0 -32
  26. package/microservices/microservice-assets/src/mcp/index.ts +0 -346
  27. package/microservices/microservice-bookkeeping/package.json +0 -28
  28. package/microservices/microservice-bookkeeping/src/cli/index.ts +0 -386
  29. package/microservices/microservice-bookkeeping/src/db/bookkeeping.ts +0 -591
  30. package/microservices/microservice-bookkeeping/src/db/database.ts +0 -91
  31. package/microservices/microservice-bookkeeping/src/db/migrations.ts +0 -52
  32. package/microservices/microservice-bookkeeping/src/index.ts +0 -32
  33. package/microservices/microservice-bookkeeping/src/mcp/index.ts +0 -284
  34. package/microservices/microservice-calendar/package.json +0 -28
  35. package/microservices/microservice-calendar/src/cli/index.ts +0 -287
  36. package/microservices/microservice-calendar/src/db/calendar.ts +0 -328
  37. package/microservices/microservice-calendar/src/db/database.ts +0 -91
  38. package/microservices/microservice-calendar/src/db/migrations.ts +0 -47
  39. package/microservices/microservice-calendar/src/index.ts +0 -24
  40. package/microservices/microservice-calendar/src/mcp/index.ts +0 -226
  41. package/microservices/microservice-company/package.json +0 -28
  42. package/microservices/microservice-company/src/cli/index.ts +0 -1126
  43. package/microservices/microservice-company/src/db/company.ts +0 -854
  44. package/microservices/microservice-company/src/db/database.ts +0 -91
  45. package/microservices/microservice-company/src/db/migrations.ts +0 -214
  46. package/microservices/microservice-company/src/db/workflow-migrations.ts +0 -44
  47. package/microservices/microservice-company/src/index.ts +0 -60
  48. package/microservices/microservice-company/src/lib/audit.ts +0 -168
  49. package/microservices/microservice-company/src/lib/finance.ts +0 -299
  50. package/microservices/microservice-company/src/lib/settings.ts +0 -85
  51. package/microservices/microservice-company/src/lib/workflows.ts +0 -698
  52. package/microservices/microservice-company/src/mcp/index.ts +0 -991
  53. package/microservices/microservice-compliance/package.json +0 -28
  54. package/microservices/microservice-compliance/src/cli/index.ts +0 -467
  55. package/microservices/microservice-compliance/src/db/compliance.ts +0 -633
  56. package/microservices/microservice-compliance/src/db/database.ts +0 -91
  57. package/microservices/microservice-compliance/src/db/migrations.ts +0 -63
  58. package/microservices/microservice-compliance/src/index.ts +0 -46
  59. package/microservices/microservice-compliance/src/mcp/index.ts +0 -438
  60. package/microservices/microservice-contacts/package.json +0 -28
  61. package/microservices/microservice-contacts/src/cli/index.ts +0 -393
  62. package/microservices/microservice-contacts/src/db/companies.ts +0 -167
  63. package/microservices/microservice-contacts/src/db/contacts.ts +0 -249
  64. package/microservices/microservice-contacts/src/db/database.ts +0 -91
  65. package/microservices/microservice-contacts/src/db/migrations.ts +0 -71
  66. package/microservices/microservice-contacts/src/db/relationships.ts +0 -53
  67. package/microservices/microservice-contacts/src/index.ts +0 -42
  68. package/microservices/microservice-contacts/src/mcp/index.ts +0 -303
  69. package/microservices/microservice-contracts/package.json +0 -28
  70. package/microservices/microservice-contracts/src/cli/index.ts +0 -770
  71. package/microservices/microservice-contracts/src/db/contracts.ts +0 -925
  72. package/microservices/microservice-contracts/src/db/database.ts +0 -91
  73. package/microservices/microservice-contracts/src/db/migrations.ts +0 -141
  74. package/microservices/microservice-contracts/src/index.ts +0 -43
  75. package/microservices/microservice-contracts/src/mcp/index.ts +0 -617
  76. package/microservices/microservice-crm/package.json +0 -28
  77. package/microservices/microservice-crm/src/cli/index.ts +0 -396
  78. package/microservices/microservice-crm/src/db/database.ts +0 -91
  79. package/microservices/microservice-crm/src/db/migrations.ts +0 -66
  80. package/microservices/microservice-crm/src/db/pipeline.ts +0 -397
  81. package/microservices/microservice-crm/src/index.ts +0 -34
  82. package/microservices/microservice-crm/src/mcp/index.ts +0 -294
  83. package/microservices/microservice-documents/package.json +0 -28
  84. package/microservices/microservice-documents/src/cli/index.ts +0 -246
  85. package/microservices/microservice-documents/src/db/database.ts +0 -91
  86. package/microservices/microservice-documents/src/db/documents.ts +0 -316
  87. package/microservices/microservice-documents/src/db/migrations.ts +0 -49
  88. package/microservices/microservice-documents/src/index.ts +0 -24
  89. package/microservices/microservice-documents/src/mcp/index.ts +0 -202
  90. package/microservices/microservice-domains/package.json +0 -28
  91. package/microservices/microservice-domains/src/cli/index.ts +0 -1111
  92. package/microservices/microservice-domains/src/db/database.ts +0 -91
  93. package/microservices/microservice-domains/src/db/domains.ts +0 -1164
  94. package/microservices/microservice-domains/src/db/migrations.ts +0 -60
  95. package/microservices/microservice-domains/src/index.ts +0 -65
  96. package/microservices/microservice-domains/src/lib/brandsight.ts +0 -350
  97. package/microservices/microservice-domains/src/lib/godaddy.ts +0 -338
  98. package/microservices/microservice-domains/src/lib/namecheap.ts +0 -262
  99. package/microservices/microservice-domains/src/lib/registrar.ts +0 -355
  100. package/microservices/microservice-domains/src/mcp/index.ts +0 -781
  101. package/microservices/microservice-expenses/package.json +0 -28
  102. package/microservices/microservice-expenses/src/cli/index.ts +0 -267
  103. package/microservices/microservice-expenses/src/db/database.ts +0 -91
  104. package/microservices/microservice-expenses/src/db/expenses.ts +0 -345
  105. package/microservices/microservice-expenses/src/db/migrations.ts +0 -45
  106. package/microservices/microservice-expenses/src/index.ts +0 -25
  107. package/microservices/microservice-expenses/src/mcp/index.ts +0 -196
  108. package/microservices/microservice-habits/package.json +0 -28
  109. package/microservices/microservice-habits/src/cli/index.ts +0 -315
  110. package/microservices/microservice-habits/src/db/database.ts +0 -91
  111. package/microservices/microservice-habits/src/db/habits.ts +0 -451
  112. package/microservices/microservice-habits/src/db/migrations.ts +0 -46
  113. package/microservices/microservice-habits/src/index.ts +0 -31
  114. package/microservices/microservice-habits/src/mcp/index.ts +0 -313
  115. package/microservices/microservice-health/package.json +0 -28
  116. package/microservices/microservice-health/src/cli/index.ts +0 -484
  117. package/microservices/microservice-health/src/db/database.ts +0 -91
  118. package/microservices/microservice-health/src/db/health.ts +0 -708
  119. package/microservices/microservice-health/src/db/migrations.ts +0 -70
  120. package/microservices/microservice-health/src/index.ts +0 -63
  121. package/microservices/microservice-health/src/mcp/index.ts +0 -437
  122. package/microservices/microservice-hiring/package.json +0 -28
  123. package/microservices/microservice-hiring/src/cli/index.ts +0 -741
  124. package/microservices/microservice-hiring/src/db/database.ts +0 -91
  125. package/microservices/microservice-hiring/src/db/hiring.ts +0 -1085
  126. package/microservices/microservice-hiring/src/db/migrations.ts +0 -89
  127. package/microservices/microservice-hiring/src/index.ts +0 -80
  128. package/microservices/microservice-hiring/src/lib/scoring.ts +0 -206
  129. package/microservices/microservice-hiring/src/mcp/index.ts +0 -709
  130. package/microservices/microservice-inventory/package.json +0 -28
  131. package/microservices/microservice-inventory/src/cli/index.ts +0 -365
  132. package/microservices/microservice-inventory/src/db/database.ts +0 -91
  133. package/microservices/microservice-inventory/src/db/inventory.ts +0 -393
  134. package/microservices/microservice-inventory/src/db/migrations.ts +0 -54
  135. package/microservices/microservice-inventory/src/index.ts +0 -28
  136. package/microservices/microservice-inventory/src/mcp/index.ts +0 -250
  137. package/microservices/microservice-invoices/dashboard/index.html +0 -12
  138. package/microservices/microservice-invoices/dashboard/package.json +0 -29
  139. package/microservices/microservice-invoices/dashboard/tsconfig.json +0 -14
  140. package/microservices/microservice-invoices/dashboard/vite.config.ts +0 -15
  141. package/microservices/microservice-invoices/package.json +0 -31
  142. package/microservices/microservice-invoices/src/cli/index.ts +0 -308
  143. package/microservices/microservice-invoices/src/db/business.ts +0 -241
  144. package/microservices/microservice-invoices/src/db/clients.ts +0 -127
  145. package/microservices/microservice-invoices/src/db/database.ts +0 -91
  146. package/microservices/microservice-invoices/src/db/invoices.ts +0 -345
  147. package/microservices/microservice-invoices/src/db/migrations.ts +0 -184
  148. package/microservices/microservice-invoices/src/index.ts +0 -56
  149. package/microservices/microservice-invoices/src/mcp/index.ts +0 -242
  150. package/microservices/microservice-invoices/src/server/index.ts +0 -162
  151. package/microservices/microservice-leads/package.json +0 -28
  152. package/microservices/microservice-leads/src/cli/index.ts +0 -596
  153. package/microservices/microservice-leads/src/db/database.ts +0 -91
  154. package/microservices/microservice-leads/src/db/leads.ts +0 -520
  155. package/microservices/microservice-leads/src/db/lists.ts +0 -151
  156. package/microservices/microservice-leads/src/db/migrations.ts +0 -93
  157. package/microservices/microservice-leads/src/index.ts +0 -65
  158. package/microservices/microservice-leads/src/lib/enrichment.ts +0 -202
  159. package/microservices/microservice-leads/src/lib/scoring.ts +0 -134
  160. package/microservices/microservice-leads/src/mcp/index.ts +0 -533
  161. package/microservices/microservice-notes/package.json +0 -28
  162. package/microservices/microservice-notes/src/cli/index.ts +0 -63
  163. package/microservices/microservice-notes/src/db/database.ts +0 -91
  164. package/microservices/microservice-notes/src/db/migrations.ts +0 -40
  165. package/microservices/microservice-notes/src/db/notes.ts +0 -114
  166. package/microservices/microservice-notes/src/index.ts +0 -2
  167. package/microservices/microservice-notes/src/mcp/index.ts +0 -37
  168. package/microservices/microservice-notifications/package.json +0 -28
  169. package/microservices/microservice-notifications/src/cli/index.ts +0 -349
  170. package/microservices/microservice-notifications/src/db/database.ts +0 -91
  171. package/microservices/microservice-notifications/src/db/migrations.ts +0 -62
  172. package/microservices/microservice-notifications/src/db/notifications.ts +0 -509
  173. package/microservices/microservice-notifications/src/index.ts +0 -41
  174. package/microservices/microservice-notifications/src/mcp/index.ts +0 -422
  175. package/microservices/microservice-payments/package.json +0 -28
  176. package/microservices/microservice-payments/src/cli/index.ts +0 -609
  177. package/microservices/microservice-payments/src/db/database.ts +0 -91
  178. package/microservices/microservice-payments/src/db/migrations.ts +0 -81
  179. package/microservices/microservice-payments/src/db/payments.ts +0 -1204
  180. package/microservices/microservice-payments/src/index.ts +0 -51
  181. package/microservices/microservice-payments/src/mcp/index.ts +0 -683
  182. package/microservices/microservice-payroll/package.json +0 -28
  183. package/microservices/microservice-payroll/src/cli/index.ts +0 -643
  184. package/microservices/microservice-payroll/src/db/database.ts +0 -91
  185. package/microservices/microservice-payroll/src/db/migrations.ts +0 -95
  186. package/microservices/microservice-payroll/src/db/payroll.ts +0 -1377
  187. package/microservices/microservice-payroll/src/index.ts +0 -48
  188. package/microservices/microservice-payroll/src/mcp/index.ts +0 -666
  189. package/microservices/microservice-products/package.json +0 -28
  190. package/microservices/microservice-products/src/cli/index.ts +0 -416
  191. package/microservices/microservice-products/src/db/categories.ts +0 -154
  192. package/microservices/microservice-products/src/db/database.ts +0 -91
  193. package/microservices/microservice-products/src/db/migrations.ts +0 -58
  194. package/microservices/microservice-products/src/db/pricing-tiers.ts +0 -66
  195. package/microservices/microservice-products/src/db/products.ts +0 -452
  196. package/microservices/microservice-products/src/index.ts +0 -53
  197. package/microservices/microservice-products/src/mcp/index.ts +0 -453
  198. package/microservices/microservice-projects/package.json +0 -28
  199. package/microservices/microservice-projects/src/cli/index.ts +0 -480
  200. package/microservices/microservice-projects/src/db/database.ts +0 -91
  201. package/microservices/microservice-projects/src/db/migrations.ts +0 -65
  202. package/microservices/microservice-projects/src/db/projects.ts +0 -715
  203. package/microservices/microservice-projects/src/index.ts +0 -57
  204. package/microservices/microservice-projects/src/mcp/index.ts +0 -501
  205. package/microservices/microservice-proposals/package.json +0 -28
  206. package/microservices/microservice-proposals/src/cli/index.ts +0 -400
  207. package/microservices/microservice-proposals/src/db/database.ts +0 -91
  208. package/microservices/microservice-proposals/src/db/migrations.ts +0 -52
  209. package/microservices/microservice-proposals/src/db/proposals.ts +0 -532
  210. package/microservices/microservice-proposals/src/index.ts +0 -37
  211. package/microservices/microservice-proposals/src/mcp/index.ts +0 -375
  212. package/microservices/microservice-reading/package.json +0 -28
  213. package/microservices/microservice-reading/src/cli/index.ts +0 -464
  214. package/microservices/microservice-reading/src/db/database.ts +0 -91
  215. package/microservices/microservice-reading/src/db/migrations.ts +0 -59
  216. package/microservices/microservice-reading/src/db/reading.ts +0 -524
  217. package/microservices/microservice-reading/src/index.ts +0 -51
  218. package/microservices/microservice-reading/src/mcp/index.ts +0 -368
  219. package/microservices/microservice-shipping/package.json +0 -28
  220. package/microservices/microservice-shipping/src/cli/index.ts +0 -606
  221. package/microservices/microservice-shipping/src/db/database.ts +0 -91
  222. package/microservices/microservice-shipping/src/db/migrations.ts +0 -69
  223. package/microservices/microservice-shipping/src/db/shipping.ts +0 -1093
  224. package/microservices/microservice-shipping/src/index.ts +0 -53
  225. package/microservices/microservice-shipping/src/mcp/index.ts +0 -533
  226. package/microservices/microservice-social/package.json +0 -29
  227. package/microservices/microservice-social/src/cli/index.ts +0 -1583
  228. package/microservices/microservice-social/src/db/database.ts +0 -91
  229. package/microservices/microservice-social/src/db/migrations.ts +0 -160
  230. package/microservices/microservice-social/src/db/social.ts +0 -1076
  231. package/microservices/microservice-social/src/index.ts +0 -46
  232. package/microservices/microservice-social/src/lib/audience.ts +0 -353
  233. package/microservices/microservice-social/src/lib/content-ai.ts +0 -278
  234. package/microservices/microservice-social/src/lib/media.ts +0 -311
  235. package/microservices/microservice-social/src/lib/mentions.ts +0 -434
  236. package/microservices/microservice-social/src/lib/metrics-sync.ts +0 -264
  237. package/microservices/microservice-social/src/lib/publisher.ts +0 -377
  238. package/microservices/microservice-social/src/lib/scheduler.ts +0 -229
  239. package/microservices/microservice-social/src/lib/sentiment.ts +0 -256
  240. package/microservices/microservice-social/src/lib/threads.ts +0 -291
  241. package/microservices/microservice-social/src/mcp/index.ts +0 -1425
  242. package/microservices/microservice-social/src/server/index.ts +0 -441
  243. package/microservices/microservice-subscriptions/package.json +0 -28
  244. package/microservices/microservice-subscriptions/src/cli/index.ts +0 -715
  245. package/microservices/microservice-subscriptions/src/db/database.ts +0 -91
  246. package/microservices/microservice-subscriptions/src/db/migrations.ts +0 -125
  247. package/microservices/microservice-subscriptions/src/db/subscriptions.ts +0 -1256
  248. package/microservices/microservice-subscriptions/src/index.ts +0 -41
  249. package/microservices/microservice-subscriptions/src/mcp/index.ts +0 -631
  250. package/microservices/microservice-timesheets/package.json +0 -28
  251. package/microservices/microservice-timesheets/src/cli/index.ts +0 -373
  252. package/microservices/microservice-timesheets/src/db/database.ts +0 -91
  253. package/microservices/microservice-timesheets/src/db/locale.ts +0 -217
  254. package/microservices/microservice-timesheets/src/db/migrations.ts +0 -74
  255. package/microservices/microservice-timesheets/src/db/timesheets.ts +0 -447
  256. package/microservices/microservice-timesheets/src/index.ts +0 -44
  257. package/microservices/microservice-timesheets/src/mcp/index.ts +0 -269
  258. package/microservices/microservice-transcriber/package.json +0 -29
  259. package/microservices/microservice-transcriber/src/cli/index.ts +0 -1593
  260. package/microservices/microservice-transcriber/src/db/annotations.ts +0 -37
  261. package/microservices/microservice-transcriber/src/db/comments.ts +0 -166
  262. package/microservices/microservice-transcriber/src/db/database.ts +0 -91
  263. package/microservices/microservice-transcriber/src/db/migrations.ts +0 -118
  264. package/microservices/microservice-transcriber/src/db/proofread.ts +0 -119
  265. package/microservices/microservice-transcriber/src/db/transcripts.ts +0 -395
  266. package/microservices/microservice-transcriber/src/index.ts +0 -43
  267. package/microservices/microservice-transcriber/src/lib/config.ts +0 -77
  268. package/microservices/microservice-transcriber/src/lib/diff.ts +0 -91
  269. package/microservices/microservice-transcriber/src/lib/downloader.ts +0 -638
  270. package/microservices/microservice-transcriber/src/lib/feeds.ts +0 -62
  271. package/microservices/microservice-transcriber/src/lib/live.ts +0 -94
  272. package/microservices/microservice-transcriber/src/lib/notion.ts +0 -129
  273. package/microservices/microservice-transcriber/src/lib/proofread.ts +0 -296
  274. package/microservices/microservice-transcriber/src/lib/providers.ts +0 -713
  275. package/microservices/microservice-transcriber/src/lib/summarizer.ts +0 -147
  276. package/microservices/microservice-transcriber/src/lib/translator.ts +0 -75
  277. package/microservices/microservice-transcriber/src/lib/webhook.ts +0 -37
  278. package/microservices/microservice-transcriber/src/mcp/index.ts +0 -1330
  279. package/microservices/microservice-transcriber/src/server/index.ts +0 -199
  280. package/microservices/microservice-travel/package.json +0 -28
  281. package/microservices/microservice-travel/src/cli/index.ts +0 -505
  282. package/microservices/microservice-travel/src/db/database.ts +0 -91
  283. package/microservices/microservice-travel/src/db/migrations.ts +0 -77
  284. package/microservices/microservice-travel/src/db/travel.ts +0 -802
  285. package/microservices/microservice-travel/src/index.ts +0 -60
  286. package/microservices/microservice-travel/src/mcp/index.ts +0 -495
  287. package/microservices/microservice-wiki/package.json +0 -28
  288. package/microservices/microservice-wiki/src/cli/index.ts +0 -345
  289. package/microservices/microservice-wiki/src/db/database.ts +0 -91
  290. package/microservices/microservice-wiki/src/db/migrations.ts +0 -55
  291. package/microservices/microservice-wiki/src/db/wiki.ts +0 -395
  292. package/microservices/microservice-wiki/src/index.ts +0 -32
  293. package/microservices/microservice-wiki/src/mcp/index.ts +0 -344
@@ -1,28 +0,0 @@
1
- {
2
- "name": "@hasna/microservice-compliance",
3
- "version": "0.0.1",
4
- "description": "Compliance management microservice with SQLite — track requirements, licenses, and audits across regulatory frameworks",
5
- "type": "module",
6
- "bin": {
7
- "microservice-compliance": "./src/cli/index.ts",
8
- "microservice-compliance-mcp": "./src/mcp/index.ts"
9
- },
10
- "exports": {
11
- ".": "./src/index.ts"
12
- },
13
- "scripts": {
14
- "dev": "bun run ./src/cli/index.ts",
15
- "test": "bun test"
16
- },
17
- "dependencies": {
18
- "@hasna/cloud": "^0.1.24",
19
- "@modelcontextprotocol/sdk": "^1.26.0",
20
- "commander": "^12.1.0",
21
- "zod": "^3.24.0"
22
- },
23
- "license": "Apache-2.0",
24
- "publishConfig": {
25
- "registry": "https://registry.npmjs.org",
26
- "access": "public"
27
- }
28
- }
@@ -1,467 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { Command } from "commander";
4
- import {
5
- createRequirement,
6
- getRequirement,
7
- listRequirements,
8
- updateRequirement,
9
- deleteRequirement,
10
- searchRequirements,
11
- createLicense,
12
- getLicense,
13
- listLicenses,
14
- renewLicense,
15
- listExpiringLicenses,
16
- deleteLicense,
17
- getLicenseStats,
18
- scheduleAudit,
19
- listAudits,
20
- completeAudit,
21
- getAuditReport,
22
- getComplianceScore,
23
- getFrameworkStatus,
24
- } from "../db/compliance.js";
25
-
26
- const program = new Command();
27
-
28
- program
29
- .name("microservice-compliance")
30
- .description("Compliance management microservice")
31
- .version("0.0.1");
32
-
33
- // --- Requirements ---
34
-
35
- const reqCmd = program
36
- .command("requirement")
37
- .alias("req")
38
- .description("Compliance requirement management");
39
-
40
- reqCmd
41
- .command("create")
42
- .description("Create a compliance requirement")
43
- .requiredOption("--name <name>", "Requirement name")
44
- .option("--framework <framework>", "Framework (gdpr, soc2, hipaa, pci, tax, iso27001, custom)")
45
- .option("--status <status>", "Status (compliant, non_compliant, in_progress, not_applicable)")
46
- .option("--description <text>", "Description")
47
- .option("--evidence <text>", "Evidence")
48
- .option("--due-date <date>", "Due date (YYYY-MM-DD)")
49
- .option("--reviewer <name>", "Reviewer name")
50
- .option("--json", "Output as JSON", false)
51
- .action((opts) => {
52
- const req = createRequirement({
53
- name: opts.name,
54
- framework: opts.framework,
55
- status: opts.status,
56
- description: opts.description,
57
- evidence: opts.evidence,
58
- due_date: opts.dueDate,
59
- reviewer: opts.reviewer,
60
- });
61
-
62
- if (opts.json) {
63
- console.log(JSON.stringify(req, null, 2));
64
- } else {
65
- console.log(`Created requirement: ${req.name} (${req.id})`);
66
- }
67
- });
68
-
69
- reqCmd
70
- .command("list")
71
- .description("List requirements")
72
- .option("--framework <framework>", "Filter by framework")
73
- .option("--status <status>", "Filter by status")
74
- .option("--search <query>", "Search by name or description")
75
- .option("--limit <n>", "Limit results")
76
- .option("--json", "Output as JSON", false)
77
- .action((opts) => {
78
- const reqs = listRequirements({
79
- framework: opts.framework,
80
- status: opts.status,
81
- search: opts.search,
82
- limit: opts.limit ? parseInt(opts.limit) : undefined,
83
- });
84
-
85
- if (opts.json) {
86
- console.log(JSON.stringify(reqs, null, 2));
87
- } else {
88
- if (reqs.length === 0) {
89
- console.log("No requirements found.");
90
- return;
91
- }
92
- for (const r of reqs) {
93
- const fw = r.framework ? ` [${r.framework}]` : "";
94
- console.log(` ${r.name}${fw} — ${r.status}`);
95
- }
96
- console.log(`\n${reqs.length} requirement(s)`);
97
- }
98
- });
99
-
100
- reqCmd
101
- .command("get")
102
- .description("Get a requirement by ID")
103
- .argument("<id>", "Requirement ID")
104
- .option("--json", "Output as JSON", false)
105
- .action((id, opts) => {
106
- const req = getRequirement(id);
107
- if (!req) {
108
- console.error(`Requirement '${id}' not found.`);
109
- process.exit(1);
110
- }
111
-
112
- if (opts.json) {
113
- console.log(JSON.stringify(req, null, 2));
114
- } else {
115
- console.log(`${req.name}`);
116
- console.log(` Status: ${req.status}`);
117
- if (req.framework) console.log(` Framework: ${req.framework}`);
118
- if (req.description) console.log(` Description: ${req.description}`);
119
- if (req.evidence) console.log(` Evidence: ${req.evidence}`);
120
- if (req.due_date) console.log(` Due: ${req.due_date}`);
121
- if (req.reviewer) console.log(` Reviewer: ${req.reviewer}`);
122
- }
123
- });
124
-
125
- reqCmd
126
- .command("update")
127
- .description("Update a requirement")
128
- .argument("<id>", "Requirement ID")
129
- .option("--name <name>", "Name")
130
- .option("--framework <framework>", "Framework")
131
- .option("--status <status>", "Status")
132
- .option("--description <text>", "Description")
133
- .option("--evidence <text>", "Evidence")
134
- .option("--due-date <date>", "Due date")
135
- .option("--reviewer <name>", "Reviewer")
136
- .option("--json", "Output as JSON", false)
137
- .action((id, opts) => {
138
- const input: Record<string, unknown> = {};
139
- if (opts.name !== undefined) input.name = opts.name;
140
- if (opts.framework !== undefined) input.framework = opts.framework;
141
- if (opts.status !== undefined) input.status = opts.status;
142
- if (opts.description !== undefined) input.description = opts.description;
143
- if (opts.evidence !== undefined) input.evidence = opts.evidence;
144
- if (opts.dueDate !== undefined) input.due_date = opts.dueDate;
145
- if (opts.reviewer !== undefined) input.reviewer = opts.reviewer;
146
-
147
- const req = updateRequirement(id, input);
148
- if (!req) {
149
- console.error(`Requirement '${id}' not found.`);
150
- process.exit(1);
151
- }
152
-
153
- if (opts.json) {
154
- console.log(JSON.stringify(req, null, 2));
155
- } else {
156
- console.log(`Updated: ${req.name} — ${req.status}`);
157
- }
158
- });
159
-
160
- reqCmd
161
- .command("delete")
162
- .description("Delete a requirement")
163
- .argument("<id>", "Requirement ID")
164
- .action((id) => {
165
- const deleted = deleteRequirement(id);
166
- if (deleted) {
167
- console.log(`Deleted requirement ${id}`);
168
- } else {
169
- console.error(`Requirement '${id}' not found.`);
170
- process.exit(1);
171
- }
172
- });
173
-
174
- // --- Licenses ---
175
-
176
- const licCmd = program
177
- .command("license")
178
- .alias("lic")
179
- .description("License management");
180
-
181
- licCmd
182
- .command("create")
183
- .description("Create a license")
184
- .requiredOption("--name <name>", "License name")
185
- .option("--type <type>", "Type (software, business, professional, patent, trademark)")
186
- .option("--issuer <issuer>", "Issuer")
187
- .option("--license-number <number>", "License number")
188
- .option("--status <status>", "Status (active, expired, pending_renewal)")
189
- .option("--issued-at <date>", "Issued date")
190
- .option("--expires-at <date>", "Expiry date")
191
- .option("--auto-renew", "Auto-renew", false)
192
- .option("--cost <amount>", "Cost")
193
- .option("--json", "Output as JSON", false)
194
- .action((opts) => {
195
- const lic = createLicense({
196
- name: opts.name,
197
- type: opts.type,
198
- issuer: opts.issuer,
199
- license_number: opts.licenseNumber,
200
- status: opts.status,
201
- issued_at: opts.issuedAt,
202
- expires_at: opts.expiresAt,
203
- auto_renew: opts.autoRenew,
204
- cost: opts.cost ? parseFloat(opts.cost) : undefined,
205
- });
206
-
207
- if (opts.json) {
208
- console.log(JSON.stringify(lic, null, 2));
209
- } else {
210
- console.log(`Created license: ${lic.name} (${lic.id})`);
211
- }
212
- });
213
-
214
- licCmd
215
- .command("list")
216
- .description("List licenses")
217
- .option("--type <type>", "Filter by type")
218
- .option("--status <status>", "Filter by status")
219
- .option("--search <query>", "Search")
220
- .option("--limit <n>", "Limit results")
221
- .option("--json", "Output as JSON", false)
222
- .action((opts) => {
223
- const lics = listLicenses({
224
- type: opts.type,
225
- status: opts.status,
226
- search: opts.search,
227
- limit: opts.limit ? parseInt(opts.limit) : undefined,
228
- });
229
-
230
- if (opts.json) {
231
- console.log(JSON.stringify(lics, null, 2));
232
- } else {
233
- if (lics.length === 0) {
234
- console.log("No licenses found.");
235
- return;
236
- }
237
- for (const l of lics) {
238
- const type = l.type ? ` [${l.type}]` : "";
239
- const expires = l.expires_at ? ` expires ${l.expires_at}` : "";
240
- console.log(` ${l.name}${type} — ${l.status}${expires}`);
241
- }
242
- console.log(`\n${lics.length} license(s)`);
243
- }
244
- });
245
-
246
- licCmd
247
- .command("get")
248
- .description("Get a license by ID")
249
- .argument("<id>", "License ID")
250
- .option("--json", "Output as JSON", false)
251
- .action((id, opts) => {
252
- const lic = getLicense(id);
253
- if (!lic) {
254
- console.error(`License '${id}' not found.`);
255
- process.exit(1);
256
- }
257
-
258
- if (opts.json) {
259
- console.log(JSON.stringify(lic, null, 2));
260
- } else {
261
- console.log(`${lic.name}`);
262
- console.log(` Status: ${lic.status}`);
263
- if (lic.type) console.log(` Type: ${lic.type}`);
264
- if (lic.issuer) console.log(` Issuer: ${lic.issuer}`);
265
- if (lic.license_number) console.log(` Number: ${lic.license_number}`);
266
- if (lic.expires_at) console.log(` Expires: ${lic.expires_at}`);
267
- if (lic.cost !== null) console.log(` Cost: ${lic.cost}`);
268
- console.log(` Auto-renew: ${lic.auto_renew ? "yes" : "no"}`);
269
- }
270
- });
271
-
272
- licCmd
273
- .command("renew")
274
- .description("Renew a license with new expiry date")
275
- .argument("<id>", "License ID")
276
- .requiredOption("--expires-at <date>", "New expiry date")
277
- .option("--json", "Output as JSON", false)
278
- .action((id, opts) => {
279
- const lic = renewLicense(id, opts.expiresAt);
280
- if (!lic) {
281
- console.error(`License '${id}' not found.`);
282
- process.exit(1);
283
- }
284
-
285
- if (opts.json) {
286
- console.log(JSON.stringify(lic, null, 2));
287
- } else {
288
- console.log(`Renewed: ${lic.name} — expires ${lic.expires_at}`);
289
- }
290
- });
291
-
292
- licCmd
293
- .command("expiring")
294
- .description("List licenses expiring within N days")
295
- .option("--days <n>", "Number of days", "30")
296
- .option("--json", "Output as JSON", false)
297
- .action((opts) => {
298
- const days = parseInt(opts.days);
299
- const lics = listExpiringLicenses(days);
300
-
301
- if (opts.json) {
302
- console.log(JSON.stringify(lics, null, 2));
303
- } else {
304
- if (lics.length === 0) {
305
- console.log(`No licenses expiring within ${days} days.`);
306
- return;
307
- }
308
- for (const l of lics) {
309
- console.log(` ${l.name} — expires ${l.expires_at}`);
310
- }
311
- console.log(`\n${lics.length} license(s) expiring within ${days} days`);
312
- }
313
- });
314
-
315
- // --- Audits ---
316
-
317
- const auditCmd = program
318
- .command("audit")
319
- .description("Audit management");
320
-
321
- auditCmd
322
- .command("schedule")
323
- .description("Schedule a new audit")
324
- .requiredOption("--name <name>", "Audit name")
325
- .option("--framework <framework>", "Framework")
326
- .option("--auditor <name>", "Auditor name")
327
- .option("--scheduled-at <date>", "Scheduled date")
328
- .option("--json", "Output as JSON", false)
329
- .action((opts) => {
330
- const audit = scheduleAudit({
331
- name: opts.name,
332
- framework: opts.framework,
333
- auditor: opts.auditor,
334
- scheduled_at: opts.scheduledAt,
335
- });
336
-
337
- if (opts.json) {
338
- console.log(JSON.stringify(audit, null, 2));
339
- } else {
340
- console.log(`Scheduled audit: ${audit.name} (${audit.id})`);
341
- }
342
- });
343
-
344
- auditCmd
345
- .command("list")
346
- .description("List audits")
347
- .option("--framework <framework>", "Filter by framework")
348
- .option("--status <status>", "Filter by status")
349
- .option("--limit <n>", "Limit results")
350
- .option("--json", "Output as JSON", false)
351
- .action((opts) => {
352
- const audits = listAudits({
353
- framework: opts.framework,
354
- status: opts.status,
355
- limit: opts.limit ? parseInt(opts.limit) : undefined,
356
- });
357
-
358
- if (opts.json) {
359
- console.log(JSON.stringify(audits, null, 2));
360
- } else {
361
- if (audits.length === 0) {
362
- console.log("No audits found.");
363
- return;
364
- }
365
- for (const a of audits) {
366
- const fw = a.framework ? ` [${a.framework}]` : "";
367
- console.log(` ${a.name}${fw} — ${a.status}`);
368
- }
369
- console.log(`\n${audits.length} audit(s)`);
370
- }
371
- });
372
-
373
- auditCmd
374
- .command("complete")
375
- .description("Complete an audit with findings")
376
- .argument("<id>", "Audit ID")
377
- .option("--findings <json>", "Findings as JSON array", "[]")
378
- .option("--json", "Output as JSON", false)
379
- .action((id, opts) => {
380
- let findings: unknown[];
381
- try {
382
- findings = JSON.parse(opts.findings);
383
- } catch {
384
- console.error("Invalid JSON for findings.");
385
- process.exit(1);
386
- }
387
-
388
- const audit = completeAudit(id, findings);
389
- if (!audit) {
390
- console.error(`Audit '${id}' not found.`);
391
- process.exit(1);
392
- }
393
-
394
- if (opts.json) {
395
- console.log(JSON.stringify(audit, null, 2));
396
- } else {
397
- console.log(`Completed audit: ${audit.name} — ${audit.status} (${audit.findings.length} finding(s))`);
398
- }
399
- });
400
-
401
- // --- Analytics ---
402
-
403
- program
404
- .command("score")
405
- .description("Get overall compliance score")
406
- .option("--json", "Output as JSON", false)
407
- .action((opts) => {
408
- const score = getComplianceScore();
409
-
410
- if (opts.json) {
411
- console.log(JSON.stringify(score, null, 2));
412
- } else {
413
- console.log(`Compliance Score: ${score.score}%`);
414
- console.log(` Total: ${score.total}`);
415
- console.log(` Compliant: ${score.compliant}`);
416
- console.log(` Non-compliant: ${score.non_compliant}`);
417
- console.log(` In progress: ${score.in_progress}`);
418
- console.log(` Not applicable: ${score.not_applicable}`);
419
- }
420
- });
421
-
422
- program
423
- .command("framework-status")
424
- .description("Get compliance status for a framework")
425
- .argument("<framework>", "Framework name")
426
- .option("--json", "Output as JSON", false)
427
- .action((framework, opts) => {
428
- const status = getFrameworkStatus(framework);
429
-
430
- if (opts.json) {
431
- console.log(JSON.stringify(status, null, 2));
432
- } else {
433
- console.log(`Framework: ${status.framework} — ${status.score}% compliant`);
434
- console.log(` Total: ${status.total}`);
435
- console.log(` Compliant: ${status.compliant}`);
436
- console.log(` Non-compliant: ${status.non_compliant}`);
437
- console.log(` In progress: ${status.in_progress}`);
438
- console.log(` Not applicable: ${status.not_applicable}`);
439
- }
440
- });
441
-
442
- program
443
- .command("stats")
444
- .description("Get license statistics")
445
- .option("--json", "Output as JSON", false)
446
- .action((opts) => {
447
- const stats = getLicenseStats();
448
-
449
- if (opts.json) {
450
- console.log(JSON.stringify(stats, null, 2));
451
- } else {
452
- console.log(`License Stats`);
453
- console.log(` Total: ${stats.total}`);
454
- console.log(` Active: ${stats.active}`);
455
- console.log(` Expired: ${stats.expired}`);
456
- console.log(` Pending renewal: ${stats.pending_renewal}`);
457
- console.log(` Total cost: ${stats.total_cost}`);
458
- if (Object.keys(stats.by_type).length > 0) {
459
- console.log(` By type:`);
460
- for (const [type, count] of Object.entries(stats.by_type)) {
461
- console.log(` ${type}: ${count}`);
462
- }
463
- }
464
- }
465
- });
466
-
467
- program.parse(process.argv);