stitchkit 0.116.0 → 0.118.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.
Files changed (130) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/agent-runtime/run-acquisition.d.ts +9 -2
  3. package/dist/agent-runtime/run-acquisition.d.ts.map +1 -1
  4. package/dist/agent-runtime/run-execution.d.ts +3 -0
  5. package/dist/agent-runtime/run-execution.d.ts.map +1 -1
  6. package/dist/agent-runtime/run-failure.d.ts +4 -1
  7. package/dist/agent-runtime/run-failure.d.ts.map +1 -1
  8. package/dist/agent-runtime/run-store-retry.d.ts +8 -0
  9. package/dist/agent-runtime/run-store-retry.d.ts.map +1 -0
  10. package/dist/agent-runtime/run-terminal.d.ts.map +1 -1
  11. package/dist/agent-runtime/run-unacquired.d.ts +19 -0
  12. package/dist/agent-runtime/run-unacquired.d.ts.map +1 -0
  13. package/dist/agent-runtime/store-conformance.d.ts +8 -0
  14. package/dist/agent-runtime/store-conformance.d.ts.map +1 -1
  15. package/dist/agent-runtime/store-driver-contract.d.ts +5 -0
  16. package/dist/agent-runtime/store-driver-contract.d.ts.map +1 -1
  17. package/dist/agent-runtime/terminal-commit.d.ts +34 -4
  18. package/dist/agent-runtime/terminal-commit.d.ts.map +1 -1
  19. package/dist/entrypoints/agent-runtime/harness.js +2 -2
  20. package/dist/entrypoints/agent-runtime/sqlite/bun.js +3 -3
  21. package/dist/entrypoints/agent-runtime/sqlite/node.js +3 -3
  22. package/dist/entrypoints/agent-runtime/testing.js +22 -4
  23. package/dist/entrypoints/agent-runtime.d.ts +1 -1
  24. package/dist/entrypoints/agent-runtime.d.ts.map +1 -1
  25. package/dist/entrypoints/agent-runtime.js +13 -11
  26. package/dist/entrypoints/application/diagnostic-journal.js +1 -1
  27. package/dist/entrypoints/application/directory-inbox.js +3 -3
  28. package/dist/entrypoints/cli/publish.js +2 -2
  29. package/dist/entrypoints/files.js +2 -2
  30. package/dist/entrypoints/primitives.js +51 -154
  31. package/dist/entrypoints/server.js +6 -6
  32. package/dist/entrypoints/telegram.d.ts +1 -1
  33. package/dist/entrypoints/telegram.d.ts.map +1 -1
  34. package/dist/entrypoints/telegram.js +352 -137
  35. package/dist/entrypoints/tracking/contract.d.ts +11 -0
  36. package/dist/entrypoints/tracking/contract.d.ts.map +1 -0
  37. package/dist/entrypoints/tracking/contract.js +162 -0
  38. package/dist/entrypoints/tracking/performance.d.ts +8 -0
  39. package/dist/entrypoints/tracking/performance.d.ts.map +1 -0
  40. package/dist/entrypoints/tracking/performance.js +181 -0
  41. package/dist/entrypoints/tracking/server.d.ts +1 -0
  42. package/dist/entrypoints/tracking/server.d.ts.map +1 -1
  43. package/dist/entrypoints/tracking/server.js +40 -12
  44. package/dist/entrypoints/tracking.d.ts +4 -3
  45. package/dist/entrypoints/tracking.d.ts.map +1 -1
  46. package/dist/entrypoints/tracking.js +43 -143
  47. package/dist/entrypoints/xlsx.d.ts +4 -0
  48. package/dist/entrypoints/xlsx.d.ts.map +1 -0
  49. package/dist/entrypoints/xlsx.js +406 -0
  50. package/dist/{index-fa435yq2.js → index-073nw9qr.js} +8 -8
  51. package/dist/index-1f40z584.js +7 -0
  52. package/dist/{index-fdk4r4r6.js → index-75ns2ybj.js} +1 -1
  53. package/dist/{index-jq2ky8fw.js → index-cycp3r3e.js} +124 -181
  54. package/dist/{index-4g6qmgdx.js → index-ghtpfz4z.js} +9 -9
  55. package/dist/{index-n3v695sb.js → index-hdjmdwsj.js} +277 -96
  56. package/dist/{index-zqkz4af9.js → index-nqxrm176.js} +1 -1
  57. package/dist/index-qezhmp51.js +242 -0
  58. package/dist/index-vv1sch8a.js +94 -0
  59. package/dist/{index-fggxgbrk.js → index-xx1j310k.js} +165 -102
  60. package/dist/internal/exclusive-lock.d.ts.map +1 -1
  61. package/dist/primitives/decimal.d.ts +10 -0
  62. package/dist/primitives/decimal.d.ts.map +1 -1
  63. package/dist/primitives/index.d.ts +3 -1
  64. package/dist/primitives/index.d.ts.map +1 -1
  65. package/dist/primitives/money.d.ts +20 -0
  66. package/dist/primitives/money.d.ts.map +1 -1
  67. package/dist/primitives/quantity.d.ts.map +1 -1
  68. package/dist/primitives/rounding.d.ts +40 -0
  69. package/dist/primitives/rounding.d.ts.map +1 -0
  70. package/dist/telegram/budget-transformer.d.ts +2 -2
  71. package/dist/telegram/not-dispatched.d.ts +2 -2
  72. package/dist/telegram/not-dispatched.d.ts.map +1 -1
  73. package/dist/telegram/outbound-budget.d.ts +53 -16
  74. package/dist/telegram/outbound-budget.d.ts.map +1 -1
  75. package/dist/telegram/outbound-cost.d.ts +5 -0
  76. package/dist/telegram/outbound-cost.d.ts.map +1 -0
  77. package/dist/telegram/outbound-pauses.d.ts +17 -0
  78. package/dist/telegram/outbound-pauses.d.ts.map +1 -0
  79. package/dist/telegram/outbound-queue.d.ts +17 -0
  80. package/dist/telegram/outbound-queue.d.ts.map +1 -0
  81. package/dist/telegram/update-intake-work.d.ts +20 -1
  82. package/dist/telegram/update-intake-work.d.ts.map +1 -1
  83. package/dist/telegram/update-intake.d.ts +12 -3
  84. package/dist/telegram/update-intake.d.ts.map +1 -1
  85. package/dist/telegram/update-store-check.d.ts +1 -1
  86. package/dist/telegram/update-store-check.d.ts.map +1 -1
  87. package/dist/telegram/update-store-postgres.d.ts.map +1 -1
  88. package/dist/telegram/update-store-sqlite.d.ts.map +1 -1
  89. package/dist/telegram/update-store.d.ts +5 -1
  90. package/dist/telegram/update-store.d.ts.map +1 -1
  91. package/dist/tracking/attribution.d.ts +1 -1
  92. package/dist/tracking/attribution.d.ts.map +1 -1
  93. package/dist/tracking/client-visit.d.ts +3 -1
  94. package/dist/tracking/client-visit.d.ts.map +1 -1
  95. package/dist/tracking/client.d.ts.map +1 -1
  96. package/dist/tracking/performance/collector.d.ts +61 -0
  97. package/dist/tracking/performance/collector.d.ts.map +1 -0
  98. package/dist/tracking/performance/schema.d.ts +45 -0
  99. package/dist/tracking/performance/schema.d.ts.map +1 -0
  100. package/dist/tracking/performance/summary.d.ts +12 -0
  101. package/dist/tracking/performance/summary.d.ts.map +1 -0
  102. package/dist/tracking/privacy.d.ts +5 -0
  103. package/dist/tracking/privacy.d.ts.map +1 -0
  104. package/dist/tracking/server/telemetry-health.d.ts +31 -0
  105. package/dist/tracking/server/telemetry-health.d.ts.map +1 -0
  106. package/dist/xlsx/cells.d.ts +17 -0
  107. package/dist/xlsx/cells.d.ts.map +1 -0
  108. package/dist/xlsx/render.d.ts +11 -0
  109. package/dist/xlsx/render.d.ts.map +1 -0
  110. package/dist/xlsx/schema.d.ts +119 -0
  111. package/dist/xlsx/schema.d.ts.map +1 -0
  112. package/dist/xlsx/zip.d.ts +13 -0
  113. package/dist/xlsx/zip.d.ts.map +1 -0
  114. package/llms/agent-runtime.2.txt +40 -16
  115. package/llms/agent-runtime.3.txt +17 -0
  116. package/llms/agent-runtime.txt +4 -1
  117. package/llms/primitives.txt +21 -0
  118. package/llms/stitchkit.txt +9 -6
  119. package/llms/telegram.txt +46 -15
  120. package/llms/tracking-contract.txt +32 -0
  121. package/llms/tracking-performance.txt +21 -0
  122. package/llms/tracking-server.txt +1 -0
  123. package/llms/tracking.txt +75 -12
  124. package/llms/{upgrading-0.105.0-0.116.0.txt → upgrading-0.105.0-0.118.0.txt} +73 -3
  125. package/llms/upgrading.txt +1 -1
  126. package/llms/xlsx.txt +107 -0
  127. package/llms-full.txt +392 -34
  128. package/llms.txt +11 -7
  129. package/package.json +27 -9
  130. package/dist/{index-z3d6smer.js → index-tdpmfks8.js} +5 -5
@@ -1,102 +1,37 @@
1
- import"../index-m38ej7e5.js";
2
1
  import {
3
- defineContract2
4
- } from "../index-d9hq291n.js";
2
+ sendUnloadBeacon2,
3
+ redactTrackingText2,
4
+ redactTrackingValue2
5
+ } from "../index-vv1sch8a.js";
5
6
  import {
6
7
  ApiError2
7
8
  } from "../index-kfjkb396.js";
9
+ import {
10
+ isRecord
11
+ } from "../index-9jfdm5tg.js";
8
12
 
9
13
  // src/tracking/attribution.ts
10
- import { z as z2 } from "zod";
11
-
12
- // src/tracking/schemas.ts
13
- import { z } from "zod";
14
- var UtmDataSchema = z.object({
15
- source: z.string().max(200).optional(),
16
- medium: z.string().max(200).optional(),
17
- campaign: z.string().max(200).optional(),
18
- content: z.string().max(200).optional(),
19
- term: z.string().max(200).optional()
20
- });
21
- var AttributionDataSchema = z.object({
22
- utm: UtmDataSchema.optional(),
23
- referrer: z.string().optional(),
24
- landingPage: z.string().optional()
25
- });
26
- var DEFAULT_BUILD_ID_PATTERN = /^(dev|[a-f0-9]{7,40})$/;
27
- var TrackingDispositionStatusSchema = z.enum([
28
- "accepted",
29
- "duplicate",
30
- "identity-invalid",
31
- "excluded-bot"
32
- ]);
33
- var TrackingDispositionSchema = z.object({
34
- eventId: z.uuid(),
35
- status: TrackingDispositionStatusSchema
36
- });
37
- var TrackEventsResponseSchema = z.object({
38
- accepted: z.number().int().nonnegative(),
39
- dispositions: z.array(TrackingDispositionSchema)
40
- });
41
- var VisitBootstrapResponseSchema = z.object({
42
- visitId: z.uuid(),
43
- expiresAt: z.iso.datetime()
44
- });
45
- var TrackingOutboxStateSchema = z.enum(["available", "unavailable"]);
46
- function trackingEventShape(eventTypes) {
47
- return {
48
- eventId: z.uuid(),
49
- visitId: z.uuid(),
50
- browserStreamId: z.uuid(),
51
- browserSequence: z.number().int().nonnegative(),
52
- type: z.enum(eventTypes),
53
- page: z.string().max(2000),
54
- metadata: z.record(z.string(), z.unknown()).optional(),
55
- clientTimestamp: z.number()
56
- };
14
+ function isOptionalText(value) {
15
+ return value === undefined || typeof value === "string";
57
16
  }
58
- function visitEntryContextShape(buildIdPattern) {
59
- return {
60
- browserStreamId: z.uuid(),
61
- previousVisitId: z.uuid().optional(),
62
- origin: z.url().max(500),
63
- landingPath: z.string().startsWith("/").max(300).regex(/^[^?#]*$/),
64
- referrer: z.url().max(2000).optional(),
65
- utm: UtmDataSchema.optional(),
66
- displayMode: z.enum(["browser", "standalone"]),
67
- screenWidth: z.number().int().positive().max(20000),
68
- screenHeight: z.number().int().positive().max(20000),
69
- buildId: z.string().regex(buildIdPattern),
70
- outboxState: TrackingOutboxStateSchema,
71
- outboxQueued: z.number().int().nonnegative().max(1000),
72
- outboxDropped: z.number().int().nonnegative()
73
- };
17
+ var MAX_UTM_LENGTH = 200;
18
+ function isUtmField(value) {
19
+ return value === undefined || typeof value === "string" && value.length <= MAX_UTM_LENGTH;
74
20
  }
75
- function createTrackingSchemas(config) {
76
- const base = z.object(trackingEventShape(config.eventTypes));
77
- const event = config.eventExtras ? base.extend(config.eventExtras.shape) : base;
78
- const buildIdPattern = config.buildIdPattern ?? DEFAULT_BUILD_ID_PATTERN;
79
- const maxEvents = config.maxEventsPerBatch ?? 50;
80
- return {
81
- event,
82
- request: z.object({
83
- buildId: z.string().regex(buildIdPattern),
84
- events: z.array(event).min(1).max(maxEvents),
85
- utm: UtmDataSchema.optional()
86
- }),
87
- response: TrackEventsResponseSchema,
88
- disposition: TrackingDispositionSchema,
89
- entry: z.object(visitEntryContextShape(buildIdPattern)),
90
- bootstrap: VisitBootstrapResponseSchema
91
- };
21
+ function isUtm(value) {
22
+ if (value === undefined)
23
+ return true;
24
+ return isRecord(value) && ["source", "medium", "campaign", "content", "term"].every((field) => isUtmField(value[field]));
25
+ }
26
+ function isStoredTouch(value) {
27
+ if (!isRecord(value) || !Number.isFinite(value.capturedAt))
28
+ return false;
29
+ const { data } = value;
30
+ return isRecord(data) && isUtm(data.utm) && isOptionalText(data.referrer) && isOptionalText(data.landingPage);
31
+ }
32
+ function isStoredAttribution(value) {
33
+ return isRecord(value) && isStoredTouch(value.firstTouch) && isStoredTouch(value.currentTouch);
92
34
  }
93
-
94
- // src/tracking/attribution.ts
95
- var StoredTouchSchema = z2.object({ data: AttributionDataSchema, capturedAt: z2.number() });
96
- var StoredAttributionSchema = z2.object({
97
- firstTouch: StoredTouchSchema,
98
- currentTouch: StoredTouchSchema
99
- });
100
35
  function normalize(value) {
101
36
  if (!value)
102
37
  return;
@@ -133,12 +68,12 @@ function readStored(storage, key, now, ttlMs) {
133
68
  const raw = storage.getItem(key);
134
69
  if (!raw)
135
70
  return null;
136
- const parsed = StoredAttributionSchema.safeParse(JSON.parse(raw));
137
- if (!parsed.success || now - parsed.data.firstTouch.capturedAt > ttlMs) {
71
+ const parsed = JSON.parse(raw);
72
+ if (!isStoredAttribution(parsed) || now - parsed.firstTouch.capturedAt > ttlMs) {
138
73
  storage.removeItem(key);
139
74
  return null;
140
75
  }
141
- return parsed.data;
76
+ return parsed;
142
77
  } catch {
143
78
  return null;
144
79
  }
@@ -194,12 +129,6 @@ function resolveAttribution({
194
129
  });
195
130
  return { firstTouch, currentTouch: firstTouch };
196
131
  }
197
- // src/tracking/beacon.ts
198
- function sendUnloadBeacon(url, body, sender = typeof navigator === "undefined" ? undefined : navigator) {
199
- if (!sender || typeof sender.sendBeacon !== "function")
200
- return false;
201
- return sender.sendBeacon(url, body);
202
- }
203
132
  // src/tracking/clicks.ts
204
133
  function label(target) {
205
134
  return (target?.textContent ?? "").trim().slice(0, 100) || undefined;
@@ -430,9 +359,9 @@ function bootstrapTrackingVisit(deps, renew) {
430
359
  browserStreamId: visit.browserStreamId,
431
360
  previousVisitId: visit.visitId ?? undefined,
432
361
  origin: page.origin,
433
- landingPath: page.pathname,
434
- referrer: page.referrer || undefined,
435
- utm: touch?.currentTouch.utm?.source ? touch.currentTouch.utm : undefined,
362
+ landingPath: redactTrackingText2(page.pathname),
363
+ referrer: page.referrer ? redactTrackingText2(page.referrer) : undefined,
364
+ utm: touch?.currentTouch.utm?.source ? redactedUtm(touch.currentTouch.utm) : undefined,
436
365
  displayMode: page.displayMode,
437
366
  screenWidth: page.screenWidth,
438
367
  screenHeight: page.screenHeight,
@@ -502,12 +431,15 @@ function createVisitSequences(outbox, visit, options, fail) {
502
431
  } : undefined
503
432
  });
504
433
  }
434
+ function redactedUtm(utm) {
435
+ return Object.fromEntries(Object.entries(utm).map(([field, value]) => [field, redactTrackingText2(value)]));
436
+ }
505
437
  function pageAttribution(host, storage, referrerMap, search, pathname) {
506
438
  const page = host.page();
507
439
  return resolveAttribution({
508
440
  search,
509
441
  pathname,
510
- referrer: page.referrer,
442
+ referrer: redactTrackingText2(page.referrer),
511
443
  hostname: page.hostname,
512
444
  storage,
513
445
  referrerMap,
@@ -523,7 +455,7 @@ function pageViewDraft(host, type, pathname, previous) {
523
455
  title: page.title,
524
456
  screenWidth: page.viewportWidth,
525
457
  screenHeight: page.viewportHeight,
526
- referrer: previous ? undefined : page.referrer || undefined
458
+ referrer: previous || !page.referrer ? undefined : redactTrackingText2(page.referrer)
527
459
  },
528
460
  clientTimestamp: host.wallClock()
529
461
  };
@@ -633,10 +565,10 @@ function chunk(items, size) {
633
565
  return chunks;
634
566
  }
635
567
  function unloadBeacon(unloadUrl) {
636
- return (request) => unloadUrl === undefined ? false : sendUnloadBeacon(unloadUrl, JSON.stringify(request));
568
+ return (request) => unloadUrl === undefined ? false : sendUnloadBeacon2(unloadUrl, JSON.stringify(request));
637
569
  }
638
570
  function currentUtmOf(attribution) {
639
- return attribution?.currentTouch.utm?.source ? attribution.currentTouch.utm : undefined;
571
+ return attribution?.currentTouch.utm?.source ? redactedUtm(attribution.currentTouch.utm) : undefined;
640
572
  }
641
573
  function trackingTimings(config) {
642
574
  if (typeof config.buildId !== "string" || config.buildId.length === 0) {
@@ -815,30 +747,6 @@ function createTrackingClient(config) {
815
747
  function asMetadata(value) {
816
748
  return typeof value === "object" && value !== null ? { ...value } : undefined;
817
749
  }
818
- // src/tracking/contract.ts
819
- function createTrackingContract(config) {
820
- const schemas = createTrackingSchemas(config);
821
- return defineContract2({ prefix: config.prefix ?? "tracking", scope: config.scope }, {
822
- bootstrap: {
823
- method: "POST",
824
- path: "/visit",
825
- expose: ["HTTP"],
826
- desc: "Issue or renew a browser visit lease",
827
- input: schemas.entry,
828
- output: schemas.bootstrap
829
- },
830
- track: {
831
- method: "POST",
832
- path: "/events",
833
- expose: ["HTTP"],
834
- desc: "Batch track browser events",
835
- input: schemas.request,
836
- output: schemas.response,
837
- safelistedBody: true,
838
- maxJsonBodyBytes: config.maxJsonBodyBytes ?? 256 * 1024
839
- }
840
- });
841
- }
842
750
  // src/tracking/host.ts
843
751
  function browserTrackingHost() {
844
752
  return {
@@ -1055,7 +963,7 @@ function indexedDbOutboxStorage(name, factory = () => indexedDB) {
1055
963
  delete: (eventId) => void events.delete(eventId),
1056
964
  all: async () => {
1057
965
  const raw = await requestResult(events.index("sequence").getAll());
1058
- return raw.flatMap((value) => isRecord(value) ? [value] : []);
966
+ return raw.flatMap((value) => isRecord2(value) ? [value] : []);
1059
967
  },
1060
968
  count: () => requestResult(events.count())
1061
969
  }
@@ -1072,7 +980,7 @@ function indexedDbOutboxStorage(name, factory = () => indexedDB) {
1072
980
  }
1073
981
  };
1074
982
  }
1075
- function isRecord(value) {
983
+ function isRecord2(value) {
1076
984
  if (typeof value !== "object" || value === null)
1077
985
  return false;
1078
986
  const event = Reflect.get(value, "event");
@@ -1113,31 +1021,23 @@ function memoryOutboxStorage() {
1113
1021
  };
1114
1022
  }
1115
1023
  export {
1116
- AttributionDataSchema,
1117
1024
  CONVENTIONAL_TRACKING_EVENT_TYPES,
1118
- DEFAULT_BUILD_ID_PATTERN,
1119
- TrackEventsResponseSchema,
1120
- TrackingDispositionSchema,
1121
- TrackingDispositionStatusSchema,
1122
- TrackingOutboxStateSchema,
1123
- UtmDataSchema,
1124
- VisitBootstrapResponseSchema,
1125
1025
  browserTrackingHost,
1126
1026
  createOncePerPage,
1127
1027
  createScrollMilestones,
1128
1028
  createSequenceReserve,
1129
1029
  createTrackingClient,
1130
- createTrackingContract,
1131
1030
  createTrackingOutbox,
1132
- createTrackingSchemas,
1133
1031
  createVisibleTimeMeter,
1134
1032
  deliverTrackingBatch,
1135
1033
  indexedDbOutboxStorage,
1136
1034
  memoryOutboxStorage,
1137
1035
  parseReferrer,
1138
1036
  parseUtmFromSearch,
1037
+ redactTrackingText2 as redactTrackingText,
1038
+ redactTrackingValue2 as redactTrackingValue,
1139
1039
  resolveAttribution,
1140
1040
  resolveTrackedClick,
1141
1041
  scrollDepthPercent,
1142
- sendUnloadBeacon
1042
+ sendUnloadBeacon2 as sendUnloadBeacon
1143
1043
  };
@@ -0,0 +1,4 @@
1
+ export { XlsxCellError } from '../xlsx/cells.js';
2
+ export { renderXlsx, XLSX_MEDIA_TYPE } from '../xlsx/render.js';
3
+ export { type XlsxColumn, XlsxColumnSchema, XlsxSheetSchema, type XlsxWorkbook, XlsxWorkbookSchema, } from '../xlsx/schema.js';
4
+ //# sourceMappingURL=xlsx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx.d.ts","sourceRoot":"","sources":["../../src/entrypoints/xlsx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EACL,KAAK,UAAU,EACf,gBAAgB,EAChB,eAAe,EACf,KAAK,YAAY,EACjB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC"}