node-autotask 0.20.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +44 -21
- package/CHANGELOG.md +42 -0
- package/MCP_TOOL_CATALOG.json +1458 -12
- package/MCP_TOOL_MANIFEST.md +23 -20
- package/MCP_TOOL_OVERRIDES.json +7 -7
- package/N8N_MCP_MANIFEST.json +20 -4
- package/N8N_MCP_MANIFEST.md +6 -5
- package/README.md +9 -9
- package/capabilities.json +12362 -7886
- package/capabilities.schema.json +33 -12
- package/dist/capabilities.cjs +2 -2
- package/dist/capabilities.d.cts +9 -2
- package/dist/capabilities.d.ts +9 -2
- package/dist/capabilities.js +1 -1
- package/dist/{chunk-GA6UCX3Z.js → chunk-B5SNZ3TZ.js} +3507 -3113
- package/dist/{chunk-L6V66V22.cjs → chunk-D5TVBI4U.cjs} +3039 -2645
- package/dist/{chunk-FLYTKJKV.cjs → chunk-JUO3URUI.cjs} +12361 -7885
- package/dist/{chunk-YH5CPRDN.cjs → chunk-N27NUB4R.cjs} +2466 -1745
- package/dist/{chunk-2T77J2ZM.js → chunk-OGNUI3UR.js} +12361 -7885
- package/dist/{chunk-XSYJB4IW.js → chunk-PVUUOM5G.js} +2092 -1371
- package/dist/{chunk-RMLGOCGA.cjs → chunk-TTQB537V.cjs} +135 -135
- package/dist/{chunk-JEJUFXHX.js → chunk-VYFO2N5F.js} +2 -2
- package/dist/{index-BXtKN1M5.d.cts → index-BVtycq-6.d.cts} +1 -1
- package/dist/{index-BXtKN1M5.d.ts → index-BVtycq-6.d.ts} +1 -1
- package/dist/{index-AN-NjLi9.d.cts → index-DBoX-Dnk.d.ts} +430 -952
- package/dist/{index-CvLLsOCP.d.ts → index-NC-x-bYl.d.cts} +430 -952
- package/dist/index.cjs +91 -62
- package/dist/index.d.cts +360 -5
- package/dist/index.d.ts +360 -5
- package/dist/index.js +74 -45
- package/dist/operations/index.cjs +462 -462
- package/dist/operations/index.d.cts +78 -84
- package/dist/operations/index.d.ts +78 -84
- package/dist/operations/index.js +382 -382
- package/dist/pool.cjs +8 -8
- package/dist/pool.d.cts +2 -2
- package/dist/pool.d.ts +2 -2
- package/dist/pool.js +4 -4
- package/dist/resources/index.cjs +4 -4
- package/dist/resources/index.d.cts +2 -2
- package/dist/resources/index.d.ts +2 -2
- package/dist/resources/index.js +3 -3
- package/dist/types/index.d.cts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/docs/API.md +140 -45
- package/docs/N8N-ADAPTER.md +3 -3
- package/examples/mcp/errors.ts +135 -0
- package/examples/mcp/manifest.ts +168 -0
- package/examples/mcp/register.ts +66 -0
- package/examples/mcp/schemas.ts +203 -0
- package/examples/mcp/tools-meta.ts +120 -0
- package/examples/mcp/tools-mode.ts +177 -0
- package/examples/mcp/tools-read.ts +264 -0
- package/examples/mcp/types.ts +34 -0
- package/examples/mcp-register.ts +9 -1074
- package/package.json +1 -1
|
@@ -1,4 +1,62 @@
|
|
|
1
|
-
import { I as Identifier, g as AuditEvent, a as FilterCondition, ez as ResolutionCaps, Q as QueryParams, dD as PagingModel, dn as OperationResult, dC as Page, cE as EmptyReasonInfo, cG as EntityInformationModel, cW as FieldInformationModel, cU as Field, cD as DryRunResult, ey as Resolution, c as Appointment, d as AppointmentCreate, f as AppointmentUpdate, e as AppointmentSummary, h as AuthTokenResultModel, B as BillingCode, j as BillingCodeCreate, l as BillingCodeUpdate, k as BillingCodeSummary, m as BillingItems, n as BillingItemsCreate, p as BillingItemsUpdate, o as BillingItemsSummary, C as ChangeRequestLink, q as ChangeRequestLinkCreate, s as ChangeRequestLinkUpdate, r as ChangeRequestLinkSummary, t as ChecklistLibrary, y as ChecklistLibraryCreate, D as ChecklistLibraryUpdate, z as ChecklistLibrarySummary, u as ChecklistLibraryChecklistItem, v as ChecklistLibraryChecklistItemCreate, x as ChecklistLibraryChecklistItemUpdate, w as ChecklistLibraryChecklistItemSummary, E as ClassificationIcon, G as ClassificationIconCreate, J as ClassificationIconUpdate, H as ClassificationIconSummary, K as Company, S as CompanyLocation, aN as Contact, W as CompanyNote, g9 as Ticket, dR as Project, hq as CompositeNamesSection, ha as TimeEntry, R as CompanyCreate, a3 as CompanyUpdate, a2 as CompanySummary, P as CompanyContext, L as CompanyAlert, M as CompanyAlertCreate, O as CompanyAlertUpdate, N as CompanyAlertSummary, T as CompanyLocationCreate, V as CompanyLocationUpdate, U as CompanyLocationSummary, X as CompanyNoteCreate, Z as CompanyNoteUpdate, Y as CompanyNoteSummary, _ as CompanySiteConfigurations, $ as CompanySiteConfigurationsCreate, a1 as CompanySiteConfigurationsUpdate, a0 as CompanySiteConfigurationsSummary, a4 as CompanyWebhook, a5 as CompanyWebhookCreate, a7 as CompanyWebhookUpdate, a6 as CompanyWebhookSummary, a9 as ConfigurationItemBillingProductAssociations, aa as ConfigurationItemBillingProductAssociationsCreate, ac as ConfigurationItemBillingProductAssociationsUpdate, ab as ConfigurationItemBillingProductAssociationsSummary, ad as ConfigurationItemCategory, ae as ConfigurationItemCategoryCreate, ak as ConfigurationItemCategoryUpdate, af as ConfigurationItemCategorySummary, ag as ConfigurationItemCategoryUdfAssociation, ah as ConfigurationItemCategoryUdfAssociationCreate, aj as ConfigurationItemCategoryUdfAssociationUpdate, ai as ConfigurationItemCategoryUdfAssociationSummary, an as ConfigurationItemDnsRecord, ao as ConfigurationItemDnsRecordCreate, aq as ConfigurationItemDnsRecordUpdate, ap as ConfigurationItemDnsRecordSummary, ar as ConfigurationItemNote, as as ConfigurationItemNoteCreate, au as ConfigurationItemNoteUpdate, at as ConfigurationItemNoteSummary, av as ConfigurationItemRelatedItem, aw as ConfigurationItemRelatedItemCreate, ay as ConfigurationItemRelatedItemUpdate, ax as ConfigurationItemRelatedItemSummary, a8 as ConfigurationItem, aE as ConfigurationItemType, am as ConfigurationItemCreate, aI as ConfigurationItemUpdate, aD as ConfigurationItemSummary, al as ConfigurationItemContext, az as ConfigurationItemSslSubjectAlternativeName, aA as ConfigurationItemSslSubjectAlternativeNameCreate, aC as ConfigurationItemSslSubjectAlternativeNameUpdate, aB as ConfigurationItemSslSubjectAlternativeNameSummary, aF as ConfigurationItemTypeCreate, aH as ConfigurationItemTypeUpdate, aG as ConfigurationItemTypeSummary, aJ as ConfigurationItemWebhook, aK as ConfigurationItemWebhookCreate, aM as ConfigurationItemWebhookUpdate, aL as ConfigurationItemWebhookSummary, aQ as ContactGroupContacts, aR as ContactGroupContactsCreate, aT as ContactGroupContactsUpdate, aS as ContactGroupContactsSummary, aU as ContactGroups, aV as ContactGroupsCreate, aX as ContactGroupsUpdate, aW as ContactGroupsSummary, aY as ContactSummary, aP as ContactCreate, aZ as ContactUpdate, aO as ContactContext, a_ as ContactWebhook, a$ as ContactWebhookCreate, b1 as ContactWebhookUpdate, b0 as ContactWebhookSummary, b3 as ContractBillingRule, b4 as ContractBillingRuleCreate, b6 as ContractBillingRuleUpdate, b5 as ContractBillingRuleSummary, b9 as ContractBlockHourFactor, ba as ContractBlockHourFactorCreate, bc as ContractBlockHourFactorUpdate, bb as ContractBlockHourFactorSummary, b7 as ContractBlock, b8 as ContractBlockCreate, be as ContractBlockUpdate, bd as ContractBlockSummary, bf as ContractCharge, bg as ContractChargeCreate, bi as ContractChargeUpdate, bh as ContractChargeSummary, bk as ContractExclusionBillingCode, bl as ContractExclusionBillingCodeCreate, bn as ContractExclusionBillingCodeUpdate, bm as ContractExclusionBillingCodeSummary, bo as ContractExclusionRoles, bp as ContractExclusionRolesCreate, br as ContractExclusionRolesUpdate, bq as ContractExclusionRolesSummary, bs as ContractExclusionSetExcludedRoles, bt as ContractExclusionSetExcludedRolesCreate, bv as ContractExclusionSetExcludedRolesUpdate, bu as ContractExclusionSetExcludedRolesSummary, bw as ContractExclusionSetExcludedWorkTypes, bx as ContractExclusionSetExcludedWorkTypesCreate, bz as ContractExclusionSetExcludedWorkTypesUpdate, by as ContractExclusionSetExcludedWorkTypesSummary, bA as ContractExclusionSets, bB as ContractExclusionSetsCreate, bD as ContractExclusionSetsUpdate, bC as ContractExclusionSetsSummary, bE as ContractMilestone, bF as ContractMilestoneCreate, bH as ContractMilestoneUpdate, bG as ContractMilestoneSummary, bI as ContractNote, bJ as ContractNoteCreate, bL as ContractNoteUpdate, bK as ContractNoteSummary, bM as ContractRate, bN as ContractRateCreate, bP as ContractRateUpdate, bO as ContractRateSummary, bQ as ContractRetainers, bR as ContractRetainersCreate, bT as ContractRetainersUpdate, bS as ContractRetainersSummary, bU as ContractRoleCosts, bV as ContractRoleCostsCreate, bX as ContractRoleCostsUpdate, bW as ContractRoleCostsSummary, bZ as ContractServiceAdjustment, b_ as ContractServiceAdjustmentCreate, c0 as ContractServiceAdjustmentUpdate, b$ as ContractServiceAdjustmentSummary, c2 as ContractServiceBundleAdjustment, c3 as ContractServiceBundleAdjustmentCreate, c5 as ContractServiceBundleAdjustmentUpdate, c4 as ContractServiceBundleAdjustmentSummary, c1 as ContractServiceBundle, c6 as ContractServiceBundleCreate, cc as ContractServiceBundleUpdate, c7 as ContractServiceBundleSummary, c8 as ContractServiceBundleUnit, c9 as ContractServiceBundleUnitCreate, cb as ContractServiceBundleUnitUpdate, ca as ContractServiceBundleUnitSummary, bY as ContractService, cd as ContractServiceCreate, cj as ContractServiceUpdate, ce as ContractServiceSummary, cf as ContractServiceUnit, cg as ContractServiceUnitCreate, ci as ContractServiceUnitUpdate, ch as ContractServiceUnitSummary, b2 as Contract, dc as Invoice, eA as Resource, cI as ExpenseItem, fA as Subscription, bj as ContractCreate, cp as ContractUpdate, ck as ContractSummary, cl as ContractTicketPurchases, cm as ContractTicketPurchasesCreate, co as ContractTicketPurchasesUpdate, cn as ContractTicketPurchasesSummary, cq as Country, cr as CountryCreate, ct as CountryUpdate, cs as CountrySummary, cu as Department, cv as DepartmentCreate, cx as DepartmentUpdate, cw as DepartmentSummary, cz as DomainRegistrar, cA as DomainRegistrarCreate, cC as DomainRegistrarUpdate, cB as DomainRegistrarSummary, cY as GlobalEntityInformationResultModel, cJ as ExpenseItemAttachment, cK as ExpenseItemAttachmentCreate, cM as ExpenseItemAttachmentUpdate, cL as ExpenseItemAttachmentSummary, cN as ExpenseItemCreate, cP as ExpenseItemUpdate, cO as ExpenseItemSummary, cQ as ExpenseReport, cR as ExpenseReportCreate, cT as ExpenseReportUpdate, cS as ExpenseReportSummary, c$ as HolidaySet, d0 as HolidaySetCreate, d2 as HolidaySetUpdate, d1 as HolidaySetSummary, cZ as Holiday, c_ as HolidayCreate, d4 as HolidayUpdate, d3 as HolidaySummary, d5 as InventoryProduct, d6 as InventoryProductCreate, d8 as InventoryProductUpdate, d7 as InventoryProductSummary, d9 as InventoryStockedItemAdd, da as InventoryStockedItemRemove, db as InventoryStockedItemTransfer, dd as InvoiceCreate, df as InvoiceUpdate, de as InvoiceSummary, dh as ModuleAccessResultModel, di as NotificationHistory, dj as NotificationHistoryCreate, dl as NotificationHistoryUpdate, dk as NotificationHistorySummary, dq as Opportunity, dz as OpportunityCreate, dB as OpportunityUpdate, dA as OpportunitySummary, dr as OpportunityAttachment, ds as OpportunityAttachmentCreate, du as OpportunityAttachmentUpdate, dt as OpportunityAttachmentSummary, dv as OpportunityCategory, dw as OpportunityCategoryCreate, dy as OpportunityCategoryUpdate, dx as OpportunityCategorySummary, dE as Phase, dF as PhaseCreate, dH as PhaseUpdate, dG as PhaseSummary, dJ as Product, dK as ProductCreate, dM as ProductUpdate, dL as ProductSummary, dN as ProductVendors, dO as ProductVendorsCreate, dQ as ProductVendorsUpdate, dP as ProductVendorsSummary, dS as ProjectCharge, dT as ProjectChargeCreate, dV as ProjectChargeUpdate, dU as ProjectChargeSummary, dY as ProjectNote, dZ as ProjectNoteCreate, d$ as ProjectNoteUpdate, d_ as ProjectNoteSummary, dX as ProjectCreate, e1 as ProjectUpdate, e0 as ProjectSummary, hr as CompositeContextOptions, dW as ProjectContext, e2 as PurchaseApprovals, e3 as PurchaseApprovalsCreate, e5 as PurchaseApprovalsUpdate, e4 as PurchaseApprovalsSummary, e6 as PurchaseOrderItemReceiving, e7 as PurchaseOrderItemReceivingCreate, e9 as PurchaseOrderItemReceivingUpdate, e8 as PurchaseOrderItemReceivingSummary, ea as PurchaseOrderItems, eb as PurchaseOrderItemsCreate, ed as PurchaseOrderItemsUpdate, ec as PurchaseOrderItemsSummary, ee as PurchaseOrders, ef as PurchaseOrdersCreate, eh as PurchaseOrdersUpdate, eg as PurchaseOrdersSummary, ek as QuoteItem, el as QuoteItemCreate, en as QuoteItemUpdate, em as QuoteItemSummary, eo as QuoteLocation, ep as QuoteLocationCreate, er as QuoteLocationUpdate, eq as QuoteLocationSummary, ei as Quote, ej as QuoteCreate, ex as QuoteUpdate, es as QuoteSummary, et as QuoteTemplate, eu as QuoteTemplateCreate, ew as QuoteTemplateUpdate, ev as QuoteTemplateSummary, eE as ResourceRoleQueue, eF as ResourceRoleQueueCreate, eH as ResourceRoleQueueUpdate, eG as ResourceRoleQueueSummary, eC as ResourceRole, eD as ResourceRoleCreate, eJ as ResourceRoleUpdate, eI as ResourceRoleSummary, eK as ResourceSkill, eL as ResourceSkillCreate, eN as ResourceSkillUpdate, eM as ResourceSkillSummary, eB as ResourceCreate, e$ as ResourceUpdate, eO as ResourceSummary, eP as ResourceTimeOffAdditional, eQ as ResourceTimeOffAdditionalCreate, eS as ResourceTimeOffAdditionalUpdate, eR as ResourceTimeOffAdditionalSummary, eT as ResourceTimeOffApprover, eU as ResourceTimeOffApproverCreate, eW as ResourceTimeOffApproverUpdate, eV as ResourceTimeOffApproverSummary, eX as ResourceTimeOffBalance, eY as ResourceTimeOffBalanceCreate, e_ as ResourceTimeOffBalanceUpdate, eZ as ResourceTimeOffBalanceSummary, f0 as Role, f1 as RoleCreate, f3 as RoleUpdate, f2 as RoleSummary, f5 as ServiceCall, f6 as ServiceCallCreate, fo as ServiceCallUpdate, f7 as ServiceCallSummary, fa as ServiceCallTaskResource, fb as ServiceCallTaskResourceCreate, fd as ServiceCallTaskResourceUpdate, fc as ServiceCallTaskResourceSummary, f8 as ServiceCallTask, f9 as ServiceCallTaskCreate, ff as ServiceCallTaskUpdate, fe as ServiceCallTaskSummary, fi as ServiceCallTicketResource, fj as ServiceCallTicketResourceCreate, fl as ServiceCallTicketResourceUpdate, fk as ServiceCallTicketResourceSummary, fg as ServiceCallTicket, fh as ServiceCallTicketCreate, fn as ServiceCallTicketUpdate, fm as ServiceCallTicketSummary, fq as ServiceLevelAgreementResults, fr as ServiceLevelAgreementResultsCreate, ft as ServiceLevelAgreementResultsUpdate, fs as ServiceLevelAgreementResultsSummary, f4 as Service, fp as ServiceCreate, fv as ServiceUpdate, fu as ServiceSummary, fw as Skill, fx as SkillCreate, fz as SkillUpdate, fy as SkillSummary, fC as SubscriptionPeriod, fD as SubscriptionPeriodCreate, fF as SubscriptionPeriodUpdate, fE as SubscriptionPeriodSummary, fB as SubscriptionCreate, fH as SubscriptionUpdate, fG as SubscriptionSummary, fK as SurveyResults, fL as SurveyResultsCreate, fN as SurveyResultsUpdate, fM as SurveyResultsSummary, fI as Survey, fJ as SurveyCreate, fP as SurveyUpdate, fO as SurveySummary, fR as TagAlias, fS as TagAliasCreate, fU as TagAliasUpdate, fT as TagAliasSummary, fW as TagGroup, fX as TagGroupCreate, fZ as TagGroupUpdate, fY as TagGroupSummary, fQ as Tag, fV as TagCreate, f$ as TagUpdate, f_ as TagSummary, g2 as TaskSecondaryResource, g3 as TaskSecondaryResourceCreate, g5 as TaskSecondaryResourceUpdate, g4 as TaskSecondaryResourceSummary, g0 as Task, g1 as TaskCreate, g7 as TaskUpdate, g6 as TaskSummary, g8 as ThresholdStatusResultModel, ga as TicketAdditionalConfigurationItem, gb as TicketAdditionalConfigurationItemCreate, gd as TicketAdditionalConfigurationItemUpdate, gc as TicketAdditionalConfigurationItemSummary, ge as TicketAdditionalContact, gf as TicketAdditionalContactCreate, gh as TicketAdditionalContactUpdate, gg as TicketAdditionalContactSummary, gi as TicketAttachment, gj as TicketAttachmentCreate, gl as TicketAttachmentUpdate, gk as TicketAttachmentSummary, gm as TicketCategory, gn as TicketCategoryCreate, gt as TicketCategoryUpdate, gs as TicketCategorySummary, go as TicketCategoryFieldDefault, gp as TicketCategoryFieldDefaultCreate, gr as TicketCategoryFieldDefaultUpdate, gq as TicketCategoryFieldDefaultSummary, gu as TicketChangeRequestApproval, gv as TicketChangeRequestApprovalCreate, gx as TicketChangeRequestApprovalUpdate, gw as TicketChangeRequestApprovalSummary, gy as TicketCharge, gz as TicketChargeCreate, gB as TicketChargeUpdate, gA as TicketChargeSummary, gC as TicketChecklistItem, gD as TicketChecklistItemCreate, gF as TicketChecklistItemUpdate, gE as TicketChecklistItemSummary, gG as TicketChecklistLibrary, gH as TicketChecklistLibraryCreate, gJ as TicketChecklistLibraryUpdate, gI as TicketChecklistLibrarySummary, gM as TicketHistory, gN as TicketHistoryCreate, gP as TicketHistoryUpdate, gO as TicketHistorySummary, gR as TicketNoteAttachment, gS as TicketNoteAttachmentCreate, gU as TicketNoteAttachmentUpdate, gT as TicketNoteAttachmentSummary, gQ as TicketNote, gV as TicketNoteCreate, gX as TicketNoteUpdate, gW as TicketNoteSummary, gY as TicketNoteWebhook, gZ as TicketNoteWebhookCreate, g$ as TicketNoteWebhookUpdate, g_ as TicketNoteWebhookSummary, h0 as TicketSecondaryResource, h1 as TicketSecondaryResourceCreate, h3 as TicketSecondaryResourceUpdate, h2 as TicketSecondaryResourceSummary, gL as TicketCreate, h5 as TicketUpdate, h4 as TicketSummary, gK as TicketContext, h6 as TicketWebhook, h7 as TicketWebhookCreate, h9 as TicketWebhookUpdate, h8 as TicketWebhookSummary, hf as TimeEntryCreate, hh as TimeEntryUpdate, hg as TimeEntrySummary, hb as TimeEntryAttachment, hc as TimeEntryAttachmentCreate, he as TimeEntryAttachmentUpdate, hd as TimeEntryAttachmentSummary, hi as TimeOffRequest, hj as TimeOffRequestCreate, hm as TimeOffRequestUpdate, hl as TimeOffRequestSummary, A as ApiVersionResultModel, i as AutotaskVersionResultModel, ho as ZoneInformationResultModel } from './index-BXtKN1M5.js';
|
|
1
|
+
import { I as Identifier, g as AuditEvent, a as FilterCondition, ez as ResolutionCaps, Q as QueryParams, cG as EmptyReasonInfo, ey as Resolution, dD as Page, cI as EntityInformationModel, cY as FieldInformationModel, cW as Field, O as OperationResult, cF as DryRunResult, c as Appointment, d as AppointmentCreate, f as AppointmentUpdate, e as AppointmentSummary, h as AuthTokenResultModel, B as BillingCode, j as BillingCodeCreate, l as BillingCodeUpdate, k as BillingCodeSummary, m as BillingItems, n as BillingItemsCreate, p as BillingItemsUpdate, o as BillingItemsSummary, C as ChangeRequestLink, q as ChangeRequestLinkCreate, s as ChangeRequestLinkUpdate, r as ChangeRequestLinkSummary, t as ChecklistLibrary, y as ChecklistLibraryCreate, D as ChecklistLibraryUpdate, z as ChecklistLibrarySummary, u as ChecklistLibraryChecklistItem, v as ChecklistLibraryChecklistItemCreate, x as ChecklistLibraryChecklistItemUpdate, w as ChecklistLibraryChecklistItemSummary, E as ClassificationIcon, G as ClassificationIconCreate, J as ClassificationIconUpdate, H as ClassificationIconSummary, K as Company, U as CompanyLocation, aP as Contact, Y as CompanyNote, g9 as Ticket, dR as Project, hq as CompositeNamesSection, ha as TimeEntry, T as CompanyCreate, a5 as CompanyUpdate, a4 as CompanySummary, S as CompanyContext, L as CompanyAlert, M as CompanyAlertCreate, R as CompanyAlertUpdate, N as CompanyAlertSummary, V as CompanyLocationCreate, X as CompanyLocationUpdate, W as CompanyLocationSummary, Z as CompanyNoteCreate, $ as CompanyNoteUpdate, _ as CompanyNoteSummary, a0 as CompanySiteConfigurations, a1 as CompanySiteConfigurationsCreate, a3 as CompanySiteConfigurationsUpdate, a2 as CompanySiteConfigurationsSummary, a6 as CompanyWebhook, a7 as CompanyWebhookCreate, a9 as CompanyWebhookUpdate, a8 as CompanyWebhookSummary, ab as ConfigurationItemBillingProductAssociations, ac as ConfigurationItemBillingProductAssociationsCreate, ae as ConfigurationItemBillingProductAssociationsUpdate, ad as ConfigurationItemBillingProductAssociationsSummary, af as ConfigurationItemCategory, ag as ConfigurationItemCategoryCreate, am as ConfigurationItemCategoryUpdate, ah as ConfigurationItemCategorySummary, ai as ConfigurationItemCategoryUdfAssociation, aj as ConfigurationItemCategoryUdfAssociationCreate, al as ConfigurationItemCategoryUdfAssociationUpdate, ak as ConfigurationItemCategoryUdfAssociationSummary, ap as ConfigurationItemDnsRecord, aq as ConfigurationItemDnsRecordCreate, as as ConfigurationItemDnsRecordUpdate, ar as ConfigurationItemDnsRecordSummary, at as ConfigurationItemNote, au as ConfigurationItemNoteCreate, aw as ConfigurationItemNoteUpdate, av as ConfigurationItemNoteSummary, ax as ConfigurationItemRelatedItem, ay as ConfigurationItemRelatedItemCreate, aA as ConfigurationItemRelatedItemUpdate, az as ConfigurationItemRelatedItemSummary, aa as ConfigurationItem, aG as ConfigurationItemType, ao as ConfigurationItemCreate, aK as ConfigurationItemUpdate, aF as ConfigurationItemSummary, an as ConfigurationItemContext, aB as ConfigurationItemSslSubjectAlternativeName, aC as ConfigurationItemSslSubjectAlternativeNameCreate, aE as ConfigurationItemSslSubjectAlternativeNameUpdate, aD as ConfigurationItemSslSubjectAlternativeNameSummary, aH as ConfigurationItemTypeCreate, aJ as ConfigurationItemTypeUpdate, aI as ConfigurationItemTypeSummary, aL as ConfigurationItemWebhook, aM as ConfigurationItemWebhookCreate, aO as ConfigurationItemWebhookUpdate, aN as ConfigurationItemWebhookSummary, aS as ContactGroupContacts, aT as ContactGroupContactsCreate, aV as ContactGroupContactsUpdate, aU as ContactGroupContactsSummary, aW as ContactGroups, aX as ContactGroupsCreate, aZ as ContactGroupsUpdate, aY as ContactGroupsSummary, a_ as ContactSummary, aR as ContactCreate, a$ as ContactUpdate, aQ as ContactContext, b0 as ContactWebhook, b1 as ContactWebhookCreate, b3 as ContactWebhookUpdate, b2 as ContactWebhookSummary, b5 as ContractBillingRule, b6 as ContractBillingRuleCreate, b8 as ContractBillingRuleUpdate, b7 as ContractBillingRuleSummary, bb as ContractBlockHourFactor, bc as ContractBlockHourFactorCreate, be as ContractBlockHourFactorUpdate, bd as ContractBlockHourFactorSummary, b9 as ContractBlock, ba as ContractBlockCreate, bg as ContractBlockUpdate, bf as ContractBlockSummary, bh as ContractCharge, bi as ContractChargeCreate, bk as ContractChargeUpdate, bj as ContractChargeSummary, bm as ContractExclusionBillingCode, bn as ContractExclusionBillingCodeCreate, bp as ContractExclusionBillingCodeUpdate, bo as ContractExclusionBillingCodeSummary, bq as ContractExclusionRoles, br as ContractExclusionRolesCreate, bt as ContractExclusionRolesUpdate, bs as ContractExclusionRolesSummary, bu as ContractExclusionSetExcludedRoles, bv as ContractExclusionSetExcludedRolesCreate, bx as ContractExclusionSetExcludedRolesUpdate, bw as ContractExclusionSetExcludedRolesSummary, by as ContractExclusionSetExcludedWorkTypes, bz as ContractExclusionSetExcludedWorkTypesCreate, bB as ContractExclusionSetExcludedWorkTypesUpdate, bA as ContractExclusionSetExcludedWorkTypesSummary, bC as ContractExclusionSets, bD as ContractExclusionSetsCreate, bF as ContractExclusionSetsUpdate, bE as ContractExclusionSetsSummary, bG as ContractMilestone, bH as ContractMilestoneCreate, bJ as ContractMilestoneUpdate, bI as ContractMilestoneSummary, bK as ContractNote, bL as ContractNoteCreate, bN as ContractNoteUpdate, bM as ContractNoteSummary, bO as ContractRate, bP as ContractRateCreate, bR as ContractRateUpdate, bQ as ContractRateSummary, bS as ContractRetainers, bT as ContractRetainersCreate, bV as ContractRetainersUpdate, bU as ContractRetainersSummary, bW as ContractRoleCosts, bX as ContractRoleCostsCreate, bZ as ContractRoleCostsUpdate, bY as ContractRoleCostsSummary, b$ as ContractServiceAdjustment, c0 as ContractServiceAdjustmentCreate, c2 as ContractServiceAdjustmentUpdate, c1 as ContractServiceAdjustmentSummary, c4 as ContractServiceBundleAdjustment, c5 as ContractServiceBundleAdjustmentCreate, c7 as ContractServiceBundleAdjustmentUpdate, c6 as ContractServiceBundleAdjustmentSummary, c3 as ContractServiceBundle, c8 as ContractServiceBundleCreate, ce as ContractServiceBundleUpdate, c9 as ContractServiceBundleSummary, ca as ContractServiceBundleUnit, cb as ContractServiceBundleUnitCreate, cd as ContractServiceBundleUnitUpdate, cc as ContractServiceBundleUnitSummary, b_ as ContractService, cf as ContractServiceCreate, cl as ContractServiceUpdate, cg as ContractServiceSummary, ch as ContractServiceUnit, ci as ContractServiceUnitCreate, ck as ContractServiceUnitUpdate, cj as ContractServiceUnitSummary, b4 as Contract, de as Invoice, eA as Resource, cK as ExpenseItem, fA as Subscription, bl as ContractCreate, cr as ContractUpdate, cm as ContractSummary, cn as ContractTicketPurchases, co as ContractTicketPurchasesCreate, cq as ContractTicketPurchasesUpdate, cp as ContractTicketPurchasesSummary, cs as Country, ct as CountryCreate, cv as CountryUpdate, cu as CountrySummary, cw as Department, cx as DepartmentCreate, cz as DepartmentUpdate, cy as DepartmentSummary, cB as DomainRegistrar, cC as DomainRegistrarCreate, cE as DomainRegistrarUpdate, cD as DomainRegistrarSummary, c_ as GlobalEntityInformationResultModel, cL as ExpenseItemAttachment, cM as ExpenseItemAttachmentCreate, cO as ExpenseItemAttachmentUpdate, cN as ExpenseItemAttachmentSummary, cP as ExpenseItemCreate, cR as ExpenseItemUpdate, cQ as ExpenseItemSummary, cS as ExpenseReport, cT as ExpenseReportCreate, cV as ExpenseReportUpdate, cU as ExpenseReportSummary, d1 as HolidaySet, d2 as HolidaySetCreate, d4 as HolidaySetUpdate, d3 as HolidaySetSummary, c$ as Holiday, d0 as HolidayCreate, d6 as HolidayUpdate, d5 as HolidaySummary, d7 as InventoryProduct, d8 as InventoryProductCreate, da as InventoryProductUpdate, d9 as InventoryProductSummary, db as InventoryStockedItemAdd, dc as InventoryStockedItemRemove, dd as InventoryStockedItemTransfer, df as InvoiceCreate, dh as InvoiceUpdate, dg as InvoiceSummary, dj as ModuleAccessResultModel, dk as NotificationHistory, dl as NotificationHistoryCreate, dn as NotificationHistoryUpdate, dm as NotificationHistorySummary, dr as Opportunity, dA as OpportunityCreate, dC as OpportunityUpdate, dB as OpportunitySummary, ds as OpportunityAttachment, dt as OpportunityAttachmentCreate, dv as OpportunityAttachmentUpdate, du as OpportunityAttachmentSummary, dw as OpportunityCategory, dx as OpportunityCategoryCreate, dz as OpportunityCategoryUpdate, dy as OpportunityCategorySummary, dE as Phase, dF as PhaseCreate, dH as PhaseUpdate, dG as PhaseSummary, dJ as Product, dK as ProductCreate, dM as ProductUpdate, dL as ProductSummary, dN as ProductVendors, dO as ProductVendorsCreate, dQ as ProductVendorsUpdate, dP as ProductVendorsSummary, dS as ProjectCharge, dT as ProjectChargeCreate, dV as ProjectChargeUpdate, dU as ProjectChargeSummary, dY as ProjectNote, dZ as ProjectNoteCreate, d$ as ProjectNoteUpdate, d_ as ProjectNoteSummary, dX as ProjectCreate, e1 as ProjectUpdate, e0 as ProjectSummary, hr as CompositeContextOptions, dW as ProjectContext, e2 as PurchaseApprovals, e3 as PurchaseApprovalsCreate, e5 as PurchaseApprovalsUpdate, e4 as PurchaseApprovalsSummary, e6 as PurchaseOrderItemReceiving, e7 as PurchaseOrderItemReceivingCreate, e9 as PurchaseOrderItemReceivingUpdate, e8 as PurchaseOrderItemReceivingSummary, ea as PurchaseOrderItems, eb as PurchaseOrderItemsCreate, ed as PurchaseOrderItemsUpdate, ec as PurchaseOrderItemsSummary, ee as PurchaseOrders, ef as PurchaseOrdersCreate, eh as PurchaseOrdersUpdate, eg as PurchaseOrdersSummary, ek as QuoteItem, el as QuoteItemCreate, en as QuoteItemUpdate, em as QuoteItemSummary, eo as QuoteLocation, ep as QuoteLocationCreate, er as QuoteLocationUpdate, eq as QuoteLocationSummary, ei as Quote, ej as QuoteCreate, ex as QuoteUpdate, es as QuoteSummary, et as QuoteTemplate, eu as QuoteTemplateCreate, ew as QuoteTemplateUpdate, ev as QuoteTemplateSummary, eE as ResourceRoleQueue, eF as ResourceRoleQueueCreate, eH as ResourceRoleQueueUpdate, eG as ResourceRoleQueueSummary, eC as ResourceRole, eD as ResourceRoleCreate, eJ as ResourceRoleUpdate, eI as ResourceRoleSummary, eK as ResourceSkill, eL as ResourceSkillCreate, eN as ResourceSkillUpdate, eM as ResourceSkillSummary, eB as ResourceCreate, e$ as ResourceUpdate, eO as ResourceSummary, eP as ResourceTimeOffAdditional, eQ as ResourceTimeOffAdditionalCreate, eS as ResourceTimeOffAdditionalUpdate, eR as ResourceTimeOffAdditionalSummary, eT as ResourceTimeOffApprover, eU as ResourceTimeOffApproverCreate, eW as ResourceTimeOffApproverUpdate, eV as ResourceTimeOffApproverSummary, eX as ResourceTimeOffBalance, eY as ResourceTimeOffBalanceCreate, e_ as ResourceTimeOffBalanceUpdate, eZ as ResourceTimeOffBalanceSummary, f0 as Role, f1 as RoleCreate, f3 as RoleUpdate, f2 as RoleSummary, f5 as ServiceCall, f6 as ServiceCallCreate, fo as ServiceCallUpdate, f7 as ServiceCallSummary, fa as ServiceCallTaskResource, fb as ServiceCallTaskResourceCreate, fd as ServiceCallTaskResourceUpdate, fc as ServiceCallTaskResourceSummary, f8 as ServiceCallTask, f9 as ServiceCallTaskCreate, ff as ServiceCallTaskUpdate, fe as ServiceCallTaskSummary, fi as ServiceCallTicketResource, fj as ServiceCallTicketResourceCreate, fl as ServiceCallTicketResourceUpdate, fk as ServiceCallTicketResourceSummary, fg as ServiceCallTicket, fh as ServiceCallTicketCreate, fn as ServiceCallTicketUpdate, fm as ServiceCallTicketSummary, fq as ServiceLevelAgreementResults, fr as ServiceLevelAgreementResultsCreate, ft as ServiceLevelAgreementResultsUpdate, fs as ServiceLevelAgreementResultsSummary, f4 as Service, fp as ServiceCreate, fv as ServiceUpdate, fu as ServiceSummary, fw as Skill, fx as SkillCreate, fz as SkillUpdate, fy as SkillSummary, fC as SubscriptionPeriod, fD as SubscriptionPeriodCreate, fF as SubscriptionPeriodUpdate, fE as SubscriptionPeriodSummary, fB as SubscriptionCreate, fH as SubscriptionUpdate, fG as SubscriptionSummary, fK as SurveyResults, fL as SurveyResultsCreate, fN as SurveyResultsUpdate, fM as SurveyResultsSummary, fI as Survey, fJ as SurveyCreate, fP as SurveyUpdate, fO as SurveySummary, fR as TagAlias, fS as TagAliasCreate, fU as TagAliasUpdate, fT as TagAliasSummary, fW as TagGroup, fX as TagGroupCreate, fZ as TagGroupUpdate, fY as TagGroupSummary, fQ as Tag, fV as TagCreate, f$ as TagUpdate, f_ as TagSummary, g2 as TaskSecondaryResource, g3 as TaskSecondaryResourceCreate, g5 as TaskSecondaryResourceUpdate, g4 as TaskSecondaryResourceSummary, g0 as Task, g1 as TaskCreate, g7 as TaskUpdate, g6 as TaskSummary, g8 as ThresholdStatusResultModel, ga as TicketAdditionalConfigurationItem, gb as TicketAdditionalConfigurationItemCreate, gd as TicketAdditionalConfigurationItemUpdate, gc as TicketAdditionalConfigurationItemSummary, ge as TicketAdditionalContact, gf as TicketAdditionalContactCreate, gh as TicketAdditionalContactUpdate, gg as TicketAdditionalContactSummary, gi as TicketAttachment, gj as TicketAttachmentCreate, gl as TicketAttachmentUpdate, gk as TicketAttachmentSummary, gm as TicketCategory, gn as TicketCategoryCreate, gt as TicketCategoryUpdate, gs as TicketCategorySummary, go as TicketCategoryFieldDefault, gp as TicketCategoryFieldDefaultCreate, gr as TicketCategoryFieldDefaultUpdate, gq as TicketCategoryFieldDefaultSummary, gu as TicketChangeRequestApproval, gv as TicketChangeRequestApprovalCreate, gx as TicketChangeRequestApprovalUpdate, gw as TicketChangeRequestApprovalSummary, gy as TicketCharge, gz as TicketChargeCreate, gB as TicketChargeUpdate, gA as TicketChargeSummary, gC as TicketChecklistItem, gD as TicketChecklistItemCreate, gF as TicketChecklistItemUpdate, gE as TicketChecklistItemSummary, gG as TicketChecklistLibrary, gH as TicketChecklistLibraryCreate, gJ as TicketChecklistLibraryUpdate, gI as TicketChecklistLibrarySummary, gM as TicketHistory, gN as TicketHistoryCreate, gP as TicketHistoryUpdate, gO as TicketHistorySummary, gR as TicketNoteAttachment, gS as TicketNoteAttachmentCreate, gU as TicketNoteAttachmentUpdate, gT as TicketNoteAttachmentSummary, gQ as TicketNote, gV as TicketNoteCreate, gX as TicketNoteUpdate, gW as TicketNoteSummary, gY as TicketNoteWebhook, gZ as TicketNoteWebhookCreate, g$ as TicketNoteWebhookUpdate, g_ as TicketNoteWebhookSummary, h0 as TicketSecondaryResource, h1 as TicketSecondaryResourceCreate, h3 as TicketSecondaryResourceUpdate, h2 as TicketSecondaryResourceSummary, gL as TicketCreate, h5 as TicketUpdate, h4 as TicketSummary, gK as TicketContext, h6 as TicketWebhook, h7 as TicketWebhookCreate, h9 as TicketWebhookUpdate, h8 as TicketWebhookSummary, hf as TimeEntryCreate, hh as TimeEntryUpdate, hg as TimeEntrySummary, hb as TimeEntryAttachment, hc as TimeEntryAttachmentCreate, he as TimeEntryAttachmentUpdate, hd as TimeEntryAttachmentSummary, hi as TimeOffRequest, hj as TimeOffRequestCreate, hm as TimeOffRequestUpdate, hl as TimeOffRequestSummary, A as ApiVersionResultModel, i as AutotaskVersionResultModel, ho as ZoneInformationResultModel } from './index-BVtycq-6.cjs';
|
|
2
|
+
|
|
3
|
+
/** The 23 named zones (catalog pinned from the node credential definition, G1 api-behavior section 2). */
|
|
4
|
+
type ZoneName = 'pre-release' | 'pre-release-uk' | 'limited-release' | 'limited-release-uk' | 'america-east' | 'america-east-2' | 'america-east-3' | 'america-west' | 'america-west-2' | 'america-west-3' | 'america-west-4' | 'uk' | 'uk2' | 'uk3' | 'old-australian' | 'australia-nz' | 'australia-2' | 'pre-release-de' | 'pre-release-es' | 'german' | 'eu1' | 'spanish' | 'other';
|
|
5
|
+
/**
|
|
6
|
+
* Zone catalog: zone name -> base URL including the `/atservicesrest` version
|
|
7
|
+
* path (lowercase on every zone). `other` has no catalog URL — a user-supplied
|
|
8
|
+
* `baseUrl` is required.
|
|
9
|
+
*/
|
|
10
|
+
declare const ZONE_CATALOG: Readonly<Record<ZoneName, string | null>>;
|
|
11
|
+
/** All zone names, in catalog order (includes `'other'`). */
|
|
12
|
+
declare const ZONES: readonly ZoneName[];
|
|
13
|
+
/** Default zone — 'old-australian' (webservices6). */
|
|
14
|
+
declare const DEFAULT_ZONE: ZoneName;
|
|
15
|
+
/** Catalog URL for a named zone. Throws `AutotaskConfigError` for `'other'`. */
|
|
16
|
+
declare function zoneUrl(zone: ZoneName): string;
|
|
17
|
+
/**
|
|
18
|
+
* `baseUrl ?? zoneUrl(zone ?? 'old-australian')` — one resolved base URL for
|
|
19
|
+
* the whole client (no zone logic leaks into resources).
|
|
20
|
+
*/
|
|
21
|
+
declare function resolveBaseUrl(partial: {
|
|
22
|
+
baseUrl?: string;
|
|
23
|
+
zone?: ZoneName;
|
|
24
|
+
}): string;
|
|
25
|
+
|
|
26
|
+
/** The named config profiles (issue #4). `library` is the default and changes nothing. */
|
|
27
|
+
type ConfigProfile = 'library' | 'agent';
|
|
28
|
+
/**
|
|
29
|
+
* Conservative limits for LLM-driven (agent) workloads (issue #4) — plain
|
|
30
|
+
* data, exported for inspection and pinning. A looping agent can use up the
|
|
31
|
+
* tenant's ~10,000 req/hour vendor budget, hold all 10 concurrent threads
|
|
32
|
+
* (starving other integrations), and every retry spends budget, because the
|
|
33
|
+
* limiter counts each attempt. The hourly limit is 80% of the vendor cap —
|
|
34
|
+
* 2,000/hr stay available for the other integrations on the tenant.
|
|
35
|
+
*
|
|
36
|
+
* Resolution order: EXPLICIT config > profile > library default (the
|
|
37
|
+
* existing validation runs on the final values). In agent mode the page size
|
|
38
|
+
* is additionally CAPPED at `maxPageSize` (an explicit value above the cap
|
|
39
|
+
* is clamped, not rejected).
|
|
40
|
+
*/
|
|
41
|
+
declare const AGENT_PROFILE: {
|
|
42
|
+
/** 80% of the 10,000/hr vendor cap. */
|
|
43
|
+
readonly rateLimit: {
|
|
44
|
+
readonly perHour: 8000;
|
|
45
|
+
};
|
|
46
|
+
/** Default page size in agent mode. */
|
|
47
|
+
readonly pageSize: 25;
|
|
48
|
+
/** Agent-mode page-size cap (explicit values above it are clamped). */
|
|
49
|
+
readonly maxPageSize: 100;
|
|
50
|
+
readonly timeoutMs: 20000;
|
|
51
|
+
readonly maxRetries: 1;
|
|
52
|
+
readonly maxConcurrent: 3;
|
|
53
|
+
/** 4 MiB — an agent should not pull a 64 MiB body. */
|
|
54
|
+
readonly maxResponseBytes: number;
|
|
55
|
+
readonly resolution: {
|
|
56
|
+
readonly maxScanRecords: 200;
|
|
57
|
+
readonly maxScanPages: 2;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
2
60
|
|
|
3
61
|
/**
|
|
4
62
|
* A read-through TTL cache (lazy purge on read; expiry is `Date.now()`
|
|
@@ -291,221 +349,6 @@ declare class AutotaskError extends Error {
|
|
|
291
349
|
declare class AutotaskConfigError extends AutotaskError {
|
|
292
350
|
constructor(message: string, options?: AutotaskErrorOptions);
|
|
293
351
|
}
|
|
294
|
-
declare class AutotaskNetworkError extends AutotaskError {
|
|
295
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
296
|
-
}
|
|
297
|
-
declare class AutotaskTimeoutError extends AutotaskError {
|
|
298
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
299
|
-
}
|
|
300
|
-
/** The caller's `AbortSignal` fired: distinct from a timeout, never retried. */
|
|
301
|
-
declare class AutotaskAbortError extends AutotaskError {
|
|
302
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
303
|
-
}
|
|
304
|
-
/** A response (or redirect) the transport refuses by policy: non-retryable. */
|
|
305
|
-
declare class ResponseRejectedError extends AutotaskError {
|
|
306
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
307
|
-
}
|
|
308
|
-
declare class BadRequestError extends AutotaskError {
|
|
309
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
310
|
-
}
|
|
311
|
-
declare class UnauthorizedError extends AutotaskError {
|
|
312
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
313
|
-
}
|
|
314
|
-
declare class ForbiddenError extends AutotaskError {
|
|
315
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
316
|
-
}
|
|
317
|
-
declare class NotFoundError extends AutotaskError {
|
|
318
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
319
|
-
}
|
|
320
|
-
declare class ConflictError extends AutotaskError {
|
|
321
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
322
|
-
}
|
|
323
|
-
declare class UnprocessableEntityError extends AutotaskError {
|
|
324
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
325
|
-
}
|
|
326
|
-
declare class RateLimitError extends AutotaskError {
|
|
327
|
-
/** Seconds the server asked the client to wait (`Retry-After`), when present. */
|
|
328
|
-
retryAfter?: number;
|
|
329
|
-
/** True when the call was refused locally (the tenant cooldown gate) and never sent. */
|
|
330
|
-
notSent?: boolean;
|
|
331
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
332
|
-
}
|
|
333
|
-
declare class ServerError extends AutotaskError {
|
|
334
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
335
|
-
}
|
|
336
|
-
/**
|
|
337
|
-
* Issue #24: a 2xx whose body does not parse as JSON and whose `Content-Type`
|
|
338
|
-
* is NOT a JSON media type (the vendor maintenance / edge HTML page). The
|
|
339
|
-
* vendor never processed the request — `retryable` is advisory (the transport
|
|
340
|
-
* retries it per policy on idempotent methods only). The raw, HOST-SOURCED
|
|
341
|
-
* free text lives ONLY in `details.bodySnippet` (the first 256 bytes,
|
|
342
|
-
* truncation-only — name-based redaction is a no-op on free text; untrusted
|
|
343
|
-
* host content for the served surface). A JSON-ish header
|
|
344
|
-
* (`application/json*` or a plus-json suffix media type) or an ABSENT
|
|
345
|
-
* header keeps `INVALID_RESPONSE` (the #13/W-A7 shape-drift key); JSON
|
|
346
|
-
* under any other header still decodes (the decode attempt is
|
|
347
|
-
* unconditional).
|
|
348
|
-
*/
|
|
349
|
-
declare class UnexpectedContentTypeError extends AutotaskError {
|
|
350
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* Issue #25: a 2xx with an EMPTY body where a result was expected (the
|
|
354
|
-
* transport's `expectBody` contract — non-DELETE by default; DELETE and 204
|
|
355
|
-
* keep returning `undefined`). A blank 200 from a proxy or maintenance edge
|
|
356
|
-
* is a transport fault, not "no data". `retryable` is advisory (true for
|
|
357
|
-
* non-DELETE reads — the loop never retries 2xx). `details = { httpStatus,
|
|
358
|
-
* method }`. The transport attaches the typed empty-reason details (issue
|
|
359
|
-
* #14) on it before throwing, so a pinned blind surface keeps its stamp.
|
|
360
|
-
*/
|
|
361
|
-
declare class EmptyResponseError extends AutotaskError {
|
|
362
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Issue #26: the host circuit breaker is OPEN and the call was refused
|
|
366
|
-
* LOCALLY (pre-send — zero upstream calls, no hourly-limiter stamp, the
|
|
367
|
-
* #6 cooldown gate's slot). `retryable: true` is a DELIBERATE divergence
|
|
368
|
-
* from #6's `RATE_LIMITED_COOLDOWN` (`retryable: false`): the open period
|
|
369
|
-
* is bounded and advertised via `retryAfter`, so retrying the SAME call
|
|
370
|
-
* after the wait is the correct caller behaviour (service health, not
|
|
371
|
-
* request shape — no narrowing needed). `notSent: true` is the shared
|
|
372
|
-
* local-refusal marker. `details = { state: 'open' | 'half-open',
|
|
373
|
-
* retryAfterMs, failureCount }` rides the error (and the MCP served
|
|
374
|
-
* payload) verbatim.
|
|
375
|
-
*/
|
|
376
|
-
declare class CircuitBreakerError extends AutotaskError {
|
|
377
|
-
/** Seconds remaining in the open period (absent when the half-open probe budget is in flight). */
|
|
378
|
-
retryAfter?: number;
|
|
379
|
-
/** True when the call was refused locally (the circuit is open) and never sent. */
|
|
380
|
-
notSent?: boolean;
|
|
381
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
382
|
-
}
|
|
383
|
-
/**
|
|
384
|
-
* Skill 3.5.0 / L2 (finding A1): an opt-in `hostPolicy` bound refused the
|
|
385
|
-
* configured (or discovery-provided) host at CONFIG resolution — a typed
|
|
386
|
-
* config error, thrown BEFORE any wire activity (zero fetch; the issue-#43
|
|
387
|
-
* re-point never happens and the original 401 propagates untouched).
|
|
388
|
-
* `retryable: false` (the same contract as the #6 cooldown refusal): the
|
|
389
|
-
* bound is a caller policy, not service health, so retrying the identical
|
|
390
|
-
* call cannot succeed. `details = { bound: 'private' | 'allowlist',
|
|
391
|
-
* origin }` rides the error verbatim and names the offending canonical
|
|
392
|
-
* origin.
|
|
393
|
-
*/
|
|
394
|
-
declare class HostPolicyDeniedError extends AutotaskError {
|
|
395
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
396
|
-
}
|
|
397
|
-
declare class ResolutionError extends AutotaskError {
|
|
398
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
399
|
-
}
|
|
400
|
-
declare class PaginationLimitError extends AutotaskError {
|
|
401
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
402
|
-
}
|
|
403
|
-
declare class QueryTooLongError extends AutotaskError {
|
|
404
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
405
|
-
}
|
|
406
|
-
/** One vendor field rejection, parsed from the error body. */
|
|
407
|
-
interface VendorFieldError {
|
|
408
|
-
message?: string;
|
|
409
|
-
field?: string;
|
|
410
|
-
code?: string;
|
|
411
|
-
}
|
|
412
|
-
declare function parseVendorErrors(body: unknown): VendorFieldError[] | undefined;
|
|
413
|
-
/**
|
|
414
|
-
* #23: true when the parsed vendor `errors[]` entries of a 500 name a known
|
|
415
|
-
* deterministic field-validation phrase (case-insensitive, over every
|
|
416
|
-
* entry's message — string and object entries alike; `parseVendorErrors`
|
|
417
|
-
* normalises both). The shared signal for the transport's no-retry decision
|
|
418
|
-
* and the #26 breaker predicate (key on this, never on INVALID_RESPONSE).
|
|
419
|
-
*/
|
|
420
|
-
declare function isDeterministicVendor500(entries: VendorFieldError[] | undefined): boolean;
|
|
421
|
-
/**
|
|
422
|
-
* The vendor detail line: entries joined with ` | `, or the top-level vendor
|
|
423
|
-
* `message`, or undefined when the body names nothing.
|
|
424
|
-
*/
|
|
425
|
-
declare function formatVendorDetail(body: unknown): string | undefined;
|
|
426
|
-
/**
|
|
427
|
-
* What the transport knows about the credential values it actually put on the wire for the failed
|
|
428
|
-
* attempt. Only the header NAMES are carried — a value never leaves the transport.
|
|
429
|
-
*/
|
|
430
|
-
interface CredentialShapeExpectation {
|
|
431
|
-
/** Credential header names whose values were sent. */
|
|
432
|
-
headerNames: readonly string[];
|
|
433
|
-
/** True when EVERY one of those values had a clean shape. */
|
|
434
|
-
allValuesClean: boolean;
|
|
435
|
-
/** The shape artifact found, when one was found (never the value itself). */
|
|
436
|
-
problem?: string;
|
|
437
|
-
}
|
|
438
|
-
/** The pointer a 401's shape diagnostic carries to the canonical env load. */
|
|
439
|
-
declare const CREDENTIAL_SHAPE_POINTER: string;
|
|
440
|
-
/**
|
|
441
|
-
* Merge the extras a 401 already carries (the issue-#43 `zoneRecovery` detail, the issue-#14
|
|
442
|
-
* pointer/emptyReason) with the C3 credential diagnostic, field by field. Later fields win.
|
|
443
|
-
*/
|
|
444
|
-
declare function mergeDetails(base: Record<string, unknown> | undefined, extra: Record<string, unknown> | undefined): Record<string, unknown> | undefined;
|
|
445
|
-
/**
|
|
446
|
-
* Map an HTTP status + raw vendor body to the typed error (ARCHITECTURE
|
|
447
|
-
* section 10). Keeps the raw body under `vendorError` and adopts a vendor
|
|
448
|
-
* `code` that looks like a stable machine code (top-level, then the first
|
|
449
|
-
* entry's) — otherwise the status-derived code is kept.
|
|
450
|
-
*
|
|
451
|
-
* The INV-A1 hotfix (second site): the vendor body is deep-redacted ONCE,
|
|
452
|
-
* before anything is derived from it — so `vendorError` and the adopted
|
|
453
|
-
* message (computed from the redacted body) never carry a pinned field value
|
|
454
|
-
* (a 4xx that echoes a request body which carried a secret would otherwise
|
|
455
|
-
* leak through the error path). `redactPersonalData` (default true) gates
|
|
456
|
-
* the PII/CONFIDENTIAL classes; the SECRET class is always redacted.
|
|
457
|
-
*
|
|
458
|
-
* When the body names nothing (no `errors[]` entry, no top-level `message`),
|
|
459
|
-
* the default status message gains a `: <body>` suffix — the redacted body
|
|
460
|
-
* (parsed → JSON text, raw → text) truncated to 200 chars — so 4xx/5xx
|
|
461
|
-
* triage sees the vendor text in the message itself.
|
|
462
|
-
*/
|
|
463
|
-
declare function errorFromStatus(status: number, body: unknown, url?: string, operation?: string, redactPersonalData?: boolean, credential?: CredentialShapeExpectation): AutotaskError;
|
|
464
|
-
/**
|
|
465
|
-
* Stale-object protection (ARCHITECTURE section 19.3): the caller-supplied
|
|
466
|
-
* `lastModifiedDate` no longer matches the vendor's current value. No
|
|
467
|
-
* `If-Match`/ETag exists in the API — the plan's `staleCheck` field is the
|
|
468
|
-
* comparison.
|
|
469
|
-
*/
|
|
470
|
-
declare class StaleObjectError extends AutotaskError {
|
|
471
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
472
|
-
}
|
|
473
|
-
/**
|
|
474
|
-
* A deliberate-act refusal (section 19.5 R4): a destructive or
|
|
475
|
-
* approval-gated operation was invoked without its exact confirmation flag.
|
|
476
|
-
*/
|
|
477
|
-
declare class ConfirmationRequiredError extends AutotaskError {
|
|
478
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
479
|
-
}
|
|
480
|
-
/**
|
|
481
|
-
* Issue #9 (P1): the vendor defines no DELETE for the requested resource —
|
|
482
|
-
* a `recovery` delete refused PRE-SEARCH (zero wire). The note carries the
|
|
483
|
-
* spec-derived boundary sentence (plan.deleteBoundaries) + the UI-only
|
|
484
|
-
* cleanup remedy. Never a raw vendor 405: the boundary is known locally
|
|
485
|
-
* (the vendored spec audit) and the refusal happens before any request.
|
|
486
|
-
*/
|
|
487
|
-
declare class DeleteBoundaryError extends AutotaskError {
|
|
488
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
489
|
-
}
|
|
490
|
-
/**
|
|
491
|
-
* Issue #9 (P1): a matched record's id is NOT representable as a safe JS
|
|
492
|
-
* integer (beyond Number.MAX_SAFE_INTEGER) — the match CANNOT be addressed
|
|
493
|
-
* through the SDK's typed delete surface. Never a silent skip: the op
|
|
494
|
-
* refuses with this code (delete) or marks the match id null (find) so the
|
|
495
|
-
* caller sees the unaddressable record and can clean it up via the UI.
|
|
496
|
-
*/
|
|
497
|
-
declare class MarkerUnsafeIdError extends AutotaskError {
|
|
498
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
499
|
-
}
|
|
500
|
-
/**
|
|
501
|
-
* Issue #9: the recovery's bounded search TRIPPED its match cap (more
|
|
502
|
-
* matches exist than `limit`) — the op refuses instead of returning a
|
|
503
|
-
* silently truncated (or silently empty) result. Retry with a higher
|
|
504
|
-
* `limit` (max 100) or a narrower `marker` / `filter`.
|
|
505
|
-
*/
|
|
506
|
-
declare class RecoveryTruncatedError extends AutotaskError {
|
|
507
|
-
constructor(message: string, options?: AutotaskErrorOptions);
|
|
508
|
-
}
|
|
509
352
|
/** Type guard for the hierarchy. */
|
|
510
353
|
declare function isAutotaskError(err: unknown): err is AutotaskError;
|
|
511
354
|
|
|
@@ -777,79 +620,6 @@ declare function isCredentialHeaderName(name: string, extraSecretKeys?: readonly
|
|
|
777
620
|
*/
|
|
778
621
|
declare function redactRecord(value: unknown, extraSecretKeys?: readonly string[]): unknown;
|
|
779
622
|
|
|
780
|
-
/** The 23 named zones (catalog pinned from the node credential definition, G1 api-behavior section 2). */
|
|
781
|
-
type ZoneName = 'pre-release' | 'pre-release-uk' | 'limited-release' | 'limited-release-uk' | 'america-east' | 'america-east-2' | 'america-east-3' | 'america-west' | 'america-west-2' | 'america-west-3' | 'america-west-4' | 'uk' | 'uk2' | 'uk3' | 'old-australian' | 'australia-nz' | 'australia-2' | 'pre-release-de' | 'pre-release-es' | 'german' | 'eu1' | 'spanish' | 'other';
|
|
782
|
-
/**
|
|
783
|
-
* Zone catalog: zone name -> base URL including the `/atservicesrest` version
|
|
784
|
-
* path (lowercase on every zone). `other` has no catalog URL — a user-supplied
|
|
785
|
-
* `baseUrl` is required.
|
|
786
|
-
*/
|
|
787
|
-
declare const ZONE_CATALOG: Readonly<Record<ZoneName, string | null>>;
|
|
788
|
-
/** All zone names, in catalog order (includes `'other'`). */
|
|
789
|
-
declare const ZONES: readonly ZoneName[];
|
|
790
|
-
/** Default zone — 'old-australian' (webservices6). */
|
|
791
|
-
declare const DEFAULT_ZONE: ZoneName;
|
|
792
|
-
/** The named config profiles (issue #4). `library` is the default and changes nothing. */
|
|
793
|
-
type ConfigProfile = 'library' | 'agent';
|
|
794
|
-
/**
|
|
795
|
-
* Conservative limits for LLM-driven (agent) workloads (issue #4) — plain
|
|
796
|
-
* data, exported for inspection and pinning. A looping agent can use up the
|
|
797
|
-
* tenant's ~10,000 req/hour vendor budget, hold all 10 concurrent threads
|
|
798
|
-
* (starving other integrations), and every retry spends budget, because the
|
|
799
|
-
* limiter counts each attempt. The hourly limit is 80% of the vendor cap —
|
|
800
|
-
* 2,000/hr stay available for the other integrations on the tenant.
|
|
801
|
-
*
|
|
802
|
-
* Resolution order: EXPLICIT config > profile > library default (the
|
|
803
|
-
* existing validation runs on the final values). In agent mode the page size
|
|
804
|
-
* is additionally CAPPED at `maxPageSize` (an explicit value above the cap
|
|
805
|
-
* is clamped, not rejected).
|
|
806
|
-
*/
|
|
807
|
-
declare const AGENT_PROFILE: {
|
|
808
|
-
/** 80% of the 10,000/hr vendor cap. */
|
|
809
|
-
readonly rateLimit: {
|
|
810
|
-
readonly perHour: 8000;
|
|
811
|
-
};
|
|
812
|
-
/** Default page size in agent mode. */
|
|
813
|
-
readonly pageSize: 25;
|
|
814
|
-
/** Agent-mode page-size cap (explicit values above it are clamped). */
|
|
815
|
-
readonly maxPageSize: 100;
|
|
816
|
-
readonly timeoutMs: 20000;
|
|
817
|
-
readonly maxRetries: 1;
|
|
818
|
-
readonly maxConcurrent: 3;
|
|
819
|
-
/** 4 MiB — an agent should not pull a 64 MiB body. */
|
|
820
|
-
readonly maxResponseBytes: number;
|
|
821
|
-
readonly resolution: {
|
|
822
|
-
readonly maxScanRecords: 200;
|
|
823
|
-
readonly maxScanPages: 2;
|
|
824
|
-
};
|
|
825
|
-
};
|
|
826
|
-
declare const DEFAULT_PAGE_SIZE = 10;
|
|
827
|
-
declare const MAX_PAGE_SIZE = 500;
|
|
828
|
-
declare const DEFAULT_TIMEOUT_MS = 30000;
|
|
829
|
-
declare const DEFAULT_MAX_RETRIES = 3;
|
|
830
|
-
/** Autotask runs a weekly maintenance window (observed median ~2 h, ceiling 4 h — MAINTENANCE_WINDOW_MAX_MS); wait out one hour by default. */
|
|
831
|
-
declare const DEFAULT_MAINTENANCE_MAX_WAIT_MS = 3600000;
|
|
832
|
-
declare const DEFAULT_MAINTENANCE_POLL_MS = 30000;
|
|
833
|
-
/**
|
|
834
|
-
* Issue #114 (2026-10-19): the observed ceiling of the weekly maintenance
|
|
835
|
-
* window — 4 h. Live evidence from 19 windows: 30-240 min, median ~2 h, max
|
|
836
|
-
* 4 h. The default wait above stays 1 h (the common case, and a bounded
|
|
837
|
-
* default for unattended callers); a worker that must ride out the worst
|
|
838
|
-
* window passes `maintenanceMaxWaitMs: MAINTENANCE_WINDOW_MAX_MS`.
|
|
839
|
-
*/
|
|
840
|
-
declare const MAINTENANCE_WINDOW_MAX_MS: number;
|
|
841
|
-
declare const DEFAULT_MAX_CONCURRENT = 10;
|
|
842
|
-
/** Default response-size cap (64 MiB) — bounds a runaway/hostile body in memory. */
|
|
843
|
-
declare const DEFAULT_MAX_RESPONSE_BYTES: number;
|
|
844
|
-
/** Bounded client-scan caps for resolution (section 19.2). */
|
|
845
|
-
declare const DEFAULT_MAX_SCAN_RECORDS = 500;
|
|
846
|
-
declare const DEFAULT_MAX_SCAN_PAGES = 4;
|
|
847
|
-
/** Default read-cache TTL (issue #80: the plan-derived default class, 5 min). */
|
|
848
|
-
declare const DEFAULT_READ_CACHE_TTL_MS = 300000;
|
|
849
|
-
/** Default field-metadata cache TTL (issue #80: the 5 min class). */
|
|
850
|
-
declare const DEFAULT_FIELD_CACHE_TTL_MS = 300000;
|
|
851
|
-
/** Default resource-name cache TTL (issue #80: the plan-derived reference class, 1 h). */
|
|
852
|
-
declare const DEFAULT_RESOURCE_NAME_CACHE_TTL_MS = 3600000;
|
|
853
623
|
interface AutotaskConfig {
|
|
854
624
|
/**
|
|
855
625
|
* Config profile (issue #4): `'library'` (default — changes nothing) or
|
|
@@ -1229,83 +999,8 @@ interface ResolvedAutotaskConfig {
|
|
|
1229
999
|
allowedOrigins: readonly string[];
|
|
1230
1000
|
};
|
|
1231
1001
|
}
|
|
1232
|
-
/** Catalog URL for a named zone. Throws `AutotaskConfigError` for `'other'`. */
|
|
1233
|
-
declare function zoneUrl(zone: ZoneName): string;
|
|
1234
|
-
/**
|
|
1235
|
-
* `baseUrl ?? zoneUrl(zone ?? 'old-australian')` — one resolved base URL for
|
|
1236
|
-
* the whole client (no zone logic leaks into resources).
|
|
1237
|
-
*/
|
|
1238
|
-
declare function resolveBaseUrl(partial: {
|
|
1239
|
-
baseUrl?: string;
|
|
1240
|
-
zone?: ZoneName;
|
|
1241
|
-
}): string;
|
|
1242
|
-
/**
|
|
1243
|
-
* The credential core of `resolveConfig` (issue #80): the fail-closed
|
|
1244
|
-
* credential trim + zone -> base-URL resolution WITHOUT building the
|
|
1245
|
-
* cache instances. `ClientPool.keyFor` calls this to hash the credential
|
|
1246
|
-
* tuple — with the channels default-on, the full `resolveConfig` would
|
|
1247
|
-
* construct three throwaway cache instances on every pool access, so the
|
|
1248
|
-
* key path must not (the pool key ignores cache config by design: same
|
|
1249
|
-
* credentials = one client, first-built wins). `resolveConfig` reuses
|
|
1250
|
-
* this for the same fields, then resolves the rest.
|
|
1251
|
-
*/
|
|
1252
|
-
declare function resolveCredentials(config: AutotaskConfig): {
|
|
1253
|
-
baseUrl: string;
|
|
1254
|
-
zone?: ZoneName;
|
|
1255
|
-
apiIntegrationCode: string;
|
|
1256
|
-
userName: string;
|
|
1257
|
-
secret: string;
|
|
1258
|
-
impersonationResourceId?: string;
|
|
1259
|
-
};
|
|
1260
|
-
/** Validate + resolve an AutotaskConfig (fail closed; throws AutotaskConfigError). */
|
|
1261
|
-
declare function resolveConfig(config: AutotaskConfig): ResolvedAutotaskConfig;
|
|
1262
|
-
|
|
1263
|
-
/**
|
|
1264
|
-
* A short-TTL in-memory cache of the `latest` walk's count probes (lazy
|
|
1265
|
-
* purge on read; expiry is `Date.now()` based; LRU-ish eviction at the cap).
|
|
1266
|
-
* Plain `number` values only — `set` refuses a non-finite number silently
|
|
1267
|
-
* (the sentinel record never reaches it by construction; the guard keeps
|
|
1268
|
-
* the store's type honest if a caller ever does).
|
|
1269
|
-
*/
|
|
1270
|
-
declare class LatestCountCache {
|
|
1271
|
-
/** The TTL in ms. */
|
|
1272
|
-
readonly ttlMs: number;
|
|
1273
|
-
/** The entry bound (applies to STORED entries). */
|
|
1274
|
-
readonly maxEntries: number;
|
|
1275
|
-
private readonly store;
|
|
1276
|
-
/** The invalidation epoch (the `ReadCache` pattern — issue #139): bumped
|
|
1277
|
-
* by `clear()`; capture it before a wire read and pass it to `set` so a
|
|
1278
|
-
* probe in flight across a write cannot re-store its stale answer. */
|
|
1279
|
-
private epochCounter;
|
|
1280
|
-
constructor(ttlMs: number, maxEntries?: number);
|
|
1281
|
-
/** The composite key: (resource plan key, canonical filter serialisation)
|
|
1282
|
-
* — the `\u0000` separator is unencodable in a filter value, so no two
|
|
1283
|
-
* (resource, conditions) pairs collide. */
|
|
1284
|
-
static key(resourceKey: string, conditions: readonly FilterCondition[] | undefined): string;
|
|
1285
|
-
/** The live entry's count, or `undefined` (absent OR expired — an expired
|
|
1286
|
-
* entry is purged lazily on this read). */
|
|
1287
|
-
get(key: string): number | undefined;
|
|
1288
|
-
/** The invalidation epoch: bumped by `clear()`; capture it before a wire
|
|
1289
|
-
* read and pass it to `set` so a probe in flight across a write cannot
|
|
1290
|
-
* re-store its stale answer (issue #139, the `ReadCache` pattern). */
|
|
1291
|
-
get epoch(): number;
|
|
1292
|
-
/** Store a SUCCESSFUL plain-number count under `key`, live for `ttlMs`.
|
|
1293
|
-
* `epoch` is the invalidation epoch the caller captured BEFORE its wire
|
|
1294
|
-
* read: a probe that straddled a `clear()` (a write) is dropped, never
|
|
1295
|
-
* re-stored with its pre-write body (issue #139). Past the cap: purge
|
|
1296
|
-
* expired entries first, then evict the oldest-inserted (Map iteration
|
|
1297
|
-
* order = insertion order). */
|
|
1298
|
-
set(key: string, value: number, epoch?: number): void;
|
|
1299
|
-
/** Drop one entry (absent = no-op). Issue #157: the stale-LOW recovery
|
|
1300
|
-
* deletes the cached total before its one fresh wire re-probe, so the
|
|
1301
|
-
* re-probe cannot be served by the entry it is meant to replace. */
|
|
1302
|
-
delete(key: string): void;
|
|
1303
|
-
/** Clear every entry (a real write through the owning client — the
|
|
1304
|
-
* write-then-read re-fetch rule) and bump the invalidation epoch: a
|
|
1305
|
-
* `set` captured before this `clear` is discarded (issue #139). */
|
|
1306
|
-
clear(): void;
|
|
1307
|
-
}
|
|
1308
1002
|
|
|
1003
|
+
/** Request shape + retriable-method set (split from http.ts, issue #166). */
|
|
1309
1004
|
interface RequestOptions {
|
|
1310
1005
|
method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
1311
1006
|
/** Path after the base URL, already interpolated, e.g. '/V1.0/Companies/42'. */
|
|
@@ -1397,54 +1092,63 @@ interface RequestOptions {
|
|
|
1397
1092
|
* `idempotent: true`.
|
|
1398
1093
|
*/
|
|
1399
1094
|
declare const IDEMPOTENT_METHODS: readonly string[];
|
|
1095
|
+
|
|
1400
1096
|
/**
|
|
1401
|
-
*
|
|
1402
|
-
*
|
|
1403
|
-
*
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
/**
|
|
1407
|
-
* Map the vendor's `nextPageUrl` cursor to a request path for `baseUrl`.
|
|
1408
|
-
* Issue #54: the cursor is server-supplied, so it is resolved against the
|
|
1409
|
-
* base and REFUSED (ResponseRejectedError, zero wire) when its origin
|
|
1410
|
-
* differs — page 2 never goes to another host with the credentials. The
|
|
1411
|
-
* base pathname (e.g. `/atservicesrest`) is stripped so `buildUrl` does not
|
|
1412
|
-
* double it.
|
|
1097
|
+
* A short-TTL in-memory cache of the `latest` walk's count probes (lazy
|
|
1098
|
+
* purge on read; expiry is `Date.now()` based; LRU-ish eviction at the cap).
|
|
1099
|
+
* Plain `number` values only — `set` refuses a non-finite number silently
|
|
1100
|
+
* (the sentinel record never reaches it by construction; the guard keeps
|
|
1101
|
+
* the store's type honest if a caller ever does).
|
|
1413
1102
|
*/
|
|
1414
|
-
declare
|
|
1103
|
+
declare class LatestCountCache {
|
|
1104
|
+
/** The TTL in ms. */
|
|
1105
|
+
readonly ttlMs: number;
|
|
1106
|
+
/** The entry bound (applies to STORED entries). */
|
|
1107
|
+
readonly maxEntries: number;
|
|
1108
|
+
private readonly store;
|
|
1109
|
+
/** The invalidation epoch (the `ReadCache` pattern — issue #139): bumped
|
|
1110
|
+
* by `clear()`; capture it before a wire read and pass it to `set` so a
|
|
1111
|
+
* probe in flight across a write cannot re-store its stale answer. */
|
|
1112
|
+
private epochCounter;
|
|
1113
|
+
constructor(ttlMs: number, maxEntries?: number);
|
|
1114
|
+
/** The composite key: (resource plan key, canonical filter serialisation)
|
|
1115
|
+
* — the `\u0000` separator is unencodable in a filter value, so no two
|
|
1116
|
+
* (resource, conditions) pairs collide. */
|
|
1117
|
+
static key(resourceKey: string, conditions: readonly FilterCondition[] | undefined): string;
|
|
1118
|
+
/** The live entry's count, or `undefined` (absent OR expired — an expired
|
|
1119
|
+
* entry is purged lazily on this read). */
|
|
1120
|
+
get(key: string): number | undefined;
|
|
1121
|
+
/** The invalidation epoch: bumped by `clear()`; capture it before a wire
|
|
1122
|
+
* read and pass it to `set` so a probe in flight across a write cannot
|
|
1123
|
+
* re-store its stale answer (issue #139, the `ReadCache` pattern). */
|
|
1124
|
+
get epoch(): number;
|
|
1125
|
+
/** Store a SUCCESSFUL plain-number count under `key`, live for `ttlMs`.
|
|
1126
|
+
* `epoch` is the invalidation epoch the caller captured BEFORE its wire
|
|
1127
|
+
* read: a probe that straddled a `clear()` (a write) is dropped, never
|
|
1128
|
+
* re-stored with its pre-write body (issue #139). Past the cap: purge
|
|
1129
|
+
* expired entries first, then evict the oldest-inserted (Map iteration
|
|
1130
|
+
* order = insertion order). */
|
|
1131
|
+
set(key: string, value: number, epoch?: number): void;
|
|
1132
|
+
/** Drop one entry (absent = no-op). Issue #157: the stale-LOW recovery
|
|
1133
|
+
* deletes the cached total before its one fresh wire re-probe, so the
|
|
1134
|
+
* re-probe cannot be served by the entry it is meant to replace. */
|
|
1135
|
+
delete(key: string): void;
|
|
1136
|
+
/** Clear every entry (a real write through the owning client — the
|
|
1137
|
+
* write-then-read re-fetch rule) and bump the invalidation epoch: a
|
|
1138
|
+
* `set` captured before this `clear` is discarded (issue #139). */
|
|
1139
|
+
clear(): void;
|
|
1140
|
+
}
|
|
1141
|
+
|
|
1415
1142
|
/**
|
|
1416
|
-
*
|
|
1417
|
-
*
|
|
1418
|
-
* `IncludeFields`, `filter` (the POST-body order every walk test pins).
|
|
1143
|
+
* HttpClient — fetch transport (ARCHITECTURE section 8). Split from http.ts
|
|
1144
|
+
* (issue #166); see src/http.ts for the barrel and the behaviour summary.
|
|
1419
1145
|
*
|
|
1420
|
-
*
|
|
1421
|
-
*
|
|
1422
|
-
*
|
|
1423
|
-
*
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
* projected page-1 walk into a projected walk (before #118 page 2+ POSTed
|
|
1427
|
-
* `{ filter }` alone and returned FULL rows — 4 keys on page 1, 73 on
|
|
1428
|
-
* page 2, live-reproduced 2026-10-19 against ww29).
|
|
1429
|
-
* - `filter` ALWAYS present (`[]` when no conditions) — node parity; see the
|
|
1430
|
-
* comment at the assignment below.
|
|
1431
|
-
*/
|
|
1432
|
-
declare function buildQueryBody(params: QueryParams): Record<string, unknown>;
|
|
1433
|
-
/**
|
|
1434
|
-
* Build the RequestOptions for a `/query` call (ARCHITECTURE section 8.2).
|
|
1435
|
-
* POST-always by default — body `{ MaxRecords?, IncludeFields?, filter }` from
|
|
1436
|
-
* {@link buildQueryBody} (one source of truth with the cursor continuations of
|
|
1437
|
-
* a walk; `filter` is ALWAYS sent — an empty array when absent — node parity,
|
|
1438
|
-
* and some zone versions 500 on its absence; the field is the conditions array).
|
|
1439
|
-
* `via: 'get'` — GET `?search=<json>` with the FULL measured URL checked
|
|
1440
|
-
* against the 2048-char cap; above it the call THROWS `QueryTooLongError`
|
|
1441
|
-
* (never a silent switch to POST). When `includeFields` is set the SDK
|
|
1442
|
-
* always appends `id` (issue #59: the vendor omits `id` from a row unless
|
|
1443
|
-
* it is named, and every caller needs the id to act on the row).
|
|
1444
|
-
*/
|
|
1445
|
-
declare function buildQueryRequest(baseUrl: string, resourcePath: string, params: QueryParams): RequestOptions;
|
|
1446
|
-
/** Run `fn` with `signal` cancelling every SDK request it starts (and their retry waits). */
|
|
1447
|
-
declare function runWithSignal<T>(signal: AbortSignal, fn: () => T): T;
|
|
1146
|
+
* `request()` is an orchestrator over: the pre-send gates (cooldown, breaker),
|
|
1147
|
+
* a per-attempt loop (`sendOnce` -> `handleSuccess` | `handleFailureStatus`
|
|
1148
|
+
* each yielding "done" or "retry"), and the settle steps (success/failure
|
|
1149
|
+
* bookkeeping, audit, cache invalidation).
|
|
1150
|
+
*/
|
|
1151
|
+
|
|
1448
1152
|
declare class HttpClient {
|
|
1449
1153
|
/**
|
|
1450
1154
|
* The LIVE base URL (issue #43): the construction-time value until a zone
|
|
@@ -1487,12 +1191,10 @@ declare class HttpClient {
|
|
|
1487
1191
|
private readonly maintenanceMaxWaitMs;
|
|
1488
1192
|
private readonly maintenancePollMs;
|
|
1489
1193
|
private readonly maxResponseBytes;
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
private readonly
|
|
1494
|
-
/** Request timestamps inside the trailing hour (only used when `rateLimit.perHour` is set). */
|
|
1495
|
-
private readonly hourStamps;
|
|
1194
|
+
/** Local hourly budget (undefined when `rateLimit.perHour` is off). */
|
|
1195
|
+
private readonly hourly;
|
|
1196
|
+
/** FIFO semaphore bounding in-flight requests to `maxConcurrent`. */
|
|
1197
|
+
private readonly semaphore;
|
|
1496
1198
|
/** Tenant 429 cooldown gate store (undefined when the gate is disabled). */
|
|
1497
1199
|
private readonly cooldownStore;
|
|
1498
1200
|
private readonly cooldownMaxMs;
|
|
@@ -1536,8 +1238,6 @@ declare class HttpClient {
|
|
|
1536
1238
|
* already travels in every auth header; nothing new crosses the boundary). */
|
|
1537
1239
|
readonly userName: string;
|
|
1538
1240
|
private readonly onAudit;
|
|
1539
|
-
private inFlight;
|
|
1540
|
-
private readonly waitQueue;
|
|
1541
1241
|
constructor(config: ResolvedAutotaskConfig);
|
|
1542
1242
|
/**
|
|
1543
1243
|
* The LOCAL hourly-budget state (the sliding window this client counts):
|
|
@@ -1551,69 +1251,12 @@ declare class HttpClient {
|
|
|
1551
1251
|
used: number;
|
|
1552
1252
|
remaining: number;
|
|
1553
1253
|
} | undefined;
|
|
1554
|
-
/**
|
|
1555
|
-
* Breaker success recording (issue #26): a 2xx that got through counts
|
|
1556
|
-
* toward `successesToClose` whenever the host has an armed state (open or
|
|
1557
|
-
* half-open — a half-open probe, or a threshold-bypass probe of a downed
|
|
1558
|
-
* host; decision Q10). A probe completion decrements the admitted-probe
|
|
1559
|
-
* budget. On reaching `successesToClose` the circuit CLOSES: counters
|
|
1560
|
-
* reset and the entry is DELETED (a healthy host leaves no trace — the
|
|
1561
|
-
* #6 delete-on-2xx precedent). A success while closed (or with no entry)
|
|
1562
|
-
* is a no-op: the closed failure window is a rate window that prunes
|
|
1563
|
-
* itself lazily, not a gate a success clears early.
|
|
1564
|
-
*/
|
|
1565
|
-
private recordBreakerSuccess;
|
|
1566
|
-
/**
|
|
1567
|
-
* Breaker failure recording (issue #26): called from the outer catch (the
|
|
1568
|
-
* single choke point every surfaced failure passes through) for errors
|
|
1569
|
-
* the failure predicate counts. While closed, a counted failure appends
|
|
1570
|
-
* to the window-pruned `failures` (keeping only timestamps strictly inside
|
|
1571
|
-
* `failureWindowMs`) and OPENS the circuit at `failureThreshold`. While
|
|
1572
|
-
* open / half-open (a probe failure, a racy late probe failure, or a
|
|
1573
|
-
* threshold-bypass failure) it RE-ARMS the open period from now and
|
|
1574
|
-
* resets the success count (the #6 "a 429 re-arms" precedent — a bypass
|
|
1575
|
-
* failure never fails silently).
|
|
1576
|
-
*/
|
|
1577
|
-
private recordBreakerFailure;
|
|
1578
|
-
private acquire;
|
|
1579
|
-
private release;
|
|
1580
|
-
/**
|
|
1581
|
-
* One request: build URL/headers, apply the whole-call deadline, retry
|
|
1582
|
-
* idempotent methods on 429/5xx, map failures to the typed errors.
|
|
1583
|
-
* Returns the RAW parsed body (2xx); `undefined` for an empty 2xx body.
|
|
1584
|
-
*/
|
|
1585
1254
|
/**
|
|
1586
1255
|
* One audit event per settled request (section 19.3): the correlation id,
|
|
1587
1256
|
* the redacted request body, the outcome. An audit hook that throws never
|
|
1588
1257
|
* breaks the request.
|
|
1589
1258
|
*/
|
|
1590
1259
|
private emitAudit;
|
|
1591
|
-
/** Sliding-window `rateLimit.perHour` limiter: waits for a slot within the call budget, else throws. */
|
|
1592
|
-
private takeHourlySlot;
|
|
1593
|
-
/**
|
|
1594
|
-
* Issue #43: the re-point gate — the zone re-resolution is available for
|
|
1595
|
-
* this request. ALL gates must hold (the WYRE prior art, adopted
|
|
1596
|
-
* verbatim): the flag is ON (strict `true`, off by default), the live
|
|
1597
|
-
* base is CATALOG-derived (an explicit baseUrl — a bare one, or
|
|
1598
|
-
* `zone: 'other'` + baseUrl — is NEVER re-pointed: the operator said
|
|
1599
|
-
* where to go), and the path is RELATIVE (an absolute path, e.g. a
|
|
1600
|
-
* cursor `nextPageUrl`, is already baked to a host we do not own and
|
|
1601
|
-
* cannot be rewritten). The fourth gate — "this is not already the
|
|
1602
|
-
* recovery retry" (exactly ONE retry, never a loop) — is enforced at the
|
|
1603
|
-
* call site by the request-local `zoneRetry` flag.
|
|
1604
|
-
*/
|
|
1605
|
-
private canReResolveZone;
|
|
1606
|
-
/**
|
|
1607
|
-
* Issue #43: one UNAUTHENTICATED vendor zone-discovery call
|
|
1608
|
-
* (`GET https://webservices.autotask.net/atservicesrest/v1.0/zoneInformation?user=<userName>`
|
|
1609
|
-
* — NO auth headers: the recovery signal must not leak credentials to a
|
|
1610
|
-
* host that is not the configured API base). Returns the tenant's
|
|
1611
|
-
* resolved zone base URL, or undefined on ANY fault (network, non-2xx,
|
|
1612
|
-
* redirect, malformed body, missing/invalid `url`) — the caller then
|
|
1613
|
-
* propagates the original 401 untouched (zero retry). Bounded by the
|
|
1614
|
-
* SAME whole-call deadline as the request it recovers.
|
|
1615
|
-
*/
|
|
1616
|
-
private discoverZoneBase;
|
|
1617
1260
|
/**
|
|
1618
1261
|
* Issue #43: re-point the client to the tenant's newly resolved zone
|
|
1619
1262
|
* base. The transport's PER-HOST state is RE-DERIVED, so the re-pointed
|
|
@@ -1626,63 +1269,78 @@ declare class HttpClient {
|
|
|
1626
1269
|
* no envelope change).
|
|
1627
1270
|
*/
|
|
1628
1271
|
private repointZoneBase;
|
|
1629
|
-
request<T>(opts: RequestOptions): Promise<T>;
|
|
1630
|
-
}
|
|
1631
|
-
declare function unwrapItems<T>(body: unknown, operation?: string): {
|
|
1632
|
-
items: T[];
|
|
1633
|
-
pageDetails: PagingModel;
|
|
1634
|
-
};
|
|
1635
|
-
/**
|
|
1636
|
-
* get: expects `{ item: T }`. `item === null` THROWS `NotFoundError` (the
|
|
1637
|
-
* vendor not-found signal — HTTP may be 200) with `httpStatus: 200` and
|
|
1638
|
-
* `resourceIds: [id]` when `id` is given — and, when `entity` is given as
|
|
1639
|
-
* well, the labeled companion `details.idRefs: [{ entity, id }]` (issue
|
|
1640
|
-
* #116: the legacy field never says which vendor table the id addresses,
|
|
1641
|
-
* and the caller of a generic get knows it — the vendor entity name,
|
|
1642
|
-
* singular snake_case, e.g. `company`, `ticket`, `resource`).
|
|
1643
|
-
*/
|
|
1644
|
-
declare function unwrapItem<T>(body: unknown, id?: Identifier, operation?: string, entity?: string): T;
|
|
1645
|
-
/** count: expects `{ queryCount: number }` (an object, not a bare number) → the plain number. */
|
|
1646
|
-
declare function unwrapQueryCount(body: unknown, operation?: string): number;
|
|
1647
|
-
/** create/update/delete: expects `{ itemId }` (accepts `{ id }` too) → `{ id }`. */
|
|
1648
|
-
declare function unwrapOperation(body: unknown, operation?: string): OperationResult;
|
|
1649
|
-
/** invoice markup/pdf + attachment downloads: raw pass-through (no re-wrap). */
|
|
1650
|
-
declare function passthrough<T>(body: unknown): T;
|
|
1651
|
-
|
|
1652
|
-
/** A page fetcher: request page N at the given size; report paging facts from `pageDetails`. */
|
|
1653
|
-
type PageFetcher<T> = (page: number, pageSize: number) => Promise<Page<T>>;
|
|
1654
|
-
/** 1000-page walk guard (the node's `MAX_PAGES`). */
|
|
1655
|
-
declare const MAX_PAGES = 1000;
|
|
1656
|
-
interface PaginateOptions {
|
|
1657
|
-
/** Page size for the walk. Default 10; clamped into 1..500. */
|
|
1658
|
-
pageSize?: number;
|
|
1659
1272
|
/**
|
|
1660
|
-
*
|
|
1661
|
-
*
|
|
1662
|
-
*
|
|
1273
|
+
* Breaker success recording (issue #26). A probe admitted on one host must
|
|
1274
|
+
* never record onto another: if the call re-pointed (issue #43) the
|
|
1275
|
+
* outcome was measured on a different host — void the probe (the admitted
|
|
1276
|
+
* budget on the original host dangles for the rest of the open period;
|
|
1277
|
+
* bounded, conservative, nothing crosses hosts).
|
|
1663
1278
|
*/
|
|
1664
|
-
|
|
1279
|
+
private recordBreakerSuccess;
|
|
1280
|
+
/** Breaker failure recording (issue #26); same host-pinning as the success recorder (issue #43). */
|
|
1281
|
+
private recordBreakerFailure;
|
|
1282
|
+
/** The caller's signal wins over the deadline when both fired. */
|
|
1283
|
+
private interrupted;
|
|
1284
|
+
/** A retry only runs when its wait fits inside what is left of the call budget. */
|
|
1285
|
+
private canWait;
|
|
1286
|
+
private pause;
|
|
1287
|
+
/** The deadline is a re-armable timer (a maintenance wait extends it); `AbortSignal.timeout` cannot be extended or cleared. */
|
|
1288
|
+
private armDeadline;
|
|
1289
|
+
/** If the retry's wait fits the budget: log, count the attempt, pause, and report true (loop again). */
|
|
1290
|
+
private retryAfterDelay;
|
|
1291
|
+
/**
|
|
1292
|
+
* Maintenance-window wait (the weekly Autotask window): bounded by
|
|
1293
|
+
* `maintenanceMaxWaitMs` from the FIRST such response (one budget shared
|
|
1294
|
+
* by the 2xx-page and any-status sites), polling `maintenancePollMs`, a
|
|
1295
|
+
* fresh per-attempt deadline after each wait; does not consume
|
|
1296
|
+
* `maxRetries`. True when a wait happened (loop again); false when the
|
|
1297
|
+
* budget is spent (`maintenanceBudgetSpent` is set).
|
|
1298
|
+
*/
|
|
1299
|
+
private waitOutMaintenance;
|
|
1300
|
+
/** The wait is a FACT for the request: stamp `details.maintenance` (and the exhaustion action) on a surfaced error. */
|
|
1301
|
+
private stampMaintenance;
|
|
1302
|
+
private auditNotSent;
|
|
1303
|
+
/**
|
|
1304
|
+
* Tenant 429 cooldown gate (issue #6): a 429 armed the gate for this
|
|
1305
|
+
* tenant — fail LOCALLY (before the semaphore, the hourly limiter and
|
|
1306
|
+
* fetch: zero upstream calls) until the deadline passes.
|
|
1307
|
+
*/
|
|
1308
|
+
private gateCooldown;
|
|
1309
|
+
/**
|
|
1310
|
+
* Host circuit breaker gate (issue #26): the SAME pre-send slot as the
|
|
1311
|
+
* #6 cooldown gate (cooldown first): OUTSIDE the retry loop, before the
|
|
1312
|
+
* hourly limiter, the semaphore and fetch — a refusal makes zero fetches,
|
|
1313
|
+
* consumes no hourly stamp and no concurrency slot.
|
|
1314
|
+
* `thresholdInformation.get()` bypasses the REFUSAL
|
|
1315
|
+
* (`bypassCircuitBreaker`) but its outcome is still recorded.
|
|
1316
|
+
*/
|
|
1317
|
+
private gateBreaker;
|
|
1318
|
+
/**
|
|
1319
|
+
* Take the hourly slot and a semaphore permit, fetch, and read the body.
|
|
1320
|
+
* `retry` when a network error is retriable (already waited); throws the
|
|
1321
|
+
* typed error otherwise. The permit is released on every path.
|
|
1322
|
+
*/
|
|
1323
|
+
private sendOnce;
|
|
1324
|
+
/** Classify a 2xx: empty body, JSON (redacted), or a non-JSON page (maintenance wait / retry / typed error). */
|
|
1325
|
+
private handleSuccess;
|
|
1326
|
+
private handleNonJson2xx;
|
|
1327
|
+
/**
|
|
1328
|
+
* Classify a non-2xx: any-status maintenance wait, the 429/5xx retry leg,
|
|
1329
|
+
* the 401 zone recovery, else throw the typed error (arming the 429
|
|
1330
|
+
* cooldown when it surfaces). Returns RETRY or throws.
|
|
1331
|
+
*/
|
|
1332
|
+
private handleFailureStatus;
|
|
1333
|
+
private onSuccess;
|
|
1334
|
+
private onFailure;
|
|
1335
|
+
/** A real write (even a failed one — it may have partly applied) voids cached reads. */
|
|
1336
|
+
private invalidateAfterWrite;
|
|
1337
|
+
/**
|
|
1338
|
+
* One request: build URL/headers, apply the whole-call deadline, retry
|
|
1339
|
+
* idempotent methods on 429/5xx, map failures to the typed errors.
|
|
1340
|
+
* Returns the RAW parsed body (2xx); `undefined` for an empty 2xx body.
|
|
1341
|
+
*/
|
|
1342
|
+
request<T>(opts: RequestOptions): Promise<T>;
|
|
1665
1343
|
}
|
|
1666
|
-
/** Clamp a requested page size into the vendor range 1..500. */
|
|
1667
|
-
declare function clampPageSize(pageSize: number): number;
|
|
1668
|
-
/**
|
|
1669
|
-
* `ceil(total / pageSize)`; 0 for an empty result set. `total` must be a TRUE
|
|
1670
|
-
* match count (`count()`, POST .../query/count) — never `pageDetails.requestCount`,
|
|
1671
|
-
* which echoes the requested MaxRecords.
|
|
1672
|
-
*/
|
|
1673
|
-
declare function totalPagesFor(total: number, pageSize: number): number;
|
|
1674
|
-
/**
|
|
1675
|
-
* Yield pages one at a time until the walk ends. Requests pages 1, 2, 3, ...
|
|
1676
|
-
* at `clampPageSize(opts.pageSize ?? 10)`; a walk that would fetch a 1001st
|
|
1677
|
-
* page throws `PaginationLimitError` before issuing the request.
|
|
1678
|
-
*/
|
|
1679
|
-
declare function paginate<T>(fetchPage: PageFetcher<T>, opts?: PaginateOptions): AsyncGenerator<Page<T>, void>;
|
|
1680
|
-
/** Yield items across pages (flattened). */
|
|
1681
|
-
declare function paginateItems<T>(fetchPage: PageFetcher<T>, opts?: PaginateOptions): AsyncGenerator<T, void>;
|
|
1682
|
-
/** Collect every item across all pages into one array (`queryAll`'s workhorse). */
|
|
1683
|
-
declare function collectAll<T>(fetchPage: PageFetcher<T>, opts?: PaginateOptions): Promise<T[]>;
|
|
1684
|
-
/** Materialise an async iterator of items into an array. */
|
|
1685
|
-
declare function toArray<T>(iter: AsyncIterable<T>): Promise<T[]>;
|
|
1686
1344
|
|
|
1687
1345
|
/**
|
|
1688
1346
|
* Relationship map + blind-surface stamps + the delete-boundary /
|
|
@@ -1717,7 +1375,7 @@ declare function toArray<T>(iter: AsyncIterable<T>): Promise<T[]>;
|
|
|
1717
1375
|
* queryBounded noteChars free-text cap (issue #61 — response-side only);
|
|
1718
1376
|
* - docs/API.md §11.7/§11.8/§11.9/§11.10/§11.11/§11.12 render the same facts.
|
|
1719
1377
|
*
|
|
1720
|
-
* planHash:
|
|
1378
|
+
* planHash: 95746a69c86daeb7a5d10fa77dd92189c87c8145c547d06275fd0b517b913c9b
|
|
1721
1379
|
*/
|
|
1722
1380
|
|
|
1723
1381
|
/** One pinned blind-surface stamp (the result-time sentinel object). */
|
|
@@ -1875,6 +1533,13 @@ interface RelationshipResource {
|
|
|
1875
1533
|
zoneFacts: {
|
|
1876
1534
|
createRequiredSet?: string[];
|
|
1877
1535
|
quirks?: string[];
|
|
1536
|
+
/** Recorded successful live writes (issue #195) — the gate's liveness evidence. */
|
|
1537
|
+
liveWrites?: Array<{
|
|
1538
|
+
op: string;
|
|
1539
|
+
date: string;
|
|
1540
|
+
outcome: string;
|
|
1541
|
+
note?: string;
|
|
1542
|
+
}>;
|
|
1878
1543
|
createGuidance?: {
|
|
1879
1544
|
createOp: string | null;
|
|
1880
1545
|
parentScoped: boolean;
|
|
@@ -2152,7 +1817,44 @@ interface SearchWithDetail<T> {
|
|
|
2152
1817
|
items: T[];
|
|
2153
1818
|
miss?: MissDetail;
|
|
2154
1819
|
}
|
|
2155
|
-
|
|
1820
|
+
|
|
1821
|
+
/** A page fetcher: request page N at the given size; report paging facts from `pageDetails`. */
|
|
1822
|
+
type PageFetcher<T> = (page: number, pageSize: number) => Promise<Page<T>>;
|
|
1823
|
+
/** 1000-page walk guard (the node's `MAX_PAGES`). */
|
|
1824
|
+
declare const MAX_PAGES = 1000;
|
|
1825
|
+
interface PaginateOptions {
|
|
1826
|
+
/** Page size for the walk. Default 10; clamped into 1..500. */
|
|
1827
|
+
pageSize?: number;
|
|
1828
|
+
/**
|
|
1829
|
+
* `collectAll` only: refuse to accumulate more than this many records.
|
|
1830
|
+
* Exceeding it throws `PaginationLimitError` (never a silent truncation).
|
|
1831
|
+
* Default: unbounded (the 1000-page walk guard still applies).
|
|
1832
|
+
*/
|
|
1833
|
+
maxRecords?: number;
|
|
1834
|
+
}
|
|
1835
|
+
/** Clamp a requested page size into the vendor range 1..500. */
|
|
1836
|
+
declare function clampPageSize(pageSize: number): number;
|
|
1837
|
+
/**
|
|
1838
|
+
* `ceil(total / pageSize)`; 0 for an empty result set. `total` must be a TRUE
|
|
1839
|
+
* match count (`count()`, POST .../query/count) — never `pageDetails.requestCount`,
|
|
1840
|
+
* which echoes the requested MaxRecords.
|
|
1841
|
+
*/
|
|
1842
|
+
declare function totalPagesFor(total: number, pageSize: number): number;
|
|
1843
|
+
/**
|
|
1844
|
+
* Yield pages one at a time until the walk ends. Requests pages 1, 2, 3, ...
|
|
1845
|
+
* at `clampPageSize(opts.pageSize ?? 10)`; a walk that would fetch a 1001st
|
|
1846
|
+
* page throws `PaginationLimitError` before issuing the request.
|
|
1847
|
+
*/
|
|
1848
|
+
declare function paginate<T>(fetchPage: PageFetcher<T>, opts?: PaginateOptions): AsyncGenerator<Page<T>, void>;
|
|
1849
|
+
/** Yield items across pages (flattened). */
|
|
1850
|
+
declare function paginateItems<T>(fetchPage: PageFetcher<T>, opts?: PaginateOptions): AsyncGenerator<T, void>;
|
|
1851
|
+
/** Collect every item across all pages into one array (`queryAll`'s workhorse). */
|
|
1852
|
+
declare function collectAll<T>(fetchPage: PageFetcher<T>, opts?: PaginateOptions): Promise<T[]>;
|
|
1853
|
+
/** Materialise an async iterator of items into an array. */
|
|
1854
|
+
declare function toArray<T>(iter: AsyncIterable<T>): Promise<T[]>;
|
|
1855
|
+
|
|
1856
|
+
/** Query-walk layer of `BaseResource` (issue #165): paging, bounded query, blind count, latest probes. */
|
|
1857
|
+
declare abstract class QueryBase<T = Record<string, unknown>> {
|
|
2156
1858
|
protected readonly http: HttpClient;
|
|
2157
1859
|
protected readonly config: BaseResourceConfig;
|
|
2158
1860
|
/** Default page size for query walks (the client's resolved `pageSize`). */
|
|
@@ -2170,10 +1872,8 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
|
|
|
2170
1872
|
constructor(http: HttpClient, config: BaseResourceConfig, pageSize?: number);
|
|
2171
1873
|
/** One page fetch: page 1 POSTs the QueryModel body; later pages POST the same body (`buildQueryBody`) to the absolute cursor (issue #118). */
|
|
2172
1874
|
protected fetchPage(params: QueryParams, page: number, pageSize: number, state: QueryWalkState): Promise<Page<T>>;
|
|
2173
|
-
private readPage;
|
|
2174
1875
|
/** Build the per-walk fetcher (closure keeps cursor state private to this walk). */
|
|
2175
1876
|
protected pageFetcher(params?: QueryParams): PageFetcher<T>;
|
|
2176
|
-
private walkPageSize;
|
|
2177
1877
|
/** Stream items across pages (the resource `query` surface). */
|
|
2178
1878
|
protected queryItems(params?: QueryParams): AsyncIterable<T>;
|
|
2179
1879
|
/** Stream page objects (the resource `queryPages` surface). */
|
|
@@ -2209,198 +1909,15 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
|
|
|
2209
1909
|
* walk below is bit-for-bit the existing path.
|
|
2210
1910
|
* Pure read; no mutation paths involved.
|
|
2211
1911
|
*/
|
|
2212
|
-
queryBounded(params?: BoundedQueryParams): Promise<BoundedQueryResult<T>>;
|
|
2213
|
-
/** Issue #61 (slice A): the noteChars truncation at the SINGLE chokepoint
|
|
2214
|
-
* of `queryBounded` — the normal walk and the `latest` paths both
|
|
2215
|
-
* produced their `BoundedQueryResult` here (the single chokepoint the
|
|
2216
|
-
* plan pins: R5). Copy-on-truncate (the input records are never
|
|
2217
|
-
* mutated); the additive `noteCharsTruncated` stamp = the truncated-
|
|
2218
|
-
* field count, ABSENT when 0. The resource's untrusted-class field set
|
|
2219
|
-
* is the generated stamp (the SAME plan column the registry's
|
|
2220
|
-
* `metadata.untrustedFields` channel stamps — zero second source of
|
|
2221
|
-
* truth); an absent set = the cap is a no-op for the resource (bit-for-
|
|
2222
|
-
* bit the pre-slice result). */
|
|
2223
|
-
private applyNoteChars;
|
|
2224
|
-
/** The bounded walk loop (shared by the normal `queryBounded` path and the
|
|
2225
|
-
* `latest` modes): walks the vendor cursor until `limit` TOTAL records
|
|
2226
|
-
* are collected or the cursor is exhausted; the 1000-page guard is a
|
|
2227
|
-
* SOFT stop (never a throw). ONE per-walk closure (walks never share
|
|
2228
|
-
* state). */
|
|
2229
|
-
private walkBounded;
|
|
2230
|
-
/** A walk stop is TRUNCATED when the 1000-page guard fired, or the limit
|
|
2231
|
-
* was met with a live next cursor (or a sliced final page): rows exist
|
|
2232
|
-
* past the stop point, and a top-N-by-id over the collected set alone is
|
|
2233
|
-
* unprovable (the `latest` mechanism refuses instead of guessing). */
|
|
2234
|
-
private walkTruncated;
|
|
2235
|
-
/** The 0-item result stamping — the ONE source of truth (the normal walk
|
|
2236
|
-
* and the `latest` empty outcome both ride it): the typed blind-surface
|
|
2237
|
-
* sentinel + the pinned empty-reason, through the filter-aware predicate
|
|
2238
|
-
* `blindStampFor` (`unfiltered-blind` surfaces stamp ONLY the unfiltered
|
|
2239
|
-
* call — a filtered empty result is a true absence; live-verified
|
|
2240
|
-
* S12-B P1: the filtered tickets.query returns data on ww29). Additive:
|
|
2241
|
-
* the walk values are never mutated. The PINNED reason is filter-aware
|
|
2242
|
-
* like the blind stamps (post-verification F1): a FILTERED empty walk on
|
|
2243
|
-
* a pinned surface is a true absence in that filter's scope, never a
|
|
2244
|
-
* tenant-scope claim — the pin states "EMPTY FOR THIS API USER" across
|
|
2245
|
-
* the whole surface, which a filter-scope 0 does not establish (no
|
|
2246
|
-
* speculation). */
|
|
2247
|
-
private stampEmptyQueryResult;
|
|
2248
|
-
/** Issue #59: id comparison honouring the Identifier contract (safe
|
|
2249
|
-
* numbers numerically; exact-digit strings via `BigInt`; mixed
|
|
2250
|
-
* number/string via `BigInt(String(a))`) — ids above 2^53 stay exact. */
|
|
2251
|
-
private compareIds;
|
|
2252
|
-
/** Issue #127: the `latest` walk's count probes through the per-client
|
|
2253
|
-
* short-TTL count cache (`LatestCountCache` — fixed 30 s TTL, the
|
|
2254
|
-
* memory guard; cleared on every real write through this client, the
|
|
2255
|
-
* write-then-read re-fetch rule). Only a SUCCESSFUL plain-number vendor
|
|
2256
|
-
* count answer is stored: the blind-surface / pinned-empty sentinels are
|
|
2257
|
-
* RECORDS and pass through un-stored (the plan-pinned stamps stay fresh
|
|
2258
|
-
* and re-derive on every call), and an error rejects before any store.
|
|
2259
|
-
* The key is (resource plan key, canonical filter serialisation — the
|
|
2260
|
-
* normalised conditions' JSON): the initial `count(F)` probe and every
|
|
2261
|
-
* `id gt T` threshold probe are separate entries, and a re-asked
|
|
2262
|
-
* "top N" within the TTL makes ZERO extra count calls (its probes all
|
|
2263
|
-
* hit — the bracket/search sequence is deterministic given the counts).
|
|
2264
|
-
* Issue #157: two corrections to the snapshot trade. (1) A total of 0 is
|
|
2265
|
-
* NEVER stored — a 0 is rare and cheap to re-probe, and a cached 0 fed
|
|
2266
|
-
* the false-empty branch (a repeat after an out-of-band insert returned
|
|
2267
|
-
* no rows without walking). (2) `fresh: true` DELETES the entry before
|
|
2268
|
-
* the wire read and re-stores the fresh answer — the ONE re-probe the
|
|
2269
|
-
* stale-LOW recovery in `latestWalk` is allowed. Counts are snapshots,
|
|
2270
|
-
* not contracts: the truncation guard covers the growth-of-total
|
|
2271
|
-
* direction; a stale-LOW total within the TTL is resolved by that one
|
|
2272
|
-
* fresh re-probe (never by the guard alone). The plain `count` op and
|
|
2273
|
-
* `operations.aggregate` call `countGlobal` directly and promise fresh
|
|
2274
|
-
* totals — this wrapper is used ONLY on the latest-walk probe path.
|
|
2275
|
-
*/
|
|
2276
|
-
private latestProbeCount;
|
|
2277
|
-
/** Issue #59: one `latest` threshold count probe — a ROWLESS
|
|
2278
|
-
* `count(F ∧ id gt T)` call (the vendor caps — ≤500 OR-conditions,
|
|
2279
|
-
* 8000 chars serialised — leave a single `gt` condition room on any
|
|
2280
|
-
* filter). Issue #127: it rides the per-client short-TTL count cache — the same (resource, conditions) probe within the 30 s window is reused (zero vendor calls); a sentinel answer is never cached. The `BlindCountResult` sentinel (a record, not a number —
|
|
2281
|
-
* the declared `number` return is the documented under-type) unwraps to
|
|
2282
|
-
* its `count` value (always 0): at or above the max matching id the
|
|
2283
|
-
* count is 0, which is exactly the bracket-termination signal. */
|
|
2284
|
-
private countAboveId;
|
|
2285
|
-
/**
|
|
2286
|
-
* Issue #59: the `latest: N` mechanism — the N highest-`id` rows,
|
|
2287
|
-
* count-anchored (the vendor has no sort parameter; `id` is the primary
|
|
2288
|
-
* key, so "highest id" is the only order the SDK can prove). Three
|
|
2289
|
-
* branches:
|
|
2290
|
-
* 1. PROBE: `C = count(F)` — ONE rowless count call. A
|
|
2291
|
-
* `BlindCountResult` sentinel (a record, not a number) routes to
|
|
2292
|
-
* branch 3; a plain number to branch 2.
|
|
2293
|
-
* 2. NON-BLIND:
|
|
2294
|
-
* - `C === 0` → the stamped empty (1 wire total — the 0-item stamping
|
|
2295
|
-
* reused; a pinned `emptyReason` where the plan pins one).
|
|
2296
|
-
* - `C <= 2500` → FULL-SET mode: the bounded walk of `F` (limit `C`,
|
|
2297
|
-
* page size min(500, C)) collects the COMPLETE matching set — wire
|
|
2298
|
-
* 1 + ceil(C/500) <= 6, independent of table size. A truncated walk
|
|
2299
|
-
* (the vendor's rows disagree with its own count) is
|
|
2300
|
-
* LATEST_WINDOW_INCOMPLETE — the top-N of a truncated set is
|
|
2301
|
-
* unprovable — EXCEPT issue #157: when `C` came from the CACHE, the
|
|
2302
|
-
* total is re-probed ONCE fresh (the stale-LOW recovery: a larger
|
|
2303
|
-
* fresh total continues the walk against it; the refusal stands only
|
|
2304
|
-
* when the fresh probe confirms the cached value). Sort
|
|
2305
|
-
* id-descending; return the top N (a set of C < N returns itself).
|
|
2306
|
-
* - `C > 2500` → THRESHOLD mode: find the smallest id threshold `T`
|
|
2307
|
-
* with `count(F ∧ id gt T) <= N` by exponential bracketing
|
|
2308
|
-
* (T = 1, 2, 4, …) + binary search — each probe ONE rowless count
|
|
2309
|
-
* call, the total budget LATEST_MAX_COUNT_PROBES (exhaustion →
|
|
2310
|
-
* LATEST_THRESHOLD_UNRESOLVED; worst case 1 + 2·log2(maxId)). The
|
|
2311
|
-
* window {F ∧ id gte T} holds exactly N+1 rows: `T` is the SMALLEST
|
|
2312
|
-
* threshold with count <= N, so `count(F ∧ id gt (T-1)) > N`, and
|
|
2313
|
-
* `count(gt (T-1)) = count(gt T) + count(eq T)` forces a matching
|
|
2314
|
-
* row with `id == T` (ids are unique primary keys) — every row
|
|
2315
|
-
* outside the window has a lower id, so the N highest of the window
|
|
2316
|
-
* ARE the N highest overall. Final step: ONE bounded walk of the
|
|
2317
|
-
* window (limit N+1, ≤ 6 pages), sort id-descending, take N.
|
|
2318
|
-
* `hasMore: false` — complete FOR THE REQUEST (the table may hold
|
|
2319
|
-
* more rows; `<resource>.count` is the total).
|
|
2320
|
-
* 3. BLIND: the count cannot be trusted (a blind 0 proves nothing) → the
|
|
2321
|
-
* bounded walk of `F` up to `limit` (default 500). A completing walk
|
|
2322
|
-
* (cursor exhausted within the limit) returns the sorted top-N WITH
|
|
2323
|
-
* the blind-surface sentinel stamp — the "highest id" claim is scoped
|
|
2324
|
-
* to the caller-visible enumeration (the one new stamp usage: the
|
|
2325
|
-
* normal path stamps only 0-item results). A truncated walk (the limit
|
|
2326
|
-
* reached with a live next cursor, or the 1000-page guard) →
|
|
2327
|
-
* LATEST_WINDOW_INCOMPLETE — a truncated enumeration's top-N-by-id is
|
|
2328
|
-
* unprovable, so the op refuses instead of returning a possibly-wrong
|
|
2329
|
-
* answer.
|
|
2330
|
-
* `includeFields` always carries `id` (the P1 id-append,
|
|
2331
|
-
* `buildQueryRequest`), which `latest` sorts on. Pure read; no mutation
|
|
2332
|
-
* paths involved. Issue #127: every count probe of this walk (the
|
|
2333
|
-
* initial `count(F)` + the `id gt T` threshold probes) rides the
|
|
2334
|
-
* per-client short-TTL count cache (30 s; a real write through this
|
|
2335
|
-
* client clears it) — a re-asked "top N" within the window reuses the
|
|
2336
|
-
* probes (zero extra vendor count calls); sentinel answers are never
|
|
2337
|
-
* cached (the plan-pinned stamps stay fresh), and a 0 total is never
|
|
2338
|
-
* cached either (issue #157: a 0 is cheap to re-probe and a cached 0
|
|
2339
|
-
* would shadow an out-of-band insert). The stale-LOW direction is closed
|
|
2340
|
-
* by the ONE fresh re-probe above; the stale-HIGH direction is safe by
|
|
2341
|
-
* construction (threshold mode re-probes fresh `id gt T` counts and
|
|
2342
|
-
* full-set mode ends when the cursor exhausts). The plain `count` op and
|
|
2343
|
-
* `operations.aggregate` bypass the cache by construction and promise
|
|
2344
|
-
* fresh totals.
|
|
2345
|
-
*/
|
|
2346
|
-
private latestWalk;
|
|
2347
|
-
/** The shared `latest` completion: the (provably complete or
|
|
2348
|
-
* stamp-scoped) set sorted id-descending, top N taken. `hasMore: false`
|
|
2349
|
-
* — the result is complete FOR THE REQUEST (the table may hold more
|
|
2350
|
-
* rows; `<resource>.count` is the total). */
|
|
2351
|
-
private finishLatest;
|
|
2352
|
-
/** The blind branch of `latestWalk` (branch 3): the bounded walk of `F`
|
|
2353
|
-
* up to `limit` (default 500) + the id-descending top-N. A completing
|
|
2354
|
-
* walk (cursor exhausted within the limit) is stamped with the
|
|
2355
|
-
* blind-surface sentinel — the "highest id" claim is scoped to the
|
|
2356
|
-
* caller-visible enumeration (the note says exactly that; the one new
|
|
2357
|
-
* stamp usage, the normal path stamps only 0-item results); a truncated
|
|
2358
|
-
* walk is LATEST_WINDOW_INCOMPLETE. */
|
|
2359
|
-
private latestBlindWalk;
|
|
2360
|
-
/** Issue #59: the typed refusal when the id-threshold probe budget is
|
|
2361
|
-
* exhausted — the NEW code is an addition to the served error-code
|
|
2362
|
-
* surface (docs/API.md §2; no new class — the `errorCodes` baseline is
|
|
2363
|
-
* untouched). Zero wire beyond the probes. */
|
|
2364
|
-
private latestThresholdUnresolvedError;
|
|
2365
|
-
/** Issue #59: the typed refusal when a `latest` walk truncates — the NEW
|
|
2366
|
-
* code is an addition to the served error-code surface (docs/API.md
|
|
2367
|
-
* §2). A truncated enumeration's top-N-by-id is unprovable, so the op
|
|
2368
|
-
* refuses instead of returning a possibly-wrong answer. */
|
|
2369
|
-
private latestWindowIncompleteError;
|
|
1912
|
+
queryBounded(params?: BoundedQueryParams): Promise<BoundedQueryResult<T>>;
|
|
2370
1913
|
/** `POST /V1.0/<E>/query/count` → `queryCount` unwrapped to a plain number —
|
|
2371
1914
|
* or, on a plan-pinned blind surface, the `{ count: 0, blindSurface }`
|
|
2372
1915
|
* typed sentinel (S12-C T10; see `BlindCountResult`). */
|
|
2373
1916
|
protected countGlobal(params?: QueryParams): Promise<number>;
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
* `fresh` skips the lookup (the read still refreshes the entry for the
|
|
2379
|
-
* other callers): mutation-path reads (stale-object guard, dry-run diff)
|
|
2380
|
-
* and the composite ROOT read of a hot resource (issue #36 — the
|
|
2381
|
-
* ticket-composite root) must see the live record, never a snapshot.
|
|
2382
|
-
* `resource` (issue #32) is the plan key of the entity this path
|
|
2383
|
-
* points to: the stored entry's TTL is the per-resource override for
|
|
2384
|
-
* that key when `cache.perResourceTtlMs` names it, else `ttlMs`. */
|
|
2385
|
-
private cachedGet;
|
|
2386
|
-
/**
|
|
2387
|
-
* Entity-metadata read through the opt-in field cache (issue #31; off by
|
|
2388
|
-
* default: with no fieldCache this is exactly one `http.request` — the
|
|
2389
|
-
* bit-for-bit uncached trio path). One private helper beside `cachedGet`,
|
|
2390
|
-
* for the same three reasons the read cache exists: a vendor drift
|
|
2391
|
-
* (deterministic 500, INVALID_RESPONSE) must not be served stale, repeat
|
|
2392
|
-
* reads must not pay the wire, and concurrent callers must not issue
|
|
2393
|
-
* duplicate requests. The UNWRAPPED value is stored (never the raw
|
|
2394
|
-
* envelope); an EMPTY or FAILED result is never cached (a failure
|
|
2395
|
-
* rejects before any `set`; an empty is refused by the cache itself);
|
|
2396
|
-
* concurrent callers share ONE in-flight wire request; the drift signal
|
|
2397
|
-
* (the INVALID_RESPONSE shape drift, the deterministic validation 500)
|
|
2398
|
-
* invalidates THIS entity's entries so the next call refetches
|
|
2399
|
-
* (transport-level signals are also invalidated in the transport's own
|
|
2400
|
-
* catch — the two sites cover the 2xx and non-2xx halves). `fresh`
|
|
2401
|
-
* skips the lookup: fetch live and refresh the entries.
|
|
2402
|
-
*/
|
|
2403
|
-
private cachedMeta;
|
|
1917
|
+
}
|
|
1918
|
+
|
|
1919
|
+
/** Read/meta layer of `BaseResource` (issue #165): get, entity/field/UDF info, context fetch, resolve/search, downloads. */
|
|
1920
|
+
declare abstract class MetaBase<T = Record<string, unknown>> extends QueryBase<T> {
|
|
2404
1921
|
/** `GET /V1.0/<E>/{id}` → `{ item }` unwrapped (`item: null` → NotFoundError). */
|
|
2405
1922
|
protected getGlobal(id: Identifier, fresh?: boolean): Promise<T>;
|
|
2406
1923
|
/**
|
|
@@ -2436,109 +1953,8 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
|
|
|
2436
1953
|
* accept all three shapes; empty/null → NotFoundError.
|
|
2437
1954
|
*/
|
|
2438
1955
|
protected getScopedModel(parentId: Identifier, id: Identifier, fresh?: boolean): Promise<T>;
|
|
2439
|
-
private unwrapModelLike;
|
|
2440
|
-
/** Normalise a mutation body: `id` OR `itemId` → `id`; UDF map → UDF array (UDF-capable only). */
|
|
2441
|
-
protected normalizeMutationBody(data: Record<string, unknown>): Record<string, unknown>;
|
|
2442
|
-
/** `POST /V1.0/<E>` → `{ id }` (issue #13: a drifted 2xx runs the bounded marker recovery where the plan pins a marker field). */
|
|
2443
|
-
protected createGlobal(data: TCreate, opts?: CreateOpts): Promise<OperationResult>;
|
|
2444
|
-
/**
|
|
2445
|
-
* Issue #13: the create-response envelope unwrap with the bounded marker
|
|
2446
|
-
* recovery. The fast path is the plain `unwrapOperation` (a well-formed
|
|
2447
|
-
* envelope costs ZERO extra requests and returns the byte-identical
|
|
2448
|
-
* `{ id }` result). Only a typed `INVALID_RESPONSE` (a 2xx body that is
|
|
2449
|
-
* not the specced envelope / `{ id }` / `{ itemId }` alternative) with a
|
|
2450
|
-
* plan-pinned marker field AND `recoverIdFromMarker !== false` runs the
|
|
2451
|
-
* fallback — and it can only run on the APPLY path: a dry run returns the
|
|
2452
|
-
* pinned envelope BEFORE the mutating request, so the fallback never sees
|
|
2453
|
-
* a dry-run response (skipped entirely by construction).
|
|
2454
|
-
*/
|
|
2455
|
-
private unwrapCreateOperation;
|
|
2456
|
-
/**
|
|
2457
|
-
* Issue #13: the ONE bounded marker read on the resource's own query
|
|
2458
|
-
* surface (`POST <collection>/query`, MaxRecords 5 — a read: idempotent,
|
|
2459
|
-
* zero mutating wire; the fallback never issues anything else). Outcomes:
|
|
2460
|
-
* exactly ONE numeric match → the normal success result stamped
|
|
2461
|
-
* `idFrom: 'marker-recovery'` + the `shapeDrift` note; zero matches, more
|
|
2462
|
-
* than one, or a cap-tripped search (a full 5 + a next cursor) → the
|
|
2463
|
-
* existing `INVALID_RESPONSE` with the drift detail + the failed search
|
|
2464
|
-
* (candidate ids listed — never a guessed id).
|
|
2465
|
-
*/
|
|
2466
|
-
private recoverCreatedIdByMarker;
|
|
2467
|
-
/** `PUT /V1.0/<E>/{id}` (the vendor tolerates PATCH at the same path) → `{ id }`.
|
|
2468
|
-
* For collection-only-writable resources (`collectionUpdate`, D1) the
|
|
2469
|
-
* vendor spec defines no put/patch on the item path (it is GET-only; the
|
|
2470
|
-
* item-path PUT 405s), so the confirmed update hits the COLLECTION
|
|
2471
|
-
* `PUT /V1.0/<E>` with the record id merged into the mutation body — the
|
|
2472
|
-
* vendor keys the record by the id in the body (the same convention the
|
|
2473
|
-
* parent-scoped `updateScopedRaw` PATCH uses).
|
|
2474
|
-
*
|
|
2475
|
-
* V2 partial-update merge: the vendor's collection PUT validates the FULL
|
|
2476
|
-
* model (a partial body 500s 'Missing Required Field'), so a
|
|
2477
|
-
* collectionUpdate update MERGES the caller's partial body into the
|
|
2478
|
-
* record's current full model before the PUT: ONE fresh GET serves both
|
|
2479
|
-
* the merge source and the stale-object guard's read (a `lastModifiedDate`
|
|
2480
|
-
* mismatch throws STALE_OBJECT before the PUT; the guard semantics are
|
|
2481
|
-
* unchanged — it is a no-op where the model lacks the field or the caller
|
|
2482
|
-
* supplied no token). `opts.raw === true` sends the caller body as-is
|
|
2483
|
-
* instead (the pre-merge wire; the guard keeps its own verification read
|
|
2484
|
-
* when a token is supplied).
|
|
2485
|
-
*
|
|
2486
|
-
* Issue #34: with `update.putFallback: true` (OFF by default), a TYPED
|
|
2487
|
-
* 404 on the pinned route retries ONCE as `PUT /{Entity}/{id}` where the
|
|
2488
|
-
* gate holds — never a collectionUpdate route (the spec defines no
|
|
2489
|
-
* item-path update there), never a `raw: true` update, never a non-404
|
|
2490
|
-
* fault; the retry body runs the same fresh-read merge (see
|
|
2491
|
-
* `putFallbackMergedBody`), so the fallback is never a null-clearing
|
|
2492
|
-
* partial. A declined gate (a collectionUpdate route 404s, or the retry
|
|
2493
|
-
* itself 404s) throws the self-explaining typed error (the route tried,
|
|
2494
|
-
* the status, the opt-in; `details.putFallback`). */
|
|
2495
|
-
/**
|
|
2496
|
-
* Issue #34 gate: the fallback may fire only while `update.putFallback`
|
|
2497
|
-
* is ON and the pinned update route answered a TYPED 404 (a transport
|
|
2498
|
-
* `NotFoundError` with `httpStatus: 404`) — never a 400/405/422/5xx, and
|
|
2499
|
-
* never a 2xx shape fault (those keep today's typed error byte-identical).
|
|
2500
|
-
*/
|
|
2501
|
-
private putFallbackEligible;
|
|
2502
|
-
/**
|
|
2503
|
-
* Issue #34: the fallback retry body — the caller's (normalised) fields
|
|
2504
|
-
* merged onto a FRESH unredacted read of the current record (the same
|
|
2505
|
-
* merge the collection-update path performs; the read is the live record,
|
|
2506
|
-
* never cached). A target miss on the merge read surfaces with the pinned
|
|
2507
|
-
* update-target reason (the issue-#14 convention) — the recovery has
|
|
2508
|
-
* nothing to merge onto, and no retry is issued.
|
|
2509
|
-
*/
|
|
2510
|
-
private putFallbackMergedBody;
|
|
2511
|
-
/**
|
|
2512
|
-
* Issue #34: the self-explaining typed error a DECLINED gate throws. The
|
|
2513
|
-
* original transport error keeps its identity (class / code / httpStatus);
|
|
2514
|
-
* the message names the route tried, the status and the opt-in, and the
|
|
2515
|
-
* structured detail rides under `details.putFallback`
|
|
2516
|
-
* (`{ route, status, retried, optIn }`).
|
|
2517
|
-
*/
|
|
2518
|
-
private putFallbackDeclined;
|
|
2519
|
-
protected updateGlobal(id: Identifier, data: TUpdate, opts?: MutationOpts): Promise<OperationResult>;
|
|
2520
|
-
/** `DELETE /V1.0/<E>/{id}` → `{ id }` (OperationResultModel). A blank 2xx
|
|
2521
|
-
* (204 / empty body) is a valid vendor delete answer — synthesize the
|
|
2522
|
-
* result from the path id (issue #25: the transport returns undefined
|
|
2523
|
-
* for it; a non-blank wrong shape still throws via unwrapOperation). */
|
|
2524
|
-
protected deleteGlobal(id: Identifier, opts?: MutationOpts): Promise<OperationResult>;
|
|
2525
1956
|
protected scopedCollectionPath(parentId: Identifier): string;
|
|
2526
1957
|
protected scopedItemPath(parentId: Identifier, id: Identifier): string;
|
|
2527
|
-
/** Parent-scoped create: `POST .../{parentId}/<Child>` (issue #13: a drifted 2xx runs the bounded marker recovery where the plan pins a marker field). */
|
|
2528
|
-
protected createScopedRaw(parentId: Identifier, data: TCreate, opts?: CreateOpts): Promise<OperationResult>;
|
|
2529
|
-
/** Parent-scoped update: `PATCH .../{parentId}/<Child>` — the COLLECTION.
|
|
2530
|
-
* Swagger documents put+patch on the scoped collection and has NO put/patch on
|
|
2531
|
-
* the item path anywhere in the spec; the node strips the id from the path and
|
|
2532
|
-
* PATCHes the collection, and the vendor keys the record by the id in the body. */
|
|
2533
|
-
protected updateScopedRaw(parentId: Identifier, id: Identifier, data: TUpdate, opts?: MutationOpts): Promise<OperationResult>;
|
|
2534
|
-
/** Parent-scoped delete: `DELETE .../{parentId}/<Child>/{id}` → `{ id }`
|
|
2535
|
-
* (a blank 2xx synthesizes `{ id }` from the path id — issue #25). */
|
|
2536
|
-
protected deleteScopedRaw(parentId: Identifier, id: Identifier, opts?: MutationOpts): Promise<OperationResult>;
|
|
2537
|
-
/**
|
|
2538
|
-
* Attachment delete: the vendor returns the deleted attachment MODEL, not
|
|
2539
|
-
* OperationResultModel (G1 envelope.md) — pass it through typed.
|
|
2540
|
-
*/
|
|
2541
|
-
protected deleteScopedModel(parentId: Identifier, id: Identifier, opts?: MutationOpts): Promise<T>;
|
|
2542
1958
|
/** `GET /V1.0/<E>/entityInformation` → `{ info }` unwrapped.
|
|
2543
1959
|
* Goes through the field cache when it is present (issue #80:
|
|
2544
1960
|
* default-on; `fieldCache: false` = the bit-for-bit uncached wire
|
|
@@ -2563,7 +1979,6 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
|
|
|
2563
1979
|
* entity's entries via the fieldCache's `invalidate` first — the trio
|
|
2564
1980
|
* keeps its no-arg surface (the registry/MCP arity pin). */
|
|
2565
1981
|
getUdfInfo(): Promise<Field[]>;
|
|
2566
|
-
private unwrapFields;
|
|
2567
1982
|
/**
|
|
2568
1983
|
* Bounded read against another entity's global `query` endpoint (special-op
|
|
2569
1984
|
* compositions only; the primary surface stays the resource's own ops).
|
|
@@ -2572,69 +1987,6 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
|
|
|
2572
1987
|
maxRecords?: number;
|
|
2573
1988
|
includeFields?: string[];
|
|
2574
1989
|
}): Promise<TItem[]>;
|
|
2575
|
-
/**
|
|
2576
|
-
* `createIfNotExists` — the node's dedup composition: query by the caller's
|
|
2577
|
-
* dedup fields (eq conditions, and-wrapped); a match short-circuits the
|
|
2578
|
-
* create and returns the existing record; otherwise create. With no
|
|
2579
|
-
* `dedupFields` this is a plain create (`created: true`).
|
|
2580
|
-
*
|
|
2581
|
-
* Top-level resources: `createIfNotExists(data, opts)` — the create POSTs
|
|
2582
|
-
* the global collection. Parent-scoped resources:
|
|
2583
|
-
* `createIfNotExists(parentId, data, opts)` — parentId is REQUIRED. Their
|
|
2584
|
-
* global collection has no POST in the swagger; the only documented create
|
|
2585
|
-
* is the scoped collection (`POST .../{parentId}/<Child>`), so a missing
|
|
2586
|
-
* parentId throws a config error instead of issuing a wrong-path request.
|
|
2587
|
-
* The dedup lookup stays a GLOBAL query (the entity carries the parent id
|
|
2588
|
-
* field): the filter is the dedup fields + `parentField eq parentId`, which
|
|
2589
|
-
* narrows the match set to the parent.
|
|
2590
|
-
*
|
|
2591
|
-
* (The node additionally verifies the parent exists for configuration items;
|
|
2592
|
-
* the SDK omits that preflight — a missing parent surfaces as the vendor's
|
|
2593
|
-
* 4xx on the create.)
|
|
2594
|
-
*/
|
|
2595
|
-
createIfNotExists(data: TCreate, opts?: {
|
|
2596
|
-
dedupFields?: string[];
|
|
2597
|
-
dryRun?: boolean;
|
|
2598
|
-
}): Promise<CreateIfNotExistsResult<T> | DryRunResult<TCreate>>;
|
|
2599
|
-
createIfNotExists(parentId: Identifier, data: TCreate, opts?: {
|
|
2600
|
-
dedupFields?: string[];
|
|
2601
|
-
dryRun?: boolean;
|
|
2602
|
-
}): Promise<CreateIfNotExistsResult<T> | DryRunResult<TCreate>>;
|
|
2603
|
-
/**
|
|
2604
|
-
* Stale-object guard (section 19.3): compare the plan's `staleCheck` field
|
|
2605
|
-
* (vendor `lastModifiedDate`) against the caller-observed value. Mismatch
|
|
2606
|
-
* throws `STALE_OBJECT`. Returns true when a comparison was actually made
|
|
2607
|
-
* (the resource model carries the field AND the vendor answered it AND the
|
|
2608
|
-
* caller supplied an expected value); false when the check is unavailable.
|
|
2609
|
-
*/
|
|
2610
|
-
protected staleObjectCheck(current: Record<string, unknown>, opts: MutationOpts, operation: string): boolean;
|
|
2611
|
-
/**
|
|
2612
|
-
* Stale-object guard for a REAL mutation: the caller supplied an expected
|
|
2613
|
-
* `lastModifiedDate` and the model carries the field → fetch the current
|
|
2614
|
-
* record and compare before the mutating request (mismatch throws
|
|
2615
|
-
* STALE_OBJECT; a vanished record propagates the vendor's NotFoundError).
|
|
2616
|
-
*/
|
|
2617
|
-
protected guardStaleBeforeMutation(id: Identifier, opts: MutationOpts, operation: string, parentId?: Identifier): Promise<void>;
|
|
2618
|
-
/**
|
|
2619
|
-
* `create` dry-run: input validation + parent verification (scoped
|
|
2620
|
-
* resources) + the pinned envelope. NO request is issued (scoped parent
|
|
2621
|
-
* verification is a read). Duplicate detection has no reliable lookup for
|
|
2622
|
-
* a plain create (that is `createIfNotExists`), so it is not claimed.
|
|
2623
|
-
*/
|
|
2624
|
-
protected runCreateDryRun<TData extends object>(data: TData, parentId?: Identifier): Promise<DryRunResult<TData>>;
|
|
2625
|
-
/**
|
|
2626
|
-
* `update` dry-run: input validation + current-record fetch (a missing
|
|
2627
|
-
* record carries `warnings` and no `diff` — pinned), the stale-object
|
|
2628
|
-
* check (mismatch throws STALE_OBJECT) and the best-effort `diff`. NO
|
|
2629
|
-
* mutating request is issued.
|
|
2630
|
-
*/
|
|
2631
|
-
protected runUpdateDryRun<TData extends object>(id: Identifier, data: TData, opts?: MutationOpts, parentId?: Identifier): Promise<DryRunResult<TData>>;
|
|
2632
|
-
/**
|
|
2633
|
-
* `delete` dry-run: current-record verification + the stale-object check +
|
|
2634
|
-
* the pinned envelope (no diff — a delete has no before/after fields). NO
|
|
2635
|
-
* mutating request is issued.
|
|
2636
|
-
*/
|
|
2637
|
-
protected runDeleteDryRun(id: Identifier, opts?: MutationOpts, parentId?: Identifier): Promise<DryRunResult<Record<string, unknown>>>;
|
|
2638
1990
|
/**
|
|
2639
1991
|
* Attachment `download`: `GET .../{parentId}/<Child>/{id}/data` → Buffer
|
|
2640
1992
|
* (node-proven `/data` path, quirk #9; the metadata GET is `get`).
|
|
@@ -2713,8 +2065,6 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
|
|
|
2713
2065
|
searchWithDetail(query: string, opts?: {
|
|
2714
2066
|
limit?: number;
|
|
2715
2067
|
}): Promise<SearchWithDetail<T>>;
|
|
2716
|
-
/** The shared miss explanation for `resolveWithDetail` / `searchWithDetail`. */
|
|
2717
|
-
private missDetail;
|
|
2718
2068
|
/** The plain value projection of `resolveDetailed` (the `resolve` floor). */
|
|
2719
2069
|
protected resolveBase(identifier: number | string): Promise<T | null>;
|
|
2720
2070
|
/** The items of one page of the resource's own `/query`. */
|
|
@@ -2746,6 +2096,128 @@ declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Recor
|
|
|
2746
2096
|
}): Promise<T[]>;
|
|
2747
2097
|
}
|
|
2748
2098
|
|
|
2099
|
+
/** Mutation layer of `BaseResource` (issue #165): create/update/delete, PUT fallback, create-recovery, dry-run. */
|
|
2100
|
+
declare abstract class MutationBase<T = Record<string, unknown>, TCreate = Record<string, unknown>, TUpdate = Record<string, unknown>> extends MetaBase<T> {
|
|
2101
|
+
/** Normalise a mutation body: `id` OR `itemId` → `id`; UDF map → UDF array (UDF-capable only). */
|
|
2102
|
+
protected normalizeMutationBody(data: Record<string, unknown>): Record<string, unknown>;
|
|
2103
|
+
/** `POST /V1.0/<E>` → `{ id }` (issue #13: a drifted 2xx runs the bounded marker recovery where the plan pins a marker field). */
|
|
2104
|
+
protected createGlobal(data: TCreate, opts?: CreateOpts): Promise<OperationResult>;
|
|
2105
|
+
protected updateGlobal(id: Identifier, data: TUpdate, opts?: MutationOpts): Promise<OperationResult>;
|
|
2106
|
+
/** `DELETE /V1.0/<E>/{id}` → `{ id }` (OperationResultModel). A blank 2xx
|
|
2107
|
+
* (204 / empty body) is a valid vendor delete answer — synthesize the
|
|
2108
|
+
* result from the path id (issue #25: the transport returns undefined
|
|
2109
|
+
* for it; a non-blank wrong shape still throws via unwrapOperation). */
|
|
2110
|
+
protected deleteGlobal(id: Identifier, opts?: MutationOpts): Promise<OperationResult>;
|
|
2111
|
+
/** Parent-scoped create: `POST .../{parentId}/<Child>` (issue #13: a drifted 2xx runs the bounded marker recovery where the plan pins a marker field). */
|
|
2112
|
+
protected createScopedRaw(parentId: Identifier, data: TCreate, opts?: CreateOpts): Promise<OperationResult>;
|
|
2113
|
+
/** Parent-scoped update: `PATCH .../{parentId}/<Child>` — the COLLECTION.
|
|
2114
|
+
* Swagger documents put+patch on the scoped collection and has NO put/patch on
|
|
2115
|
+
* the item path anywhere in the spec; the node strips the id from the path and
|
|
2116
|
+
* PATCHes the collection, and the vendor keys the record by the id in the body. */
|
|
2117
|
+
protected updateScopedRaw(parentId: Identifier, id: Identifier, data: TUpdate, opts?: MutationOpts): Promise<OperationResult>;
|
|
2118
|
+
/** Parent-scoped delete: `DELETE .../{parentId}/<Child>/{id}` → `{ id }`
|
|
2119
|
+
* (a blank 2xx synthesizes `{ id }` from the path id — issue #25). */
|
|
2120
|
+
protected deleteScopedRaw(parentId: Identifier, id: Identifier, opts?: MutationOpts): Promise<OperationResult>;
|
|
2121
|
+
/**
|
|
2122
|
+
* Attachment delete: the vendor returns the deleted attachment MODEL, not
|
|
2123
|
+
* OperationResultModel (G1 envelope.md) — pass it through typed.
|
|
2124
|
+
*/
|
|
2125
|
+
protected deleteScopedModel(parentId: Identifier, id: Identifier, opts?: MutationOpts): Promise<T>;
|
|
2126
|
+
/**
|
|
2127
|
+
* `createIfNotExists` — the node's dedup composition: query by the caller's
|
|
2128
|
+
* dedup fields (eq conditions, and-wrapped); a match short-circuits the
|
|
2129
|
+
* create and returns the existing record; otherwise create. With no
|
|
2130
|
+
* `dedupFields` this is a plain create (`created: true`).
|
|
2131
|
+
*
|
|
2132
|
+
* Top-level resources: `createIfNotExists(data, opts)` — the create POSTs
|
|
2133
|
+
* the global collection. Parent-scoped resources:
|
|
2134
|
+
* `createIfNotExists(parentId, data, opts)` — parentId is REQUIRED. Their
|
|
2135
|
+
* global collection has no POST in the swagger; the only documented create
|
|
2136
|
+
* is the scoped collection (`POST .../{parentId}/<Child>`), so a missing
|
|
2137
|
+
* parentId throws a config error instead of issuing a wrong-path request.
|
|
2138
|
+
* The dedup lookup stays a GLOBAL query (the entity carries the parent id
|
|
2139
|
+
* field): the filter is the dedup fields + `parentField eq parentId`, which
|
|
2140
|
+
* narrows the match set to the parent.
|
|
2141
|
+
*
|
|
2142
|
+
* (The node additionally verifies the parent exists for configuration items;
|
|
2143
|
+
* the SDK omits that preflight — a missing parent surfaces as the vendor's
|
|
2144
|
+
* 4xx on the create.)
|
|
2145
|
+
*/
|
|
2146
|
+
createIfNotExists(data: TCreate, opts?: {
|
|
2147
|
+
dedupFields?: string[];
|
|
2148
|
+
dryRun?: boolean;
|
|
2149
|
+
}): Promise<CreateIfNotExistsResult<T> | DryRunResult<TCreate>>;
|
|
2150
|
+
createIfNotExists(parentId: Identifier, data: TCreate, opts?: {
|
|
2151
|
+
dedupFields?: string[];
|
|
2152
|
+
dryRun?: boolean;
|
|
2153
|
+
}): Promise<CreateIfNotExistsResult<T> | DryRunResult<TCreate>>;
|
|
2154
|
+
/**
|
|
2155
|
+
* Stale-object guard (section 19.3): compare the plan's `staleCheck` field
|
|
2156
|
+
* (vendor `lastModifiedDate`) against the caller-observed value. Mismatch
|
|
2157
|
+
* throws `STALE_OBJECT`. Returns true when a comparison was actually made
|
|
2158
|
+
* (the resource model carries the field AND the vendor answered it AND the
|
|
2159
|
+
* caller supplied an expected value); false when the check is unavailable.
|
|
2160
|
+
*/
|
|
2161
|
+
protected staleObjectCheck(current: Record<string, unknown>, opts: MutationOpts, operation: string): boolean;
|
|
2162
|
+
/**
|
|
2163
|
+
* Stale-object guard for a REAL mutation: the caller supplied an expected
|
|
2164
|
+
* `lastModifiedDate` and the model carries the field → fetch the current
|
|
2165
|
+
* record and compare before the mutating request (mismatch throws
|
|
2166
|
+
* STALE_OBJECT; a vanished record propagates the vendor's NotFoundError).
|
|
2167
|
+
*/
|
|
2168
|
+
protected guardStaleBeforeMutation(id: Identifier, opts: MutationOpts, operation: string, parentId?: Identifier): Promise<void>;
|
|
2169
|
+
/**
|
|
2170
|
+
* `create` dry-run: input validation + parent verification (scoped
|
|
2171
|
+
* resources) + the pinned envelope. NO request is issued (scoped parent
|
|
2172
|
+
* verification is a read). Duplicate detection has no reliable lookup for
|
|
2173
|
+
* a plain create (that is `createIfNotExists`), so it is not claimed.
|
|
2174
|
+
*/
|
|
2175
|
+
protected runCreateDryRun<TData extends object>(data: TData, parentId?: Identifier): Promise<DryRunResult<TData>>;
|
|
2176
|
+
/**
|
|
2177
|
+
* `update` dry-run: input validation + current-record fetch (a missing
|
|
2178
|
+
* record carries `warnings` and no `diff` — pinned), the stale-object
|
|
2179
|
+
* check (mismatch throws STALE_OBJECT) and the best-effort `diff`. NO
|
|
2180
|
+
* mutating request is issued.
|
|
2181
|
+
*/
|
|
2182
|
+
protected runUpdateDryRun<TData extends object>(id: Identifier, data: TData, opts?: MutationOpts, parentId?: Identifier): Promise<DryRunResult<TData>>;
|
|
2183
|
+
/**
|
|
2184
|
+
* `delete` dry-run: current-record verification + the stale-object check +
|
|
2185
|
+
* the pinned envelope (no diff — a delete has no before/after fields). NO
|
|
2186
|
+
* mutating request is issued.
|
|
2187
|
+
*/
|
|
2188
|
+
protected runDeleteDryRun(id: Identifier, opts?: MutationOpts, parentId?: Identifier): Promise<DryRunResult<Record<string, unknown>>>;
|
|
2189
|
+
}
|
|
2190
|
+
|
|
2191
|
+
/**
|
|
2192
|
+
* BaseResource — shared scaffolding for every resource client
|
|
2193
|
+
* (ARCHITECTURE section 11).
|
|
2194
|
+
*
|
|
2195
|
+
* Concrete resources extend `BaseResource` and expose narrowly-typed public
|
|
2196
|
+
* methods that delegate to the protected primitives here. The base stays
|
|
2197
|
+
* generic about filters (the G3 `query.ts` builder is the single filter
|
|
2198
|
+
* surface; resources pass user filters through, never invent per-resource
|
|
2199
|
+
* filter sets).
|
|
2200
|
+
*
|
|
2201
|
+
* Wire contract (pinned, node-proven; the continuation body live-verified
|
|
2202
|
+
* 2026-10-19 — issue #118):
|
|
2203
|
+
* - page 1: `POST /V1.0/<E>/query` with the `QueryModel` body
|
|
2204
|
+
* (`{ MaxRecords, IncludeFields?, filter }` — G3 `buildQueryRequest`).
|
|
2205
|
+
* - subsequent pages: the vendor returns an ABSOLUTE `pageDetails.nextPageUrl`
|
|
2206
|
+
* cursor; the walk POSTs the SAME body (`buildQueryBody` — MaxRecords,
|
|
2207
|
+
* IncludeFields, the preserved filter) to the cursor
|
|
2208
|
+
* (same-origin: stripped of the client base; cross-origin: re-based onto the
|
|
2209
|
+
* client base URL, mirroring the node's custom-zone behaviour) until
|
|
2210
|
+
* `nextPageUrl` is null. The 1000-page guard (`MAX_PAGES`) is enforced by
|
|
2211
|
+
* the G3 walker (`PaginationLimitError` before the 1001st fetch).
|
|
2212
|
+
* - `item: null` on a single GET is the vendor not-found signal →
|
|
2213
|
+
* `NotFoundError` (G3 `unwrapItem`).
|
|
2214
|
+
* - create/update/delete normalise `OperationResultModel { itemId }` (or
|
|
2215
|
+
* `{ id }`) to `{ id }`; attachment deletes return the deleted model.
|
|
2216
|
+
*/
|
|
2217
|
+
|
|
2218
|
+
declare abstract class BaseResource<T = Record<string, unknown>, TCreate = Record<string, unknown>, TUpdate = Record<string, unknown>> extends MutationBase<T, TCreate, TUpdate> {
|
|
2219
|
+
}
|
|
2220
|
+
|
|
2749
2221
|
/**
|
|
2750
2222
|
* AppointmentsResource — Appointment resource (G5 batch B, plan key 'appointments').
|
|
2751
2223
|
* GENERATED by scripts/generate-batch.mjs from capabilities.plan.json + api-docs.json.
|
|
@@ -3087,17 +2559,6 @@ declare class ClassificationIconsResource extends BaseResource<ClassificationIco
|
|
|
3087
2559
|
}): Promise<ClassificationIconSummary[]>;
|
|
3088
2560
|
}
|
|
3089
2561
|
|
|
3090
|
-
/**
|
|
3091
|
-
* Companies special ops — node-parity search compositions (G4 batch A).
|
|
3092
|
-
*
|
|
3093
|
-
* Node parity (n8n autotask nodes `searchCompanyByDomain` / identity search):
|
|
3094
|
-
* the vendor has no free-text or domain search — domain lookups are
|
|
3095
|
-
* `contains` filters on `webAddress`, with a contact-email fallback. The
|
|
3096
|
-
* node's `searchType: 'eq'` request is mapped to `contains` (there is no
|
|
3097
|
-
* exact-domain operator that fits a substring of a URL); the mapping is
|
|
3098
|
-
* pinned, not a preference.
|
|
3099
|
-
*/
|
|
3100
|
-
|
|
3101
2562
|
interface CompaniesDomainSearchOptions {
|
|
3102
2563
|
/** Node-parity knob: `'eq'` is mapped to `contains` (vendor has no exact
|
|
3103
2564
|
* domain operator for URL fields). Both values behave identically. */
|
|
@@ -3105,6 +2566,7 @@ interface CompaniesDomainSearchOptions {
|
|
|
3105
2566
|
/** Max companies to return (default 25, clamped to 1..500). */
|
|
3106
2567
|
limit?: number;
|
|
3107
2568
|
}
|
|
2569
|
+
|
|
3108
2570
|
interface CompanySearchOptions {
|
|
3109
2571
|
/** Max companies to return (default 25, clamped to 1..500). */
|
|
3110
2572
|
limit?: number;
|
|
@@ -3126,6 +2588,7 @@ interface CompanyFamily {
|
|
|
3126
2588
|
interface CompanyFamilyRow extends Company {
|
|
3127
2589
|
family?: CompanyFamily;
|
|
3128
2590
|
}
|
|
2591
|
+
|
|
3129
2592
|
interface CompaniesUpsertByNameParams {
|
|
3130
2593
|
/** The company phone (live-required on the ww29 create). */
|
|
3131
2594
|
phone: string;
|
|
@@ -3162,8 +2625,16 @@ interface CompaniesUpsertByNameResult {
|
|
|
3162
2625
|
/** The vendor side effects reported on the created result (the V5 auto-location). */
|
|
3163
2626
|
sideEffects?: string[];
|
|
3164
2627
|
}
|
|
2628
|
+
|
|
2629
|
+
/** The list parts that accept a per-part field projection (issue #200). `company` is the single get and is not projectable. */
|
|
2630
|
+
declare const FULL_PROFILE_PROJECTABLE_PARTS: readonly ["locations", "contacts", "notes", "projects", "openTickets"];
|
|
2631
|
+
type CompanyFullProfilePartName = (typeof FULL_PROFILE_PROJECTABLE_PARTS)[number];
|
|
3165
2632
|
/** Options for `fullProfile` (all optional; the pinned defaults). */
|
|
3166
2633
|
interface CompanyFullProfileOptions {
|
|
2634
|
+
/** Max location records (default 50, 1-500). */
|
|
2635
|
+
locationLimit?: number;
|
|
2636
|
+
/** Per-part field projection (issue #200): keys are part names (`locations`, `contacts`, `notes`, `projects`, `openTickets`), values non-empty lists of exact vendor field names. A listed part serves ONLY those fields (pushed to the wire as IncludeFields, then picked client-side); an absent part keeps the full model. Unknown part key or field name → typed CONFIG_ERROR before any request. With `names: true`, name siblings appear only for the id fields you kept. */
|
|
2637
|
+
fields?: Partial<Record<CompanyFullProfilePartName, string[]>>;
|
|
3167
2638
|
/** Max contact records (default 50). */
|
|
3168
2639
|
contactLimit?: number;
|
|
3169
2640
|
/** Max note records (default 50). */
|
|
@@ -3225,6 +2696,7 @@ interface CompanyFullProfile {
|
|
|
3225
2696
|
projects: 'ok';
|
|
3226
2697
|
};
|
|
3227
2698
|
}
|
|
2699
|
+
|
|
3228
2700
|
/** The closed `source` set for `companies.unbilledWork`. */
|
|
3229
2701
|
type UnbilledWorkSource = 'posted_uninvoiced' | 'invoice' | 'date_range' | 'tickets';
|
|
3230
2702
|
/** Options for `unbilledWork` (closed bag; the pinned defaults). */
|
|
@@ -3247,7 +2719,7 @@ interface UnbilledWorkOptions {
|
|
|
3247
2719
|
noteChars?: number;
|
|
3248
2720
|
/** The rollup mode (default `'ticket'` — per-ticket rows; `'entry'` — the capped per-entry list). */
|
|
3249
2721
|
rollup?: 'ticket' | 'entry';
|
|
3250
|
-
/** The per-part record cap (default
|
|
2722
|
+
/** The per-part record cap (default 25, clamped 1..500 — the fullProfile house clamp). */
|
|
3251
2723
|
limit?: number;
|
|
3252
2724
|
}
|
|
3253
2725
|
/** One capped part (the single-page bounded read's shape + status). */
|
|
@@ -5252,7 +4724,6 @@ declare class ContractServiceUnitsResource extends BaseResource<ContractServiceU
|
|
|
5252
4724
|
}): Promise<ContractServiceUnitSummary | null>;
|
|
5253
4725
|
}
|
|
5254
4726
|
|
|
5255
|
-
/** The closed labour-cost-method set (the ladder rung a row STARTS from). */
|
|
5256
4727
|
type ProfitabilityLabourCostMethod = 'billing_item_our_cost' | 'contract_role_cost' | 'resource_internal_cost' | 'provided';
|
|
5257
4728
|
/** A ladder rung that actually carried rows (plus 'missing'). */
|
|
5258
4729
|
type ProfitRateSource = 'billing_item.ourCost' | 'contract_role_costs.rate' | 'resource.internalCost' | 'provided' | 'missing';
|
|
@@ -8186,6 +7657,40 @@ declare class TicketChangeRequestApprovalsResource extends BaseResource<TicketCh
|
|
|
8186
7657
|
}): Promise<TicketChangeRequestApprovalSummary | null>;
|
|
8187
7658
|
}
|
|
8188
7659
|
|
|
7660
|
+
type MoveStatus = 'moved' | 'moved_source_absent' | 'moved_manual_delete';
|
|
7661
|
+
interface MoveManualAction {
|
|
7662
|
+
/** What the person must do in the Autotask UI. */
|
|
7663
|
+
action: 'delete_source';
|
|
7664
|
+
/** A clickable deep link (the entity when ExecuteCommand supports it, else its parent ticket); null when no UI host is derivable. */
|
|
7665
|
+
uiLink: string | null;
|
|
7666
|
+
reason: string;
|
|
7667
|
+
}
|
|
7668
|
+
interface MoveResult {
|
|
7669
|
+
status: MoveStatus;
|
|
7670
|
+
sourceId: number;
|
|
7671
|
+
newId: number;
|
|
7672
|
+
correlationId: string;
|
|
7673
|
+
/** The full source record as read before the delete — the caller persists it (the SDK stores nothing). */
|
|
7674
|
+
snapshot: Record<string, unknown>;
|
|
7675
|
+
/** Soft facts (not refusals): companyChanged, contractChanged, ... */
|
|
7676
|
+
facts: Record<string, unknown>;
|
|
7677
|
+
manualAction?: MoveManualAction;
|
|
7678
|
+
}
|
|
7679
|
+
interface MoveToTicketOptions {
|
|
7680
|
+
/** Dry-run: run the GET-only preview and return the pinned envelope (the default at the governor). */
|
|
7681
|
+
dryRun?: boolean;
|
|
7682
|
+
/** The caller's snapshot of the source's lastModified value; a mismatch throws STALE_OBJECT before any write. */
|
|
7683
|
+
lastModifiedDate?: string;
|
|
7684
|
+
/** May LOWER the source-age limit (default 14 days); never raised. */
|
|
7685
|
+
maxSourceAgeDays?: number;
|
|
7686
|
+
/** Per-call retry budget for the READS (every write is sent once regardless). */
|
|
7687
|
+
maxRetries?: number;
|
|
7688
|
+
}
|
|
7689
|
+
|
|
7690
|
+
/** ticket_charges.moveToTicket (issue #197): create -> verify -> delete on the shared move engine. */
|
|
7691
|
+
type TicketChargesMoveToTicketOptions = MoveToTicketOptions;
|
|
7692
|
+
type TicketChargesMoveToTicketResult = MoveResult;
|
|
7693
|
+
|
|
8189
7694
|
/**
|
|
8190
7695
|
* TicketChargesResource — TicketCharge resource (G4 batch A, plan key 'ticket_charges').
|
|
8191
7696
|
* GENERATED by scripts/generate-batch.mjs from capabilities.plan.json + api-docs.json.
|
|
@@ -8233,6 +7738,8 @@ declare class TicketChargesResource extends BaseResource<TicketCharge, TicketCha
|
|
|
8233
7738
|
search(query: string, opts?: {
|
|
8234
7739
|
limit?: number;
|
|
8235
7740
|
}): Promise<TicketChargeSummary[]>;
|
|
7741
|
+
/** Node-parity special op (hand-written in src/resources/special/ticket_charges.ts). */
|
|
7742
|
+
moveToTicket(sourceId: Identifier, toTicketId: Identifier, opts?: TicketChargesMoveToTicketOptions): Promise<TicketChargesMoveToTicketResult | DryRunResult<Record<string, unknown>>>;
|
|
8236
7743
|
}
|
|
8237
7744
|
|
|
8238
7745
|
/**
|
|
@@ -8522,13 +8029,19 @@ declare class TicketSecondaryResourcesResource extends BaseResource<TicketSecond
|
|
|
8522
8029
|
}
|
|
8523
8030
|
|
|
8524
8031
|
/**
|
|
8525
|
-
*
|
|
8526
|
-
*
|
|
8527
|
-
*
|
|
8528
|
-
*
|
|
8529
|
-
* chronological timeline (notes + time entries + optional histories). Each
|
|
8530
|
-
* composes bounded vendor queries; field names are pinned from api-docs.json.
|
|
8032
|
+
* One route fact on a composite child part that the default global `/query`
|
|
8033
|
+
* route did not serve (issue #35): the route attempted, the path it
|
|
8034
|
+
* attempted, and the HTTP status that failed it (null when the failure was
|
|
8035
|
+
* not an HTTP status — a shape or transport fault).
|
|
8531
8036
|
*/
|
|
8037
|
+
interface TicketChildRouteFact {
|
|
8038
|
+
/** The route that was attempted (the plan-declared scoped collection read is 'scoped'). */
|
|
8039
|
+
route: 'global' | 'scoped';
|
|
8040
|
+
/** The path the route attempted (e.g. '/V1.0/TicketNotes/query' or '/V1.0/Tickets/527119/Notes'). */
|
|
8041
|
+
path: string;
|
|
8042
|
+
/** The HTTP status that failed the route (null for a non-HTTP failure). */
|
|
8043
|
+
httpStatus: number | null;
|
|
8044
|
+
}
|
|
8532
8045
|
|
|
8533
8046
|
interface TicketSlaHealth {
|
|
8534
8047
|
ticketId: Identifier;
|
|
@@ -8610,20 +8123,7 @@ interface TicketTimeline {
|
|
|
8610
8123
|
histories?: 'ok' | 'ok-scoped' | 'miss';
|
|
8611
8124
|
};
|
|
8612
8125
|
}
|
|
8613
|
-
|
|
8614
|
-
* One route fact on a composite child part that the default global `/query`
|
|
8615
|
-
* route did not serve (issue #35): the route attempted, the path it
|
|
8616
|
-
* attempted, and the HTTP status that failed it (null when the failure was
|
|
8617
|
-
* not an HTTP status — a shape or transport fault).
|
|
8618
|
-
*/
|
|
8619
|
-
interface TicketChildRouteFact {
|
|
8620
|
-
/** The route that was attempted (the plan-declared scoped collection read is 'scoped'). */
|
|
8621
|
-
route: 'global' | 'scoped';
|
|
8622
|
-
/** The path the route attempted (e.g. '/V1.0/TicketNotes/query' or '/V1.0/Tickets/527119/Notes'). */
|
|
8623
|
-
path: string;
|
|
8624
|
-
/** The HTTP status that failed the route (null for a non-HTTP failure). */
|
|
8625
|
-
httpStatus: number | null;
|
|
8626
|
-
}
|
|
8126
|
+
|
|
8627
8127
|
interface OpenWithNoteAndAssignParams {
|
|
8628
8128
|
/** The company the ticket opens under (the vendor field companyID). */
|
|
8629
8129
|
companyID: number;
|
|
@@ -8695,6 +8195,7 @@ interface OpenWithNoteAndAssignResult {
|
|
|
8695
8195
|
note: string;
|
|
8696
8196
|
};
|
|
8697
8197
|
}
|
|
8198
|
+
|
|
8698
8199
|
interface TicketChangeStatusResult {
|
|
8699
8200
|
ticketId: Identifier;
|
|
8700
8201
|
previousStatus: number | null;
|
|
@@ -8712,6 +8213,7 @@ interface TicketChangeStatusNoChange {
|
|
|
8712
8213
|
status: number;
|
|
8713
8214
|
reason: 'NO_CHANGE';
|
|
8714
8215
|
}
|
|
8216
|
+
|
|
8715
8217
|
/** Options for `fullContext` (all optional; the pinned defaults). */
|
|
8716
8218
|
interface TicketFullContextOptions {
|
|
8717
8219
|
/** Max note records (default 50). */
|
|
@@ -8921,37 +8423,6 @@ declare class TicketWebhooksResource extends BaseResource<TicketWebhook, TicketW
|
|
|
8921
8423
|
}): Promise<TicketWebhookSummary[]>;
|
|
8922
8424
|
}
|
|
8923
8425
|
|
|
8924
|
-
/**
|
|
8925
|
-
* Time entry special ops — date windows + posting status (G5 batch B).
|
|
8926
|
-
*
|
|
8927
|
-
* Node parity (nodes/Autotask/resources/timeEntries/execute.ts): each window
|
|
8928
|
-
* is ONE bounded server-filtered query on `dateWorked` (gte/lte). The node
|
|
8929
|
-
* computes the bounds in the configured timezone; the SDK pins UTC (the API
|
|
8930
|
-
* is UTC — plan metadata) and the second-precision `YYYY-MM-DDTHH:mm:ssZ`
|
|
8931
|
-
* value format the node sends. Issue #66 (sub-ask 3) makes the zone
|
|
8932
|
-
* OPT-IN: `opts.tz` (an IANA zone) anchors the window's calendar day/period
|
|
8933
|
-
* in that zone — computed locally and converted to UTC for the wire —
|
|
8934
|
-
* while omitted `tz` keeps the UTC behaviour bit-for-bit (the node-parity
|
|
8935
|
-
* timezone behaviour is now available on demand).
|
|
8936
|
-
*
|
|
8937
|
-
* `getPosted`/`getUnposted` keep their names and their documented meaning
|
|
8938
|
-
* ("posted" / "not posted") and the wire is the specification's own
|
|
8939
|
-
* `postedDate` presence (correct-by-spec, the way every op follows the
|
|
8940
|
-
* vendored contract). W-D3 (campaign adjudication 2026-10-04, RE-VERIFIED
|
|
8941
|
-
* LIVE against ww29 on 2026-10-04 with a field-existence oracle): this
|
|
8942
|
-
* zone's TimeEntry entity exposes NO posted-state filter field — the vendor
|
|
8943
|
-
* rejects `postingStatus`, `postedDate` AND `status` with "Unable to find X
|
|
8944
|
-
* in the TimeEntry Entity" (only dateWorked / resourceID / ticketID /
|
|
8945
|
-
* taskID resolve as filter fields). On such a zone a 500 from these ops is
|
|
8946
|
-
* the KNOWN wall, not a transient fault — the typed pointer note rides the
|
|
8947
|
-
* error (plan.pointerNotes, gate clause 13): the working window read on
|
|
8948
|
-
* those zones is `postedWithin` (the dateWorked window, live-verified).
|
|
8949
|
-
* Zones that honour the published spec answer `postedDate` filters normally.
|
|
8950
|
-
* The old `postingStatus eq` wire was the plan's G4-era picklist claim —
|
|
8951
|
-
* SUPERSEDED. The node's heavier client-side BillingItems composition is out
|
|
8952
|
-
* of scope (plan row = server filter).
|
|
8953
|
-
*/
|
|
8954
|
-
|
|
8955
8426
|
/** The shared window opts (issue #66: the `DateWindowOptions` shape — `now`,
|
|
8956
8427
|
* `limit`, and the `tz` IANA-zone anchor; omitted `tz` = UTC, the current
|
|
8957
8428
|
* behaviour bit-for-bit) under its historical name. */
|
|
@@ -8991,6 +8462,7 @@ interface TimeEntriesPostedWindowResult {
|
|
|
8991
8462
|
/** True when the vendor reports more matching records than the bounded read returned (a live `pageDetails.nextPageUrl` cursor) — the posted/unposted counts then cover the returned rows ONLY (at most `limit`); re-query with a wider window or a narrowing filter to reconcile the totals. */
|
|
8992
8463
|
truncated: boolean;
|
|
8993
8464
|
}
|
|
8465
|
+
|
|
8994
8466
|
/**
|
|
8995
8467
|
* `createForResource` params. The typed linkage pins + the time window are
|
|
8996
8468
|
* first-class; anything else passes through as a vendor TimeEntry field
|
|
@@ -9053,6 +8525,10 @@ interface TimeEntriesCreateForResourceResult {
|
|
|
9053
8525
|
discoveryMerges: number;
|
|
9054
8526
|
}
|
|
9055
8527
|
|
|
8528
|
+
/** time_entries.moveToTicket (issue #197): create -> verify -> delete on the shared move engine. */
|
|
8529
|
+
type TimeEntriesMoveToTicketOptions = MoveToTicketOptions;
|
|
8530
|
+
type TimeEntriesMoveToTicketResult = MoveResult;
|
|
8531
|
+
|
|
9056
8532
|
/**
|
|
9057
8533
|
* TimeEntriesResource — TimeEntry resource (G5 batch B, plan key 'time_entries').
|
|
9058
8534
|
* GENERATED by scripts/generate-batch.mjs from capabilities.plan.json + api-docs.json.
|
|
@@ -9128,6 +8604,8 @@ declare class TimeEntriesResource extends BaseResource<TimeEntry, TimeEntryCreat
|
|
|
9128
8604
|
/** Node-parity special op (hand-written in src/resources/special/time_entries.ts). */
|
|
9129
8605
|
lastFullWeek(opts?: TimeEntriesWindowOptions): Promise<TimeEntry[]>;
|
|
9130
8606
|
/** Node-parity special op (hand-written in src/resources/special/time_entries.ts). */
|
|
8607
|
+
moveToTicket(sourceId: Identifier, toTicketId: Identifier, opts?: TimeEntriesMoveToTicketOptions): Promise<TimeEntriesMoveToTicketResult | DryRunResult<Record<string, unknown>>>;
|
|
8608
|
+
/** Node-parity special op (hand-written in src/resources/special/time_entries.ts). */
|
|
9131
8609
|
postedWithin(from: string, to: string, opts?: TimeEntriesPostedWindowOptions): Promise<TimeEntriesPostedWindowResult>;
|
|
9132
8610
|
/** Node-parity special op (hand-written in src/resources/special/time_entries.ts). */
|
|
9133
8611
|
today(opts?: TimeEntriesWindowOptions): Promise<TimeEntry[]>;
|
|
@@ -9465,4 +8943,4 @@ declare class AutotaskClient {
|
|
|
9465
8943
|
}): Promise<PromiseSettledResult<R>[]>;
|
|
9466
8944
|
}
|
|
9467
8945
|
|
|
9468
|
-
export { ConfigurationItemRelatedItemsResource as $, type AutotaskConfig as A, BadRequestError as B, CREDENTIAL_HEADER_NAMES as C, type ClassificationIconsResourceQueryParams as D, CompaniesResource as E, type CompaniesResourceQueryParams as F, CompanyAlertsResource as G, type CompanyAlertsResourceQueryParams as H, CompanyLocationsResource as I, type CompanyLocationsResourceQueryParams as J, CompanyNotesResource as K, type CompanyNotesResourceQueryParams as L, CompanySiteConfigurationsResource as M, type CompanySiteConfigurationsResourceQueryParams as N, CompanyWebhooksResource as O, type CompanyWebhooksResourceQueryParams as P, type ConfigProfile as Q, ConfigurationItemBillingProductAssociationsResource as R, type ConfigurationItemBillingProductAssociationsResourceQueryParams as S, ConfigurationItemCategoriesResource as T, type ConfigurationItemCategoriesResourceQueryParams as U, ConfigurationItemCategoryUdfAssociationsResource as V, type ConfigurationItemCategoryUdfAssociationsResourceQueryParams as W, ConfigurationItemDnsRecordsResource as X, type ConfigurationItemDnsRecordsResourceQueryParams as Y, ConfigurationItemNotesResource as Z, type ConfigurationItemNotesResourceQueryParams as _, AutotaskClient as a, type ContractsResourceQueryParams as a$, type ConfigurationItemRelatedItemsResourceQueryParams as a0, ConfigurationItemSslSubjectAlternativeNamesResource as a1, type ConfigurationItemSslSubjectAlternativeNamesResourceQueryParams as a2, ConfigurationItemTypesResource as a3, type ConfigurationItemTypesResourceQueryParams as a4, ConfigurationItemWebhooksResource as a5, type ConfigurationItemWebhooksResourceQueryParams as a6, ConfigurationItemsResource as a7, type ConfigurationItemsResourceQueryParams as a8, ConfirmationRequiredError as a9, type ContractExclusionSetsResourceQueryParams as aA, ContractMilestonesResource as aB, type ContractMilestonesResourceQueryParams as aC, ContractNotesResource as aD, type ContractNotesResourceQueryParams as aE, ContractRatesResource as aF, type ContractRatesResourceQueryParams as aG, ContractRetainersResource as aH, type ContractRetainersResourceQueryParams as aI, ContractRoleCostsResource as aJ, type ContractRoleCostsResourceQueryParams as aK, ContractServiceAdjustmentsResource as aL, type ContractServiceAdjustmentsResourceQueryParams as aM, ContractServiceBundleAdjustmentsResource as aN, type ContractServiceBundleAdjustmentsResourceQueryParams as aO, ContractServiceBundleUnitsResource as aP, type ContractServiceBundleUnitsResourceQueryParams as aQ, ContractServiceBundlesResource as aR, type ContractServiceBundlesResourceQueryParams as aS, ContractServiceUnitsResource as aT, type ContractServiceUnitsResourceQueryParams as aU, ContractServicesResource as aV, type ContractServicesResourceQueryParams as aW, ContractTicketPurchasesResource as aX, type ContractTicketPurchasesResourceQueryParams as aY, type ContractsProfitabilityResult as aZ, ContractsResource as a_, ConflictError as aa, ContactGroupContactsResource as ab, type ContactGroupContactsResourceQueryParams as ac, ContactGroupsResource as ad, type ContactGroupsResourceQueryParams as ae, ContactWebhooksResource as af, type ContactWebhooksResourceQueryParams as ag, ContactsResource as ah, type ContactsResourceQueryParams as ai, ContractBillingRulesResource as aj, type ContractBillingRulesResourceQueryParams as ak, ContractBlockHourFactorsResource as al, type ContractBlockHourFactorsResourceQueryParams as am, ContractBlocksResource as an, type ContractBlocksResourceQueryParams as ao, ContractChargesResource as ap, type ContractChargesResourceQueryParams as aq, ContractExclusionBillingCodesResource as ar, type ContractExclusionBillingCodesResourceQueryParams as as, ContractExclusionRolesResource as at, type ContractExclusionRolesResourceQueryParams as au, ContractExclusionSetExcludedRolesResource as av, type ContractExclusionSetExcludedRolesResourceQueryParams as aw, ContractExclusionSetExcludedWorkTypesResource as ax, type ContractExclusionSetExcludedWorkTypesResourceQueryParams as ay, ContractExclusionSetsResource as az, AGENT_PROFILE as b, NotificationHistoryResource as b$, type CooldownStore as b0, type CostRateResolution as b1, CountriesResource as b2, type CountriesResourceQueryParams as b3, type CredentialShapeExpectation as b4, DEFAULT_CIRCUIT_BREAKER_FAILURE_THRESHOLD as b5, DEFAULT_CIRCUIT_BREAKER_MAX_ENTRIES as b6, DEFAULT_CIRCUIT_BREAKER_OPEN_TIMEOUT_MS as b7, DEFAULT_CIRCUIT_BREAKER_SUCCESSES_TO_CLOSE as b8, DEFAULT_CIRCUIT_BREAKER_WINDOW_MS as b9, type ExpenseItemAttachmentsResourceQueryParams as bA, ExpenseItemsResource as bB, type ExpenseItemsResourceQueryParams as bC, ExpenseReportsResource as bD, type ExpenseReportsResourceQueryParams as bE, ForbiddenError as bF, HolidaySetsResource as bG, type HolidaySetsResourceQueryParams as bH, HolidaysResource as bI, type HolidaysResourceQueryParams as bJ, HostPolicyDeniedError as bK, HttpClient as bL, IDEMPOTENT_METHODS as bM, InMemoryCircuitBreakerStore as bN, InMemoryCooldownStore as bO, InventoryProductsResource as bP, type InventoryProductsResourceQueryParams as bQ, InvoicesResource as bR, type InvoicesResourceQueryParams as bS, type Logger as bT, MAINTENANCE_WINDOW_MAX_MS as bU, MAX_PAGES as bV, MAX_PAGE_SIZE as bW, MarkerUnsafeIdError as bX, ModulesResource as bY, NoopLogger as bZ, NotFoundError as b_, DEFAULT_COOLDOWN_DEFAULT_MS as ba, DEFAULT_COOLDOWN_MAX_ENTRIES as bb, DEFAULT_COOLDOWN_MAX_MS as bc, DEFAULT_FIELD_CACHE_TTL_MS as bd, DEFAULT_MAINTENANCE_MAX_WAIT_MS as be, DEFAULT_MAINTENANCE_POLL_MS as bf, DEFAULT_MAX_CONCURRENT as bg, DEFAULT_MAX_RESPONSE_BYTES as bh, DEFAULT_MAX_RETRIES as bi, DEFAULT_MAX_SCAN_PAGES as bj, DEFAULT_MAX_SCAN_RECORDS as bk, DEFAULT_PAGE_SIZE as bl, DEFAULT_READ_CACHE_TTL_MS as bm, DEFAULT_RESOURCE_NAME_CACHE_TTL_MS as bn, DEFAULT_TIMEOUT_MS as bo, DEFAULT_ZONE as bp, DeleteBoundaryError as bq, DepartmentsResource as br, type DepartmentsResourceQueryParams as bs, DomainRegistrarsResource as bt, type DomainRegistrarsResourceQueryParams as bu, EmptyResponseError as bv, EntityInformationResource as bw, type ErrorCategory as bx, type ErrorIdRef as by, ExpenseItemAttachmentsResource as bz, AppointmentsResource as c, ResourceTimeOffAdditionalResource as c$, type NotificationHistoryResourceQueryParams as c0, OpportunitiesResource as c1, type OpportunitiesResourceQueryParams as c2, OpportunityAttachmentsResource as c3, type OpportunityAttachmentsResourceQueryParams as c4, OpportunityCategoriesResource as c5, type OpportunityCategoriesResourceQueryParams as c6, type PageFetcher as c7, type PaginateOptions as c8, PaginationLimitError as c9, PurchaseOrderItemReceivingResource as cA, type PurchaseOrderItemReceivingResourceQueryParams as cB, PurchaseOrderItemsResource as cC, type PurchaseOrderItemsResourceQueryParams as cD, PurchaseOrdersResource as cE, type PurchaseOrdersResourceQueryParams as cF, QueryTooLongError as cG, QuoteItemsResource as cH, type QuoteItemsResourceQueryParams as cI, QuoteLocationsResource as cJ, type QuoteLocationsResourceQueryParams as cK, QuoteTemplatesResource as cL, type QuoteTemplatesResourceQueryParams as cM, QuotesResource as cN, type QuotesResourceQueryParams as cO, REDACTED as cP, RateLimitError as cQ, RecoveryTruncatedError as cR, type RequestOptions as cS, ResolutionError as cT, type ResolvedAutotaskConfig as cU, ResourceRoleQueuesResource as cV, type ResourceRoleQueuesResourceQueryParams as cW, ResourceRolesResource as cX, type ResourceRolesResourceQueryParams as cY, ResourceSkillsResource as cZ, type ResourceSkillsResourceQueryParams as c_, PhasesResource as ca, type PhasesResourceQueryParams as cb, ProductVendorsResource as cc, type ProductVendorsResourceQueryParams as cd, ProductsResource as ce, type ProductsResourceQueryParams as cf, type ProfitRateSource as cg, type ProfitabilityActivityCategory as ch, type ProfitabilityDataQualityWarning as ci, type ProfitabilityHighestCostTicket as cj, type ProfitabilityLabourCostMethod as ck, type ProfitabilityMiscoding as cl, type ProfitabilityMonthlyRow as cm, type ProfitabilityOpenRenewalItem as cn, type ProfitabilityOptions as co, type ProfitabilityPart as cp, type ProfitabilityPartDigest as cq, type ProfitabilityRevenueByType as cr, ProjectChargesResource as cs, type ProjectChargesResourceQueryParams as ct, ProjectNotesResource as cu, type ProjectNotesResourceQueryParams as cv, ProjectsResource as cw, type ProjectsResourceQueryParams as cx, PurchaseApprovalsResource as cy, type PurchaseApprovalsResourceQueryParams as cz, type AppointmentsResourceQueryParams as d, type TicketChecklistItemsResourceQueryParams as d$, type ResourceTimeOffAdditionalResourceQueryParams as d0, ResourceTimeOffApproversResource as d1, type ResourceTimeOffApproversResourceQueryParams as d2, ResourceTimeOffBalancesResource as d3, type ResourceTimeOffBalancesResourceQueryParams as d4, ResourcesResource as d5, type ResourcesResourceQueryParams as d6, ResponseRejectedError as d7, RolesResource as d8, type RolesResourceQueryParams as d9, type SurveysResourceQueryParams as dA, TagAliasesResource as dB, type TagAliasesResourceQueryParams as dC, TagGroupsResource as dD, type TagGroupsResourceQueryParams as dE, TagsResource as dF, type TagsResourceQueryParams as dG, TaskSecondaryResourcesResource as dH, type TaskSecondaryResourcesResourceQueryParams as dI, TasksResource as dJ, type TasksResourceQueryParams as dK, ThresholdInformationResource as dL, TicketAdditionalConfigurationItemsResource as dM, type TicketAdditionalConfigurationItemsResourceQueryParams as dN, TicketAdditionalContactsResource as dO, type TicketAdditionalContactsResourceQueryParams as dP, TicketAttachmentsResource as dQ, type TicketAttachmentsResourceQueryParams as dR, TicketCategoriesResource as dS, type TicketCategoriesResourceQueryParams as dT, TicketCategoryFieldDefaultsResource as dU, type TicketCategoryFieldDefaultsResourceQueryParams as dV, TicketChangeRequestApprovalsResource as dW, type TicketChangeRequestApprovalsResourceQueryParams as dX, TicketChargesResource as dY, type TicketChargesResourceQueryParams as dZ, TicketChecklistItemsResource as d_, ServerError as da, ServiceCallTaskResourcesResource as db, type ServiceCallTaskResourcesResourceQueryParams as dc, ServiceCallTasksResource as dd, type ServiceCallTasksResourceQueryParams as de, ServiceCallTicketResourcesResource as df, type ServiceCallTicketResourcesResourceQueryParams as dg, ServiceCallTicketsResource as dh, type ServiceCallTicketsResourceQueryParams as di, ServiceCallsResource as dj, type ServiceCallsResourceQueryParams as dk, ServiceLevelAgreementResultsResource as dl, type ServiceLevelAgreementResultsResourceQueryParams as dm, ServicesResource as dn, type ServicesResourceQueryParams as dp, SkillsResource as dq, type SkillsResourceQueryParams as dr, StaleObjectError as ds, SubscriptionPeriodsResource as dt, type SubscriptionPeriodsResourceQueryParams as du, SubscriptionsResource as dv, type SubscriptionsResourceQueryParams as dw, SurveyResultsResource as dx, type SurveyResultsResourceQueryParams as dy, SurveysResource as dz, AuthenticateResource as e, unwrapItem as e$, TicketChecklistLibrariesResource as e0, type TicketChecklistLibrariesResourceQueryParams as e1, TicketHistoryResource as e2, type TicketHistoryResourceQueryParams as e3, TicketNoteAttachmentsResource as e4, type TicketNoteAttachmentsResourceQueryParams as e5, TicketNoteWebhooksResource as e6, type TicketNoteWebhooksResourceQueryParams as e7, TicketNotesResource as e8, type TicketNotesResourceQueryParams as e9, buildUrl as eA, clampPageSize as eB, collectAll as eC, cooldownDurationMs as eD, cursorToPath as eE, defaultCircuitBreakerStore as eF, defaultCooldownStore as eG, errorFromStatus as eH, formatVendorDetail as eI, isAutotaskError as eJ, isBreakerFailure as eK, isCredentialHeaderName as eL, isDeterministicVendor500 as eM, mergeDetails as eN, paginate as eO, paginateItems as eP, parseVendorErrors as eQ, passthrough as eR, redactRecord as eS, resetDefaultCircuitBreakerStore as eT, resetDefaultCooldownStore as eU, resolveBaseUrl as eV, resolveConfig as eW, resolveCredentials as eX, runWithSignal as eY, toArray as eZ, totalPagesFor as e_, TicketSecondaryResourcesResource as ea, type TicketSecondaryResourcesResourceQueryParams as eb, TicketWebhooksResource as ec, type TicketWebhooksResourceQueryParams as ed, TicketsResource as ee, type TicketsResourceQueryParams as ef, TimeEntriesResource as eg, type TimeEntriesResourceQueryParams as eh, TimeEntryAttachmentsResource as ei, type TimeEntryAttachmentsResourceQueryParams as ej, TimeOffRequestsResource as ek, type TimeOffRequestsResourceQueryParams as el, UnauthorizedError as em, UnexpectedContentTypeError as en, UnprocessableEntityError as eo, type VendorFieldError as ep, VersionInformationResource as eq, VersionResource as er, ZONES as es, ZONE_CATALOG as et, ZoneInformationResource as eu, type ZoneName as ev, buildBreakerKey as ew, buildQueryBody as ex, buildQueryRequest as ey, buildTenantKey as ez, AutotaskAbortError as f, unwrapItems as f0, unwrapOperation as f1, unwrapQueryCount as f2, zoneUrl as f3, type BlindSurfaceInfo as f4, type RelationshipResource as f5, type BlindSurfaceInventory as f6, type BlindSurfaceRow as f7, type CreateBlockerKind as f8, type CreateGuidanceReport as f9, type FieldCacheKind as fa, FIELD_CACHE_KINDS as fb, AutotaskConfigError as g, AutotaskError as h, type AutotaskErrorOptions as i, AutotaskNetworkError as j, AutotaskTimeoutError as k, BillingCodesResource as l, type BillingCodesResourceQueryParams as m, BillingItemsResource as n, type BillingItemsResourceQueryParams as o, CREDENTIAL_SHAPE_POINTER as p, ChangeRequestLinksResource as q, type ChangeRequestLinksResourceQueryParams as r, ChecklistLibrariesResource as s, type ChecklistLibrariesResourceQueryParams as t, ChecklistLibraryChecklistItemsResource as u, type ChecklistLibraryChecklistItemsResourceQueryParams as v, CircuitBreakerError as w, type CircuitBreakerState as x, type CircuitBreakerStore as y, ClassificationIconsResource as z };
|
|
8946
|
+
export { type ConfigurationItemSslSubjectAlternativeNamesResourceQueryParams as $, type AutotaskConfig as A, BillingCodesResource as B, CREDENTIAL_HEADER_NAMES as C, CompanyLocationsResource as D, type CompanyLocationsResourceQueryParams as E, CompanyNotesResource as F, type CompanyNotesResourceQueryParams as G, CompanySiteConfigurationsResource as H, type CompanySiteConfigurationsResourceQueryParams as I, CompanyWebhooksResource as J, type CompanyWebhooksResourceQueryParams as K, type ConfigProfile as L, ConfigurationItemBillingProductAssociationsResource as M, type ConfigurationItemBillingProductAssociationsResourceQueryParams as N, ConfigurationItemCategoriesResource as O, type ConfigurationItemCategoriesResourceQueryParams as P, ConfigurationItemCategoryUdfAssociationsResource as Q, type ResolvedAutotaskConfig as R, type ConfigurationItemCategoryUdfAssociationsResourceQueryParams as S, ConfigurationItemDnsRecordsResource as T, type ConfigurationItemDnsRecordsResourceQueryParams as U, ConfigurationItemNotesResource as V, type ConfigurationItemNotesResourceQueryParams as W, ConfigurationItemRelatedItemsResource as X, type ConfigurationItemRelatedItemsResourceQueryParams as Y, type ZoneName as Z, ConfigurationItemSslSubjectAlternativeNamesResource as _, AutotaskClient as a, DEFAULT_CIRCUIT_BREAKER_FAILURE_THRESHOLD as a$, ConfigurationItemTypesResource as a0, type ConfigurationItemTypesResourceQueryParams as a1, ConfigurationItemWebhooksResource as a2, type ConfigurationItemWebhooksResourceQueryParams as a3, ConfigurationItemsResource as a4, type ConfigurationItemsResourceQueryParams as a5, ContactGroupContactsResource as a6, type ContactGroupContactsResourceQueryParams as a7, ContactGroupsResource as a8, type ContactGroupsResourceQueryParams as a9, ContractRatesResource as aA, type ContractRatesResourceQueryParams as aB, ContractRetainersResource as aC, type ContractRetainersResourceQueryParams as aD, ContractRoleCostsResource as aE, type ContractRoleCostsResourceQueryParams as aF, ContractServiceAdjustmentsResource as aG, type ContractServiceAdjustmentsResourceQueryParams as aH, ContractServiceBundleAdjustmentsResource as aI, type ContractServiceBundleAdjustmentsResourceQueryParams as aJ, ContractServiceBundleUnitsResource as aK, type ContractServiceBundleUnitsResourceQueryParams as aL, ContractServiceBundlesResource as aM, type ContractServiceBundlesResourceQueryParams as aN, ContractServiceUnitsResource as aO, type ContractServiceUnitsResourceQueryParams as aP, ContractServicesResource as aQ, type ContractServicesResourceQueryParams as aR, ContractTicketPurchasesResource as aS, type ContractTicketPurchasesResourceQueryParams as aT, type ContractsProfitabilityResult as aU, ContractsResource as aV, type ContractsResourceQueryParams as aW, type CooldownStore as aX, type CostRateResolution as aY, CountriesResource as aZ, type CountriesResourceQueryParams as a_, ContactWebhooksResource as aa, type ContactWebhooksResourceQueryParams as ab, ContactsResource as ac, type ContactsResourceQueryParams as ad, ContractBillingRulesResource as ae, type ContractBillingRulesResourceQueryParams as af, ContractBlockHourFactorsResource as ag, type ContractBlockHourFactorsResourceQueryParams as ah, ContractBlocksResource as ai, type ContractBlocksResourceQueryParams as aj, ContractChargesResource as ak, type ContractChargesResourceQueryParams as al, ContractExclusionBillingCodesResource as am, type ContractExclusionBillingCodesResourceQueryParams as an, ContractExclusionRolesResource as ao, type ContractExclusionRolesResourceQueryParams as ap, ContractExclusionSetExcludedRolesResource as aq, type ContractExclusionSetExcludedRolesResourceQueryParams as ar, ContractExclusionSetExcludedWorkTypesResource as as, type ContractExclusionSetExcludedWorkTypesResourceQueryParams as at, ContractExclusionSetsResource as au, type ContractExclusionSetsResourceQueryParams as av, ContractMilestonesResource as aw, type ContractMilestonesResourceQueryParams as ax, ContractNotesResource as ay, type ContractNotesResourceQueryParams as az, AutotaskError as b, type ProfitabilityPartDigest as b$, DEFAULT_CIRCUIT_BREAKER_MAX_ENTRIES as b0, DEFAULT_CIRCUIT_BREAKER_OPEN_TIMEOUT_MS as b1, DEFAULT_CIRCUIT_BREAKER_SUCCESSES_TO_CLOSE as b2, DEFAULT_CIRCUIT_BREAKER_WINDOW_MS as b3, DEFAULT_COOLDOWN_DEFAULT_MS as b4, DEFAULT_COOLDOWN_MAX_ENTRIES as b5, DEFAULT_COOLDOWN_MAX_MS as b6, DEFAULT_ZONE as b7, DepartmentsResource as b8, type DepartmentsResourceQueryParams as b9, NoopLogger as bA, NotificationHistoryResource as bB, type NotificationHistoryResourceQueryParams as bC, OpportunitiesResource as bD, type OpportunitiesResourceQueryParams as bE, OpportunityAttachmentsResource as bF, type OpportunityAttachmentsResourceQueryParams as bG, OpportunityCategoriesResource as bH, type OpportunityCategoriesResourceQueryParams as bI, type PageFetcher as bJ, type PaginateOptions as bK, PhasesResource as bL, type PhasesResourceQueryParams as bM, ProductVendorsResource as bN, type ProductVendorsResourceQueryParams as bO, ProductsResource as bP, type ProductsResourceQueryParams as bQ, type ProfitRateSource as bR, type ProfitabilityActivityCategory as bS, type ProfitabilityDataQualityWarning as bT, type ProfitabilityHighestCostTicket as bU, type ProfitabilityLabourCostMethod as bV, type ProfitabilityMiscoding as bW, type ProfitabilityMonthlyRow as bX, type ProfitabilityOpenRenewalItem as bY, type ProfitabilityOptions as bZ, type ProfitabilityPart as b_, DomainRegistrarsResource as ba, type DomainRegistrarsResourceQueryParams as bb, EntityInformationResource as bc, type ErrorCategory as bd, type ErrorIdRef as be, ExpenseItemAttachmentsResource as bf, type ExpenseItemAttachmentsResourceQueryParams as bg, ExpenseItemsResource as bh, type ExpenseItemsResourceQueryParams as bi, ExpenseReportsResource as bj, type ExpenseReportsResourceQueryParams as bk, HolidaySetsResource as bl, type HolidaySetsResourceQueryParams as bm, HolidaysResource as bn, type HolidaysResourceQueryParams as bo, HttpClient as bp, IDEMPOTENT_METHODS as bq, InMemoryCircuitBreakerStore as br, InMemoryCooldownStore as bs, InventoryProductsResource as bt, type InventoryProductsResourceQueryParams as bu, InvoicesResource as bv, type InvoicesResourceQueryParams as bw, type Logger as bx, MAX_PAGES as by, ModulesResource as bz, type AutotaskErrorOptions as c, type SurveysResourceQueryParams as c$, type ProfitabilityRevenueByType as c0, ProjectChargesResource as c1, type ProjectChargesResourceQueryParams as c2, ProjectNotesResource as c3, type ProjectNotesResourceQueryParams as c4, ProjectsResource as c5, type ProjectsResourceQueryParams as c6, PurchaseApprovalsResource as c7, type PurchaseApprovalsResourceQueryParams as c8, PurchaseOrderItemReceivingResource as c9, ResourcesResource as cA, type ResourcesResourceQueryParams as cB, RolesResource as cC, type RolesResourceQueryParams as cD, ServiceCallTaskResourcesResource as cE, type ServiceCallTaskResourcesResourceQueryParams as cF, ServiceCallTasksResource as cG, type ServiceCallTasksResourceQueryParams as cH, ServiceCallTicketResourcesResource as cI, type ServiceCallTicketResourcesResourceQueryParams as cJ, ServiceCallTicketsResource as cK, type ServiceCallTicketsResourceQueryParams as cL, ServiceCallsResource as cM, type ServiceCallsResourceQueryParams as cN, ServiceLevelAgreementResultsResource as cO, type ServiceLevelAgreementResultsResourceQueryParams as cP, ServicesResource as cQ, type ServicesResourceQueryParams as cR, SkillsResource as cS, type SkillsResourceQueryParams as cT, SubscriptionPeriodsResource as cU, type SubscriptionPeriodsResourceQueryParams as cV, SubscriptionsResource as cW, type SubscriptionsResourceQueryParams as cX, SurveyResultsResource as cY, type SurveyResultsResourceQueryParams as cZ, SurveysResource as c_, type PurchaseOrderItemReceivingResourceQueryParams as ca, PurchaseOrderItemsResource as cb, type PurchaseOrderItemsResourceQueryParams as cc, PurchaseOrdersResource as cd, type PurchaseOrdersResourceQueryParams as ce, QuoteItemsResource as cf, type QuoteItemsResourceQueryParams as cg, QuoteLocationsResource as ch, type QuoteLocationsResourceQueryParams as ci, QuoteTemplatesResource as cj, type QuoteTemplatesResourceQueryParams as ck, QuotesResource as cl, type QuotesResourceQueryParams as cm, REDACTED as cn, ResourceRoleQueuesResource as co, type ResourceRoleQueuesResourceQueryParams as cp, ResourceRolesResource as cq, type ResourceRolesResourceQueryParams as cr, ResourceSkillsResource as cs, type ResourceSkillsResourceQueryParams as ct, ResourceTimeOffAdditionalResource as cu, type ResourceTimeOffAdditionalResourceQueryParams as cv, ResourceTimeOffApproversResource as cw, type ResourceTimeOffApproversResourceQueryParams as cx, ResourceTimeOffBalancesResource as cy, type ResourceTimeOffBalancesResourceQueryParams as cz, type RequestOptions as d, isBreakerFailure as d$, TagAliasesResource as d0, type TagAliasesResourceQueryParams as d1, TagGroupsResource as d2, type TagGroupsResourceQueryParams as d3, TagsResource as d4, type TagsResourceQueryParams as d5, TaskSecondaryResourcesResource as d6, type TaskSecondaryResourcesResourceQueryParams as d7, TasksResource as d8, type TasksResourceQueryParams as d9, TicketNotesResource as dA, type TicketNotesResourceQueryParams as dB, TicketSecondaryResourcesResource as dC, type TicketSecondaryResourcesResourceQueryParams as dD, TicketWebhooksResource as dE, type TicketWebhooksResourceQueryParams as dF, TicketsResource as dG, type TicketsResourceQueryParams as dH, TimeEntriesResource as dI, type TimeEntriesResourceQueryParams as dJ, TimeEntryAttachmentsResource as dK, type TimeEntryAttachmentsResourceQueryParams as dL, TimeOffRequestsResource as dM, type TimeOffRequestsResourceQueryParams as dN, VersionInformationResource as dO, VersionResource as dP, ZONES as dQ, ZONE_CATALOG as dR, ZoneInformationResource as dS, buildBreakerKey as dT, buildTenantKey as dU, clampPageSize as dV, collectAll as dW, cooldownDurationMs as dX, defaultCircuitBreakerStore as dY, defaultCooldownStore as dZ, isAutotaskError as d_, ThresholdInformationResource as da, TicketAdditionalConfigurationItemsResource as db, type TicketAdditionalConfigurationItemsResourceQueryParams as dc, TicketAdditionalContactsResource as dd, type TicketAdditionalContactsResourceQueryParams as de, TicketAttachmentsResource as df, type TicketAttachmentsResourceQueryParams as dg, TicketCategoriesResource as dh, type TicketCategoriesResourceQueryParams as di, TicketCategoryFieldDefaultsResource as dj, type TicketCategoryFieldDefaultsResourceQueryParams as dk, TicketChangeRequestApprovalsResource as dl, type TicketChangeRequestApprovalsResourceQueryParams as dm, TicketChargesResource as dn, type TicketChargesResourceQueryParams as dp, TicketChecklistItemsResource as dq, type TicketChecklistItemsResourceQueryParams as dr, TicketChecklistLibrariesResource as ds, type TicketChecklistLibrariesResourceQueryParams as dt, TicketHistoryResource as du, type TicketHistoryResourceQueryParams as dv, TicketNoteAttachmentsResource as dw, type TicketNoteAttachmentsResourceQueryParams as dx, TicketNoteWebhooksResource as dy, type TicketNoteWebhooksResourceQueryParams as dz, AGENT_PROFILE as e, isCredentialHeaderName as e0, paginate as e1, paginateItems as e2, redactRecord as e3, resetDefaultCircuitBreakerStore as e4, resetDefaultCooldownStore as e5, resolveBaseUrl as e6, toArray as e7, totalPagesFor as e8, zoneUrl as e9, type BlindSurfaceInfo as ea, type RelationshipResource as eb, type BlindSurfaceInventory as ec, type BlindSurfaceRow as ed, type CreateBlockerKind as ee, type CreateGuidanceReport as ef, type FieldCacheKind as eg, FIELD_CACHE_KINDS as eh, AppointmentsResource as f, type AppointmentsResourceQueryParams as g, AuthenticateResource as h, AutotaskConfigError as i, type BillingCodesResourceQueryParams as j, BillingItemsResource as k, type BillingItemsResourceQueryParams as l, ChangeRequestLinksResource as m, type ChangeRequestLinksResourceQueryParams as n, ChecklistLibrariesResource as o, type ChecklistLibrariesResourceQueryParams as p, ChecklistLibraryChecklistItemsResource as q, type ChecklistLibraryChecklistItemsResourceQueryParams as r, type CircuitBreakerState as s, type CircuitBreakerStore as t, ClassificationIconsResource as u, type ClassificationIconsResourceQueryParams as v, CompaniesResource as w, type CompaniesResourceQueryParams as x, CompanyAlertsResource as y, type CompanyAlertsResourceQueryParams as z };
|