@blotout/qinto-cli 0.1.30 → 0.1.31
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/README.md +8 -1
- package/dist/index.js +3226 -3110
- package/dist/index.js.map +1 -1
- package/dist/worker-artifact/app-runtime/index.js +80 -6
- package/dist/worker-artifact/main/index.js +299 -173
- package/dist/worker-artifact/version.json +9 -9
- package/dist/worker-artifact/wfp/index.js +2 -1
- package/package.json +1 -1
|
@@ -19607,6 +19607,7 @@ var endpointSchema = external_exports.object({
|
|
|
19607
19607
|
var eventsSchema = external_exports.object({
|
|
19608
19608
|
publishes: external_exports.array(external_exports.string().min(1).max(MAX_EVENT_TOPIC_LENGTH).regex(EVENT_TOPIC)).max(MAX_PUBLISHED_TOPICS).default([])
|
|
19609
19609
|
}).strict();
|
|
19610
|
+
var dependenciesSchema = external_exports.array(external_exports.object({ app: external_exports.string().regex(APP_SLUG_PATTERN), description: renderableText(1, 200).optional() }).strict()).max(10);
|
|
19610
19611
|
var rpcSchema = external_exports.object({
|
|
19611
19612
|
exposes: external_exports.array(external_exports.object({ name: external_exports.string().regex(FUNCTION_NAME).max(64), visibility: external_exports.enum(["public", "private"]) }).strict()).max(32).optional(),
|
|
19612
19613
|
calls: external_exports.array(external_exports.object({ app: external_exports.string().regex(APP_SLUG_PATTERN), fn: external_exports.string().regex(FUNCTION_NAME).max(64) }).strict()).max(64).optional()
|
|
@@ -19650,6 +19651,9 @@ var baseSchema = external_exports.object({
|
|
|
19650
19651
|
description: "The app's browser surface: an optional entry for the bundle that ships inside the site's q.js, and the query params and cookies it declares for capture."
|
|
19651
19652
|
}),
|
|
19652
19653
|
resources: external_exports.array(resourceSchema).max(32).default([]).meta({ description: "The Cloudflare bindings the app worker is given." }),
|
|
19654
|
+
dependencies: dependenciesSchema.optional().meta({
|
|
19655
|
+
description: "The apps this app needs on the same site. Every app it calls over RPC must be listed."
|
|
19656
|
+
}),
|
|
19653
19657
|
rpc: rpcSchema.optional().meta({ description: "The functions this app exposes to other apps, and the ones it calls on them." }),
|
|
19654
19658
|
events: eventsSchema.optional().meta({
|
|
19655
19659
|
description: "The push topics this app broadcasts to every app on the site. Requires the `sharedContext` data capability; a topic left out reaches only this app\u2019s own browser code."
|
|
@@ -19966,9 +19970,30 @@ var validateRpc = (manifest, ctx) => {
|
|
|
19966
19970
|
["rpc", "exposes"],
|
|
19967
19971
|
"function"
|
|
19968
19972
|
);
|
|
19973
|
+
const dependencies = new Set((manifest.dependencies ?? []).map((dependency) => dependency.app));
|
|
19969
19974
|
for (const [index, call] of (manifest.rpc?.calls ?? []).entries()) {
|
|
19970
19975
|
if (call.app === manifest.slug) {
|
|
19971
19976
|
ctx.addIssue({ code: "custom", path: ["rpc", "calls", index, "app"], message: "An app cannot declare an RPC call to itself" });
|
|
19977
|
+
} else if (!dependencies.has(call.app)) {
|
|
19978
|
+
ctx.addIssue({
|
|
19979
|
+
code: "custom",
|
|
19980
|
+
path: ["rpc", "calls", index, "app"],
|
|
19981
|
+
message: `${call.app} is called over RPC, so it must be in dependencies. Add { "app": "${call.app}" } to dependencies; if your Qinto CLI rejects that field, upgrade it.`
|
|
19982
|
+
});
|
|
19983
|
+
}
|
|
19984
|
+
}
|
|
19985
|
+
};
|
|
19986
|
+
var validateDependencies = (manifest, ctx) => {
|
|
19987
|
+
const dependencies = manifest.dependencies ?? [];
|
|
19988
|
+
uniqueOrIssue(
|
|
19989
|
+
ctx,
|
|
19990
|
+
dependencies.map((dependency) => dependency.app),
|
|
19991
|
+
["dependencies"],
|
|
19992
|
+
"dependency"
|
|
19993
|
+
);
|
|
19994
|
+
for (const [index, dependency] of dependencies.entries()) {
|
|
19995
|
+
if (dependency.app === manifest.slug) {
|
|
19996
|
+
ctx.addIssue({ code: "custom", path: ["dependencies", index, "app"], message: "An app cannot depend on itself" });
|
|
19972
19997
|
}
|
|
19973
19998
|
}
|
|
19974
19999
|
};
|
|
@@ -20019,6 +20044,7 @@ var appManifestSchema = baseSchema.superRefine((manifest, ctx) => {
|
|
|
20019
20044
|
validateEndpoints(manifest, ctx);
|
|
20020
20045
|
validateCapture(manifest, ctx);
|
|
20021
20046
|
validateBrowserHooks(manifest, ctx);
|
|
20047
|
+
validateDependencies(manifest, ctx);
|
|
20022
20048
|
validateRpc(manifest, ctx);
|
|
20023
20049
|
validateEvents(manifest, ctx);
|
|
20024
20050
|
validateOauth(manifest, ctx);
|
|
@@ -20039,6 +20065,44 @@ var appRpcContractSchema = external_exports.record(external_exports.string().reg
|
|
|
20039
20065
|
return new TextEncoder().encode(JSON.stringify(contract)).length <= MAX_RPC_CONTRACT_BYTES;
|
|
20040
20066
|
}, "The RPC contract exceeds the size cap");
|
|
20041
20067
|
|
|
20068
|
+
// ../../../libs/app-envelope/src/geo.ts
|
|
20069
|
+
var cfString = external_exports.string().optional().catch(void 0);
|
|
20070
|
+
var requestGeoSchema = external_exports.object({
|
|
20071
|
+
country: cfString,
|
|
20072
|
+
city: cfString,
|
|
20073
|
+
region: cfString,
|
|
20074
|
+
regionCode: cfString,
|
|
20075
|
+
timezone: cfString,
|
|
20076
|
+
postalCode: cfString,
|
|
20077
|
+
continent: cfString,
|
|
20078
|
+
latitude: cfString,
|
|
20079
|
+
longitude: cfString,
|
|
20080
|
+
isEUCountry: cfString,
|
|
20081
|
+
botManagement: external_exports.object({
|
|
20082
|
+
ja4: cfString,
|
|
20083
|
+
ja3Hash: cfString,
|
|
20084
|
+
score: external_exports.number().optional().catch(void 0),
|
|
20085
|
+
verifiedBot: external_exports.boolean().optional().catch(void 0)
|
|
20086
|
+
}).optional().catch(void 0)
|
|
20087
|
+
});
|
|
20088
|
+
var userGeoSchema = external_exports.object({
|
|
20089
|
+
ip: external_exports.string().optional(),
|
|
20090
|
+
userAgent: external_exports.string().optional(),
|
|
20091
|
+
timezone: external_exports.string().optional(),
|
|
20092
|
+
city: external_exports.string().optional(),
|
|
20093
|
+
postalCode: external_exports.string().optional(),
|
|
20094
|
+
region: external_exports.string().optional(),
|
|
20095
|
+
regionCode: external_exports.string().optional(),
|
|
20096
|
+
country: external_exports.string().optional(),
|
|
20097
|
+
continent: external_exports.string().optional(),
|
|
20098
|
+
isEUCountry: external_exports.string().optional(),
|
|
20099
|
+
latitude: external_exports.string().optional(),
|
|
20100
|
+
longitude: external_exports.string().optional(),
|
|
20101
|
+
ja4: external_exports.string().optional(),
|
|
20102
|
+
ja3: external_exports.string().optional(),
|
|
20103
|
+
botScore: external_exports.string().optional()
|
|
20104
|
+
});
|
|
20105
|
+
|
|
20042
20106
|
// ../../../libs/app-envelope/src/envelope.ts
|
|
20043
20107
|
var ENVELOPE_VERSION = 3;
|
|
20044
20108
|
var ENVELOPE_ERROR_CODES = ["invalid_arguments"];
|
|
@@ -20114,11 +20178,21 @@ var envelopeRequestSchema = external_exports.object({
|
|
|
20114
20178
|
anonId: external_exports.string().min(1).max(64),
|
|
20115
20179
|
globalId: external_exports.string().min(1).max(64).nullable(),
|
|
20116
20180
|
createdAt: external_exports.number().int().optional(),
|
|
20117
|
-
properties: external_exports.record(external_exports.string(), external_exports.
|
|
20118
|
-
geo:
|
|
20181
|
+
properties: external_exports.record(external_exports.string(), external_exports.string()),
|
|
20182
|
+
geo: userGeoSchema.optional()
|
|
20183
|
+
}).strict().optional(),
|
|
20184
|
+
consent: external_exports.object({
|
|
20185
|
+
enabled: external_exports.boolean(),
|
|
20186
|
+
categories: external_exports.object({
|
|
20187
|
+
necessary: external_exports.literal(true),
|
|
20188
|
+
functional: external_exports.boolean(),
|
|
20189
|
+
analytics: external_exports.boolean(),
|
|
20190
|
+
marketing: external_exports.boolean(),
|
|
20191
|
+
salesOfData: external_exports.boolean()
|
|
20192
|
+
}),
|
|
20193
|
+
apps: external_exports.record(external_exports.string(), external_exports.boolean())
|
|
20119
20194
|
}).strict().optional(),
|
|
20120
|
-
|
|
20121
|
-
geo: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
|
|
20195
|
+
geo: requestGeoSchema.optional(),
|
|
20122
20196
|
// Connect envelopes only: the page the visitor's socket opened from, and the visit session it joined.
|
|
20123
20197
|
page: pageSchema.optional(),
|
|
20124
20198
|
session: sessionSchema.optional(),
|
|
@@ -20379,7 +20453,7 @@ var endpointContextSchema = external_exports.object({
|
|
|
20379
20453
|
method: external_exports.enum(["GET", "POST", "PUT", "PATCH", "DELETE"]),
|
|
20380
20454
|
mode: external_exports.enum(["webhook", "api"]),
|
|
20381
20455
|
version: external_exports.string().min(1).max(32),
|
|
20382
|
-
geo:
|
|
20456
|
+
geo: requestGeoSchema.optional(),
|
|
20383
20457
|
installs: external_exports.array(installSchema3).min(1).max(15),
|
|
20384
20458
|
user: external_exports.object({ anonId: external_exports.string().min(1).max(64) }).strict().optional()
|
|
20385
20459
|
}).strict().refine((context) => {
|
|
@@ -22403,7 +22477,7 @@ var buildContext3 = ({
|
|
|
22403
22477
|
geo,
|
|
22404
22478
|
params,
|
|
22405
22479
|
install: { id: install.id, label: install.label },
|
|
22406
|
-
...user === void 0 ? {} : { user: { anonId: user.anonId
|
|
22480
|
+
...user === void 0 ? {} : { user: { anonId: user.anonId } },
|
|
22407
22481
|
startWorkflow: buildStartWorkflow({
|
|
22408
22482
|
ord: install.ord,
|
|
22409
22483
|
installId: install.id,
|