@1mcp/agent 0.25.5 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/build/auth/sdkOAuthClientProvider.d.ts.map +1 -1
  2. package/build/auth/sdkOAuthClientProvider.js +3 -5
  3. package/build/auth/sdkOAuthClientProvider.js.map +1 -1
  4. package/build/auth/sessionTypes.d.ts +10 -0
  5. package/build/auth/sessionTypes.d.ts.map +1 -1
  6. package/build/auth/storage/fileStorageService.d.ts +25 -1
  7. package/build/auth/storage/fileStorageService.d.ts.map +1 -1
  8. package/build/auth/storage/fileStorageService.js +155 -27
  9. package/build/auth/storage/fileStorageService.js.map +1 -1
  10. package/build/auth/storage/oauthStorageService.js +1 -1
  11. package/build/auth/storage/oauthStorageService.js.map +1 -1
  12. package/build/commands/mcp/index.d.ts.map +1 -1
  13. package/build/commands/mcp/index.js +3 -2
  14. package/build/commands/mcp/index.js.map +1 -1
  15. package/build/commands/registry/index.d.ts +6 -0
  16. package/build/commands/registry/index.d.ts.map +1 -0
  17. package/build/commands/registry/index.js +67 -0
  18. package/build/commands/registry/index.js.map +1 -0
  19. package/build/commands/registry/options.d.ts +47 -0
  20. package/build/commands/registry/options.d.ts.map +1 -0
  21. package/build/commands/registry/options.js +39 -0
  22. package/build/commands/registry/options.js.map +1 -0
  23. package/build/commands/registry/search.d.ts +21 -0
  24. package/build/commands/registry/search.d.ts.map +1 -0
  25. package/build/commands/registry/search.js +186 -0
  26. package/build/commands/registry/search.js.map +1 -0
  27. package/build/commands/registry/show.d.ts +25 -0
  28. package/build/commands/registry/show.d.ts.map +1 -0
  29. package/build/commands/registry/show.js +87 -0
  30. package/build/commands/registry/show.js.map +1 -0
  31. package/build/commands/registry/status.d.ts +16 -0
  32. package/build/commands/registry/status.d.ts.map +1 -0
  33. package/build/commands/registry/status.js +86 -0
  34. package/build/commands/registry/status.js.map +1 -0
  35. package/build/commands/registry/versions.d.ts +21 -0
  36. package/build/commands/registry/versions.d.ts.map +1 -0
  37. package/build/commands/registry/versions.js +76 -0
  38. package/build/commands/registry/versions.js.map +1 -0
  39. package/build/constants/auth.d.ts +27 -0
  40. package/build/constants/auth.d.ts.map +1 -1
  41. package/build/constants/auth.js +31 -0
  42. package/build/constants/auth.js.map +1 -1
  43. package/build/constants/mcp.d.ts +1 -1
  44. package/build/constants/mcp.js +1 -1
  45. package/build/core/tools/handlers/registryHandler.d.ts +11 -0
  46. package/build/core/tools/handlers/registryHandler.d.ts.map +1 -0
  47. package/build/core/tools/handlers/registryHandler.js +49 -0
  48. package/build/core/tools/handlers/registryHandler.js.map +1 -0
  49. package/build/core/tools/handlers/searchHandler.d.ts +19 -0
  50. package/build/core/tools/handlers/searchHandler.d.ts.map +1 -0
  51. package/build/core/tools/handlers/searchHandler.js +104 -0
  52. package/build/core/tools/handlers/searchHandler.js.map +1 -0
  53. package/build/core/tools/handlers/showHandler.d.ts +10 -0
  54. package/build/core/tools/handlers/showHandler.d.ts.map +1 -0
  55. package/build/core/tools/handlers/showHandler.js +44 -0
  56. package/build/core/tools/handlers/showHandler.js.map +1 -0
  57. package/build/core/tools/handlers/versionsHandler.d.ts +10 -0
  58. package/build/core/tools/handlers/versionsHandler.d.ts.map +1 -0
  59. package/build/core/tools/handlers/versionsHandler.js +44 -0
  60. package/build/core/tools/handlers/versionsHandler.js.map +1 -0
  61. package/build/domains/preset/manager/presetManager.d.ts.map +1 -1
  62. package/build/domains/preset/manager/presetManager.js +2 -2
  63. package/build/domains/preset/manager/presetManager.js.map +1 -1
  64. package/build/domains/registry/cacheManager.d.ts +61 -0
  65. package/build/domains/registry/cacheManager.d.ts.map +1 -0
  66. package/build/domains/registry/cacheManager.js +158 -0
  67. package/build/domains/registry/cacheManager.js.map +1 -0
  68. package/build/domains/registry/formatters/commonFormatters.d.ts +34 -0
  69. package/build/domains/registry/formatters/commonFormatters.d.ts.map +1 -0
  70. package/build/domains/registry/formatters/commonFormatters.js +154 -0
  71. package/build/domains/registry/formatters/commonFormatters.js.map +1 -0
  72. package/build/domains/registry/formatters/serverDetailFormatter.d.ts +6 -0
  73. package/build/domains/registry/formatters/serverDetailFormatter.d.ts.map +1 -0
  74. package/build/domains/registry/formatters/serverDetailFormatter.js +310 -0
  75. package/build/domains/registry/formatters/serverDetailFormatter.js.map +1 -0
  76. package/build/domains/registry/formatters/versionsFormatter.d.ts +6 -0
  77. package/build/domains/registry/formatters/versionsFormatter.d.ts.map +1 -0
  78. package/build/domains/registry/formatters/versionsFormatter.js +84 -0
  79. package/build/domains/registry/formatters/versionsFormatter.js.map +1 -0
  80. package/build/domains/registry/mcpRegistryClient.d.ts +101 -0
  81. package/build/domains/registry/mcpRegistryClient.d.ts.map +1 -0
  82. package/build/domains/registry/mcpRegistryClient.js +464 -0
  83. package/build/domains/registry/mcpRegistryClient.js.map +1 -0
  84. package/build/domains/registry/mcpToolSchemas.d.ts +63 -0
  85. package/build/domains/registry/mcpToolSchemas.d.ts.map +1 -0
  86. package/build/domains/registry/mcpToolSchemas.js +52 -0
  87. package/build/domains/registry/mcpToolSchemas.js.map +1 -0
  88. package/build/domains/registry/searchFiltering.d.ts +48 -0
  89. package/build/domains/registry/searchFiltering.d.ts.map +1 -0
  90. package/build/domains/registry/searchFiltering.js +201 -0
  91. package/build/domains/registry/searchFiltering.js.map +1 -0
  92. package/build/domains/registry/types.d.ts +204 -0
  93. package/build/domains/registry/types.d.ts.map +1 -0
  94. package/build/domains/registry/types.js +5 -0
  95. package/build/domains/registry/types.js.map +1 -0
  96. package/build/index.js +2 -0
  97. package/build/index.js.map +1 -1
  98. package/build/transport/http/restorableStreamableTransport.d.ts +52 -0
  99. package/build/transport/http/restorableStreamableTransport.d.ts.map +1 -0
  100. package/build/transport/http/restorableStreamableTransport.js +68 -0
  101. package/build/transport/http/restorableStreamableTransport.js.map +1 -0
  102. package/build/transport/http/routes/streamableHttpRoutes.d.ts +2 -1
  103. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  104. package/build/transport/http/routes/streamableHttpRoutes.js +113 -30
  105. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  106. package/build/transport/http/server.d.ts +2 -0
  107. package/build/transport/http/server.d.ts.map +1 -1
  108. package/build/transport/http/server.js +10 -2
  109. package/build/transport/http/server.js.map +1 -1
  110. package/build/transport/http/storage/streamableSessionRepository.d.ts +57 -0
  111. package/build/transport/http/storage/streamableSessionRepository.d.ts.map +1 -0
  112. package/build/transport/http/storage/streamableSessionRepository.js +156 -0
  113. package/build/transport/http/storage/streamableSessionRepository.js.map +1 -0
  114. package/package.json +2 -1
@@ -0,0 +1,61 @@
1
+ import { CacheOptions } from './types.js';
2
+ /**
3
+ * In-memory cache manager with TTL support for MCP Registry responses
4
+ */
5
+ export declare class CacheManager {
6
+ private cache;
7
+ private cleanupTimer?;
8
+ private options;
9
+ constructor(options?: Partial<CacheOptions>);
10
+ /**
11
+ * Get a cached value by key
12
+ */
13
+ get<T>(key: string): Promise<T | null>;
14
+ /**
15
+ * Set a value in the cache with optional TTL
16
+ */
17
+ set<T>(key: string, value: T, ttlSeconds?: number): Promise<void>;
18
+ /**
19
+ * Invalidate cache entries matching a pattern
20
+ */
21
+ invalidate(pattern: string): Promise<void>;
22
+ /**
23
+ * Clear all cache entries
24
+ */
25
+ clear(): Promise<void>;
26
+ /**
27
+ * Get cache statistics
28
+ */
29
+ getStats(): {
30
+ totalEntries: number;
31
+ validEntries: number;
32
+ expiredEntries: number;
33
+ maxSize: number;
34
+ hitRatio: number;
35
+ };
36
+ /**
37
+ * Generate a cache key for registry requests
38
+ */
39
+ generateKey(endpoint: string, params?: Record<string, any>): string;
40
+ /**
41
+ * Start the cleanup timer
42
+ */
43
+ private startCleanupTimer;
44
+ /**
45
+ * Stop the cleanup timer
46
+ */
47
+ destroy(): void;
48
+ /**
49
+ * Clean up expired entries
50
+ */
51
+ private cleanup;
52
+ /**
53
+ * Evict oldest entries when cache is full
54
+ */
55
+ private evictOldest;
56
+ /**
57
+ * Calculate hit ratio (placeholder for future hit/miss tracking)
58
+ */
59
+ private getHitRatio;
60
+ }
61
+ //# sourceMappingURL=cacheManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheManager.d.ts","sourceRoot":"","sources":["../../../src/domains/registry/cacheManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA2C;IACxD,OAAO,CAAC,YAAY,CAAC,CAAiC;IACtD,OAAO,CAAC,OAAO,CAAe;gBAElB,OAAO,GAAE,OAAO,CAAC,YAAY,CAAM;IAU/C;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAc5C;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBvE;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAchD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;IACH,QAAQ;;;;;;;IAsBR;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,MAAM;IASvE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf;;OAEG;IACH,OAAO,CAAC,OAAO;IAiBf;;OAEG;IACH,OAAO,CAAC,WAAW;IAanB;;OAEG;IACH,OAAO,CAAC,WAAW;CAIpB"}
@@ -0,0 +1,158 @@
1
+ import logger from '../../logger/logger.js';
2
+ /**
3
+ * In-memory cache manager with TTL support for MCP Registry responses
4
+ */
5
+ export class CacheManager {
6
+ cache = new Map();
7
+ cleanupTimer;
8
+ options;
9
+ constructor(options = {}) {
10
+ this.options = {
11
+ defaultTtl: options.defaultTtl || 300, // 5 minutes default
12
+ maxSize: options.maxSize || 1000,
13
+ cleanupInterval: options.cleanupInterval || 60000, // 1 minute
14
+ };
15
+ this.startCleanupTimer();
16
+ }
17
+ /**
18
+ * Get a cached value by key
19
+ */
20
+ async get(key) {
21
+ const entry = this.cache.get(key);
22
+ if (!entry) {
23
+ return null;
24
+ }
25
+ if (Date.now() > entry.expiresAt) {
26
+ this.cache.delete(key);
27
+ return null;
28
+ }
29
+ return entry.value;
30
+ }
31
+ /**
32
+ * Set a value in the cache with optional TTL
33
+ */
34
+ async set(key, value, ttlSeconds) {
35
+ const ttl = ttlSeconds || this.options.defaultTtl;
36
+ const now = Date.now();
37
+ const entry = {
38
+ value,
39
+ expiresAt: now + ttl * 1000,
40
+ createdAt: now,
41
+ };
42
+ // Remove oldest entries if cache is full
43
+ if (this.cache.size >= this.options.maxSize) {
44
+ this.evictOldest();
45
+ }
46
+ this.cache.set(key, entry);
47
+ logger.debug(`Cache set: ${key} (TTL: ${ttl}s)`);
48
+ }
49
+ /**
50
+ * Invalidate cache entries matching a pattern
51
+ */
52
+ async invalidate(pattern) {
53
+ const regex = new RegExp(pattern);
54
+ const keysToDelete = [];
55
+ for (const key of this.cache.keys()) {
56
+ if (regex.test(key)) {
57
+ keysToDelete.push(key);
58
+ }
59
+ }
60
+ keysToDelete.forEach((key) => this.cache.delete(key));
61
+ logger.debug(`Cache invalidated: ${keysToDelete.length} entries matching "${pattern}"`);
62
+ }
63
+ /**
64
+ * Clear all cache entries
65
+ */
66
+ async clear() {
67
+ const size = this.cache.size;
68
+ this.cache.clear();
69
+ logger.debug(`Cache cleared: ${size} entries removed`);
70
+ }
71
+ /**
72
+ * Get cache statistics
73
+ */
74
+ getStats() {
75
+ const now = Date.now();
76
+ let expiredCount = 0;
77
+ let validCount = 0;
78
+ for (const entry of this.cache.values()) {
79
+ if (now > entry.expiresAt) {
80
+ expiredCount++;
81
+ }
82
+ else {
83
+ validCount++;
84
+ }
85
+ }
86
+ return {
87
+ totalEntries: this.cache.size,
88
+ validEntries: validCount,
89
+ expiredEntries: expiredCount,
90
+ maxSize: this.options.maxSize,
91
+ hitRatio: this.getHitRatio(),
92
+ };
93
+ }
94
+ /**
95
+ * Generate a cache key for registry requests
96
+ */
97
+ generateKey(endpoint, params = {}) {
98
+ const sortedParams = Object.keys(params)
99
+ .sort()
100
+ .map((key) => `${key}=${params[key]}`)
101
+ .join('&');
102
+ return `${endpoint}${sortedParams ? `?${sortedParams}` : ''}`;
103
+ }
104
+ /**
105
+ * Start the cleanup timer
106
+ */
107
+ startCleanupTimer() {
108
+ this.cleanupTimer = setInterval(() => {
109
+ this.cleanup();
110
+ }, this.options.cleanupInterval);
111
+ }
112
+ /**
113
+ * Stop the cleanup timer
114
+ */
115
+ destroy() {
116
+ if (this.cleanupTimer) {
117
+ clearInterval(this.cleanupTimer);
118
+ this.cleanupTimer = undefined;
119
+ }
120
+ }
121
+ /**
122
+ * Clean up expired entries
123
+ */
124
+ cleanup() {
125
+ const now = Date.now();
126
+ const keysToDelete = [];
127
+ for (const [key, entry] of this.cache.entries()) {
128
+ if (now > entry.expiresAt) {
129
+ keysToDelete.push(key);
130
+ }
131
+ }
132
+ keysToDelete.forEach((key) => this.cache.delete(key));
133
+ if (keysToDelete.length > 0) {
134
+ logger.debug(`Cache cleanup: ${keysToDelete.length} expired entries removed`);
135
+ }
136
+ }
137
+ /**
138
+ * Evict oldest entries when cache is full
139
+ */
140
+ evictOldest() {
141
+ const entries = Array.from(this.cache.entries());
142
+ entries.sort((a, b) => a[1].createdAt - b[1].createdAt);
143
+ const toRemove = Math.ceil(this.options.maxSize * 0.1); // Remove 10% of entries
144
+ for (let i = 0; i < toRemove && entries.length > 0; i++) {
145
+ const [key] = entries[i];
146
+ this.cache.delete(key);
147
+ }
148
+ logger.debug(`Cache eviction: ${toRemove} oldest entries removed`);
149
+ }
150
+ /**
151
+ * Calculate hit ratio (placeholder for future hit/miss tracking)
152
+ */
153
+ getHitRatio() {
154
+ // TODO: Implement hit/miss tracking for more accurate statistics
155
+ return 0;
156
+ }
157
+ }
158
+ //# sourceMappingURL=cacheManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheManager.js","sourceRoot":"","sources":["../../../src/domains/registry/cacheManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { ServerPackage, Transport } from '../../../domains/registry/types.js';
2
+ /**
3
+ * Truncate string to specified length with ellipsis
4
+ */
5
+ export declare function truncateString(str: string | null | undefined, maxLength: number): string;
6
+ /**
7
+ * Format transport value to handle objects and undefined values
8
+ */
9
+ export declare function formatTransport(transport?: Transport | string): string;
10
+ /**
11
+ * Format status with colors
12
+ */
13
+ export declare function formatStatus(status: string | null | undefined): string;
14
+ /**
15
+ * Format registry types without colors (for table display)
16
+ */
17
+ export declare function formatRegistryTypesPlain(packages?: ServerPackage[] | null | undefined): string;
18
+ /**
19
+ * Format transport types without colors (for table display)
20
+ */
21
+ export declare function formatTransportTypesPlain(packages?: ServerPackage[] | null | undefined): string;
22
+ /**
23
+ * Format ISO date string to readable format
24
+ */
25
+ export declare function formatDate(isoString: string): string;
26
+ /**
27
+ * Format date as relative time (e.g., "2 days ago")
28
+ */
29
+ export declare function formatRelativeDate(isoString: string): string;
30
+ /**
31
+ * Format ISO timestamp to readable format with time
32
+ */
33
+ export declare function formatTimestamp(isoString: string): string;
34
+ //# sourceMappingURL=commonFormatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commonFormatters.d.ts","sourceRoot":"","sources":["../../../../src/domains/registry/formatters/commonFormatters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAI1E;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAIxF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAQtE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CActE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,GAAE,aAAa,EAAE,GAAG,IAAI,GAAG,SAAc,GAAG,MAAM,CAYlG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,GAAE,aAAa,EAAE,GAAG,IAAI,GAAG,SAAc,GAAG,MAAM,CASnG;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkBpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CA0B5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAmBzD"}
@@ -0,0 +1,154 @@
1
+ import chalk from 'chalk';
2
+ /**
3
+ * Truncate string to specified length with ellipsis
4
+ */
5
+ export function truncateString(str, maxLength) {
6
+ if (!str || typeof str !== 'string')
7
+ return '';
8
+ if (str.length <= maxLength)
9
+ return str;
10
+ return str.substring(0, maxLength - 3) + '...';
11
+ }
12
+ /**
13
+ * Format transport value to handle objects and undefined values
14
+ */
15
+ export function formatTransport(transport) {
16
+ if (!transport)
17
+ return '';
18
+ if (typeof transport === 'string')
19
+ return transport;
20
+ if (typeof transport === 'object') {
21
+ // Handle case where transport is an object
22
+ return transport.type || String(transport);
23
+ }
24
+ return String(transport);
25
+ }
26
+ /**
27
+ * Format status with colors
28
+ */
29
+ export function formatStatus(status) {
30
+ if (status === '')
31
+ return chalk.gray('● ');
32
+ if (!status)
33
+ return chalk.gray('● UNKNOWN');
34
+ switch (status) {
35
+ case 'active':
36
+ return chalk.green('● ACTIVE');
37
+ case 'deprecated':
38
+ return chalk.yellow('● DEPRECATED');
39
+ case 'archived':
40
+ return chalk.red('● ARCHIVED');
41
+ default:
42
+ return chalk.gray(`● ${status.toUpperCase()}`);
43
+ }
44
+ }
45
+ /**
46
+ * Format registry types without colors (for table display)
47
+ */
48
+ export function formatRegistryTypesPlain(packages = []) {
49
+ if (!packages)
50
+ return 'unknown';
51
+ const types = packages
52
+ .map((p) => p.registryType)
53
+ .filter((type) => type && type !== 'unknown')
54
+ .filter(Boolean);
55
+ const uniqueTypes = [...new Set(types)];
56
+ if (uniqueTypes.length === 0)
57
+ return 'unknown';
58
+ return uniqueTypes.join(', ');
59
+ }
60
+ /**
61
+ * Format transport types without colors (for table display)
62
+ */
63
+ export function formatTransportTypesPlain(packages = []) {
64
+ if (!packages)
65
+ return 'stdio';
66
+ const transports = packages.map((p) => formatTransport(p.transport)).filter(Boolean);
67
+ const uniqueTransports = [...new Set(transports)];
68
+ if (uniqueTransports.length === 0)
69
+ return 'stdio';
70
+ return uniqueTransports.join(', ');
71
+ }
72
+ /**
73
+ * Format ISO date string to readable format
74
+ */
75
+ export function formatDate(isoString) {
76
+ if (!isoString || typeof isoString !== 'string') {
77
+ return 'Unknown';
78
+ }
79
+ try {
80
+ const date = new Date(isoString);
81
+ // Check if date is valid
82
+ if (isNaN(date.getTime())) {
83
+ return 'Invalid Date';
84
+ }
85
+ return date.toLocaleDateString('en-US', {
86
+ year: 'numeric',
87
+ month: 'short',
88
+ day: 'numeric',
89
+ });
90
+ }
91
+ catch {
92
+ return 'Invalid Date';
93
+ }
94
+ }
95
+ /**
96
+ * Format date as relative time (e.g., "2 days ago")
97
+ */
98
+ export function formatRelativeDate(isoString) {
99
+ if (!isoString)
100
+ return 'Unknown';
101
+ try {
102
+ const date = new Date(isoString);
103
+ if (isNaN(date.getTime()))
104
+ return 'Invalid Date';
105
+ const now = new Date();
106
+ const diffMs = now.getTime() - date.getTime();
107
+ const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
108
+ const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
109
+ const diffMinutes = Math.floor(diffMs / (1000 * 60));
110
+ if (diffDays > 7) {
111
+ return formatDate(isoString);
112
+ }
113
+ else if (diffDays > 0) {
114
+ return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;
115
+ }
116
+ else if (diffHours > 0) {
117
+ return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;
118
+ }
119
+ else if (diffMinutes > 0) {
120
+ return `${diffMinutes} minute${diffMinutes > 1 ? 's' : ''} ago`;
121
+ }
122
+ else {
123
+ return 'Just now';
124
+ }
125
+ }
126
+ catch {
127
+ return 'Invalid Date';
128
+ }
129
+ }
130
+ /**
131
+ * Format ISO timestamp to readable format with time
132
+ */
133
+ export function formatTimestamp(isoString) {
134
+ if (!isoString)
135
+ return '';
136
+ try {
137
+ const date = new Date(isoString);
138
+ if (isNaN(date.getTime())) {
139
+ return isoString;
140
+ }
141
+ return date.toLocaleString('en-US', {
142
+ year: 'numeric',
143
+ month: 'short',
144
+ day: 'numeric',
145
+ hour: '2-digit',
146
+ minute: '2-digit',
147
+ second: '2-digit',
148
+ });
149
+ }
150
+ catch {
151
+ return isoString;
152
+ }
153
+ }
154
+ //# sourceMappingURL=commonFormatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commonFormatters.js","sourceRoot":"","sources":["../../../../src/domains/registry/formatters/commonFormatters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { OutputFormat, RegistryServer } from '../../../domains/registry/types.js';
2
+ /**
3
+ * Format a server's details for display
4
+ */
5
+ export declare function formatServerDetails(server: RegistryServer, format?: OutputFormat): string;
6
+ //# sourceMappingURL=serverDetailFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverDetailFormatter.d.ts","sourceRoot":"","sources":["../../../../src/domains/registry/formatters/serverDetailFormatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EACZ,cAAc,EAGf,MAAM,gCAAgC,CAAC;AAOxC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,GAAE,YAAsB,GAAG,MAAM,CAUlG"}