recker 1.0.14 → 1.0.15-next.7944604

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 (63) hide show
  1. package/README.md +78 -100
  2. package/dist/ai/client.d.ts +2 -3
  3. package/dist/ai/client.d.ts.map +1 -1
  4. package/dist/ai/client.js +5 -6
  5. package/dist/ai/index.d.ts +1 -1
  6. package/dist/ai/index.d.ts.map +1 -1
  7. package/dist/ai/index.js +1 -1
  8. package/dist/bench/generator.d.ts.map +1 -1
  9. package/dist/bench/generator.js +2 -1
  10. package/dist/bench/stats.d.ts +15 -1
  11. package/dist/bench/stats.d.ts.map +1 -1
  12. package/dist/bench/stats.js +84 -5
  13. package/dist/cli/tui/ai-chat.js +2 -2
  14. package/dist/cli/tui/load-dashboard.d.ts.map +1 -1
  15. package/dist/cli/tui/load-dashboard.js +62 -8
  16. package/dist/contract/index.js +3 -2
  17. package/dist/dns/index.d.ts +35 -0
  18. package/dist/dns/index.d.ts.map +1 -0
  19. package/dist/dns/index.js +124 -0
  20. package/dist/index.d.ts +2 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +2 -0
  23. package/dist/mcp/embeddings-loader.d.ts +18 -0
  24. package/dist/mcp/embeddings-loader.d.ts.map +1 -0
  25. package/dist/mcp/embeddings-loader.js +152 -0
  26. package/dist/mcp/index.d.ts +1 -0
  27. package/dist/mcp/index.d.ts.map +1 -1
  28. package/dist/mcp/index.js +1 -0
  29. package/dist/mcp/search/hybrid-search.d.ts.map +1 -1
  30. package/dist/mcp/search/hybrid-search.js +7 -21
  31. package/dist/mcp/server.d.ts +2 -0
  32. package/dist/mcp/server.d.ts.map +1 -1
  33. package/dist/mcp/server.js +8 -1
  34. package/dist/recker.d.ts +47 -0
  35. package/dist/recker.d.ts.map +1 -0
  36. package/dist/recker.js +99 -0
  37. package/dist/transport/base-udp.d.ts.map +1 -1
  38. package/dist/transport/base-udp.js +1 -0
  39. package/dist/transport/udp-response.d.ts +2 -2
  40. package/dist/transport/udp-response.d.ts.map +1 -1
  41. package/dist/transport/udp-response.js +2 -2
  42. package/dist/transport/udp.d.ts +4 -3
  43. package/dist/transport/udp.d.ts.map +1 -1
  44. package/dist/transport/udp.js +16 -7
  45. package/dist/types/udp.d.ts +1 -0
  46. package/dist/types/udp.d.ts.map +1 -1
  47. package/dist/udp/index.d.ts +2 -2
  48. package/dist/udp/index.d.ts.map +1 -1
  49. package/dist/udp/index.js +2 -2
  50. package/dist/utils/colors.d.ts +16 -0
  51. package/dist/utils/colors.d.ts.map +1 -1
  52. package/dist/utils/colors.js +16 -0
  53. package/dist/utils/whois.d.ts +18 -0
  54. package/dist/utils/whois.d.ts.map +1 -1
  55. package/dist/utils/whois.js +63 -0
  56. package/dist/webrtc/index.d.ts +80 -0
  57. package/dist/webrtc/index.d.ts.map +1 -0
  58. package/dist/webrtc/index.js +311 -0
  59. package/dist/websocket/client.d.ts +1 -1
  60. package/dist/websocket/client.d.ts.map +1 -1
  61. package/dist/websocket/client.js +1 -1
  62. package/package.json +2 -2
  63. package/dist/mcp/data/embeddings.json +0 -1
@@ -0,0 +1,35 @@
1
+ import { type DnsSecurityRecords } from '../utils/dns-toolkit.js';
2
+ export { createLookupFunction, customDNSLookup } from '../utils/dns.js';
3
+ export { createDoHLookup } from '../utils/doh.js';
4
+ export { getSecurityRecords, type DnsSecurityRecords } from '../utils/dns-toolkit.js';
5
+ export type { DNSOptions } from '../types/index.js';
6
+ export type RecordType = 'A' | 'AAAA' | 'CNAME' | 'MX' | 'TXT' | 'NS' | 'SOA' | 'SRV' | 'CAA' | 'PTR';
7
+ export type DoHProvider = 'cloudflare' | 'google' | 'quad9' | 'system';
8
+ export interface DNSClientOptions {
9
+ provider?: DoHProvider;
10
+ timeout?: number;
11
+ debug?: boolean;
12
+ servers?: string[];
13
+ }
14
+ export declare class DNSClient {
15
+ private options;
16
+ constructor(options?: DNSClientOptions);
17
+ private log;
18
+ resolve(hostname: string, type?: RecordType): Promise<string[]>;
19
+ resolve4(hostname: string): Promise<string[]>;
20
+ resolve6(hostname: string): Promise<string[]>;
21
+ resolveMx(hostname: string): Promise<{
22
+ priority: number;
23
+ exchange: string;
24
+ }[]>;
25
+ resolveTxt(hostname: string): Promise<string[]>;
26
+ resolveNs(hostname: string): Promise<string[]>;
27
+ resolveSoa(hostname: string): Promise<import("dns").SoaRecord>;
28
+ resolveSrv(hostname: string): Promise<import("dns").SrvRecord[]>;
29
+ resolveCaa(hostname: string): Promise<import("dns").CaaRecord[]>;
30
+ reverse(ip: string): Promise<string[]>;
31
+ resolveAll(hostname: string): Promise<Record<string, unknown[]>>;
32
+ getSecurityRecords(domain: string): Promise<DnsSecurityRecords>;
33
+ }
34
+ export declare function createDNS(options?: DNSClientOptions): DNSClient;
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dns/index.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAgD,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGhH,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACtF,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKpD,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAKtG,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAKvE,MAAM,WAAW,gBAAgB;IAK/B,QAAQ,CAAC,EAAE,WAAW,CAAC;IAMvB,OAAO,CAAC,EAAE,MAAM,CAAC;IAMjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAKhB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAqBD,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAA6B;gBAEhC,OAAO,GAAE,gBAAqB;IAc1C,OAAO,CAAC,GAAG;IASL,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,UAAgB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiD1E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO7C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO7C,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAOxE,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQrD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO9C,UAAU,CAAC,QAAQ,EAAE,MAAM;IAO3B,UAAU,CAAC,QAAQ,EAAE,MAAM;IAO3B,UAAU,CAAC,QAAQ,EAAE,MAAM;IAO3B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOhC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IA4BhE,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAItE;AA0BD,wBAAgB,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAE/D"}
@@ -0,0 +1,124 @@
1
+ import { promises as nodeDns } from 'node:dns';
2
+ import { getSecurityRecords as getSecurityRecordsUtil } from '../utils/dns-toolkit.js';
3
+ export { createLookupFunction, customDNSLookup } from '../utils/dns.js';
4
+ export { createDoHLookup } from '../utils/doh.js';
5
+ export { getSecurityRecords } from '../utils/dns-toolkit.js';
6
+ export class DNSClient {
7
+ options;
8
+ constructor(options = {}) {
9
+ this.options = {
10
+ provider: options.provider ?? 'system',
11
+ timeout: options.timeout ?? 5000,
12
+ debug: options.debug ?? false,
13
+ servers: options.servers ?? [],
14
+ };
15
+ if (this.options.servers.length > 0 && this.options.provider === 'system') {
16
+ nodeDns.setServers(this.options.servers);
17
+ }
18
+ }
19
+ log(message, ...args) {
20
+ if (this.options.debug) {
21
+ console.log(`[DNS] ${message}`, ...args);
22
+ }
23
+ }
24
+ async resolve(hostname, type = 'A') {
25
+ this.log(`Resolving ${hostname} (${type})`);
26
+ const start = Date.now();
27
+ try {
28
+ let result;
29
+ switch (type) {
30
+ case 'A':
31
+ result = await nodeDns.resolve4(hostname);
32
+ break;
33
+ case 'AAAA':
34
+ result = await nodeDns.resolve6(hostname);
35
+ break;
36
+ case 'CNAME':
37
+ result = await nodeDns.resolveCname(hostname);
38
+ break;
39
+ case 'NS':
40
+ result = await nodeDns.resolveNs(hostname);
41
+ break;
42
+ case 'PTR':
43
+ result = await nodeDns.resolvePtr(hostname);
44
+ break;
45
+ case 'TXT': {
46
+ const txt = await nodeDns.resolveTxt(hostname);
47
+ result = txt.map(chunks => chunks.join(''));
48
+ break;
49
+ }
50
+ default: {
51
+ const records = await nodeDns.resolve(hostname, type);
52
+ if (Array.isArray(records)) {
53
+ result = records.map(r => typeof r === 'string' ? r : JSON.stringify(r));
54
+ }
55
+ else {
56
+ result = [JSON.stringify(records)];
57
+ }
58
+ }
59
+ }
60
+ this.log(`Resolved ${hostname} in ${Date.now() - start}ms:`, result);
61
+ return result;
62
+ }
63
+ catch (error) {
64
+ this.log(`Failed to resolve ${hostname}:`, error);
65
+ throw error;
66
+ }
67
+ }
68
+ resolve4(hostname) {
69
+ return nodeDns.resolve4(hostname);
70
+ }
71
+ resolve6(hostname) {
72
+ return nodeDns.resolve6(hostname);
73
+ }
74
+ resolveMx(hostname) {
75
+ return nodeDns.resolveMx(hostname);
76
+ }
77
+ async resolveTxt(hostname) {
78
+ const records = await nodeDns.resolveTxt(hostname);
79
+ return records.map(chunks => chunks.join(''));
80
+ }
81
+ resolveNs(hostname) {
82
+ return nodeDns.resolveNs(hostname);
83
+ }
84
+ resolveSoa(hostname) {
85
+ return nodeDns.resolveSoa(hostname);
86
+ }
87
+ resolveSrv(hostname) {
88
+ return nodeDns.resolveSrv(hostname);
89
+ }
90
+ resolveCaa(hostname) {
91
+ return nodeDns.resolveCaa(hostname);
92
+ }
93
+ reverse(ip) {
94
+ return nodeDns.reverse(ip);
95
+ }
96
+ async resolveAll(hostname) {
97
+ this.log(`Resolving all records for ${hostname}`);
98
+ const results = {};
99
+ const tryResolve = async (type, fn) => {
100
+ try {
101
+ results[type] = await fn();
102
+ }
103
+ catch {
104
+ }
105
+ };
106
+ await Promise.all([
107
+ tryResolve('A', () => nodeDns.resolve4(hostname)),
108
+ tryResolve('AAAA', () => nodeDns.resolve6(hostname)),
109
+ tryResolve('MX', () => nodeDns.resolveMx(hostname)),
110
+ tryResolve('TXT', () => nodeDns.resolveTxt(hostname)),
111
+ tryResolve('NS', () => nodeDns.resolveNs(hostname)),
112
+ tryResolve('CAA', () => nodeDns.resolveCaa(hostname)),
113
+ ]);
114
+ this.log(`Resolved all for ${hostname}:`, Object.keys(results));
115
+ return results;
116
+ }
117
+ async getSecurityRecords(domain) {
118
+ this.log(`Getting security records for ${domain}`);
119
+ return getSecurityRecordsUtil(domain);
120
+ }
121
+ }
122
+ export function createDNS(options) {
123
+ return new DNSClient(options);
124
+ }
package/dist/index.d.ts CHANGED
@@ -64,4 +64,6 @@ export * as protocols from './protocols/index.js';
64
64
  export * from './mcp/client.js';
65
65
  export * from './mcp/contract.js';
66
66
  export { Client as Recker } from './core/client.js';
67
+ export { get, post, put, patch, del, del as delete, head, options, whois, whoisAvailable, dns, dnsSecurity, ws, recker, } from './recker.js';
68
+ export { default } from './recker.js';
67
69
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAGlD,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAGlD,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAGlC,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAOpD,OAAO,EACL,GAAG,EACH,IAAI,EACJ,GAAG,EACH,KAAK,EACL,GAAG,EACH,GAAG,IAAI,MAAM,EACb,IAAI,EACJ,OAAO,EACP,KAAK,EACL,cAAc,EACd,GAAG,EACH,WAAW,EACX,EAAE,EACF,MAAM,GACP,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -64,3 +64,5 @@ export * as protocols from './protocols/index.js';
64
64
  export * from './mcp/client.js';
65
65
  export * from './mcp/contract.js';
66
66
  export { Client as Recker } from './core/client.js';
67
+ export { get, post, put, patch, del, del as delete, head, options, whois, whoisAvailable, dns, dnsSecurity, ws, recker, } from './recker.js';
68
+ export { default } from './recker.js';
@@ -0,0 +1,18 @@
1
+ import type { EmbeddingsData } from './search/types.js';
2
+ declare function getPackageVersion(): string;
3
+ export declare function getEmbeddingsCachePath(version?: string): string;
4
+ export declare function hasLocalEmbeddings(version?: string): boolean;
5
+ export declare function loadLocalEmbeddings(version?: string): EmbeddingsData | null;
6
+ export declare function saveLocalEmbeddings(data: EmbeddingsData, version?: string): void;
7
+ export declare function downloadEmbeddings(version?: string): Promise<EmbeddingsData>;
8
+ export declare function loadBundledEmbeddings(): Promise<EmbeddingsData | null>;
9
+ export interface LoadEmbeddingsOptions {
10
+ forceDownload?: boolean;
11
+ version?: string;
12
+ offline?: boolean;
13
+ debug?: boolean;
14
+ }
15
+ export declare function loadEmbeddings(options?: LoadEmbeddingsOptions): Promise<EmbeddingsData | null>;
16
+ export declare function clearEmbeddingsCache(version?: string): void;
17
+ export { getPackageVersion };
18
+ //# sourceMappingURL=embeddings-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings-loader.d.ts","sourceRoot":"","sources":["../../src/mcp/embeddings-loader.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA+BxD,iBAAS,iBAAiB,IAAI,MAAM,CAKnC;AAyBD,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAI/D;AAKD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5D;AAKD,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAa3E;AAKD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAUhF;AAKD,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAoBlF;AAKD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAsB5E;AAED,MAAM,WAAW,qBAAqB;IAEpC,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAsBD,wBAAsB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAsCxG;AAKD,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAW3D;AAKD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,152 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
2
+ import { join, dirname } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ function getPackageVersionFromPkg() {
5
+ try {
6
+ const __dirname = dirname(fileURLToPath(import.meta.url));
7
+ const paths = [
8
+ join(__dirname, '..', '..', 'package.json'),
9
+ join(__dirname, '..', '..', '..', 'package.json'),
10
+ join(process.cwd(), 'package.json'),
11
+ ];
12
+ for (const pkgPath of paths) {
13
+ if (existsSync(pkgPath)) {
14
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
15
+ if (pkg.name === 'recker') {
16
+ return pkg.version;
17
+ }
18
+ }
19
+ }
20
+ }
21
+ catch {
22
+ }
23
+ return '1.0.15';
24
+ }
25
+ let _packageVersion = null;
26
+ function getPackageVersion() {
27
+ if (!_packageVersion) {
28
+ _packageVersion = getPackageVersionFromPkg();
29
+ }
30
+ return _packageVersion;
31
+ }
32
+ const GITHUB_RELEASE_URL = 'https://github.com/forattini-dev/recker/releases/download';
33
+ function getCacheDir() {
34
+ const homeDir = process.env.HOME || process.env.USERPROFILE || '';
35
+ if (homeDir) {
36
+ return join(homeDir, '.cache', 'recker');
37
+ }
38
+ try {
39
+ const __dirname = dirname(fileURLToPath(import.meta.url));
40
+ return join(__dirname, '..', '..', 'node_modules', '.cache', 'recker');
41
+ }
42
+ catch {
43
+ return join(process.cwd(), 'node_modules', '.cache', 'recker');
44
+ }
45
+ }
46
+ export function getEmbeddingsCachePath(version) {
47
+ const cacheDir = getCacheDir();
48
+ const ver = version || getPackageVersion();
49
+ return join(cacheDir, `embeddings-${ver}.json`);
50
+ }
51
+ export function hasLocalEmbeddings(version) {
52
+ return existsSync(getEmbeddingsCachePath(version));
53
+ }
54
+ export function loadLocalEmbeddings(version) {
55
+ const cachePath = getEmbeddingsCachePath(version);
56
+ if (!existsSync(cachePath)) {
57
+ return null;
58
+ }
59
+ try {
60
+ const data = readFileSync(cachePath, 'utf-8');
61
+ return JSON.parse(data);
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ export function saveLocalEmbeddings(data, version) {
68
+ const cachePath = getEmbeddingsCachePath(version);
69
+ const cacheDir = dirname(cachePath);
70
+ if (!existsSync(cacheDir)) {
71
+ mkdirSync(cacheDir, { recursive: true });
72
+ }
73
+ writeFileSync(cachePath, JSON.stringify(data));
74
+ }
75
+ export async function downloadEmbeddings(version) {
76
+ const ver = version || getPackageVersion();
77
+ const url = `${GITHUB_RELEASE_URL}/v${ver}/embeddings.json`;
78
+ try {
79
+ const response = await fetch(url);
80
+ if (!response.ok) {
81
+ throw new Error(`Failed to download embeddings: ${response.status} ${response.statusText}`);
82
+ }
83
+ const data = await response.json();
84
+ saveLocalEmbeddings(data, ver);
85
+ return data;
86
+ }
87
+ catch (error) {
88
+ throw new Error(`Failed to download embeddings from ${url}: ${error}`);
89
+ }
90
+ }
91
+ export async function loadBundledEmbeddings() {
92
+ try {
93
+ const __dirname = dirname(fileURLToPath(import.meta.url));
94
+ const bundledPath = join(__dirname, 'data', 'embeddings.json');
95
+ if (existsSync(bundledPath)) {
96
+ const data = readFileSync(bundledPath, 'utf-8');
97
+ return JSON.parse(data);
98
+ }
99
+ const srcPath = join(__dirname, '..', 'mcp', 'data', 'embeddings.json');
100
+ if (existsSync(srcPath)) {
101
+ const data = readFileSync(srcPath, 'utf-8');
102
+ return JSON.parse(data);
103
+ }
104
+ }
105
+ catch {
106
+ }
107
+ return null;
108
+ }
109
+ export async function loadEmbeddings(options = {}) {
110
+ const { forceDownload = false, version, offline = false, debug = false } = options;
111
+ const log = (msg) => {
112
+ if (debug)
113
+ console.log(`[embeddings-loader] ${msg}`);
114
+ };
115
+ if (!forceDownload) {
116
+ const cached = loadLocalEmbeddings(version);
117
+ if (cached) {
118
+ log(`Loaded from cache: ${getEmbeddingsCachePath(version)}`);
119
+ return cached;
120
+ }
121
+ }
122
+ const bundled = await loadBundledEmbeddings();
123
+ if (bundled) {
124
+ log('Loaded bundled embeddings');
125
+ return bundled;
126
+ }
127
+ if (!offline) {
128
+ try {
129
+ log(`Downloading embeddings v${version || getPackageVersion()}...`);
130
+ const downloaded = await downloadEmbeddings(version);
131
+ log(`Downloaded and cached: ${downloaded.documents?.length || 0} documents`);
132
+ return downloaded;
133
+ }
134
+ catch (error) {
135
+ log(`Download failed: ${error}`);
136
+ }
137
+ }
138
+ log('No embeddings available');
139
+ return null;
140
+ }
141
+ export function clearEmbeddingsCache(version) {
142
+ const cachePath = getEmbeddingsCachePath(version);
143
+ try {
144
+ const fs = require('fs');
145
+ if (fs.existsSync(cachePath)) {
146
+ fs.unlinkSync(cachePath);
147
+ }
148
+ }
149
+ catch {
150
+ }
151
+ }
152
+ export { getPackageVersion };
@@ -1,4 +1,5 @@
1
1
  export * from './types.js';
2
2
  export * from './client.js';
3
3
  export * from './server.js';
4
+ export * from './embeddings-loader.js';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAKA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAKA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC"}
package/dist/mcp/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  export * from './types.js';
2
2
  export * from './client.js';
3
3
  export * from './server.js';
4
+ export * from './embeddings-loader.js';
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-search.d.ts","sourceRoot":"","sources":["../../../src/mcp/search/hybrid-search.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,kBAAkB,EAGnB,MAAM,YAAY,CAAC;AAkBpB,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAiC;IAC7C,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAA+B;gBAEjC,MAAM,GAAE,kBAAuB;IAYrC,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YA+BrC,yBAAyB;IAuDjC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAmDjF,OAAO,CAAC,WAAW;IAiCnB,OAAO,CAAC,cAAc;IA8GtB,OAAO,CAAC,cAAc;IAoDtB,OAAO,CAAC,MAAM,CAAC,UAAU,CAoCtB;IAKH,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,cAAc;IAmBtB,aAAa,IAAI,OAAO;IAOxB,QAAQ,IAAI;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;IAYD,OAAO,CAAC,GAAG;CAKZ;AAKD,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAE5E"}
1
+ {"version":3,"file":"hybrid-search.d.ts","sourceRoot":"","sources":["../../../src/mcp/search/hybrid-search.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,aAAa,EACb,kBAAkB,EAGnB,MAAM,YAAY,CAAC;AAkBpB,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAiC;IAC7C,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAA+B;gBAEjC,MAAM,GAAE,kBAAuB;IAYrC,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAmCrC,yBAAyB;IAoCjC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAmDjF,OAAO,CAAC,WAAW;IAiCnB,OAAO,CAAC,cAAc;IA8GtB,OAAO,CAAC,cAAc;IAoDtB,OAAO,CAAC,MAAM,CAAC,UAAU,CAoCtB;IAKH,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,cAAc;IAmBtB,aAAa,IAAI,OAAO;IAOxB,QAAQ,IAAI;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;IAYD,OAAO,CAAC,GAAG;CAKZ;AAKD,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,YAAY,CAE5E"}
@@ -1,5 +1,6 @@
1
1
  import Fuse from 'fuse.js';
2
2
  import { cosineSimilarity, combineScores, levenshtein } from './math.js';
3
+ import { loadEmbeddings } from '../embeddings-loader.js';
3
4
  let cachedEmbeddings = null;
4
5
  export class HybridSearch {
5
6
  fuse = null;
@@ -43,27 +44,12 @@ export class HybridSearch {
43
44
  this.embeddingsData = cachedEmbeddings;
44
45
  }
45
46
  else {
46
- const embeddingsPath = new URL('../data/embeddings.json', import.meta.url);
47
- try {
48
- const response = await fetch(embeddingsPath);
49
- if (response.ok) {
50
- this.embeddingsData = (await response.json());
51
- cachedEmbeddings = this.embeddingsData;
52
- }
53
- }
54
- catch {
55
- try {
56
- const fs = await import('fs');
57
- const path = await import('path');
58
- const embeddingsFile = path.join(path.dirname(new URL(import.meta.url).pathname), '../data/embeddings.json');
59
- if (fs.existsSync(embeddingsFile)) {
60
- const data = fs.readFileSync(embeddingsFile, 'utf-8');
61
- this.embeddingsData = JSON.parse(data);
62
- cachedEmbeddings = this.embeddingsData;
63
- }
64
- }
65
- catch {
66
- }
47
+ const data = await loadEmbeddings({
48
+ debug: this.config.debug,
49
+ });
50
+ if (data) {
51
+ this.embeddingsData = data;
52
+ cachedEmbeddings = data;
67
53
  }
68
54
  }
69
55
  if (this.embeddingsData) {
@@ -21,6 +21,8 @@ export declare class MCPServer {
21
21
  private sseClients;
22
22
  private initialized;
23
23
  constructor(options?: MCPServerOptions);
24
+ private indexReady;
25
+ private ensureIndexReady;
24
26
  private log;
25
27
  private findDocsPath;
26
28
  private findExamplesPath;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAMhB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AA0CD,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAC,CAAkC;IACjD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,gBAAqB;IAiB1C,OAAO,CAAC,GAAG;IAUX,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,WAAW;YAwBL,UAAU;YAoBV,SAAS;IAiCvB,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,sBAAsB;IA0E9B,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,OAAO;IAyBf,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,QAAQ;IAkHhB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,UAAU;IA0ElB,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,MAAM;IAmCd,OAAO,CAAC,eAAe;IAgDvB,OAAO,CAAC,YAAY;IAmEpB,OAAO,CAAC,cAAc;IAmFtB,OAAO,CAAC,gBAAgB;IA+DxB,OAAO,CAAC,iBAAiB;IAuCzB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,eAAe;IA8DnD,OAAO,CAAC,gBAAgB;YAOV,UAAU;YAgCV,SAAS;YA8CT,QAAQ;IAuFhB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,OAAO,IAAI,MAAM;IAIjB,YAAY,IAAI,MAAM;IAItB,gBAAgB,IAAI,MAAM;IAI1B,aAAa,IAAI,MAAM;IAIvB,YAAY,IAAI,gBAAgB;CAGjC;AAoBD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAErE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAMhB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AA0CD,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAC,CAAkC;IACjD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,gBAAqB;IAsB1C,OAAO,CAAC,UAAU,CAA8B;YAKlC,gBAAgB;IAO9B,OAAO,CAAC,GAAG;IAUX,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,WAAW;YAwBL,UAAU;YAoBV,SAAS;IAiCvB,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,eAAe;IA4BvB,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,sBAAsB;IA0E9B,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,OAAO;IAyBf,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,QAAQ;IAkHhB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,UAAU;IA0ElB,OAAO,CAAC,cAAc;IA6BtB,OAAO,CAAC,MAAM;IAmCd,OAAO,CAAC,eAAe;IAgDvB,OAAO,CAAC,YAAY;IAmEpB,OAAO,CAAC,cAAc;IAmFtB,OAAO,CAAC,gBAAgB;IA+DxB,OAAO,CAAC,iBAAiB;IAuCzB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,eAAe;IA8DnD,OAAO,CAAC,gBAAgB;YAOV,UAAU;YAgCV,SAAS;YA8CT,QAAQ;IAuFhB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,OAAO,IAAI,MAAM;IAIjB,YAAY,IAAI,MAAM;IAItB,gBAAgB,IAAI,MAAM;IAI1B,aAAa,IAAI,MAAM;IAIvB,YAAY,IAAI,gBAAgB;CAGjC;AAoBD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAErE"}
@@ -26,7 +26,13 @@ export class MCPServer {
26
26
  toolsFilter: options.toolsFilter || [],
27
27
  };
28
28
  this.hybridSearch = createHybridSearch({ debug: this.options.debug });
29
- this.buildIndex();
29
+ }
30
+ indexReady = null;
31
+ async ensureIndexReady() {
32
+ if (!this.indexReady) {
33
+ this.indexReady = this.buildIndex();
34
+ }
35
+ await this.indexReady;
30
36
  }
31
37
  log(message, data) {
32
38
  if (this.options.debug) {
@@ -1112,6 +1118,7 @@ const client = createClient({
1112
1118
  });
1113
1119
  }
1114
1120
  async start() {
1121
+ await this.ensureIndexReady();
1115
1122
  switch (this.options.transport) {
1116
1123
  case 'stdio':
1117
1124
  return this.startStdio();
@@ -0,0 +1,47 @@
1
+ import { Client, type ExtendedClientOptions } from './core/client.js';
2
+ import { type RequestPromise } from './core/request-promise.js';
3
+ import type { RequestOptions } from './types/index.js';
4
+ import { type WebSocketOptions, type ReckerWebSocket } from './websocket/client.js';
5
+ import { createWhois, type WhoisResult, type WhoisOptions } from './utils/whois.js';
6
+ import { type DNSClientOptions, type DNSClient } from './dns/index.js';
7
+ import type { AIClientConfig } from './types/ai.js';
8
+ export declare function get(url: string, options?: RequestOptions): RequestPromise;
9
+ export declare function post(url: string, options?: RequestOptions): RequestPromise;
10
+ export declare function put(url: string, options?: RequestOptions): RequestPromise;
11
+ export declare function patch(url: string, options?: RequestOptions): RequestPromise;
12
+ export declare function del(url: string, options?: RequestOptions): RequestPromise;
13
+ export declare function head(url: string, options?: RequestOptions): RequestPromise;
14
+ export declare function options(url: string, options?: RequestOptions): RequestPromise;
15
+ export declare function whois(query: string, options?: WhoisOptions): Promise<WhoisResult>;
16
+ export declare function whoisAvailable(domain: string): Promise<boolean>;
17
+ export declare function dns(hostname: string, type?: 'A' | 'AAAA' | 'MX' | 'TXT' | 'NS' | 'CNAME'): Promise<string[]>;
18
+ export declare function dnsSecurity(domain: string): Promise<import("./utils/dns-toolkit.js").DnsSecurityRecords>;
19
+ export declare function ws(url: string, options?: WebSocketOptions): ReckerWebSocket;
20
+ export declare const recker: {
21
+ get: typeof get;
22
+ post: typeof post;
23
+ put: typeof put;
24
+ patch: typeof patch;
25
+ delete: typeof del;
26
+ head: typeof head;
27
+ options: typeof options;
28
+ whois: typeof whois;
29
+ whoisAvailable: typeof whoisAvailable;
30
+ dns: typeof dns;
31
+ dnsSecurity: typeof dnsSecurity;
32
+ ws: typeof ws;
33
+ ai: {
34
+ chat: (optionsOrPrompt: string | import("./types/ai.js").ChatOptions) => Promise<import("./types/ai.js").AIResponse<string>>;
35
+ stream: (options: import("./types/ai.js").ChatOptions) => Promise<import("./types/ai.js").AIStream>;
36
+ embed: (options: import("./types/ai.js").EmbedOptions) => Promise<import("./types/ai.js").EmbedResponse>;
37
+ extend: (defaults: Partial<import("./types/ai.js").ChatOptions>) => import("./types/ai.js").AIClient;
38
+ readonly metrics: import("./types/ai.js").AIMetrics;
39
+ };
40
+ client: (options?: ExtendedClientOptions) => Client;
41
+ dnsClient: (options?: DNSClientOptions) => DNSClient;
42
+ whoisClient: typeof createWhois;
43
+ aiClient: (options?: AIClientConfig) => import("./types/ai.js").AIClient;
44
+ reset: () => void;
45
+ };
46
+ export default recker;
47
+ //# sourceMappingURL=recker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recker.d.ts","sourceRoot":"","sources":["../src/recker.ts"],"names":[],"mappings":"AAwCA,OAAO,EAAE,MAAM,EAAgB,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAmB,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACrG,OAAO,EAA2C,WAAW,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC7H,OAAO,EAAa,KAAK,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAElF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AA0CpD,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,CAEzE;AAMD,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,CAE1E;AAKD,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,CAEzE;AAKD,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,CAE3E;AAKD,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,CAEzE;AAKD,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,CAE1E;AAKD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,cAAc,CAE7E;AAUD,wBAAsB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAEvF;AAMD,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAErE;AAMD,wBAAsB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,GAAG,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,OAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAEvH;AAMD,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,gEAE/C;AAMD,wBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,eAAe,CAE3E;AA8DD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;uBAgDE,qBAAqB;0BAKlB,gBAAgB;;yBAUjB,cAAc;;CAUpC,CAAC;AAGF,eAAe,MAAM,CAAC"}
package/dist/recker.js ADDED
@@ -0,0 +1,99 @@
1
+ import { createClient } from './core/client.js';
2
+ import { FetchTransport } from './transport/fetch.js';
3
+ import { createWebSocket } from './websocket/client.js';
4
+ import { whois as whoisLookup, isDomainAvailable, createWhois } from './utils/whois.js';
5
+ import { createDNS } from './dns/index.js';
6
+ import { createAI } from './ai/index.js';
7
+ let _defaultClient = null;
8
+ let _defaultDns = null;
9
+ let _defaultAi = null;
10
+ function getDefaultClient() {
11
+ if (!_defaultClient) {
12
+ _defaultClient = createClient({
13
+ transport: new FetchTransport(),
14
+ });
15
+ }
16
+ return _defaultClient;
17
+ }
18
+ function getDefaultDns() {
19
+ if (!_defaultDns) {
20
+ _defaultDns = createDNS();
21
+ }
22
+ return _defaultDns;
23
+ }
24
+ function getDefaultAi() {
25
+ if (!_defaultAi) {
26
+ _defaultAi = createAI();
27
+ }
28
+ return _defaultAi;
29
+ }
30
+ export function get(url, options) {
31
+ return getDefaultClient().get(url, options);
32
+ }
33
+ export function post(url, options) {
34
+ return getDefaultClient().post(url, options);
35
+ }
36
+ export function put(url, options) {
37
+ return getDefaultClient().put(url, options);
38
+ }
39
+ export function patch(url, options) {
40
+ return getDefaultClient().patch(url, options);
41
+ }
42
+ export function del(url, options) {
43
+ return getDefaultClient().delete(url, options);
44
+ }
45
+ export function head(url, options) {
46
+ return getDefaultClient().head(url, options);
47
+ }
48
+ export function options(url, options) {
49
+ return getDefaultClient().options(url, options);
50
+ }
51
+ export async function whois(query, options) {
52
+ return whoisLookup(query, options);
53
+ }
54
+ export async function whoisAvailable(domain) {
55
+ return isDomainAvailable(domain);
56
+ }
57
+ export async function dns(hostname, type = 'A') {
58
+ return getDefaultDns().resolve(hostname, type);
59
+ }
60
+ export async function dnsSecurity(domain) {
61
+ return getDefaultDns().getSecurityRecords(domain);
62
+ }
63
+ export function ws(url, options) {
64
+ return createWebSocket(url, options);
65
+ }
66
+ const aiNamespace = {
67
+ chat: (...args) => getDefaultAi().chat(...args),
68
+ stream: (...args) => getDefaultAi().stream(...args),
69
+ embed: (...args) => getDefaultAi().embed(...args),
70
+ extend: (...args) => getDefaultAi().extend(...args),
71
+ get metrics() {
72
+ return getDefaultAi().metrics;
73
+ },
74
+ };
75
+ export const recker = {
76
+ get,
77
+ post,
78
+ put,
79
+ patch,
80
+ delete: del,
81
+ head,
82
+ options,
83
+ whois,
84
+ whoisAvailable,
85
+ dns,
86
+ dnsSecurity,
87
+ ws,
88
+ ai: aiNamespace,
89
+ client: (options) => createClient(options),
90
+ dnsClient: (options) => createDNS(options),
91
+ whoisClient: createWhois,
92
+ aiClient: (options) => createAI(options),
93
+ reset: () => {
94
+ _defaultClient = null;
95
+ _defaultDns = null;
96
+ _defaultAi = null;
97
+ },
98
+ };
99
+ export default recker;
@@ -1 +1 @@
1
- {"version":3,"file":"base-udp.d.ts","sourceRoot":"","sources":["../../src/transport/base-udp.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EACV,uBAAuB,EACvB,UAAU,EACV,aAAa,EACd,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,eAAO,MAAM,iBAAiB,sCAA6C,CAAC;AAK5E,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,uBAAuB,CAOjE,CAAC;AAKF,8BAAsB,gBAAgB;IACpC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;gBAEzC,OAAO,GAAE,uBAA4B;IAUjD,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAK9D,SAAS,CAAC,YAAY,CAAC,IAAI,GAAE,MAAM,GAAG,MAAe,GAAG,KAAK,CAAC,MAAM;cAiBpD,aAAa,CAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC;IAsClB,SAAS,CAAC,QAAQ,CAChB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC;IAmFlB,SAAS,CAAC,cAAc,IAAI,UAAU;IAwCtC,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,aAAa;IAgBhE,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAqB7E,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWhD,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
1
+ {"version":3,"file":"base-udp.d.ts","sourceRoot":"","sources":["../../src/transport/base-udp.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EACV,uBAAuB,EACvB,UAAU,EACV,aAAa,EACd,MAAM,iBAAiB,CAAC;AAMzB,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,eAAO,MAAM,iBAAiB,sCAA6C,CAAC;AAK5E,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,uBAAuB,CAQjE,CAAC;AAKF,8BAAsB,gBAAgB;IACpC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;gBAEzC,OAAO,GAAE,uBAA4B;IAUjD,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAK9D,SAAS,CAAC,YAAY,CAAC,IAAI,GAAE,MAAM,GAAG,MAAe,GAAG,KAAK,CAAC,MAAM;cAiBpD,aAAa,CAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC;IAsClB,SAAS,CAAC,QAAQ,CAChB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC;IAmFlB,SAAS,CAAC,cAAc,IAAI,UAAU;IAwCtC,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,aAAa;IAgBhE,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAqB7E,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWhD,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -7,6 +7,7 @@ export const DEFAULT_UDP_OPTIONS = {
7
7
  retransmissions: 3,
8
8
  maxPacketSize: 65507,
9
9
  observability: true,
10
+ debug: false,
10
11
  localAddress: '',
11
12
  localPort: 0,
12
13
  };