recker 1.0.16 → 1.0.17-next.9570ed5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"search-panel.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/search-panel.ts"],"names":[],"mappings":"AAyCA,UAAU,kBAAkB;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAeD,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAgB;gBAE1B,OAAO,GAAE,kBAAuB;IAa5C,OAAO,CAAC,YAAY;IAed,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiD3B,KAAK,IAAI,IAAI;IAsBb,OAAO,CAAC,gBAAgB;YAYV,cAAc;IA8C5B,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,aAAa;YAKP,aAAa;IAgC3B,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,cAAc;IAyCtB,OAAO,CAAC,QAAQ;IAuBhB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,MAAM;IA0Bd,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,mBAAmB;IAiC3B,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,YAAY;CA0BrB;AAKD,wBAAsB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE"}
1
+ {"version":3,"file":"search-panel.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/search-panel.ts"],"names":[],"mappings":"AAyCA,UAAU,kBAAkB;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAeD,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAgB;gBAE1B,OAAO,GAAE,kBAAuB;IAa5C,OAAO,CAAC,YAAY;IAed,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiD3B,KAAK,IAAI,IAAI;IAsBb,OAAO,CAAC,gBAAgB;YAYV,cAAc;IA8C5B,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,aAAa;YAKP,aAAa;IAgC3B,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,cAAc;IAyCtB,OAAO,CAAC,QAAQ;IAuBhB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,MAAM;IA2Bd,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,mBAAmB;IAiC3B,OAAO,CAAC,oBAAoB;IA8B5B,OAAO,CAAC,YAAY;CA0BrB;AAKD,wBAAsB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnE"}
@@ -288,6 +288,7 @@ export class SearchPanel {
288
288
  render() {
289
289
  const output = [];
290
290
  output.push(CURSOR_HIDE);
291
+ output.push(CLEAR_SCREEN);
291
292
  output.push(CURSOR_HOME);
292
293
  output.push(this.renderHeader());
293
294
  output.push(this.renderSearchInput());
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACpC;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAMlE,KAAK,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,IAAI,CAClD,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,SAAS,GAAG;IAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;CAAE,GAAG,EAAE,CAAC,GACvE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,SAAS,GAAG;IAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,GAAG,EAAE,CAAC,GACjE;IAAE,OAAO,CAAC,EAAE,WAAW,CAAA;CAAE,KAC5B,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AAGjF,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,kBAAkB,IAAI;KACxD,CAAC,IAAI,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACvC,CAAC;AAEF,qBAAa,aAAc,SAAQ,KAAK;IACnB,MAAM,EAAE,MAAM;IAAS,IAAI,EAAE,GAAG;IAAS,aAAa,EAAE,SAAS;gBAAjE,MAAM,EAAE,MAAM,EAAS,IAAI,EAAE,GAAG,EAAS,aAAa,EAAE,SAAS;CAIrF;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,kBAAkB,EACzD,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,CAAC,GACV,cAAc,CAAC,CAAC,CAAC,CAqEnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACpC;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAMlE,KAAK,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,IAAI,CAClD,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,SAAS,GAAG;IAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;CAAE,GAAG,EAAE,CAAC,GACvE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,SAAS,GAAG;IAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,GAAG,EAAE,CAAC,GACjE;IAAE,OAAO,CAAC,EAAE,WAAW,CAAA;CAAE,KAC5B,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AAGjF,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,kBAAkB,IAAI;KACxD,CAAC,IAAI,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACvC,CAAC;AAEF,qBAAa,aAAc,SAAQ,KAAK;IACnB,MAAM,EAAE,MAAM;IAAS,IAAI,EAAE,GAAG;IAAS,aAAa,EAAE,SAAS;gBAAjE,MAAM,EAAE,MAAM,EAAS,IAAI,EAAE,GAAG,EAAS,aAAa,EAAE,SAAS;CAIrF;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,kBAAkB,EACzD,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,CAAC,GACV,cAAc,CAAC,CAAC,CAAC,CAqEnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"hybrid-search.d.ts","sourceRoot":"","sources":["../../../src/mcp/search/hybrid-search.ts"],"names":[],"mappings":"AAkBA,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;IAsDjF,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":"AAkBA,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;IAsDjF,OAAO,CAAC,WAAW;IA4EnB,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"}
@@ -12,7 +12,7 @@ export class HybridSearch {
12
12
  config;
13
13
  constructor(config = {}) {
14
14
  this.config = {
15
- fuzzyThreshold: config.fuzzyThreshold ?? 0.6,
15
+ fuzzyThreshold: config.fuzzyThreshold ?? 0.3,
16
16
  fuzzyWeight: config.fuzzyWeight ?? 0.5,
17
17
  semanticWeight: config.semanticWeight ?? 0.5,
18
18
  debug: config.debug ?? false,
@@ -22,11 +22,11 @@ export class HybridSearch {
22
22
  this.docs = docs;
23
23
  this.fuse = new Fuse(docs, {
24
24
  keys: [
25
- { name: 'keywords', weight: 6 },
26
- { name: 'title', weight: 4 },
27
- { name: 'section', weight: 3 },
28
- { name: 'path', weight: 1 },
29
- { name: 'content', weight: 0.3 },
25
+ { name: 'keywords', weight: 10 },
26
+ { name: 'title', weight: 6 },
27
+ { name: 'section', weight: 4 },
28
+ { name: 'path', weight: 2 },
29
+ { name: 'content', weight: 0.5 },
30
30
  ],
31
31
  includeScore: true,
32
32
  threshold: this.config.fuzzyThreshold,
@@ -111,13 +111,44 @@ export class HybridSearch {
111
111
  if (category) {
112
112
  results = results.filter((r) => r.item.category.toLowerCase().includes(category.toLowerCase()));
113
113
  }
114
- return results.slice(0, limit).map((r) => ({
114
+ const queryTerms = this.tokenize(query);
115
+ const scored = results.slice(0, limit).map((r) => {
116
+ const fuseScore = r.score || 0;
117
+ const baseScore = 1 - fuseScore;
118
+ let boost = 0;
119
+ if (fuseScore < 0.3) {
120
+ const keywords = r.item.keywords || [];
121
+ const titleLower = r.item.title.toLowerCase();
122
+ for (const term of queryTerms) {
123
+ if (keywords.some(k => k.toLowerCase() === term)) {
124
+ boost += 0.15;
125
+ }
126
+ }
127
+ for (const term of queryTerms) {
128
+ if (titleLower.includes(term)) {
129
+ boost += 0.10;
130
+ }
131
+ }
132
+ }
133
+ else {
134
+ boost = -0.3;
135
+ }
136
+ return {
137
+ item: r.item,
138
+ baseScore,
139
+ boost,
140
+ finalScore: baseScore + boost,
141
+ };
142
+ });
143
+ scored.sort((a, b) => b.finalScore - a.finalScore);
144
+ const maxScore = scored[0]?.finalScore || 1;
145
+ return scored.map((r) => ({
115
146
  id: r.item.id,
116
147
  path: r.item.path,
117
148
  title: r.item.title,
118
149
  content: r.item.content,
119
150
  snippet: this.extractSnippet(r.item.content, query),
120
- score: 1 - (r.score || 0),
151
+ score: Math.max(0, Math.min(1, r.finalScore / maxScore)),
121
152
  source: 'fuzzy',
122
153
  }));
123
154
  }
@@ -262,14 +293,14 @@ export class HybridSearch {
262
293
  'sim', 'nao', 'ja', 'ainda', 'sempre', 'nunca', 'tambem', 'so', 'apenas',
263
294
  'muito', 'pouco', 'mais', 'menos', 'bem', 'mal', 'assim', 'entao', 'logo',
264
295
  'yo', 'hey', 'oi', 'ola', 'bom', 'boa', 'obrigado', 'por favor',
265
- 'configure', 'configuro', 'configurar', 'configurando',
266
- 'use', 'usar', 'using', 'usar',
267
- 'create', 'criar', 'creating', 'criando',
268
- 'setup', 'setar', 'setting', 'setando',
269
- 'add', 'adicionar', 'adding', 'adicionando',
270
- 'get', 'getting', 'pegar', 'pegando',
271
- 'set', 'setting', 'definir', 'definindo',
272
- 'make', 'making', 'fazer', 'fazendo',
296
+ 'configure', 'configuro', 'configurar', 'configurando', 'configura',
297
+ 'use', 'usar', 'using', 'uso', 'usa',
298
+ 'create', 'criar', 'creating', 'criando', 'cria', 'crio',
299
+ 'setup', 'setar', 'setting', 'setando', 'seta', 'seto',
300
+ 'add', 'adicionar', 'adding', 'adicionando', 'adiciona', 'adiciono',
301
+ 'get', 'getting', 'pegar', 'pegando', 'pega', 'pego',
302
+ 'set', 'setting', 'definir', 'definindo', 'define', 'defino',
303
+ 'make', 'making', 'fazer', 'fazendo', 'faz', 'faço', 'faco',
273
304
  ]);
274
305
  cleanQuery(query) {
275
306
  const words = query
@@ -20,6 +20,8 @@ export * from './supabase.js';
20
20
  export * from './digitalocean.js';
21
21
  export * from './stripe.js';
22
22
  export * from './twilio.js';
23
+ export * from './mailgun.js';
24
+ export * from './sinch.js';
23
25
  export * from './linear.js';
24
26
  export * from './notion.js';
25
27
  export * from './slack.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAGlC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAGlC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC"}
@@ -20,6 +20,8 @@ export * from './supabase.js';
20
20
  export * from './digitalocean.js';
21
21
  export * from './stripe.js';
22
22
  export * from './twilio.js';
23
+ export * from './mailgun.js';
24
+ export * from './sinch.js';
23
25
  export * from './linear.js';
24
26
  export * from './notion.js';
25
27
  export * from './slack.js';
@@ -0,0 +1,8 @@
1
+ import { ClientOptions } from '../types/index.js';
2
+ export interface MailgunPresetOptions {
3
+ apiKey: string;
4
+ domain?: string;
5
+ region?: 'us' | 'eu';
6
+ }
7
+ export declare function mailgun(options: MailgunPresetOptions): ClientOptions;
8
+ //# sourceMappingURL=mailgun.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailgun.d.ts","sourceRoot":"","sources":["../../src/presets/mailgun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,oBAAoB;IAInC,MAAM,EAAE,MAAM,CAAC;IAIf,MAAM,CAAC,EAAE,MAAM,CAAC;IAIhB,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACtB;AAMD,wBAAgB,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAoBpE"}
@@ -0,0 +1,20 @@
1
+ export function mailgun(options) {
2
+ const credentials = Buffer.from(`api:${options.apiKey}`).toString('base64');
3
+ const baseHost = options.region === 'eu' ? 'api.eu.mailgun.net' : 'api.mailgun.net';
4
+ const baseUrl = options.domain
5
+ ? `https://${baseHost}/v3/${options.domain}`
6
+ : `https://${baseHost}/v3`;
7
+ return {
8
+ baseUrl,
9
+ headers: {
10
+ 'Authorization': `Basic ${credentials}`,
11
+ },
12
+ timeout: 30 * 1000,
13
+ retry: {
14
+ maxAttempts: 3,
15
+ backoff: 'exponential',
16
+ delay: 1000,
17
+ statusCodes: [408, 429, 500, 502, 503, 504]
18
+ }
19
+ };
20
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/presets/registry.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAiClD,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,aAAa,CAAC;AAK5D,MAAM,WAAW,UAAU;IAEzB,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,EAAE,MAAM,CAAC;IAEpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,OAAO,EAAE,aAAa,CAAC;IAEvB,QAAQ,EAAE,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IAE/C,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,eAAO,MAAM,cAAc,EAAE,UAAU,EAgQtC,CAAC;AAiBF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAShE;AAQD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE9D;AAQD,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,EAAE,CAKzF;AAKD,wBAAgB,aAAa,IAAI,UAAU,EAAE,CAE5C;AAKD,wBAAgB,gBAAgB,IAAI,UAAU,EAAE,CAE/C;AAKD,wBAAgB,eAAe,IAAI,UAAU,EAAE,CAE9C;AAKD,wBAAgB,mBAAmB,IAAI,UAAU,EAAE,CAElD"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/presets/registry.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAmClD,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,aAAa,CAAC;AAK5D,MAAM,WAAW,UAAU;IAEzB,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,EAAE,MAAM,CAAC;IAEpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,OAAO,EAAE,aAAa,CAAC;IAEvB,QAAQ,EAAE,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;IAE/C,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,eAAO,MAAM,cAAc,EAAE,UAAU,EAkRtC,CAAC;AAiBF,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAShE;AAQD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE9D;AAQD,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,EAAE,CAKzF;AAKD,wBAAgB,aAAa,IAAI,UAAU,EAAE,CAE5C;AAKD,wBAAgB,gBAAgB,IAAI,UAAU,EAAE,CAE/C;AAKD,wBAAgB,eAAe,IAAI,UAAU,EAAE,CAE9C;AAKD,wBAAgB,mBAAmB,IAAI,UAAU,EAAE,CAElD"}
@@ -19,6 +19,8 @@ import { vercel } from './vercel.js';
19
19
  import { supabase } from './supabase.js';
20
20
  import { stripe } from './stripe.js';
21
21
  import { twilio } from './twilio.js';
22
+ import { mailgun } from './mailgun.js';
23
+ import { sinch } from './sinch.js';
22
24
  import { digitalocean } from './digitalocean.js';
23
25
  import { linear } from './linear.js';
24
26
  import { notion } from './notion.js';
@@ -232,6 +234,24 @@ export const presetRegistry = [
232
234
  requiredAuth: ['accountSid', 'authToken'],
233
235
  docsUrl: 'https://www.twilio.com/docs/usage/api',
234
236
  },
237
+ {
238
+ name: 'mailgun',
239
+ displayName: 'Mailgun',
240
+ patterns: [/api\.mailgun\.net/, /api\.eu\.mailgun\.net/],
241
+ factory: mailgun,
242
+ category: 'saas',
243
+ requiredAuth: ['apiKey'],
244
+ docsUrl: 'https://documentation.mailgun.com/docs/mailgun/api-reference/',
245
+ },
246
+ {
247
+ name: 'sinch',
248
+ displayName: 'Sinch',
249
+ patterns: [/\.api\.sinch\.com/, /sms\.api\.sinch\.com/, /calling\.api\.sinch\.com/],
250
+ factory: sinch,
251
+ category: 'saas',
252
+ requiredAuth: ['projectId', 'keyId', 'keySecret'],
253
+ docsUrl: 'https://developers.sinch.com/docs/',
254
+ },
235
255
  {
236
256
  name: 'digitalocean',
237
257
  displayName: 'DigitalOcean',
@@ -0,0 +1,10 @@
1
+ import { ClientOptions } from '../types/index.js';
2
+ export interface SinchPresetOptions {
3
+ projectId: string;
4
+ keyId: string;
5
+ keySecret: string;
6
+ product?: 'sms' | 'voice' | 'conversation' | 'numbers' | 'verification';
7
+ region?: 'us' | 'eu' | 'au' | 'br' | 'ca';
8
+ }
9
+ export declare function sinch(options: SinchPresetOptions): ClientOptions;
10
+ //# sourceMappingURL=sinch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sinch.d.ts","sourceRoot":"","sources":["../../src/presets/sinch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,kBAAkB;IAIjC,SAAS,EAAE,MAAM,CAAC;IAIlB,KAAK,EAAE,MAAM,CAAC;IAId,SAAS,EAAE,MAAM,CAAC;IAKlB,OAAO,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,cAAc,GAAG,SAAS,GAAG,cAAc,CAAC;IAKxE,MAAM,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3C;AAqBD,wBAAgB,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,aAAa,CA0BhE"}
@@ -0,0 +1,39 @@
1
+ const SMS_REGIONS = {
2
+ us: 'https://us.sms.api.sinch.com',
3
+ eu: 'https://eu.sms.api.sinch.com',
4
+ au: 'https://au.sms.api.sinch.com',
5
+ br: 'https://br.sms.api.sinch.com',
6
+ ca: 'https://ca.sms.api.sinch.com',
7
+ };
8
+ const PRODUCT_URLS = {
9
+ voice: 'https://calling.api.sinch.com',
10
+ conversation: 'https://us.conversation.api.sinch.com',
11
+ numbers: 'https://numbers.api.sinch.com',
12
+ verification: 'https://verification.api.sinch.com',
13
+ };
14
+ export function sinch(options) {
15
+ const credentials = Buffer.from(`${options.keyId}:${options.keySecret}`).toString('base64');
16
+ const product = options.product ?? 'sms';
17
+ const region = options.region ?? 'us';
18
+ let baseUrl;
19
+ if (product === 'sms') {
20
+ baseUrl = `${SMS_REGIONS[region]}/xms/v1/${options.projectId}`;
21
+ }
22
+ else {
23
+ baseUrl = `${PRODUCT_URLS[product]}/v1/projects/${options.projectId}`;
24
+ }
25
+ return {
26
+ baseUrl,
27
+ headers: {
28
+ 'Authorization': `Basic ${credentials}`,
29
+ 'Content-Type': 'application/json',
30
+ },
31
+ timeout: 30 * 1000,
32
+ retry: {
33
+ maxAttempts: 3,
34
+ backoff: 'exponential',
35
+ delay: 1000,
36
+ statusCodes: [408, 429, 500, 502, 503, 504]
37
+ }
38
+ };
39
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "recker",
3
- "version": "1.0.16",
3
+ "version": "1.0.17-next.9570ed5",
4
4
  "description": "AI & DevX focused HTTP client for Node.js 18+",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",