wyrm-mcp 7.2.0 → 7.2.2

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 (156) hide show
  1. package/LICENSE +26 -667
  2. package/NOTICE +14 -33
  3. package/dist/activation.d.ts.map +1 -1
  4. package/dist/activation.js +1 -44
  5. package/dist/activation.js.map +1 -1
  6. package/dist/agent-daemon.js +4 -281
  7. package/dist/agent-loop.js +7 -332
  8. package/dist/analytics.js +13 -236
  9. package/dist/attribution.js +1 -49
  10. package/dist/audit.js +2 -457
  11. package/dist/auto-capture.js +3 -138
  12. package/dist/auto-orchestrator.js +1 -325
  13. package/dist/autoconfig.js +39 -840
  14. package/dist/buddy-runner.js +1 -109
  15. package/dist/buddy.js +14 -564
  16. package/dist/build-flags.js +1 -17
  17. package/dist/capabilities.js +3 -183
  18. package/dist/capture.js +1 -56
  19. package/dist/causality.js +6 -107
  20. package/dist/cli.js +20 -281
  21. package/dist/cloud/cli.js +5 -541
  22. package/dist/cloud/client.js +1 -221
  23. package/dist/cloud/crypto.js +1 -85
  24. package/dist/cloud/machine-id.js +2 -113
  25. package/dist/cloud/recovery.js +1 -60
  26. package/dist/cloud/sync-engine.js +7 -543
  27. package/dist/cloud-backup.js +5 -579
  28. package/dist/cloud-profile.js +1 -138
  29. package/dist/cloud-sync-entrypoint.js +1 -47
  30. package/dist/cloud-sync.js +2 -309
  31. package/dist/constellation.js +12 -168
  32. package/dist/context-build-budgeted.js +4 -144
  33. package/dist/context-ranking.js +1 -69
  34. package/dist/crypto.js +1 -179
  35. package/dist/daemon-write-endpoint.js +1 -290
  36. package/dist/daemon-writer.js +2 -406
  37. package/dist/database.js +43 -1110
  38. package/dist/deprecations.js +2 -162
  39. package/dist/design.js +13 -141
  40. package/dist/event-replication.js +1 -112
  41. package/dist/events-sse.js +7 -43
  42. package/dist/events.js +6 -238
  43. package/dist/failure-patterns.js +42 -659
  44. package/dist/federation.js +12 -236
  45. package/dist/goals.js +13 -101
  46. package/dist/golden.js +3 -355
  47. package/dist/handlers/agent.js +4 -165
  48. package/dist/handlers/alias-adapters.js +1 -129
  49. package/dist/handlers/aliases.js +1 -171
  50. package/dist/handlers/audit.js +1 -87
  51. package/dist/handlers/boundary.js +1 -221
  52. package/dist/handlers/capture.js +73 -1109
  53. package/dist/handlers/causality.js +7 -114
  54. package/dist/handlers/cloud.js +85 -382
  55. package/dist/handlers/companion.js +28 -459
  56. package/dist/handlers/datalake.js +7 -187
  57. package/dist/handlers/dispatch-context.js +0 -22
  58. package/dist/handlers/entity.js +25 -256
  59. package/dist/handlers/events.js +16 -335
  60. package/dist/handlers/failure.js +13 -340
  61. package/dist/handlers/goals.js +4 -296
  62. package/dist/handlers/intelligence.js +126 -674
  63. package/dist/handlers/invoicing.js +1 -70
  64. package/dist/handlers/mcpclient.js +6 -137
  65. package/dist/handlers/orchestration.js +40 -125
  66. package/dist/handlers/output-schemas.js +1 -24
  67. package/dist/handlers/presence.js +3 -99
  68. package/dist/handlers/project.js +28 -182
  69. package/dist/handlers/prompts.js +6 -157
  70. package/dist/handlers/quest.js +4 -224
  71. package/dist/handlers/recall.js +11 -218
  72. package/dist/handlers/registry.js +1 -167
  73. package/dist/handlers/resources.js +1 -288
  74. package/dist/handlers/review.js +11 -74
  75. package/dist/handlers/run.js +17 -487
  76. package/dist/handlers/search.js +15 -326
  77. package/dist/handlers/session.js +28 -615
  78. package/dist/handlers/share.js +8 -184
  79. package/dist/handlers/shims.js +1 -464
  80. package/dist/handlers/skill.js +67 -449
  81. package/dist/handlers/survivors.js +1 -120
  82. package/dist/handlers/symbols.js +8 -109
  83. package/dist/handlers/syncops.js +4 -302
  84. package/dist/handlers/types.js +1 -27
  85. package/dist/harvest.js +5 -191
  86. package/dist/hours.js +7 -156
  87. package/dist/http-auth.js +3 -321
  88. package/dist/http-fast.js +21 -1137
  89. package/dist/icons.js +1 -47
  90. package/dist/index.js +2 -924
  91. package/dist/indexer.js +4 -145
  92. package/dist/intelligence.js +31 -261
  93. package/dist/internal-dispatch.js +3 -212
  94. package/dist/keyset.js +1 -110
  95. package/dist/knowledge-graph.js +12 -176
  96. package/dist/license.d.ts +11 -0
  97. package/dist/license.d.ts.map +1 -1
  98. package/dist/license.js +2 -414
  99. package/dist/license.js.map +1 -1
  100. package/dist/logger.js +2 -199
  101. package/dist/maintenance.js +2 -148
  102. package/dist/mcp-client.js +6 -262
  103. package/dist/memory-artifacts.js +30 -449
  104. package/dist/migrate-prompt.js +2 -124
  105. package/dist/migrations.js +40 -655
  106. package/dist/performance.js +1 -228
  107. package/dist/presence.js +11 -140
  108. package/dist/priority-embed.js +5 -164
  109. package/dist/providers/embedding-provider.js +1 -196
  110. package/dist/readonly-gate.js +1 -29
  111. package/dist/rehydration.js +9 -157
  112. package/dist/reindex.js +1 -88
  113. package/dist/render-target.js +21 -514
  114. package/dist/render.js +4 -280
  115. package/dist/repl-guard.js +1 -173
  116. package/dist/replication-daemon-entrypoint.js +1 -31
  117. package/dist/replication-daemon.js +2 -262
  118. package/dist/resilience.js +1 -591
  119. package/dist/reverse-bridge.js +5 -360
  120. package/dist/security.js +1 -244
  121. package/dist/session-seen.js +3 -51
  122. package/dist/setup.js +1 -260
  123. package/dist/skill-author.js +5 -168
  124. package/dist/spec-kit.js +1 -191
  125. package/dist/sqlite-busy.js +1 -154
  126. package/dist/statusline.js +11 -315
  127. package/dist/sub-agent.js +13 -262
  128. package/dist/summarizer.js +13 -139
  129. package/dist/symbols.js +7 -283
  130. package/dist/sync.js +5 -359
  131. package/dist/tasks-dispatch.js +1 -84
  132. package/dist/tasks.js +1 -282
  133. package/dist/token-budget.js +1 -143
  134. package/dist/tool-analytics.js +7 -129
  135. package/dist/tool-annotations.js +1 -365
  136. package/dist/tool-manifest-v2.json +1 -1
  137. package/dist/tool-manifest.json +1 -1
  138. package/dist/tool-profiles.js +1 -75
  139. package/dist/trace-harvest.js +6 -244
  140. package/dist/types.js +1 -30
  141. package/dist/ui-dashboard.js +41 -50
  142. package/dist/ulid.js +1 -81
  143. package/dist/validate.js +1 -129
  144. package/dist/vault.js +1 -534
  145. package/dist/vectors.js +3 -184
  146. package/dist/version-check.js +4 -136
  147. package/dist/visibility.js +19 -155
  148. package/dist/wyrm-cli.js +98 -2451
  149. package/dist/wyrm-cli.js.map +1 -1
  150. package/dist/wyrm-guard.js +14 -424
  151. package/dist/wyrm-loop.js +3 -150
  152. package/dist/wyrm-manifest.json +1 -1
  153. package/dist/wyrm-statusline-daemon.js +1 -11
  154. package/dist/wyrm-statusline.js +4 -56
  155. package/dist/wyrm-ui.js +9 -77
  156. package/package.json +4 -2
package/dist/license.js CHANGED
@@ -1,415 +1,3 @@
1
- /**
2
- * Wyrm License System
3
- * ED25519 license key generation, signing, and offline verification
4
- *
5
- * @copyright 2026 Ghost Protocol (Pvt) Ltd.
6
- * @license AGPL-3.0-or-later — dual-licensed; commercial terms: ghosts.lk@proton.me. See LICENSE.
7
- * @module license
8
- * @version 3.2.0
9
- */
10
- import { createPrivateKey, createPublicKey, sign, verify, generateKeyPairSync, randomBytes, } from 'crypto';
11
- import { readFileSync, writeFileSync, mkdirSync, existsSync, chmodSync } from 'fs';
12
- import { homedir } from 'os';
13
- import { join } from 'path';
14
- // ==================== CONSTANTS ====================
15
- /** Base32 alphabet without visually-ambiguous characters (no I, L, O, 1) */
16
- const BASE32_ALPHABET = 'ABCDEFGHJKMNPQRSTUVWXYZ234567890';
17
- /** License key prefix */
18
- const KEY_PREFIX = 'WRM';
19
- /** Bytes of entropy per key segment (4 chars each) */
20
- const KEY_SEGMENT_COUNT = 4;
21
- const KEY_SEGMENT_LENGTH = 4;
22
- /** License file location */
23
- const WYRM_DIR = join(homedir(), '.wyrm');
24
- const LICENSE_PATH = join(WYRM_DIR, 'license.json');
25
- /**
26
- * Feature gates per tier.
27
- * Each tier inherits all features from lower tiers plus its own additions.
28
- */
29
- export const TIER_FEATURES = {
30
- free: ['local_storage', 'all_tools', 'fts_search', 'unlimited_projects'],
31
- pro: ['cloud_backup', 'encryption', 'analytics', 'priority_support'],
32
- team: ['shared_memory', 'workspaces', 'admin_dashboard', 'slack_integration'],
33
- enterprise: ['unlimited_seats', 'sso_saml', 'custom_sla', 'on_premise'],
34
- };
35
- /** Ordered tiers for cumulative feature resolution */
36
- const TIER_ORDER = ['free', 'pro', 'team', 'enterprise'];
37
- /** Default device limits per tier */
38
- export const TIER_DEVICE_LIMITS = {
39
- free: 1,
40
- pro: 1,
41
- team: 25,
42
- enterprise: -1,
43
- };
44
- /**
45
- * Embedded public key for offline verification.
46
- *
47
- * Generated 2026-05-18 alongside the wyrm-billing signing keypair.
48
- * The matching private key lives ONLY in wyrm-billing's
49
- * LICENSE_SIGNING_KEY_PRIVATE_PEM_B64 env var. This public half is
50
- * shipped to every Wyrm client so they can verify license JWTs
51
- * offline without phoning home.
52
- *
53
- * Rotation: regenerate the keypair, replace the private in
54
- * wyrm-billing's env, replace this constant, ship a new wyrm-mcp
55
- * release. Issued licenses signed under the OLD key will reject
56
- * after the new client rolls out — schedule a grace window.
57
- */
58
- const WYRM_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
1
+ import{createPrivateKey as S,createPublicKey as T,sign as w,verify as k,generateKeyPairSync as I,randomBytes as A}from"crypto";import{readFileSync as K,writeFileSync as h,mkdirSync as L,existsSync as m,chmodSync as b}from"fs";import{homedir as B}from"os";import{join as _}from"path";const x="ABCDEFGHJKMNPQRSTUVWXYZ234567890",N="WRM",F=4,R=4,l=_(B(),".wyrm"),c=_(l,"license.json"),n={free:["local_storage","all_tools","fts_search","unlimited_projects"],pro:["cloud_backup","encryption","analytics","priority_support"],team:["shared_memory","workspaces","admin_dashboard","slack_integration"],enterprise:["unlimited_seats","sso_saml","custom_sla","on_premise"]},d=["free","pro","team","enterprise"],M={free:1,pro:1,team:25,enterprise:-1},P=`-----BEGIN PUBLIC KEY-----
59
2
  MCowBQYDK2VwAyEA5WkbNjI9tclD+Mps13IzEXH5FhCBnblwy4+bjYJHpOk=
60
- -----END PUBLIC KEY-----`;
61
- // ==================== SINGLETON STATE ====================
62
- let currentLicense = null;
63
- let currentTier = 'free';
64
- let currentFeatures = new Set(TIER_FEATURES.free);
65
- // ==================== HELPERS ====================
66
- /**
67
- * Resolve the cumulative feature set for a given tier.
68
- * E.g. `team` gets free + pro + team features.
69
- */
70
- export function resolveFeaturesForTier(tier) {
71
- const idx = TIER_ORDER.indexOf(tier);
72
- const features = [];
73
- for (let i = 0; i <= idx; i++) {
74
- features.push(...TIER_FEATURES[TIER_ORDER[i]]);
75
- }
76
- return [...new Set(features)];
77
- }
78
- /**
79
- * Build the canonical string representation of a license for signing/verification.
80
- * Field order is fixed so both signer and verifier produce identical payloads.
81
- */
82
- function buildCanonicalPayload(license) {
83
- return [
84
- license.key,
85
- license.product,
86
- license.tier,
87
- license.issued_to,
88
- license.issued_at,
89
- license.expires_at ?? 'perpetual',
90
- String(license.max_devices),
91
- license.features.sort().join(','),
92
- license.hardware_id ?? '',
93
- ].join('|');
94
- }
95
- /**
96
- * Encode random bytes into a Base32 string of the given length
97
- * using our custom visually-unambiguous alphabet.
98
- */
99
- function randomBase32(length) {
100
- const bytes = randomBytes(length);
101
- let result = '';
102
- for (let i = 0; i < length; i++) {
103
- result += BASE32_ALPHABET[bytes[i] % BASE32_ALPHABET.length];
104
- }
105
- return result;
106
- }
107
- // ==================== KEY GENERATION (SERVER-SIDE) ====================
108
- /**
109
- * Generate an Ed25519 key pair for license signing.
110
- *
111
- * **Server-side only** — the private key must never be shipped in the client.
112
- *
113
- * @returns PEM-encoded public and private keys
114
- */
115
- export function generateKeyPair() {
116
- const { publicKey, privateKey } = generateKeyPairSync('ed25519', {
117
- publicKeyEncoding: { type: 'spki', format: 'pem' },
118
- privateKeyEncoding: { type: 'pkcs8', format: 'pem' },
119
- });
120
- return { publicKey, privateKey };
121
- }
122
- /**
123
- * Generate a license key in `WRM-XXXX-XXXX-XXXX-XXXX` format.
124
- *
125
- * Uses `crypto.randomBytes` mapped onto a Base32 alphabet that excludes
126
- * visually-ambiguous characters (I, L, O, 1).
127
- *
128
- * **Server-side only.**
129
- */
130
- export function generateLicenseKey() {
131
- const segments = [];
132
- for (let i = 0; i < KEY_SEGMENT_COUNT; i++) {
133
- segments.push(randomBase32(KEY_SEGMENT_LENGTH));
134
- }
135
- return `${KEY_PREFIX}-${segments.join('-')}`;
136
- }
137
- /**
138
- * Create a new {@link WyrmLicense} with sane defaults for the given tier.
139
- *
140
- * **Server-side only.**
141
- *
142
- * @param email - Licensee email
143
- * @param tier - Desired tier
144
- * @param options - Optional overrides (expiry, hardware binding, extra features)
145
- */
146
- export function createLicense(email, tier, options = {}) {
147
- const features = resolveFeaturesForTier(tier);
148
- if (options.extraFeatures) {
149
- for (const f of options.extraFeatures) {
150
- if (!features.includes(f))
151
- features.push(f);
152
- }
153
- }
154
- return {
155
- key: generateLicenseKey(),
156
- product: 'wyrm',
157
- tier,
158
- issued_to: email,
159
- issued_at: new Date().toISOString(),
160
- expires_at: options.expiresAt ?? null,
161
- max_devices: options.maxDevices ?? TIER_DEVICE_LIMITS[tier],
162
- features,
163
- hardware_id: options.hardwareId,
164
- };
165
- }
166
- /**
167
- * Sign a {@link WyrmLicense} with an Ed25519 private key.
168
- *
169
- * **Server-side only.**
170
- *
171
- * @param license - The license data to sign
172
- * @param privateKeyPem - PEM-encoded Ed25519 private key
173
- * @returns The license bundled with its base64 signature
174
- */
175
- export function signLicense(license, privateKeyPem) {
176
- const payload = buildCanonicalPayload(license);
177
- const key = createPrivateKey(privateKeyPem);
178
- const sig = sign(null, Buffer.from(payload, 'utf-8'), key);
179
- return {
180
- license,
181
- signature: sig.toString('base64'),
182
- };
183
- }
184
- // ==================== VERIFICATION (CLIENT-SIDE / OFFLINE) ====================
185
- /**
186
- * Verify a {@link SignedLicense} against an Ed25519 public key.
187
- *
188
- * Performs three checks:
189
- * 1. Signature validity (Ed25519)
190
- * 2. Product field matches "wyrm"
191
- * 3. Expiry date (if present)
192
- *
193
- * Works fully offline with zero external dependencies.
194
- *
195
- * @param signed - The signed license bundle
196
- * @param publicKeyPem - Optional PEM override; defaults to the embedded key
197
- */
198
- export function verifyLicense(signed, publicKeyPem) {
199
- const freeFallback = {
200
- valid: false,
201
- tier: 'free',
202
- features: [...TIER_FEATURES.free],
203
- expiresAt: null,
204
- };
205
- try {
206
- const { license, signature } = signed;
207
- // Product check
208
- if (license.product !== 'wyrm') {
209
- return { ...freeFallback, error: 'Invalid product identifier' };
210
- }
211
- // Tier validity
212
- if (!TIER_ORDER.includes(license.tier)) {
213
- return { ...freeFallback, error: `Unknown tier: ${license.tier}` };
214
- }
215
- // Signature verification
216
- const payload = buildCanonicalPayload(license);
217
- const pem = publicKeyPem ?? WYRM_PUBLIC_KEY;
218
- let key;
219
- try {
220
- key = createPublicKey(pem);
221
- }
222
- catch {
223
- return { ...freeFallback, error: 'Invalid public key' };
224
- }
225
- const isValid = verify(null, Buffer.from(payload, 'utf-8'), key, Buffer.from(signature, 'base64'));
226
- if (!isValid) {
227
- return { ...freeFallback, error: 'Invalid signature — license may be tampered' };
228
- }
229
- // Expiry check
230
- if (license.expires_at !== null) {
231
- const expiry = new Date(license.expires_at);
232
- if (isNaN(expiry.getTime())) {
233
- return { ...freeFallback, error: 'Malformed expiry date' };
234
- }
235
- if (expiry.getTime() < Date.now()) {
236
- return {
237
- valid: false,
238
- tier: license.tier,
239
- features: [...TIER_FEATURES.free],
240
- expiresAt: license.expires_at,
241
- error: `License expired on ${license.expires_at}`,
242
- };
243
- }
244
- }
245
- return {
246
- valid: true,
247
- tier: license.tier,
248
- features: [...license.features],
249
- expiresAt: license.expires_at,
250
- };
251
- }
252
- catch (err) {
253
- const message = err instanceof Error ? err.message : String(err);
254
- return { ...freeFallback, error: `Verification failed: ${message}` };
255
- }
256
- }
257
- // ==================== FEATURE GATES ====================
258
- /**
259
- * Check whether a specific feature is available in the current license.
260
- *
261
- * @param feature - Feature flag name (e.g. `"encryption"`, `"sso_saml"`)
262
- */
263
- export function hasFeature(feature) {
264
- return currentFeatures.has(feature);
265
- }
266
- /**
267
- * Get the current active license tier.
268
- * Defaults to `"free"` when no valid license is loaded.
269
- */
270
- export function getTier() {
271
- return currentTier;
272
- }
273
- /**
274
- * Return a summary of the currently-loaded license state.
275
- */
276
- export function getLicenseInfo() {
277
- if (!currentLicense) {
278
- return {
279
- tier: 'free',
280
- features: [...TIER_FEATURES.free],
281
- expiresAt: null,
282
- valid: false,
283
- issuedTo: null,
284
- key: null,
285
- };
286
- }
287
- const validation = verifyLicense(currentLicense);
288
- return {
289
- tier: validation.tier,
290
- features: validation.features,
291
- expiresAt: validation.expiresAt,
292
- valid: validation.valid,
293
- issuedTo: currentLicense.license.issued_to,
294
- key: currentLicense.license.key,
295
- };
296
- }
297
- // ==================== PERSISTENCE ====================
298
- /**
299
- * Load a signed license from `~/.wyrm/license.json`.
300
- *
301
- * @returns The parsed {@link SignedLicense} or `null` if not found / unparseable
302
- */
303
- export function loadLicense() {
304
- try {
305
- if (!existsSync(LICENSE_PATH))
306
- return null;
307
- const raw = readFileSync(LICENSE_PATH, 'utf-8');
308
- const parsed = JSON.parse(raw);
309
- // Basic shape check
310
- if (!parsed.license || !parsed.signature)
311
- return null;
312
- if (!parsed.license.key || !parsed.license.tier)
313
- return null;
314
- return parsed;
315
- }
316
- catch {
317
- return null;
318
- }
319
- }
320
- /**
321
- * Persist a signed license to `~/.wyrm/license.json`.
322
- * File permissions are set to `0o600` (owner read/write only).
323
- *
324
- * @param signed - The signed license to save
325
- */
326
- export function saveLicense(signed) {
327
- if (!existsSync(WYRM_DIR)) {
328
- mkdirSync(WYRM_DIR, { recursive: true });
329
- }
330
- const json = JSON.stringify(signed, null, 2);
331
- writeFileSync(LICENSE_PATH, json, { encoding: 'utf-8', mode: 0o600 });
332
- // Ensure permissions even if file existed previously
333
- chmodSync(LICENSE_PATH, 0o600);
334
- }
335
- /**
336
- * Activate a license from a JSON string (e.g. pasted by the user).
337
- *
338
- * Parses, verifies, and — if valid — persists the license and updates
339
- * the in-memory singleton state.
340
- *
341
- * @param licenseString - JSON-encoded {@link SignedLicense}
342
- * @returns Validation result
343
- */
344
- export function activateLicense(licenseString) {
345
- let signed;
346
- try {
347
- signed = JSON.parse(licenseString);
348
- }
349
- catch {
350
- return {
351
- valid: false,
352
- tier: 'free',
353
- features: [...TIER_FEATURES.free],
354
- expiresAt: null,
355
- error: 'Invalid license format — expected JSON',
356
- };
357
- }
358
- if (!signed.license || !signed.signature) {
359
- return {
360
- valid: false,
361
- tier: 'free',
362
- features: [...TIER_FEATURES.free],
363
- expiresAt: null,
364
- error: 'Malformed license — missing license data or signature',
365
- };
366
- }
367
- const validation = verifyLicense(signed);
368
- if (validation.valid) {
369
- saveLicense(signed);
370
- currentLicense = signed;
371
- currentTier = validation.tier;
372
- currentFeatures = new Set(validation.features);
373
- }
374
- return validation;
375
- }
376
- // ==================== INITIALIZATION ====================
377
- /**
378
- * Initialize the license subsystem on startup.
379
- *
380
- * Attempts to load and verify `~/.wyrm/license.json`.
381
- * Falls back to the free tier on any failure.
382
- *
383
- * Call this once during MCP server boot.
384
- */
385
- export function initializeLicense() {
386
- const signed = loadLicense();
387
- if (!signed) {
388
- currentLicense = null;
389
- currentTier = 'free';
390
- currentFeatures = new Set(TIER_FEATURES.free);
391
- return;
392
- }
393
- const validation = verifyLicense(signed);
394
- if (validation.valid) {
395
- currentLicense = signed;
396
- currentTier = validation.tier;
397
- currentFeatures = new Set(validation.features);
398
- }
399
- else {
400
- // Invalid / expired — degrade gracefully
401
- currentLicense = null;
402
- currentTier = 'free';
403
- currentFeatures = new Set(TIER_FEATURES.free);
404
- }
405
- }
406
- /**
407
- * Reset the singleton state to free tier.
408
- * Useful for testing or license deactivation.
409
- */
410
- export function resetLicense() {
411
- currentLicense = null;
412
- currentTier = 'free';
413
- currentFeatures = new Set(TIER_FEATURES.free);
414
- }
415
- //# sourceMappingURL=license.js.map
3
+ -----END PUBLIC KEY-----`;let s=null,o="free",u=new Set(n.free);function D(e){const r=d.indexOf(e),i=[];for(let t=0;t<=r;t++)i.push(...n[d[t]]);return[...new Set(i)]}function g(e){return[e.key,e.product,e.tier,e.issued_to,e.issued_at,e.expires_at??"perpetual",String(e.max_devices),e.features.sort().join(","),e.hardware_id??""].join("|")}function Y(e){const r=A(e);let i="";for(let t=0;t<e;t++)i+=x[r[t]%x.length];return i}function G(){const{publicKey:e,privateKey:r}=I("ed25519",{publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem"}});return{publicKey:e,privateKey:r}}function C(){const e=[];for(let r=0;r<F;r++)e.push(Y(R));return`${N}-${e.join("-")}`}function $(e,r,i={}){const t=D(r);if(i.extraFeatures)for(const a of i.extraFeatures)t.includes(a)||t.push(a);return{key:C(),product:"wyrm",tier:r,issued_to:e,issued_at:new Date().toISOString(),expires_at:i.expiresAt??null,max_devices:i.maxDevices??M[r],features:t,hardware_id:i.hardwareId}}function X(e,r){const i=g(e),t=S(r),a=w(null,Buffer.from(i,"utf-8"),t);return{license:e,signature:a.toString("base64")}}function f(e,r){const i={valid:!1,tier:"free",features:[...n.free],expiresAt:null};try{const{license:t,signature:a}=e;if(t.product!=="wyrm")return{...i,error:"Invalid product identifier"};if(!d.includes(t.tier))return{...i,error:`Unknown tier: ${t.tier}`};const v=g(t),E=r??P;let p;try{p=T(E)}catch{return{...i,error:"Invalid public key"}}if(!k(null,Buffer.from(v,"utf-8"),p,Buffer.from(a,"base64")))return{...i,error:"Invalid signature \u2014 license may be tampered"};if(t.expires_at!==null){const y=new Date(t.expires_at);if(isNaN(y.getTime()))return{...i,error:"Malformed expiry date"};if(y.getTime()<Date.now())return{valid:!1,tier:t.tier,features:[...n.free],expiresAt:t.expires_at,error:`License expired on ${t.expires_at}`}}return{valid:!0,tier:t.tier,features:[...t.features],expiresAt:t.expires_at}}catch(t){const a=t instanceof Error?t.message:String(t);return{...i,error:`Verification failed: ${a}`}}}function z(){try{const e={license:{key:"WRM-KAT0-KAT0-KAT0-KAT0",product:"wyrm",tier:"enterprise",issued_to:"integrity@selftest",issued_at:"2026-01-01T00:00:00.000Z",expires_at:null,max_devices:-1,features:[...n.enterprise]},signature:Buffer.from("integrity-self-test-not-a-valid-signature").toString("base64")};return f(e).valid?{ok:!1,reason:"verifier_accepts_forged_signature"}:{ok:!0}}catch{return{ok:!0}}}function Q(e){return u.has(e)}function Z(){return o}function q(){if(!s)return{tier:"free",features:[...n.free],expiresAt:null,valid:!1,issuedTo:null,key:null};const e=f(s);return{tier:e.tier,features:e.features,expiresAt:e.expiresAt,valid:e.valid,issuedTo:s.license.issued_to,key:s.license.key}}function j(){try{if(!m(c))return null;const e=K(c,"utf-8"),r=JSON.parse(e);return!r.license||!r.signature||!r.license.key||!r.license.tier?null:r}catch{return null}}function O(e){m(l)||L(l,{recursive:!0});const r=JSON.stringify(e,null,2);h(c,r,{encoding:"utf-8",mode:384}),b(c,384)}function ee(e){let r;try{r=JSON.parse(e)}catch{return{valid:!1,tier:"free",features:[...n.free],expiresAt:null,error:"Invalid license format \u2014 expected JSON"}}if(!r.license||!r.signature)return{valid:!1,tier:"free",features:[...n.free],expiresAt:null,error:"Malformed license \u2014 missing license data or signature"};const i=f(r);return i.valid&&(O(r),s=r,o=i.tier,u=new Set(i.features)),i}function re(){const e=j();if(!e){s=null,o="free",u=new Set(n.free);return}const r=f(e);r.valid?(s=e,o=r.tier,u=new Set(r.features)):(s=null,o="free",u=new Set(n.free))}function te(){s=null,o="free",u=new Set(n.free)}export{M as TIER_DEVICE_LIMITS,n as TIER_FEATURES,ee as activateLicense,$ as createLicense,G as generateKeyPair,C as generateLicenseKey,q as getLicenseInfo,Z as getTier,Q as hasFeature,re as initializeLicense,j as loadLicense,te as resetLicense,D as resolveFeaturesForTier,O as saveLicense,z as selfTestVerifier,X as signLicense,f as verifyLicense};
@@ -1 +1 @@
1
- {"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,IAAI,EACJ,MAAM,EACN,mBAAmB,EACnB,WAAW,GAEZ,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA6C5B,sDAAsD;AAEtD,4EAA4E;AAC5E,MAAM,eAAe,GAAG,kCAAkC,CAAC;AAE3D,yBAAyB;AACzB,MAAM,UAAU,GAAG,KAAK,CAAC;AAEzB,sDAAsD;AACtD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,4BAA4B;AAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAEpD;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAkC;IAC1D,IAAI,EAAE,CAAC,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,CAAC;IACxE,GAAG,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,CAAC;IACpE,IAAI,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,CAAC;IAC7E,UAAU,EAAE,CAAC,iBAAiB,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;CACxE,CAAC;AAEF,sDAAsD;AACtD,MAAM,UAAU,GAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAExE,qCAAqC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAgC;IAC7D,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,EAAE;IACR,UAAU,EAAE,CAAC,CAAC;CACf,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,eAAe,GAAG;;yBAEC,CAAC;AAE1B,4DAA4D;AAE5D,IAAI,cAAc,GAAyB,IAAI,CAAC;AAChD,IAAI,WAAW,GAAgB,MAAM,CAAC;AACtC,IAAI,eAAe,GAAgB,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAE/D,oDAAoD;AAEpD;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAiB;IACtD,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,OAAoB;IACjD,OAAO;QACL,OAAO,CAAC,GAAG;QACX,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,IAAI;QACZ,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,UAAU,IAAI,WAAW;QACjC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QACjC,OAAO,CAAC,WAAW,IAAI,EAAE;KAC1B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,MAAc;IAClC,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,yEAAyE;AAEzE;;;;;;GAMG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAC,SAAS,EAAE;QAC/D,iBAAiB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;QAClD,kBAAkB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;KACrD,CAAC,CAAC;IACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,GAAG,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAa,EACb,IAAiB,EACjB,UAKI,EAAE;IAEN,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,EAAE,kBAAkB,EAAE;QACzB,OAAO,EAAE,MAAM;QACf,IAAI;QACJ,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;QACrC,WAAW,EAAE,OAAO,CAAC,UAAU,IAAI,kBAAkB,CAAC,IAAI,CAAC;QAC3D,QAAQ;QACR,WAAW,EAAE,OAAO,CAAC,UAAU;KAChC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,OAAoB,EAAE,aAAqB;IACrE,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,OAAO;QACL,OAAO;QACP,SAAS,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAqB,EACrB,YAAqB;IAErB,MAAM,YAAY,GAAsB;QACtC,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;QACjC,SAAS,EAAE,IAAI;KAChB,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAEtC,gBAAgB;QAChB,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC/B,OAAO,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;QAClE,CAAC;QAED,gBAAgB;QAChB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,iBAAiB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACrE,CAAC;QAED,yBAAyB;QACzB,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,YAAY,IAAI,eAAe,CAAC;QAC5C,IAAI,GAAc,CAAC;QAEnB,IAAI,CAAC;YACH,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;QAC1D,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CACpB,IAAI,EACJ,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAC7B,GAAG,EACH,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CACjC,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC;QACnF,CAAC;QAED,eAAe;QACf,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5B,OAAO,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;YAC7D,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAClC,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,QAAQ,EAAE,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;oBACjC,SAAS,EAAE,OAAO,CAAC,UAAU;oBAC7B,KAAK,EAAE,sBAAsB,OAAO,CAAC,UAAU,EAAE;iBAClD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;YAC/B,SAAS,EAAE,OAAO,CAAC,UAAU;SAC9B,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,GAAG,YAAY,EAAE,KAAK,EAAE,wBAAwB,OAAO,EAAE,EAAE,CAAC;IACvE,CAAC;AACH,CAAC;AAED,0DAA0D;AAE1D;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO;IACrB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAQ5B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;YACjC,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE,IAAI;SACV,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IACjD,OAAO;QACL,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,SAAS;QAC1C,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG;KAChC,CAAC;AACJ,CAAC;AAED,wDAAwD;AAExD;;;;GAIG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;QAEhD,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAE7D,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,MAAqB;IAC/C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7C,aAAa,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtE,qDAAqD;IACrD,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,aAAqB;IACnD,IAAI,MAAqB,CAAC;IAE1B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAkB,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;YACjC,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,wCAAwC;SAChD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACzC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;YACjC,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,uDAAuD;SAC/D,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,WAAW,CAAC,MAAM,CAAC,CAAC;QACpB,cAAc,GAAG,MAAM,CAAC;QACxB,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;QAC9B,eAAe,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,2DAA2D;AAE3D;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAE7B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,cAAc,GAAG,IAAI,CAAC;QACtB,WAAW,GAAG,MAAM,CAAC;QACrB,eAAe,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,cAAc,GAAG,MAAM,CAAC;QACxB,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;QAC9B,eAAe,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,yCAAyC;QACzC,cAAc,GAAG,IAAI,CAAC;QACtB,WAAW,GAAG,MAAM,CAAC;QACrB,eAAe,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,cAAc,GAAG,IAAI,CAAC;IACtB,WAAW,GAAG,MAAM,CAAC;IACrB,eAAe,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"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"}
package/dist/logger.js CHANGED
@@ -1,199 +1,2 @@
1
- /**
2
- * Wyrm Logger - Structured logging with log levels
3
- *
4
- * @copyright 2026 Ghost Protocol (Pvt) Ltd.
5
- * @license AGPL-3.0-or-later — dual-licensed; commercial terms: ghosts.lk@proton.me. See LICENSE.
6
- * @module logger
7
- * @version 3.0.0
8
- */
9
- import { appendFileSync, existsSync, mkdirSync } from 'fs';
10
- import { homedir } from 'os';
11
- import { join } from 'path';
12
- const LOG_LEVELS = {
13
- debug: 0,
14
- info: 1,
15
- warn: 2,
16
- error: 3,
17
- };
18
- const LOG_COLORS = {
19
- debug: '\x1b[36m', // Cyan
20
- info: '\x1b[32m', // Green
21
- warn: '\x1b[33m', // Yellow
22
- error: '\x1b[31m', // Red
23
- };
24
- const RESET = '\x1b[0m';
25
- const BOLD = '\x1b[1m';
26
- const DIM = '\x1b[2m';
27
- /**
28
- * Wyrm Logger - Structured logging for the memory system
29
- */
30
- export class WyrmLogger {
31
- config;
32
- correlationId;
33
- logDir;
34
- constructor(config) {
35
- this.config = {
36
- level: config?.level ?? 'info',
37
- console: config?.console ?? true,
38
- json: config?.json ?? false,
39
- file: config?.file,
40
- };
41
- this.logDir = join(homedir(), '.wyrm', 'logs');
42
- if (!existsSync(this.logDir)) {
43
- mkdirSync(this.logDir, { recursive: true });
44
- }
45
- }
46
- /**
47
- * Set correlation ID for request tracing
48
- */
49
- setCorrelationId(id) {
50
- this.correlationId = id;
51
- }
52
- /**
53
- * Generate a new correlation ID
54
- */
55
- generateCorrelationId() {
56
- this.correlationId = `wyrm-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
57
- return this.correlationId;
58
- }
59
- /**
60
- * Check if a log level should be logged
61
- */
62
- shouldLog(level) {
63
- return LOG_LEVELS[level] >= LOG_LEVELS[this.config.level];
64
- }
65
- /**
66
- * Format log entry
67
- */
68
- format(entry) {
69
- if (this.config.json) {
70
- return JSON.stringify(entry);
71
- }
72
- const color = LOG_COLORS[entry.level];
73
- const levelStr = entry.level.toUpperCase().padEnd(5);
74
- const time = entry.timestamp.split('T')[1]?.split('.')[0] || entry.timestamp;
75
- let msg = `${DIM}${time}${RESET} ${color}${BOLD}${levelStr}${RESET} ${entry.message}`;
76
- if (entry.context && Object.keys(entry.context).length > 0) {
77
- msg += ` ${DIM}${JSON.stringify(entry.context)}${RESET}`;
78
- }
79
- if (entry.correlationId) {
80
- msg += ` ${DIM}[${entry.correlationId}]${RESET}`;
81
- }
82
- return msg;
83
- }
84
- /**
85
- * Write log entry
86
- */
87
- log(level, message, context) {
88
- if (!this.shouldLog(level))
89
- return;
90
- const entry = {
91
- timestamp: new Date().toISOString(),
92
- level,
93
- message,
94
- context,
95
- correlationId: this.correlationId,
96
- };
97
- const formatted = this.format(entry);
98
- if (this.config.console) {
99
- // EVERY level sinks to stderr: stdout is the MCP wire when running as
100
- // the stdio server, and a single console.log on the CallTool path
101
- // corrupts JSON-RPC framing (F1 adversarial review: warn/info/debug
102
- // used to route through console.log). Pinned by
103
- // tests/hygiene-security-floor.test.ts + tests/edge-cases.test.ts.
104
- console.error(formatted);
105
- }
106
- if (this.config.file) {
107
- try {
108
- const logPath = join(this.logDir, this.config.file);
109
- appendFileSync(logPath, (this.config.json ? formatted : JSON.stringify(entry)) + '\n');
110
- }
111
- catch {
112
- // Silent fail for file writes
113
- }
114
- }
115
- }
116
- // Log level methods
117
- debug(message, context) {
118
- this.log('debug', message, context);
119
- }
120
- info(message, context) {
121
- this.log('info', message, context);
122
- }
123
- warn(message, context) {
124
- this.log('warn', message, context);
125
- }
126
- error(message, context) {
127
- this.log('error', message, context);
128
- }
129
- /**
130
- * Log with timing measurement
131
- */
132
- time(label, fn) {
133
- const start = performance.now();
134
- try {
135
- const result = fn();
136
- const duration = performance.now() - start;
137
- this.debug(`${label} completed`, { duration: `${duration.toFixed(2)}ms` });
138
- return result;
139
- }
140
- catch (error) {
141
- const duration = performance.now() - start;
142
- this.error(`${label} failed`, { duration: `${duration.toFixed(2)}ms`, error: String(error) });
143
- throw error;
144
- }
145
- }
146
- /**
147
- * Async timing
148
- */
149
- async timeAsync(label, fn) {
150
- const start = performance.now();
151
- try {
152
- const result = await fn();
153
- const duration = performance.now() - start;
154
- this.debug(`${label} completed`, { duration: `${duration.toFixed(2)}ms` });
155
- return result;
156
- }
157
- catch (error) {
158
- const duration = performance.now() - start;
159
- this.error(`${label} failed`, { duration: `${duration.toFixed(2)}ms`, error: String(error) });
160
- throw error;
161
- }
162
- }
163
- /**
164
- * Create a child logger with additional context
165
- */
166
- child(context) {
167
- const child = new WyrmLogger(this.config);
168
- child.correlationId = this.correlationId;
169
- const originalLog = child.log.bind(child);
170
- child.log = (level, message, ctx) => {
171
- originalLog(level, message, { ...context, ...ctx });
172
- };
173
- return child;
174
- }
175
- }
176
- // Default logger instance
177
- let defaultLogger = null;
178
- export function getLogger() {
179
- if (!defaultLogger) {
180
- defaultLogger = new WyrmLogger({
181
- level: process.env.WYRM_LOG_LEVEL || 'info',
182
- console: process.env.WYRM_LOG_CONSOLE !== 'false',
183
- json: process.env.WYRM_LOG_JSON === 'true',
184
- file: 'wyrm.log',
185
- });
186
- }
187
- return defaultLogger;
188
- }
189
- export function createLogger(config) {
190
- return new WyrmLogger(config);
191
- }
192
- // Convenience exports
193
- export const logger = {
194
- debug: (msg, ctx) => getLogger().debug(msg, ctx),
195
- info: (msg, ctx) => getLogger().info(msg, ctx),
196
- warn: (msg, ctx) => getLogger().warn(msg, ctx),
197
- error: (msg, ctx) => getLogger().error(msg, ctx),
198
- };
199
- //# sourceMappingURL=logger.js.map
1
+ import{appendFileSync as h,existsSync as u,mkdirSync as p}from"fs";import{homedir as $}from"os";import{join as f}from"path";const m={debug:0,info:1,warn:2,error:3},w={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m"},s="\x1B[0m",x="\x1B[1m",g="\x1B[2m";class l{config;correlationId;logDir;constructor(o){this.config={level:o?.level??"info",console:o?.console??!0,json:o?.json??!1,file:o?.file},this.logDir=f($(),".wyrm","logs"),u(this.logDir)||p(this.logDir,{recursive:!0})}setCorrelationId(o){this.correlationId=o}generateCorrelationId(){return this.correlationId=`wyrm-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,this.correlationId}shouldLog(o){return m[o]>=m[this.config.level]}format(o){if(this.config.json)return JSON.stringify(o);const r=w[o.level],n=o.level.toUpperCase().padEnd(5),t=o.timestamp.split("T")[1]?.split(".")[0]||o.timestamp;let e=`${g}${t}${s} ${r}${x}${n}${s} ${o.message}`;return o.context&&Object.keys(o.context).length>0&&(e+=` ${g}${JSON.stringify(o.context)}${s}`),o.correlationId&&(e+=` ${g}[${o.correlationId}]${s}`),e}log(o,r,n){if(!this.shouldLog(o))return;const t={timestamp:new Date().toISOString(),level:o,message:r,context:n,correlationId:this.correlationId},e=this.format(t);if(this.config.console&&console.error(e),this.config.file)try{const a=f(this.logDir,this.config.file);h(a,(this.config.json?e:JSON.stringify(t))+`
2
+ `)}catch{}}debug(o,r){this.log("debug",o,r)}info(o,r){this.log("info",o,r)}warn(o,r){this.log("warn",o,r)}error(o,r){this.log("error",o,r)}time(o,r){const n=performance.now();try{const t=r(),e=performance.now()-n;return this.debug(`${o} completed`,{duration:`${e.toFixed(2)}ms`}),t}catch(t){const e=performance.now()-n;throw this.error(`${o} failed`,{duration:`${e.toFixed(2)}ms`,error:String(t)}),t}}async timeAsync(o,r){const n=performance.now();try{const t=await r(),e=performance.now()-n;return this.debug(`${o} completed`,{duration:`${e.toFixed(2)}ms`}),t}catch(t){const e=performance.now()-n;throw this.error(`${o} failed`,{duration:`${e.toFixed(2)}ms`,error:String(t)}),t}}child(o){const r=new l(this.config);r.correlationId=this.correlationId;const n=r.log.bind(r);return r.log=(t,e,a)=>{n(t,e,{...o,...a})},r}}let d=null;function c(){return d||(d=new l({level:process.env.WYRM_LOG_LEVEL||"info",console:process.env.WYRM_LOG_CONSOLE!=="false",json:process.env.WYRM_LOG_JSON==="true",file:"wyrm.log"})),d}function b(i){return new l(i)}const I={debug:(i,o)=>c().debug(i,o),info:(i,o)=>c().info(i,o),warn:(i,o)=>c().warn(i,o),error:(i,o)=>c().error(i,o)};export{l as WyrmLogger,b as createLogger,c as getLogger,I as logger};