@zixt/host 0.0.92 → 0.0.94

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.
Files changed (2) hide show
  1. package/dist/index.js +86 -3
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -28,7 +28,7 @@ import { homedir as homedir3 } from "node:os";
28
28
  // package.json
29
29
  var package_default = {
30
30
  name: "@zixt/host",
31
- version: "0.0.92",
31
+ version: "0.0.94",
32
32
  type: "module",
33
33
  exports: {
34
34
  ".": "./src/client.ts",
@@ -15802,6 +15802,15 @@ var ApiAuthBase = {
15802
15802
  label: external_exports.string().min(1).max(120),
15803
15803
  description: external_exports.string().max(2e3).nullable()
15804
15804
  };
15805
+ var OAuthTokenEndpointAuthMethod = external_exports.enum([
15806
+ "none",
15807
+ "client_secret_basic",
15808
+ "client_secret_post"
15809
+ ]);
15810
+ var OAuthHttpUrl = external_exports.url().max(2e3).refine((value) => {
15811
+ const url3 = new URL(value);
15812
+ return ["http:", "https:"].includes(url3.protocol) && !url3.username && !url3.password;
15813
+ }, "OAuth endpoints must be credential-free HTTP(S) URLs");
15805
15814
  var ApiAuthScheme = external_exports.discriminatedUnion("type", [
15806
15815
  external_exports.object({
15807
15816
  ...ApiAuthBase,
@@ -15823,6 +15832,17 @@ var ApiAuthScheme = external_exports.discriminatedUnion("type", [
15823
15832
  external_exports.object({ id: external_exports.literal("username"), label: external_exports.string() }).strict(),
15824
15833
  external_exports.object({ id: external_exports.literal("password"), label: external_exports.string() }).strict()
15825
15834
  ])
15835
+ }).strict(),
15836
+ external_exports.object({
15837
+ ...ApiAuthBase,
15838
+ type: external_exports.literal("oauth2"),
15839
+ authorizationUrl: OAuthHttpUrl,
15840
+ tokenUrl: OAuthHttpUrl,
15841
+ scopes: external_exports.array(external_exports.string().min(1).max(500)).max(100),
15842
+ usePkce: external_exports.boolean().default(true),
15843
+ tokenEndpointAuthMethod: OAuthTokenEndpointAuthMethod.default("none"),
15844
+ /** Optional provider-supported static-token fallback, presented as Bearer auth. */
15845
+ fields: external_exports.array(external_exports.object({ id: external_exports.literal("token"), label: external_exports.string() }).strict()).max(1)
15826
15846
  }).strict()
15827
15847
  ]);
15828
15848
  var ApiAuthSchemeOverrideId = external_exports.string().min(1).max(120).regex(/^[A-Za-z0-9_.:-]+$/);
@@ -15842,9 +15862,22 @@ var ApiBearerAuthSchemeOverride = external_exports.object({
15842
15862
  description: external_exports.string().min(1).max(2e3),
15843
15863
  tokenLabel: external_exports.string().min(1).max(120)
15844
15864
  }).strict();
15865
+ var ApiOAuth2AuthSchemeOverride = external_exports.object({
15866
+ schemeId: ApiAuthSchemeOverrideId,
15867
+ type: external_exports.literal("oauth2"),
15868
+ label: external_exports.string().min(1).max(120),
15869
+ description: external_exports.string().min(1).max(2e3),
15870
+ authorizationUrl: OAuthHttpUrl.optional(),
15871
+ tokenUrl: OAuthHttpUrl.optional(),
15872
+ scopes: external_exports.array(external_exports.string().min(1).max(500)).max(100).optional(),
15873
+ usePkce: external_exports.boolean(),
15874
+ tokenEndpointAuthMethod: OAuthTokenEndpointAuthMethod,
15875
+ fallbackTokenLabel: external_exports.string().min(1).max(120).optional()
15876
+ }).strict();
15845
15877
  var ApiAuthSchemeOverride = external_exports.discriminatedUnion("type", [
15846
15878
  ApiBasicAuthSchemeOverride,
15847
- ApiBearerAuthSchemeOverride
15879
+ ApiBearerAuthSchemeOverride,
15880
+ ApiOAuth2AuthSchemeOverride
15848
15881
  ]);
15849
15882
  var NormalizedApiDefinition = external_exports.object({
15850
15883
  sourceFormat: external_exports.enum(["openapi-3.0", "openapi-3.1", "swagger-2.0", "natural-language"]),
@@ -15896,7 +15929,7 @@ var IntegrationDefinitionSummary = external_exports.object({
15896
15929
  isBuiltIn: external_exports.boolean(),
15897
15930
  revision: external_exports.number().int().min(1),
15898
15931
  operationCount: external_exports.number().int().min(0),
15899
- authKinds: external_exports.array(external_exports.enum(["none", "apiKey", "bearer", "basic"])).max(4),
15932
+ authKinds: external_exports.array(external_exports.enum(["none", "apiKey", "bearer", "basic", "oauth2"])).max(5),
15900
15933
  updatedAt: IsoDate
15901
15934
  }).strict();
15902
15935
  var IntegrationDefinition = IntegrationDefinitionSummary.extend({
@@ -16052,6 +16085,13 @@ var ApiConnection = external_exports.object({
16052
16085
  configuredFields: external_exports.array(external_exports.string().min(1).max(120)).max(10)
16053
16086
  }).strict()
16054
16087
  ),
16088
+ oauth: external_exports.object({
16089
+ schemeId: external_exports.string().min(1).max(120),
16090
+ status: external_exports.enum(["not_connected", "connected", "expired", "error"]),
16091
+ clientIdConfigured: external_exports.boolean(),
16092
+ scopes: external_exports.array(external_exports.string().min(1).max(500)).max(100),
16093
+ callbackUrl: external_exports.url().max(2e3)
16094
+ }).strict().nullable(),
16055
16095
  disabledOperationIds: external_exports.array(external_exports.string().min(1).max(240)),
16056
16096
  health: ApiConnectionHealth,
16057
16097
  lastCheckedAt: IsoDate.nullable(),
@@ -16060,6 +16100,13 @@ var ApiConnection = external_exports.object({
16060
16100
  createdAt: IsoDate,
16061
16101
  updatedAt: IsoDate
16062
16102
  }).strict();
16103
+ var ApiOAuthClientConfig = external_exports.object({
16104
+ schemeId: external_exports.string().min(1).max(120),
16105
+ clientId: external_exports.string().min(1).max(512),
16106
+ /** Write-only. Omit on update to retain the vaulted client secret. */
16107
+ clientSecret: external_exports.string().min(1).max(1e4).optional(),
16108
+ scopes: external_exports.array(external_exports.string().min(1).max(500)).max(100).optional()
16109
+ }).strict();
16063
16110
  var ListApiConnectionsResponse = external_exports.object({ connections: external_exports.array(ApiConnection) }).strict();
16064
16111
  var CreateApiConnectionRequest = external_exports.object({
16065
16112
  definitionId: IntegrationDefinitionId,
@@ -16071,6 +16118,7 @@ var CreateApiConnectionRequest = external_exports.object({
16071
16118
  external_exports.string().min(1).max(120),
16072
16119
  external_exports.record(external_exports.string().min(1).max(120), external_exports.string().min(1).max(2e4))
16073
16120
  ),
16121
+ oauth: ApiOAuthClientConfig.optional(),
16074
16122
  disabledOperationIds: external_exports.array(external_exports.string().min(1).max(240)).default([])
16075
16123
  }).strict();
16076
16124
  var UpdateApiConnectionRequest = external_exports.object({
@@ -16082,6 +16130,7 @@ var UpdateApiConnectionRequest = external_exports.object({
16082
16130
  external_exports.string().min(1).max(120),
16083
16131
  external_exports.record(external_exports.string().min(1).max(120), external_exports.string().min(1).max(2e4))
16084
16132
  ).optional(),
16133
+ oauth: ApiOAuthClientConfig.nullable().optional(),
16085
16134
  disabledOperationIds: external_exports.array(external_exports.string().min(1).max(240)).optional()
16086
16135
  }).strict();
16087
16136
  var ApiInputScalar = external_exports.union([external_exports.string().max(2e4), external_exports.number().finite(), external_exports.boolean()]);
@@ -16100,9 +16149,21 @@ var ApiOperationInput = external_exports.object({
16100
16149
  }
16101
16150
  }
16102
16151
  });
16152
+ var TryApiAuthentication = external_exports.discriminatedUnion("mode", [
16153
+ external_exports.object({ mode: external_exports.literal("saved") }).strict(),
16154
+ external_exports.object({
16155
+ mode: external_exports.literal("one_time"),
16156
+ alternative: external_exports.array(external_exports.string().min(1).max(120)).min(1).max(20).refine((items) => new Set(items).size === items.length, "Schemes must be unique"),
16157
+ credentials: external_exports.record(
16158
+ external_exports.string().min(1).max(120),
16159
+ external_exports.record(external_exports.string().min(1).max(120), external_exports.string().min(1).max(2e4))
16160
+ )
16161
+ }).strict()
16162
+ ]);
16103
16163
  var TryApiOperationRequest = external_exports.object({
16104
16164
  operationId: external_exports.string().min(1).max(240),
16105
16165
  input: ApiOperationInput.default({ path: {}, query: {}, headers: {} }),
16166
+ authentication: TryApiAuthentication.default({ mode: "saved" }),
16106
16167
  confirmed: external_exports.boolean().default(false)
16107
16168
  }).strict();
16108
16169
  var ApiOperationResult = external_exports.object({
@@ -16110,6 +16171,7 @@ var ApiOperationResult = external_exports.object({
16110
16171
  status: external_exports.number().int().min(0).max(999).nullable(),
16111
16172
  statusText: external_exports.string().max(500),
16112
16173
  contentType: external_exports.string().max(500).nullable(),
16174
+ headers: external_exports.record(external_exports.string().min(1).max(200), external_exports.string().max(8e3)).refine((items) => Object.keys(items).length <= 100, "Too many response headers").default({}),
16113
16175
  body: external_exports.string().max(2e5),
16114
16176
  truncated: external_exports.boolean(),
16115
16177
  durationMs: external_exports.number().int().min(0),
@@ -21788,6 +21850,9 @@ var REQUEST_BODY_LIMIT = 1e6;
21788
21850
  var REQUEST_URL_LIMIT = 2e4;
21789
21851
  var REQUEST_HEADERS_LIMIT = 64e3;
21790
21852
  var REQUEST_TIMEOUT_MS2 = 3e4;
21853
+ var RESPONSE_HEADERS_LIMIT = 64e3;
21854
+ var RESPONSE_HEADER_VALUE_LIMIT = 8e3;
21855
+ var RESPONSE_HEADER_COUNT_LIMIT = 100;
21791
21856
  var FORBIDDEN_HEADERS = /* @__PURE__ */ new Set([
21792
21857
  "authorization",
21793
21858
  "cookie",
@@ -21797,6 +21862,7 @@ var FORBIDDEN_HEADERS = /* @__PURE__ */ new Set([
21797
21862
  "proxy-authorization",
21798
21863
  "transfer-encoding"
21799
21864
  ]);
21865
+ var PRIVATE_RESPONSE_HEADERS = /* @__PURE__ */ new Set(["set-cookie", "set-cookie2"]);
21800
21866
  function operationFor(connection, operationId) {
21801
21867
  const operation = connection.operations.find(({ id }) => id === operationId);
21802
21868
  if (!operation) throw new Error("That API operation is not available on this connection.");
@@ -21855,6 +21921,21 @@ async function boundedBody(response) {
21855
21921
  }
21856
21922
  return { body: new TextDecoder("utf-8", { fatal: false }).decode(joined), truncated };
21857
21923
  }
21924
+ function boundedHeaders(response) {
21925
+ const result = {};
21926
+ let bytes = 0;
21927
+ for (const [name, rawValue] of response.headers) {
21928
+ const normalized = name.toLowerCase();
21929
+ if (PRIVATE_RESPONSE_HEADERS.has(normalized)) continue;
21930
+ if (Object.keys(result).length >= RESPONSE_HEADER_COUNT_LIMIT) break;
21931
+ const value = rawValue.slice(0, RESPONSE_HEADER_VALUE_LIMIT);
21932
+ const nextBytes = Buffer.byteLength(normalized) + Buffer.byteLength(value);
21933
+ if (bytes + nextBytes > RESPONSE_HEADERS_LIMIT) break;
21934
+ result[normalized] = value;
21935
+ bytes += nextBytes;
21936
+ }
21937
+ return result;
21938
+ }
21858
21939
  async function executeApiOperation(input) {
21859
21940
  const started = performance.now();
21860
21941
  try {
@@ -21975,6 +22056,7 @@ async function executeApiOperation(input) {
21975
22056
  status: response.status,
21976
22057
  statusText: response.statusText.slice(0, 500),
21977
22058
  contentType: response.headers.get("content-type")?.slice(0, 500) ?? null,
22059
+ headers: boundedHeaders(response),
21978
22060
  ...payload,
21979
22061
  durationMs: Math.max(0, Math.round(performance.now() - started)),
21980
22062
  error: response.ok ? null : `The API returned HTTP ${response.status}.`
@@ -21985,6 +22067,7 @@ async function executeApiOperation(input) {
21985
22067
  status: null,
21986
22068
  statusText: "",
21987
22069
  contentType: null,
22070
+ headers: {},
21988
22071
  body: "",
21989
22072
  truncated: false,
21990
22073
  durationMs: Math.max(0, Math.round(performance.now() - started)),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zixt/host",
3
- "version": "0.0.92",
3
+ "version": "0.0.94",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./src/client.ts",