@signaliz/cli 1.0.45 → 1.0.47
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 +6 -13
- package/dist/bin.js +26 -15
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -24,17 +24,12 @@ signaliz verify-email jane@example.com --dry-run --json
|
|
|
24
24
|
signaliz verify-email jane@example.com --skip-cache --no-wait --json
|
|
25
25
|
signaliz verify-email --verification-run-id run_... --json
|
|
26
26
|
signaliz company-signals --domain example.com --research-prompt "expansion priorities"
|
|
27
|
-
# Resume a queued run in a later agent/process without duplicate spend
|
|
28
|
-
signaliz company-signals --signal-run-id run_...
|
|
29
27
|
signaliz signal-to-copy \
|
|
30
28
|
--company-domain example.com \
|
|
31
29
|
--person-name "Jane Doe" \
|
|
32
30
|
--title "VP Sales" \
|
|
33
31
|
--campaign-offer "pipeline intelligence"
|
|
34
32
|
|
|
35
|
-
# Resume a queued copy request with the returned ID only
|
|
36
|
-
signaliz signal-to-copy --signal-run-id copy_... --json
|
|
37
|
-
|
|
38
33
|
# Force fresh signals or opt into slower deep research only when needed
|
|
39
34
|
signaliz signal-to-copy --company-domain example.com --person-name "Jane Doe" \
|
|
40
35
|
--title "VP Sales" --campaign-offer "pipeline intelligence" --skip-cache --deep-search
|
|
@@ -73,7 +68,7 @@ Failed result lines preserve `errorCode`, `retryEligible`, and
|
|
|
73
68
|
`retryAfterSeconds` when the API supplies recovery guidance.
|
|
74
69
|
|
|
75
70
|
If a single request or batch submission response is lost, rerun the same
|
|
76
|
-
command with `--idempotency-key <key>` to recover the original request or job
|
|
71
|
+
command with `--idempotency-key <key>` to recover the original request or supported email job
|
|
77
72
|
without duplicate work. Add `--dry-run` to any product command, including one
|
|
78
73
|
using `--input`, to receive a conservative credit ceiling without provider
|
|
79
74
|
calls, jobs, writes, or spend.
|
|
@@ -82,13 +77,11 @@ Batch input is capped at 5,000 records, concurrency is bounded to `1-50`, input
|
|
|
82
77
|
order is preserved, and a failed item does not abort successful items.
|
|
83
78
|
Exact duplicate tasks are single-flighted across the full input before
|
|
84
79
|
transport. Find Email and Verify Email inputs larger than 25 use one cache-aware
|
|
85
|
-
recoverable REST job with 500-row result pages.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
deep-search requests keep the 25-row path. Signal to Copy also shares company
|
|
91
|
-
research across recipients.
|
|
80
|
+
recoverable REST job with 500-row result pages. Company Signal Enrichment and
|
|
81
|
+
Signal to Copy inputs larger than 25 are chunked client-side into synchronous
|
|
82
|
+
requests of at most 25; the CLI waits for every chunk and emits only complete
|
|
83
|
+
results or terminal per-row errors. Signal to Copy also shares company research
|
|
84
|
+
across recipients.
|
|
92
85
|
|
|
93
86
|
Connection commands are limited to access infrastructure:
|
|
94
87
|
|
package/dist/bin.js
CHANGED
|
@@ -14,12 +14,12 @@ var HELP = `Signaliz CLI
|
|
|
14
14
|
Four product commands:
|
|
15
15
|
signaliz find-email --company-domain example.com --full-name "Jane Doe" [--skip-cache]
|
|
16
16
|
signaliz verify-email [jane@example.com] [--verification-run-id run_...] [--no-wait] [--max-wait-ms 600000]
|
|
17
|
-
signaliz company-signals --domain example.com [--research-prompt "..."] [--no-summary] [--max-wait-ms
|
|
18
|
-
signaliz company-signals --signal-run-id run_...
|
|
17
|
+
signaliz company-signals --domain example.com [--research-prompt "..."] [--search-mode fast|balanced|coverage] [--no-summary] [--max-wait-ms 120000]
|
|
18
|
+
signaliz company-signals --signal-run-id run_... Read a completed run without duplicate spend
|
|
19
19
|
signaliz signal-to-copy --company-domain example.com --person-name "Jane Doe" \\
|
|
20
20
|
--title "VP Sales" --campaign-offer "pipeline intelligence" [--signal-run-id run_...] \\
|
|
21
|
-
[--skip-cache] [--deep-search] [--max-wait-ms
|
|
22
|
-
signaliz signal-to-copy --signal-run-id copy_...
|
|
21
|
+
[--skip-cache] [--deep-search] [--max-wait-ms 120000]
|
|
22
|
+
signaliz signal-to-copy --signal-run-id copy_... Reuse a completed signal run
|
|
23
23
|
|
|
24
24
|
Access and connection:
|
|
25
25
|
signaliz auth login
|
|
@@ -41,6 +41,8 @@ Common flags:
|
|
|
41
41
|
--concurrency <1-50> Simultaneous API requests for batch input (default: 10)
|
|
42
42
|
--idempotency-key <key> Reuse after an ambiguous response to recover the same request or job
|
|
43
43
|
--dry-run Return a no-spend plan without provider calls, jobs, or writes
|
|
44
|
+
|
|
45
|
+
Company Signals and Signal to Copy always wait for complete results or terminal errors.
|
|
44
46
|
`;
|
|
45
47
|
function loadConfig() {
|
|
46
48
|
if (!(0, import_node_fs.existsSync)(CONFIG_FILE)) return {};
|
|
@@ -85,6 +87,11 @@ function csvFlag(name) {
|
|
|
85
87
|
const value = flag(name);
|
|
86
88
|
return value?.split(",").map((item) => item.trim()).filter(Boolean);
|
|
87
89
|
}
|
|
90
|
+
function companySignalSearchMode(value) {
|
|
91
|
+
if (value === void 0 || value === null || value === "") return void 0;
|
|
92
|
+
if (value === "fast" || value === "balanced" || value === "coverage") return value;
|
|
93
|
+
fail("--search-mode must be fast, balanced, or coverage");
|
|
94
|
+
}
|
|
88
95
|
function readBatchInput() {
|
|
89
96
|
const path = flag("input");
|
|
90
97
|
if (!path) return null;
|
|
@@ -122,6 +129,11 @@ function batchOptions() {
|
|
|
122
129
|
compactDuplicates: !hasFlag("expand-duplicates")
|
|
123
130
|
};
|
|
124
131
|
}
|
|
132
|
+
function rejectAsyncSignalFlags() {
|
|
133
|
+
if (hasFlag("no-wait") || hasFlag("poll-interval-ms")) {
|
|
134
|
+
fail("Company Signals and Signal to Copy are always synchronous; --no-wait and --poll-interval-ms are not supported.");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
125
137
|
function batchOutput(value) {
|
|
126
138
|
if (hasFlag("jsonl")) {
|
|
127
139
|
for (const result of value.results) {
|
|
@@ -350,14 +362,17 @@ async function verifyEmail(args) {
|
|
|
350
362
|
`);
|
|
351
363
|
return;
|
|
352
364
|
}
|
|
353
|
-
process.stdout.write(`${result.email}: ${result.
|
|
365
|
+
process.stdout.write(`${result.email}: ${result.verifiedForSending ? "verified for sending" : "not verified for sending"}
|
|
354
366
|
`);
|
|
355
367
|
process.stdout.write(`Valid: ${result.isValid}
|
|
368
|
+
Deliverable: ${result.isDeliverable}
|
|
356
369
|
Catch-all: ${result.isCatchAll}
|
|
370
|
+
Verdict: ${result.verificationVerdict}
|
|
357
371
|
`);
|
|
358
372
|
});
|
|
359
373
|
}
|
|
360
374
|
async function companySignals() {
|
|
375
|
+
rejectAsyncSignalFlags();
|
|
361
376
|
const rows = readBatchInput();
|
|
362
377
|
if (rows) {
|
|
363
378
|
const requests = rows.map((value) => {
|
|
@@ -373,13 +388,12 @@ async function companySignals() {
|
|
|
373
388
|
lookbackDays: row.lookbackDays || row.lookback_days || numberFlag("lookback-days"),
|
|
374
389
|
online,
|
|
375
390
|
enableDeepSearch: row.enableDeepSearch ?? row.enable_deep_search ?? (online && !hasFlag("shallow")),
|
|
391
|
+
searchMode: companySignalSearchMode(row.searchMode ?? row.search_mode ?? flag("search-mode")),
|
|
376
392
|
includeSummary: row.includeSummary ?? row.include_summary ?? !hasFlag("no-summary"),
|
|
377
393
|
enableOutreachIntelligence: row.enableOutreachIntelligence ?? row.enable_outreach_intelligence,
|
|
378
394
|
enablePredictiveIntelligence: row.enablePredictiveIntelligence ?? row.enable_predictive_intelligence,
|
|
379
395
|
skipCache: row.skipCache ?? row.skip_cache ?? hasFlag("skip-cache"),
|
|
380
|
-
|
|
381
|
-
maxWaitMs: row.maxWaitMs || row.max_wait_ms || numberFlag("max-wait-ms"),
|
|
382
|
-
pollIntervalMs: row.pollIntervalMs || row.poll_interval_ms || numberFlag("poll-interval-ms")
|
|
396
|
+
maxWaitMs: row.maxWaitMs || row.max_wait_ms || numberFlag("max-wait-ms")
|
|
383
397
|
};
|
|
384
398
|
});
|
|
385
399
|
if (hasFlag("dry-run")) {
|
|
@@ -405,13 +419,12 @@ async function companySignals() {
|
|
|
405
419
|
lookbackDays: numberFlag("lookback-days"),
|
|
406
420
|
online: !hasFlag("offline"),
|
|
407
421
|
enableDeepSearch: !hasFlag("offline") && !hasFlag("shallow"),
|
|
422
|
+
searchMode: companySignalSearchMode(flag("search-mode")),
|
|
408
423
|
includeSummary: !hasFlag("no-summary"),
|
|
409
424
|
enableOutreachIntelligence: hasFlag("outreach-intelligence") || void 0,
|
|
410
425
|
enablePredictiveIntelligence: hasFlag("predictive-intelligence") || void 0,
|
|
411
426
|
skipCache: hasFlag("skip-cache"),
|
|
412
|
-
waitForResult: !hasFlag("no-wait"),
|
|
413
427
|
maxWaitMs: numberFlag("max-wait-ms"),
|
|
414
|
-
pollIntervalMs: numberFlag("poll-interval-ms"),
|
|
415
428
|
idempotencyKey: flag("idempotency-key")
|
|
416
429
|
};
|
|
417
430
|
if (hasFlag("dry-run")) {
|
|
@@ -431,6 +444,7 @@ Signals: ${result.signalCount}
|
|
|
431
444
|
});
|
|
432
445
|
}
|
|
433
446
|
async function signalToCopy() {
|
|
447
|
+
rejectAsyncSignalFlags();
|
|
434
448
|
const rows = readBatchInput();
|
|
435
449
|
if (rows) {
|
|
436
450
|
const requests = rows.map((value) => {
|
|
@@ -444,9 +458,7 @@ async function signalToCopy() {
|
|
|
444
458
|
signalRunId: row.signalRunId || row.signal_run_id,
|
|
445
459
|
skipCache: row.skipCache ?? row.skip_cache ?? hasFlag("skip-cache"),
|
|
446
460
|
enableDeepSearch: row.enableDeepSearch ?? row.enable_deep_search ?? hasFlag("deep-search"),
|
|
447
|
-
|
|
448
|
-
maxWaitMs: row.maxWaitMs || row.max_wait_ms || numberFlag("max-wait-ms"),
|
|
449
|
-
pollIntervalMs: row.pollIntervalMs || row.poll_interval_ms || numberFlag("poll-interval-ms")
|
|
461
|
+
maxWaitMs: row.maxWaitMs || row.max_wait_ms || numberFlag("max-wait-ms")
|
|
450
462
|
};
|
|
451
463
|
});
|
|
452
464
|
if (hasFlag("dry-run")) {
|
|
@@ -476,7 +488,6 @@ async function signalToCopy() {
|
|
|
476
488
|
skipCache: hasFlag("skip-cache"),
|
|
477
489
|
enableDeepSearch: hasFlag("deep-search"),
|
|
478
490
|
maxWaitMs: numberFlag("max-wait-ms"),
|
|
479
|
-
pollIntervalMs: numberFlag("poll-interval-ms"),
|
|
480
491
|
idempotencyKey: flag("idempotency-key")
|
|
481
492
|
};
|
|
482
493
|
if (hasFlag("dry-run")) {
|
|
@@ -579,7 +590,7 @@ main().catch((error) => {
|
|
|
579
590
|
process.stdout.write(`${stringifyMachineJson({
|
|
580
591
|
success: false,
|
|
581
592
|
error: "product_request_failed",
|
|
582
|
-
error_code: signalizError?.code || "CLI_ERROR",
|
|
593
|
+
error_code: signalizError?.code || (error instanceof RangeError ? "INPUT_001" : "CLI_ERROR"),
|
|
583
594
|
message,
|
|
584
595
|
retry_eligible: signalizError?.isRetryable ?? false,
|
|
585
596
|
...signalizError?.retryAfter !== void 0 ? {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signaliz/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.47",
|
|
4
4
|
"description": "Signaliz CLI for Find Email, Verify Email, Company Signal Enrichment, and Signal to Copy AI.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"signaliz": "dist/bin.js"
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"node": ">=18"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@signaliz/sdk": "^1.0.
|
|
31
|
+
"@signaliz/sdk": "^1.0.49"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"tsup": "^8.0.0",
|