@apilift/cli 1.5.11 → 1.5.12
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/apilift-collector.js +42 -13
- package/dist/apilift-native-host.js +49 -13
- package/dist/apilift.js +8481 -1226
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/plugin/.codex-plugin/plugin.json +1 -1
- package/dist/plugin/skills/discover/SKILL.md +2 -2
- package/dist/plugin/skills/discover/references/browser-capture.md +1 -1
- package/dist/plugin/skills/discover/references/documented-api.md +2 -0
- package/dist/plugin/skills/discover/references/operation-contract.md +10 -2
- package/package.json +3 -2
|
@@ -27953,7 +27953,16 @@ function parseUrl(value) {
|
|
|
27953
27953
|
function loopback(host) {
|
|
27954
27954
|
return host === "localhost" || host === "127.0.0.1" || host === "[::1]";
|
|
27955
27955
|
}
|
|
27956
|
-
|
|
27956
|
+
function bodyIssues(v2, ctx) {
|
|
27957
|
+
if (v2.form !== void 0 && v2.body !== void 0)
|
|
27958
|
+
ctx.addIssue({ code: "custom", message: "form and JSON body are mutually exclusive" });
|
|
27959
|
+
if ((v2.form !== void 0 || v2.body !== void 0) && ["GET", "HEAD"].includes(v2.method))
|
|
27960
|
+
ctx.addIssue({ code: "custom", message: "GET/HEAD cannot have a request body" });
|
|
27961
|
+
for (const [name, value] of Object.entries(v2.headers ?? {}))
|
|
27962
|
+
if (name.toLowerCase() === "content-type" && (v2.form !== void 0 || v2.body !== void 0) && value !== (v2.form !== void 0 ? "application/x-www-form-urlencoded" : "application/json"))
|
|
27963
|
+
ctx.addIssue({ code: "custom", message: "Content-Type conflicts with declared body encoding" });
|
|
27964
|
+
}
|
|
27965
|
+
var import__, resourceKinds, resourceKindSchema, segmentSchema, appSlugSchema, actionNameSchema, generatedNameSchema, inputNameSchema, pointerSchema, categorySlugs, categorySchema, title, description, requiredDescription, originSchema, httpUrlSchema, requestUrlSchema, ajv, jsonSchema, valueSchema, htmlFieldSchema, htmlExtractionSchema, continuationSchema, responseSchema, baseRequestSchema, readPreparationSchema, requestSchema, proofPointer, proofComparison, proofKey, proofSelection, proofSchema, appDefinitionSchema, entityDefinitionSchema, generatedSchema, executableActionSchema, unavailableActionSchema, actionDefinitionSchema, locatorSchema, observeSchema, injectSchema, credentialSchema, probeSchema, transportDefinitionSchema, browserContextDefinitionSchema, definitionSchemas;
|
|
27957
27966
|
var init_schema = __esm({
|
|
27958
27967
|
"../../packages/core/dist/definitions/schema.js"() {
|
|
27959
27968
|
"use strict";
|
|
@@ -28000,17 +28009,37 @@ var init_schema = __esm({
|
|
|
28000
28009
|
}
|
|
28001
28010
|
}, "Expected a valid JSON Schema draft 2020-12 document");
|
|
28002
28011
|
valueSchema = external_exports.lazy(() => external_exports.union([external_exports.null(), external_exports.boolean(), external_exports.number(), external_exports.string(), external_exports.array(valueSchema), external_exports.record(external_exports.string(), valueSchema)]));
|
|
28003
|
-
|
|
28012
|
+
htmlFieldSchema = external_exports.lazy(() => external_exports.strictObject({ selector: external_exports.string().min(1).max(2e3).optional(), read: external_exports.enum(["text", "attribute", "value", "checked", "json"]).optional(), attribute: external_exports.string().min(1).optional(), type: external_exports.enum(["string", "number", "integer", "boolean"]).optional(), optional: external_exports.boolean().optional(), many: external_exports.boolean().optional(), fields: external_exports.record(external_exports.string(), htmlFieldSchema).optional() }).superRefine((v2, ctx) => {
|
|
28013
|
+
if (v2.read === "attribute" && !v2.attribute)
|
|
28014
|
+
ctx.addIssue({ code: "custom", message: "Attribute extraction requires attribute" });
|
|
28015
|
+
if (v2.fields && (v2.read || v2.type || v2.attribute))
|
|
28016
|
+
ctx.addIssue({ code: "custom", message: "Nested fields exclude scalar extraction" });
|
|
28017
|
+
}));
|
|
28018
|
+
htmlExtractionSchema = external_exports.strictObject({ marker: external_exports.string().min(1).max(2e3), fields: external_exports.record(external_exports.string(), htmlFieldSchema).refine((v2) => Object.keys(v2).length > 0), errors: external_exports.string().min(1).max(2e3).optional() });
|
|
28019
|
+
continuationSchema = external_exports.strictObject({ statuses: external_exports.array(external_exports.number().int().min(200).max(599)).min(1).max(20), format: external_exports.enum(["json", "html"]), path: pointerSchema.optional(), selector: external_exports.string().min(1).optional(), attribute: external_exports.string().min(1).optional() }).superRefine((v2, ctx) => {
|
|
28020
|
+
if (v2.format === "json" ? v2.path === void 0 || !!v2.selector || !!v2.attribute : !v2.selector || !v2.attribute || v2.path !== void 0)
|
|
28021
|
+
ctx.addIssue({ code: "custom", message: "JSON continuation needs path; HTML continuation needs selector and attribute" });
|
|
28022
|
+
});
|
|
28023
|
+
responseSchema = external_exports.strictObject({ format: external_exports.enum(["json", "html"]).optional(), html: htmlExtractionSchema.optional(), continue: external_exports.array(continuationSchema).min(1).max(5).optional(), schema: jsonSchema.optional(), path: pointerSchema.optional(), fields: external_exports.record(external_exports.string(), pointerSchema).optional(), generated: generatedNameSchema.optional() }).superRefine((v2, ctx) => {
|
|
28024
|
+
if (v2.generated && (v2.path !== void 0 || v2.fields !== void 0 || v2.html))
|
|
28025
|
+
ctx.addIssue({ code: "custom", message: "generated excludes path and fields" });
|
|
28026
|
+
if (v2.format === "html" !== !!v2.html)
|
|
28027
|
+
ctx.addIssue({ code: "custom", message: "HTML responses require format: html and html extraction with a page marker" });
|
|
28028
|
+
});
|
|
28029
|
+
baseRequestSchema = external_exports.strictObject({
|
|
28004
28030
|
method: external_exports.enum(["GET", "HEAD", "OPTIONS", "POST", "PUT", "PATCH", "DELETE"]),
|
|
28005
28031
|
url: requestUrlSchema,
|
|
28006
28032
|
headers: external_exports.record(external_exports.string(), valueSchema).optional(),
|
|
28007
28033
|
query: external_exports.record(external_exports.string(), external_exports.union([valueSchema, external_exports.array(valueSchema)])).optional(),
|
|
28008
|
-
body: valueSchema.optional()
|
|
28009
|
-
|
|
28010
|
-
responseSchema = external_exports.strictObject({ schema: jsonSchema.optional(), path: pointerSchema.optional(), fields: external_exports.record(external_exports.string(), pointerSchema).optional(), generated: generatedNameSchema.optional() }).superRefine((v2, ctx) => {
|
|
28011
|
-
if (v2.generated && (v2.path !== void 0 || v2.fields !== void 0))
|
|
28012
|
-
ctx.addIssue({ code: "custom", message: "generated excludes path and fields" });
|
|
28034
|
+
body: valueSchema.optional(),
|
|
28035
|
+
form: external_exports.record(external_exports.string(), valueSchema).optional()
|
|
28013
28036
|
});
|
|
28037
|
+
readPreparationSchema = external_exports.strictObject({ request: baseRequestSchema.superRefine((v2, ctx) => {
|
|
28038
|
+
bodyIssues(v2, ctx);
|
|
28039
|
+
if (v2.method !== "GET")
|
|
28040
|
+
ctx.addIssue({ code: "custom", message: "Preparation and identity checks must use GET" });
|
|
28041
|
+
}), response: responseSchema });
|
|
28042
|
+
requestSchema = baseRequestSchema.extend({ prepare: readPreparationSchema.optional() }).superRefine(bodyIssues);
|
|
28014
28043
|
proofPointer = external_exports.string().refine((value) => {
|
|
28015
28044
|
let valid = true;
|
|
28016
28045
|
const resolved = value.replace(/\{(input|result|generated)\.([^{}]*)\}/gu, (token, kind, ref, offset) => {
|
|
@@ -28026,7 +28055,7 @@ var init_schema = __esm({
|
|
|
28026
28055
|
if (!!v2.where === !!v2.key)
|
|
28027
28056
|
ctx.addIssue({ code: "custom", message: "Select by exactly one of where or key" });
|
|
28028
28057
|
});
|
|
28029
|
-
proofSchema = external_exports.strictObject({ request: requestSchema, effect: external_exports.literal("read").optional(), select: proofSelection.optional(), equals: external_exports.array(proofComparison).min(1).optional(), response:
|
|
28058
|
+
proofSchema = external_exports.strictObject({ request: requestSchema, effect: external_exports.literal("read").optional(), select: proofSelection.optional(), equals: external_exports.array(proofComparison).min(1).optional(), response: responseSchema.optional(), absent: external_exports.literal(true).optional() }).superRefine((v2, ctx) => {
|
|
28030
28059
|
if (!!v2.equals === !!v2.absent)
|
|
28031
28060
|
ctx.addIssue({ code: "custom", message: "Exactly one of equals and absent is required" });
|
|
28032
28061
|
if (v2.select && v2.absent && !v2.select.complete)
|
|
@@ -28072,17 +28101,17 @@ var init_schema = __esm({
|
|
|
28072
28101
|
ctx.addIssue({ code: "custom", path: [key], message: `${key} required for ${v2.in}` });
|
|
28073
28102
|
});
|
|
28074
28103
|
observeSchema = external_exports.strictObject({ kind: external_exports.literal("observe"), request: external_exports.strictObject({ method: external_exports.string(), urlPattern: external_exports.string() }), extract: external_exports.strictObject({ in: external_exports.enum(["request-header", "response-header", "response-body"]), name: external_exports.string().optional(), path: pointerSchema.optional() }), trigger: external_exports.union([external_exports.strictObject({ kind: external_exports.literal("navigate"), url: httpUrlSchema }), external_exports.strictObject({ kind: external_exports.literal("selector"), selector: external_exports.string() })]).optional(), cache: external_exports.literal("browser-session") });
|
|
28075
|
-
injectSchema = external_exports.strictObject({ from: external_exports.union([locatorSchema, observeSchema]), to: external_exports.union([external_exports.strictObject({ in: external_exports.literal("header"), name: external_exports.string() }), external_exports.strictObject({ in: external_exports.literal("query"), name: external_exports.string() }), external_exports.strictObject({ in: external_exports.literal("body"), path: pointerSchema })]) });
|
|
28104
|
+
injectSchema = external_exports.strictObject({ from: external_exports.union([locatorSchema, observeSchema]), to: external_exports.union([external_exports.strictObject({ in: external_exports.literal("header"), name: external_exports.string() }), external_exports.strictObject({ in: external_exports.literal("query"), name: external_exports.string() }), external_exports.strictObject({ in: external_exports.literal("body"), path: pointerSchema }), external_exports.strictObject({ in: external_exports.literal("form"), name: external_exports.string().min(1) })]) });
|
|
28076
28105
|
credentialSchema = external_exports.strictObject({ name: generatedNameSchema, header: external_exports.string().regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/), prefix: external_exports.string().max(80).refine((v2) => !/[\r\n]/.test(v2)).optional() });
|
|
28077
|
-
probeSchema = external_exports.strictObject({ effect: external_exports.literal("read").optional(), request: requestSchema, response:
|
|
28078
|
-
transportDefinitionSchema = external_exports.strictObject({ title, description: requiredDescription, mode: external_exports.enum(["direct", "browser"]), baseUrl: requestUrlSchema.optional(), allowedOrigins: external_exports.array(originSchema).min(1).max(100), browserContext: segmentSchema.optional(), credentials: external_exports.array(credentialSchema).max(16).optional(), inject: external_exports.array(injectSchema).optional(), probes: external_exports.record(external_exports.string(), probeSchema) }).superRefine((v2, ctx) => {
|
|
28106
|
+
probeSchema = external_exports.strictObject({ effect: external_exports.literal("read").optional(), request: requestSchema, response: responseSchema, inputs: jsonSchema.optional() });
|
|
28107
|
+
transportDefinitionSchema = external_exports.strictObject({ title, description: requiredDescription, mode: external_exports.enum(["direct", "browser"]), baseUrl: requestUrlSchema.optional(), allowedOrigins: external_exports.array(originSchema).min(1).max(100), browserContext: segmentSchema.optional(), credentials: external_exports.array(credentialSchema).max(16).optional(), inject: external_exports.array(injectSchema).optional(), identity: readPreparationSchema.extend({ paths: external_exports.array(pointerSchema).min(1).max(8) }).optional(), probes: external_exports.record(external_exports.string(), probeSchema) }).superRefine((v2, ctx) => {
|
|
28079
28108
|
if (new Set(v2.allowedOrigins).size !== v2.allowedOrigins.length)
|
|
28080
28109
|
ctx.addIssue({ code: "custom", path: ["allowedOrigins"], message: "Origins must be distinct" });
|
|
28081
28110
|
if (v2.mode === "direct" && !v2.baseUrl)
|
|
28082
28111
|
ctx.addIssue({ code: "custom", path: ["baseUrl"], message: "Direct transport requires baseUrl" });
|
|
28083
28112
|
if (v2.mode === "browser" && !v2.browserContext)
|
|
28084
28113
|
ctx.addIssue({ code: "custom", path: ["browserContext"], message: "Browser transport requires browserContext" });
|
|
28085
|
-
if (v2.mode === "direct" && (v2.browserContext || v2.inject))
|
|
28114
|
+
if (v2.mode === "direct" && (v2.browserContext || v2.inject || v2.identity))
|
|
28086
28115
|
ctx.addIssue({ code: "custom", message: "browserContext and inject require browser mode" });
|
|
28087
28116
|
if (v2.baseUrl && !v2.allowedOrigins.includes(parseUrl(v2.baseUrl)?.origin ?? ""))
|
|
28088
28117
|
ctx.addIssue({ code: "custom", path: ["baseUrl"], message: "Base URL origin must be allowed" });
|
|
@@ -28371,7 +28400,7 @@ function createCliApi(baseUrl, fetcher = fetch, token, sessionId) {
|
|
|
28371
28400
|
const transport = async (input2, init) => {
|
|
28372
28401
|
const method = init?.method ?? "GET";
|
|
28373
28402
|
const headers = new Headers(init?.headers);
|
|
28374
|
-
headers.set("Apilift-Capabilities", "distributed-rollouts-v1,discovery-proof-v2,dynamic-bindings-v1,collection-proof-v3");
|
|
28403
|
+
headers.set("Apilift-Capabilities", "distributed-rollouts-v1,discovery-proof-v2,dynamic-bindings-v1,collection-proof-v3,web-responses-v1");
|
|
28375
28404
|
headers.set("Apilift-Client", `cli/${cliVersion}`);
|
|
28376
28405
|
if (token) headers.set("Authorization", `Bearer ${token}`);
|
|
28377
28406
|
if (sessionId) headers.set("Apilift-Session", sessionId);
|
|
@@ -29446,17 +29446,46 @@ var jsonSchema = external_exports.custom((value) => {
|
|
|
29446
29446
|
}
|
|
29447
29447
|
}, "Expected a valid JSON Schema draft 2020-12 document");
|
|
29448
29448
|
var valueSchema = external_exports.lazy(() => external_exports.union([external_exports.null(), external_exports.boolean(), external_exports.number(), external_exports.string(), external_exports.array(valueSchema), external_exports.record(external_exports.string(), valueSchema)]));
|
|
29449
|
-
var
|
|
29449
|
+
var htmlFieldSchema = external_exports.lazy(() => external_exports.strictObject({ selector: external_exports.string().min(1).max(2e3).optional(), read: external_exports.enum(["text", "attribute", "value", "checked", "json"]).optional(), attribute: external_exports.string().min(1).optional(), type: external_exports.enum(["string", "number", "integer", "boolean"]).optional(), optional: external_exports.boolean().optional(), many: external_exports.boolean().optional(), fields: external_exports.record(external_exports.string(), htmlFieldSchema).optional() }).superRefine((v, ctx) => {
|
|
29450
|
+
if (v.read === "attribute" && !v.attribute)
|
|
29451
|
+
ctx.addIssue({ code: "custom", message: "Attribute extraction requires attribute" });
|
|
29452
|
+
if (v.fields && (v.read || v.type || v.attribute))
|
|
29453
|
+
ctx.addIssue({ code: "custom", message: "Nested fields exclude scalar extraction" });
|
|
29454
|
+
}));
|
|
29455
|
+
var htmlExtractionSchema = external_exports.strictObject({ marker: external_exports.string().min(1).max(2e3), fields: external_exports.record(external_exports.string(), htmlFieldSchema).refine((v) => Object.keys(v).length > 0), errors: external_exports.string().min(1).max(2e3).optional() });
|
|
29456
|
+
var continuationSchema = external_exports.strictObject({ statuses: external_exports.array(external_exports.number().int().min(200).max(599)).min(1).max(20), format: external_exports.enum(["json", "html"]), path: pointerSchema.optional(), selector: external_exports.string().min(1).optional(), attribute: external_exports.string().min(1).optional() }).superRefine((v, ctx) => {
|
|
29457
|
+
if (v.format === "json" ? v.path === void 0 || !!v.selector || !!v.attribute : !v.selector || !v.attribute || v.path !== void 0)
|
|
29458
|
+
ctx.addIssue({ code: "custom", message: "JSON continuation needs path; HTML continuation needs selector and attribute" });
|
|
29459
|
+
});
|
|
29460
|
+
var responseSchema = external_exports.strictObject({ format: external_exports.enum(["json", "html"]).optional(), html: htmlExtractionSchema.optional(), continue: external_exports.array(continuationSchema).min(1).max(5).optional(), schema: jsonSchema.optional(), path: pointerSchema.optional(), fields: external_exports.record(external_exports.string(), pointerSchema).optional(), generated: generatedNameSchema.optional() }).superRefine((v, ctx) => {
|
|
29461
|
+
if (v.generated && (v.path !== void 0 || v.fields !== void 0 || v.html))
|
|
29462
|
+
ctx.addIssue({ code: "custom", message: "generated excludes path and fields" });
|
|
29463
|
+
if (v.format === "html" !== !!v.html)
|
|
29464
|
+
ctx.addIssue({ code: "custom", message: "HTML responses require format: html and html extraction with a page marker" });
|
|
29465
|
+
});
|
|
29466
|
+
var baseRequestSchema = external_exports.strictObject({
|
|
29450
29467
|
method: external_exports.enum(["GET", "HEAD", "OPTIONS", "POST", "PUT", "PATCH", "DELETE"]),
|
|
29451
29468
|
url: requestUrlSchema,
|
|
29452
29469
|
headers: external_exports.record(external_exports.string(), valueSchema).optional(),
|
|
29453
29470
|
query: external_exports.record(external_exports.string(), external_exports.union([valueSchema, external_exports.array(valueSchema)])).optional(),
|
|
29454
|
-
body: valueSchema.optional()
|
|
29455
|
-
|
|
29456
|
-
|
|
29457
|
-
|
|
29458
|
-
|
|
29459
|
-
});
|
|
29471
|
+
body: valueSchema.optional(),
|
|
29472
|
+
form: external_exports.record(external_exports.string(), valueSchema).optional()
|
|
29473
|
+
});
|
|
29474
|
+
function bodyIssues(v, ctx) {
|
|
29475
|
+
if (v.form !== void 0 && v.body !== void 0)
|
|
29476
|
+
ctx.addIssue({ code: "custom", message: "form and JSON body are mutually exclusive" });
|
|
29477
|
+
if ((v.form !== void 0 || v.body !== void 0) && ["GET", "HEAD"].includes(v.method))
|
|
29478
|
+
ctx.addIssue({ code: "custom", message: "GET/HEAD cannot have a request body" });
|
|
29479
|
+
for (const [name, value] of Object.entries(v.headers ?? {}))
|
|
29480
|
+
if (name.toLowerCase() === "content-type" && (v.form !== void 0 || v.body !== void 0) && value !== (v.form !== void 0 ? "application/x-www-form-urlencoded" : "application/json"))
|
|
29481
|
+
ctx.addIssue({ code: "custom", message: "Content-Type conflicts with declared body encoding" });
|
|
29482
|
+
}
|
|
29483
|
+
var readPreparationSchema = external_exports.strictObject({ request: baseRequestSchema.superRefine((v, ctx) => {
|
|
29484
|
+
bodyIssues(v, ctx);
|
|
29485
|
+
if (v.method !== "GET")
|
|
29486
|
+
ctx.addIssue({ code: "custom", message: "Preparation and identity checks must use GET" });
|
|
29487
|
+
}), response: responseSchema });
|
|
29488
|
+
var requestSchema = baseRequestSchema.extend({ prepare: readPreparationSchema.optional() }).superRefine(bodyIssues);
|
|
29460
29489
|
var proofPointer = external_exports.string().refine((value) => {
|
|
29461
29490
|
let valid2 = true;
|
|
29462
29491
|
const resolved = value.replace(/\{(input|result|generated)\.([^{}]*)\}/gu, (token, kind, ref, offset) => {
|
|
@@ -29472,7 +29501,7 @@ var proofSelection = external_exports.strictObject({ path: proofPointer, where:
|
|
|
29472
29501
|
if (!!v.where === !!v.key)
|
|
29473
29502
|
ctx.addIssue({ code: "custom", message: "Select by exactly one of where or key" });
|
|
29474
29503
|
});
|
|
29475
|
-
var proofSchema = external_exports.strictObject({ request: requestSchema, effect: external_exports.literal("read").optional(), select: proofSelection.optional(), equals: external_exports.array(proofComparison).min(1).optional(), response:
|
|
29504
|
+
var proofSchema = external_exports.strictObject({ request: requestSchema, effect: external_exports.literal("read").optional(), select: proofSelection.optional(), equals: external_exports.array(proofComparison).min(1).optional(), response: responseSchema.optional(), absent: external_exports.literal(true).optional() }).superRefine((v, ctx) => {
|
|
29476
29505
|
if (!!v.equals === !!v.absent)
|
|
29477
29506
|
ctx.addIssue({ code: "custom", message: "Exactly one of equals and absent is required" });
|
|
29478
29507
|
if (v.select && v.absent && !v.select.complete)
|
|
@@ -29518,17 +29547,17 @@ var locatorSchema = external_exports.strictObject({ kind: external_exports.liter
|
|
|
29518
29547
|
ctx.addIssue({ code: "custom", path: [key], message: `${key} required for ${v.in}` });
|
|
29519
29548
|
});
|
|
29520
29549
|
var observeSchema = external_exports.strictObject({ kind: external_exports.literal("observe"), request: external_exports.strictObject({ method: external_exports.string(), urlPattern: external_exports.string() }), extract: external_exports.strictObject({ in: external_exports.enum(["request-header", "response-header", "response-body"]), name: external_exports.string().optional(), path: pointerSchema.optional() }), trigger: external_exports.union([external_exports.strictObject({ kind: external_exports.literal("navigate"), url: httpUrlSchema }), external_exports.strictObject({ kind: external_exports.literal("selector"), selector: external_exports.string() })]).optional(), cache: external_exports.literal("browser-session") });
|
|
29521
|
-
var injectSchema = external_exports.strictObject({ from: external_exports.union([locatorSchema, observeSchema]), to: external_exports.union([external_exports.strictObject({ in: external_exports.literal("header"), name: external_exports.string() }), external_exports.strictObject({ in: external_exports.literal("query"), name: external_exports.string() }), external_exports.strictObject({ in: external_exports.literal("body"), path: pointerSchema })]) });
|
|
29550
|
+
var injectSchema = external_exports.strictObject({ from: external_exports.union([locatorSchema, observeSchema]), to: external_exports.union([external_exports.strictObject({ in: external_exports.literal("header"), name: external_exports.string() }), external_exports.strictObject({ in: external_exports.literal("query"), name: external_exports.string() }), external_exports.strictObject({ in: external_exports.literal("body"), path: pointerSchema }), external_exports.strictObject({ in: external_exports.literal("form"), name: external_exports.string().min(1) })]) });
|
|
29522
29551
|
var credentialSchema = external_exports.strictObject({ name: generatedNameSchema, header: external_exports.string().regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/), prefix: external_exports.string().max(80).refine((v) => !/[\r\n]/.test(v)).optional() });
|
|
29523
|
-
var probeSchema = external_exports.strictObject({ effect: external_exports.literal("read").optional(), request: requestSchema, response:
|
|
29524
|
-
var transportDefinitionSchema = external_exports.strictObject({ title, description: requiredDescription, mode: external_exports.enum(["direct", "browser"]), baseUrl: requestUrlSchema.optional(), allowedOrigins: external_exports.array(originSchema).min(1).max(100), browserContext: segmentSchema.optional(), credentials: external_exports.array(credentialSchema).max(16).optional(), inject: external_exports.array(injectSchema).optional(), probes: external_exports.record(external_exports.string(), probeSchema) }).superRefine((v, ctx) => {
|
|
29552
|
+
var probeSchema = external_exports.strictObject({ effect: external_exports.literal("read").optional(), request: requestSchema, response: responseSchema, inputs: jsonSchema.optional() });
|
|
29553
|
+
var transportDefinitionSchema = external_exports.strictObject({ title, description: requiredDescription, mode: external_exports.enum(["direct", "browser"]), baseUrl: requestUrlSchema.optional(), allowedOrigins: external_exports.array(originSchema).min(1).max(100), browserContext: segmentSchema.optional(), credentials: external_exports.array(credentialSchema).max(16).optional(), inject: external_exports.array(injectSchema).optional(), identity: readPreparationSchema.extend({ paths: external_exports.array(pointerSchema).min(1).max(8) }).optional(), probes: external_exports.record(external_exports.string(), probeSchema) }).superRefine((v, ctx) => {
|
|
29525
29554
|
if (new Set(v.allowedOrigins).size !== v.allowedOrigins.length)
|
|
29526
29555
|
ctx.addIssue({ code: "custom", path: ["allowedOrigins"], message: "Origins must be distinct" });
|
|
29527
29556
|
if (v.mode === "direct" && !v.baseUrl)
|
|
29528
29557
|
ctx.addIssue({ code: "custom", path: ["baseUrl"], message: "Direct transport requires baseUrl" });
|
|
29529
29558
|
if (v.mode === "browser" && !v.browserContext)
|
|
29530
29559
|
ctx.addIssue({ code: "custom", path: ["browserContext"], message: "Browser transport requires browserContext" });
|
|
29531
|
-
if (v.mode === "direct" && (v.browserContext || v.inject))
|
|
29560
|
+
if (v.mode === "direct" && (v.browserContext || v.inject || v.identity))
|
|
29532
29561
|
ctx.addIssue({ code: "custom", message: "browserContext and inject require browser mode" });
|
|
29533
29562
|
if (v.baseUrl && !v.allowedOrigins.includes(parseUrl(v.baseUrl)?.origin ?? ""))
|
|
29534
29563
|
ctx.addIssue({ code: "custom", path: ["baseUrl"], message: "Base URL origin must be allowed" });
|
|
@@ -29597,6 +29626,8 @@ function inspectRequest(request2, inputs, generated, proof, base2, issues) {
|
|
|
29597
29626
|
const [key, ref] = entries[0] ?? [];
|
|
29598
29627
|
if (key === "$input" && typeof ref === "string" && inputs.has(ref))
|
|
29599
29628
|
return;
|
|
29629
|
+
if (key === "$prepared" && typeof ref === "string" && request2.prepare && pointerSchema.safeParse(ref).success)
|
|
29630
|
+
return;
|
|
29600
29631
|
if (key === "$generated" && typeof ref === "string" && generated.has(ref))
|
|
29601
29632
|
return;
|
|
29602
29633
|
if (proof && key === "$result" && typeof ref === "string" && pointerSchema.safeParse(ref).success)
|
|
@@ -29620,6 +29651,9 @@ function inspectRequest(request2, inputs, generated, proof, base2, issues) {
|
|
|
29620
29651
|
}
|
|
29621
29652
|
walk(request2.query, `${base2}/query`);
|
|
29622
29653
|
walk(request2.body, `${base2}/body`);
|
|
29654
|
+
walk(request2.form, `${base2}/form`);
|
|
29655
|
+
if (request2.prepare)
|
|
29656
|
+
inspectRequest(request2.prepare.request, inputs, generated, proof, `${base2}/prepare/request`, issues);
|
|
29623
29657
|
}
|
|
29624
29658
|
function validateDefinition(kind, name, value) {
|
|
29625
29659
|
const issues = [];
|
|
@@ -29674,6 +29708,8 @@ function validateDefinition(kind, name, value) {
|
|
|
29674
29708
|
const props = probe.inputs && typeof probe.inputs === "object" && probe.inputs.properties && typeof probe.inputs.properties === "object" ? Object.keys(probe.inputs.properties) : [];
|
|
29675
29709
|
inspectRequest(probe.request, new Set(props), /* @__PURE__ */ new Set(), false, `/probes/${origin}/request`, issues);
|
|
29676
29710
|
}
|
|
29711
|
+
if (definition2.identity)
|
|
29712
|
+
inspectRequest(definition2.identity.request, /* @__PURE__ */ new Set(), /* @__PURE__ */ new Set(), false, "/identity/request", issues);
|
|
29677
29713
|
for (const [i, rule] of (definition2.inject ?? []).entries())
|
|
29678
29714
|
if (rule.to.in === "header" && rule.to.name.toLowerCase() === "cookie")
|
|
29679
29715
|
issues.push({ path: `/inject/${i}/to/name`, message: "Cookie header cannot be injected" });
|
|
@@ -29850,7 +29886,7 @@ function createCliApi(baseUrl, fetcher = fetch, token, sessionId) {
|
|
|
29850
29886
|
const transport = async (input2, init) => {
|
|
29851
29887
|
const method = init?.method ?? "GET";
|
|
29852
29888
|
const headers = new Headers(init?.headers);
|
|
29853
|
-
headers.set("Apilift-Capabilities", "distributed-rollouts-v1,discovery-proof-v2,dynamic-bindings-v1,collection-proof-v3");
|
|
29889
|
+
headers.set("Apilift-Capabilities", "distributed-rollouts-v1,discovery-proof-v2,dynamic-bindings-v1,collection-proof-v3,web-responses-v1");
|
|
29854
29890
|
headers.set("Apilift-Client", `cli/${cliVersion}`);
|
|
29855
29891
|
if (token) headers.set("Authorization", `Bearer ${token}`);
|
|
29856
29892
|
if (sessionId) headers.set("Apilift-Session", sessionId);
|