@commissionsight/sdk 2.0.0
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/LICENSE +21 -0
- package/README.md +308 -0
- package/dist/index.d.ts +977 -0
- package/dist/index.js +390 -0
- package/package.json +34 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,977 @@
|
|
|
1
|
+
/** Lightweight typed client for the CommissionSight API. */
|
|
2
|
+
/** Member status for a period, file-over-file. */
|
|
3
|
+
export type Status = 'green' | 'yellow' | 'red';
|
|
4
|
+
/** Explicit delta flags attached to a member's status for a period. */
|
|
5
|
+
export type Flag = 'NEW' | 'COMMISSION_CHANGED' | 'DATA_CHANGED' | 'DROPPED' | 'REAPPEARED' | 'REAPPEARED_WITH_DELTA' | 'CHARGEBACK';
|
|
6
|
+
/** One chargeback (negative-commission record) enriched with the original payout. */
|
|
7
|
+
export interface ChargebackRow {
|
|
8
|
+
memberRefId: string;
|
|
9
|
+
policyRefId: string;
|
|
10
|
+
memberExternalId: string | null;
|
|
11
|
+
policyNumber: string | null;
|
|
12
|
+
planName: string | null;
|
|
13
|
+
/** The amount clawed back this period (positive magnitude). */
|
|
14
|
+
chargebackAmount: number;
|
|
15
|
+
/** Whether the carrier ever paid this policy out. */
|
|
16
|
+
paidOut: boolean;
|
|
17
|
+
/** The original payout ("record 0"): when/where the carrier first paid, and how much. */
|
|
18
|
+
originalPayout: {
|
|
19
|
+
period: string;
|
|
20
|
+
amount: number;
|
|
21
|
+
fileId: string | null;
|
|
22
|
+
fileName: string | null;
|
|
23
|
+
} | null;
|
|
24
|
+
/** Whether the chargeback exactly reverses the original payout. */
|
|
25
|
+
fullyReversed: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface ClientOptions {
|
|
28
|
+
baseUrl: string;
|
|
29
|
+
token?: string;
|
|
30
|
+
fetch?: typeof fetch;
|
|
31
|
+
}
|
|
32
|
+
export interface Page<T> {
|
|
33
|
+
data: T[];
|
|
34
|
+
pagination?: {
|
|
35
|
+
limit: number;
|
|
36
|
+
offset?: number;
|
|
37
|
+
nextCursor?: number | null;
|
|
38
|
+
hasMore: boolean;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface JobSummary {
|
|
42
|
+
id: string;
|
|
43
|
+
carrierId: string;
|
|
44
|
+
periodYear: number;
|
|
45
|
+
periodMonth: number;
|
|
46
|
+
fileId: string;
|
|
47
|
+
r2Key?: string;
|
|
48
|
+
status: 'queued' | 'processing' | 'completed' | 'failed';
|
|
49
|
+
stats?: Record<string, number> | null;
|
|
50
|
+
error?: string | null;
|
|
51
|
+
webhookUrl?: string | null;
|
|
52
|
+
/** Number of rows rejected on ingest; download the detail via `downloadExceptions`. */
|
|
53
|
+
exceptionRowCount?: number;
|
|
54
|
+
createdAt: number | string;
|
|
55
|
+
startedAt?: number | string | null;
|
|
56
|
+
completedAt?: number | string | null;
|
|
57
|
+
}
|
|
58
|
+
export interface FileSummary {
|
|
59
|
+
id: string;
|
|
60
|
+
accountId: string;
|
|
61
|
+
carrierId: string;
|
|
62
|
+
periodYear: number;
|
|
63
|
+
periodMonth: number;
|
|
64
|
+
originalFilename: string;
|
|
65
|
+
byteSize: number;
|
|
66
|
+
checksumSha256: string;
|
|
67
|
+
uploadedAt: number | string;
|
|
68
|
+
/**
|
|
69
|
+
* True when this period's delta/status scoring is stale because an earlier
|
|
70
|
+
* (baseline) period was uploaded out of order. Call `rescoreFile` to refresh
|
|
71
|
+
* it without re-uploading.
|
|
72
|
+
*/
|
|
73
|
+
rescoreSuggested?: boolean;
|
|
74
|
+
/** When set, the raw bytes were purged from object storage (retention). */
|
|
75
|
+
r2PurgedAt?: number | string | null;
|
|
76
|
+
}
|
|
77
|
+
export interface AdminMetrics {
|
|
78
|
+
totalJobs: number;
|
|
79
|
+
jobsLast24h: number;
|
|
80
|
+
byStatus: Record<string, number>;
|
|
81
|
+
failures: number;
|
|
82
|
+
accounts: number;
|
|
83
|
+
accountsByStatus: Record<string, number>;
|
|
84
|
+
pendingAccounts: number;
|
|
85
|
+
users: number;
|
|
86
|
+
webhooks: Record<string, number>;
|
|
87
|
+
webhooksPending: number;
|
|
88
|
+
webhooksFailed: number;
|
|
89
|
+
recentJobs: {
|
|
90
|
+
id: string;
|
|
91
|
+
carrierId: string;
|
|
92
|
+
periodYear: number;
|
|
93
|
+
periodMonth: number;
|
|
94
|
+
status: string;
|
|
95
|
+
error: string | null;
|
|
96
|
+
createdAt: number;
|
|
97
|
+
}[];
|
|
98
|
+
recentAccounts: {
|
|
99
|
+
id: string;
|
|
100
|
+
name: string;
|
|
101
|
+
status: string;
|
|
102
|
+
createdAt: number;
|
|
103
|
+
}[];
|
|
104
|
+
}
|
|
105
|
+
export interface AdminJobDetail {
|
|
106
|
+
job: JobSummary & {
|
|
107
|
+
accountId: string;
|
|
108
|
+
webhookUrl?: string | null;
|
|
109
|
+
idempotencyKey?: string | null;
|
|
110
|
+
};
|
|
111
|
+
carrierName: string | null;
|
|
112
|
+
account: {
|
|
113
|
+
name: string;
|
|
114
|
+
slug: string;
|
|
115
|
+
} | null;
|
|
116
|
+
file: {
|
|
117
|
+
originalFilename: string;
|
|
118
|
+
byteSize: number;
|
|
119
|
+
checksumSha256: string;
|
|
120
|
+
uploadedAt: number | string;
|
|
121
|
+
} | null;
|
|
122
|
+
durationMs: number | null;
|
|
123
|
+
/** True when this job's period scoring is stale (out-of-order baseline). */
|
|
124
|
+
rescoreSuggested?: boolean;
|
|
125
|
+
}
|
|
126
|
+
export interface AdminLogEvent {
|
|
127
|
+
id: string;
|
|
128
|
+
ts: number;
|
|
129
|
+
level: 'info' | 'warn' | 'error';
|
|
130
|
+
source: 'job' | 'webhook';
|
|
131
|
+
message: string;
|
|
132
|
+
detail: string | null;
|
|
133
|
+
}
|
|
134
|
+
export interface AdminAlert {
|
|
135
|
+
id: string;
|
|
136
|
+
severity: 'warning' | 'critical';
|
|
137
|
+
title: string;
|
|
138
|
+
detail: string;
|
|
139
|
+
ts: number;
|
|
140
|
+
}
|
|
141
|
+
export interface AdminLogs {
|
|
142
|
+
generatedAt: number;
|
|
143
|
+
events: AdminLogEvent[];
|
|
144
|
+
alerts: AdminAlert[];
|
|
145
|
+
pagination?: {
|
|
146
|
+
limit: number;
|
|
147
|
+
offset: number;
|
|
148
|
+
hasMore: boolean;
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/** Per-account admin dashboard: counts + the latest period's summed rollup. */
|
|
152
|
+
export interface AdminAccountOverview {
|
|
153
|
+
account: {
|
|
154
|
+
id: string;
|
|
155
|
+
name: string;
|
|
156
|
+
slug: string;
|
|
157
|
+
status: string;
|
|
158
|
+
};
|
|
159
|
+
counts: {
|
|
160
|
+
files: number;
|
|
161
|
+
jobs: number;
|
|
162
|
+
users: number;
|
|
163
|
+
};
|
|
164
|
+
latestPeriod: string | null;
|
|
165
|
+
rollup: {
|
|
166
|
+
memberCount: number;
|
|
167
|
+
green: number;
|
|
168
|
+
yellow: number;
|
|
169
|
+
red: number;
|
|
170
|
+
new: number;
|
|
171
|
+
reappeared: number;
|
|
172
|
+
attritionRate: number;
|
|
173
|
+
commissionAtRisk: number;
|
|
174
|
+
commissionOwed: number;
|
|
175
|
+
chargebackCount: number;
|
|
176
|
+
chargebackAmount: number;
|
|
177
|
+
} | null;
|
|
178
|
+
}
|
|
179
|
+
export interface AdminAccountFile {
|
|
180
|
+
id: string;
|
|
181
|
+
carrierId: string;
|
|
182
|
+
periodYear: number;
|
|
183
|
+
periodMonth: number;
|
|
184
|
+
originalFilename: string;
|
|
185
|
+
byteSize: number;
|
|
186
|
+
uploadedAt: number | string;
|
|
187
|
+
supersededAt: number | string | null;
|
|
188
|
+
r2PurgedAt: number | string | null;
|
|
189
|
+
}
|
|
190
|
+
export interface AdminAccountJob {
|
|
191
|
+
id: string;
|
|
192
|
+
carrierId: string;
|
|
193
|
+
periodYear: number;
|
|
194
|
+
periodMonth: number;
|
|
195
|
+
status: string;
|
|
196
|
+
error: string | null;
|
|
197
|
+
stats: Record<string, number> | null;
|
|
198
|
+
createdAt: number | string;
|
|
199
|
+
completedAt: number | string | null;
|
|
200
|
+
}
|
|
201
|
+
export interface AdminAccountUser {
|
|
202
|
+
id: string;
|
|
203
|
+
email: string;
|
|
204
|
+
role: string;
|
|
205
|
+
createdAt: number | string;
|
|
206
|
+
}
|
|
207
|
+
/** One scheduled-maintenance (cron) pass — admin System tab. */
|
|
208
|
+
export interface AdminCronRun {
|
|
209
|
+
id: string;
|
|
210
|
+
ranAt: number;
|
|
211
|
+
requeued: number;
|
|
212
|
+
webhooksRedelivered: number;
|
|
213
|
+
filesPurged: number;
|
|
214
|
+
jobsCanceled: number;
|
|
215
|
+
billed: number;
|
|
216
|
+
durationMs: number;
|
|
217
|
+
}
|
|
218
|
+
export interface AdminCronTask {
|
|
219
|
+
key: string;
|
|
220
|
+
title: string;
|
|
221
|
+
description: string;
|
|
222
|
+
}
|
|
223
|
+
export interface AdminSystemActivity {
|
|
224
|
+
generatedAt: number;
|
|
225
|
+
tasks: AdminCronTask[];
|
|
226
|
+
runs: AdminCronRun[];
|
|
227
|
+
}
|
|
228
|
+
/** Platform billing/revenue summary (admin). Amounts are in cents. */
|
|
229
|
+
export interface AdminRevenueSummary {
|
|
230
|
+
generatedAt: number;
|
|
231
|
+
platform: {
|
|
232
|
+
accounts: {
|
|
233
|
+
total: number;
|
|
234
|
+
active: number;
|
|
235
|
+
pending: number;
|
|
236
|
+
suspended: number;
|
|
237
|
+
};
|
|
238
|
+
users: number;
|
|
239
|
+
apiKeys: number;
|
|
240
|
+
carriers: number;
|
|
241
|
+
/** Distinct monitored members across the platform (latest period per account+carrier). */
|
|
242
|
+
heartbeats: number;
|
|
243
|
+
};
|
|
244
|
+
revenue: {
|
|
245
|
+
/** Current member counts × the real pricing tiers (projected monthly revenue). */
|
|
246
|
+
projectedMonthlyCents: number;
|
|
247
|
+
avgCostPerMemberCents: number;
|
|
248
|
+
/** Sum of each account's most recent invoice total. */
|
|
249
|
+
lastCycleBilledCents: number;
|
|
250
|
+
accountsWithPaymentMethod: number;
|
|
251
|
+
byPaymentType: Record<'card' | 'us_bank_account' | 'none', {
|
|
252
|
+
accounts: number;
|
|
253
|
+
projectedCents: number;
|
|
254
|
+
lastBilledCents: number;
|
|
255
|
+
}>;
|
|
256
|
+
};
|
|
257
|
+
/** Actual A/R from Stripe, or `{ configured: false }` when Stripe isn't set up. */
|
|
258
|
+
ar: {
|
|
259
|
+
configured: true;
|
|
260
|
+
invoices: number;
|
|
261
|
+
billedCents: number;
|
|
262
|
+
paidCents: number;
|
|
263
|
+
outstandingCents: number;
|
|
264
|
+
failedCents: number;
|
|
265
|
+
recentOnly: boolean;
|
|
266
|
+
} | {
|
|
267
|
+
configured: false;
|
|
268
|
+
};
|
|
269
|
+
carriers: {
|
|
270
|
+
carrierId: string;
|
|
271
|
+
name: string;
|
|
272
|
+
accounts: number;
|
|
273
|
+
heartbeats: number;
|
|
274
|
+
}[];
|
|
275
|
+
}
|
|
276
|
+
export interface AdminProvisionResult {
|
|
277
|
+
provisioned: boolean;
|
|
278
|
+
alreadyProvisioned?: boolean;
|
|
279
|
+
createdDatabase?: boolean;
|
|
280
|
+
migrationsApplied?: number;
|
|
281
|
+
error?: string;
|
|
282
|
+
}
|
|
283
|
+
export interface ResultRow {
|
|
284
|
+
/** Internal CommissionSight member id — stable across periods; use it to pull
|
|
285
|
+
* the member's full journey (`getMemberJourney`). Included on every export. */
|
|
286
|
+
memberRefId: string;
|
|
287
|
+
/** Internal CommissionSight policy id (member-scoped). `getPolicyJourney`. */
|
|
288
|
+
policyRefId: string | null;
|
|
289
|
+
status: Status;
|
|
290
|
+
flags: Flag[];
|
|
291
|
+
commissionAmount: number | null;
|
|
292
|
+
prevCommissionAmount: number | null;
|
|
293
|
+
/** Expected-vs-actual shortfall for this member (recoverable), in dollars. 0
|
|
294
|
+
* when no contracted rate applies. Reconciles to the period's owed rollup. */
|
|
295
|
+
commissionOwed: number;
|
|
296
|
+
comparedAgainstPeriod: string | null;
|
|
297
|
+
memberExternalId: string | null;
|
|
298
|
+
memberName: string | null;
|
|
299
|
+
email: string | null;
|
|
300
|
+
planName: string | null;
|
|
301
|
+
policyNumber: string | null;
|
|
302
|
+
premiumAmount: number | null;
|
|
303
|
+
}
|
|
304
|
+
/** An account team member. */
|
|
305
|
+
export interface TeamMember {
|
|
306
|
+
id: string;
|
|
307
|
+
email: string;
|
|
308
|
+
role: 'member' | 'admin';
|
|
309
|
+
createdAt: number | string;
|
|
310
|
+
}
|
|
311
|
+
/** One audit-trail event. `action` is a dotted verb (e.g. `file.upload`). */
|
|
312
|
+
export interface AuditEvent {
|
|
313
|
+
id: string;
|
|
314
|
+
actor: string;
|
|
315
|
+
action: string;
|
|
316
|
+
target: string | null;
|
|
317
|
+
meta: Record<string, unknown> | null;
|
|
318
|
+
ip: string | null;
|
|
319
|
+
createdAt: number | string;
|
|
320
|
+
}
|
|
321
|
+
/** One policy line within a journey period. */
|
|
322
|
+
export interface JourneyPolicy {
|
|
323
|
+
policyRefId: string;
|
|
324
|
+
policyNumber: string | null;
|
|
325
|
+
planName: string | null;
|
|
326
|
+
planCode: string | null;
|
|
327
|
+
commissionAmount: number;
|
|
328
|
+
premiumAmount: number | null;
|
|
329
|
+
effectiveDate: string | null;
|
|
330
|
+
renewalDate: string | null;
|
|
331
|
+
}
|
|
332
|
+
export interface JourneyDelta {
|
|
333
|
+
field: string;
|
|
334
|
+
prevValue: string | null;
|
|
335
|
+
currValue: string | null;
|
|
336
|
+
}
|
|
337
|
+
/** One period in a member/policy audit journey. */
|
|
338
|
+
export interface JourneyPeriod {
|
|
339
|
+
period: string;
|
|
340
|
+
periodYear: number;
|
|
341
|
+
periodMonth: number;
|
|
342
|
+
status: Status | null;
|
|
343
|
+
flags: Flag[];
|
|
344
|
+
/** True when present on this period's statement; false for a drop-off period
|
|
345
|
+
* (red, absent from the file). */
|
|
346
|
+
present: boolean;
|
|
347
|
+
commissionAmount: number | null;
|
|
348
|
+
prevCommissionAmount: number | null;
|
|
349
|
+
premiumAmount: number | null;
|
|
350
|
+
policies: JourneyPolicy[];
|
|
351
|
+
file: {
|
|
352
|
+
fileId: string;
|
|
353
|
+
fileName: string | null;
|
|
354
|
+
uploadedAt: number | null;
|
|
355
|
+
} | null;
|
|
356
|
+
deltas: JourneyDelta[];
|
|
357
|
+
firstSeen: boolean;
|
|
358
|
+
}
|
|
359
|
+
/** The full audit history of a member (or a single policy). */
|
|
360
|
+
export interface Journey {
|
|
361
|
+
memberRefId: string;
|
|
362
|
+
policyRefId?: string;
|
|
363
|
+
member: {
|
|
364
|
+
memberExternalId: string | null;
|
|
365
|
+
memberName: string | null;
|
|
366
|
+
email: string | null;
|
|
367
|
+
carrierId: string;
|
|
368
|
+
};
|
|
369
|
+
firstPeriod: string | null;
|
|
370
|
+
latestPeriod: string | null;
|
|
371
|
+
periodCount: number;
|
|
372
|
+
periods: JourneyPeriod[];
|
|
373
|
+
}
|
|
374
|
+
export interface ComparisonRow {
|
|
375
|
+
memberRefId: string;
|
|
376
|
+
status: Status;
|
|
377
|
+
flags: Flag[];
|
|
378
|
+
commissionAmount: number | null;
|
|
379
|
+
prevCommissionAmount: number | null;
|
|
380
|
+
comparedAgainstPeriod: string | null;
|
|
381
|
+
memberName: string | null;
|
|
382
|
+
memberExternalId: string | null;
|
|
383
|
+
policyNumber: string | null;
|
|
384
|
+
}
|
|
385
|
+
export interface BillingDetails {
|
|
386
|
+
contactName?: string;
|
|
387
|
+
companyName?: string;
|
|
388
|
+
email?: string;
|
|
389
|
+
phone?: string;
|
|
390
|
+
addressLine1?: string;
|
|
391
|
+
addressLine2?: string;
|
|
392
|
+
city?: string;
|
|
393
|
+
state?: string;
|
|
394
|
+
postalCode?: string;
|
|
395
|
+
country?: string;
|
|
396
|
+
}
|
|
397
|
+
export interface BillingProfile extends BillingDetails {
|
|
398
|
+
card: {
|
|
399
|
+
brand: string;
|
|
400
|
+
last4: string;
|
|
401
|
+
} | null;
|
|
402
|
+
paymentMethod?: 'card' | 'us_bank_account' | null;
|
|
403
|
+
stripeEnabled?: boolean;
|
|
404
|
+
}
|
|
405
|
+
export interface BillingPreview {
|
|
406
|
+
period: string | null;
|
|
407
|
+
members: number;
|
|
408
|
+
pricePerMemberCents: number;
|
|
409
|
+
amountCents: number;
|
|
410
|
+
method: 'card' | 'us_bank_account';
|
|
411
|
+
feeCents: number;
|
|
412
|
+
totalCents: number;
|
|
413
|
+
achSavingsCents: number;
|
|
414
|
+
surcharge?: boolean;
|
|
415
|
+
dueDate: string | null;
|
|
416
|
+
custom?: boolean;
|
|
417
|
+
lastBilledPeriod: string | null;
|
|
418
|
+
}
|
|
419
|
+
export interface CarrierConfigEntry {
|
|
420
|
+
id: string;
|
|
421
|
+
version: number;
|
|
422
|
+
fileType: 'csv' | 'xlsx';
|
|
423
|
+
accountId: string | null;
|
|
424
|
+
isActive: boolean;
|
|
425
|
+
config: Record<string, unknown>;
|
|
426
|
+
}
|
|
427
|
+
export interface AdminAccountBilling {
|
|
428
|
+
accountId: string;
|
|
429
|
+
contactName: string | null;
|
|
430
|
+
companyName: string | null;
|
|
431
|
+
email: string | null;
|
|
432
|
+
phone: string | null;
|
|
433
|
+
addressLine1: string | null;
|
|
434
|
+
addressLine2: string | null;
|
|
435
|
+
city: string | null;
|
|
436
|
+
state: string | null;
|
|
437
|
+
postalCode: string | null;
|
|
438
|
+
country: string | null;
|
|
439
|
+
customRateCents: number | null;
|
|
440
|
+
surchargeEnabled: boolean;
|
|
441
|
+
paymentMethodType: 'card' | 'us_bank_account' | null;
|
|
442
|
+
card: {
|
|
443
|
+
brand: string;
|
|
444
|
+
last4: string;
|
|
445
|
+
} | null;
|
|
446
|
+
lastBilledPeriod: string | null;
|
|
447
|
+
lastBilledAmountCents: number | null;
|
|
448
|
+
}
|
|
449
|
+
export interface AdminUser {
|
|
450
|
+
id: string;
|
|
451
|
+
email: string;
|
|
452
|
+
role: 'member' | 'admin';
|
|
453
|
+
accountId: string | null;
|
|
454
|
+
accountName?: string | null;
|
|
455
|
+
createdAt?: number;
|
|
456
|
+
}
|
|
457
|
+
export type StabilityLevel = 'ok' | 'watch' | 'alert';
|
|
458
|
+
export interface DataQualitySignal {
|
|
459
|
+
carrierId: string;
|
|
460
|
+
carrierName: string | null;
|
|
461
|
+
level: StabilityLevel;
|
|
462
|
+
reason: string;
|
|
463
|
+
droppedRate: number;
|
|
464
|
+
newRate: number;
|
|
465
|
+
churnOverlap: number;
|
|
466
|
+
red: number;
|
|
467
|
+
newMembers: number;
|
|
468
|
+
reappeared: number;
|
|
469
|
+
present: number;
|
|
470
|
+
}
|
|
471
|
+
export interface DataQualityReport {
|
|
472
|
+
period: string | null;
|
|
473
|
+
overall: StabilityLevel;
|
|
474
|
+
carriers: DataQualitySignal[];
|
|
475
|
+
}
|
|
476
|
+
export interface AttritionPoint {
|
|
477
|
+
period: string;
|
|
478
|
+
year: number;
|
|
479
|
+
month: number;
|
|
480
|
+
red: number;
|
|
481
|
+
memberCount: number;
|
|
482
|
+
attritionRate: number;
|
|
483
|
+
/** Commission at risk this period (MoM shortfall), in dollars. */
|
|
484
|
+
commissionAtRisk: number;
|
|
485
|
+
}
|
|
486
|
+
export interface Webhook {
|
|
487
|
+
id: string;
|
|
488
|
+
url: string;
|
|
489
|
+
events: string[];
|
|
490
|
+
}
|
|
491
|
+
export interface ExpectedCommissionRate {
|
|
492
|
+
id: string;
|
|
493
|
+
carrierId: string;
|
|
494
|
+
/** null = the carrier-wide default; a value = a per-plan override. */
|
|
495
|
+
planCode: string | null;
|
|
496
|
+
rateType: 'percent_of_premium' | 'flat_per_member';
|
|
497
|
+
/** Fraction for percent_of_premium (0.20 = 20%); dollars for flat_per_member. */
|
|
498
|
+
rateValue: number;
|
|
499
|
+
}
|
|
500
|
+
export declare class ApiError extends Error {
|
|
501
|
+
readonly status: number;
|
|
502
|
+
readonly body?: unknown | undefined;
|
|
503
|
+
constructor(status: number, message: string, body?: unknown | undefined);
|
|
504
|
+
}
|
|
505
|
+
export interface InferredConfig {
|
|
506
|
+
config: unknown;
|
|
507
|
+
confidence: number;
|
|
508
|
+
headerRow: number;
|
|
509
|
+
sheets: string[];
|
|
510
|
+
mapped: {
|
|
511
|
+
header: string;
|
|
512
|
+
target: string;
|
|
513
|
+
score: number;
|
|
514
|
+
}[];
|
|
515
|
+
unmapped: string[];
|
|
516
|
+
notes: string[];
|
|
517
|
+
preview: {
|
|
518
|
+
mapped: number;
|
|
519
|
+
failed: number;
|
|
520
|
+
rows: unknown[];
|
|
521
|
+
} | null;
|
|
522
|
+
}
|
|
523
|
+
export declare class CommissionSightClient {
|
|
524
|
+
private readonly baseUrl;
|
|
525
|
+
private token;
|
|
526
|
+
private readonly fetchFn;
|
|
527
|
+
constructor(opts: ClientOptions);
|
|
528
|
+
setToken(token: string | undefined): void;
|
|
529
|
+
private request;
|
|
530
|
+
/** Like `request` but returns the raw response body as text (e.g. a CSV
|
|
531
|
+
* download). Errors still surface as `ApiError` from the problem+json body. */
|
|
532
|
+
private requestText;
|
|
533
|
+
listCarriers(params?: {
|
|
534
|
+
withConfig?: boolean;
|
|
535
|
+
}): Promise<Page<{
|
|
536
|
+
id: string;
|
|
537
|
+
name: string;
|
|
538
|
+
slug: string;
|
|
539
|
+
}>>;
|
|
540
|
+
getCarrier(carrierId: string): Promise<{
|
|
541
|
+
id: string;
|
|
542
|
+
name: string;
|
|
543
|
+
slug: string;
|
|
544
|
+
}>;
|
|
545
|
+
listConfigs(carrierId: string): Promise<Page<unknown>>;
|
|
546
|
+
getConfigVersion(carrierId: string, version: number): Promise<unknown>;
|
|
547
|
+
/** Create an account-scoped carrier config override. */
|
|
548
|
+
createConfig(carrierId: string, config: unknown): Promise<{
|
|
549
|
+
id: string;
|
|
550
|
+
version: number;
|
|
551
|
+
}>;
|
|
552
|
+
/** Dry-run a config against a sample file (maps + previews, persists nothing). */
|
|
553
|
+
testConfig(carrierId: string, config: unknown, file: File | Blob): Promise<{
|
|
554
|
+
mapped: number;
|
|
555
|
+
failed: number;
|
|
556
|
+
rows: unknown[];
|
|
557
|
+
}>;
|
|
558
|
+
/** Infer a draft config from a sample file. */
|
|
559
|
+
inferConfig(carrierId: string, file: File | Blob, opts?: {
|
|
560
|
+
sheetName?: string;
|
|
561
|
+
}): Promise<InferredConfig>;
|
|
562
|
+
uploadFile(input: {
|
|
563
|
+
file: File | Blob;
|
|
564
|
+
carrierId: string;
|
|
565
|
+
periodYear: number;
|
|
566
|
+
periodMonth: number;
|
|
567
|
+
webhookUrl?: string;
|
|
568
|
+
idempotencyKey?: string;
|
|
569
|
+
/**
|
|
570
|
+
* Replace an existing statement for this carrier+period. Without it, uploading
|
|
571
|
+
* over an existing period fails with `409` (`period_exists`); with it, the
|
|
572
|
+
* existing data is retracted and the corrected file re-ingested atomically
|
|
573
|
+
* (dropped members leave no orphan rows). The response carries `mode:'replace'`.
|
|
574
|
+
*/
|
|
575
|
+
replace?: boolean;
|
|
576
|
+
}): Promise<{
|
|
577
|
+
jobId: string;
|
|
578
|
+
fileId: string;
|
|
579
|
+
status: string;
|
|
580
|
+
mode?: string;
|
|
581
|
+
}>;
|
|
582
|
+
listFiles(params?: {
|
|
583
|
+
carrierId?: string;
|
|
584
|
+
limit?: number;
|
|
585
|
+
cursor?: number;
|
|
586
|
+
}): Promise<Page<FileSummary>>;
|
|
587
|
+
getFile(fileId: string): Promise<FileSummary>;
|
|
588
|
+
/**
|
|
589
|
+
* Re-process (re-score) a file's period without re-uploading — recomputes
|
|
590
|
+
* statuses/deltas against the current baseline. Use after uploading an earlier
|
|
591
|
+
* month out of order (see `FileSummary.rescoreSuggested`).
|
|
592
|
+
*/
|
|
593
|
+
rescoreFile(fileId: string): Promise<{
|
|
594
|
+
jobId: string;
|
|
595
|
+
fileId: string;
|
|
596
|
+
status: string;
|
|
597
|
+
mode: string;
|
|
598
|
+
}>;
|
|
599
|
+
/**
|
|
600
|
+
* Retract (unapply) a file's carrier+period — deletes the period's data with no
|
|
601
|
+
* re-upload and re-scores the following month. Scoped to the whole carrier+period
|
|
602
|
+
* (all files for it), so a period split across files clears as a unit. Returns
|
|
603
|
+
* `409` (`already_retracted`) if the file was already retracted/replaced.
|
|
604
|
+
*/
|
|
605
|
+
retractFile(fileId: string): Promise<{
|
|
606
|
+
jobId: string;
|
|
607
|
+
fileId: string;
|
|
608
|
+
status: string;
|
|
609
|
+
mode: string;
|
|
610
|
+
}>;
|
|
611
|
+
/**
|
|
612
|
+
* Purge the raw statement bytes from object storage (data retention). The file
|
|
613
|
+
* row + scored results remain; the file can no longer be re-ingested. Idempotent.
|
|
614
|
+
*/
|
|
615
|
+
purgeFile(fileId: string): Promise<{
|
|
616
|
+
fileId: string;
|
|
617
|
+
purged: boolean;
|
|
618
|
+
}>;
|
|
619
|
+
listJobs(params?: {
|
|
620
|
+
status?: string;
|
|
621
|
+
carrierId?: string;
|
|
622
|
+
periodYear?: number;
|
|
623
|
+
periodMonth?: number;
|
|
624
|
+
limit?: number;
|
|
625
|
+
offset?: number;
|
|
626
|
+
}): Promise<Page<JobSummary>>;
|
|
627
|
+
getJob(jobId: string): Promise<JobSummary>;
|
|
628
|
+
/** Download the exception file (rejected rows + their errors) for a job as CSV
|
|
629
|
+
* text. Retained for 30 days; a purged or absent file throws `ApiError` (404). */
|
|
630
|
+
downloadExceptions(jobId: string): Promise<string>;
|
|
631
|
+
getJobResults(jobId: string, params?: {
|
|
632
|
+
status?: string;
|
|
633
|
+
owedOnly?: boolean;
|
|
634
|
+
chargeback?: boolean;
|
|
635
|
+
limit?: number;
|
|
636
|
+
offset?: number;
|
|
637
|
+
}): Promise<Page<ResultRow> & {
|
|
638
|
+
period: {
|
|
639
|
+
year: number;
|
|
640
|
+
month: number;
|
|
641
|
+
};
|
|
642
|
+
}>;
|
|
643
|
+
getJobDeltas(jobId: string, params?: {
|
|
644
|
+
memberRefId?: string;
|
|
645
|
+
changeType?: string;
|
|
646
|
+
}): Promise<Page<unknown>>;
|
|
647
|
+
retryJob(jobId: string): Promise<{
|
|
648
|
+
jobId: string;
|
|
649
|
+
status: string;
|
|
650
|
+
}>;
|
|
651
|
+
listMembers(params?: {
|
|
652
|
+
carrierId?: string;
|
|
653
|
+
status?: string;
|
|
654
|
+
periodYear?: number;
|
|
655
|
+
periodMonth?: number;
|
|
656
|
+
}): Promise<Page<unknown>>;
|
|
657
|
+
getMember(memberRefId: string): Promise<unknown>;
|
|
658
|
+
getMemberTimeline(memberRefId: string): Promise<Page<unknown>>;
|
|
659
|
+
/** Full audit journey of a member: every period it appeared, the source file,
|
|
660
|
+
* commission/premium, status + flags, and field-level changes — in order. */
|
|
661
|
+
getMemberJourney(memberRefId: string): Promise<Journey>;
|
|
662
|
+
/** Full audit journey of a single policy (member-scoped). */
|
|
663
|
+
getPolicyJourney(policyRefId: string): Promise<Journey>;
|
|
664
|
+
/** Where/when a member was last seen (period + originating file). */
|
|
665
|
+
getMemberLastSeen(memberRefId: string): Promise<unknown>;
|
|
666
|
+
/** List the account's members. */
|
|
667
|
+
listTeam(): Promise<{
|
|
668
|
+
data: TeamMember[];
|
|
669
|
+
}>;
|
|
670
|
+
/** Invite a teammate by email (passwordless — they sign in with a one-time code). */
|
|
671
|
+
inviteTeammate(email: string): Promise<{
|
|
672
|
+
status: string;
|
|
673
|
+
email: string;
|
|
674
|
+
userId?: string;
|
|
675
|
+
}>;
|
|
676
|
+
/** Remove a teammate and revoke their sessions. */
|
|
677
|
+
removeTeammate(userId: string): Promise<void>;
|
|
678
|
+
/** Read the account's audit trail (newest first). Filter by `action`. */
|
|
679
|
+
listAudit(params?: {
|
|
680
|
+
action?: string;
|
|
681
|
+
limit?: number;
|
|
682
|
+
offset?: number;
|
|
683
|
+
}): Promise<Page<AuditEvent>>;
|
|
684
|
+
compare(params: {
|
|
685
|
+
from: string;
|
|
686
|
+
to: string;
|
|
687
|
+
carrierId?: string;
|
|
688
|
+
granularity?: string;
|
|
689
|
+
}): Promise<{
|
|
690
|
+
from: string;
|
|
691
|
+
to: string;
|
|
692
|
+
summary: {
|
|
693
|
+
green: number;
|
|
694
|
+
yellow: number;
|
|
695
|
+
red: number;
|
|
696
|
+
new: number;
|
|
697
|
+
reappeared: number;
|
|
698
|
+
total: number;
|
|
699
|
+
};
|
|
700
|
+
data: ComparisonRow[];
|
|
701
|
+
}>;
|
|
702
|
+
rollup(period?: string, carrierId?: string): Promise<{
|
|
703
|
+
period: string | null;
|
|
704
|
+
totals: {
|
|
705
|
+
memberCount: number;
|
|
706
|
+
green: number;
|
|
707
|
+
yellow: number;
|
|
708
|
+
red: number;
|
|
709
|
+
new: number;
|
|
710
|
+
reappeared: number;
|
|
711
|
+
/** Commission at risk vs the prior period (MoM shortfall), in dollars. */
|
|
712
|
+
commissionAtRisk: number;
|
|
713
|
+
/** Of `commissionAtRisk`: prior commission of dropped members. */
|
|
714
|
+
commissionDropped: number;
|
|
715
|
+
/** Of `commissionAtRisk`: the decrease for members paid less. */
|
|
716
|
+
commissionReduced: number;
|
|
717
|
+
/** Number of still-present members paid less than the prior period. */
|
|
718
|
+
reducedCount: number;
|
|
719
|
+
/** Expected-vs-actual commission owed (recoverable), in dollars. */
|
|
720
|
+
commissionOwed: number;
|
|
721
|
+
/** Records the owed figure could be computed for (had a rate + inputs). */
|
|
722
|
+
owedEvaluated: number;
|
|
723
|
+
/** All records considered for owed (coverage denominator). */
|
|
724
|
+
owedTotal: number;
|
|
725
|
+
/** Members with a chargeback (net-negative commission) this period. */
|
|
726
|
+
chargebackCount: number;
|
|
727
|
+
/** Total commission clawed back this period (positive magnitude). */
|
|
728
|
+
chargebackAmount: number;
|
|
729
|
+
};
|
|
730
|
+
byCarrier: unknown[];
|
|
731
|
+
}>;
|
|
732
|
+
/** Chargebacks for a period, each enriched with the policy's original payout. */
|
|
733
|
+
listChargebacks(params?: {
|
|
734
|
+
period?: string;
|
|
735
|
+
carrierId?: string;
|
|
736
|
+
limit?: number;
|
|
737
|
+
offset?: number;
|
|
738
|
+
}): Promise<{
|
|
739
|
+
period: string | null;
|
|
740
|
+
data: ChargebackRow[];
|
|
741
|
+
} & Page<ChargebackRow>>;
|
|
742
|
+
attrition(period: string, carrierId?: string): Promise<{
|
|
743
|
+
attritionRate: number;
|
|
744
|
+
byCarrier: unknown[];
|
|
745
|
+
}>;
|
|
746
|
+
attritionSeries(params?: {
|
|
747
|
+
months?: number;
|
|
748
|
+
carrierId?: string;
|
|
749
|
+
}): Promise<{
|
|
750
|
+
data: AttritionPoint[];
|
|
751
|
+
}>;
|
|
752
|
+
dataQuality(period?: string): Promise<DataQualityReport>;
|
|
753
|
+
listExpectedRates(carrierId?: string): Promise<{
|
|
754
|
+
data: ExpectedCommissionRate[];
|
|
755
|
+
}>;
|
|
756
|
+
/** Upsert the contracted rate for a carrier (+ optional plan). Re-posting the
|
|
757
|
+
* same carrier+plan updates it. `rateValue` is a fraction for percent_of_premium.
|
|
758
|
+
* Returns `rescoredPeriods`: how many already-processed periods were re-scored to
|
|
759
|
+
* bring their stored "commission owed" totals in line with the new rate. */
|
|
760
|
+
upsertExpectedRate(input: {
|
|
761
|
+
carrierId: string;
|
|
762
|
+
planCode?: string | null;
|
|
763
|
+
rateType: 'percent_of_premium' | 'flat_per_member';
|
|
764
|
+
rateValue: number;
|
|
765
|
+
}): Promise<ExpectedCommissionRate & {
|
|
766
|
+
rescoredPeriods: number;
|
|
767
|
+
}>;
|
|
768
|
+
deleteExpectedRate(id: string): Promise<void>;
|
|
769
|
+
listWebhooks(): Promise<{
|
|
770
|
+
data: Webhook[];
|
|
771
|
+
}>;
|
|
772
|
+
/** Subscribe to job events. The signing `secret` is returned ONCE on creation. */
|
|
773
|
+
createWebhook(input: {
|
|
774
|
+
url: string;
|
|
775
|
+
events: ('job.completed' | 'job.failed')[];
|
|
776
|
+
}): Promise<Webhook & {
|
|
777
|
+
secret: string;
|
|
778
|
+
}>;
|
|
779
|
+
deleteWebhook(id: string): Promise<void>;
|
|
780
|
+
/** The account behind the current token. */
|
|
781
|
+
me(): Promise<{
|
|
782
|
+
accountId: string;
|
|
783
|
+
name: string;
|
|
784
|
+
status: string;
|
|
785
|
+
}>;
|
|
786
|
+
/** Liveness probe (no auth required). */
|
|
787
|
+
health(): Promise<{
|
|
788
|
+
status: string;
|
|
789
|
+
service: string;
|
|
790
|
+
environment: string;
|
|
791
|
+
}>;
|
|
792
|
+
getBilling(): Promise<BillingProfile>;
|
|
793
|
+
updateBilling(body: BillingDetails): Promise<BillingProfile>;
|
|
794
|
+
billingPreview(): Promise<BillingPreview>;
|
|
795
|
+
createSetupIntent(): Promise<{
|
|
796
|
+
clientSecret: string;
|
|
797
|
+
publishableKey: string | null;
|
|
798
|
+
customerId: string;
|
|
799
|
+
}>;
|
|
800
|
+
savePaymentMethod(paymentMethodId: string): Promise<{
|
|
801
|
+
method: string;
|
|
802
|
+
brand: string | null;
|
|
803
|
+
last4: string | null;
|
|
804
|
+
}>;
|
|
805
|
+
readonly admin: {
|
|
806
|
+
listAccounts: (status?: "active" | "pending" | "suspended") => Promise<{
|
|
807
|
+
data: {
|
|
808
|
+
id: string;
|
|
809
|
+
name: string;
|
|
810
|
+
slug: string;
|
|
811
|
+
status: string;
|
|
812
|
+
customRateCents?: number | null;
|
|
813
|
+
provisioned?: boolean;
|
|
814
|
+
}[];
|
|
815
|
+
}>;
|
|
816
|
+
setBillingRate: (accountId: string, rateCents: number | null) => Promise<{
|
|
817
|
+
accountId: string;
|
|
818
|
+
customRateCents: number | null;
|
|
819
|
+
}>;
|
|
820
|
+
getAccountBilling: (accountId: string) => Promise<AdminAccountBilling>;
|
|
821
|
+
/** Per-account dashboard: counts + latest-period rollup (members, status mix,
|
|
822
|
+
* owed, at-risk, chargebacks). */
|
|
823
|
+
accountOverview: (accountId: string) => Promise<AdminAccountOverview>;
|
|
824
|
+
accountFiles: (accountId: string, params?: {
|
|
825
|
+
limit?: number;
|
|
826
|
+
offset?: number;
|
|
827
|
+
}) => Promise<{
|
|
828
|
+
data: AdminAccountFile[];
|
|
829
|
+
}>;
|
|
830
|
+
accountJobs: (accountId: string, params?: {
|
|
831
|
+
limit?: number;
|
|
832
|
+
offset?: number;
|
|
833
|
+
}) => Promise<{
|
|
834
|
+
data: AdminAccountJob[];
|
|
835
|
+
}>;
|
|
836
|
+
accountUsers: (accountId: string) => Promise<{
|
|
837
|
+
data: AdminAccountUser[];
|
|
838
|
+
}>;
|
|
839
|
+
/** Recent scheduled-maintenance (cron) runs + the task schedule — System tab. */
|
|
840
|
+
cronRuns: (params?: {
|
|
841
|
+
limit?: number;
|
|
842
|
+
}) => Promise<AdminSystemActivity>;
|
|
843
|
+
/** Platform billing/revenue summary — heartbeats, projected revenue, A/R. */
|
|
844
|
+
revenue: () => Promise<AdminRevenueSummary>;
|
|
845
|
+
/** Set an account's AI-assistant monthly cap (cents) and pass-through billing. */
|
|
846
|
+
setAiSettings: (accountId: string, settings: {
|
|
847
|
+
capCents?: number;
|
|
848
|
+
passthrough?: boolean;
|
|
849
|
+
}) => Promise<{
|
|
850
|
+
accountId: string;
|
|
851
|
+
capCents?: number;
|
|
852
|
+
passthrough?: boolean;
|
|
853
|
+
}>;
|
|
854
|
+
setSurcharge: (accountId: string, enabled: boolean) => Promise<{
|
|
855
|
+
accountId: string;
|
|
856
|
+
surchargeEnabled: boolean;
|
|
857
|
+
}>;
|
|
858
|
+
approveAccount: (accountId: string) => Promise<{
|
|
859
|
+
id: string;
|
|
860
|
+
status: string;
|
|
861
|
+
notified: number;
|
|
862
|
+
provision?: AdminProvisionResult;
|
|
863
|
+
}>;
|
|
864
|
+
/** Provision (or re-provision) an account's data store. Pass a connString to
|
|
865
|
+
* use a database created out of band; omit it to auto-create a Neon DB. */
|
|
866
|
+
provisionAccount: (accountId: string, connString?: string) => Promise<AdminProvisionResult>;
|
|
867
|
+
createAccount: (name: string) => Promise<{
|
|
868
|
+
id: string;
|
|
869
|
+
name: string;
|
|
870
|
+
slug: string;
|
|
871
|
+
}>;
|
|
872
|
+
/** Purge ALL raw statement bytes for an account from object storage (retention). */
|
|
873
|
+
purgeAccountFiles: (accountId: string) => Promise<{
|
|
874
|
+
accountId: string;
|
|
875
|
+
purged: number;
|
|
876
|
+
}>;
|
|
877
|
+
issueToken: (accountId: string, label?: string) => Promise<{
|
|
878
|
+
tokenId: string;
|
|
879
|
+
token: string;
|
|
880
|
+
label: string;
|
|
881
|
+
}>;
|
|
882
|
+
/** List an account's API tokens — metadata only (never the secret). */
|
|
883
|
+
listTokens: (accountId: string) => Promise<{
|
|
884
|
+
data: {
|
|
885
|
+
id: string;
|
|
886
|
+
label: string | null;
|
|
887
|
+
revoked: boolean;
|
|
888
|
+
lastUsedAt: number | null;
|
|
889
|
+
createdAt: number;
|
|
890
|
+
}[];
|
|
891
|
+
}>;
|
|
892
|
+
revokeToken: (tokenId: string) => Promise<{
|
|
893
|
+
tokenId: string;
|
|
894
|
+
revoked: boolean;
|
|
895
|
+
}>;
|
|
896
|
+
storeCredentials: (accountId: string, body: {
|
|
897
|
+
connString: string;
|
|
898
|
+
region?: string;
|
|
899
|
+
}) => Promise<{
|
|
900
|
+
accountId: string;
|
|
901
|
+
stored: boolean;
|
|
902
|
+
}>;
|
|
903
|
+
createCarrier: (name: string, slug: string) => Promise<{
|
|
904
|
+
id: string;
|
|
905
|
+
name: string;
|
|
906
|
+
slug: string;
|
|
907
|
+
}>;
|
|
908
|
+
renameCarrier: (id: string, name: string, slug?: string) => Promise<{
|
|
909
|
+
id: string;
|
|
910
|
+
name: string;
|
|
911
|
+
slug?: string;
|
|
912
|
+
}>;
|
|
913
|
+
/** Onboarding: infer a draft config from a sample statement (CSV/XLSX). */
|
|
914
|
+
inferConfig: (carrierId: string, file: File | Blob, opts?: {
|
|
915
|
+
sheetName?: string;
|
|
916
|
+
fileType?: "csv" | "xlsx";
|
|
917
|
+
}) => Promise<InferredConfig>;
|
|
918
|
+
listUsers: () => Promise<{
|
|
919
|
+
data: AdminUser[];
|
|
920
|
+
}>;
|
|
921
|
+
createUser: (body: {
|
|
922
|
+
email: string;
|
|
923
|
+
accountId?: string;
|
|
924
|
+
role?: "member" | "admin";
|
|
925
|
+
}) => Promise<AdminUser>;
|
|
926
|
+
/** Update a user's role. A user's account link is immutable (set at invite). */
|
|
927
|
+
updateUser: (id: string, body: {
|
|
928
|
+
role: "member" | "admin";
|
|
929
|
+
}) => Promise<{
|
|
930
|
+
id: string;
|
|
931
|
+
updated: boolean;
|
|
932
|
+
}>;
|
|
933
|
+
deleteUser: (id: string) => Promise<{
|
|
934
|
+
id: string;
|
|
935
|
+
deleted: boolean;
|
|
936
|
+
}>;
|
|
937
|
+
createGlobalConfig: (carrierId: string, config: unknown) => Promise<{
|
|
938
|
+
id: string;
|
|
939
|
+
version: number;
|
|
940
|
+
}>;
|
|
941
|
+
listCarrierConfigs: (carrierId: string) => Promise<{
|
|
942
|
+
data: CarrierConfigEntry[];
|
|
943
|
+
}>;
|
|
944
|
+
updateCarrierConfig: (carrierId: string, configId: string, config: unknown) => Promise<{
|
|
945
|
+
id: string;
|
|
946
|
+
version: number;
|
|
947
|
+
updated: boolean;
|
|
948
|
+
}>;
|
|
949
|
+
addAllowlist: (email: string) => Promise<{
|
|
950
|
+
email: string;
|
|
951
|
+
}>;
|
|
952
|
+
listJobs: (params?: {
|
|
953
|
+
status?: string;
|
|
954
|
+
limit?: number;
|
|
955
|
+
offset?: number;
|
|
956
|
+
}) => Promise<Page<JobSummary & {
|
|
957
|
+
accountId: string;
|
|
958
|
+
rescoreSuggested?: boolean;
|
|
959
|
+
}>>;
|
|
960
|
+
jobDetail: (jobId: string) => Promise<AdminJobDetail>;
|
|
961
|
+
retryJob: (jobId: string) => Promise<{
|
|
962
|
+
jobId: string;
|
|
963
|
+
status: string;
|
|
964
|
+
}>;
|
|
965
|
+
rescoreJob: (jobId: string) => Promise<{
|
|
966
|
+
jobId: string;
|
|
967
|
+
status: string;
|
|
968
|
+
mode: string;
|
|
969
|
+
}>;
|
|
970
|
+
metrics: () => Promise<AdminMetrics>;
|
|
971
|
+
logs: (params?: {
|
|
972
|
+
limit?: number;
|
|
973
|
+
offset?: number;
|
|
974
|
+
}) => Promise<AdminLogs>;
|
|
975
|
+
};
|
|
976
|
+
}
|
|
977
|
+
export declare function query(params: Record<string, string | number | undefined>): string;
|