@blotout/qinto-cli 0.1.19 → 0.1.21

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.
@@ -1,3 +1,3 @@
1
1
  # Worker artifact
2
2
 
3
- Generated by the "Release worker" action, or locally by `pnpm --filter @qinto/worker artifact` — do not edit.
3
+ Generated only by the "Release worker" action — never build it locally, and do not edit.
@@ -19528,10 +19528,13 @@ var variableSchema = external_exports.object({
19528
19528
  label: external_exports.string().min(1).max(100),
19529
19529
  required: external_exports.boolean().optional(),
19530
19530
  browser: external_exports.boolean().optional(),
19531
+ owner: external_exports.enum(["site", "developer"]).optional(),
19531
19532
  helpText: external_exports.string().min(1).max(MAX_VARIABLE_HELP_TEXT).optional(),
19532
19533
  helpUrl: httpsUrl("helpUrl").optional()
19533
19534
  }).strict().refine((variable) => !(variable.kind === "secret" && variable.browser === true), {
19534
19535
  message: "A secret variable can never be browser-exposed"
19536
+ }).refine((variable) => !(variable.required === true && variable.owner === "developer"), {
19537
+ message: "A developer-owned variable cannot be required"
19535
19538
  });
19536
19539
  var appVariableSchema = external_exports.object({
19537
19540
  name: external_exports.string().min(1).max(64).regex(VARIABLE_NAME),
@@ -19994,6 +19997,7 @@ var MAX_PUSHES_PER_INSTALL = 10;
19994
19997
  var MAX_CAPTURE_WRITES_PER_INSTALL = 10;
19995
19998
  var CONTEXT_LEVELS = ["private", "shared"];
19996
19999
  var PUSH_BROADCASTS = ["install", "app", "site"];
20000
+ var ACTION_SOURCES = ["website", "api", "app", "scheduled", "webhook", "tool", "workflow"];
19997
20001
  var MAX_PRIVATE_CONTEXT_ENTRY_BYTES = 32 * 1024;
19998
20002
  var MAX_SHARED_CONTEXT_ENTRY_BYTES = 4 * 1024;
19999
20003
  var MAX_PUSH_BYTES = 16 * 1024;
@@ -20022,9 +20026,10 @@ var effectGroupSchema = external_exports.object({
20022
20026
  context: external_exports.array(contextWriteSchema).optional()
20023
20027
  }).strict();
20024
20028
  var captureValueSchema = external_exports.object({ value: external_exports.string().max(512), createdAt: external_exports.number().int(), updatedAt: external_exports.number().int(), type: external_exports.enum(CAPTURE_TYPES) }).strict();
20029
+ var pageSchema = external_exports.object({ url: external_exports.string().min(1).max(4096), referrer: external_exports.string().min(1).max(4096).optional() }).strict();
20025
20030
  var actionContextFields = {
20026
20031
  occurredAt: external_exports.number().int().nonnegative().safe(),
20027
- page: external_exports.object({ url: external_exports.string().min(1).max(4096), referrer: external_exports.string().min(1).max(4096).optional() }).strict().optional(),
20032
+ page: pageSchema.optional(),
20028
20033
  network: external_exports.object({
20029
20034
  ip: external_exports.string().min(1).max(64).optional(),
20030
20035
  userAgent: external_exports.string().min(1).max(512).optional(),
@@ -20052,6 +20057,8 @@ var envelopeRequestSchema = external_exports.object({
20052
20057
  }).strict().optional(),
20053
20058
  consent: external_exports.object({ enabled: external_exports.boolean(), categories: external_exports.record(external_exports.string(), external_exports.boolean()), apps: external_exports.record(external_exports.string(), external_exports.boolean()) }).strict().optional(),
20054
20059
  geo: external_exports.record(external_exports.string(), external_exports.unknown()).optional(),
20060
+ // Connect envelopes only: the page the visitor's socket opened from.
20061
+ page: pageSchema.optional(),
20055
20062
  // Only what this app captured or wrote for this visitor; `updatedAt` is when the current value
20056
20063
  // was first seen, which is the click time a CAPI `fbc` is built from.
20057
20064
  captures: external_exports.record(external_exports.string().max(64), captureValueSchema).optional(),
@@ -20069,6 +20076,9 @@ var envelopeRequestSchema = external_exports.object({
20069
20076
  userId: external_exports.string().min(1).max(64),
20070
20077
  payload: external_exports.record(external_exports.string(), external_exports.unknown()),
20071
20078
  receivedAt: external_exports.number().int(),
20079
+ // Optional on the wire: an app worker redeploys before its site worker, so this reader must
20080
+ // accept an envelope a site worker predating the field produces.
20081
+ source: external_exports.enum(ACTION_SOURCES).optional(),
20072
20082
  context: actionContextSchema.optional(),
20073
20083
  browser: external_exports.record(external_exports.string().min(1).max(64), external_exports.unknown()).optional(),
20074
20084
  origin: external_exports.object({ app: external_exports.string().min(1).max(30), install: external_exports.number().int().min(1), depth: external_exports.number().int().min(0) }).strict().optional()
@@ -20951,6 +20961,18 @@ var brokerPush = async (env, input2) => {
20951
20961
  data: input2.data
20952
20962
  });
20953
20963
  };
20964
+ var brokerTrack = async (env, input2) => {
20965
+ await askBroker(env, `apps.track ${input2.event.payload["event"]}`, {
20966
+ v: ENVELOPE_VERSION,
20967
+ kind: "track",
20968
+ slug: callerSlug(env),
20969
+ key: env.QINTO_INTERNAL_KEY,
20970
+ source: input2.source,
20971
+ userId: input2.userId,
20972
+ installId: input2.installId,
20973
+ event: input2.event
20974
+ });
20975
+ };
20954
20976
  var brokerContextRead = async (env, userId) => {
20955
20977
  const answer = await askBroker(env, "apps.context read", {
20956
20978
  v: ENVELOPE_VERSION,
@@ -21065,6 +21087,18 @@ var buildAppsClient = (env, envelope) => {
21065
21087
  };
21066
21088
  };
21067
21089
 
21090
+ // src/emitted-event.ts
21091
+ var checkEmittedEvent = (event) => {
21092
+ if (event.type !== "track") {
21093
+ throw new Error("only track events may be emitted");
21094
+ }
21095
+ const occurredAt = event.occurredAt ?? Date.now();
21096
+ if (!Number.isSafeInteger(occurredAt) || occurredAt < 0) {
21097
+ throw new Error("an emitted event occurredAt must be non-negative Unix milliseconds");
21098
+ }
21099
+ return { ...event, occurredAt };
21100
+ };
21101
+
21068
21102
  // src/oauth.ts
21069
21103
  var EXPIRY_FLOOR_MS = 1e3;
21070
21104
  var read = (env, id, ord, now) => {
@@ -21550,6 +21584,9 @@ var buildWorkflowContext = (env, stamp) => {
21550
21584
  broadcast: message.broadcast
21551
21585
  });
21552
21586
  },
21587
+ track: async (userId, event) => {
21588
+ await brokerTrack(env, { source: "workflow", userId, installId: install.id, event: checkEmittedEvent(event) });
21589
+ },
21553
21590
  apps
21554
21591
  };
21555
21592
  };
@@ -21623,15 +21660,9 @@ var buildContext = ({
21623
21660
  // and the extra entry keeps it visibly over while bounding memory.
21624
21661
  emit: (event) => {
21625
21662
  requireSubject(subject, "emit");
21626
- if (event.type !== "track") {
21627
- throw new Error("only track events may be emitted");
21628
- }
21629
- const occurredAt = event.occurredAt ?? Date.now();
21630
- if (!Number.isSafeInteger(occurredAt) || occurredAt < 0) {
21631
- throw new Error("an emitted event occurredAt must be non-negative Unix milliseconds");
21632
- }
21663
+ const checked = checkEmittedEvent(event);
21633
21664
  if (emits.length <= MAX_EMITS_PER_INSTALL) {
21634
- emits.push({ ...event, occurredAt });
21665
+ emits.push(checked);
21635
21666
  }
21636
21667
  },
21637
21668
  push: (message) => {
@@ -21802,6 +21833,9 @@ var dispatchSchedule = async (envelope, bundle, env) => {
21802
21833
  broadcast: message.broadcast
21803
21834
  });
21804
21835
  },
21836
+ track: async (userId, event2) => {
21837
+ await brokerTrack(env, { source: "scheduled", userId, installId: install.id, event: checkEmittedEvent(event2) });
21838
+ },
21805
21839
  context: (userId) => {
21806
21840
  return asyncContext(env, () => {
21807
21841
  return userId;
@@ -21919,6 +21953,9 @@ var buildContext2 = (envelope, env) => {
21919
21953
  identity: buildIdentity(env),
21920
21954
  apps: buildAppsClient(env, { depth: 0 }),
21921
21955
  query: buildQuery({ env, ticket: envelope.tool.queryTicket, installId: install.id }),
21956
+ track: async (userId, event) => {
21957
+ await brokerTrack(env, { source: "tool", userId, installId: install.id, event: checkEmittedEvent(event) });
21958
+ },
21922
21959
  fail: (message) => {
21923
21960
  return { kind: "tool_error", message: truncate(message) };
21924
21961
  }
@@ -22181,6 +22218,9 @@ var buildContext3 = ({
22181
22218
  broadcast: message.broadcast
22182
22219
  });
22183
22220
  },
22221
+ track: async (userId, event) => {
22222
+ await brokerTrack(env, { source: "webhook", userId, installId: install.id, event: checkEmittedEvent(event) });
22223
+ },
22184
22224
  context: (userId) => {
22185
22225
  return asyncContext(env, () => {
22186
22226
  return userId;
@@ -22852,7 +22892,7 @@ var dispatch = async (envelope, versions, env) => {
22852
22892
  if (handler === void 0) {
22853
22893
  return jsonError(200, "missing handler: onConnect");
22854
22894
  }
22855
- return runInstalls(envelope, env, (ctx) => handler(ctx));
22895
+ return runInstalls(envelope, env, (ctx) => handler({ ...ctx, ...envelope.page === void 0 ? {} : { page: envelope.page } }));
22856
22896
  }
22857
22897
  case "transform": {
22858
22898
  return dispatchTransform(envelope, bundle, env);