@conflict-hq/ezacto-client 0.1.1 → 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;
@@ -2275,6 +2799,70 @@ export type InvoicePaymentLinkEnvelope = {
2275
2799
  };
2276
2800
  };
2277
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
+
2278
2866
  export type PayoutAccount = {
2279
2867
  "id": number;
2280
2868
  "user_id": number;
@@ -2332,6 +2920,31 @@ export type TwoFactorCodeInput = {
2332
2920
  "code": string;
2333
2921
  };
2334
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
+
2335
2948
  export type UserEmailInput = {
2336
2949
  "email": string;
2337
2950
  };
@@ -2388,7 +3001,14 @@ export class EzactoClient {
2388
3001
  ? options.baseUrl
2389
3002
  : `${options.baseUrl}/`;
2390
3003
  this.token = options.token;
2391
- 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);
2392
3012
  this.defaultHeaders = new Headers(options.headers);
2393
3013
  }
2394
3014
 
@@ -2455,10 +3075,20 @@ export class EzactoClient {
2455
3075
  });
2456
3076
  }
2457
3077
 
2458
- 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> {
2459
3089
  const headers = new Headers(args.headers);
2460
3090
 
2461
- return this.request<AuthPrincipalEnvelope>("POST", "/auth/sign-in", {
3091
+ return this.request<TwoFactorChallengeAcceptedEnvelope>("POST", "/auth/two-factor/challenge", {
2462
3092
  body: args.body,
2463
3093
  signal: args.signal,
2464
3094
  headers,
@@ -2703,6 +3333,25 @@ export class EzactoClient {
2703
3333
  });
2704
3334
  }
2705
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
+
2706
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> {
2707
3356
  const headers = new Headers(args.headers);
2708
3357
 
@@ -3499,7 +4148,7 @@ export class EzactoClient {
3499
4148
  });
3500
4149
  }
3501
4150
 
3502
- 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> {
3503
4152
  const headers = new Headers(args.headers);
3504
4153
 
3505
4154
  return this.request<InvoicePage>("GET", "/api/v1/invoices", {
@@ -3694,7 +4343,7 @@ export class EzactoClient {
3694
4343
  });
3695
4344
  }
3696
4345
 
3697
- 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> {
3698
4347
  const headers = new Headers(args.headers);
3699
4348
 
3700
4349
  return this.request<RetainerPage>("GET", "/api/v1/retainers", {
@@ -3810,6 +4459,16 @@ export class EzactoClient {
3810
4459
  });
3811
4460
  }
3812
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
+
3813
4472
  async generateRecurringInvoice(args: { "id": number; "Idempotency-Key": string; signal?: AbortSignal; headers?: HeadersInit }): Promise<RecurringGenerationEnvelope> {
3814
4473
  const headers = new Headers(args.headers);
3815
4474
  if (args["Idempotency-Key"] !== undefined) headers.set("Idempotency-Key", String(args["Idempotency-Key"]));
@@ -4014,6 +4673,127 @@ export class EzactoClient {
4014
4673
  });
4015
4674
  }
4016
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
+
4017
4797
  async getMyHoursReport(args: { query: { "from": string; "to": string; "project_id"?: number }; signal?: AbortSignal; headers?: HeadersInit }): Promise<MyHoursReportEnvelope> {
4018
4798
  const headers = new Headers(args.headers);
4019
4799
 
@@ -4024,7 +4804,7 @@ export class EzactoClient {
4024
4804
  });
4025
4805
  }
4026
4806
 
4027
- 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> {
4028
4808
  const headers = new Headers(args.headers);
4029
4809
 
4030
4810
  return this.request<TimeReportEnvelope>("GET", "/api/v1/reports/time", {
@@ -4034,6 +4814,36 @@ export class EzactoClient {
4034
4814
  });
4035
4815
  }
4036
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
+
4037
4847
  async getContractorCostReport(args: { query: { "from": string; "to": string }; signal?: AbortSignal; headers?: HeadersInit }): Promise<ContractorCostReportEnvelope> {
4038
4848
  const headers = new Headers(args.headers);
4039
4849
 
@@ -4044,7 +4854,46 @@ export class EzactoClient {
4044
4854
  });
4045
4855
  }
4046
4856
 
4047
- 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> {
4048
4897
  const headers = new Headers(args.headers);
4049
4898
 
4050
4899
  return this.request<ProfitabilityReportEnvelope>("GET", "/api/v1/reports/profitability", {
@@ -4054,7 +4903,7 @@ export class EzactoClient {
4054
4903
  });
4055
4904
  }
4056
4905
 
4057
- 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> {
4058
4907
  const headers = new Headers(args.headers);
4059
4908
 
4060
4909
  return this.request<DetailedExpenseReportEnvelope>("GET", "/api/v1/reports/detailed-expense", {
@@ -4074,7 +4923,7 @@ export class EzactoClient {
4074
4923
  });
4075
4924
  }
4076
4925
 
4077
- 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> {
4078
4927
  const headers = new Headers(args.headers);
4079
4928
 
4080
4929
  return this.request<DetailedTimeReportEnvelope>("GET", "/api/v1/reports/detailed-time", {
@@ -4084,6 +4933,16 @@ export class EzactoClient {
4084
4933
  });
4085
4934
  }
4086
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
+
4087
4946
  async getClientRollupReport(args: { "clientId": number; query: { "from": string; "to": string }; signal?: AbortSignal; headers?: HeadersInit }): Promise<ClientRollupReportEnvelope> {
4088
4947
  const headers = new Headers(args.headers);
4089
4948
 
@@ -4133,6 +4992,25 @@ export class EzactoClient {
4133
4992
  });
4134
4993
  }
4135
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
+
4136
5014
  async getBackupStatus(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<BackupStatusEnvelope> {
4137
5015
  const headers = new Headers(args.headers);
4138
5016
 
@@ -4179,6 +5057,90 @@ export class EzactoClient {
4179
5057
  });
4180
5058
  }
4181
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
+
4182
5144
  async listSsoProvisioningDomains(args: { signal?: AbortSignal; headers?: HeadersInit } = {}): Promise<SsoDomainListEnvelope> {
4183
5145
  const headers = new Headers(args.headers);
4184
5146
 
@@ -4280,6 +5242,105 @@ export class EzactoClient {
4280
5242
  });
4281
5243
  }
4282
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
+
4283
5344
  async listPayoutAccounts(args: { "id": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<PayoutAccountListEnvelope> {
4284
5345
  const headers = new Headers(args.headers);
4285
5346
 
@@ -4461,6 +5522,16 @@ export class EzactoClient {
4461
5522
  });
4462
5523
  }
4463
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
+
4464
5535
  async listClientAncestors(args: { "id": number; signal?: AbortSignal; headers?: HeadersInit }): Promise<ClientHierarchyListEnvelope> {
4465
5536
  const headers = new Headers(args.headers);
4466
5537