@signaliz/sdk 1.0.22 → 1.0.24
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.
- package/README.md +20 -1
- package/dist/{chunk-UBQDPJGW.mjs → chunk-GWTSOG6D.mjs} +27 -7
- package/dist/index.d.mts +10 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +27 -7
- package/dist/index.mjs +1 -1
- package/dist/mcp-config.js +27 -7
- package/dist/mcp-config.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,6 +23,8 @@ const signaliz = new Signaliz({
|
|
|
23
23
|
const found = await signaliz.findEmail({
|
|
24
24
|
companyDomain: 'example.com',
|
|
25
25
|
fullName: 'Jane Doe',
|
|
26
|
+
// Optional: bypass cached email and verification data for a fresh-provider run.
|
|
27
|
+
skipCache: true,
|
|
26
28
|
});
|
|
27
29
|
|
|
28
30
|
const verified = await signaliz.verifyEmail(found.email!);
|
|
@@ -32,12 +34,24 @@ const signals = await signaliz.enrichCompanySignals({
|
|
|
32
34
|
researchPrompt: 'expansion priorities',
|
|
33
35
|
});
|
|
34
36
|
|
|
37
|
+
// Persist a no-wait run ID and resume it later without duplicate spend.
|
|
38
|
+
const queuedSignals = await signaliz.enrichCompanySignals({
|
|
39
|
+
companyDomain: 'example.com',
|
|
40
|
+
waitForResult: false,
|
|
41
|
+
});
|
|
42
|
+
const resumedSignals = await signaliz.enrichCompanySignals({
|
|
43
|
+
signalRunId: queuedSignals.signalRunId,
|
|
44
|
+
});
|
|
45
|
+
|
|
35
46
|
const copy = await signaliz.signalToCopy({
|
|
36
47
|
companyDomain: 'example.com',
|
|
37
48
|
personName: 'Jane Doe',
|
|
38
49
|
title: 'VP Sales',
|
|
39
50
|
campaignOffer: 'pipeline intelligence',
|
|
40
51
|
researchPrompt: 'expansion priorities',
|
|
52
|
+
// Cache-first and shallow by default; opt into either behavior explicitly.
|
|
53
|
+
skipCache: false,
|
|
54
|
+
enableDeepSearch: false,
|
|
41
55
|
});
|
|
42
56
|
```
|
|
43
57
|
|
|
@@ -54,11 +68,16 @@ const copyBatch = await signaliz.createSignalCopyBatch(copyRequests, { concurren
|
|
|
54
68
|
|
|
55
69
|
Each batch accepts up to 5,000 items. Company Signal Enrichment transparently
|
|
56
70
|
resumes long-running research through the same `/company-signals` endpoint;
|
|
57
|
-
callers never need an internal Trigger.dev status URL.
|
|
71
|
+
callers never need an internal Trigger.dev status URL. The SDK follows the
|
|
72
|
+
server's adaptive polling hints by default and still honors `pollIntervalMs`
|
|
73
|
+
when a caller explicitly overrides the cadence.
|
|
58
74
|
|
|
59
75
|
Company Signal Enrichment defaults `online` and `enableDeepSearch` to `true`
|
|
60
76
|
unless the caller explicitly disables them. Signal to Copy AI returns three
|
|
61
77
|
complete, evidence-backed email variations when supported signals are available.
|
|
78
|
+
Signal to Copy is cache-first and defaults `enableDeepSearch` to `false` so it
|
|
79
|
+
normally finishes within an agent turn; set `skipCache` or `enableDeepSearch`
|
|
80
|
+
only when fresh or deeper research is required.
|
|
62
81
|
Unclassified evidence is returned by signal enrichment but is not used to
|
|
63
82
|
generate outreach copy.
|
|
64
83
|
|
|
@@ -359,7 +359,8 @@ var Signaliz = class {
|
|
|
359
359
|
first_name: params.firstName,
|
|
360
360
|
last_name: params.lastName,
|
|
361
361
|
linkedin_url: params.linkedinUrl,
|
|
362
|
-
company_name: params.companyName
|
|
362
|
+
company_name: params.companyName,
|
|
363
|
+
skip_cache: params.skipCache
|
|
363
364
|
}));
|
|
364
365
|
const email = typeof data.email === "string" && data.email.trim() ? data.email.trim() : null;
|
|
365
366
|
const found = Boolean(email) && data.found !== false;
|
|
@@ -401,6 +402,7 @@ var Signaliz = class {
|
|
|
401
402
|
async enrichCompanySignals(params) {
|
|
402
403
|
const online = params.online ?? true;
|
|
403
404
|
const request = compact({
|
|
405
|
+
signal_run_id: params.signalRunId,
|
|
404
406
|
company_domain: params.companyDomain,
|
|
405
407
|
company_name: params.companyName,
|
|
406
408
|
research_prompt: params.researchPrompt,
|
|
@@ -412,15 +414,17 @@ var Signaliz = class {
|
|
|
412
414
|
enable_outreach_intelligence: params.enableOutreachIntelligence,
|
|
413
415
|
enable_predictive_intelligence: params.enablePredictiveIntelligence,
|
|
414
416
|
skip_cache: params.skipCache,
|
|
415
|
-
|
|
417
|
+
// REST always returns a resumable run instead of holding the connection;
|
|
418
|
+
// waitForResult controls this SDK's polling loop below.
|
|
419
|
+
wait_for_result: false,
|
|
416
420
|
max_wait_ms: params.maxWaitMs
|
|
417
421
|
});
|
|
418
422
|
let data = await this.client.post("api/v1/company-signals", request);
|
|
419
423
|
if (params.waitForResult !== false && data.run_id && isPendingSignalResponse(data)) {
|
|
420
424
|
const maxWaitMs = Math.max(1e3, params.maxWaitMs ?? 20 * 6e4);
|
|
421
|
-
const pollIntervalMs = Math.max(250, params.pollIntervalMs ?? 2e3);
|
|
422
425
|
const startedAt = Date.now();
|
|
423
426
|
while (Date.now() - startedAt < maxWaitMs) {
|
|
427
|
+
if (!await waitForNextSignalPoll(data, params.pollIntervalMs, startedAt, maxWaitMs)) break;
|
|
424
428
|
const status = await this.client.post("api/v1/company-signals", {
|
|
425
429
|
...request,
|
|
426
430
|
signal_run_id: data.run_id
|
|
@@ -436,7 +440,7 @@ var Signaliz = class {
|
|
|
436
440
|
data = status.output ?? status.result ?? status.data ?? status;
|
|
437
441
|
break;
|
|
438
442
|
}
|
|
439
|
-
|
|
443
|
+
data = status;
|
|
440
444
|
}
|
|
441
445
|
if (isPendingSignalResponse(data)) {
|
|
442
446
|
throw new Error(`Company signal enrichment ${data.run_id} did not complete within ${maxWaitMs}ms`);
|
|
@@ -444,6 +448,8 @@ var Signaliz = class {
|
|
|
444
448
|
}
|
|
445
449
|
return {
|
|
446
450
|
success: data.success ?? true,
|
|
451
|
+
status: data.status,
|
|
452
|
+
signalRunId: data.signal_run_id ?? data.run_id,
|
|
447
453
|
company: {
|
|
448
454
|
name: data.company?.name ?? params.companyName ?? null,
|
|
449
455
|
domain: data.company?.domain ?? params.companyDomain ?? null
|
|
@@ -475,15 +481,16 @@ var Signaliz = class {
|
|
|
475
481
|
title: params.title,
|
|
476
482
|
campaign_offer: params.campaignOffer,
|
|
477
483
|
research_prompt: params.researchPrompt,
|
|
478
|
-
signal_run_id: params.signalRunId
|
|
484
|
+
signal_run_id: params.signalRunId,
|
|
485
|
+
skip_cache: params.skipCache,
|
|
486
|
+
enable_deep_search: params.enableDeepSearch
|
|
479
487
|
});
|
|
480
488
|
let data = await this.client.post("api/v1/signal-to-copy", request);
|
|
481
489
|
if (params.waitForResult !== false && data.run_id && isPendingSignalResponse(data)) {
|
|
482
490
|
const maxWaitMs = Math.max(1e3, params.maxWaitMs ?? 20 * 6e4);
|
|
483
|
-
const pollIntervalMs = Math.max(250, params.pollIntervalMs ?? 2e3);
|
|
484
491
|
const startedAt = Date.now();
|
|
485
492
|
while (Date.now() - startedAt < maxWaitMs) {
|
|
486
|
-
await
|
|
493
|
+
if (!await waitForNextSignalPoll(data, params.pollIntervalMs, startedAt, maxWaitMs)) break;
|
|
487
494
|
data = await this.client.post("api/v1/signal-to-copy", {
|
|
488
495
|
...request,
|
|
489
496
|
signal_run_id: data.run_id
|
|
@@ -543,6 +550,19 @@ function isCompletedSignalRun(data) {
|
|
|
543
550
|
function isFailedSignalRun(data) {
|
|
544
551
|
return ["failed", "error", "cancelled", "canceled", "crashed", "timed_out"].includes(String(data.status || "").toLowerCase());
|
|
545
552
|
}
|
|
553
|
+
function signalPollDelayMs(data, override) {
|
|
554
|
+
if (override !== void 0) return Math.max(250, override);
|
|
555
|
+
const retryAfterMs = Number(data.retry_after_ms);
|
|
556
|
+
const nextPollSeconds = Number(data.next_poll_after_seconds);
|
|
557
|
+
const hinted = Number.isFinite(retryAfterMs) && retryAfterMs > 0 ? retryAfterMs : Number.isFinite(nextPollSeconds) && nextPollSeconds > 0 ? nextPollSeconds * 1e3 : 2e3;
|
|
558
|
+
return Math.min(6e4, Math.max(250, hinted));
|
|
559
|
+
}
|
|
560
|
+
async function waitForNextSignalPoll(data, override, startedAt, maxWaitMs) {
|
|
561
|
+
const remainingMs = maxWaitMs - (Date.now() - startedAt);
|
|
562
|
+
if (remainingMs <= 0) return false;
|
|
563
|
+
await sleep2(Math.min(signalPollDelayMs(data, override), remainingMs));
|
|
564
|
+
return Date.now() - startedAt < maxWaitMs;
|
|
565
|
+
}
|
|
546
566
|
function sleep2(ms) {
|
|
547
567
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
548
568
|
}
|
package/dist/index.d.mts
CHANGED
|
@@ -38,6 +38,8 @@ interface FindEmailParams {
|
|
|
38
38
|
lastName?: string;
|
|
39
39
|
linkedinUrl?: string;
|
|
40
40
|
companyName?: string;
|
|
41
|
+
/** Bypass cached email and verification data for a fresh-provider run. */
|
|
42
|
+
skipCache?: boolean;
|
|
41
43
|
}
|
|
42
44
|
interface FindEmailResult {
|
|
43
45
|
success: boolean;
|
|
@@ -63,6 +65,8 @@ interface VerifyEmailResult {
|
|
|
63
65
|
raw: Record<string, unknown>;
|
|
64
66
|
}
|
|
65
67
|
interface CompanySignalEnrichmentParams {
|
|
68
|
+
/** Resume an existing enrichment without creating another provider run. */
|
|
69
|
+
signalRunId?: string;
|
|
66
70
|
companyDomain?: string;
|
|
67
71
|
companyName?: string;
|
|
68
72
|
researchPrompt?: string;
|
|
@@ -93,6 +97,8 @@ interface CompanySignal {
|
|
|
93
97
|
}
|
|
94
98
|
interface CompanySignalEnrichmentResult {
|
|
95
99
|
success: boolean;
|
|
100
|
+
status?: string;
|
|
101
|
+
signalRunId?: string;
|
|
96
102
|
company: {
|
|
97
103
|
name: string | null;
|
|
98
104
|
domain: string | null;
|
|
@@ -111,6 +117,10 @@ interface SignalToCopyParams {
|
|
|
111
117
|
campaignOffer: string;
|
|
112
118
|
researchPrompt?: string;
|
|
113
119
|
signalRunId?: string;
|
|
120
|
+
/** Bypass cached company signals and start fresh research. */
|
|
121
|
+
skipCache?: boolean;
|
|
122
|
+
/** Opt into slower deep research. Defaults to false. */
|
|
123
|
+
enableDeepSearch?: boolean;
|
|
114
124
|
waitForResult?: boolean;
|
|
115
125
|
maxWaitMs?: number;
|
|
116
126
|
pollIntervalMs?: number;
|
package/dist/index.d.ts
CHANGED
|
@@ -38,6 +38,8 @@ interface FindEmailParams {
|
|
|
38
38
|
lastName?: string;
|
|
39
39
|
linkedinUrl?: string;
|
|
40
40
|
companyName?: string;
|
|
41
|
+
/** Bypass cached email and verification data for a fresh-provider run. */
|
|
42
|
+
skipCache?: boolean;
|
|
41
43
|
}
|
|
42
44
|
interface FindEmailResult {
|
|
43
45
|
success: boolean;
|
|
@@ -63,6 +65,8 @@ interface VerifyEmailResult {
|
|
|
63
65
|
raw: Record<string, unknown>;
|
|
64
66
|
}
|
|
65
67
|
interface CompanySignalEnrichmentParams {
|
|
68
|
+
/** Resume an existing enrichment without creating another provider run. */
|
|
69
|
+
signalRunId?: string;
|
|
66
70
|
companyDomain?: string;
|
|
67
71
|
companyName?: string;
|
|
68
72
|
researchPrompt?: string;
|
|
@@ -93,6 +97,8 @@ interface CompanySignal {
|
|
|
93
97
|
}
|
|
94
98
|
interface CompanySignalEnrichmentResult {
|
|
95
99
|
success: boolean;
|
|
100
|
+
status?: string;
|
|
101
|
+
signalRunId?: string;
|
|
96
102
|
company: {
|
|
97
103
|
name: string | null;
|
|
98
104
|
domain: string | null;
|
|
@@ -111,6 +117,10 @@ interface SignalToCopyParams {
|
|
|
111
117
|
campaignOffer: string;
|
|
112
118
|
researchPrompt?: string;
|
|
113
119
|
signalRunId?: string;
|
|
120
|
+
/** Bypass cached company signals and start fresh research. */
|
|
121
|
+
skipCache?: boolean;
|
|
122
|
+
/** Opt into slower deep research. Defaults to false. */
|
|
123
|
+
enableDeepSearch?: boolean;
|
|
114
124
|
waitForResult?: boolean;
|
|
115
125
|
maxWaitMs?: number;
|
|
116
126
|
pollIntervalMs?: number;
|
package/dist/index.js
CHANGED
|
@@ -386,7 +386,8 @@ var Signaliz = class {
|
|
|
386
386
|
first_name: params.firstName,
|
|
387
387
|
last_name: params.lastName,
|
|
388
388
|
linkedin_url: params.linkedinUrl,
|
|
389
|
-
company_name: params.companyName
|
|
389
|
+
company_name: params.companyName,
|
|
390
|
+
skip_cache: params.skipCache
|
|
390
391
|
}));
|
|
391
392
|
const email = typeof data.email === "string" && data.email.trim() ? data.email.trim() : null;
|
|
392
393
|
const found = Boolean(email) && data.found !== false;
|
|
@@ -428,6 +429,7 @@ var Signaliz = class {
|
|
|
428
429
|
async enrichCompanySignals(params) {
|
|
429
430
|
const online = params.online ?? true;
|
|
430
431
|
const request = compact({
|
|
432
|
+
signal_run_id: params.signalRunId,
|
|
431
433
|
company_domain: params.companyDomain,
|
|
432
434
|
company_name: params.companyName,
|
|
433
435
|
research_prompt: params.researchPrompt,
|
|
@@ -439,15 +441,17 @@ var Signaliz = class {
|
|
|
439
441
|
enable_outreach_intelligence: params.enableOutreachIntelligence,
|
|
440
442
|
enable_predictive_intelligence: params.enablePredictiveIntelligence,
|
|
441
443
|
skip_cache: params.skipCache,
|
|
442
|
-
|
|
444
|
+
// REST always returns a resumable run instead of holding the connection;
|
|
445
|
+
// waitForResult controls this SDK's polling loop below.
|
|
446
|
+
wait_for_result: false,
|
|
443
447
|
max_wait_ms: params.maxWaitMs
|
|
444
448
|
});
|
|
445
449
|
let data = await this.client.post("api/v1/company-signals", request);
|
|
446
450
|
if (params.waitForResult !== false && data.run_id && isPendingSignalResponse(data)) {
|
|
447
451
|
const maxWaitMs = Math.max(1e3, params.maxWaitMs ?? 20 * 6e4);
|
|
448
|
-
const pollIntervalMs = Math.max(250, params.pollIntervalMs ?? 2e3);
|
|
449
452
|
const startedAt = Date.now();
|
|
450
453
|
while (Date.now() - startedAt < maxWaitMs) {
|
|
454
|
+
if (!await waitForNextSignalPoll(data, params.pollIntervalMs, startedAt, maxWaitMs)) break;
|
|
451
455
|
const status = await this.client.post("api/v1/company-signals", {
|
|
452
456
|
...request,
|
|
453
457
|
signal_run_id: data.run_id
|
|
@@ -463,7 +467,7 @@ var Signaliz = class {
|
|
|
463
467
|
data = status.output ?? status.result ?? status.data ?? status;
|
|
464
468
|
break;
|
|
465
469
|
}
|
|
466
|
-
|
|
470
|
+
data = status;
|
|
467
471
|
}
|
|
468
472
|
if (isPendingSignalResponse(data)) {
|
|
469
473
|
throw new Error(`Company signal enrichment ${data.run_id} did not complete within ${maxWaitMs}ms`);
|
|
@@ -471,6 +475,8 @@ var Signaliz = class {
|
|
|
471
475
|
}
|
|
472
476
|
return {
|
|
473
477
|
success: data.success ?? true,
|
|
478
|
+
status: data.status,
|
|
479
|
+
signalRunId: data.signal_run_id ?? data.run_id,
|
|
474
480
|
company: {
|
|
475
481
|
name: data.company?.name ?? params.companyName ?? null,
|
|
476
482
|
domain: data.company?.domain ?? params.companyDomain ?? null
|
|
@@ -502,15 +508,16 @@ var Signaliz = class {
|
|
|
502
508
|
title: params.title,
|
|
503
509
|
campaign_offer: params.campaignOffer,
|
|
504
510
|
research_prompt: params.researchPrompt,
|
|
505
|
-
signal_run_id: params.signalRunId
|
|
511
|
+
signal_run_id: params.signalRunId,
|
|
512
|
+
skip_cache: params.skipCache,
|
|
513
|
+
enable_deep_search: params.enableDeepSearch
|
|
506
514
|
});
|
|
507
515
|
let data = await this.client.post("api/v1/signal-to-copy", request);
|
|
508
516
|
if (params.waitForResult !== false && data.run_id && isPendingSignalResponse(data)) {
|
|
509
517
|
const maxWaitMs = Math.max(1e3, params.maxWaitMs ?? 20 * 6e4);
|
|
510
|
-
const pollIntervalMs = Math.max(250, params.pollIntervalMs ?? 2e3);
|
|
511
518
|
const startedAt = Date.now();
|
|
512
519
|
while (Date.now() - startedAt < maxWaitMs) {
|
|
513
|
-
await
|
|
520
|
+
if (!await waitForNextSignalPoll(data, params.pollIntervalMs, startedAt, maxWaitMs)) break;
|
|
514
521
|
data = await this.client.post("api/v1/signal-to-copy", {
|
|
515
522
|
...request,
|
|
516
523
|
signal_run_id: data.run_id
|
|
@@ -570,6 +577,19 @@ function isCompletedSignalRun(data) {
|
|
|
570
577
|
function isFailedSignalRun(data) {
|
|
571
578
|
return ["failed", "error", "cancelled", "canceled", "crashed", "timed_out"].includes(String(data.status || "").toLowerCase());
|
|
572
579
|
}
|
|
580
|
+
function signalPollDelayMs(data, override) {
|
|
581
|
+
if (override !== void 0) return Math.max(250, override);
|
|
582
|
+
const retryAfterMs = Number(data.retry_after_ms);
|
|
583
|
+
const nextPollSeconds = Number(data.next_poll_after_seconds);
|
|
584
|
+
const hinted = Number.isFinite(retryAfterMs) && retryAfterMs > 0 ? retryAfterMs : Number.isFinite(nextPollSeconds) && nextPollSeconds > 0 ? nextPollSeconds * 1e3 : 2e3;
|
|
585
|
+
return Math.min(6e4, Math.max(250, hinted));
|
|
586
|
+
}
|
|
587
|
+
async function waitForNextSignalPoll(data, override, startedAt, maxWaitMs) {
|
|
588
|
+
const remainingMs = maxWaitMs - (Date.now() - startedAt);
|
|
589
|
+
if (remainingMs <= 0) return false;
|
|
590
|
+
await sleep2(Math.min(signalPollDelayMs(data, override), remainingMs));
|
|
591
|
+
return Date.now() - startedAt < maxWaitMs;
|
|
592
|
+
}
|
|
573
593
|
function sleep2(ms) {
|
|
574
594
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
575
595
|
}
|
package/dist/index.mjs
CHANGED
package/dist/mcp-config.js
CHANGED
|
@@ -390,7 +390,8 @@ var Signaliz = class {
|
|
|
390
390
|
first_name: params.firstName,
|
|
391
391
|
last_name: params.lastName,
|
|
392
392
|
linkedin_url: params.linkedinUrl,
|
|
393
|
-
company_name: params.companyName
|
|
393
|
+
company_name: params.companyName,
|
|
394
|
+
skip_cache: params.skipCache
|
|
394
395
|
}));
|
|
395
396
|
const email = typeof data.email === "string" && data.email.trim() ? data.email.trim() : null;
|
|
396
397
|
const found = Boolean(email) && data.found !== false;
|
|
@@ -432,6 +433,7 @@ var Signaliz = class {
|
|
|
432
433
|
async enrichCompanySignals(params) {
|
|
433
434
|
const online = params.online ?? true;
|
|
434
435
|
const request = compact({
|
|
436
|
+
signal_run_id: params.signalRunId,
|
|
435
437
|
company_domain: params.companyDomain,
|
|
436
438
|
company_name: params.companyName,
|
|
437
439
|
research_prompt: params.researchPrompt,
|
|
@@ -443,15 +445,17 @@ var Signaliz = class {
|
|
|
443
445
|
enable_outreach_intelligence: params.enableOutreachIntelligence,
|
|
444
446
|
enable_predictive_intelligence: params.enablePredictiveIntelligence,
|
|
445
447
|
skip_cache: params.skipCache,
|
|
446
|
-
|
|
448
|
+
// REST always returns a resumable run instead of holding the connection;
|
|
449
|
+
// waitForResult controls this SDK's polling loop below.
|
|
450
|
+
wait_for_result: false,
|
|
447
451
|
max_wait_ms: params.maxWaitMs
|
|
448
452
|
});
|
|
449
453
|
let data = await this.client.post("api/v1/company-signals", request);
|
|
450
454
|
if (params.waitForResult !== false && data.run_id && isPendingSignalResponse(data)) {
|
|
451
455
|
const maxWaitMs = Math.max(1e3, params.maxWaitMs ?? 20 * 6e4);
|
|
452
|
-
const pollIntervalMs = Math.max(250, params.pollIntervalMs ?? 2e3);
|
|
453
456
|
const startedAt = Date.now();
|
|
454
457
|
while (Date.now() - startedAt < maxWaitMs) {
|
|
458
|
+
if (!await waitForNextSignalPoll(data, params.pollIntervalMs, startedAt, maxWaitMs)) break;
|
|
455
459
|
const status = await this.client.post("api/v1/company-signals", {
|
|
456
460
|
...request,
|
|
457
461
|
signal_run_id: data.run_id
|
|
@@ -467,7 +471,7 @@ var Signaliz = class {
|
|
|
467
471
|
data = status.output ?? status.result ?? status.data ?? status;
|
|
468
472
|
break;
|
|
469
473
|
}
|
|
470
|
-
|
|
474
|
+
data = status;
|
|
471
475
|
}
|
|
472
476
|
if (isPendingSignalResponse(data)) {
|
|
473
477
|
throw new Error(`Company signal enrichment ${data.run_id} did not complete within ${maxWaitMs}ms`);
|
|
@@ -475,6 +479,8 @@ var Signaliz = class {
|
|
|
475
479
|
}
|
|
476
480
|
return {
|
|
477
481
|
success: data.success ?? true,
|
|
482
|
+
status: data.status,
|
|
483
|
+
signalRunId: data.signal_run_id ?? data.run_id,
|
|
478
484
|
company: {
|
|
479
485
|
name: data.company?.name ?? params.companyName ?? null,
|
|
480
486
|
domain: data.company?.domain ?? params.companyDomain ?? null
|
|
@@ -506,15 +512,16 @@ var Signaliz = class {
|
|
|
506
512
|
title: params.title,
|
|
507
513
|
campaign_offer: params.campaignOffer,
|
|
508
514
|
research_prompt: params.researchPrompt,
|
|
509
|
-
signal_run_id: params.signalRunId
|
|
515
|
+
signal_run_id: params.signalRunId,
|
|
516
|
+
skip_cache: params.skipCache,
|
|
517
|
+
enable_deep_search: params.enableDeepSearch
|
|
510
518
|
});
|
|
511
519
|
let data = await this.client.post("api/v1/signal-to-copy", request);
|
|
512
520
|
if (params.waitForResult !== false && data.run_id && isPendingSignalResponse(data)) {
|
|
513
521
|
const maxWaitMs = Math.max(1e3, params.maxWaitMs ?? 20 * 6e4);
|
|
514
|
-
const pollIntervalMs = Math.max(250, params.pollIntervalMs ?? 2e3);
|
|
515
522
|
const startedAt = Date.now();
|
|
516
523
|
while (Date.now() - startedAt < maxWaitMs) {
|
|
517
|
-
await
|
|
524
|
+
if (!await waitForNextSignalPoll(data, params.pollIntervalMs, startedAt, maxWaitMs)) break;
|
|
518
525
|
data = await this.client.post("api/v1/signal-to-copy", {
|
|
519
526
|
...request,
|
|
520
527
|
signal_run_id: data.run_id
|
|
@@ -574,6 +581,19 @@ function isCompletedSignalRun(data) {
|
|
|
574
581
|
function isFailedSignalRun(data) {
|
|
575
582
|
return ["failed", "error", "cancelled", "canceled", "crashed", "timed_out"].includes(String(data.status || "").toLowerCase());
|
|
576
583
|
}
|
|
584
|
+
function signalPollDelayMs(data, override) {
|
|
585
|
+
if (override !== void 0) return Math.max(250, override);
|
|
586
|
+
const retryAfterMs = Number(data.retry_after_ms);
|
|
587
|
+
const nextPollSeconds = Number(data.next_poll_after_seconds);
|
|
588
|
+
const hinted = Number.isFinite(retryAfterMs) && retryAfterMs > 0 ? retryAfterMs : Number.isFinite(nextPollSeconds) && nextPollSeconds > 0 ? nextPollSeconds * 1e3 : 2e3;
|
|
589
|
+
return Math.min(6e4, Math.max(250, hinted));
|
|
590
|
+
}
|
|
591
|
+
async function waitForNextSignalPoll(data, override, startedAt, maxWaitMs) {
|
|
592
|
+
const remainingMs = maxWaitMs - (Date.now() - startedAt);
|
|
593
|
+
if (remainingMs <= 0) return false;
|
|
594
|
+
await sleep2(Math.min(signalPollDelayMs(data, override), remainingMs));
|
|
595
|
+
return Date.now() - startedAt < maxWaitMs;
|
|
596
|
+
}
|
|
577
597
|
function sleep2(ms) {
|
|
578
598
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
579
599
|
}
|
package/dist/mcp-config.mjs
CHANGED
package/package.json
CHANGED