@skillsmith/core 0.5.3 → 0.5.5

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 (276) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/activation/ActivationManager.d.ts +7 -0
  4. package/dist/src/activation/ActivationManager.d.ts.map +1 -1
  5. package/dist/src/activation/ActivationManager.js +13 -4
  6. package/dist/src/activation/ActivationManager.js.map +1 -1
  7. package/dist/src/analysis/adapters/python.d.ts +16 -11
  8. package/dist/src/analysis/adapters/python.d.ts.map +1 -1
  9. package/dist/src/analysis/adapters/python.js +46 -61
  10. package/dist/src/analysis/adapters/python.js.map +1 -1
  11. package/dist/src/analysis/router.test.d.ts +2 -0
  12. package/dist/src/analysis/router.test.d.ts.map +1 -0
  13. package/dist/src/analysis/router.test.js +411 -0
  14. package/dist/src/analysis/router.test.js.map +1 -0
  15. package/dist/src/analysis/tree-sitter/manager.d.ts.map +1 -1
  16. package/dist/src/analysis/tree-sitter/manager.js +12 -5
  17. package/dist/src/analysis/tree-sitter/manager.js.map +1 -1
  18. package/dist/src/analysis/tree-sitter/pythonExtractor.d.ts +45 -0
  19. package/dist/src/analysis/tree-sitter/pythonExtractor.d.ts.map +1 -0
  20. package/dist/src/analysis/tree-sitter/pythonExtractor.js +264 -0
  21. package/dist/src/analysis/tree-sitter/pythonExtractor.js.map +1 -0
  22. package/dist/src/analysis/tree-sitter/pythonExtractor.test.d.ts +12 -0
  23. package/dist/src/analysis/tree-sitter/pythonExtractor.test.d.ts.map +1 -0
  24. package/dist/src/analysis/tree-sitter/pythonExtractor.test.js +74 -0
  25. package/dist/src/analysis/tree-sitter/pythonExtractor.test.js.map +1 -0
  26. package/dist/src/analysis/tree-sitter/pythonIncremental.d.ts +93 -0
  27. package/dist/src/analysis/tree-sitter/pythonIncremental.d.ts.map +1 -0
  28. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.d.ts +22 -0
  29. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.d.ts.map +1 -0
  30. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.js +229 -0
  31. package/dist/src/analysis/tree-sitter/pythonIncremental.hardening.test.js.map +1 -0
  32. package/dist/src/analysis/tree-sitter/pythonIncremental.js +287 -0
  33. package/dist/src/analysis/tree-sitter/pythonIncremental.js.map +1 -0
  34. package/dist/src/analysis/tree-sitter/pythonIncremental.test.d.ts +17 -0
  35. package/dist/src/analysis/tree-sitter/pythonIncremental.test.d.ts.map +1 -0
  36. package/dist/src/analysis/tree-sitter/pythonIncremental.test.js +142 -0
  37. package/dist/src/analysis/tree-sitter/pythonIncremental.test.js.map +1 -0
  38. package/dist/src/analysis/tree-sitter/queries/python.d.ts +43 -0
  39. package/dist/src/analysis/tree-sitter/queries/python.d.ts.map +1 -0
  40. package/dist/src/analysis/tree-sitter/queries/python.js +88 -0
  41. package/dist/src/analysis/tree-sitter/queries/python.js.map +1 -0
  42. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.d.ts +13 -0
  43. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.d.ts.map +1 -0
  44. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.js +174 -0
  45. package/dist/src/analysis/tree-sitter/queryExtractionMatchesOrExceedsRegex.test.js.map +1 -0
  46. package/dist/src/analytics/ROIDashboardService.csv.d.ts +11 -0
  47. package/dist/src/analytics/ROIDashboardService.csv.d.ts.map +1 -0
  48. package/dist/src/analytics/ROIDashboardService.csv.js +43 -0
  49. package/dist/src/analytics/ROIDashboardService.csv.js.map +1 -0
  50. package/dist/src/analytics/ROIDashboardService.d.ts +64 -3
  51. package/dist/src/analytics/ROIDashboardService.d.ts.map +1 -1
  52. package/dist/src/analytics/ROIDashboardService.js +116 -45
  53. package/dist/src/analytics/ROIDashboardService.js.map +1 -1
  54. package/dist/src/api/client.d.ts +4 -66
  55. package/dist/src/api/client.d.ts.map +1 -1
  56. package/dist/src/api/client.events.d.ts.map +1 -1
  57. package/dist/src/api/client.events.js +10 -1
  58. package/dist/src/api/client.events.js.map +1 -1
  59. package/dist/src/api/client.js +40 -66
  60. package/dist/src/api/client.js.map +1 -1
  61. package/dist/src/api/client.token-refresh.d.ts +3 -0
  62. package/dist/src/api/client.token-refresh.d.ts.map +1 -0
  63. package/dist/src/api/client.token-refresh.js +19 -0
  64. package/dist/src/api/client.token-refresh.js.map +1 -0
  65. package/dist/src/api/client.token-refresh.test.d.ts +2 -0
  66. package/dist/src/api/client.token-refresh.test.d.ts.map +1 -0
  67. package/dist/src/api/client.token-refresh.test.js +73 -0
  68. package/dist/src/api/client.token-refresh.test.js.map +1 -0
  69. package/dist/src/api/client.types.d.ts +2 -0
  70. package/dist/src/api/client.types.d.ts.map +1 -1
  71. package/dist/src/api/index.d.ts +1 -1
  72. package/dist/src/api/index.d.ts.map +1 -1
  73. package/dist/src/api/index.js +1 -1
  74. package/dist/src/api/index.js.map +1 -1
  75. package/dist/src/api/schemas.d.ts +60 -60
  76. package/dist/src/api/schemas.d.ts.map +1 -1
  77. package/dist/src/benchmarks/incrementalParseBenchmark.d.ts +18 -0
  78. package/dist/src/benchmarks/incrementalParseBenchmark.d.ts.map +1 -0
  79. package/dist/src/benchmarks/incrementalParseBenchmark.js +121 -0
  80. package/dist/src/benchmarks/incrementalParseBenchmark.js.map +1 -0
  81. package/dist/src/billing/GDPRComplianceService.test.d.ts +2 -0
  82. package/dist/src/billing/GDPRComplianceService.test.d.ts.map +1 -0
  83. package/dist/src/billing/GDPRComplianceService.test.js +405 -0
  84. package/dist/src/billing/GDPRComplianceService.test.js.map +1 -0
  85. package/dist/src/config/index.d.ts +4 -0
  86. package/dist/src/config/index.d.ts.map +1 -1
  87. package/dist/src/config/index.js +6 -0
  88. package/dist/src/config/index.js.map +1 -1
  89. package/dist/src/config/token-credentials.d.ts +13 -0
  90. package/dist/src/config/token-credentials.d.ts.map +1 -0
  91. package/dist/src/config/token-credentials.js +126 -0
  92. package/dist/src/config/token-credentials.js.map +1 -0
  93. package/dist/src/config/token-credentials.test.d.ts +10 -0
  94. package/dist/src/config/token-credentials.test.d.ts.map +1 -0
  95. package/dist/src/config/token-credentials.test.js +91 -0
  96. package/dist/src/config/token-credentials.test.js.map +1 -0
  97. package/dist/src/index.d.ts +7 -4
  98. package/dist/src/index.d.ts.map +1 -1
  99. package/dist/src/index.js +6 -3
  100. package/dist/src/index.js.map +1 -1
  101. package/dist/src/indexer/SkillParser.coverage.test.d.ts +10 -0
  102. package/dist/src/indexer/SkillParser.coverage.test.d.ts.map +1 -0
  103. package/dist/src/indexer/SkillParser.coverage.test.js +76 -0
  104. package/dist/src/indexer/SkillParser.coverage.test.js.map +1 -0
  105. package/dist/src/indexer/SkillParser.test.d.ts +2 -0
  106. package/dist/src/indexer/SkillParser.test.d.ts.map +1 -0
  107. package/dist/src/indexer/SkillParser.test.js +375 -0
  108. package/dist/src/indexer/SkillParser.test.js.map +1 -0
  109. package/dist/src/scripts/__tests__/scan-imported-skills.test.js +34 -5
  110. package/dist/src/scripts/__tests__/scan-imported-skills.test.js.map +1 -1
  111. package/dist/src/scripts/github-import/blocklist.d.ts +65 -0
  112. package/dist/src/scripts/github-import/blocklist.d.ts.map +1 -0
  113. package/dist/src/scripts/github-import/blocklist.js +124 -0
  114. package/dist/src/scripts/github-import/blocklist.js.map +1 -0
  115. package/dist/src/scripts/github-import/index.d.ts +1 -0
  116. package/dist/src/scripts/github-import/index.d.ts.map +1 -1
  117. package/dist/src/scripts/github-import/index.js +3 -0
  118. package/dist/src/scripts/github-import/index.js.map +1 -1
  119. package/dist/src/scripts/github-import/signal-of-intent.d.ts +87 -0
  120. package/dist/src/scripts/github-import/signal-of-intent.d.ts.map +1 -0
  121. package/dist/src/scripts/github-import/signal-of-intent.js +213 -0
  122. package/dist/src/scripts/github-import/signal-of-intent.js.map +1 -0
  123. package/dist/src/scripts/github-import/types.d.ts +22 -0
  124. package/dist/src/scripts/github-import/types.d.ts.map +1 -1
  125. package/dist/src/scripts/github-import/types.js.map +1 -1
  126. package/dist/src/scripts/import-github-skills.js +73 -3
  127. package/dist/src/scripts/import-github-skills.js.map +1 -1
  128. package/dist/src/scripts/skill-scanner/allowlist.d.ts +38 -0
  129. package/dist/src/scripts/skill-scanner/allowlist.d.ts.map +1 -0
  130. package/dist/src/scripts/skill-scanner/allowlist.js +178 -0
  131. package/dist/src/scripts/skill-scanner/allowlist.js.map +1 -0
  132. package/dist/src/scripts/skill-scanner/scanner.d.ts +10 -2
  133. package/dist/src/scripts/skill-scanner/scanner.d.ts.map +1 -1
  134. package/dist/src/scripts/skill-scanner/scanner.js +15 -3
  135. package/dist/src/scripts/skill-scanner/scanner.js.map +1 -1
  136. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts +20 -6
  137. package/dist/src/scripts/skill-scanner/trust-scorer.d.ts.map +1 -1
  138. package/dist/src/scripts/skill-scanner/trust-scorer.js +28 -9
  139. package/dist/src/scripts/skill-scanner/trust-scorer.js.map +1 -1
  140. package/dist/src/scripts/skill-scanner/types.d.ts +50 -0
  141. package/dist/src/scripts/skill-scanner/types.d.ts.map +1 -1
  142. package/dist/src/scripts/validation/types.d.ts +14 -24
  143. package/dist/src/scripts/validation/types.d.ts.map +1 -1
  144. package/dist/src/security/scanner/SecurityScanner.helpers.d.ts +18 -0
  145. package/dist/src/security/scanner/SecurityScanner.helpers.d.ts.map +1 -1
  146. package/dist/src/security/scanner/SecurityScanner.helpers.js +54 -6
  147. package/dist/src/security/scanner/SecurityScanner.helpers.js.map +1 -1
  148. package/dist/src/security/scanner/patterns.d.ts.map +1 -1
  149. package/dist/src/security/scanner/patterns.js +45 -5
  150. package/dist/src/security/scanner/patterns.js.map +1 -1
  151. package/dist/src/services/skill-config-schema.d.ts +4 -36
  152. package/dist/src/services/skill-config-schema.d.ts.map +1 -1
  153. package/dist/src/sources/LocalFilesystemAdapter.d.ts +104 -10
  154. package/dist/src/sources/LocalFilesystemAdapter.d.ts.map +1 -1
  155. package/dist/src/sources/LocalFilesystemAdapter.helpers.d.ts +92 -0
  156. package/dist/src/sources/LocalFilesystemAdapter.helpers.d.ts.map +1 -0
  157. package/dist/src/sources/LocalFilesystemAdapter.helpers.js +157 -0
  158. package/dist/src/sources/LocalFilesystemAdapter.helpers.js.map +1 -0
  159. package/dist/src/sources/LocalFilesystemAdapter.js +218 -159
  160. package/dist/src/sources/LocalFilesystemAdapter.js.map +1 -1
  161. package/dist/src/sources/LocalFilesystemAdapter.scan.d.ts +78 -0
  162. package/dist/src/sources/LocalFilesystemAdapter.scan.d.ts.map +1 -0
  163. package/dist/src/sources/LocalFilesystemAdapter.scan.js +118 -0
  164. package/dist/src/sources/LocalFilesystemAdapter.scan.js.map +1 -0
  165. package/dist/src/sources/index.d.ts +1 -1
  166. package/dist/src/sources/index.d.ts.map +1 -1
  167. package/dist/src/sources/index.js.map +1 -1
  168. package/dist/src/sources/types.d.ts +28 -0
  169. package/dist/src/sources/types.d.ts.map +1 -1
  170. package/dist/src/telemetry/tracer-imports.d.ts +13 -0
  171. package/dist/src/telemetry/tracer-imports.d.ts.map +1 -0
  172. package/dist/src/telemetry/tracer-imports.js +26 -0
  173. package/dist/src/telemetry/tracer-imports.js.map +1 -0
  174. package/dist/src/telemetry/tracer.d.ts.map +1 -1
  175. package/dist/src/telemetry/tracer.js +18 -21
  176. package/dist/src/telemetry/tracer.js.map +1 -1
  177. package/dist/src/utils/rate-limit.d.ts +39 -0
  178. package/dist/src/utils/rate-limit.d.ts.map +1 -0
  179. package/dist/src/utils/rate-limit.js +48 -0
  180. package/dist/src/utils/rate-limit.js.map +1 -0
  181. package/dist/src/utils/rate-limit.test.d.ts +11 -0
  182. package/dist/src/utils/rate-limit.test.d.ts.map +1 -0
  183. package/dist/src/utils/rate-limit.test.js +86 -0
  184. package/dist/src/utils/rate-limit.test.js.map +1 -0
  185. package/dist/src/webhooks/WebhookDeadLetterRepository.d.ts +178 -0
  186. package/dist/src/webhooks/WebhookDeadLetterRepository.d.ts.map +1 -0
  187. package/dist/src/webhooks/WebhookDeadLetterRepository.js +196 -0
  188. package/dist/src/webhooks/WebhookDeadLetterRepository.js.map +1 -0
  189. package/dist/src/webhooks/WebhookQueue.d.ts +1 -0
  190. package/dist/src/webhooks/WebhookQueue.d.ts.map +1 -1
  191. package/dist/src/webhooks/WebhookQueue.js +19 -0
  192. package/dist/src/webhooks/WebhookQueue.js.map +1 -1
  193. package/dist/src/webhooks/WebhookQueue.types.d.ts +11 -0
  194. package/dist/src/webhooks/WebhookQueue.types.d.ts.map +1 -1
  195. package/dist/src/webhooks/index.d.ts +1 -0
  196. package/dist/src/webhooks/index.d.ts.map +1 -1
  197. package/dist/src/webhooks/index.js +2 -0
  198. package/dist/src/webhooks/index.js.map +1 -1
  199. package/dist/src/webhooks/webhook-schemas.d.ts +117 -1212
  200. package/dist/src/webhooks/webhook-schemas.d.ts.map +1 -1
  201. package/dist/tests/ActivationManager.test.d.ts +13 -0
  202. package/dist/tests/ActivationManager.test.d.ts.map +1 -0
  203. package/dist/tests/ActivationManager.test.js +218 -0
  204. package/dist/tests/ActivationManager.test.js.map +1 -0
  205. package/dist/tests/LocalFilesystemAdapter.coverage.test.d.ts +13 -0
  206. package/dist/tests/LocalFilesystemAdapter.coverage.test.d.ts.map +1 -0
  207. package/dist/tests/LocalFilesystemAdapter.coverage.test.js +314 -0
  208. package/dist/tests/LocalFilesystemAdapter.coverage.test.js.map +1 -0
  209. package/dist/tests/LocalFilesystemAdapter.security.test.d.ts +18 -0
  210. package/dist/tests/LocalFilesystemAdapter.security.test.d.ts.map +1 -0
  211. package/dist/tests/LocalFilesystemAdapter.security.test.js +344 -0
  212. package/dist/tests/LocalFilesystemAdapter.security.test.js.map +1 -0
  213. package/dist/tests/LocalFilesystemAdapter.test.d.ts +12 -0
  214. package/dist/tests/LocalFilesystemAdapter.test.d.ts.map +1 -0
  215. package/dist/tests/LocalFilesystemAdapter.test.js +301 -0
  216. package/dist/tests/LocalFilesystemAdapter.test.js.map +1 -0
  217. package/dist/tests/ROIDashboardService.coverage.test.d.ts +9 -0
  218. package/dist/tests/ROIDashboardService.coverage.test.d.ts.map +1 -0
  219. package/dist/tests/ROIDashboardService.coverage.test.js +118 -0
  220. package/dist/tests/ROIDashboardService.coverage.test.js.map +1 -0
  221. package/dist/tests/ROIDashboardService.test.js +87 -0
  222. package/dist/tests/ROIDashboardService.test.js.map +1 -1
  223. package/dist/tests/ScraperAdapters.gitlab-coverage.test.d.ts +14 -0
  224. package/dist/tests/ScraperAdapters.gitlab-coverage.test.d.ts.map +1 -0
  225. package/dist/tests/ScraperAdapters.gitlab-coverage.test.js +169 -0
  226. package/dist/tests/ScraperAdapters.gitlab-coverage.test.js.map +1 -0
  227. package/dist/tests/ScraperAdapters.test.d.ts +5 -1
  228. package/dist/tests/ScraperAdapters.test.d.ts.map +1 -1
  229. package/dist/tests/ScraperAdapters.test.js +6 -336
  230. package/dist/tests/ScraperAdapters.test.js.map +1 -1
  231. package/dist/tests/WebhookDeadLetterRepository.test.d.ts +2 -0
  232. package/dist/tests/WebhookDeadLetterRepository.test.d.ts.map +1 -0
  233. package/dist/tests/WebhookDeadLetterRepository.test.js +333 -0
  234. package/dist/tests/WebhookDeadLetterRepository.test.js.map +1 -0
  235. package/dist/tests/WebhookHandler.test.js +93 -1
  236. package/dist/tests/WebhookHandler.test.js.map +1 -1
  237. package/dist/tests/WebhookQueue.coverage.test.d.ts +19 -0
  238. package/dist/tests/WebhookQueue.coverage.test.d.ts.map +1 -0
  239. package/dist/tests/WebhookQueue.coverage.test.js +190 -0
  240. package/dist/tests/WebhookQueue.coverage.test.js.map +1 -0
  241. package/dist/tests/api/client.events.test.d.ts +10 -0
  242. package/dist/tests/api/client.events.test.d.ts.map +1 -0
  243. package/dist/tests/api/client.events.test.js +85 -0
  244. package/dist/tests/api/client.events.test.js.map +1 -0
  245. package/dist/tests/billing/GDPRCompliance.test.d.ts +2 -2
  246. package/dist/tests/billing/GDPRCompliance.test.js +221 -36
  247. package/dist/tests/billing/GDPRCompliance.test.js.map +1 -1
  248. package/dist/tests/github-import/blocklist.test.d.ts +15 -0
  249. package/dist/tests/github-import/blocklist.test.d.ts.map +1 -0
  250. package/dist/tests/github-import/blocklist.test.js +182 -0
  251. package/dist/tests/github-import/blocklist.test.js.map +1 -0
  252. package/dist/tests/github-import/signal-of-intent.test.d.ts +15 -0
  253. package/dist/tests/github-import/signal-of-intent.test.d.ts.map +1 -0
  254. package/dist/tests/github-import/signal-of-intent.test.js +171 -0
  255. package/dist/tests/github-import/signal-of-intent.test.js.map +1 -0
  256. package/dist/tests/security/scanner-regression-guard.test.d.ts +12 -0
  257. package/dist/tests/security/scanner-regression-guard.test.d.ts.map +1 -1
  258. package/dist/tests/security/scanner-regression-guard.test.js +15 -3
  259. package/dist/tests/security/scanner-regression-guard.test.js.map +1 -1
  260. package/dist/tests/security/scanner-wave2-fixtures.test.d.ts +12 -0
  261. package/dist/tests/security/scanner-wave2-fixtures.test.d.ts.map +1 -0
  262. package/dist/tests/security/scanner-wave2-fixtures.test.js +173 -0
  263. package/dist/tests/security/scanner-wave2-fixtures.test.js.map +1 -0
  264. package/dist/tests/security.test.js +1 -0
  265. package/dist/tests/security.test.js.map +1 -1
  266. package/dist/tests/skill-scanner/allowlist.test.d.ts +16 -0
  267. package/dist/tests/skill-scanner/allowlist.test.d.ts.map +1 -0
  268. package/dist/tests/skill-scanner/allowlist.test.js +332 -0
  269. package/dist/tests/skill-scanner/allowlist.test.js.map +1 -0
  270. package/dist/tests/telemetry.test.js +126 -0
  271. package/dist/tests/telemetry.test.js.map +1 -1
  272. package/dist/tests/webhooks/WebhookDeadLetterRepository.test.d.ts +10 -0
  273. package/dist/tests/webhooks/WebhookDeadLetterRepository.test.d.ts.map +1 -0
  274. package/dist/tests/webhooks/WebhookDeadLetterRepository.test.js +109 -0
  275. package/dist/tests/webhooks/WebhookDeadLetterRepository.test.js.map +1 -0
  276. package/package.json +8 -3
@@ -0,0 +1,405 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { GDPRComplianceService } from './GDPRComplianceService.js';
3
+ function makeStmt(opts) {
4
+ return {
5
+ all: vi.fn().mockReturnValue(opts.allResult ?? []),
6
+ get: vi.fn().mockReturnValue(opts.getResult),
7
+ run: vi.fn().mockReturnValue(opts.runResult ?? { changes: 0, lastInsertRowid: 0 }),
8
+ iterate: vi.fn(),
9
+ finalize: vi.fn(),
10
+ bind: vi.fn(),
11
+ };
12
+ }
13
+ function makeMockDb() {
14
+ return {
15
+ prepare: vi.fn(),
16
+ exec: vi.fn(),
17
+ transaction: vi.fn(),
18
+ pragma: vi.fn(),
19
+ close: vi.fn(),
20
+ open: true,
21
+ name: ':memory:',
22
+ memory: true,
23
+ readonly: false,
24
+ };
25
+ }
26
+ function makeMockStripe(deletesFn = vi.fn().mockResolvedValue({})) {
27
+ return {
28
+ getStripeInstance: vi.fn().mockReturnValue({
29
+ customers: { del: deletesFn },
30
+ }),
31
+ };
32
+ }
33
+ // ---------------------------------------------------------------------------
34
+ // Fixture data
35
+ // ---------------------------------------------------------------------------
36
+ const CUSTOMER_ID = 'user-abc-123';
37
+ const STRIPE_CUSTOMER_ID = 'cus_stripe123';
38
+ const SUB_ID = 'sub-001';
39
+ const SUB_ROW = {
40
+ id: SUB_ID,
41
+ stripeSubscriptionId: 'stripe-sub-001',
42
+ tier: 'individual',
43
+ status: 'active',
44
+ seatCount: 1,
45
+ currentPeriodStart: '2026-01-01T00:00:00Z',
46
+ currentPeriodEnd: '2026-02-01T00:00:00Z',
47
+ canceledAt: null,
48
+ createdAt: '2026-01-01T00:00:00Z',
49
+ updatedAt: '2026-01-01T00:00:00Z',
50
+ };
51
+ const INVOICE_ROW = {
52
+ id: 'inv-001',
53
+ stripeInvoiceId: 'in_stripe001',
54
+ amountCents: 999,
55
+ currency: 'cad',
56
+ status: 'paid',
57
+ invoiceNumber: 'INV-001',
58
+ paidAt: '2026-01-05T00:00:00Z',
59
+ periodStart: '2026-01-01T00:00:00Z',
60
+ periodEnd: '2026-02-01T00:00:00Z',
61
+ createdAt: '2026-01-01T00:00:00Z',
62
+ };
63
+ const LICENSE_DB_ROW = {
64
+ id: 'key-001',
65
+ keyExpiry: '2027-01-01T00:00:00Z',
66
+ isActive: 1,
67
+ generatedAt: '2026-01-01T00:00:00Z',
68
+ revokedAt: null,
69
+ revocationReason: null,
70
+ };
71
+ const WEBHOOK_DB_ROW = {
72
+ id: 'wh-001',
73
+ stripeEventId: 'evt_001',
74
+ eventType: 'customer.subscription.created',
75
+ processedAt: '2026-01-01T00:00:00Z',
76
+ success: 1,
77
+ };
78
+ // ---------------------------------------------------------------------------
79
+ // exportCustomerData
80
+ // ---------------------------------------------------------------------------
81
+ describe('GDPRComplianceService.exportCustomerData', () => {
82
+ let db;
83
+ beforeEach(() => {
84
+ db = makeMockDb();
85
+ });
86
+ function setupFullExport() {
87
+ db.prepare
88
+ // exportSubscriptions
89
+ .mockReturnValueOnce(makeStmt({ allResult: [SUB_ROW] }))
90
+ // exportInvoices
91
+ .mockReturnValueOnce(makeStmt({ allResult: [INVOICE_ROW] }))
92
+ // exportLicenseKeys: fetch subscription IDs
93
+ .mockReturnValueOnce(makeStmt({ allResult: [{ id: SUB_ID }] }))
94
+ // exportLicenseKeys: fetch keys
95
+ .mockReturnValueOnce(makeStmt({ allResult: [LICENSE_DB_ROW] }))
96
+ // exportWebhookEvents: fetch stripe customer ID
97
+ .mockReturnValueOnce(makeStmt({ getResult: { stripe_customer_id: STRIPE_CUSTOMER_ID } }))
98
+ // exportWebhookEvents: fetch events
99
+ .mockReturnValueOnce(makeStmt({ allResult: [WEBHOOK_DB_ROW] }));
100
+ }
101
+ it('returns metadata with the correct customer ID, format, and version', () => {
102
+ setupFullExport();
103
+ const service = new GDPRComplianceService({ db });
104
+ const result = service.exportCustomerData(CUSTOMER_ID);
105
+ expect(result.metadata.customerId).toBe(CUSTOMER_ID);
106
+ expect(result.metadata.format).toBe('json');
107
+ expect(result.metadata.version).toBe('1.0');
108
+ expect(result.metadata.exportedAt).toMatch(/^\d{4}-\d{2}-\d{2}T/);
109
+ });
110
+ it('returns subscriptions with all fields mapped', () => {
111
+ setupFullExport();
112
+ const service = new GDPRComplianceService({ db });
113
+ const result = service.exportCustomerData(CUSTOMER_ID);
114
+ expect(result.subscriptions).toHaveLength(1);
115
+ expect(result.subscriptions[0]).toMatchObject({
116
+ id: SUB_ID,
117
+ tier: 'individual',
118
+ status: 'active',
119
+ });
120
+ });
121
+ it('defaults seatCount to 1 when the database row returns null', () => {
122
+ db.prepare
123
+ .mockReturnValueOnce(makeStmt({ allResult: [{ ...SUB_ROW, seatCount: null }] }))
124
+ .mockReturnValueOnce(makeStmt({ allResult: [] }))
125
+ .mockReturnValueOnce(makeStmt({ allResult: [] }))
126
+ .mockReturnValueOnce(makeStmt({ getResult: undefined }));
127
+ const service = new GDPRComplianceService({ db });
128
+ const result = service.exportCustomerData(CUSTOMER_ID);
129
+ expect(result.subscriptions[0]?.seatCount).toBe(1);
130
+ });
131
+ it('returns invoices with all fields mapped', () => {
132
+ setupFullExport();
133
+ const service = new GDPRComplianceService({ db });
134
+ const result = service.exportCustomerData(CUSTOMER_ID);
135
+ expect(result.invoices).toHaveLength(1);
136
+ expect(result.invoices[0]).toMatchObject({ id: 'inv-001', amountCents: 999, currency: 'cad' });
137
+ });
138
+ it('converts isActive integer to boolean in license key export', () => {
139
+ setupFullExport();
140
+ const service = new GDPRComplianceService({ db });
141
+ const result = service.exportCustomerData(CUSTOMER_ID);
142
+ const key = result.licenseKeys[0];
143
+ expect(typeof key.isActive).toBe('boolean');
144
+ expect(key.isActive).toBe(true);
145
+ });
146
+ it('converts success integer to boolean in webhook event export', () => {
147
+ setupFullExport();
148
+ const service = new GDPRComplianceService({ db });
149
+ const result = service.exportCustomerData(CUSTOMER_ID);
150
+ const event = result.webhookEvents[0];
151
+ expect(typeof event.success).toBe('boolean');
152
+ expect(event.success).toBe(true);
153
+ });
154
+ it('returns empty licenseKeys when the customer has no subscriptions', () => {
155
+ db.prepare
156
+ .mockReturnValueOnce(makeStmt({ allResult: [] })) // exportSubscriptions
157
+ .mockReturnValueOnce(makeStmt({ allResult: [] })) // exportInvoices
158
+ .mockReturnValueOnce(makeStmt({ allResult: [] })) // exportLicenseKeys: sub IDs → empty
159
+ .mockReturnValueOnce(makeStmt({ getResult: undefined })); // exportWebhookEvents: no stripe ID
160
+ const service = new GDPRComplianceService({ db });
161
+ const result = service.exportCustomerData(CUSTOMER_ID);
162
+ expect(result.licenseKeys).toEqual([]);
163
+ });
164
+ it('returns empty webhookEvents when there is no Stripe customer ID', () => {
165
+ db.prepare
166
+ .mockReturnValueOnce(makeStmt({ allResult: [SUB_ROW] }))
167
+ .mockReturnValueOnce(makeStmt({ allResult: [INVOICE_ROW] }))
168
+ .mockReturnValueOnce(makeStmt({ allResult: [{ id: SUB_ID }] }))
169
+ .mockReturnValueOnce(makeStmt({ allResult: [LICENSE_DB_ROW] }))
170
+ .mockReturnValueOnce(makeStmt({ getResult: undefined })); // no Stripe customer
171
+ const service = new GDPRComplianceService({ db });
172
+ const result = service.exportCustomerData(CUSTOMER_ID);
173
+ expect(result.webhookEvents).toEqual([]);
174
+ });
175
+ it('returns all four empty arrays for a customer with no data', () => {
176
+ db.prepare
177
+ .mockReturnValueOnce(makeStmt({ allResult: [] })) // subscriptions
178
+ .mockReturnValueOnce(makeStmt({ allResult: [] })) // invoices
179
+ .mockReturnValueOnce(makeStmt({ allResult: [] })) // sub IDs → empty
180
+ .mockReturnValueOnce(makeStmt({ getResult: undefined })); // no Stripe customer
181
+ const service = new GDPRComplianceService({ db });
182
+ const result = service.exportCustomerData(CUSTOMER_ID);
183
+ expect(result.subscriptions).toEqual([]);
184
+ expect(result.invoices).toEqual([]);
185
+ expect(result.licenseKeys).toEqual([]);
186
+ expect(result.webhookEvents).toEqual([]);
187
+ });
188
+ });
189
+ // ---------------------------------------------------------------------------
190
+ // deleteCustomerData
191
+ // ---------------------------------------------------------------------------
192
+ describe('GDPRComplianceService.deleteCustomerData', () => {
193
+ let db;
194
+ beforeEach(() => {
195
+ db = makeMockDb();
196
+ });
197
+ function setupLiveDeletion(stripeId = STRIPE_CUSTOMER_ID) {
198
+ db.prepare
199
+ // Stripe customer ID lookup (before transaction)
200
+ .mockReturnValueOnce(makeStmt({ getResult: { stripe_customer_id: stripeId } }))
201
+ // Sub IDs for license key deletion
202
+ .mockReturnValueOnce(makeStmt({ allResult: [{ id: SUB_ID }] }))
203
+ // DELETE license_keys
204
+ .mockReturnValueOnce(makeStmt({ runResult: { changes: 2, lastInsertRowid: 0 } }))
205
+ // DELETE invoices
206
+ .mockReturnValueOnce(makeStmt({ runResult: { changes: 3, lastInsertRowid: 0 } }))
207
+ // DELETE stripe_webhook_events
208
+ .mockReturnValueOnce(makeStmt({ runResult: { changes: 1, lastInsertRowid: 0 } }))
209
+ // DELETE user_subscriptions
210
+ .mockReturnValueOnce(makeStmt({ runResult: { changes: 1, lastInsertRowid: 0 } }));
211
+ }
212
+ it('returns success=true with correct deletion counts', async () => {
213
+ setupLiveDeletion();
214
+ const service = new GDPRComplianceService({ db });
215
+ const result = await service.deleteCustomerData(CUSTOMER_ID);
216
+ expect(result.success).toBe(true);
217
+ expect(result.customerId).toBe(CUSTOMER_ID);
218
+ expect(result.counts.licenseKeys).toBe(2);
219
+ expect(result.counts.invoices).toBe(3);
220
+ expect(result.counts.webhookEvents).toBe(1);
221
+ expect(result.counts.subscriptions).toBe(1);
222
+ expect(result.errors).toEqual([]);
223
+ });
224
+ it('wraps deletion in a transaction (BEGIN and COMMIT are called)', async () => {
225
+ setupLiveDeletion();
226
+ const service = new GDPRComplianceService({ db });
227
+ await service.deleteCustomerData(CUSTOMER_ID);
228
+ expect(db.exec).toHaveBeenCalledWith('BEGIN TRANSACTION');
229
+ expect(db.exec).toHaveBeenCalledWith('COMMIT');
230
+ });
231
+ it('rolls back and reports an error when a database operation throws', async () => {
232
+ db.prepare
233
+ .mockReturnValueOnce(makeStmt({ getResult: { stripe_customer_id: STRIPE_CUSTOMER_ID } }))
234
+ .mockReturnValueOnce(makeStmt({ allResult: [{ id: SUB_ID }] }))
235
+ .mockReturnValueOnce({
236
+ ...makeStmt({}),
237
+ run: vi.fn().mockImplementation(() => {
238
+ throw new Error('disk I/O error');
239
+ }),
240
+ });
241
+ const service = new GDPRComplianceService({ db });
242
+ const result = await service.deleteCustomerData(CUSTOMER_ID);
243
+ expect(result.success).toBe(false);
244
+ expect(result.errors[0]).toContain('disk I/O error');
245
+ expect(db.exec).toHaveBeenCalledWith('ROLLBACK');
246
+ });
247
+ it('skips license key deletion when the customer has no subscriptions', async () => {
248
+ db.prepare
249
+ .mockReturnValueOnce(makeStmt({ getResult: { stripe_customer_id: STRIPE_CUSTOMER_ID } }))
250
+ .mockReturnValueOnce(makeStmt({ allResult: [] })) // no sub IDs
251
+ .mockReturnValueOnce(makeStmt({ runResult: { changes: 0, lastInsertRowid: 0 } })) // invoices
252
+ .mockReturnValueOnce(makeStmt({ runResult: { changes: 1, lastInsertRowid: 0 } })) // webhook events
253
+ .mockReturnValueOnce(makeStmt({ runResult: { changes: 0, lastInsertRowid: 0 } })); // subscriptions
254
+ const service = new GDPRComplianceService({ db });
255
+ const result = await service.deleteCustomerData(CUSTOMER_ID);
256
+ expect(result.success).toBe(true);
257
+ expect(result.counts.licenseKeys).toBe(0);
258
+ });
259
+ it('skips webhook event deletion when there is no Stripe customer ID', async () => {
260
+ db.prepare
261
+ .mockReturnValueOnce(makeStmt({ getResult: undefined })) // no stripe ID
262
+ .mockReturnValueOnce(makeStmt({ allResult: [] })) // sub IDs
263
+ .mockReturnValueOnce(makeStmt({ runResult: { changes: 0, lastInsertRowid: 0 } })) // invoices
264
+ .mockReturnValueOnce(makeStmt({ runResult: { changes: 0, lastInsertRowid: 0 } })); // subscriptions
265
+ const service = new GDPRComplianceService({ db });
266
+ const result = await service.deleteCustomerData(CUSTOMER_ID);
267
+ expect(result.counts.webhookEvents).toBe(0);
268
+ });
269
+ it('calls Stripe customer deletion when deleteFromStripe is true (default)', async () => {
270
+ setupLiveDeletion();
271
+ const stripeDel = vi.fn().mockResolvedValue({});
272
+ const service = new GDPRComplianceService({
273
+ db,
274
+ stripeClient: makeMockStripe(stripeDel),
275
+ });
276
+ await service.deleteCustomerData(CUSTOMER_ID);
277
+ expect(stripeDel).toHaveBeenCalledWith(STRIPE_CUSTOMER_ID);
278
+ });
279
+ it('sets stripeDeleted=true after a successful Stripe deletion', async () => {
280
+ setupLiveDeletion();
281
+ const service = new GDPRComplianceService({
282
+ db,
283
+ stripeClient: makeMockStripe(),
284
+ });
285
+ const result = await service.deleteCustomerData(CUSTOMER_ID);
286
+ expect(result.stripeDeleted).toBe(true);
287
+ });
288
+ it('does not call Stripe deletion when deleteFromStripe is false', async () => {
289
+ setupLiveDeletion();
290
+ const stripeDel = vi.fn();
291
+ const service = new GDPRComplianceService({
292
+ db,
293
+ stripeClient: makeMockStripe(stripeDel),
294
+ });
295
+ await service.deleteCustomerData(CUSTOMER_ID, { deleteFromStripe: false });
296
+ expect(stripeDel).not.toHaveBeenCalled();
297
+ });
298
+ it('adds a Stripe error to errors without failing the db deletion', async () => {
299
+ setupLiveDeletion();
300
+ const service = new GDPRComplianceService({
301
+ db,
302
+ stripeClient: makeMockStripe(vi.fn().mockRejectedValue(new Error('Stripe unavailable'))),
303
+ });
304
+ const result = await service.deleteCustomerData(CUSTOMER_ID);
305
+ expect(result.errors).toHaveLength(1);
306
+ expect(result.errors[0]).toContain('Stripe unavailable');
307
+ expect(result.stripeDeleted).toBe(false);
308
+ });
309
+ describe('dryRun mode', () => {
310
+ function setupDryRun(stripeId = STRIPE_CUSTOMER_ID) {
311
+ db.prepare
312
+ .mockReturnValueOnce(makeStmt({ getResult: { stripe_customer_id: stripeId } }))
313
+ // sub IDs
314
+ .mockReturnValueOnce(makeStmt({ allResult: [{ id: SUB_ID }] }))
315
+ // COUNT license_keys
316
+ .mockReturnValueOnce(makeStmt({ getResult: { count: 2 } }))
317
+ // COUNT invoices
318
+ .mockReturnValueOnce(makeStmt({ getResult: { count: 3 } }))
319
+ // COUNT stripe_webhook_events
320
+ .mockReturnValueOnce(makeStmt({ getResult: { count: 1 } }))
321
+ // COUNT user_subscriptions
322
+ .mockReturnValueOnce(makeStmt({ getResult: { count: 1 } }));
323
+ }
324
+ it('returns counts without executing any DELETE statements', async () => {
325
+ setupDryRun();
326
+ const service = new GDPRComplianceService({ db });
327
+ const result = await service.deleteCustomerData(CUSTOMER_ID, { dryRun: true });
328
+ expect(result.counts.licenseKeys).toBe(2);
329
+ expect(result.counts.invoices).toBe(3);
330
+ expect(result.counts.webhookEvents).toBe(1);
331
+ expect(result.counts.subscriptions).toBe(1);
332
+ });
333
+ it('does not call BEGIN TRANSACTION or COMMIT in dry run', async () => {
334
+ setupDryRun();
335
+ const service = new GDPRComplianceService({ db });
336
+ await service.deleteCustomerData(CUSTOMER_ID, { dryRun: true });
337
+ expect(db.exec).not.toHaveBeenCalled();
338
+ });
339
+ it('does not call Stripe deletion in dry run', async () => {
340
+ setupDryRun();
341
+ const stripeDel = vi.fn();
342
+ const service = new GDPRComplianceService({
343
+ db,
344
+ stripeClient: makeMockStripe(stripeDel),
345
+ });
346
+ await service.deleteCustomerData(CUSTOMER_ID, { dryRun: true });
347
+ expect(stripeDel).not.toHaveBeenCalled();
348
+ });
349
+ it('returns success=true with no errors in dry run', async () => {
350
+ setupDryRun();
351
+ const service = new GDPRComplianceService({ db });
352
+ const result = await service.deleteCustomerData(CUSTOMER_ID, { dryRun: true });
353
+ expect(result.success).toBe(true);
354
+ expect(result.errors).toEqual([]);
355
+ });
356
+ });
357
+ });
358
+ // ---------------------------------------------------------------------------
359
+ // hasCustomerData
360
+ // ---------------------------------------------------------------------------
361
+ describe('GDPRComplianceService.hasCustomerData', () => {
362
+ it('returns true when a subscription row exists', () => {
363
+ const db = makeMockDb();
364
+ db.prepare.mockReturnValueOnce(makeStmt({ getResult: { id: SUB_ID } }));
365
+ const service = new GDPRComplianceService({ db });
366
+ expect(service.hasCustomerData(CUSTOMER_ID)).toBe(true);
367
+ });
368
+ it('returns false when no subscription row exists', () => {
369
+ const db = makeMockDb();
370
+ db.prepare.mockReturnValueOnce(makeStmt({ getResult: undefined }));
371
+ const service = new GDPRComplianceService({ db });
372
+ expect(service.hasCustomerData(CUSTOMER_ID)).toBe(false);
373
+ });
374
+ });
375
+ // ---------------------------------------------------------------------------
376
+ // getDataSummary
377
+ // ---------------------------------------------------------------------------
378
+ describe('GDPRComplianceService.getDataSummary', () => {
379
+ it('returns zeroed summary for a customer with no subscription', () => {
380
+ const db = makeMockDb();
381
+ db.prepare.mockReturnValueOnce(makeStmt({ getResult: undefined }));
382
+ const service = new GDPRComplianceService({ db });
383
+ const summary = service.getDataSummary(CUSTOMER_ID);
384
+ expect(summary).toEqual({
385
+ hasSubscription: false,
386
+ invoiceCount: 0,
387
+ licenseKeyCount: 0,
388
+ stripeCustomerId: null,
389
+ });
390
+ });
391
+ it('returns correct counts and Stripe customer ID for an existing customer', () => {
392
+ const db = makeMockDb();
393
+ db.prepare
394
+ .mockReturnValueOnce(makeStmt({ getResult: { id: SUB_ID, stripe_customer_id: STRIPE_CUSTOMER_ID } }))
395
+ .mockReturnValueOnce(makeStmt({ getResult: { count: 4 } })) // invoice count
396
+ .mockReturnValueOnce(makeStmt({ getResult: { count: 2 } })); // license key count
397
+ const service = new GDPRComplianceService({ db });
398
+ const summary = service.getDataSummary(CUSTOMER_ID);
399
+ expect(summary.hasSubscription).toBe(true);
400
+ expect(summary.invoiceCount).toBe(4);
401
+ expect(summary.licenseKeyCount).toBe(2);
402
+ expect(summary.stripeCustomerId).toBe(STRIPE_CUSTOMER_ID);
403
+ });
404
+ });
405
+ //# sourceMappingURL=GDPRComplianceService.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GDPRComplianceService.test.js","sourceRoot":"","sources":["../../../src/billing/GDPRComplianceService.test.ts"],"names":[],"mappings":"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"}
@@ -129,6 +129,10 @@ export declare function isValidApiKeyFormat(key: string): boolean;
129
129
  /**
130
130
  * Store an API key securely.
131
131
  *
132
+ * @deprecated Use storeCredentials() from config/token-credentials.ts for the
133
+ * new device-code flow (SMI-4402). This wrapper will be removed in 2 minor
134
+ * releases (Wave 4 / SMI-4403).
135
+ *
132
136
  * Attempts to use the OS keyring first (via @isaacs/keytar).
133
137
  * Falls back to saving in ~/.skillsmith/config.json when keyring is unavailable.
134
138
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,yBAAyB;IACzB,SAAS,CAAC,EAAE;QACV,gDAAgD;QAChD,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAA;IACD,oBAAoB;IACpB,IAAI,CAAC,EAAE;QACL,6BAA6B;QAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,oCAAoC;QACpC,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAuDD;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CAc7C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAoB,GAC7C,IAAI,CAmCN;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAU9C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,SAA+B,GAAG,MAAM,CAQ/E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGxD;AAMD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAW/D;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAgCD;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;CAC9C,CAAC,CA2CD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,yBAAyB;IACzB,SAAS,CAAC,EAAE;QACV,gDAAgD;QAChD,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAA;IACD,oBAAoB;IACpB,IAAI,CAAC,EAAE;QACL,6BAA6B;QAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,oCAAoC;QACpC,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAuDD;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CAc7C;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACjC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAoB,GAC7C,IAAI,CAmCN;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAU9C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,SAA+B,GAAG,MAAM,CAQ/E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGxD;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe/D;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAC,CAgCD;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;CAC9C,CAAC,CA2CD"}
@@ -224,12 +224,18 @@ export function isValidApiKeyFormat(key) {
224
224
  /**
225
225
  * Store an API key securely.
226
226
  *
227
+ * @deprecated Use storeCredentials() from config/token-credentials.ts for the
228
+ * new device-code flow (SMI-4402). This wrapper will be removed in 2 minor
229
+ * releases (Wave 4 / SMI-4403).
230
+ *
227
231
  * Attempts to use the OS keyring first (via @isaacs/keytar).
228
232
  * Falls back to saving in ~/.skillsmith/config.json when keyring is unavailable.
229
233
  *
230
234
  * @param apiKey - The API key to store (must pass isValidApiKeyFormat)
231
235
  */
232
236
  export async function storeApiKey(apiKey) {
237
+ console.warn('[skillsmith] Deprecated: storeApiKey() will be removed in a future version. ' +
238
+ 'Use storeCredentials() from the device-code login flow.');
233
239
  const keytar = await getKeytar();
234
240
  if (keytar) {
235
241
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface TokenCredentials {
2
+ accessToken: string;
3
+ refreshToken: string;
4
+ /** Unix epoch ms when accessToken expires */
5
+ expiresAt: number;
6
+ /** Legacy apiKey, kept during Wave 4 grace window */
7
+ apiKey?: string;
8
+ version: 2;
9
+ }
10
+ export declare function storeCredentials(creds: TokenCredentials): Promise<void>;
11
+ export declare function loadCredentials(): Promise<TokenCredentials | null>;
12
+ export declare function refreshAccessToken(refreshToken: string): Promise<TokenCredentials | null>;
13
+ //# sourceMappingURL=token-credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-credentials.d.ts","sourceRoot":"","sources":["../../../src/config/token-credentials.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAA;IACjB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,CAAC,CAAA;CACX;AAoDD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB7E;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA4BxE;AAED,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA6B/F"}
@@ -0,0 +1,126 @@
1
+ // SMI-4402: v2 credential schema (JWT + refresh) replacing raw sk_live_* paste.
2
+ // Schema v2: { accessToken, refreshToken, expiresAt, apiKey?, version: 2 }
3
+ import { homedir } from 'os';
4
+ import { join } from 'path';
5
+ import { existsSync, readFileSync, writeFileSync, chmodSync } from 'fs';
6
+ import { ensureConfigDir } from './index.js';
7
+ import { PRODUCTION_ANON_KEY } from '../api/utils.js';
8
+ const CONFIG_DIR = '.skillsmith';
9
+ const CONFIG_FILE = 'config.json';
10
+ const KEYTAR_SERVICE = 'skillsmith-cli';
11
+ const KEYTAR_ACCOUNT_REFRESH = 'refresh-token';
12
+ // Supabase project URL — used for the native refresh-token endpoint.
13
+ // Works in dev (SUPABASE_URL env) and prod (hardcoded project ref).
14
+ const SUPABASE_AUTH_URL = (process.env.SUPABASE_URL ?? 'https://vrcnzpmndtroqxxoqkzy.supabase.co') + '/auth/v1';
15
+ function getConfigPath() {
16
+ return join(homedir(), CONFIG_DIR, CONFIG_FILE);
17
+ }
18
+ function readConfigFile() {
19
+ const p = getConfigPath();
20
+ if (!existsSync(p))
21
+ return {};
22
+ try {
23
+ return JSON.parse(readFileSync(p, 'utf-8'));
24
+ }
25
+ catch {
26
+ return {};
27
+ }
28
+ }
29
+ function writeConfigFile(data) {
30
+ ensureConfigDir();
31
+ const p = getConfigPath();
32
+ writeFileSync(p, JSON.stringify(data, null, 2), { encoding: 'utf-8', mode: 0o600 });
33
+ try {
34
+ chmodSync(p, 0o600);
35
+ }
36
+ catch {
37
+ // Ignore on Windows
38
+ }
39
+ }
40
+ async function getKeytar() {
41
+ try {
42
+ // @ts-expect-error — optional dep, no type declarations in core
43
+ const mod = (await import('@isaacs/keytar'));
44
+ return (mod.default ?? mod);
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ export async function storeCredentials(creds) {
51
+ const existing = readConfigFile();
52
+ const keytar = await getKeytar();
53
+ let refreshStoredInKeyring = false;
54
+ if (keytar) {
55
+ try {
56
+ await keytar.setPassword(KEYTAR_SERVICE, KEYTAR_ACCOUNT_REFRESH, creds.refreshToken);
57
+ refreshStoredInKeyring = true;
58
+ }
59
+ catch {
60
+ // Fall through to config file
61
+ }
62
+ }
63
+ writeConfigFile({
64
+ ...existing,
65
+ accessToken: creds.accessToken,
66
+ expiresAt: creds.expiresAt,
67
+ version: 2,
68
+ ...(creds.apiKey !== undefined && { apiKey: creds.apiKey }),
69
+ ...(refreshStoredInKeyring ? {} : { refreshToken: creds.refreshToken }),
70
+ });
71
+ }
72
+ export async function loadCredentials() {
73
+ const config = readConfigFile();
74
+ if (config.version !== 2 || !config.accessToken || !config.expiresAt) {
75
+ return null;
76
+ }
77
+ let refreshToken = config.refreshToken;
78
+ if (!refreshToken) {
79
+ const keytar = await getKeytar();
80
+ if (keytar) {
81
+ try {
82
+ refreshToken =
83
+ (await keytar.getPassword(KEYTAR_SERVICE, KEYTAR_ACCOUNT_REFRESH)) ?? undefined;
84
+ }
85
+ catch {
86
+ // Keyring unavailable
87
+ }
88
+ }
89
+ }
90
+ if (!refreshToken)
91
+ return null;
92
+ return {
93
+ accessToken: config.accessToken,
94
+ refreshToken,
95
+ expiresAt: config.expiresAt,
96
+ apiKey: config.apiKey,
97
+ version: 2,
98
+ };
99
+ }
100
+ export async function refreshAccessToken(refreshToken) {
101
+ try {
102
+ const resp = await fetch(`${SUPABASE_AUTH_URL}/token?grant_type=refresh_token`, {
103
+ method: 'POST',
104
+ headers: {
105
+ 'Content-Type': 'application/json',
106
+ apikey: PRODUCTION_ANON_KEY,
107
+ },
108
+ body: JSON.stringify({ refresh_token: refreshToken }),
109
+ });
110
+ if (!resp.ok)
111
+ return null;
112
+ const data = (await resp.json());
113
+ if (!data.access_token || !data.refresh_token)
114
+ return null;
115
+ return {
116
+ accessToken: data.access_token,
117
+ refreshToken: data.refresh_token,
118
+ expiresAt: Date.now() + (data.expires_in ?? 3600) * 1000,
119
+ version: 2,
120
+ };
121
+ }
122
+ catch {
123
+ return null;
124
+ }
125
+ }
126
+ //# sourceMappingURL=token-credentials.js.map