@conflict-hq/ezacto-client 0.1.0 → 0.1.2

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/src/generated.ts CHANGED
@@ -304,6 +304,92 @@ export type QuickBooksAuthorizeEnvelope = {
304
304
  };
305
305
  };
306
306
 
307
+ export type WiseConnection = {
308
+ "profile_id": string;
309
+ "profile_name": string | null;
310
+ "payable_recipients": number;
311
+ "webhooks_verifiable": boolean;
312
+ };
313
+
314
+ export type WiseRecipient = {
315
+ "id": string;
316
+ "holder_name": string | null;
317
+ "currency": string;
318
+ "type": string;
319
+ "masked_summary": string | null;
320
+ "email": string | null;
321
+ };
322
+
323
+ export type WiseStatusEnvelope = {
324
+ "data": {
325
+ "configured": boolean;
326
+ "connection": WiseConnection | null;
327
+ };
328
+ };
329
+
330
+ export type WiseRecipientListEnvelope = {
331
+ "data": Array<WiseRecipient>;
332
+ };
333
+
334
+ export type WiseOnboardInput = {
335
+ "user_id": number;
336
+ "email": string;
337
+ "legal_name": string;
338
+ "currency": string;
339
+ };
340
+
341
+ export type WiseDestinationEnvelope = {
342
+ "data": {
343
+ "configured": boolean;
344
+ "destination": {
345
+ "id": number;
346
+ "kind": "account" | "contact";
347
+ "linked_at": string;
348
+ "linked_by_user_id": number;
349
+ "verified_at": string | null;
350
+ } | null;
351
+ };
352
+ };
353
+
354
+ export type WiseProposal = {
355
+ "user_id": number;
356
+ "name": string;
357
+ "payroll_email": string | null;
358
+ "matches": Array<WiseRecipient>;
359
+ };
360
+
361
+ export type WiseProposalListEnvelope = {
362
+ "data": Array<WiseProposal>;
363
+ };
364
+
365
+ export type WiseContactInput = {
366
+ "user_id": number;
367
+ "identifier": string;
368
+ "currency": string;
369
+ };
370
+
371
+ export type WiseContactEnvelope = {
372
+ "data": {
373
+ "user_id": number;
374
+ "contact": {
375
+ "id": string;
376
+ "name": string | null;
377
+ };
378
+ };
379
+ };
380
+
381
+ export type WiseLinkInput = {
382
+ "user_id": number;
383
+ "recipient_id": string;
384
+ };
385
+
386
+ export type WiseLinkEnvelope = {
387
+ "data": {
388
+ "user_id": number;
389
+ "recipient": WiseRecipient;
390
+ };
391
+ };
392
+
307
393
  export type QuickBooksConnectionEnvelope = {
308
394
  "data": QuickBooksConnection | null;
309
395
  };
@@ -689,6 +775,11 @@ export type TeamRateInput = {
689
775
  "start_date": string | null;
690
776
  };
691
777
 
778
+ export type TeamRateRemovalInput = {
779
+ "expected_version": number;
780
+ "kind": "billable" | "cost";
781
+ };
782
+
692
783
  export type TeamCommandReceipt = {
693
784
  "target_user_id": number;
694
785
  "version": number;
@@ -847,6 +938,20 @@ export type TimeEntryNoteSettingsEnvelope = {
847
938
  "links": Links;
848
939
  };
849
940
 
941
+ export type Profile = {
942
+ "user_id": number;
943
+ "timezone": string;
944
+ };
945
+
946
+ export type ProfilePatch = {
947
+ "timezone"?: string;
948
+ };
949
+
950
+ export type ProfileEnvelope = {
951
+ "data": Profile;
952
+ "links": Links;
953
+ };
954
+
850
955
  export type TimeEntryOption = {
851
956
  "project_id": number;
852
957
  "task_id": number;
@@ -1708,6 +1813,12 @@ export type RecurringInvoice = {
1708
1813
  "next_issue_on": string;
1709
1814
  "amount_config": RecurringAmountConfig;
1710
1815
  "can_draw_from_retainer_id": number | null;
1816
+ "claims_project_ids": Array<number> | null;
1817
+ "claim_mode": "all" | "ceiling";
1818
+ "claim_ceiling_seconds": number | null;
1819
+ "claim_ceiling_cents": number | null;
1820
+ "claim_scope": "billable" | "tracked";
1821
+ "cost_alert_basis_points": number | null;
1711
1822
  "created_at": string;
1712
1823
  "updated_at": string;
1713
1824
  };
@@ -1738,6 +1849,37 @@ export type RecurringInvoicePage = {
1738
1849
  "page": PageMetadata;
1739
1850
  };
1740
1851
 
1852
+ export type BandClaimBackfillInput = {
1853
+ "invoice_ids": Array<number>;
1854
+ "project_ids"?: Array<number>;
1855
+ "apply"?: boolean;
1856
+ };
1857
+
1858
+ export type BandClaimBackfillLine = {
1859
+ "invoice_id": number;
1860
+ "number": string;
1861
+ "issue_date": string;
1862
+ "state": string;
1863
+ "amount_cents": number;
1864
+ "entry_count": number;
1865
+ "seconds": number;
1866
+ "billable_value_cents": number;
1867
+ "entries_without_billable_rate": number;
1868
+ "foregone_billable_cents": number;
1869
+ };
1870
+
1871
+ export type BandClaimBackfill = {
1872
+ "run_id": string;
1873
+ "applied": boolean;
1874
+ "invoices": Array<BandClaimBackfillLine>;
1875
+ "remaining_entry_count": number;
1876
+ "remaining_seconds": number;
1877
+ };
1878
+
1879
+ export type BandClaimBackfillEnvelope = {
1880
+ "data": BandClaimBackfill;
1881
+ };
1882
+
1741
1883
  export type RecurringInvoiceInput = {
1742
1884
  "client_id": number;
1743
1885
  "subject_template": string;
@@ -1747,6 +1889,12 @@ export type RecurringInvoiceInput = {
1747
1889
  "next_issue_on": string;
1748
1890
  "amount_config": RecurringAmountConfig;
1749
1891
  "can_draw_from_retainer_id"?: number | null;
1892
+ "claims_project_ids"?: Array<number> | null;
1893
+ "claim_mode"?: "all" | "ceiling";
1894
+ "claim_ceiling_seconds"?: number | null;
1895
+ "claim_ceiling_cents"?: number | null;
1896
+ "claim_scope"?: "billable" | "tracked";
1897
+ "cost_alert_basis_points"?: number | null;
1750
1898
  };
1751
1899
 
1752
1900
  export type MyHoursProject = {
@@ -1798,8 +1946,11 @@ export type DetailedTimeRow = {
1798
1946
  "time_entry_count": number;
1799
1947
  "billable_amount_cents"?: number | null;
1800
1948
  "entries_without_billable_rate": number;
1949
+ "claimed": boolean;
1801
1950
  "time_entry_id"?: number;
1951
+ "invoice_id"?: number | null;
1802
1952
  "notes"?: string | null;
1953
+ "project_active"?: boolean;
1803
1954
  };
1804
1955
 
1805
1956
  export type DetailedTimeCurrencyTotal = {
@@ -1813,13 +1964,20 @@ export type DetailedTimeReport = {
1813
1964
  "to": string;
1814
1965
  "client_id": number | null;
1815
1966
  "project_id": number | null;
1816
- "hours": "all" | "billable" | "non_billable" | "uninvoiced";
1967
+ "task_id": number | null;
1968
+ "user_id": number | null;
1969
+ "role_id": number | null;
1970
+ "tag_id": number | null;
1971
+ "invoice_state": "all" | "invoiced" | "uninvoiced";
1972
+ "hours": "all" | "billable" | "non_billable" | "uninvoiced" | "claimed" | "unclaimed";
1817
1973
  "grain": "day" | "entry";
1818
1974
  "active_projects_only": boolean;
1819
1975
  "seconds": number;
1820
1976
  "rounded_seconds": number;
1821
1977
  "billable_seconds": number;
1822
1978
  "uninvoiced_billable_seconds": number;
1979
+ "claimed_seconds": number;
1980
+ "unclaimed_seconds": number;
1823
1981
  "time_entry_count": number;
1824
1982
  "currencies": Array<DetailedTimeCurrencyTotal>;
1825
1983
  "rows": Array<DetailedTimeRow>;
@@ -1830,6 +1988,30 @@ export type DetailedTimeReportEnvelope = {
1830
1988
  "links": Links;
1831
1989
  };
1832
1990
 
1991
+ export type ReportTimeActionInput = {
1992
+ "command_id": string;
1993
+ "action": "mark_invoiced" | "mark_uninvoiced" | "move";
1994
+ "entry_ids": Array<number>;
1995
+ "confirmed": true;
1996
+ "invoice_id"?: number;
1997
+ "project_id"?: number;
1998
+ "task_id"?: number;
1999
+ };
2000
+
2001
+ export type ReportTimeAction = {
2002
+ "command_id": string;
2003
+ "action": "mark_invoiced" | "mark_uninvoiced" | "move";
2004
+ "requested": number;
2005
+ "changed_entry_ids": Array<number>;
2006
+ "ineligible_entry_ids": Array<number>;
2007
+ "replayed": boolean;
2008
+ };
2009
+
2010
+ export type ReportTimeActionEnvelope = {
2011
+ "data": ReportTimeAction;
2012
+ "links": Links;
2013
+ };
2014
+
1833
2015
  export type TimeReportAmount = {
1834
2016
  "currency": string;
1835
2017
  "billable_cents": number;
@@ -1898,6 +2080,7 @@ export type TimeReportTeammateRow = {
1898
2080
  export type TimeReport = {
1899
2081
  "from": string;
1900
2082
  "to": string;
2083
+ "fixed_fee_included": boolean;
1901
2084
  "totals": TimeReportTotals;
1902
2085
  "clients": Array<TimeReportClientRow>;
1903
2086
  "projects": Array<TimeReportProjectRow>;
@@ -1951,7 +2134,11 @@ export type ContractorCostRow = {
1951
2134
  "is_contractor": boolean;
1952
2135
  "currency": string;
1953
2136
  "rounded_seconds": number;
2137
+ "utilization_ppm": number | null;
1954
2138
  "cost_cents": number | null;
2139
+ "cost_rate_cents": number | null;
2140
+ "cost_rate_is_mixed": boolean;
2141
+ "entry_count": number;
1955
2142
  "entries_without_rate": number;
1956
2143
  };
1957
2144
 
@@ -1966,6 +2153,213 @@ export type ContractorCostReportEnvelope = {
1966
2153
  "links": Links;
1967
2154
  };
1968
2155
 
2156
+ export type InvoicedReportTotal = {
2157
+ "currency": string;
2158
+ "invoice_count": number;
2159
+ "invoiced_cents"?: number;
2160
+ "paid_cents"?: number;
2161
+ "balance_cents"?: number;
2162
+ };
2163
+
2164
+ export type InvoicedReportRow = {
2165
+ "invoice_id": number;
2166
+ "number": string;
2167
+ "state": "draft" | "open" | "paid" | "closed";
2168
+ "close_reason": "cancelled" | "written_off" | "source_closed" | null;
2169
+ "issue_date": string;
2170
+ "due_date": string;
2171
+ "client_id": number;
2172
+ "client_name": string;
2173
+ "subject": string | null;
2174
+ "currency": string;
2175
+ "invoiced_cents"?: number;
2176
+ "paid_cents"?: number;
2177
+ "balance_cents"?: number;
2178
+ };
2179
+
2180
+ export type InvoicedReport = {
2181
+ "from": string;
2182
+ "to": string;
2183
+ "client_id": number | null;
2184
+ "status": "draft" | "open" | "paid" | "closed" | null;
2185
+ "totals": Array<InvoicedReportTotal>;
2186
+ "rows": Array<InvoicedReportRow>;
2187
+ };
2188
+
2189
+ export type InvoicedReportEnvelope = {
2190
+ "data": InvoicedReport;
2191
+ "links": Links;
2192
+ };
2193
+
2194
+ export type PaymentsReceivedReportTotal = {
2195
+ "currency": string;
2196
+ "payment_count": number;
2197
+ "payment_cents"?: number;
2198
+ };
2199
+
2200
+ export type PaymentReceivedReportRow = {
2201
+ "payment_id": number;
2202
+ "payment_date": string;
2203
+ "invoice_id": number;
2204
+ "invoice_number": string;
2205
+ "client_id": number;
2206
+ "client_name": string;
2207
+ "currency": string;
2208
+ "provider": string;
2209
+ "invoice_total_cents"?: number;
2210
+ "payment_cents"?: number;
2211
+ };
2212
+
2213
+ export type PaymentsReceivedReport = {
2214
+ "from": string;
2215
+ "to": string;
2216
+ "client_id": number | null;
2217
+ "totals": Array<PaymentsReceivedReportTotal>;
2218
+ "rows": Array<PaymentReceivedReportRow>;
2219
+ };
2220
+
2221
+ export type PaymentsReceivedReportEnvelope = {
2222
+ "data": PaymentsReceivedReport;
2223
+ "links": Links;
2224
+ };
2225
+
2226
+ export type ReceivablesReportTotal = {
2227
+ "currency": string;
2228
+ "invoice_count": number;
2229
+ "invoiced_cents"?: number;
2230
+ "outstanding_cents"?: number;
2231
+ "not_due_cents"?: number;
2232
+ "days_1_to_30_cents"?: number;
2233
+ "days_31_to_60_cents"?: number;
2234
+ "days_61_to_90_cents"?: number;
2235
+ "days_90_plus_cents"?: number;
2236
+ };
2237
+
2238
+ export type ReceivablesReportRow = {
2239
+ "client_id": number;
2240
+ "client_name": string;
2241
+ "currency": string;
2242
+ "invoice_count": number;
2243
+ "invoiced_cents"?: number;
2244
+ "outstanding_cents"?: number;
2245
+ "not_due_cents"?: number;
2246
+ "days_1_to_30_cents"?: number;
2247
+ "days_31_to_60_cents"?: number;
2248
+ "days_61_to_90_cents"?: number;
2249
+ "days_90_plus_cents"?: number;
2250
+ };
2251
+
2252
+ export type ReceivablesReport = {
2253
+ "as_of": string;
2254
+ "client_id": number | null;
2255
+ "totals": Array<ReceivablesReportTotal>;
2256
+ "rows": Array<ReceivablesReportRow>;
2257
+ };
2258
+
2259
+ export type ReceivablesReportEnvelope = {
2260
+ "data": ReceivablesReport;
2261
+ "links": Links;
2262
+ };
2263
+
2264
+ export type ReportDefinitionPresentation = {
2265
+ "result": "summary" | "detailed";
2266
+ "grouped": boolean;
2267
+ "include_zero_values": boolean;
2268
+ };
2269
+
2270
+ export type SavedReportInput = {
2271
+ "name": string;
2272
+ "fields": Array<{
2273
+ [key: string]: unknown;
2274
+ }>;
2275
+ "metrics": Array<string>;
2276
+ "filters": Array<{
2277
+ [key: string]: unknown;
2278
+ }>;
2279
+ "group_by": {
2280
+ [key: string]: unknown;
2281
+ } | null;
2282
+ "presentation": ReportDefinitionPresentation;
2283
+ };
2284
+
2285
+ export type SavedReportUpdate = {
2286
+ "version": number;
2287
+ "name"?: string;
2288
+ "fields"?: Array<{
2289
+ [key: string]: unknown;
2290
+ }>;
2291
+ "metrics"?: Array<string>;
2292
+ "filters"?: Array<{
2293
+ [key: string]: unknown;
2294
+ }>;
2295
+ "group_by"?: {
2296
+ [key: string]: unknown;
2297
+ } | null;
2298
+ "presentation"?: ReportDefinitionPresentation;
2299
+ };
2300
+
2301
+ export type SavedReport = {
2302
+ "id": string;
2303
+ "name": string;
2304
+ "version": number;
2305
+ "fields": Array<{
2306
+ [key: string]: unknown;
2307
+ }>;
2308
+ "metrics": Array<string>;
2309
+ "filters": Array<{
2310
+ [key: string]: unknown;
2311
+ }>;
2312
+ "group_by": {
2313
+ [key: string]: unknown;
2314
+ } | null;
2315
+ "presentation": ReportDefinitionPresentation;
2316
+ "owner": {
2317
+ [key: string]: unknown;
2318
+ };
2319
+ "is_custom": boolean;
2320
+ "pinned": boolean;
2321
+ "shared": boolean;
2322
+ "created_at": string;
2323
+ "updated_at": string;
2324
+ };
2325
+
2326
+ export type SavedReportEnvelope = {
2327
+ "data": SavedReport;
2328
+ "links": Links;
2329
+ };
2330
+
2331
+ export type SavedReportListEnvelope = {
2332
+ "data": Array<SavedReport>;
2333
+ };
2334
+
2335
+ export type ReportRunnerResult = {
2336
+ "definitionId": string;
2337
+ "definitionVersion": number;
2338
+ "state": "ready" | "empty" | "too_many_rows";
2339
+ "rows": Array<{
2340
+ [key: string]: unknown;
2341
+ }>;
2342
+ };
2343
+
2344
+ export type ReportRunnerEnvelope = {
2345
+ "data": ReportRunnerResult;
2346
+ "links": Links;
2347
+ };
2348
+
2349
+ export type ReportDefinitionRegistry = {
2350
+ "fields": Array<{
2351
+ [key: string]: unknown;
2352
+ }>;
2353
+ "metrics": Array<{
2354
+ [key: string]: unknown;
2355
+ }>;
2356
+ };
2357
+
2358
+ export type ReportDefinitionRegistryEnvelope = {
2359
+ "data": ReportDefinitionRegistry;
2360
+ "links": Links;
2361
+ };
2362
+
1969
2363
  export type DetailedExpenseRow = {
1970
2364
  "expense_id": number;
1971
2365
  "spent_date": string;
@@ -1998,7 +2392,12 @@ export type DetailedExpenseReport = {
1998
2392
  "to": string;
1999
2393
  "client_id": number | null;
2000
2394
  "project_id": number | null;
2001
- "billable_only": boolean;
2395
+ "category_id": number | null;
2396
+ "user_id": number | null;
2397
+ "billable": boolean | null;
2398
+ "reimbursable": boolean | null;
2399
+ "invoice_state": "all" | "invoiced" | "uninvoiced";
2400
+ "active_projects_only": boolean;
2002
2401
  "totals": Array<DetailedExpenseTotal>;
2003
2402
  "rows": Array<DetailedExpenseRow>;
2004
2403
  };
@@ -2008,6 +2407,80 @@ export type DetailedExpenseReportEnvelope = {
2008
2407
  "links": Links;
2009
2408
  };
2010
2409
 
2410
+ export type MonthEndItem = {
2411
+ "subject_type": string;
2412
+ "subject_id": number;
2413
+ "description": string;
2414
+ "amount_cents": number | null;
2415
+ "currency": string | null;
2416
+ "target": string | null;
2417
+ "brand_name": string | null;
2418
+ "cost_cents": number | null;
2419
+ "margin_cents": number | null;
2420
+ };
2421
+
2422
+ export type MonthEndExclusion = {
2423
+ "invoice_id": number;
2424
+ "number": string;
2425
+ "reason": string;
2426
+ };
2427
+
2428
+ export type MonthEndManifest = {
2429
+ "period_start": string;
2430
+ "period_end": string;
2431
+ "items": Array<MonthEndItem>;
2432
+ "excluded": Array<MonthEndExclusion>;
2433
+ };
2434
+
2435
+ export type MonthEndManifestEnvelope = {
2436
+ "data": MonthEndManifest;
2437
+ "links": Links;
2438
+ };
2439
+
2440
+ export type BandedMonthRow = {
2441
+ "period_start": string;
2442
+ "period_end": string;
2443
+ "project_id": number;
2444
+ "project_name": string;
2445
+ "client_id": number;
2446
+ "client_name": string;
2447
+ "currency": string;
2448
+ "rounded_seconds": number;
2449
+ "billable_value_cents": number | null;
2450
+ "cost_value_cents": number | null;
2451
+ "entries_without_billable_rate": number;
2452
+ "entries_without_cost_rate": number;
2453
+ "claimed_in_other_currency": number;
2454
+ "billed_cents": number | null;
2455
+ "foregone_cents": number | null;
2456
+ "cost_ratio_basis_points": number | null;
2457
+ "cost_alert_basis_points": number;
2458
+ "cost_ratio_state": "within" | "over" | "unpriced" | "unbilled";
2459
+ };
2460
+
2461
+ export type BandedMonthReport = {
2462
+ "from": string;
2463
+ "to": string;
2464
+ "rows": Array<BandedMonthRow>;
2465
+ };
2466
+
2467
+ export type BandedMonthReportEnvelope = {
2468
+ "data": BandedMonthReport;
2469
+ "links": Links;
2470
+ };
2471
+
2472
+ export type BandCostAlert = {
2473
+ "basis_points": number;
2474
+ };
2475
+
2476
+ export type BandCostAlertEnvelope = {
2477
+ "data": BandCostAlert;
2478
+ };
2479
+
2480
+ export type BandCostAlertInput = {
2481
+ "basis_points": number;
2482
+ };
2483
+
2011
2484
  export type ProfitabilityRow = {
2012
2485
  "project_id": number;
2013
2486
  "project_name": string;
@@ -2019,6 +2492,9 @@ export type ProfitabilityRow = {
2019
2492
  "revenue_cents": number | null;
2020
2493
  "cost_cents": number | null;
2021
2494
  "profit_cents": number | null;
2495
+ "return_on_cost_ppm": number | null;
2496
+ "revenue_fee_cents": number;
2497
+ "fees_included_in_delivery_cost_cents": number;
2022
2498
  "entries_without_billable_rate": number;
2023
2499
  "entries_without_cost_rate": number;
2024
2500
  };
@@ -2028,17 +2504,54 @@ export type ProfitabilityTotals = {
2028
2504
  "revenue_cents": number | null;
2029
2505
  "cost_cents": number | null;
2030
2506
  "profit_cents": number | null;
2507
+ "return_on_cost_ppm": number | null;
2508
+ "revenue_fee_cents": number;
2509
+ "fees_included_in_delivery_cost_cents": number;
2031
2510
  "entries_without_billable_rate": number;
2032
2511
  "entries_without_cost_rate": number;
2033
2512
  "projects_not_converted": number;
2034
2513
  };
2035
2514
 
2036
- export type ProfitabilityReport = {
2037
- "from": string;
2038
- "to": string;
2039
- "organization_currency": string;
2515
+ export type ProfitabilityDimensionRow = {
2516
+ "dimension_id": number;
2517
+ "dimension_name": string;
2518
+ "currency": string;
2519
+ "rounded_seconds": number;
2520
+ "revenue_cents": number | null;
2521
+ "cost_cents": number | null;
2522
+ "profit_cents": number | null;
2523
+ "return_on_cost_ppm": number | null;
2524
+ "revenue_fee_cents": number;
2525
+ "fees_included_in_delivery_cost_cents": number;
2526
+ "entries_without_billable_rate": number;
2527
+ "entries_without_cost_rate": number;
2528
+ "included_in_headline": boolean;
2529
+ };
2530
+
2531
+ export type ProfitabilityTrendRow = (ProfitabilityDimensionRow) & ({
2532
+ "period_start": string;
2533
+ "period_end": string;
2534
+ "current": boolean;
2535
+ });
2536
+
2537
+ export type ProfitabilityFilters = {
2538
+ "project_status": "all" | "active" | "archived";
2539
+ "billing_method": "non_billable" | "time_materials" | "fixed_fee" | null;
2540
+ "manager_id": number | null;
2541
+ "tag_id": number | null;
2542
+ };
2543
+
2544
+ export type ProfitabilityReport = {
2545
+ "from": string;
2546
+ "to": string;
2547
+ "organization_currency": string;
2040
2548
  "rows": Array<ProfitabilityRow>;
2549
+ "clients": Array<ProfitabilityDimensionRow>;
2550
+ "teammates": Array<ProfitabilityDimensionRow>;
2551
+ "tasks": Array<ProfitabilityDimensionRow>;
2552
+ "trend": Array<ProfitabilityTrendRow>;
2041
2553
  "totals": ProfitabilityTotals;
2554
+ "filters": ProfitabilityFilters;
2042
2555
  "previous_from": string;
2043
2556
  "previous_to": string;
2044
2557
  "previous_totals": ProfitabilityTotals;
@@ -2161,6 +2674,17 @@ export type ModuleListEnvelope = {
2161
2674
  "links": Links;
2162
2675
  };
2163
2676
 
2677
+ export type SignInMethodState = {
2678
+ "method": "password" | "magic_link" | "google" | "github" | "apple";
2679
+ "configured": boolean;
2680
+ "enabled": boolean;
2681
+ };
2682
+
2683
+ export type SignInMethodListEnvelope = {
2684
+ "data": Array<SignInMethodState>;
2685
+ "links": Links;
2686
+ };
2687
+
2164
2688
  export type SsoDomain = {
2165
2689
  "id": number;
2166
2690
  "domain": string;
@@ -2268,6 +2792,77 @@ export type BillClientDeliveryEnvelope = {
2268
2792
  "data": BillClientDelivery;
2269
2793
  };
2270
2794
 
2795
+ export type InvoicePaymentLinkEnvelope = {
2796
+ "data": {
2797
+ "invoice_id": number;
2798
+ "url": string;
2799
+ };
2800
+ };
2801
+
2802
+ export type IncompleteRecurringInvoiceListEnvelope = {
2803
+ "data": Array<{
2804
+ "id": number;
2805
+ "harvest_id": number;
2806
+ "client_id": number;
2807
+ "client_name": string;
2808
+ "invoice_count": number;
2809
+ "created_at": string;
2810
+ "updated_at": string;
2811
+ }>;
2812
+ };
2813
+
2814
+ export type RecurringInvoiceCompletionEnvelope = {
2815
+ "data": {
2816
+ "id": number;
2817
+ "completed": boolean;
2818
+ };
2819
+ };
2820
+
2821
+ export type InvoiceThankYouPreferenceEnvelope = {
2822
+ "data": {
2823
+ "invoice_id": number;
2824
+ "auto_thank_you": boolean;
2825
+ "organization_auto_thank_you": boolean;
2826
+ "effective": boolean;
2827
+ };
2828
+ };
2829
+
2830
+ export type OrganizationInvoiceThankYouEnvelope = {
2831
+ "data": {
2832
+ "auto_thank_you": boolean;
2833
+ };
2834
+ };
2835
+
2836
+ export type InvoiceDocumentPreferenceEnvelope = {
2837
+ "data": {
2838
+ "invoice_id": number;
2839
+ "attach_pdf": boolean;
2840
+ "organization_attach_pdf": boolean;
2841
+ "effective": boolean;
2842
+ "attach_files": boolean;
2843
+ "organization_attach_files": boolean;
2844
+ "effective_files": boolean;
2845
+ "attach_journal": "detailed" | "summary" | boolean;
2846
+ "organization_attach_journal": "detailed" | "summary" | boolean;
2847
+ "effective_journal": "detailed" | "summary" | boolean;
2848
+ };
2849
+ };
2850
+
2851
+ export type OrganizationInvoiceDocumentsEnvelope = {
2852
+ "data": {
2853
+ "attach_pdf": boolean;
2854
+ "attach_files": boolean;
2855
+ "attach_journal": "detailed" | "summary" | boolean;
2856
+ };
2857
+ };
2858
+
2859
+ export type ReleasedTimeEnvelope = {
2860
+ "data": {
2861
+ "invoice_id": number;
2862
+ "released": number;
2863
+ };
2864
+ };
2865
+
2271
2866
  export type PayoutAccount = {
2272
2867
  "id": number;
2273
2868
  "user_id": number;
@@ -2325,6 +2920,31 @@ export type TwoFactorCodeInput = {
2325
2920
  "code": string;
2326
2921
  };
2327
2922
 
2923
+ export type TwoFactorChallengeIssued = {
2924
+ "status": "two_factor_required";
2925
+ "challenge": string;
2926
+ "expires_at": string;
2927
+ };
2928
+
2929
+ export type TwoFactorChallengeInput = {
2930
+ "code": string;
2931
+ "challenge"?: string;
2932
+ };
2933
+
2934
+ export type TwoFactorChallengeAccepted = {
2935
+ "status": "authenticated";
2936
+ };
2937
+
2938
+ export type TwoFactorChallengeAcceptedEnvelope = {
2939
+ "data": TwoFactorChallengeAccepted;
2940
+ };
2941
+
2942
+ export type SignInResult = AuthPrincipal | TwoFactorChallengeIssued;
2943
+
2944
+ export type SignInResultEnvelope = {
2945
+ "data": SignInResult;
2946
+ };
2947
+
2328
2948
  export type UserEmailInput = {
2329
2949
  "email": string;
2330
2950
  };
@@ -2381,7 +3001,14 @@ export class EzactoClient {
2381
3001
  ? options.baseUrl
2382
3002
  : `${options.baseUrl}/`;
2383
3003
  this.token = options.token;
2384
- this.fetchImplementation = options.fetch ?? globalThis.fetch;
3004
+ // Bound, because this is stored on the instance and later called as
3005
+ // `this.fetchImplementation(...)`. A browser's fetch is a method of
3006
+ // Window and refuses any other receiver, so the unbound form threw
3007
+ // "Failed to execute 'fetch' on 'Window': Illegal invocation" on every
3008
+ // request from a page or an extension (#772). Binding whatever we are
3009
+ // given also covers a caller who hands us a bare `globalThis.fetch`;
3010
+ // an arrow or an already-bound function ignores the receiver anyway.
3011
+ this.fetchImplementation = (options.fetch ?? globalThis.fetch).bind(globalThis);
2385
3012
  this.defaultHeaders = new Headers(options.headers);
2386
3013
  }
2387
3014
 
@@ -2448,10 +3075,20 @@ export class EzactoClient {
2448
3075
  });
2449
3076
  }
2450
3077
 
2451
- async signIn(args: { body: PasswordSignInInput; signal?: AbortSignal; headers?: HeadersInit }): Promise<AuthPrincipalEnvelope> {
3078
+ async signIn(args: { body: PasswordSignInInput; signal?: AbortSignal; headers?: HeadersInit }): Promise<SignInResultEnvelope> {
3079
+ const headers = new Headers(args.headers);
3080
+
3081
+ return this.request<SignInResultEnvelope>("POST", "/auth/sign-in", {
3082
+ body: args.body,
3083
+ signal: args.signal,
3084
+ headers,
3085
+ });
3086
+ }
3087
+
3088
+ async completeTwoFactorChallenge(args: { body: TwoFactorChallengeInput; signal?: AbortSignal; headers?: HeadersInit }): Promise<TwoFactorChallengeAcceptedEnvelope> {
2452
3089
  const headers = new Headers(args.headers);
2453
3090
 
2454
- return this.request<AuthPrincipalEnvelope>("POST", "/auth/sign-in", {
3091
+ return this.request<TwoFactorChallengeAcceptedEnvelope>("POST", "/auth/two-factor/challenge", {
2455
3092
  body: args.body,
2456
3093
  signal: args.signal,
2457
3094
  headers,
@@ -2696,6 +3333,25 @@ export class EzactoClient {
2696
3333
  });
2697
3334
  }
2698
3335
 
3336
+ async getProfile(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<ProfileEnvelope> {
3337
+ const headers = new Headers(args.headers);
3338
+
3339
+ return this.request<ProfileEnvelope>("GET", "/api/v1/profile", {
3340
+ signal: args.signal,
3341
+ headers,
3342
+ });
3343
+ }
3344
+
3345
+ async updateProfile(args: { body: ProfilePatch; signal?: AbortSignal; headers?: HeadersInit }): Promise<ProfileEnvelope> {
3346
+ const headers = new Headers(args.headers);
3347
+
3348
+ return this.request<ProfileEnvelope>("PATCH", "/api/v1/profile", {
3349
+ body: args.body,
3350
+ signal: args.signal,
3351
+ headers,
3352
+ });
3353
+ }
3354
+
2699
3355
  async listClients(args: { query?: { "cursor"?: string; "per_page"?: number; "is_active"?: boolean; "updated_since"?: string; "parent_client_id"?: number; "bill_to_client_id"?: number; "q"?: string }; signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<GeneralResourcePage> {
2700
3356
  const headers = new Headers(args.headers);
2701
3357
 
@@ -3492,7 +4148,7 @@ export class EzactoClient {
3492
4148
  });
3493
4149
  }
3494
4150
 
3495
- async listInvoices(args: { query?: { "cursor"?: string; "per_page"?: number; "state"?: string }; signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<InvoicePage> {
4151
+ async listInvoices(args: { query?: { "cursor"?: string; "per_page"?: number; "state"?: string; "client_id"?: string }; signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<InvoicePage> {
3496
4152
  const headers = new Headers(args.headers);
3497
4153
 
3498
4154
  return this.request<InvoicePage>("GET", "/api/v1/invoices", {
@@ -3687,7 +4343,7 @@ export class EzactoClient {
3687
4343
  });
3688
4344
  }
3689
4345
 
3690
- async listRetainers(args: { query?: { "cursor"?: string; "per_page"?: number }; signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<RetainerPage> {
4346
+ async listRetainers(args: { query?: { "cursor"?: string; "per_page"?: number; "client_id"?: string }; signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<RetainerPage> {
3691
4347
  const headers = new Headers(args.headers);
3692
4348
 
3693
4349
  return this.request<RetainerPage>("GET", "/api/v1/retainers", {
@@ -3803,6 +4459,16 @@ export class EzactoClient {
3803
4459
  });
3804
4460
  }
3805
4461
 
4462
+ async backfillRecurringInvoiceClaims(args: { "id": number; "Idempotency-Key": string; body: BandClaimBackfillInput; signal?: AbortSignal; headers?: HeadersInit }): Promise<BandClaimBackfillEnvelope> {
4463
+ const headers = new Headers(args.headers);
4464
+ if (args["Idempotency-Key"] !== undefined) headers.set("Idempotency-Key", String(args["Idempotency-Key"]));
4465
+ return this.request<BandClaimBackfillEnvelope>("POST", "/api/v1/recurring-invoices/:id/claim-backfill".replace(":id", encodeURIComponent(String(args["id"]))), {
4466
+ body: args.body,
4467
+ signal: args.signal,
4468
+ headers,
4469
+ });
4470
+ }
4471
+
3806
4472
  async generateRecurringInvoice(args: { "id": number; "Idempotency-Key": string; signal?: AbortSignal; headers?: HeadersInit }): Promise<RecurringGenerationEnvelope> {
3807
4473
  const headers = new Headers(args.headers);
3808
4474
  if (args["Idempotency-Key"] !== undefined) headers.set("Idempotency-Key", String(args["Idempotency-Key"]));
@@ -4007,6 +4673,127 @@ export class EzactoClient {
4007
4673
  });
4008
4674
  }
4009
4675
 
4676
+ async getReportDefinitionRegistry(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<ReportDefinitionRegistryEnvelope> {
4677
+ const headers = new Headers(args.headers);
4678
+
4679
+ return this.request<ReportDefinitionRegistryEnvelope>("GET", "/api/v1/report-definitions/registry", {
4680
+ signal: args.signal,
4681
+ headers,
4682
+ });
4683
+ }
4684
+
4685
+ async listSavedReports(args: { query?: { "view"?: "all" | "yours" | "shared"; "q"?: string; "custom_only"?: boolean }; signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<SavedReportListEnvelope> {
4686
+ const headers = new Headers(args.headers);
4687
+
4688
+ return this.request<SavedReportListEnvelope>("GET", "/api/v1/report-definitions", {
4689
+ query: args.query,
4690
+ signal: args.signal,
4691
+ headers,
4692
+ });
4693
+ }
4694
+
4695
+ async createSavedReport(args: { body: SavedReportInput; signal?: AbortSignal; headers?: HeadersInit }): Promise<SavedReportEnvelope> {
4696
+ const headers = new Headers(args.headers);
4697
+
4698
+ return this.request<SavedReportEnvelope>("POST", "/api/v1/report-definitions", {
4699
+ body: args.body,
4700
+ signal: args.signal,
4701
+ headers,
4702
+ });
4703
+ }
4704
+
4705
+ async previewReportDefinition(args: { body: SavedReportInput; signal?: AbortSignal; headers?: HeadersInit }): Promise<ReportRunnerEnvelope> {
4706
+ const headers = new Headers(args.headers);
4707
+
4708
+ return this.request<ReportRunnerEnvelope>("POST", "/api/v1/report-definitions/preview", {
4709
+ body: args.body,
4710
+ signal: args.signal,
4711
+ headers,
4712
+ });
4713
+ }
4714
+
4715
+ async getSavedReport(args: { "reportId": string; signal?: AbortSignal; headers?: HeadersInit }): Promise<SavedReportEnvelope> {
4716
+ const headers = new Headers(args.headers);
4717
+
4718
+ return this.request<SavedReportEnvelope>("GET", "/api/v1/report-definitions/:reportId".replace(":reportId", encodeURIComponent(String(args["reportId"]))), {
4719
+ signal: args.signal,
4720
+ headers,
4721
+ });
4722
+ }
4723
+
4724
+ async updateSavedReport(args: { "reportId": string; body: SavedReportUpdate; signal?: AbortSignal; headers?: HeadersInit }): Promise<SavedReportEnvelope> {
4725
+ const headers = new Headers(args.headers);
4726
+
4727
+ return this.request<SavedReportEnvelope>("PATCH", "/api/v1/report-definitions/:reportId".replace(":reportId", encodeURIComponent(String(args["reportId"]))), {
4728
+ body: args.body,
4729
+ signal: args.signal,
4730
+ headers,
4731
+ });
4732
+ }
4733
+
4734
+ async deleteSavedReport(args: { "reportId": string; signal?: AbortSignal; headers?: HeadersInit }): Promise<void> {
4735
+ const headers = new Headers(args.headers);
4736
+
4737
+ return this.request<void>("DELETE", "/api/v1/report-definitions/:reportId".replace(":reportId", encodeURIComponent(String(args["reportId"]))), {
4738
+ signal: args.signal,
4739
+ headers,
4740
+ });
4741
+ }
4742
+
4743
+ async duplicateSavedReport(args: { "reportId": string; signal?: AbortSignal; headers?: HeadersInit }): Promise<SavedReportEnvelope> {
4744
+ const headers = new Headers(args.headers);
4745
+
4746
+ return this.request<SavedReportEnvelope>("POST", "/api/v1/report-definitions/:reportId/duplicate".replace(":reportId", encodeURIComponent(String(args["reportId"]))), {
4747
+ signal: args.signal,
4748
+ headers,
4749
+ });
4750
+ }
4751
+
4752
+ async pinSavedReport(args: { "reportId": string; signal?: AbortSignal; headers?: HeadersInit }): Promise<void> {
4753
+ const headers = new Headers(args.headers);
4754
+
4755
+ return this.request<void>("POST", "/api/v1/report-definitions/:reportId/pin".replace(":reportId", encodeURIComponent(String(args["reportId"]))), {
4756
+ signal: args.signal,
4757
+ headers,
4758
+ });
4759
+ }
4760
+
4761
+ async unpinSavedReport(args: { "reportId": string; signal?: AbortSignal; headers?: HeadersInit }): Promise<void> {
4762
+ const headers = new Headers(args.headers);
4763
+
4764
+ return this.request<void>("DELETE", "/api/v1/report-definitions/:reportId/pin".replace(":reportId", encodeURIComponent(String(args["reportId"]))), {
4765
+ signal: args.signal,
4766
+ headers,
4767
+ });
4768
+ }
4769
+
4770
+ async shareSavedReport(args: { "reportId": string; "userId": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<void> {
4771
+ const headers = new Headers(args.headers);
4772
+
4773
+ return this.request<void>("POST", "/api/v1/report-definitions/:reportId/shares/:userId".replace(":reportId", encodeURIComponent(String(args["reportId"]))).replace(":userId", encodeURIComponent(String(args["userId"]))), {
4774
+ signal: args.signal,
4775
+ headers,
4776
+ });
4777
+ }
4778
+
4779
+ async unshareSavedReport(args: { "reportId": string; "userId": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<void> {
4780
+ const headers = new Headers(args.headers);
4781
+
4782
+ return this.request<void>("DELETE", "/api/v1/report-definitions/:reportId/shares/:userId".replace(":reportId", encodeURIComponent(String(args["reportId"]))).replace(":userId", encodeURIComponent(String(args["userId"]))), {
4783
+ signal: args.signal,
4784
+ headers,
4785
+ });
4786
+ }
4787
+
4788
+ async runSavedReport(args: { "reportId": string; signal?: AbortSignal; headers?: HeadersInit }): Promise<ReportRunnerEnvelope> {
4789
+ const headers = new Headers(args.headers);
4790
+
4791
+ return this.request<ReportRunnerEnvelope>("POST", "/api/v1/report-definitions/:reportId/run".replace(":reportId", encodeURIComponent(String(args["reportId"]))), {
4792
+ signal: args.signal,
4793
+ headers,
4794
+ });
4795
+ }
4796
+
4010
4797
  async getMyHoursReport(args: { query: { "from": string; "to": string; "project_id"?: number }; signal?: AbortSignal; headers?: HeadersInit }): Promise<MyHoursReportEnvelope> {
4011
4798
  const headers = new Headers(args.headers);
4012
4799
 
@@ -4017,7 +4804,7 @@ export class EzactoClient {
4017
4804
  });
4018
4805
  }
4019
4806
 
4020
- async getTimeReport(args: { query: { "from": string; "to": string }; signal?: AbortSignal; headers?: HeadersInit }): Promise<TimeReportEnvelope> {
4807
+ async getTimeReport(args: { query: { "from": string; "to": string; "include_fixed_fee"?: boolean }; signal?: AbortSignal; headers?: HeadersInit }): Promise<TimeReportEnvelope> {
4021
4808
  const headers = new Headers(args.headers);
4022
4809
 
4023
4810
  return this.request<TimeReportEnvelope>("GET", "/api/v1/reports/time", {
@@ -4027,6 +4814,36 @@ export class EzactoClient {
4027
4814
  });
4028
4815
  }
4029
4816
 
4817
+ async getInvoicedReport(args: { query: { "from": string; "to": string; "client_id"?: number; "status"?: "draft" | "open" | "paid" | "closed" }; signal?: AbortSignal; headers?: HeadersInit }): Promise<InvoicedReportEnvelope> {
4818
+ const headers = new Headers(args.headers);
4819
+
4820
+ return this.request<InvoicedReportEnvelope>("GET", "/api/v1/reports/invoiced", {
4821
+ query: args.query,
4822
+ signal: args.signal,
4823
+ headers,
4824
+ });
4825
+ }
4826
+
4827
+ async getPaymentsReceivedReport(args: { query: { "from": string; "to": string; "client_id"?: number }; signal?: AbortSignal; headers?: HeadersInit }): Promise<PaymentsReceivedReportEnvelope> {
4828
+ const headers = new Headers(args.headers);
4829
+
4830
+ return this.request<PaymentsReceivedReportEnvelope>("GET", "/api/v1/reports/payments-received", {
4831
+ query: args.query,
4832
+ signal: args.signal,
4833
+ headers,
4834
+ });
4835
+ }
4836
+
4837
+ async getReceivablesReport(args: { query: { "as_of": string; "client_id"?: number }; signal?: AbortSignal; headers?: HeadersInit }): Promise<ReceivablesReportEnvelope> {
4838
+ const headers = new Headers(args.headers);
4839
+
4840
+ return this.request<ReceivablesReportEnvelope>("GET", "/api/v1/reports/receivables", {
4841
+ query: args.query,
4842
+ signal: args.signal,
4843
+ headers,
4844
+ });
4845
+ }
4846
+
4030
4847
  async getContractorCostReport(args: { query: { "from": string; "to": string }; signal?: AbortSignal; headers?: HeadersInit }): Promise<ContractorCostReportEnvelope> {
4031
4848
  const headers = new Headers(args.headers);
4032
4849
 
@@ -4037,7 +4854,46 @@ export class EzactoClient {
4037
4854
  });
4038
4855
  }
4039
4856
 
4040
- async getProfitabilityReport(args: { query: { "from": string; "to": string }; signal?: AbortSignal; headers?: HeadersInit }): Promise<ProfitabilityReportEnvelope> {
4857
+ async getMonthEndManifest(args: { query: { "from": string; "to": string }; signal?: AbortSignal; headers?: HeadersInit }): Promise<MonthEndManifestEnvelope> {
4858
+ const headers = new Headers(args.headers);
4859
+
4860
+ return this.request<MonthEndManifestEnvelope>("GET", "/api/v1/reports/month-end", {
4861
+ query: args.query,
4862
+ signal: args.signal,
4863
+ headers,
4864
+ });
4865
+ }
4866
+
4867
+ async getBandedMonthReport(args: { query: { "from": string; "to": string }; signal?: AbortSignal; headers?: HeadersInit }): Promise<BandedMonthReportEnvelope> {
4868
+ const headers = new Headers(args.headers);
4869
+
4870
+ return this.request<BandedMonthReportEnvelope>("GET", "/api/v1/reports/banded-months", {
4871
+ query: args.query,
4872
+ signal: args.signal,
4873
+ headers,
4874
+ });
4875
+ }
4876
+
4877
+ async getBandCostAlert(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<BandCostAlertEnvelope> {
4878
+ const headers = new Headers(args.headers);
4879
+
4880
+ return this.request<BandCostAlertEnvelope>("GET", "/api/v1/reports/band-cost-alert", {
4881
+ signal: args.signal,
4882
+ headers,
4883
+ });
4884
+ }
4885
+
4886
+ async setBandCostAlert(args: { body: BandCostAlertInput; signal?: AbortSignal; headers?: HeadersInit }): Promise<BandCostAlertEnvelope> {
4887
+ const headers = new Headers(args.headers);
4888
+
4889
+ return this.request<BandCostAlertEnvelope>("POST", "/api/v1/reports/band-cost-alert", {
4890
+ body: args.body,
4891
+ signal: args.signal,
4892
+ headers,
4893
+ });
4894
+ }
4895
+
4896
+ async getProfitabilityReport(args: { query: { "from": string; "to": string; "project_status"?: "all" | "active" | "archived"; "billing_method"?: "non_billable" | "time_materials" | "fixed_fee"; "manager_id"?: number; "tag_id"?: number }; signal?: AbortSignal; headers?: HeadersInit }): Promise<ProfitabilityReportEnvelope> {
4041
4897
  const headers = new Headers(args.headers);
4042
4898
 
4043
4899
  return this.request<ProfitabilityReportEnvelope>("GET", "/api/v1/reports/profitability", {
@@ -4047,7 +4903,7 @@ export class EzactoClient {
4047
4903
  });
4048
4904
  }
4049
4905
 
4050
- async getDetailedExpenseReport(args: { query: { "from": string; "to": string; "client_id"?: number; "project_id"?: number; "billable_only"?: boolean }; signal?: AbortSignal; headers?: HeadersInit }): Promise<DetailedExpenseReportEnvelope> {
4906
+ async getDetailedExpenseReport(args: { query: { "from": string; "to": string; "client_id"?: number; "project_id"?: number; "category_id"?: number; "user_id"?: number; "billable"?: boolean; "reimbursable"?: boolean; "invoice_state"?: "all" | "invoiced" | "uninvoiced"; "active_projects_only"?: boolean }; signal?: AbortSignal; headers?: HeadersInit }): Promise<DetailedExpenseReportEnvelope> {
4051
4907
  const headers = new Headers(args.headers);
4052
4908
 
4053
4909
  return this.request<DetailedExpenseReportEnvelope>("GET", "/api/v1/reports/detailed-expense", {
@@ -4067,7 +4923,7 @@ export class EzactoClient {
4067
4923
  });
4068
4924
  }
4069
4925
 
4070
- async getDetailedTimeReport(args: { query: { "from": string; "to": string; "client_id"?: number; "project_id"?: number; "hours"?: "all" | "billable" | "non_billable" | "uninvoiced"; "grain"?: "day" | "entry"; "active_projects_only"?: boolean }; signal?: AbortSignal; headers?: HeadersInit }): Promise<DetailedTimeReportEnvelope> {
4926
+ async getDetailedTimeReport(args: { query: { "from": string; "to": string; "client_id"?: number; "project_id"?: number; "task_id"?: number; "user_id"?: number; "role_id"?: number; "tag_id"?: number; "hours"?: "all" | "billable" | "non_billable" | "uninvoiced" | "claimed" | "unclaimed"; "grain"?: "day" | "entry"; "invoice_state"?: "all" | "invoiced" | "uninvoiced"; "active_projects_only"?: boolean }; signal?: AbortSignal; headers?: HeadersInit }): Promise<DetailedTimeReportEnvelope> {
4071
4927
  const headers = new Headers(args.headers);
4072
4928
 
4073
4929
  return this.request<DetailedTimeReportEnvelope>("GET", "/api/v1/reports/detailed-time", {
@@ -4077,6 +4933,16 @@ export class EzactoClient {
4077
4933
  });
4078
4934
  }
4079
4935
 
4936
+ async executeDetailedTimeAction(args: { body: ReportTimeActionInput; signal?: AbortSignal; headers?: HeadersInit }): Promise<ReportTimeActionEnvelope> {
4937
+ const headers = new Headers(args.headers);
4938
+
4939
+ return this.request<ReportTimeActionEnvelope>("POST", "/api/v1/reports/detailed-time/actions", {
4940
+ body: args.body,
4941
+ signal: args.signal,
4942
+ headers,
4943
+ });
4944
+ }
4945
+
4080
4946
  async getClientRollupReport(args: { "clientId": number; query: { "from": string; "to": string }; signal?: AbortSignal; headers?: HeadersInit }): Promise<ClientRollupReportEnvelope> {
4081
4947
  const headers = new Headers(args.headers);
4082
4948
 
@@ -4126,6 +4992,25 @@ export class EzactoClient {
4126
4992
  });
4127
4993
  }
4128
4994
 
4995
+ async listSignInMethods(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<SignInMethodListEnvelope> {
4996
+ const headers = new Headers(args.headers);
4997
+
4998
+ return this.request<SignInMethodListEnvelope>("GET", "/api/v1/admin/sign-in-methods", {
4999
+ signal: args.signal,
5000
+ headers,
5001
+ });
5002
+ }
5003
+
5004
+ async updateSignInMethod(args: { "method": string; body: ModulePatch; signal?: AbortSignal; headers?: HeadersInit }): Promise<SignInMethodListEnvelope> {
5005
+ const headers = new Headers(args.headers);
5006
+
5007
+ return this.request<SignInMethodListEnvelope>("PATCH", "/api/v1/admin/sign-in-methods/:method".replace(":method", encodeURIComponent(String(args["method"]))), {
5008
+ body: args.body,
5009
+ signal: args.signal,
5010
+ headers,
5011
+ });
5012
+ }
5013
+
4129
5014
  async getBackupStatus(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<BackupStatusEnvelope> {
4130
5015
  const headers = new Headers(args.headers);
4131
5016
 
@@ -4172,6 +5057,90 @@ export class EzactoClient {
4172
5057
  });
4173
5058
  }
4174
5059
 
5060
+ async getWiseConnection(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<WiseStatusEnvelope> {
5061
+ const headers = new Headers(args.headers);
5062
+
5063
+ return this.request<WiseStatusEnvelope>("GET", "/api/v1/integrations/wise", {
5064
+ signal: args.signal,
5065
+ headers,
5066
+ });
5067
+ }
5068
+
5069
+ async listWiseRecipients(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<WiseRecipientListEnvelope> {
5070
+ const headers = new Headers(args.headers);
5071
+
5072
+ return this.request<WiseRecipientListEnvelope>("GET", "/api/v1/integrations/wise/recipients", {
5073
+ signal: args.signal,
5074
+ headers,
5075
+ });
5076
+ }
5077
+
5078
+ async onboardWiseRecipient(args: { body: WiseOnboardInput; signal?: AbortSignal; headers?: HeadersInit }): Promise<WiseLinkEnvelope> {
5079
+ const headers = new Headers(args.headers);
5080
+
5081
+ return this.request<WiseLinkEnvelope>("POST", "/api/v1/integrations/wise/recipients", {
5082
+ body: args.body,
5083
+ signal: args.signal,
5084
+ headers,
5085
+ });
5086
+ }
5087
+
5088
+ async listWisePayoutProposals(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<WiseProposalListEnvelope> {
5089
+ const headers = new Headers(args.headers);
5090
+
5091
+ return this.request<WiseProposalListEnvelope>("GET", "/api/v1/integrations/wise/proposals", {
5092
+ signal: args.signal,
5093
+ headers,
5094
+ });
5095
+ }
5096
+
5097
+ async getWisePayoutDestination(args: { "userId": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<WiseDestinationEnvelope> {
5098
+ const headers = new Headers(args.headers);
5099
+
5100
+ return this.request<WiseDestinationEnvelope>("GET", "/api/v1/integrations/wise/destinations/:userId".replace(":userId", encodeURIComponent(String(args["userId"]))), {
5101
+ signal: args.signal,
5102
+ headers,
5103
+ });
5104
+ }
5105
+
5106
+ async removeWisePayoutDestination(args: { "userId": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<void> {
5107
+ const headers = new Headers(args.headers);
5108
+
5109
+ return this.request<void>("DELETE", "/api/v1/integrations/wise/destinations/:userId".replace(":userId", encodeURIComponent(String(args["userId"]))), {
5110
+ signal: args.signal,
5111
+ headers,
5112
+ });
5113
+ }
5114
+
5115
+ async shareWiseProfile(args: { body: WiseContactInput; signal?: AbortSignal; headers?: HeadersInit }): Promise<WiseContactEnvelope> {
5116
+ const headers = new Headers(args.headers);
5117
+
5118
+ return this.request<WiseContactEnvelope>("POST", "/api/v1/integrations/wise/contacts", {
5119
+ body: args.body,
5120
+ signal: args.signal,
5121
+ headers,
5122
+ });
5123
+ }
5124
+
5125
+ async linkWiseRecipient(args: { body: WiseLinkInput; signal?: AbortSignal; headers?: HeadersInit }): Promise<WiseLinkEnvelope> {
5126
+ const headers = new Headers(args.headers);
5127
+
5128
+ return this.request<WiseLinkEnvelope>("POST", "/api/v1/integrations/wise/recipients/link", {
5129
+ body: args.body,
5130
+ signal: args.signal,
5131
+ headers,
5132
+ });
5133
+ }
5134
+
5135
+ async unlinkWiseRecipient(args: { "accountId": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<void> {
5136
+ const headers = new Headers(args.headers);
5137
+
5138
+ return this.request<void>("DELETE", "/api/v1/integrations/wise/recipients/:accountId".replace(":accountId", encodeURIComponent(String(args["accountId"]))), {
5139
+ signal: args.signal,
5140
+ headers,
5141
+ });
5142
+ }
5143
+
4175
5144
  async listSsoProvisioningDomains(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<SsoDomainListEnvelope> {
4176
5145
  const headers = new Headers(args.headers);
4177
5146
 
@@ -4264,6 +5233,114 @@ export class EzactoClient {
4264
5233
  });
4265
5234
  }
4266
5235
 
5236
+ async getInvoicePaymentLink(args: { "id": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<InvoicePaymentLinkEnvelope> {
5237
+ const headers = new Headers(args.headers);
5238
+
5239
+ return this.request<InvoicePaymentLinkEnvelope>("POST", "/api/v1/invoices/:id/payment-link".replace(":id", encodeURIComponent(String(args["id"]))), {
5240
+ signal: args.signal,
5241
+ headers,
5242
+ });
5243
+ }
5244
+
5245
+ async releaseInvoicedTime(args: { "id": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<ReleasedTimeEnvelope> {
5246
+ const headers = new Headers(args.headers);
5247
+
5248
+ return this.request<ReleasedTimeEnvelope>("POST", "/api/v1/invoices/:id/released-time".replace(":id", encodeURIComponent(String(args["id"]))), {
5249
+ signal: args.signal,
5250
+ headers,
5251
+ });
5252
+ }
5253
+
5254
+ async getInvoiceDocumentPreference(args: { "id": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<InvoiceDocumentPreferenceEnvelope> {
5255
+ const headers = new Headers(args.headers);
5256
+
5257
+ return this.request<InvoiceDocumentPreferenceEnvelope>("GET", "/api/v1/invoices/:id/document-preference".replace(":id", encodeURIComponent(String(args["id"]))), {
5258
+ signal: args.signal,
5259
+ headers,
5260
+ });
5261
+ }
5262
+
5263
+ async setInvoiceDocumentPreference(args: { "id": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<InvoiceDocumentPreferenceEnvelope> {
5264
+ const headers = new Headers(args.headers);
5265
+
5266
+ return this.request<InvoiceDocumentPreferenceEnvelope>("POST", "/api/v1/invoices/:id/document-preference".replace(":id", encodeURIComponent(String(args["id"]))), {
5267
+ signal: args.signal,
5268
+ headers,
5269
+ });
5270
+ }
5271
+
5272
+ async getOrganizationInvoiceDocuments(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<OrganizationInvoiceDocumentsEnvelope> {
5273
+ const headers = new Headers(args.headers);
5274
+
5275
+ return this.request<OrganizationInvoiceDocumentsEnvelope>("GET", "/api/v1/settings/invoice-documents", {
5276
+ signal: args.signal,
5277
+ headers,
5278
+ });
5279
+ }
5280
+
5281
+ async setOrganizationInvoiceDocuments(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<OrganizationInvoiceDocumentsEnvelope> {
5282
+ const headers = new Headers(args.headers);
5283
+
5284
+ return this.request<OrganizationInvoiceDocumentsEnvelope>("POST", "/api/v1/settings/invoice-documents", {
5285
+ signal: args.signal,
5286
+ headers,
5287
+ });
5288
+ }
5289
+
5290
+ async getInvoiceThankYouPreference(args: { "id": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<InvoiceThankYouPreferenceEnvelope> {
5291
+ const headers = new Headers(args.headers);
5292
+
5293
+ return this.request<InvoiceThankYouPreferenceEnvelope>("GET", "/api/v1/invoices/:id/thank-you-preference".replace(":id", encodeURIComponent(String(args["id"]))), {
5294
+ signal: args.signal,
5295
+ headers,
5296
+ });
5297
+ }
5298
+
5299
+ async setInvoiceThankYouPreference(args: { "id": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<InvoiceThankYouPreferenceEnvelope> {
5300
+ const headers = new Headers(args.headers);
5301
+
5302
+ return this.request<InvoiceThankYouPreferenceEnvelope>("POST", "/api/v1/invoices/:id/thank-you-preference".replace(":id", encodeURIComponent(String(args["id"]))), {
5303
+ signal: args.signal,
5304
+ headers,
5305
+ });
5306
+ }
5307
+
5308
+ async getOrganizationInvoiceThankYou(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<OrganizationInvoiceThankYouEnvelope> {
5309
+ const headers = new Headers(args.headers);
5310
+
5311
+ return this.request<OrganizationInvoiceThankYouEnvelope>("GET", "/api/v1/settings/invoice-thank-you", {
5312
+ signal: args.signal,
5313
+ headers,
5314
+ });
5315
+ }
5316
+
5317
+ async setOrganizationInvoiceThankYou(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<OrganizationInvoiceThankYouEnvelope> {
5318
+ const headers = new Headers(args.headers);
5319
+
5320
+ return this.request<OrganizationInvoiceThankYouEnvelope>("POST", "/api/v1/settings/invoice-thank-you", {
5321
+ signal: args.signal,
5322
+ headers,
5323
+ });
5324
+ }
5325
+
5326
+ async listIncompleteRecurringInvoices(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<IncompleteRecurringInvoiceListEnvelope> {
5327
+ const headers = new Headers(args.headers);
5328
+
5329
+ return this.request<IncompleteRecurringInvoiceListEnvelope>("GET", "/api/v1/recurring-invoices/incomplete", {
5330
+ signal: args.signal,
5331
+ headers,
5332
+ });
5333
+ }
5334
+
5335
+ async completeRecurringInvoiceDefinition(args: { "id": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<RecurringInvoiceCompletionEnvelope> {
5336
+ const headers = new Headers(args.headers);
5337
+
5338
+ return this.request<RecurringInvoiceCompletionEnvelope>("POST", "/api/v1/recurring-invoices/:id/completion".replace(":id", encodeURIComponent(String(args["id"]))), {
5339
+ signal: args.signal,
5340
+ headers,
5341
+ });
5342
+ }
5343
+
4267
5344
  async listPayoutAccounts(args: { "id": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<PayoutAccountListEnvelope> {
4268
5345
  const headers = new Headers(args.headers);
4269
5346
 
@@ -4445,6 +5522,16 @@ export class EzactoClient {
4445
5522
  });
4446
5523
  }
4447
5524
 
5525
+ async removeTeamPersonRate(args: { "id": number; "rateId": number; "Idempotency-Key": string; body: TeamRateRemovalInput; signal?: AbortSignal; headers?: HeadersInit }): Promise<TeamCommandReceiptEnvelope> {
5526
+ const headers = new Headers(args.headers);
5527
+ if (args["Idempotency-Key"] !== undefined) headers.set("Idempotency-Key", String(args["Idempotency-Key"]));
5528
+ return this.request<TeamCommandReceiptEnvelope>("DELETE", "/api/v1/team/people/:id/rates/:rateId".replace(":id", encodeURIComponent(String(args["id"]))).replace(":rateId", encodeURIComponent(String(args["rateId"]))), {
5529
+ body: args.body,
5530
+ signal: args.signal,
5531
+ headers,
5532
+ });
5533
+ }
5534
+
4448
5535
  async listClientAncestors(args: { "id": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<ClientHierarchyListEnvelope> {
4449
5536
  const headers = new Headers(args.headers);
4450
5537