@ax-hub/sdk 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -72,6 +72,8 @@ declare class PermanentlyDeletedError extends NotFoundError {
72
72
  }
73
73
  declare class InvitationExpiredError extends NotFoundError {
74
74
  }
75
+ declare class LinkInvalidError extends NotFoundError {
76
+ }
75
77
  declare class AlreadyRevokedError extends ConflictError {
76
78
  }
77
79
  declare class AlreadySettledError extends ConflictError {
@@ -98,6 +100,8 @@ declare class DuplicateError extends ConflictError {
98
100
  }
99
101
  declare class InvalidValueError extends ValidationError {
100
102
  }
103
+ declare class InvalidExpiryError extends ValidationError {
104
+ }
101
105
  declare class RequiredError extends ValidationError {
102
106
  }
103
107
  declare class EmptyError extends ValidationError {
@@ -291,8 +295,9 @@ interface HttpClientOptions {
291
295
  }
292
296
  interface RequestInit2 {
293
297
  ring: AuthRing;
294
- query?: Record<string, string | number | boolean | undefined>;
298
+ query?: Record<string, string | number | boolean | undefined | ReadonlyArray<string | number | boolean>>;
295
299
  body?: unknown;
300
+ form?: Record<string, string | number | boolean | undefined>;
296
301
  parseBody?: boolean;
297
302
  signal?: AbortSignal;
298
303
  idempotent?: boolean;
@@ -319,6 +324,7 @@ declare class HttpClient {
319
324
  private buildUrl;
320
325
  private buildHeaders;
321
326
  private resolveIdempotencyKey;
327
+ private formBody;
322
328
  private withStableIdempotencyKey;
323
329
  private logRequest;
324
330
  }
@@ -346,15 +352,15 @@ declare class NoAuth implements AuthProvider {
346
352
  interface PaginatedList<T> {
347
353
  items: T[];
348
354
  nextCursor: string | null;
349
- total: number;
355
+ total?: number;
350
356
  firstCursor?: string | null;
351
357
  hasNext?: boolean;
352
358
  hasPrev?: boolean;
353
359
  /**
354
- * `true` when `total` reflects the full filtered result set the caller will
355
- * see. `false` when SDK-side filtering (no backend `where` pushdown) means
356
- * `total` is the backend's unfiltered total and the true filtered count
357
- * requires walking remaining pages. Absent on plain unfiltered queries.
360
+ * `true` when `total` reflects the full filtered result set. `false` when
361
+ * the producer knows the list omits an exact total. When `total` is absent,
362
+ * callers should use the resource-specific `count()` method if they need an
363
+ * exact count.
358
364
  */
359
365
  totalIsExact?: boolean;
360
366
  }
@@ -664,6 +670,7 @@ interface AppResponse {
664
670
  suspendedAt?: string | null;
665
671
  resumedAt?: string | null;
666
672
  categoryId?: string;
673
+ costCenter?: string;
667
674
  category?: AppResponseCategory;
668
675
  owner?: AppResponseOwner;
669
676
  likeCount: number;
@@ -715,7 +722,12 @@ interface CreateAppInput {
715
722
  iconUrl?: string;
716
723
  /** Dark-mode icon. Wire: `icon_dark_url`. */
717
724
  iconDarkUrl?: string;
725
+ /** @deprecated Backend ignores create-time visibility; call update({ visibility }) after create. Not serialized. */
718
726
  visibility?: 'private' | 'tenant' | 'public';
727
+ /** Wire: `category_id`. */
728
+ categoryId?: string;
729
+ /** Wire: `cost_center`. */
730
+ costCenter?: string;
719
731
  /** Wire: `auth_mode`. */
720
732
  authMode?: string;
721
733
  /** Wire: `data_scopes`. */
@@ -744,6 +756,14 @@ interface UpdateAppInput {
744
756
  resourceTier?: string;
745
757
  /** Wire: `subdomain`. */
746
758
  subdomain?: string;
759
+ /** Wire: `category_id`. */
760
+ categoryId?: string;
761
+ /** Clear category assignment. Wire: `clear_category`. */
762
+ clearCategory?: boolean;
763
+ /** Wire: `cost_center`. */
764
+ costCenter?: string;
765
+ /** Clear cost center. Wire: `clear_cost_center`. */
766
+ clearCostCenter?: boolean;
747
767
  /** Clear the app's subdomain. Wire: `clear_subdomain`. */
748
768
  clearSubdomain?: boolean;
749
769
  }
@@ -1085,12 +1105,10 @@ declare class AppsDiscoverMixin {
1085
1105
 
1086
1106
  interface GitConnection {
1087
1107
  connected: true;
1088
- id: string;
1089
- appId: string;
1108
+ provider?: string;
1090
1109
  repoFullName: string;
1091
1110
  branch: string;
1092
- installationId: string;
1093
- connectedAt: string;
1111
+ installationId: number;
1094
1112
  }
1095
1113
  interface GitConnectionSetup {
1096
1114
  connected: false;
@@ -1100,7 +1118,8 @@ type GitConnectionStatus = GitConnection | GitConnectionSetup;
1100
1118
  interface ConnectGitInput {
1101
1119
  repoFullName: string;
1102
1120
  branch: string;
1103
- installationId: string;
1121
+ installationId: number;
1122
+ state: string;
1104
1123
  }
1105
1124
  interface UpdateGitConnectionInput {
1106
1125
  branch: string;
@@ -1127,11 +1146,12 @@ declare class AppsGitMixin {
1127
1146
  * const conn = await sdk.apps.git.connect('app_abc', {
1128
1147
  * repoFullName: 'my-org/my-repo',
1129
1148
  * branch: 'main',
1130
- * installationId: '12345',
1149
+ * installationId: 12345,
1150
+ * state: 'github-callback-state',
1131
1151
  * })
1132
1152
  *
1133
1153
  * @example failure
1134
- * try { await sdk.apps.git.connect('app_x', { repoFullName: 'invalid', branch: '', installationId: '' }) }
1154
+ * try { await sdk.apps.git.connect('app_x', { repoFullName: 'invalid', branch: '', installationId: 0, state: '' }) }
1135
1155
  * catch (e) { if (e instanceof ValidationError) /* fix repo / branch *\/ }
1136
1156
  */
1137
1157
  connect(appId: string, input: ConnectGitInput): Promise<GitConnection>;
@@ -1385,16 +1405,16 @@ declare class AppsOAuthClientsMixin {
1385
1405
  */
1386
1406
  create(appId: string, input: CreateOAuthClientInput): Promise<OAuthClientWithSecret>;
1387
1407
  /**
1388
- * Delete an OAuth client by ID. Backend route is global (`/oauth-clients/{id}`).
1389
- * After this, any tokens issued via this client become unusable.
1408
+ * Fetch an OAuth client by ID. Backend exposes GET /api/v1/oauth-clients/{clientID};
1409
+ * the raw client secret is never returned after create.
1390
1410
  *
1391
1411
  * @example happy
1392
- * await sdk.apps.oauthClients.delete('oac_abc')
1412
+ * const c = await sdk.apps.oauthClients.get('oac_abc')
1393
1413
  */
1394
- delete(clientId: string): Promise<void>;
1414
+ get(clientId: string): Promise<OAuthClient>;
1395
1415
  }
1396
1416
 
1397
- type PublicationRequestStatus = 'pending' | 'approved' | 'rejected';
1417
+ type PublicationRequestStatus = 'pending' | 'approved' | 'rejected' | 'cancelled' | 'revoked';
1398
1418
  interface PublicationRequest {
1399
1419
  id: string;
1400
1420
  appId: string;
@@ -1405,7 +1425,6 @@ interface PublicationRequest {
1405
1425
  reviewerComment?: string;
1406
1426
  createdAt: string;
1407
1427
  updatedAt: string;
1408
- settledAt?: string | null;
1409
1428
  }
1410
1429
  interface SubmitPublicationInput {
1411
1430
  reason?: string;
@@ -1439,12 +1458,13 @@ declare class AppsPublicationMixin {
1439
1458
  */
1440
1459
  list(appId: string, opts?: ListOptions): Promise<PaginatedList<PublicationRequest>>;
1441
1460
  /**
1442
- * Take a published app off the public catalog. Owner / admin only. App must
1443
- * be in `approved` + `public` state; otherwise `InvalidStateTransitionError`.
1461
+ * Take a published app off the public catalog by PATCHing app visibility to
1462
+ * `private`. Owner / admin only; invalid transitions surface backend typed
1463
+ * errors such as `InvalidStateTransitionError`.
1444
1464
  *
1445
1465
  * @example happy
1446
1466
  * const app = await sdk.apps.publication.unpublish('app_abc', { comment: 'Maintenance' })
1447
- * console.log(app.publicationStatus, app.visibility) // 'draft', 'tenant'
1467
+ * console.log(app.visibility) // 'private'
1448
1468
  *
1449
1469
  * @example failure
1450
1470
  * try { await sdk.apps.publication.unpublish('app_x') }
@@ -1453,7 +1473,7 @@ declare class AppsPublicationMixin {
1453
1473
  unpublish(appId: string, input?: UnpublishInput): Promise<AppResponse>;
1454
1474
  }
1455
1475
 
1456
- type ColumnType = 'text' | 'int' | 'bigint' | 'float' | 'numeric' | 'bool' | 'timestamp' | 'timestamptz' | 'json' | 'jsonb' | 'uuid';
1476
+ type ColumnType = 'text' | 'int' | 'bigint' | 'float' | 'bool' | 'timestamp' | 'timestamptz' | 'json' | 'jsonb' | 'uuid';
1457
1477
  interface TableColumn {
1458
1478
  name: string;
1459
1479
  type: ColumnType;
@@ -1485,7 +1505,7 @@ interface TableSchema extends AppTable {
1485
1505
  rowCount?: number;
1486
1506
  sizeBytes?: number;
1487
1507
  }
1488
- type GrantPrincipalType = 'user' | 'tenant' | 'app';
1508
+ type GrantPrincipalType = 'user' | 'app';
1489
1509
  type GrantScope = 'read' | 'write' | 'delete' | 'admin';
1490
1510
  interface TableGrant {
1491
1511
  id: string;
@@ -1594,7 +1614,7 @@ declare class AppsTablesMixin {
1594
1614
  * @example happy
1595
1615
  * await sdk.apps.tables.addColumn('app_abc', 'tasks', { name: 'priority', type: 'int', default: 0 })
1596
1616
  */
1597
- addColumn(appId: string, tableName: string, input: AddColumnInput): Promise<TableColumn>;
1617
+ addColumn(appId: string, tableName: string, input: AddColumnInput): Promise<void>;
1598
1618
  /**
1599
1619
  * Drop a column. Cannot drop the `ownerColumn` — backend returns 409
1600
1620
  * `cannot_drop_owner_column`.
@@ -1806,7 +1826,8 @@ declare function defineSchema<const S extends SchemaShape>(input: {
1806
1826
  }, opts?: ValidationOptions): DataTableSchema<RowFromSchema<S>, S>;
1807
1827
  declare function defineSchema<Row extends Record<string, unknown>, S extends SchemaShape>(input: DataTableSchema<Row, S>, opts: ValidationOptions): DataTableSchema<Row, S>;
1808
1828
 
1809
- type QueryExpr = {
1829
+ declare const NON_PUSHABLE_WHERE: unique symbol;
1830
+ type PushableAtomQueryExpr = {
1810
1831
  op: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte' | 'like';
1811
1832
  column: string;
1812
1833
  value: unknown;
@@ -1814,8 +1835,13 @@ type QueryExpr = {
1814
1835
  op: 'in';
1815
1836
  column: string;
1816
1837
  values: unknown[];
1817
- } | {
1818
- op: 'and' | 'or';
1838
+ };
1839
+ type PushableQueryExpr = PushableAtomQueryExpr | {
1840
+ op: 'and';
1841
+ clauses: PushableAtomQueryExpr[];
1842
+ };
1843
+ type NonPushableQueryExpr = ({
1844
+ op: 'or';
1819
1845
  clauses: QueryExpr[];
1820
1846
  } | {
1821
1847
  op: 'not';
@@ -1824,27 +1850,34 @@ type QueryExpr = {
1824
1850
  op: 'raw';
1825
1851
  sql: string;
1826
1852
  params?: unknown[];
1853
+ } | {
1854
+ op: 'and';
1855
+ clauses: QueryExpr[];
1856
+ }) & {
1857
+ readonly [NON_PUSHABLE_WHERE]: true;
1827
1858
  };
1859
+ type QueryExpr = PushableQueryExpr | NonPushableQueryExpr;
1828
1860
  declare function escapeLike(value: string): string;
1829
- declare function raw(sql: string, params?: unknown[]): QueryExpr;
1830
- declare function and(...clauses: QueryExpr[]): QueryExpr;
1831
- declare function or(...clauses: QueryExpr[]): QueryExpr;
1832
- declare function not(clause: QueryExpr): QueryExpr;
1861
+ declare function raw(sql: string, params?: unknown[]): NonPushableQueryExpr;
1862
+ declare function and(...clauses: PushableAtomQueryExpr[]): PushableQueryExpr;
1863
+ declare function and(...clauses: QueryExpr[]): NonPushableQueryExpr;
1864
+ declare function or(...clauses: QueryExpr[]): NonPushableQueryExpr;
1865
+ declare function not(clause: QueryExpr): NonPushableQueryExpr;
1833
1866
  declare function where<D extends ColumnDef>(column: DataColumn<string, D>): WhereBuilder<ColumnValue<D>>;
1834
1867
  declare function where<T = unknown>(column: string): WhereBuilder<T>;
1835
1868
  interface WhereBuilder<T> {
1836
- eq: (value: T) => QueryExpr;
1837
- ne: (value: T) => QueryExpr;
1838
- gt: (value: T) => QueryExpr;
1839
- gte: (value: T) => QueryExpr;
1840
- lt: (value: T) => QueryExpr;
1841
- lte: (value: T) => QueryExpr;
1842
- in: (values: T[]) => QueryExpr;
1869
+ eq: (value: T) => PushableAtomQueryExpr;
1870
+ ne: (value: T) => PushableAtomQueryExpr;
1871
+ gt: (value: T) => PushableAtomQueryExpr;
1872
+ gte: (value: T) => PushableAtomQueryExpr;
1873
+ lt: (value: T) => PushableAtomQueryExpr;
1874
+ lte: (value: T) => PushableAtomQueryExpr;
1875
+ in: (values: T[]) => PushableAtomQueryExpr;
1843
1876
  like: {
1844
- contains: (value: string) => QueryExpr;
1845
- startsWith: (value: string) => QueryExpr;
1846
- endsWith: (value: string) => QueryExpr;
1847
- raw: (value: string) => QueryExpr;
1877
+ contains: (value: string) => PushableAtomQueryExpr;
1878
+ startsWith: (value: string) => PushableAtomQueryExpr;
1879
+ endsWith: (value: string) => PushableAtomQueryExpr;
1880
+ raw: (value: string) => PushableAtomQueryExpr;
1848
1881
  };
1849
1882
  }
1850
1883
 
@@ -1917,15 +1950,27 @@ interface DataClientOptions {
1917
1950
  schemaCache?: SchemaCacheOptions | SchemaCache;
1918
1951
  mockStore?: MockStore;
1919
1952
  }
1920
- interface DataListOptions<Row extends Record<string, unknown> = Record<string, unknown>> extends ListOptions, RequestOptions {
1921
- where?: QueryExpr;
1953
+ interface DataListOptions<Row extends Record<string, unknown> = Record<string, unknown>> extends RequestOptions {
1954
+ where?: PushableQueryExpr;
1922
1955
  orderBy?: DataOrderBy;
1923
1956
  select?: SelectColumns<Row>;
1957
+ /** Alias for pageSize. Clamped to the backend max of 100. */
1924
1958
  limit?: number;
1925
- direction?: CursorDirection;
1959
+ /** Backend offset page size. Clamped to 1..100. */
1960
+ pageSize?: number;
1961
+ /** 1-based offset page. */
1962
+ page?: number;
1963
+ /** Numeric page cursor returned by a previous data list call. */
1964
+ cursor?: string;
1965
+ /** @deprecated AX Hub data API is offset-only; use cursor/page instead. */
1966
+ after?: never;
1967
+ /** @deprecated AX Hub data API is offset-only; use cursor/page instead. */
1968
+ before?: never;
1969
+ /** @deprecated AX Hub data API is offset-only. */
1970
+ direction?: never;
1926
1971
  }
1927
1972
  interface DataCountOptions extends RequestOptions {
1928
- where?: QueryExpr;
1973
+ where?: PushableQueryExpr;
1929
1974
  }
1930
1975
  interface DataGetOptions<Row extends Record<string, unknown> = Record<string, unknown>> extends RequestOptions {
1931
1976
  select?: SelectColumns<Row>;
@@ -1966,7 +2011,6 @@ declare class DataTableClient<Row extends Record<string, unknown> = Record<strin
1966
2011
  private readonly tableName;
1967
2012
  readonly schema?: DataTableSchema<Row, S> | undefined;
1968
2013
  private readonly mockRuntime?;
1969
- private readonly contextFingerprint;
1970
2014
  constructor(http: HttpClient, tenantSlug: string, appSlug: string, tableName: string, schema?: DataTableSchema<Row, S> | undefined, mockRuntime?: MockRuntime<Row> | undefined);
1971
2015
  private path;
1972
2016
  list<const K extends keyof Row & string>(opts: DataListOptions<Row> & {
@@ -1985,10 +2029,144 @@ declare class DataTableClient<Row extends Record<string, unknown> = Record<strin
1985
2029
  delete(id: string, opts?: RequestOptions): Promise<void>;
1986
2030
  }
1987
2031
 
2032
+ interface CostQueryOptions extends RequestOptions {
2033
+ month?: string;
2034
+ }
2035
+ interface CostSummary {
2036
+ month: string;
2037
+ currency: string;
2038
+ total: number;
2039
+ billedTotal: number;
2040
+ forecastMonthEnd: number;
2041
+ topDriver?: {
2042
+ resourceKind: string;
2043
+ share: number;
2044
+ };
2045
+ lastRolledUpAt?: string;
2046
+ partialMonth: boolean;
2047
+ }
2048
+ interface CostCenterRow {
2049
+ costCenter: string;
2050
+ appCount: number;
2051
+ cost: number;
2052
+ budget?: number;
2053
+ budgetPct?: number;
2054
+ over?: boolean;
2055
+ byResource: Record<string, number>;
2056
+ byResourceQty: Record<string, number>;
2057
+ }
2058
+ interface CostByCostCenter {
2059
+ rows: CostCenterRow[];
2060
+ unassigned: {
2061
+ appCount: number;
2062
+ cost: number;
2063
+ };
2064
+ }
2065
+ interface CostByAppRow {
2066
+ appId: string;
2067
+ name: string;
2068
+ costCenter?: string;
2069
+ cost: number;
2070
+ byResource: Record<string, number>;
2071
+ byResourceQty: Record<string, number>;
2072
+ }
2073
+ interface CostByApp {
2074
+ rows: CostByAppRow[];
2075
+ }
2076
+ interface CostTimeseriesPoint {
2077
+ date: string;
2078
+ total: number;
2079
+ byResource: Record<string, number>;
2080
+ }
2081
+ interface CostTimeseries {
2082
+ series: CostTimeseriesPoint[];
2083
+ }
2084
+ interface CostByAppOptions extends CostQueryOptions {
2085
+ sort?: 'cost' | 'name';
2086
+ }
2087
+ interface CostTimeseriesOptions extends CostQueryOptions {
2088
+ appId?: string;
2089
+ }
2090
+ interface CostExportOptions extends CostQueryOptions {
2091
+ format?: 'csv';
2092
+ }
2093
+ declare class CostClient {
2094
+ private readonly http;
2095
+ private readonly defaultTenantId?;
2096
+ private readonly tenantResolver?;
2097
+ constructor(http: HttpClient, defaultTenantId?: string | undefined, tenantResolver?: TenantResolver | undefined);
2098
+ tenant(tenantIdOrSlug: string): TenantCostClient;
2099
+ summary(opts?: CostQueryOptions): Promise<CostSummary>;
2100
+ byCostCenter(opts?: CostQueryOptions): Promise<CostByCostCenter>;
2101
+ byApp(opts?: CostByAppOptions): Promise<CostByApp>;
2102
+ timeseries(opts?: CostTimeseriesOptions): Promise<CostTimeseries>;
2103
+ export(opts?: CostExportOptions): Promise<string>;
2104
+ private defaultTenant;
2105
+ }
2106
+ declare class TenantCostClient {
2107
+ private readonly http;
2108
+ private readonly tenantIdOrSlug;
2109
+ private readonly tenantResolver?;
2110
+ constructor(http: HttpClient, tenantIdOrSlug: string, tenantResolver?: TenantResolver | undefined);
2111
+ summary(opts?: CostQueryOptions): Promise<CostSummary>;
2112
+ byCostCenter(opts?: CostQueryOptions): Promise<CostByCostCenter>;
2113
+ byApp(opts?: CostByAppOptions): Promise<CostByApp>;
2114
+ timeseries(opts?: CostTimeseriesOptions): Promise<CostTimeseries>;
2115
+ export(opts?: CostExportOptions): Promise<string>;
2116
+ private base;
2117
+ }
2118
+
2119
+ interface InviteLink {
2120
+ id: string;
2121
+ tenantId: string;
2122
+ url?: string;
2123
+ role: string;
2124
+ status: string;
2125
+ expiresAt?: string;
2126
+ joinCount: number;
2127
+ createdAt: string;
2128
+ }
2129
+ interface CreateInviteLinkInput {
2130
+ expiresAt?: string;
2131
+ }
2132
+ interface InviteLinkPreview {
2133
+ valid: boolean;
2134
+ tenant?: {
2135
+ name: string;
2136
+ iconUrl?: string;
2137
+ };
2138
+ }
2139
+ interface InviteLinkAcceptResult {
2140
+ tenantId: string;
2141
+ tenantSlug: string;
2142
+ joined: boolean;
2143
+ alreadyMember: boolean;
2144
+ }
2145
+ declare class InviteLinksClient {
2146
+ private readonly http;
2147
+ private readonly tenantResolver?;
2148
+ constructor(http: HttpClient, tenantResolver?: TenantResolver | undefined);
2149
+ tenant(tenantIdOrSlug: string): TenantInviteLinksClient;
2150
+ preview(token: string, opts?: RequestOptions): Promise<InviteLinkPreview>;
2151
+ accept(token: string, opts?: RequestOptions): Promise<InviteLinkAcceptResult>;
2152
+ }
2153
+ declare class TenantInviteLinksClient {
2154
+ private readonly http;
2155
+ private readonly tenantIdOrSlug;
2156
+ private readonly tenantResolver?;
2157
+ constructor(http: HttpClient, tenantIdOrSlug: string, tenantResolver?: TenantResolver | undefined);
2158
+ create(input?: CreateInviteLinkInput, opts?: RequestOptions): Promise<InviteLink>;
2159
+ list(opts?: RequestOptions): Promise<PaginatedList<InviteLink>>;
2160
+ revoke(linkId: string, opts?: RequestOptions): Promise<void>;
2161
+ private base;
2162
+ }
2163
+
1988
2164
  declare class TenantScopedClient {
1989
2165
  readonly slug: string;
1990
2166
  private readonly root;
1991
2167
  readonly apps: TenantScopedAppsClient;
2168
+ readonly cost: TenantCostClient;
2169
+ readonly inviteLinks: TenantInviteLinksClient;
1992
2170
  constructor(slug: string, scopedRoot: AxHubClient, root: AxHubClient, tenantResolver: TenantResolver);
1993
2171
  get gateway(): TenantGatewayClient;
1994
2172
  app(appSlug: string): AppScopedClient;
@@ -2010,7 +2188,6 @@ declare class AppScopedClient {
2010
2188
  readonly appSlug: string;
2011
2189
  private readonly root;
2012
2190
  readonly data: AppScopedDataClient;
2013
- readonly tables: AppScopedTablesClient;
2014
2191
  constructor(tenantSlug: string, appSlug: string, root: AxHubClient);
2015
2192
  }
2016
2193
  declare class AppScopedDataClient {
@@ -2022,14 +2199,6 @@ declare class AppScopedDataClient {
2022
2199
  discover<Row extends Record<string, unknown> = Record<string, unknown>>(table: string, opts?: DiscoverOptions): Promise<DataTableClient<Row, SchemaShapeFromRow<Row>>>;
2023
2200
  invalidateSchema(table?: string): void;
2024
2201
  }
2025
- declare class AppScopedTablesClient {
2026
- private readonly tenantSlug;
2027
- private readonly appSlug;
2028
- private readonly http;
2029
- constructor(tenantSlug: string, appSlug: string, http: HttpClient);
2030
- create(input: unknown, opts?: RequestOptions): Promise<unknown>;
2031
- inspect(tableName: string, opts?: RequestOptions): Promise<unknown>;
2032
- }
2033
2202
 
2034
2203
  type DeploymentStatus = 'pending' | 'building' | 'pushing' | 'deploying' | 'succeeded' | 'failed' | 'cancelled';
2035
2204
  interface DeploymentFailureReason {
@@ -2181,7 +2350,7 @@ declare class DeploymentsClient {
2181
2350
  /**
2182
2351
  * Cancel an in-progress deployment. Best-effort — if the deployment has
2183
2352
  * already transitioned to a terminal state when the request arrives, the
2184
- * route returns 204 on acceptance. Idempotent.
2353
+ * route returns 409 for terminal deployments and 204 when cancellation is accepted.
2185
2354
  *
2186
2355
  * @example happy
2187
2356
  * await sdk.deployments.cancel('app_abc', 'dep_123')
@@ -2276,7 +2445,7 @@ declare class DeploymentsClient {
2276
2445
  interface GatewayQueryInput {
2277
2446
  resourceId?: string;
2278
2447
  connectorId?: string;
2279
- path?: string;
2448
+ path: string;
2280
2449
  sql: string;
2281
2450
  params?: unknown[];
2282
2451
  rowLimit?: number;
@@ -2402,8 +2571,9 @@ interface EngineCapability {
2402
2571
  }
2403
2572
  declare class GatewayClient {
2404
2573
  private readonly http;
2405
- constructor(http: HttpClient);
2406
- scoped(tenantSlug: string): TenantGatewayClient;
2574
+ private readonly tenantResolver?;
2575
+ constructor(http: HttpClient, tenantResolver?: TenantResolver | undefined);
2576
+ scoped(tenantIdOrSlug: string): TenantGatewayClient;
2407
2577
  /**
2408
2578
  * List the gateway's engine capabilities (auth-only; no tenant membership
2409
2579
  * required). Each entry describes an engine + kind, its invokable actions,
@@ -2420,12 +2590,13 @@ declare class TenantGatewayClient {
2420
2590
  readonly query: GatewayQueryClient;
2421
2591
  /** Member-facing catalog: discover connectors/resources you can read + invoke. */
2422
2592
  readonly catalog: GatewayCatalogClient;
2423
- constructor(http: HttpClient, tenantSlug: string);
2593
+ constructor(http: HttpClient, tenantIdOrSlug: string, tenantResolver?: TenantResolver);
2424
2594
  }
2425
2595
  declare class GatewayQueryClient {
2426
2596
  private readonly http;
2427
- private readonly base;
2428
- constructor(http: HttpClient, base: string);
2597
+ private readonly tenantIdOrSlug;
2598
+ private readonly tenantResolver?;
2599
+ constructor(http: HttpClient, tenantIdOrSlug: string, tenantResolver?: TenantResolver | undefined);
2429
2600
  /**
2430
2601
  * Run a parameterized read query against a connector resource.
2431
2602
  *
@@ -2441,14 +2612,16 @@ declare class GatewayQueryClient {
2441
2612
  * @throws PoolStaleError 401 after a credential refresh retry.
2442
2613
  */
2443
2614
  run<Row extends Record<string, unknown> = Record<string, unknown>>(input: GatewayQueryInput, opts?: RequestOptions): Promise<GatewayQueryResult<Row>>;
2615
+ private base;
2444
2616
  }
2445
2617
  /**
2446
2618
  * Member-facing gateway catalog: connectors/resources the caller can read, plus `invoke`.
2447
2619
  */
2448
2620
  declare class GatewayCatalogClient {
2449
2621
  private readonly http;
2450
- private readonly base;
2451
- constructor(http: HttpClient, tenantBase: string);
2622
+ private readonly tenantIdOrSlug;
2623
+ private readonly tenantResolver?;
2624
+ constructor(http: HttpClient, tenantIdOrSlug: string, tenantResolver?: TenantResolver | undefined);
2452
2625
  /** ResourceKind capability catalog (global, tenant-independent). Member OK. */
2453
2626
  listKinds(opts?: RequestOptions): Promise<CatalogKind[]>;
2454
2627
  /** Connectors the caller has read access to (1+ readable resource). Member OK. */
@@ -2476,6 +2649,7 @@ declare class GatewayCatalogClient {
2476
2649
  * Catalog list + each resource's detail (with `allowedColumns`) in one call. Member OK.
2477
2650
  * Issues one detail request per resource (N+1) — avoid over large catalogs / in tight loops.
2478
2651
  */
2652
+ private base;
2479
2653
  listResourcesWithDetail(filter?: CatalogResourceFilter, opts?: RequestOptions): Promise<CatalogResourceDetail[]>;
2480
2654
  }
2481
2655
  /** True when the response is allowed (typed narrowing convenience). */
@@ -2538,6 +2712,20 @@ interface OAuthTokenResponse {
2538
2712
  scope?: string;
2539
2713
  raw: Record<string, unknown>;
2540
2714
  }
2715
+ interface OAuthTenantSelectInput {
2716
+ clientId: string;
2717
+ redirectUri: string;
2718
+ tenantId: string;
2719
+ scope?: string;
2720
+ state?: string;
2721
+ codeChallenge?: string;
2722
+ codeChallengeMethod?: string;
2723
+ nonce?: string;
2724
+ resource?: string;
2725
+ }
2726
+ interface OAuthTenantSelectResponse {
2727
+ redirectTo: string;
2728
+ }
2541
2729
  interface DeviceAuthorizationResponse {
2542
2730
  deviceCode: string;
2543
2731
  userCode: string;
@@ -2602,6 +2790,7 @@ declare class IdentityClient {
2602
2790
  readonly oidc: IdentityOIDCClient;
2603
2791
  readonly deviceCode: IdentityDeviceCodeClient;
2604
2792
  readonly systemOAuthClients: IdentitySystemOAuthClientsClient;
2793
+ readonly invitations: IdentityInvitationsClient;
2605
2794
  constructor(http: HttpClient, defaultTenantSlug?: string);
2606
2795
  /** @deprecated Use sdk.identity.pat.issue(). Kept until 1.0 RC migration. */
2607
2796
  issuePersonalAccessToken(input: IssuePersonalAccessTokenInput, opts?: RequestOptions): Promise<IssuePersonalAccessTokenResult>;
@@ -2682,9 +2871,23 @@ declare class IdentityOAuthClient {
2682
2871
  * catch (e) { if (e instanceof OAuthError) /* invalid_redirect_uri / invalid_client_metadata *\/ }
2683
2872
  */
2684
2873
  registerMcpClient(input: RegisterMcpClientInput, opts?: RequestOptions): Promise<RegisterMcpClientResult>;
2874
+ /**
2875
+ * Complete the OAuth tenant picker step for multi-tenant users. The backend
2876
+ * returns a JSON `redirect_to` URL; browser/SPAs should navigate there.
2877
+ */
2878
+ selectTenant(input: OAuthTenantSelectInput, opts?: RequestOptions): Promise<OAuthTenantSelectResponse>;
2685
2879
  getClient(clientId: string, opts?: RequestOptions): Promise<SystemOAuthClient>;
2686
2880
  revokeOwnGrant(clientId: string, opts?: RequestOptions): Promise<void>;
2687
2881
  }
2882
+ declare class IdentityInvitationsClient {
2883
+ private readonly http;
2884
+ constructor(http: HttpClient);
2885
+ /**
2886
+ * Accept a tenant invitation addressed to the current authenticated user.
2887
+ * The backend returns 204 on success.
2888
+ */
2889
+ accept(invitationId: string, opts?: RequestOptions): Promise<void>;
2890
+ }
2688
2891
  declare class IdentityOIDCClient {
2689
2892
  private readonly http;
2690
2893
  private readonly defaultTenantSlug?;
@@ -2833,14 +3036,14 @@ declare class PublicationRequestsClient {
2833
3036
  * only — non-admins get `PermissionDeniedError`.
2834
3037
  *
2835
3038
  * @example happy
2836
- * const page = await sdk.publicationRequests.listPending({ pageSize: 20 })
3039
+ * const page = await sdk.publicationRequests.listPending('tenant_uuid', { pageSize: 20 })
2837
3040
  * for (const pr of page.items) console.log(pr.appId, pr.requesterId, pr.reason)
2838
3041
  *
2839
3042
  * @example failure
2840
- * try { await sdk.publicationRequests.listPending() }
3043
+ * try { await sdk.publicationRequests.listPending('', {}) }
2841
3044
  * catch (e) { if (e instanceof NotAdminError) /* not platform admin *\/ }
2842
3045
  */
2843
- listPending(opts?: ListOptions): Promise<PaginatedList<PublicationRequest>>;
3046
+ listPending(tenantId: string, opts?: ListOptions): Promise<PaginatedList<PublicationRequest>>;
2844
3047
  /**
2845
3048
  * List settled (approved/rejected) publication requests for a tenant
2846
3049
  * (reviewer-gated). `tenantId` is required by the backend route — passing it
@@ -2962,6 +3165,8 @@ declare class AxHubClient {
2962
3165
  private _publicationRequests?;
2963
3166
  private _tenants?;
2964
3167
  private _config?;
3168
+ private _cost?;
3169
+ private _inviteLinks?;
2965
3170
  constructor(opts: AxHubClientOptions | AxHubInternalOptions);
2966
3171
  resolveTenantSlug(perCall?: string): string;
2967
3172
  get apps(): AppsClient;
@@ -2975,6 +3180,8 @@ declare class AxHubClient {
2975
3180
  get gateway(): GatewayClient;
2976
3181
  get identity(): IdentityClient;
2977
3182
  get tenants(): TenantsClient;
3183
+ get cost(): CostClient;
3184
+ get inviteLinks(): InviteLinksClient;
2978
3185
  /**
2979
3186
  * Admin namespace for publication-request review workflow. Separated from
2980
3187
  * `sdk.apps.publication` (which is owner-scoped: submit/list/unpublish own
@@ -3017,4 +3224,4 @@ declare class AxHubClient {
3017
3224
  tenant(tenantSlug: string): TenantScopedClient;
3018
3225
  }
3019
3226
 
3020
- export { AbortError, AccessDeniedError, type AddColumnInput, type AddCommentInput, type AddGrantInput, AlreadyAccessedError, AlreadyActiveError, AlreadyDeletedError, AlreadyInactiveError, AlreadyMemberError, AlreadyRevokedError, AlreadySettledError, type AppAccess, type AppAvailability, type AppCategory, type AppID, type AppId, type AppInvitation, type AppMember, type AppPublicationStatus, type AppResponse, type AppResponseCategory, type AppResponseOwner, type AppReviewStatus, AppScopedClient, AppScopedDataClient, type AppSlug, type AppSort, type AppStatus, type AppTable, type AppTemplate, AppUnavailableError, type AppVisibility, AppsClient, type AuditEventID, type AuthProvider, type AuthRing, AuthorizationPendingError, AxHubClient, type AxHubClientOptions, AxHubError, type AxHubErrorInit, BadRequestError, type BootstrapAccepted, type BootstrapStage, type BootstrapStatus, type BootstrapStatusValue, type Branded, type BrowseRowsOptions, type CatalogAncestor, type CatalogConnector, type CatalogKind, type CatalogKindAction, type CatalogPermissionsReadDetail, type CatalogPermissionsReadList, type CatalogResourceDetail, type CatalogResourceFilter, type CatalogResourceView, type CatalogTag, type CheckAvailabilityInput, type ColumnType, type ColumnTypeOption, type Comment, ConfigClient, ConfigurationError, ConflictError, type ConnectGitInput, type ConnectorID, type CreateAppInput, type CreateDeploymentInput, type CreateOAuthClientInput, type CreateTableInput, type CursorBuildOptions, type CursorDirection, DEFAULT_BASE_URL, type DataBulkResult, DataClient, type DataCountOptions, type DataGetOptions, type DataListOptions, type DataOrderBy, DataTableClient, type DataTableSchema, DecodeError, type DeploymentFailureReason, type DeploymentID, type DeploymentId, type DeploymentResponse, type DeploymentStatus, DeploymentsClient, type DeviceAuthorizationResponse, DeviceFlowDeniedError, DeviceFlowTimeoutError, type DiscoverAppsOptions, type DiscoverFeedOptions, type DiscoverOptions, DomainTakenError, DuplicateError, EmptyError, type EngineCapability, type EnvVar, ExpiredTokenError, type FetchLike, type FetchLogsOptions, type FieldAvailability, type FieldError, ForbiddenError, GatewayCatalogClient, GatewayClient, type GatewayQueryColumn, type GatewayQueryInput, type GatewayQueryResult, type GitConnection, type GitConnectionSetup, type GitConnectionStatus, type GithubAccount, type GithubInstallStart, type GithubRepo, type GithubReposPage, type GrantID, type GrantPrincipalType, type GrantScope, type IconPreCreateInput, type IconPreCreateResult, IdentityClient, IdentityDeviceCodeClient, IdentityMeClient, IdentityOAuthClient, IdentityOIDCClient, IdentityPATClient, type IdentityProvider, IdentitySystemOAuthClientsClient, type InferRow, type InstallStartInput, InternalServerError, IntrospectFailedError, InvalidClientError, InvalidCursorError, InvalidGrantError, InvalidPathError, InvalidRequestError, InvalidScopeError, InvalidStateTransitionError, InvalidTargetError, InvalidTokenError, InvalidValueError, InvitationExpiredError, type InviteUserInput, type InvokeInput, type InvokeResult, type IssuePersonalAccessTokenInput, type IssuePersonalAccessTokenResult, type KeysetCursor, LastAdminError, LegacyCursorError, type LikeResult, type LikeStatus, type ListAllItem, type ListAllOptions, type ListAppsOptions, type ListMembersOptions, type ListOptions, type ListReposOptions, type LogLine, type Logger, type LogsPage, type MeResponse, type MockClientOptions, type MockFixtures, MockInProductionError, type MockRow, type MockSchemas, MockStore, NetworkError, NoAuth, NotAdminError, NotAllowedError, NotDeletedError, NotFoundError, NotMemberError, type OAuthClient, type OAuthClientWithSecret, OAuthError, type OAuthErrorInit, OAuthServerError, type OAuthTokenResponse, type OrderByField, type OrderDirection, type PATID, type PATSummary, type PageRequestOptions, type PaginatedList, type ParsedFrame, type PatId, PendingExistsError, PermanentlyDeletedError, PermissionDeniedError, PoolStaleError, PreconditionFailedError, type PublicConfig, type PublicationRequest, type PublicationRequestStatus, PublicationRequestsClient, type QueryExpr, type RateLimitStrategy, RateLimitedError, type RegisterMcpClientInput, type RegisterMcpClientResult, type RequestId, type RequestOptions, RequiredError, type ResourceID, type RetryInfo, type SSEStream, type SSEStreamOptions, ScanLimitExceededError, SchemaCache, type SchemaCacheOptions, SchemaNameTakenError, type SchemaShapeFromRow, type SelectColumns, type SettlePublicationInput, type SignIconUploadInput, type SignIconUploadResult, SlowDownError, SlugTakenError, type StartBootstrapInput, StaticTokenAuth, type StaticTokenAuthOptions, StreamConsumedError, type StreamItem, type SubjectID, type SubmitPublicationInput, type SystemOAuthClient, type TableAvailability, type TableColumn, type TableConstraint, type TableGrant, type TableID, type TableIndex, TableNotFoundError, type TableRowColumn, type TableRowsMeta, type TableRowsPage, type TableSchema, type TagID, TemporarilyUnavailableError, type Tenant, TenantGatewayClient, type TenantID, type TenantId, TenantIdRequiredError, TenantScopedAppsClient, TenantScopedClient, type TenantSlug, TenantSlugRequiredError, TenantsClient, TimeoutError, TokenExpiredError, TokenInvalidError, TokenMissingError, type TokenType, UnauthenticatedError, UnauthorizedClientError, UnavailableError, type UnlikeResult, type UnpublishInput, UnsupportedGrantTypeError, type UpdateAppInput, type UpdateGitConnectionInput, type UserID, type UserId, ValidationError, type VerifyWebhookInput, type VerifyWebhookResult, WebhookVerificationError, type WebhookVerifyReason, and, asAppId, asAppSlug, asDeploymentId, asPatId, asRequestId, asTenantId, asTenantSlug, asUserId, assertMockModeAllowed, createMockStore, cursorFromRow, decodeCursor, defineSchema, encodeCursor, escapeLike, formatErrorMessage, getAccessibleColumns, getMaskHint, id, isAllowed, isPolicyDeny, isSqlFormatError, not, or, orderByFingerprint, parseRetryAfter, raw, schemaCacheKey, signWebhook, tableFromPath, verifyWebhook, where };
3227
+ export { AbortError, AccessDeniedError, type AddColumnInput, type AddCommentInput, type AddGrantInput, AlreadyAccessedError, AlreadyActiveError, AlreadyDeletedError, AlreadyInactiveError, AlreadyMemberError, AlreadyRevokedError, AlreadySettledError, type AppAccess, type AppAvailability, type AppCategory, type AppID, type AppId, type AppInvitation, type AppMember, type AppPublicationStatus, type AppResponse, type AppResponseCategory, type AppResponseOwner, type AppReviewStatus, AppScopedClient, AppScopedDataClient, type AppSlug, type AppSort, type AppStatus, type AppTable, type AppTemplate, AppUnavailableError, type AppVisibility, AppsClient, type AuditEventID, type AuthProvider, type AuthRing, AuthorizationPendingError, AxHubClient, type AxHubClientOptions, AxHubError, type AxHubErrorInit, BadRequestError, type BootstrapAccepted, type BootstrapStage, type BootstrapStatus, type BootstrapStatusValue, type Branded, type BrowseRowsOptions, type CatalogAncestor, type CatalogConnector, type CatalogKind, type CatalogKindAction, type CatalogPermissionsReadDetail, type CatalogPermissionsReadList, type CatalogResourceDetail, type CatalogResourceFilter, type CatalogResourceView, type CatalogTag, type CheckAvailabilityInput, type ColumnType, type ColumnTypeOption, type Comment, ConfigClient, ConfigurationError, ConflictError, type ConnectGitInput, type ConnectorID, type CostByApp, type CostByAppOptions, type CostByAppRow, type CostByCostCenter, type CostCenterRow, CostClient, type CostExportOptions, type CostQueryOptions, type CostSummary, type CostTimeseries, type CostTimeseriesOptions, type CostTimeseriesPoint, type CreateAppInput, type CreateDeploymentInput, type CreateInviteLinkInput, type CreateOAuthClientInput, type CreateTableInput, type CursorBuildOptions, type CursorDirection, DEFAULT_BASE_URL, type DataBulkResult, DataClient, type DataCountOptions, type DataGetOptions, type DataListOptions, type DataOrderBy, DataTableClient, type DataTableSchema, DecodeError, type DeploymentFailureReason, type DeploymentID, type DeploymentId, type DeploymentResponse, type DeploymentStatus, DeploymentsClient, type DeviceAuthorizationResponse, DeviceFlowDeniedError, DeviceFlowTimeoutError, type DiscoverAppsOptions, type DiscoverFeedOptions, type DiscoverOptions, DomainTakenError, DuplicateError, EmptyError, type EngineCapability, type EnvVar, ExpiredTokenError, type FetchLike, type FetchLogsOptions, type FieldAvailability, type FieldError, ForbiddenError, GatewayCatalogClient, GatewayClient, type GatewayQueryColumn, type GatewayQueryInput, type GatewayQueryResult, type GitConnection, type GitConnectionSetup, type GitConnectionStatus, type GithubAccount, type GithubInstallStart, type GithubRepo, type GithubReposPage, type GrantID, type GrantPrincipalType, type GrantScope, type IconPreCreateInput, type IconPreCreateResult, IdentityClient, IdentityDeviceCodeClient, IdentityInvitationsClient, IdentityMeClient, IdentityOAuthClient, IdentityOIDCClient, IdentityPATClient, type IdentityProvider, IdentitySystemOAuthClientsClient, type InferRow, type InstallStartInput, InternalServerError, IntrospectFailedError, InvalidClientError, InvalidCursorError, InvalidExpiryError, InvalidGrantError, InvalidPathError, InvalidRequestError, InvalidScopeError, InvalidStateTransitionError, InvalidTargetError, InvalidTokenError, InvalidValueError, InvitationExpiredError, type InviteLink, type InviteLinkAcceptResult, type InviteLinkPreview, InviteLinksClient, type InviteUserInput, type InvokeInput, type InvokeResult, type IssuePersonalAccessTokenInput, type IssuePersonalAccessTokenResult, type KeysetCursor, LastAdminError, LegacyCursorError, type LikeResult, type LikeStatus, LinkInvalidError, type ListAllItem, type ListAllOptions, type ListAppsOptions, type ListMembersOptions, type ListOptions, type ListReposOptions, type LogLine, type Logger, type LogsPage, type MeResponse, type MockClientOptions, type MockFixtures, MockInProductionError, type MockRow, type MockSchemas, MockStore, NetworkError, NoAuth, NotAdminError, NotAllowedError, NotDeletedError, NotFoundError, NotMemberError, type OAuthClient, type OAuthClientWithSecret, OAuthError, type OAuthErrorInit, OAuthServerError, type OAuthTenantSelectInput, type OAuthTenantSelectResponse, type OAuthTokenResponse, type OrderByField, type OrderDirection, type PATID, type PATSummary, type PageRequestOptions, type PaginatedList, type ParsedFrame, type PatId, PendingExistsError, PermanentlyDeletedError, PermissionDeniedError, PoolStaleError, PreconditionFailedError, type PublicConfig, type PublicationRequest, type PublicationRequestStatus, PublicationRequestsClient, type PushableAtomQueryExpr, type PushableQueryExpr, type QueryExpr, type RateLimitStrategy, RateLimitedError, type RegisterMcpClientInput, type RegisterMcpClientResult, type RequestId, type RequestOptions, RequiredError, type ResourceID, type RetryInfo, type SSEStream, type SSEStreamOptions, ScanLimitExceededError, SchemaCache, type SchemaCacheOptions, SchemaNameTakenError, type SchemaShapeFromRow, type SelectColumns, type SettlePublicationInput, type SignIconUploadInput, type SignIconUploadResult, SlowDownError, SlugTakenError, type StartBootstrapInput, StaticTokenAuth, type StaticTokenAuthOptions, StreamConsumedError, type StreamItem, type SubjectID, type SubmitPublicationInput, type SystemOAuthClient, type TableAvailability, type TableColumn, type TableConstraint, type TableGrant, type TableID, type TableIndex, TableNotFoundError, type TableRowColumn, type TableRowsMeta, type TableRowsPage, type TableSchema, type TagID, TemporarilyUnavailableError, type Tenant, TenantCostClient, TenantGatewayClient, type TenantID, type TenantId, TenantIdRequiredError, TenantInviteLinksClient, TenantScopedAppsClient, TenantScopedClient, type TenantSlug, TenantSlugRequiredError, TenantsClient, TimeoutError, TokenExpiredError, TokenInvalidError, TokenMissingError, type TokenType, UnauthenticatedError, UnauthorizedClientError, UnavailableError, type UnlikeResult, type UnpublishInput, UnsupportedGrantTypeError, type UpdateAppInput, type UpdateGitConnectionInput, type UserID, type UserId, ValidationError, type VerifyWebhookInput, type VerifyWebhookResult, WebhookVerificationError, type WebhookVerifyReason, and, asAppId, asAppSlug, asDeploymentId, asPatId, asRequestId, asTenantId, asTenantSlug, asUserId, assertMockModeAllowed, createMockStore, cursorFromRow, decodeCursor, defineSchema, encodeCursor, escapeLike, formatErrorMessage, getAccessibleColumns, getMaskHint, id, isAllowed, isPolicyDeny, isSqlFormatError, not, or, orderByFingerprint, parseRetryAfter, raw, schemaCacheKey, signWebhook, tableFromPath, verifyWebhook, where };