@nivaro/react 0.1.286 → 0.1.288
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/dist/full.css +1 -1
- package/dist/index.d.ts +594 -0
- package/dist/index.js +50511 -45522
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1211,6 +1211,8 @@ export declare function deriveGroupKey<T extends QueueGroupingRow>(row: T, attri
|
|
|
1211
1211
|
|
|
1212
1212
|
export declare function describeCron(cron: string): string;
|
|
1213
1213
|
|
|
1214
|
+
declare type DetailTab = 'calls' | 'submissions' | 'obligations' | 'contracts';
|
|
1215
|
+
|
|
1214
1216
|
declare type DigestFrequency = 'instant' | 'daily' | 'weekly';
|
|
1215
1217
|
|
|
1216
1218
|
declare type DimensionCascadeRule = {
|
|
@@ -1321,6 +1323,33 @@ export declare function ErpFailureBanner({ collection, itemId }: {
|
|
|
1321
1323
|
itemId: string;
|
|
1322
1324
|
}): JSX.Element | null;
|
|
1323
1325
|
|
|
1326
|
+
/**
|
|
1327
|
+
* One outbound submission — status, endpoint, reference, and on expand the
|
|
1328
|
+
* stored request/response plus every attempt. Shared by the record header's
|
|
1329
|
+
* External requests dialog and the Integrations console's partner detail.
|
|
1330
|
+
*/
|
|
1331
|
+
export declare interface ErpSubmission {
|
|
1332
|
+
id: number;
|
|
1333
|
+
external_api: number | null;
|
|
1334
|
+
external_api_name?: string | null;
|
|
1335
|
+
external_ref: string | null;
|
|
1336
|
+
status: string;
|
|
1337
|
+
attempts: number;
|
|
1338
|
+
last_error: string | null;
|
|
1339
|
+
endpoint_path: string | null;
|
|
1340
|
+
payload: unknown;
|
|
1341
|
+
response: unknown;
|
|
1342
|
+
created_at: string;
|
|
1343
|
+
updated_at: string;
|
|
1344
|
+
collection: string;
|
|
1345
|
+
item: string;
|
|
1346
|
+
/** The record's friendly (human-facing) id — present only where the
|
|
1347
|
+
* caller batch-resolved it (the partner detail's cross-record listing).
|
|
1348
|
+
* A record page hosting its OWN External requests dialog already IS that
|
|
1349
|
+
* record, so it never needs this badge and doesn't send it. */
|
|
1350
|
+
record_label?: string;
|
|
1351
|
+
}
|
|
1352
|
+
|
|
1324
1353
|
export declare interface ErrorReplayLink {
|
|
1325
1354
|
recording_id: string;
|
|
1326
1355
|
/** Milliseconds into the recording where the error happened. Null for
|
|
@@ -1358,6 +1387,37 @@ export declare interface EvaluateOptions {
|
|
|
1358
1387
|
missing?: 'zero' | 'null';
|
|
1359
1388
|
}
|
|
1360
1389
|
|
|
1390
|
+
/** Which way an integration event travels: a partner calling in, a push we
|
|
1391
|
+
* sent out, or a poll we made of the partner. */
|
|
1392
|
+
declare type EventDirection = 'in' | 'out' | 'poll';
|
|
1393
|
+
|
|
1394
|
+
/**
|
|
1395
|
+
* One integration event opened into its full chain: the call, cron, import
|
|
1396
|
+
* or feed that started it, every write and transition it caused, the flows
|
|
1397
|
+
* that ran and the partner pushes that went out — as a tree. Opens on the
|
|
1398
|
+
* first failure, expanded and scrolled to.
|
|
1399
|
+
*/
|
|
1400
|
+
export declare function EventPathSheet({ target, event, onClose, onOpenRecord, onOpenEvent }: EventPathSheetProps): JSX.Element | null;
|
|
1401
|
+
|
|
1402
|
+
export declare interface EventPathSheetProps {
|
|
1403
|
+
/** An event (`source` + `id`, optionally read through its `record`), or a
|
|
1404
|
+
* chain opened directly by id — where a replay link leads. */
|
|
1405
|
+
target: IntegrationEventPathTarget | null;
|
|
1406
|
+
event?: {
|
|
1407
|
+
label?: string | null;
|
|
1408
|
+
item_label?: string | null;
|
|
1409
|
+
} | null;
|
|
1410
|
+
onClose: () => void;
|
|
1411
|
+
onOpenRecord?: (collection: string, id: string) => void;
|
|
1412
|
+
/** Replay links — the chain this one replayed, or a replay of it. The host
|
|
1413
|
+
* swaps the sheet's target to `{ chainId }`. Absent = the links read as text. */
|
|
1414
|
+
onOpenEvent?: (target: {
|
|
1415
|
+
chainId: string;
|
|
1416
|
+
}) => void;
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
declare type EventStatus = 'ok' | 'error' | 'info';
|
|
1420
|
+
|
|
1361
1421
|
export declare type ExprNode = {
|
|
1362
1422
|
kind: 'number';
|
|
1363
1423
|
value: number;
|
|
@@ -1618,6 +1678,16 @@ declare interface FilterOptionSpec {
|
|
|
1618
1678
|
* (ids → names), ≥/≤ for ranges, first two entries + count for multiselects. */
|
|
1619
1679
|
export declare function filterValueDisplay(def: FilterDef, value: string | string[]): string;
|
|
1620
1680
|
|
|
1681
|
+
export declare function FirefightView({ onOpenRecord, onJumpTab, focusSignal }: FirefightViewProps): JSX.Element;
|
|
1682
|
+
|
|
1683
|
+
export declare interface FirefightViewProps {
|
|
1684
|
+
onOpenRecord?: (collection: string, id: string) => void;
|
|
1685
|
+
/** Move to another console tab, carrying context (e.g. `{ apiId }`). */
|
|
1686
|
+
onJumpTab?: (tab: string, context?: Record<string, unknown>) => void;
|
|
1687
|
+
/** Expand this signal on first load (a notification deep link). */
|
|
1688
|
+
focusSignal?: string;
|
|
1689
|
+
}
|
|
1690
|
+
|
|
1621
1691
|
export declare function FirstLoginChecklist({ profileUrl }: {
|
|
1622
1692
|
profileUrl?: string;
|
|
1623
1693
|
}): JSX.Element | null;
|
|
@@ -1973,6 +2043,11 @@ export declare interface ImportConsoleProps {
|
|
|
1973
2043
|
|
|
1974
2044
|
export declare type ImportConsoleTab = 'runs' | 'collection' | 'definitions';
|
|
1975
2045
|
|
|
2046
|
+
/** The instance-wide default cadence — header of the imports table. */
|
|
2047
|
+
export declare function ImportDefaultCadenceControl({ className }: {
|
|
2048
|
+
className?: string;
|
|
2049
|
+
}): JSX.Element;
|
|
2050
|
+
|
|
1976
2051
|
export declare interface ImportDefinition {
|
|
1977
2052
|
id: number;
|
|
1978
2053
|
key: string;
|
|
@@ -2044,6 +2119,32 @@ export declare function ImportFromFileButton({ collection, templateFilter, getLa
|
|
|
2044
2119
|
compact?: boolean;
|
|
2045
2120
|
}): JSX.Element | null;
|
|
2046
2121
|
|
|
2122
|
+
declare interface ImportHealth {
|
|
2123
|
+
rows: ImportHealthRow[];
|
|
2124
|
+
default_hours: number;
|
|
2125
|
+
}
|
|
2126
|
+
|
|
2127
|
+
/**
|
|
2128
|
+
* Per-import staleness — how often each staged import is expected to succeed
|
|
2129
|
+
* before it counts as stale. ONE store (the stale-import signal's settings:
|
|
2130
|
+
* `default_hours` and `cadence_hours:<import key>`, 0 = not monitored) and
|
|
2131
|
+
* ONE query key, so the Import Console and the Integrations console always
|
|
2132
|
+
* show the same value: an edit in either refreshes both.
|
|
2133
|
+
*/
|
|
2134
|
+
export declare interface ImportHealthRow {
|
|
2135
|
+
key: string;
|
|
2136
|
+
label: string;
|
|
2137
|
+
is_active: boolean;
|
|
2138
|
+
last_status: string | null;
|
|
2139
|
+
last_run_at: string | null;
|
|
2140
|
+
last_ok_at: string | null;
|
|
2141
|
+
failures7d: number;
|
|
2142
|
+
/** Expected hours between successes; 0 when not monitored or dormant. */
|
|
2143
|
+
cadence_hours: number;
|
|
2144
|
+
cadence_source: 'default' | 'override' | 'excluded' | 'dormant';
|
|
2145
|
+
stale: boolean;
|
|
2146
|
+
}
|
|
2147
|
+
|
|
2047
2148
|
declare type ImportIssue = ImportParseResponse['issues'][number];
|
|
2048
2149
|
|
|
2049
2150
|
export declare function ImportIssuesPanel({ issues, onDismiss }: {
|
|
@@ -2145,6 +2246,22 @@ export declare interface ImportRun {
|
|
|
2145
2246
|
/** Shared types for the Import Console (`/api/staged-imports`). */
|
|
2146
2247
|
export declare type ImportRunStatus = 'queued' | 'running' | 'completed' | 'error' | 'canceled';
|
|
2147
2248
|
|
|
2249
|
+
/** The chip a definitions list shows beside each import. */
|
|
2250
|
+
export declare function ImportStalenessChip({ importKey }: {
|
|
2251
|
+
importKey: string;
|
|
2252
|
+
}): JSX.Element | null;
|
|
2253
|
+
|
|
2254
|
+
export declare function ImportStalenessControl({ importKey, label, compact, className }: ImportStalenessControlProps): JSX.Element;
|
|
2255
|
+
|
|
2256
|
+
export declare interface ImportStalenessControlProps {
|
|
2257
|
+
/** The import definition's key; absent for a definition that isn't saved yet. */
|
|
2258
|
+
importKey?: string | null;
|
|
2259
|
+
label?: string;
|
|
2260
|
+
/** Table-cell size: the state opens its editor in a popover beside it. */
|
|
2261
|
+
compact?: boolean;
|
|
2262
|
+
className?: string;
|
|
2263
|
+
}
|
|
2264
|
+
|
|
2148
2265
|
/** Live queue depth is never windowed; the rest respects `window_days`. */
|
|
2149
2266
|
export declare interface ImportStats {
|
|
2150
2267
|
window_days: number;
|
|
@@ -2190,6 +2307,19 @@ export declare function InboundCallersView({ hours: initialHours }: {
|
|
|
2190
2307
|
hours?: number;
|
|
2191
2308
|
}): JSX.Element;
|
|
2192
2309
|
|
|
2310
|
+
/**
|
|
2311
|
+
* Inbound: health first — the host's own live queue (an ingest backlog, say), then whether
|
|
2312
|
+
* scheduled imports are arriving on time — and investigation last, since who
|
|
2313
|
+
* called in and exactly what they sent is what you reach for once something
|
|
2314
|
+
* above already looks wrong, not on every visit.
|
|
2315
|
+
*/
|
|
2316
|
+
export declare function InboundView({ extra }: InboundViewProps): JSX.Element;
|
|
2317
|
+
|
|
2318
|
+
export declare interface InboundViewProps {
|
|
2319
|
+
/** Host content rendered after the shared sections (a deployment's own queues). */
|
|
2320
|
+
extra?: ReactNode;
|
|
2321
|
+
}
|
|
2322
|
+
|
|
2193
2323
|
export declare function InlineTableField({ relatedCollection, manyField, parentId, parentCollection, layoutId, showRowRevisions, rowComments, allowRevisionRestore, saveMode, showLineNumbers, enableReorder, parentCascades, rowRules, columnPresets, defaultPreset, drawerRelations, parentContextFields, uniqueBy, sortField, sortDir, sectionGroupBy, freezeFirstColumn, rowFilter, rowDefaults, allocateDrawer, autoAllocate, rowBulkActions, uploadTemplate, rowMatchPanel, lineSla, rowLints, stats, compareSeries, sumCap, spreadRemaining, submissionErrors, prefillParentId, parentFieldKey, readOnly, emptyLabel, editorMode }: {
|
|
2194
2324
|
relatedCollection: string;
|
|
2195
2325
|
manyField: string;
|
|
@@ -2288,6 +2418,12 @@ declare interface InputBinding {
|
|
|
2288
2418
|
binding_value: string;
|
|
2289
2419
|
}
|
|
2290
2420
|
|
|
2421
|
+
export declare type IntegrationActionResult = {
|
|
2422
|
+
key: string;
|
|
2423
|
+
ok: boolean;
|
|
2424
|
+
message: string;
|
|
2425
|
+
};
|
|
2426
|
+
|
|
2291
2427
|
export declare function IntegrationDots({ rows, className }: IntegrationDotsProps): JSX.Element;
|
|
2292
2428
|
|
|
2293
2429
|
export declare interface IntegrationDotsProps {
|
|
@@ -2298,6 +2434,63 @@ export declare interface IntegrationDotsProps {
|
|
|
2298
2434
|
className?: string;
|
|
2299
2435
|
}
|
|
2300
2436
|
|
|
2437
|
+
/**
|
|
2438
|
+
* One entry of the integration events feed. The cross-record feed carries
|
|
2439
|
+
* `provider`; the per-record feed (GET /integration-events/record/...) carries
|
|
2440
|
+
* `source` instead — read `provider ?? source` for the source id.
|
|
2441
|
+
*/
|
|
2442
|
+
declare interface IntegrationEvent {
|
|
2443
|
+
id: string | number;
|
|
2444
|
+
label: string;
|
|
2445
|
+
text: string;
|
|
2446
|
+
user?: string | null;
|
|
2447
|
+
created_at: string;
|
|
2448
|
+
context?: string | null;
|
|
2449
|
+
/** Null when the event concerns no single record (a whole import, a poll). */
|
|
2450
|
+
collection: string | null;
|
|
2451
|
+
item_id: string | null;
|
|
2452
|
+
item_label?: string | null;
|
|
2453
|
+
provider?: string;
|
|
2454
|
+
source?: string;
|
|
2455
|
+
direction?: EventDirection;
|
|
2456
|
+
chain_id?: string | null;
|
|
2457
|
+
/** How many records the event touched, when it is more than one. */
|
|
2458
|
+
record_count?: number;
|
|
2459
|
+
partner?: string | null;
|
|
2460
|
+
caller?: string | null;
|
|
2461
|
+
replayable?: boolean;
|
|
2462
|
+
status?: EventStatus | null;
|
|
2463
|
+
}
|
|
2464
|
+
|
|
2465
|
+
export declare interface IntegrationEventPath {
|
|
2466
|
+
root: IntegrationPathNode;
|
|
2467
|
+
mode: 'exact' | 'inferred';
|
|
2468
|
+
truncated: boolean;
|
|
2469
|
+
step_count: number;
|
|
2470
|
+
/** Key of the first failed step, if any. */
|
|
2471
|
+
first_failure: string | null;
|
|
2472
|
+
replay_of: string | null;
|
|
2473
|
+
replayed_as: string[];
|
|
2474
|
+
/** Steps left out because the viewer may not read their records. */
|
|
2475
|
+
hidden_steps?: number;
|
|
2476
|
+
warnings: string[];
|
|
2477
|
+
}
|
|
2478
|
+
|
|
2479
|
+
/** Which event to open a path for. With `record`, the path is read through
|
|
2480
|
+
* the record-scoped route (any user who can read the record); without, the
|
|
2481
|
+
* admin console route. `{ chainId }` opens one chain directly — what a
|
|
2482
|
+
* replay link carries (admin route). */
|
|
2483
|
+
export declare type IntegrationEventPathTarget = {
|
|
2484
|
+
source: string;
|
|
2485
|
+
id: string;
|
|
2486
|
+
record?: {
|
|
2487
|
+
collection: string;
|
|
2488
|
+
item: string;
|
|
2489
|
+
};
|
|
2490
|
+
} | {
|
|
2491
|
+
chainId: string;
|
|
2492
|
+
};
|
|
2493
|
+
|
|
2301
2494
|
export declare function IntegrationObligationsView({ api, className }: IntegrationObligationsViewProps): JSX.Element;
|
|
2302
2495
|
|
|
2303
2496
|
export declare interface IntegrationObligationsViewProps {
|
|
@@ -2307,6 +2500,123 @@ export declare interface IntegrationObligationsViewProps {
|
|
|
2307
2500
|
className?: string;
|
|
2308
2501
|
}
|
|
2309
2502
|
|
|
2503
|
+
export declare interface IntegrationPartnerCard {
|
|
2504
|
+
id: number;
|
|
2505
|
+
name: string;
|
|
2506
|
+
enabled: boolean;
|
|
2507
|
+
health: IntegrationPartnerHealth;
|
|
2508
|
+
calls24: number;
|
|
2509
|
+
success_pct24: number | null;
|
|
2510
|
+
success_pct7d: number | null;
|
|
2511
|
+
p50_ms: number | null;
|
|
2512
|
+
p95_ms: number | null;
|
|
2513
|
+
last_ok_at: string | null;
|
|
2514
|
+
last_fail_at: string | null;
|
|
2515
|
+
last_fail_reason: string | null;
|
|
2516
|
+
hourly: Array<{
|
|
2517
|
+
hour: string;
|
|
2518
|
+
ok: number;
|
|
2519
|
+
failed: number;
|
|
2520
|
+
}>;
|
|
2521
|
+
flags: {
|
|
2522
|
+
test_endpoint: boolean;
|
|
2523
|
+
mock: boolean;
|
|
2524
|
+
auth_failing: boolean;
|
|
2525
|
+
};
|
|
2526
|
+
owner: {
|
|
2527
|
+
id: string;
|
|
2528
|
+
name: string;
|
|
2529
|
+
} | null;
|
|
2530
|
+
obligations: {
|
|
2531
|
+
sent: number;
|
|
2532
|
+
pending: number;
|
|
2533
|
+
failed: number;
|
|
2534
|
+
missing: number;
|
|
2535
|
+
overdue: number;
|
|
2536
|
+
};
|
|
2537
|
+
}
|
|
2538
|
+
|
|
2539
|
+
export declare interface IntegrationPartnerDetail {
|
|
2540
|
+
card: IntegrationPartnerCard;
|
|
2541
|
+
calls: PartnerCall[];
|
|
2542
|
+
contracts: PartnerContract[];
|
|
2543
|
+
}
|
|
2544
|
+
|
|
2545
|
+
export declare type IntegrationPartnerHealth = 'healthy' | 'degraded' | 'failing' | 'idle';
|
|
2546
|
+
|
|
2547
|
+
export declare interface IntegrationPartnersSummary {
|
|
2548
|
+
calls24: number;
|
|
2549
|
+
success_pct24: number | null;
|
|
2550
|
+
not_healthy: number;
|
|
2551
|
+
}
|
|
2552
|
+
|
|
2553
|
+
/** What a step opens to: field changes, a push, a partner call, a flow run,
|
|
2554
|
+
* a transition. */
|
|
2555
|
+
export declare type IntegrationPathDetail = {
|
|
2556
|
+
type: 'changes';
|
|
2557
|
+
changes: Array<{
|
|
2558
|
+
field: string;
|
|
2559
|
+
label: string;
|
|
2560
|
+
old: string;
|
|
2561
|
+
new: string;
|
|
2562
|
+
}>;
|
|
2563
|
+
} | {
|
|
2564
|
+
type: 'push';
|
|
2565
|
+
status: string;
|
|
2566
|
+
http_status?: number | null;
|
|
2567
|
+
attempts?: number;
|
|
2568
|
+
error?: string | null;
|
|
2569
|
+
request?: string | null;
|
|
2570
|
+
response?: string | null;
|
|
2571
|
+
submission_id: number;
|
|
2572
|
+
} | {
|
|
2573
|
+
type: 'call';
|
|
2574
|
+
method: string;
|
|
2575
|
+
url: string;
|
|
2576
|
+
status?: number | null;
|
|
2577
|
+
duration_ms?: number | null;
|
|
2578
|
+
error?: string | null;
|
|
2579
|
+
} | {
|
|
2580
|
+
type: 'flow';
|
|
2581
|
+
status: string;
|
|
2582
|
+
halted_at?: string | null;
|
|
2583
|
+
error?: string | null;
|
|
2584
|
+
} | {
|
|
2585
|
+
type: 'transition';
|
|
2586
|
+
from?: string | null;
|
|
2587
|
+
to?: string | null;
|
|
2588
|
+
comment?: string | null;
|
|
2589
|
+
};
|
|
2590
|
+
|
|
2591
|
+
/** One step of an event's path, with the steps it set off under it. */
|
|
2592
|
+
export declare interface IntegrationPathNode {
|
|
2593
|
+
/** e.g. 'activity:12' */
|
|
2594
|
+
key: string;
|
|
2595
|
+
/** Parent step key; null = the root. */
|
|
2596
|
+
parent: string | null;
|
|
2597
|
+
kind: PathStepKind;
|
|
2598
|
+
/** ISO timestamp. */
|
|
2599
|
+
at: string;
|
|
2600
|
+
/** Milliseconds after the root step. */
|
|
2601
|
+
offset_ms: number;
|
|
2602
|
+
who?: string | null;
|
|
2603
|
+
record?: {
|
|
2604
|
+
collection: string;
|
|
2605
|
+
item: string;
|
|
2606
|
+
label?: string | null;
|
|
2607
|
+
} | null;
|
|
2608
|
+
summary: string;
|
|
2609
|
+
failed?: boolean;
|
|
2610
|
+
inferred?: boolean;
|
|
2611
|
+
/** Why it was matched (inferred) or why it failed. */
|
|
2612
|
+
reason?: string | null;
|
|
2613
|
+
detail?: IntegrationPathDetail | null;
|
|
2614
|
+
api_id?: number | null;
|
|
2615
|
+
children: IntegrationPathNode[];
|
|
2616
|
+
/** The folded steps of a 'group' node. */
|
|
2617
|
+
members?: IntegrationPathNode[];
|
|
2618
|
+
}
|
|
2619
|
+
|
|
2310
2620
|
/** The filter-pill set the collection browser offers (its own conditions[]
|
|
2311
2621
|
* round trip to `/items/:collection` — the queue has no equivalent server
|
|
2312
2622
|
* path, so it gets the column but not the filter). Values are the same
|
|
@@ -2317,6 +2627,98 @@ export declare const INTEGRATIONS_FILTER_OPTIONS: {
|
|
|
2317
2627
|
label: string;
|
|
2318
2628
|
}[];
|
|
2319
2629
|
|
|
2630
|
+
/**
|
|
2631
|
+
* The Integrations console: everything that talks to an outside system on one
|
|
2632
|
+
* page, in the order an operator asks — what is broken now (Firefight), how
|
|
2633
|
+
* each partner is doing (Partners), what the partners reported (Events), who
|
|
2634
|
+
* is calling us (Inbound). Hosts add their own tabs through `extraTabs`.
|
|
2635
|
+
*/
|
|
2636
|
+
export declare function IntegrationsConsole({ extraTabs, tab, onTabChange, onOpenRecord, focusSignal, inboundExtra, className }: IntegrationsConsoleProps): JSX.Element;
|
|
2637
|
+
|
|
2638
|
+
export declare interface IntegrationsConsoleProps {
|
|
2639
|
+
/** Host tabs, inserted after Events (e.g. a deployment's own integrations). */
|
|
2640
|
+
extraTabs?: IntegrationsConsoleTab[];
|
|
2641
|
+
/** Controlled tab — pair with onTabChange to keep it in the URL. */
|
|
2642
|
+
tab?: string;
|
|
2643
|
+
onTabChange?: (key: string) => void;
|
|
2644
|
+
onOpenRecord?: (collection: string, id: string) => void;
|
|
2645
|
+
/** Expand this Firefight signal on first load. */
|
|
2646
|
+
focusSignal?: string;
|
|
2647
|
+
/** Host content rendered at the end of the Inbound tab (a deployment's own queues). */
|
|
2648
|
+
inboundExtra?: ReactNode;
|
|
2649
|
+
className?: string;
|
|
2650
|
+
}
|
|
2651
|
+
|
|
2652
|
+
export declare interface IntegrationsConsoleTab {
|
|
2653
|
+
key: string;
|
|
2654
|
+
label: string;
|
|
2655
|
+
render: () => ReactNode;
|
|
2656
|
+
}
|
|
2657
|
+
|
|
2658
|
+
/**
|
|
2659
|
+
* HTTP shapes served by GET /integration-signals and /integration-partners —
|
|
2660
|
+
* copied from the core routes so the shared package never imports api code.
|
|
2661
|
+
*/
|
|
2662
|
+
export declare interface IntegrationSignalAction {
|
|
2663
|
+
kind: 'retry_submission' | 'resend' | 'open' | 'explain' | 'extension';
|
|
2664
|
+
label: string;
|
|
2665
|
+
/** Extension action id (kind 'extension'), submission id (retry). */
|
|
2666
|
+
id?: string;
|
|
2667
|
+
payload?: Record<string, unknown>;
|
|
2668
|
+
}
|
|
2669
|
+
|
|
2670
|
+
export declare interface IntegrationSignalRow {
|
|
2671
|
+
key: string;
|
|
2672
|
+
group?: string;
|
|
2673
|
+
group_label?: string;
|
|
2674
|
+
title: string;
|
|
2675
|
+
detail?: string;
|
|
2676
|
+
since?: string;
|
|
2677
|
+
/** Identity of THIS occurrence (a run id, a submission attempt...) — what
|
|
2678
|
+
* Dismiss keys on, distinct from `key` (the problem itself). */
|
|
2679
|
+
occurrence?: string;
|
|
2680
|
+
api?: string;
|
|
2681
|
+
record?: {
|
|
2682
|
+
collection: string;
|
|
2683
|
+
id: string;
|
|
2684
|
+
label?: string;
|
|
2685
|
+
};
|
|
2686
|
+
actions: IntegrationSignalAction[];
|
|
2687
|
+
/** What opens in place under this row — the failed push, the import run. */
|
|
2688
|
+
drill?: SignalDrill;
|
|
2689
|
+
/** When the snapshot first saw this problem. */
|
|
2690
|
+
first_seen: string;
|
|
2691
|
+
/** Present only on rows in `snoozed`. */
|
|
2692
|
+
snooze?: RowSnooze;
|
|
2693
|
+
}
|
|
2694
|
+
|
|
2695
|
+
export declare interface IntegrationSignalsSnapshot {
|
|
2696
|
+
checked_at: string | null;
|
|
2697
|
+
stale: boolean;
|
|
2698
|
+
signals: IntegrationSignalView[];
|
|
2699
|
+
}
|
|
2700
|
+
|
|
2701
|
+
export declare interface IntegrationSignalView {
|
|
2702
|
+
id: string;
|
|
2703
|
+
label: string;
|
|
2704
|
+
description: string;
|
|
2705
|
+
tab: string;
|
|
2706
|
+
severity: 'critical' | 'warn';
|
|
2707
|
+
count: number;
|
|
2708
|
+
error: string | null;
|
|
2709
|
+
last_run: string | null;
|
|
2710
|
+
thresholds: SignalThreshold[];
|
|
2711
|
+
settings: {
|
|
2712
|
+
enabled: boolean;
|
|
2713
|
+
severity: 'critical' | 'warn';
|
|
2714
|
+
thresholds: Record<string, number>;
|
|
2715
|
+
};
|
|
2716
|
+
rows: IntegrationSignalRow[];
|
|
2717
|
+
snoozed: IntegrationSignalRow[];
|
|
2718
|
+
/** Rows actually returned (the evaluator may count more than it lists). */
|
|
2719
|
+
shown: number;
|
|
2720
|
+
}
|
|
2721
|
+
|
|
2320
2722
|
export declare function IntegrationStatusBanner({ collection, itemId }: IntegrationStatusBannerProps): JSX.Element | null;
|
|
2321
2723
|
|
|
2322
2724
|
/**
|
|
@@ -3403,6 +3805,69 @@ declare interface ParseSuccess {
|
|
|
3403
3805
|
tokens: string[];
|
|
3404
3806
|
}
|
|
3405
3807
|
|
|
3808
|
+
/**
|
|
3809
|
+
* One row of Partner detail's Recent calls list (GET /integration-partners/:id).
|
|
3810
|
+
* `source: 'log'` carries a real body to open (GET .../calls/:callId);
|
|
3811
|
+
* `'outbound'` is the always-on counter row for a call that never landed one
|
|
3812
|
+
* (before Task 15's extension-call fix, or any caller still passing no
|
|
3813
|
+
* `_log`) — it opens to "nothing recorded", never a fetch.
|
|
3814
|
+
*/
|
|
3815
|
+
declare interface PartnerCall {
|
|
3816
|
+
key: string;
|
|
3817
|
+
id: number;
|
|
3818
|
+
source: 'log' | 'outbound';
|
|
3819
|
+
created_at: string;
|
|
3820
|
+
method: string | null;
|
|
3821
|
+
path: string | null;
|
|
3822
|
+
status: number | null;
|
|
3823
|
+
ok: boolean | number;
|
|
3824
|
+
duration_ms: number | null;
|
|
3825
|
+
error: string | null;
|
|
3826
|
+
triggered_by: string | null;
|
|
3827
|
+
has_body: boolean;
|
|
3828
|
+
user: PartnerCallUser | null;
|
|
3829
|
+
}
|
|
3830
|
+
|
|
3831
|
+
/** One user recorded on a call — via nivaro_users, batch-resolved server-side
|
|
3832
|
+
* through the same helper the push drill-down uses, so a suspended or
|
|
3833
|
+
* machine account carries the same `inactive`/`account_kind` facts here as
|
|
3834
|
+
* it does on a `Requester` elsewhere in the console. */
|
|
3835
|
+
declare interface PartnerCallUser {
|
|
3836
|
+
id: string;
|
|
3837
|
+
name: string;
|
|
3838
|
+
email: string | null;
|
|
3839
|
+
/** 'suspended' / 'inactive' / 'redacted' — a person who can no longer act. */
|
|
3840
|
+
inactive: string | null;
|
|
3841
|
+
/** integration | bot | service | placeholder — never a person. */
|
|
3842
|
+
account_kind: string | null;
|
|
3843
|
+
}
|
|
3844
|
+
|
|
3845
|
+
declare interface PartnerContract {
|
|
3846
|
+
endpoint_id: number;
|
|
3847
|
+
name: string;
|
|
3848
|
+
last_run: string | null;
|
|
3849
|
+
ok: boolean | number | null;
|
|
3850
|
+
detail: string | null;
|
|
3851
|
+
}
|
|
3852
|
+
|
|
3853
|
+
export declare function PartnerDetail({ apiId, onClose, initialTab }: PartnerDetailProps): JSX.Element;
|
|
3854
|
+
|
|
3855
|
+
export declare interface PartnerDetailProps {
|
|
3856
|
+
apiId: number;
|
|
3857
|
+
onClose: () => void;
|
|
3858
|
+
initialTab?: DetailTab;
|
|
3859
|
+
}
|
|
3860
|
+
|
|
3861
|
+
export declare function PartnersView({ openId, onOpenChange }?: PartnersViewProps): JSX.Element;
|
|
3862
|
+
|
|
3863
|
+
export declare interface PartnersViewProps {
|
|
3864
|
+
/** Detail sheet open on this partner (controlled by the frame). */
|
|
3865
|
+
openId?: number | null;
|
|
3866
|
+
onOpenChange?: (id: number | null) => void;
|
|
3867
|
+
}
|
|
3868
|
+
|
|
3869
|
+
declare type PathStepKind = 'request' | 'cron' | 'import' | 'feed' | 'write' | 'transition' | 'flow' | 'push' | 'attempt' | 'partner_call' | 'group';
|
|
3870
|
+
|
|
3406
3871
|
declare interface PendingTask {
|
|
3407
3872
|
title: string;
|
|
3408
3873
|
assignee: string | null;
|
|
@@ -4031,6 +4496,9 @@ export declare interface QuickPickerProps {
|
|
|
4031
4496
|
className?: string;
|
|
4032
4497
|
}
|
|
4033
4498
|
|
|
4499
|
+
/** Critical first, then the problem that has been open longest. */
|
|
4500
|
+
export declare function rankSignals(signals: IntegrationSignalView[]): IntegrationSignalView[];
|
|
4501
|
+
|
|
4034
4502
|
/**
|
|
4035
4503
|
* Tier a team against a cell's filter values. `out` carries the human
|
|
4036
4504
|
* mismatches ("doesn't cover BLT"). Filters without a resolvable id don't
|
|
@@ -4548,6 +5016,9 @@ declare interface Row {
|
|
|
4548
5016
|
* ObligationTrigger union into this client lib for one comparison, so a
|
|
4549
5017
|
* new trigger kind added server-side never breaks this file's build. */
|
|
4550
5018
|
trigger?: string;
|
|
5019
|
+
/** The kind's human label from the registry ("Fusion — transfer order
|
|
5020
|
+
* submitted"); null when the server no longer knows the kind. */
|
|
5021
|
+
label?: string | null;
|
|
4551
5022
|
}
|
|
4552
5023
|
|
|
4553
5024
|
export declare const ROW_HIGHLIGHT_TINTS: Record<string, {
|
|
@@ -4666,6 +5137,16 @@ declare interface RowRule {
|
|
|
4666
5137
|
sort?: number;
|
|
4667
5138
|
}
|
|
4668
5139
|
|
|
5140
|
+
declare interface RowSnooze {
|
|
5141
|
+
id: number;
|
|
5142
|
+
until: string | null;
|
|
5143
|
+
until_change: boolean;
|
|
5144
|
+
/** true = this snooze is a Dismiss — "seen this one, tell me when it
|
|
5145
|
+
* happens again" — never a group/signal scope, always row-only. */
|
|
5146
|
+
until_occurrence: boolean;
|
|
5147
|
+
note: string | null;
|
|
5148
|
+
}
|
|
5149
|
+
|
|
4669
5150
|
/**
|
|
4670
5151
|
* Real-user monitoring collector. Hand-rolled (no web-vitals dep): one 'load'
|
|
4671
5152
|
* event per page load (TTFB / FCP / LCP / total) once LCP settles, plus one
|
|
@@ -4685,6 +5166,8 @@ export declare function rumRouteChange(pathname: string): void;
|
|
|
4685
5166
|
* a foreign-app URL in a new tab). */
|
|
4686
5167
|
export declare function runNotificationTarget(target: NotificationTarget, navigate: (path: string) => void): boolean;
|
|
4687
5168
|
|
|
5169
|
+
declare type Scope = 'row' | 'group' | 'signal';
|
|
5170
|
+
|
|
4688
5171
|
declare interface ScopeDimensionLite {
|
|
4689
5172
|
name: string;
|
|
4690
5173
|
label: string;
|
|
@@ -4781,6 +5264,34 @@ declare interface SheetItem {
|
|
|
4781
5264
|
url: string;
|
|
4782
5265
|
}
|
|
4783
5266
|
|
|
5267
|
+
export declare function SignalCard({ signal, expanded, onToggle, onOpenRecord, onExplain, canExplain }: SignalCardProps): JSX.Element;
|
|
5268
|
+
|
|
5269
|
+
export declare interface SignalCardProps {
|
|
5270
|
+
signal: IntegrationSignalView;
|
|
5271
|
+
expanded: boolean;
|
|
5272
|
+
onToggle: () => void;
|
|
5273
|
+
onOpenRecord?: (collection: string, id: string) => void;
|
|
5274
|
+
/** An 'explain' action — the frame decides where it leads. */
|
|
5275
|
+
onExplain?: (action: IntegrationSignalAction, row: IntegrationSignalRow) => void;
|
|
5276
|
+
/** False hides an explain action the host has nowhere to open. */
|
|
5277
|
+
canExplain?: (action: IntegrationSignalAction) => boolean;
|
|
5278
|
+
}
|
|
5279
|
+
|
|
5280
|
+
/** A typed "Details" reference on a signal row (GET /integration-signals). */
|
|
5281
|
+
declare interface SignalDrill {
|
|
5282
|
+
kind: 'submission' | 'import_run' | (string & {});
|
|
5283
|
+
id: string;
|
|
5284
|
+
}
|
|
5285
|
+
|
|
5286
|
+
declare interface SignalThreshold {
|
|
5287
|
+
key: string;
|
|
5288
|
+
label: string;
|
|
5289
|
+
default: number;
|
|
5290
|
+
unit: string;
|
|
5291
|
+
min?: number;
|
|
5292
|
+
max?: number;
|
|
5293
|
+
}
|
|
5294
|
+
|
|
4784
5295
|
declare type SkipCondition = {
|
|
4785
5296
|
type: 'no_owners';
|
|
4786
5297
|
} | {
|
|
@@ -4844,6 +5355,38 @@ export declare type SlotRendererProps = {
|
|
|
4844
5355
|
defaultExpanded: boolean;
|
|
4845
5356
|
};
|
|
4846
5357
|
|
|
5358
|
+
export declare interface SnoozeInput {
|
|
5359
|
+
signal: string;
|
|
5360
|
+
row_key?: string;
|
|
5361
|
+
group_key?: string;
|
|
5362
|
+
until?: string | null;
|
|
5363
|
+
until_change?: boolean;
|
|
5364
|
+
/** A Dismiss — hides this ONE row until its occurrence changes. Row-scoped
|
|
5365
|
+
* only; never combine with group_key. */
|
|
5366
|
+
until_occurrence?: boolean;
|
|
5367
|
+
note?: string;
|
|
5368
|
+
}
|
|
5369
|
+
|
|
5370
|
+
/**
|
|
5371
|
+
* Quiet one problem, a whole group, or the whole signal. "Until it changes"
|
|
5372
|
+
* is offered only for a single row — the API hashes ONE row's payload, so a
|
|
5373
|
+
* group or signal can only be quieted for a set time. Dismiss lives at the
|
|
5374
|
+
* top for a row-scoped menu — the one-click, no-questions-asked cousin of
|
|
5375
|
+
* everything below it.
|
|
5376
|
+
*/
|
|
5377
|
+
export declare function SnoozeMenu({ signal, signalLabel, rowKey, group, defaultScope, compact }: {
|
|
5378
|
+
signal: string;
|
|
5379
|
+
signalLabel: string;
|
|
5380
|
+
rowKey?: string;
|
|
5381
|
+
group?: {
|
|
5382
|
+
key: string;
|
|
5383
|
+
label: string;
|
|
5384
|
+
};
|
|
5385
|
+
/** What the menu opens on — a group header opens on the group. */
|
|
5386
|
+
defaultScope?: Scope;
|
|
5387
|
+
compact?: boolean;
|
|
5388
|
+
}): JSX.Element;
|
|
5389
|
+
|
|
4847
5390
|
export declare function splitMessageTokens(text: string, entityPattern: string): MessageToken[];
|
|
4848
5391
|
|
|
4849
5392
|
declare type SpreadPreset = 'even' | 'front' | 'back' | 'shape';
|
|
@@ -4860,6 +5403,20 @@ export declare function startRum(opts?: {
|
|
|
4860
5403
|
apiBase?: string;
|
|
4861
5404
|
}): void;
|
|
4862
5405
|
|
|
5406
|
+
export declare function SubmissionRow({ sub, onRetry, retrying, onShowPath }: {
|
|
5407
|
+
sub: ErpSubmission;
|
|
5408
|
+
onRetry: (id: number) => void;
|
|
5409
|
+
retrying: boolean;
|
|
5410
|
+
/** Opens the full integration path (write → transition → push → reply)
|
|
5411
|
+
* behind this submission. Absent = no "Show path" action. */
|
|
5412
|
+
onShowPath?: (id: number) => void;
|
|
5413
|
+
}): JSX.Element;
|
|
5414
|
+
|
|
5415
|
+
/** A submission / attempt status, as a small tinted chip. */
|
|
5416
|
+
export declare function SubmissionStatusPill({ status }: {
|
|
5417
|
+
status: string;
|
|
5418
|
+
}): JSX.Element;
|
|
5419
|
+
|
|
4863
5420
|
/**
|
|
4864
5421
|
* The one subscription editor — create + edit for nivaro_notification_subscriptions,
|
|
4865
5422
|
* shared by the profile's Notifications & alerts card and the My Subscriptions
|
|
@@ -5148,6 +5705,9 @@ export declare function useElapsedLoading(loading: boolean, thresholdMs?: number
|
|
|
5148
5705
|
*/
|
|
5149
5706
|
export declare function useEntityRoomLink(room: string | null): string | null;
|
|
5150
5707
|
|
|
5708
|
+
/** One event's full chain of writes. */
|
|
5709
|
+
export declare function useEventPath(target: IntegrationEventPathTarget | null): UseQueryResult<NoInfer<IntegrationEventPath | null>, Error>;
|
|
5710
|
+
|
|
5151
5711
|
export declare function useFeatureFlag(key: string): boolean;
|
|
5152
5712
|
|
|
5153
5713
|
/**
|
|
@@ -5202,6 +5762,8 @@ export declare function useFormStatus(form: UseNivaroFormReturn): FormStatus;
|
|
|
5202
5762
|
|
|
5203
5763
|
export declare function useGridFlush(): GridFlushContextValue | null;
|
|
5204
5764
|
|
|
5765
|
+
export declare function useImportHealth(): UseQueryResult<NoInfer<ImportHealth>, Error>;
|
|
5766
|
+
|
|
5205
5767
|
export declare function useItemEditAuth(): ItemEditAuthContextValue;
|
|
5206
5768
|
|
|
5207
5769
|
export declare function useItemLock(collection: string | undefined, item: string | undefined, enabled: boolean): {
|
|
@@ -5346,6 +5908,13 @@ export declare function useOverlayState<T>(key: string): {
|
|
|
5346
5908
|
back: (steps?: number) => void;
|
|
5347
5909
|
};
|
|
5348
5910
|
|
|
5911
|
+
export declare function usePartner(id: number | null): UseQueryResult<NoInfer<IntegrationPartnerDetail>, Error>;
|
|
5912
|
+
|
|
5913
|
+
export declare function usePartners(): UseQueryResult<NoInfer<{
|
|
5914
|
+
summary: IntegrationPartnersSummary;
|
|
5915
|
+
partners: IntegrationPartnerCard[];
|
|
5916
|
+
}>, Error>;
|
|
5917
|
+
|
|
5349
5918
|
export declare function usePeerReadAt(room: string | null): string | null;
|
|
5350
5919
|
|
|
5351
5920
|
/**
|
|
@@ -5386,6 +5955,15 @@ export declare function UserChip({ userId, size }: {
|
|
|
5386
5955
|
size?: 'default' | 'compact';
|
|
5387
5956
|
}): React_2.JSX.Element;
|
|
5388
5957
|
|
|
5958
|
+
/** Integration events about one record, newest first, one page at a time. */
|
|
5959
|
+
export declare function useRecordIntegrationActivity(collection: string, item: string, page: number): UseQueryResult<NoInfer<{
|
|
5960
|
+
entries: IntegrationEvent[];
|
|
5961
|
+
page: number;
|
|
5962
|
+
has_more: boolean;
|
|
5963
|
+
}>, Error>;
|
|
5964
|
+
|
|
5965
|
+
export declare function useRefreshSignals(): UseMutationResult<unknown, Error, void, unknown>;
|
|
5966
|
+
|
|
5389
5967
|
/**
|
|
5390
5968
|
* Fetch selectable options for a relation field's related collection.
|
|
5391
5969
|
* Re-fetches when `search` changes. Pass `enabled: false` to skip fetching
|
|
@@ -5444,6 +6022,22 @@ attachments?: string[];
|
|
|
5444
6022
|
|
|
5445
6023
|
export declare function useSessionRecorder(options?: SessionRecorderOptions): void;
|
|
5446
6024
|
|
|
6025
|
+
/** Write one staleness setting: a number of hours, 0 (not monitored) or null (back to default). */
|
|
6026
|
+
export declare function useSetImportCadence(): UseMutationResult<unknown, Error, Record<string, number | null>, unknown>;
|
|
6027
|
+
|
|
6028
|
+
export declare function useSignalAction(): UseMutationResult<IntegrationActionResult[], Error, {
|
|
6029
|
+
signal: string;
|
|
6030
|
+
row_keys: string[];
|
|
6031
|
+
action: IntegrationSignalRow["actions"][number];
|
|
6032
|
+
}, unknown>;
|
|
6033
|
+
|
|
6034
|
+
export declare function useSignals(tab?: string): UseQueryResult<NoInfer<IntegrationSignalsSnapshot>, Error>;
|
|
6035
|
+
|
|
6036
|
+
export declare function useSnooze(): {
|
|
6037
|
+
add: UseMutationResult<unknown, Error, SnoozeInput, unknown>;
|
|
6038
|
+
remove: UseMutationResult<unknown, Error, number, unknown>;
|
|
6039
|
+
};
|
|
6040
|
+
|
|
5447
6041
|
/** Mutations for the user's own subscriptions. Invalidates BOTH readers —
|
|
5448
6042
|
* the flat list (My Subscriptions) and the profile's sources aggregate. */
|
|
5449
6043
|
export declare function useSubscriptionMutations(): {
|