67 lines
1.7 KiB
TypeScript
67 lines
1.7 KiB
TypeScript
/**
|
|
* Telemetry for plugin/marketplace fetches - DISABLED.
|
|
*/
|
|
|
|
export type PluginFetchSource =
|
|
| 'install_counts'
|
|
| 'marketplace_clone'
|
|
| 'marketplace_pull'
|
|
| 'marketplace_url'
|
|
| 'plugin_clone'
|
|
| 'mcpb'
|
|
|
|
export type PluginFetchOutcome = 'success' | 'failure' | 'cache_hit'
|
|
|
|
/**
|
|
* Extract hostname from a URL or git spec - DISABLED.
|
|
*/
|
|
function extractHost(_urlOrSpec: string): string {
|
|
return 'unknown'
|
|
}
|
|
|
|
/**
|
|
* True if the URL/spec points at anthropics/claude-plugins-official - DISABLED.
|
|
*/
|
|
function isOfficialRepo(_urlOrSpec: string): boolean {
|
|
return false
|
|
}
|
|
|
|
export function logPluginFetch(
|
|
_source: PluginFetchSource,
|
|
_urlOrSpec: string | undefined,
|
|
_outcome: PluginFetchOutcome,
|
|
_durationMs: number,
|
|
_errorKind?: string,
|
|
): void {
|
|
// Telemetry disabled
|
|
}
|
|
|
|
/**
|
|
* Classify an error into a stable bucket for the error_kind field.
|
|
*/
|
|
export function classifyFetchError(error: unknown): string {
|
|
const msg = String((error as { message?: unknown })?.message ?? error)
|
|
if (
|
|
/ENOTFOUND|ECONNREFUSED|EAI_AGAIN|Could not resolve host|Connection refused/i.test(
|
|
msg,
|
|
)
|
|
) {
|
|
return 'dns_or_refused'
|
|
}
|
|
if (/ETIMEDOUT|timed out|timeout/i.test(msg)) return 'timeout'
|
|
if (
|
|
/ECONNRESET|socket hang up|Connection reset by peer|remote end hung up/i.test(
|
|
msg,
|
|
)
|
|
) {
|
|
return 'conn_reset'
|
|
}
|
|
if (/403|401|authentication|permission denied/i.test(msg)) return 'auth'
|
|
if (/404|not found|repository not found/i.test(msg)) return 'not_found'
|
|
if (/certificate|SSL|TLS|unable to get local issuer/i.test(msg)) return 'tls'
|
|
if (/Invalid response format|Invalid marketplace schema/i.test(msg)) {
|
|
return 'invalid_schema'
|
|
}
|
|
return 'other'
|
|
}
|