@stndrds/schema 1.0.0-alpha.203 → 1.0.0-alpha.205

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 (53) hide show
  1. package/dist/{attributes-Cy9o_xM1.d.ts → attributes-BpvQ7YKV.d.ts} +28 -7
  2. package/dist/{attributes-Cn0v3e37.d.mts → attributes-BykLtzP-.d.mts} +28 -7
  3. package/dist/{chunk-PMKCDRRO.mjs → chunk-7SSN7BXS.mjs} +49 -10
  4. package/dist/{chunk-MZOEL7FN.js → chunk-SJCEXYFG.js} +49 -10
  5. package/dist/{helpers-LCnn6DG3.d.ts → helpers-Bd-m3ygv.d.ts} +2 -2
  6. package/dist/{helpers-CED0HyXm.d.mts → helpers-xalb2T4E.d.mts} +2 -2
  7. package/dist/index.d.mts +362 -337
  8. package/dist/index.d.ts +362 -337
  9. package/dist/index.js +199 -95
  10. package/dist/index.mjs +129 -37
  11. package/dist/{types-CORdDGpb.d.mts → types-BmgBJGpl.d.mts} +1 -1
  12. package/dist/{types-B12E9LFe.d.ts → types-DeFxYTDc.d.ts} +1 -1
  13. package/dist/validation/all.d.mts +3 -3
  14. package/dist/validation/all.d.ts +3 -3
  15. package/dist/validation/all.js +10 -10
  16. package/dist/validation/all.mjs +3 -3
  17. package/dist/validation/complex/currency.d.mts +2 -2
  18. package/dist/validation/complex/currency.d.ts +2 -2
  19. package/dist/validation/complex/file.d.mts +2 -2
  20. package/dist/validation/complex/file.d.ts +2 -2
  21. package/dist/validation/complex/location.d.mts +2 -2
  22. package/dist/validation/complex/location.d.ts +2 -2
  23. package/dist/validation/complex/phone.d.mts +2 -2
  24. package/dist/validation/complex/phone.d.ts +2 -2
  25. package/dist/validation/complex/relation.d.mts +2 -2
  26. package/dist/validation/complex/relation.d.ts +2 -2
  27. package/dist/validation/complex/richtext.d.mts +2 -2
  28. package/dist/validation/complex/richtext.d.ts +2 -2
  29. package/dist/validation/complex/select.d.mts +2 -2
  30. package/dist/validation/complex/select.d.ts +2 -2
  31. package/dist/validation/complex/user.d.mts +2 -2
  32. package/dist/validation/complex/user.d.ts +2 -2
  33. package/dist/validation/computed/formula.d.mts +2 -2
  34. package/dist/validation/computed/formula.d.ts +2 -2
  35. package/dist/validation/computed/rollup.d.mts +2 -2
  36. package/dist/validation/computed/rollup.d.ts +2 -2
  37. package/dist/validation/config/index.d.mts +1 -1
  38. package/dist/validation/config/index.d.ts +1 -1
  39. package/dist/validation/core/index.d.mts +3 -3
  40. package/dist/validation/core/index.d.ts +3 -3
  41. package/dist/validation/object/index.d.mts +3 -3
  42. package/dist/validation/object/index.d.ts +3 -3
  43. package/dist/validation/object/index.js +16 -16
  44. package/dist/validation/object/index.mjs +3 -3
  45. package/dist/validation/primitives/checkbox.d.mts +2 -2
  46. package/dist/validation/primitives/checkbox.d.ts +2 -2
  47. package/dist/validation/primitives/date.d.mts +2 -2
  48. package/dist/validation/primitives/date.d.ts +2 -2
  49. package/dist/validation/primitives/number.d.mts +2 -2
  50. package/dist/validation/primitives/number.d.ts +2 -2
  51. package/dist/validation/primitives/text.d.mts +2 -2
  52. package/dist/validation/primitives/text.d.ts +2 -2
  53. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -3,11 +3,13 @@
3
3
  var chunkFRCDMQER_js = require('./chunk-FRCDMQER.js');
4
4
  require('./chunk-PGERPYDR.js');
5
5
  var chunkNSM2JPC3_js = require('./chunk-NSM2JPC3.js');
6
- var chunkMZOEL7FN_js = require('./chunk-MZOEL7FN.js');
6
+ var chunkSJCEXYFG_js = require('./chunk-SJCEXYFG.js');
7
7
  require('./chunk-5WATIVCA.js');
8
8
  require('./chunk-O44XVGHE.js');
9
9
  require('./chunk-YIP5FJ5H.js');
10
10
  require('./chunk-SGSGREPG.js');
11
+ var chunkEBGRZUIH_js = require('./chunk-EBGRZUIH.js');
12
+ require('./chunk-BV3IUMMW.js');
11
13
  require('./chunk-EW5XR2X3.js');
12
14
  require('./chunk-QWKLQRBX.js');
13
15
  require('./chunk-T6L2MUG2.js');
@@ -16,8 +18,6 @@ require('./chunk-V2UA2D4E.js');
16
18
  require('./chunk-ACKMC6FL.js');
17
19
  require('./chunk-ROLWVTU3.js');
18
20
  require('./chunk-E6JUYGJX.js');
19
- var chunkEBGRZUIH_js = require('./chunk-EBGRZUIH.js');
20
- require('./chunk-BV3IUMMW.js');
21
21
  var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
22
22
  var constants = require('@stndrds/constants');
23
23
  var z3 = require('zod');
@@ -26,6 +26,35 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
26
26
 
27
27
  var z3__default = /*#__PURE__*/_interopDefault(z3);
28
28
 
29
+ // src/types/notifications.ts
30
+ var NOTIFICATION_KINDS = ["fyi", "task", "question", "handoff", "system"];
31
+ var NOTIFICATION_PRIORITIES = ["low", "normal", "high", "urgent"];
32
+ var NOTIFICATION_SENSITIVITIES = ["public", "internal", "sensitive"];
33
+ var NOTIFICATION_INBOX_STATES = ["unread", "read", "archived", "snoozed"];
34
+ var NOTIFICATION_WORK_STATES = [
35
+ "none",
36
+ "pending",
37
+ "processing",
38
+ "completed",
39
+ "dismissed",
40
+ "expired",
41
+ "failed"
42
+ ];
43
+ var NOTIFICATION_TYPE_AGENT_SESSION_COMPLETED = "agent.session.completed";
44
+ var NOTIFICATION_TYPE_AGENT_SESSION_FAILED = "agent.session.failed";
45
+ var NOTIFICATION_TYPE_AGENT_SESSION_WAITING_HUMAN = "agent.session.waiting_human";
46
+ var NOTIFICATION_TYPE_AGENT_SESSION_TIMEOUT = "agent.session.timeout";
47
+ var NOTIFICATION_TYPE_AGENT_TASK_ASSIGNED = "agent.task.assigned";
48
+ var NOTIFICATION_TYPE_AGENT_QUESTION_REQUESTED = "agent.question.requested";
49
+ var NOTIFICATION_TYPES_V1 = [
50
+ NOTIFICATION_TYPE_AGENT_SESSION_COMPLETED,
51
+ NOTIFICATION_TYPE_AGENT_SESSION_FAILED,
52
+ NOTIFICATION_TYPE_AGENT_SESSION_WAITING_HUMAN,
53
+ NOTIFICATION_TYPE_AGENT_SESSION_TIMEOUT,
54
+ NOTIFICATION_TYPE_AGENT_TASK_ASSIGNED,
55
+ NOTIFICATION_TYPE_AGENT_QUESTION_REQUESTED
56
+ ];
57
+
29
58
  // src/types/attribute-protection.ts
30
59
  var IDENTITY_PROPERTIES = ["name", "type"];
31
60
  var BEHAVIOR_PROPERTIES = [
@@ -1239,7 +1268,7 @@ var BaseAttributeBuilder = class {
1239
1268
  * @see https://standardschema.dev/
1240
1269
  */
1241
1270
  get "~standard"() {
1242
- const zodSchema = chunkMZOEL7FN_js.createAttributeValidator(this.build());
1271
+ const zodSchema = chunkSJCEXYFG_js.createAttributeValidator(this.build());
1243
1272
  return createStandardSchemaProps(zodSchema);
1244
1273
  }
1245
1274
  constructor(type, name, label) {
@@ -2003,9 +2032,9 @@ var RollupAttributeBuilder = class extends BaseAttributeBuilder {
2003
2032
  if (fn === "original" && targetType !== void 0 && targetType !== "select" && targetType !== "status" && targetType !== "multiselect") {
2004
2033
  const relation2 = this.attr.relationAttribute ?? "relation";
2005
2034
  const target = this.attr.targetAttribute ?? "field";
2006
- throw new chunkMZOEL7FN_js.SchemaError(
2035
+ throw new chunkSJCEXYFG_js.SchemaError(
2007
2036
  `Rollup "${this.attr.name}": .using("original") only supports a "select", "status", or "multiselect" target, but .targetType("${targetType}") was given. To surface a plain ${targetType} value from a related record, use a formula instead \u2014 e.g. formula({ name: "${this.attr.name}", label: "\u2026" }).expression("${relation2}.${target}").`,
2008
- chunkMZOEL7FN_js.SchemaErrorCode.VALIDATION_FAILED
2037
+ chunkSJCEXYFG_js.SchemaErrorCode.VALIDATION_FAILED
2009
2038
  );
2010
2039
  }
2011
2040
  return super.build();
@@ -2501,7 +2530,7 @@ var ObjectBuilder = class {
2501
2530
  * @see https://standardschema.dev/
2502
2531
  */
2503
2532
  get "~standard"() {
2504
- const zodSchema = chunkMZOEL7FN_js.createObjectValidator(this.build());
2533
+ const zodSchema = chunkSJCEXYFG_js.createObjectValidator(this.build());
2505
2534
  return createStandardSchemaProps(zodSchema);
2506
2535
  }
2507
2536
  /**
@@ -2705,17 +2734,17 @@ var ObjectBuilder = class {
2705
2734
  throw new Error("[ObjectBuilder] Missing required field: label");
2706
2735
  }
2707
2736
  if (!this._labelExpression) {
2708
- throw new chunkMZOEL7FN_js.SchemaError(
2737
+ throw new chunkSJCEXYFG_js.SchemaError(
2709
2738
  `Object "${this.obj.name}" must have a labelExpression. The labelExpression defines how records are displayed in lists and relations (e.g. "{{ name }}").`,
2710
- chunkMZOEL7FN_js.SchemaErrorCode.VALIDATION_FAILED
2739
+ chunkSJCEXYFG_js.SchemaErrorCode.VALIDATION_FAILED
2711
2740
  );
2712
2741
  }
2713
2742
  const labelResult = labelExpressionSchema.safeParse(this._labelExpression);
2714
2743
  if (!labelResult.success) {
2715
2744
  const errorMsg = labelResult.error.issues[0]?.message ?? "Invalid labelExpression";
2716
- throw new chunkMZOEL7FN_js.SchemaError(
2745
+ throw new chunkSJCEXYFG_js.SchemaError(
2717
2746
  `Invalid labelExpression for "${this.obj.name}": ${errorMsg}`,
2718
- chunkMZOEL7FN_js.SchemaErrorCode.VALIDATION_FAILED
2747
+ chunkSJCEXYFG_js.SchemaErrorCode.VALIDATION_FAILED
2719
2748
  );
2720
2749
  }
2721
2750
  const sortedVersions = [...this._migrations].sort((a, b) => a.version - b.version);
@@ -2754,7 +2783,7 @@ var ObjectBuilder = class {
2754
2783
  objectNameSchema.parse(name);
2755
2784
  } catch (error) {
2756
2785
  if (error instanceof z3__default.default.ZodError) {
2757
- throw new chunkMZOEL7FN_js.SchemaError(error.issues[0].message, chunkMZOEL7FN_js.SchemaErrorCode.INVALID_OBJECT_NAME);
2786
+ throw new chunkSJCEXYFG_js.SchemaError(error.issues[0].message, chunkSJCEXYFG_js.SchemaErrorCode.INVALID_OBJECT_NAME);
2758
2787
  }
2759
2788
  throw error;
2760
2789
  }
@@ -4989,6 +5018,9 @@ var LIVE_EVENT_TYPE_REGISTRY = {
4989
5018
  "view.projection.stale": true,
4990
5019
  "agent.session.patch": true,
4991
5020
  "agent.unread.patch": true,
5021
+ "notification.created": true,
5022
+ "notification.recipient.patch": true,
5023
+ "notification.count.patch": true,
4992
5024
  "conversation.renamed": true,
4993
5025
  "channel.revoked": true
4994
5026
  };
@@ -5004,6 +5036,18 @@ var CHANNEL_REVOKED_REASONS = [
5004
5036
  "workspace-left",
5005
5037
  "object-deleted"
5006
5038
  ];
5039
+ var NOTIFICATION_RECIPIENT_PATCH_KEYS = [
5040
+ "inboxState",
5041
+ "workState",
5042
+ "lockedAt",
5043
+ "lockedByActorId",
5044
+ "readAt",
5045
+ "archivedAt",
5046
+ "snoozedUntil",
5047
+ "completedAt",
5048
+ "dismissedAt",
5049
+ "updatedAt"
5050
+ ];
5007
5051
  function isLiveEventType(value) {
5008
5052
  return typeof value === "string" && LIVE_EVENT_TYPES.includes(value);
5009
5053
  }
@@ -5028,6 +5072,12 @@ function isLiveEventPayloadForType(type, payload) {
5028
5072
  return isAgentSessionPatchPayload(payload);
5029
5073
  case "agent.unread.patch":
5030
5074
  return isAgentUnreadPatchPayload(payload);
5075
+ case "notification.created":
5076
+ return isNotificationCreatedPayload(payload);
5077
+ case "notification.recipient.patch":
5078
+ return isNotificationRecipientPatchPayload(payload);
5079
+ case "notification.count.patch":
5080
+ return isNotificationCountPatchPayload(payload);
5031
5081
  case "conversation.renamed":
5032
5082
  return isConversationRenamedPayload(payload);
5033
5083
  case "channel.revoked":
@@ -5042,15 +5092,31 @@ function isRecord(value) {
5042
5092
  function isString(value) {
5043
5093
  return typeof value === "string";
5044
5094
  }
5095
+ function isNullableString(value) {
5096
+ return value === null || isString(value);
5097
+ }
5045
5098
  function isVersion(value) {
5046
5099
  return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
5047
5100
  }
5101
+ function isIsoDateString(value) {
5102
+ if (!isString(value)) {
5103
+ return false;
5104
+ }
5105
+ const timestamp = Date.parse(value);
5106
+ return Number.isFinite(timestamp) && new Date(timestamp).toISOString() === value;
5107
+ }
5108
+ function isNullableIsoDateString(value) {
5109
+ return value === null || isIsoDateString(value);
5110
+ }
5048
5111
  function hasString(value, key) {
5049
5112
  return isString(value[key]);
5050
5113
  }
5051
5114
  function hasVersion(value, key) {
5052
5115
  return isVersion(value[key]);
5053
5116
  }
5117
+ function hasIsoDateString(value, key) {
5118
+ return isIsoDateString(value[key]);
5119
+ }
5054
5120
  function hasOptional(value, key, predicate) {
5055
5121
  return !Object.hasOwn(value, key) || predicate(value[key]);
5056
5122
  }
@@ -5060,6 +5126,24 @@ function isOneOf(value, values) {
5060
5126
  function isCompletionStatus(value) {
5061
5127
  return isOneOf(value, COMPLETION_STATUSES);
5062
5128
  }
5129
+ function isNotificationKind(value) {
5130
+ return isOneOf(value, NOTIFICATION_KINDS);
5131
+ }
5132
+ function isNotificationPriority(value) {
5133
+ return isOneOf(value, NOTIFICATION_PRIORITIES);
5134
+ }
5135
+ function isNotificationSensitivity(value) {
5136
+ return isOneOf(value, NOTIFICATION_SENSITIVITIES);
5137
+ }
5138
+ function isNotificationInboxState(value) {
5139
+ return isOneOf(value, NOTIFICATION_INBOX_STATES);
5140
+ }
5141
+ function isNotificationWorkState(value) {
5142
+ return isOneOf(value, NOTIFICATION_WORK_STATES);
5143
+ }
5144
+ function isNotificationSubject(value) {
5145
+ return isRecord(value) && hasString(value, "type") && hasString(value, "id");
5146
+ }
5063
5147
  function isRecordFieldPatch(value) {
5064
5148
  return isRecord(value) && hasString(value, "fieldKey") && Object.hasOwn(value, "value") && hasVersion(value, "version");
5065
5149
  }
@@ -5078,6 +5162,32 @@ function isAgentSessionPatchPayload(payload) {
5078
5162
  function isAgentUnreadPatchPayload(payload) {
5079
5163
  return payload.type === "agent.unread.patch" && hasString(payload, "workspaceId") && hasString(payload, "targetActorId") && hasString(payload, "sessionId") && hasVersion(payload, "unreadCount") && hasVersion(payload, "version") && hasString(payload, "updatedAt") && (!Object.hasOwn(payload, "session") || isRecord(payload.session) && payload.session.id === payload.sessionId);
5080
5164
  }
5165
+ function isLiveNotification(value) {
5166
+ return isRecord(value) && hasString(value, "id") && hasString(value, "tenantId") && hasOptional(value, "senderActorId", isString) && hasOptional(value, "rootActorId", isString) && hasOptional(value, "triggeredByActorId", isString) && isNotificationKind(value.kind) && hasString(value, "type") && hasOptional(value, "subject", isNotificationSubject) && hasString(value, "title") && hasOptional(value, "summary", isString) && isRecord(value.payload) && isNotificationPriority(value.priority) && isNotificationSensitivity(value.sensitivity) && hasOptional(value, "threadKey", isString) && hasOptional(value, "idempotencyKey", isString) && hasOptional(value, "expiresAt", isIsoDateString) && hasIsoDateString(value, "createdAt") && hasIsoDateString(value, "updatedAt");
5167
+ }
5168
+ function isLiveNotificationRecipient(value) {
5169
+ return isRecord(value) && hasString(value, "id") && hasString(value, "tenantId") && hasString(value, "notificationId") && hasString(value, "recipientActorId") && isNotificationInboxState(value.inboxState) && isNotificationWorkState(value.workState) && hasOptional(value, "lockedAt", isIsoDateString) && hasOptional(value, "lockedByActorId", isString) && hasOptional(value, "readAt", isIsoDateString) && hasOptional(value, "archivedAt", isIsoDateString) && hasOptional(value, "snoozedUntil", isIsoDateString) && hasOptional(value, "completedAt", isIsoDateString) && hasOptional(value, "dismissedAt", isIsoDateString) && hasIsoDateString(value, "createdAt") && hasIsoDateString(value, "updatedAt");
5170
+ }
5171
+ function isNotificationRecipientPatch(value) {
5172
+ if (!isRecord(value)) {
5173
+ return false;
5174
+ }
5175
+ return Object.keys(value).every(
5176
+ (key) => NOTIFICATION_RECIPIENT_PATCH_KEYS.includes(key)
5177
+ ) && hasOptional(value, "inboxState", isNotificationInboxState) && hasOptional(value, "workState", isNotificationWorkState) && hasOptional(value, "lockedAt", isNullableIsoDateString) && hasOptional(value, "lockedByActorId", isNullableString) && hasOptional(value, "readAt", isNullableIsoDateString) && hasOptional(value, "archivedAt", isNullableIsoDateString) && hasOptional(value, "snoozedUntil", isNullableIsoDateString) && hasOptional(value, "completedAt", isNullableIsoDateString) && hasOptional(value, "dismissedAt", isNullableIsoDateString) && hasOptional(value, "updatedAt", isIsoDateString);
5178
+ }
5179
+ function isNotificationCreatedPayload(payload) {
5180
+ const notification = isLiveNotification(payload.notification) ? payload.notification : null;
5181
+ return payload.type === "notification.created" && hasString(payload, "workspaceId") && notification !== null && Array.isArray(payload.recipients) && payload.recipients.length > 0 && payload.recipients.every(
5182
+ (recipient) => isLiveNotificationRecipient(recipient) && recipient.notificationId === notification.id
5183
+ ) && hasVersion(payload, "version") && hasIsoDateString(payload, "updatedAt");
5184
+ }
5185
+ function isNotificationRecipientPatchPayload(payload) {
5186
+ return payload.type === "notification.recipient.patch" && hasString(payload, "workspaceId") && hasString(payload, "recipientId") && hasString(payload, "recipientActorId") && isNotificationRecipientPatch(payload.patch) && hasVersion(payload, "version") && hasIsoDateString(payload, "updatedAt");
5187
+ }
5188
+ function isNotificationCountPatchPayload(payload) {
5189
+ return payload.type === "notification.count.patch" && hasString(payload, "workspaceId") && hasString(payload, "targetActorId") && hasVersion(payload, "unread") && hasVersion(payload, "pendingWork") && hasVersion(payload, "version") && hasIsoDateString(payload, "updatedAt");
5190
+ }
5081
5191
  function isConversationRenamedPayload(payload) {
5082
5192
  return payload.type === "conversation.renamed" && hasString(payload, "workspaceId") && hasString(payload, "sessionId") && hasString(payload, "title") && hasVersion(payload, "version") && hasString(payload, "updatedAt");
5083
5193
  }
@@ -5237,6 +5347,7 @@ function compileComputedFormula(input) {
5237
5347
  returnType: input.returnType,
5238
5348
  valueType: inferred.valueType,
5239
5349
  dependencies,
5350
+ ast,
5240
5351
  ...inferred.optionsSource ? { optionsSource: inferred.optionsSource } : {},
5241
5352
  ...inferred.targetAttributeType ? { targetAttributeType: inferred.targetAttributeType } : {},
5242
5353
  dependenciesHash: createDependenciesHash({
@@ -5513,7 +5624,7 @@ function inferFunctionReturn(functionName, args) {
5513
5624
  return { valueType: { kind: "scalar", type: "text" }, dependencies };
5514
5625
  case "sum":
5515
5626
  case "avg":
5516
- ensureNumericCollectionOrScalar(functionName, args[0]);
5627
+ ensureCollectionOrScalarType(functionName, args[0], "number");
5517
5628
  return { valueType: { kind: "scalar", type: "number" }, dependencies };
5518
5629
  case "count":
5519
5630
  case "count_empty":
@@ -5521,11 +5632,7 @@ function inferFunctionReturn(functionName, args) {
5521
5632
  case "count_unique":
5522
5633
  case "percent_empty":
5523
5634
  case "percent_not_empty":
5524
- if (functionName === "count_unique") {
5525
- ensureUniqueCountSource(args[0]);
5526
- } else {
5527
- ensureCollectionSource(functionName, args[0]);
5528
- }
5635
+ ensureCollectionSource(functionName, args[0]);
5529
5636
  return { valueType: { kind: "scalar", type: "number" }, dependencies };
5530
5637
  case "min":
5531
5638
  case "max":
@@ -5538,7 +5645,7 @@ function inferFunctionReturn(functionName, args) {
5538
5645
  };
5539
5646
  case "earliest":
5540
5647
  case "latest":
5541
- ensureDateCollectionOrScalar(functionName, args[0]);
5648
+ ensureCollectionOrScalarType(functionName, args[0], "date");
5542
5649
  return {
5543
5650
  valueType: { kind: "scalar", type: "date" },
5544
5651
  dependencies,
@@ -5594,12 +5701,13 @@ function inferFirstFunction(source, dependencies) {
5594
5701
  }
5595
5702
  function inferBinary(operator, left, right) {
5596
5703
  const dependencies = uniqueDependencies([...left.dependencies, ...right.dependencies]);
5597
- if (operator === "+" || operator === "-" || operator === "*" || operator === "/") {
5598
- if (left.valueType.kind === "collection" || right.valueType.kind === "collection") {
5599
- throw new ComputedFormulaCompileError(
5600
- `Cannot use collection values with arithmetic operator "${operator}"`
5601
- );
5602
- }
5704
+ const isArithmetic = operator === "+" || operator === "-" || operator === "*" || operator === "/";
5705
+ if (left.valueType.kind === "collection" || right.valueType.kind === "collection") {
5706
+ throw new ComputedFormulaCompileError(
5707
+ `Cannot use collection values with ${isArithmetic ? "arithmetic" : "comparison"} operator "${operator}"`
5708
+ );
5709
+ }
5710
+ if (isArithmetic) {
5603
5711
  if (operator === "+" && (left.valueType.type === "text" || right.valueType.type === "text")) {
5604
5712
  return { valueType: { kind: "scalar", type: "text" }, dependencies };
5605
5713
  }
@@ -5607,11 +5715,6 @@ function inferBinary(operator, left, right) {
5607
5715
  ensureScalarType(right.valueType, "number", `Operator "${operator}" expects number operands`);
5608
5716
  return { valueType: { kind: "scalar", type: "number" }, dependencies };
5609
5717
  }
5610
- if (left.valueType.kind === "collection" || right.valueType.kind === "collection") {
5611
- throw new ComputedFormulaCompileError(
5612
- `Cannot use collection values with comparison operator "${operator}"`
5613
- );
5614
- }
5615
5718
  if (operator === "==" || operator === "!=") {
5616
5719
  if (left.valueType.type !== right.valueType.type) {
5617
5720
  throw new ComputedFormulaCompileError(
@@ -5634,16 +5737,10 @@ function ensureNoCollections(args, message) {
5634
5737
  }
5635
5738
  }
5636
5739
  }
5637
- function ensureNumericCollectionOrScalar(functionName, expression) {
5740
+ function ensureCollectionOrScalarType(functionName, expression, expected) {
5638
5741
  const type = expression.valueType.kind === "collection" ? expression.valueType.itemType : expression.valueType.type;
5639
- if (type !== "number") {
5640
- throw new ComputedFormulaCompileError(`Function "${functionName}" expects number values`);
5641
- }
5642
- }
5643
- function ensureDateCollectionOrScalar(functionName, expression) {
5644
- const type = expression.valueType.kind === "collection" ? expression.valueType.itemType : expression.valueType.type;
5645
- if (type !== "date") {
5646
- throw new ComputedFormulaCompileError(`Function "${functionName}" expects date values`);
5742
+ if (type !== expected) {
5743
+ throw new ComputedFormulaCompileError(`Function "${functionName}" expects ${expected} values`);
5647
5744
  }
5648
5745
  }
5649
5746
  function ensureMinMaxSource(functionName, expression) {
@@ -5662,11 +5759,6 @@ function ensureCollectionSource(functionName, expression) {
5662
5759
  throw new ComputedFormulaCompileError(`Function "${functionName}" expects a collection`);
5663
5760
  }
5664
5761
  }
5665
- function ensureUniqueCountSource(expression) {
5666
- if (expression.valueType.kind !== "collection") {
5667
- throw new ComputedFormulaCompileError('Function "count_unique" expects a collection');
5668
- }
5669
- }
5670
5762
  function ensureScalarType(valueType, expectedType, message) {
5671
5763
  if (valueType.kind !== "scalar" || valueType.type !== expectedType) {
5672
5764
  throw new ComputedFormulaCompileError(message);
@@ -6625,7 +6717,7 @@ function assertOperatorForType(operator, type, context) {
6625
6717
  if (!ops?.includes(operator)) {
6626
6718
  const validList = ops?.length ? ops.join(", ") : "(no operators registered for this type)";
6627
6719
  const summary = `Operator "${operator}" is not valid for ${context} type "${type}". Valid operators: ${validList}.`;
6628
- throw new chunkMZOEL7FN_js.ValidationError(summary, [
6720
+ throw new chunkSJCEXYFG_js.ValidationError(summary, [
6629
6721
  {
6630
6722
  path: ["operator"],
6631
6723
  message: summary
@@ -6637,19 +6729,19 @@ function validateQualifiedRule(rule, context) {
6637
6729
  const rootAttr = context.attributes.find((a) => a.name === rule.attribute);
6638
6730
  const systemOps = SYSTEM_FILTER_OPERATORS[rule.attribute];
6639
6731
  if (!(rootAttr || systemOps)) {
6640
- throw new chunkMZOEL7FN_js.ValidationError(`Unknown attribute: ${rule.attribute}`, [
6732
+ throw new chunkSJCEXYFG_js.ValidationError(`Unknown attribute: ${rule.attribute}`, [
6641
6733
  { path: ["attribute"], message: `Unknown attribute: ${rule.attribute}` }
6642
6734
  ]);
6643
6735
  }
6644
6736
  if (!rootAttr) {
6645
6737
  if (rule.property) {
6646
- throw new chunkMZOEL7FN_js.ValidationError(`Cannot qualify system attribute "${rule.attribute}"`, [
6738
+ throw new chunkSJCEXYFG_js.ValidationError(`Cannot qualify system attribute "${rule.attribute}"`, [
6647
6739
  { path: ["property"], message: `"${rule.attribute}" is a system column, not a reference` }
6648
6740
  ]);
6649
6741
  }
6650
6742
  if (!systemOps.includes(rule.operator)) {
6651
6743
  const summary = `Operator "${rule.operator}" is not valid for system attribute "${rule.attribute}". Valid operators: ${systemOps.join(", ")}.`;
6652
- throw new chunkMZOEL7FN_js.ValidationError(summary, [{ path: ["operator"], message: summary }]);
6744
+ throw new chunkSJCEXYFG_js.ValidationError(summary, [{ path: ["operator"], message: summary }]);
6653
6745
  }
6654
6746
  return;
6655
6747
  }
@@ -6658,24 +6750,24 @@ function validateQualifiedRule(rule, context) {
6658
6750
  if (!ops.includes(rule.operator)) {
6659
6751
  const validList = ops.length ? ops.join(", ") : "(not filterable)";
6660
6752
  const summary = `Operator "${rule.operator}" is not valid for attribute "${rootAttr.name}". Valid operators: ${validList}.`;
6661
- throw new chunkMZOEL7FN_js.ValidationError(summary, [{ path: ["operator"], message: summary }]);
6753
+ throw new chunkSJCEXYFG_js.ValidationError(summary, [{ path: ["operator"], message: summary }]);
6662
6754
  }
6663
6755
  return;
6664
6756
  }
6665
6757
  if (!REFERENCE_TYPES.has(rootAttr.type)) {
6666
- throw new chunkMZOEL7FN_js.ValidationError(`Cannot qualify ${rootAttr.type} attribute "${rule.attribute}"`, [
6758
+ throw new chunkSJCEXYFG_js.ValidationError(`Cannot qualify ${rootAttr.type} attribute "${rule.attribute}"`, [
6667
6759
  { path: ["property"], message: `Attribute "${rule.attribute}" is not a reference type` }
6668
6760
  ]);
6669
6761
  }
6670
6762
  const propSchema = rootAttr.properties;
6671
6763
  if (!propSchema) {
6672
- throw new chunkMZOEL7FN_js.ValidationError(`Attribute "${rule.attribute}" has no qualifyWith schema`, [
6764
+ throw new chunkSJCEXYFG_js.ValidationError(`Attribute "${rule.attribute}" has no qualifyWith schema`, [
6673
6765
  { path: ["property"], message: `"${rule.attribute}" has no qualifyWith` }
6674
6766
  ]);
6675
6767
  }
6676
6768
  const propDef = propSchema.definitions.find((p) => p.name === rule.property);
6677
6769
  if (!propDef) {
6678
- throw new chunkMZOEL7FN_js.ValidationError(
6770
+ throw new chunkSJCEXYFG_js.ValidationError(
6679
6771
  `Property "${rule.property}" not defined on "${rule.attribute}".qualifyWith()`,
6680
6772
  [{ path: ["property"], message: `Unknown property: ${rule.property}` }]
6681
6773
  );
@@ -6717,175 +6809,175 @@ Object.defineProperty(exports, "parseComputedFormula", {
6717
6809
  });
6718
6810
  Object.defineProperty(exports, "AccessDeniedError", {
6719
6811
  enumerable: true,
6720
- get: function () { return chunkMZOEL7FN_js.AccessDeniedError; }
6812
+ get: function () { return chunkSJCEXYFG_js.AccessDeniedError; }
6721
6813
  });
6722
6814
  Object.defineProperty(exports, "AttributeInUseError", {
6723
6815
  enumerable: true,
6724
- get: function () { return chunkMZOEL7FN_js.AttributeInUseError; }
6816
+ get: function () { return chunkSJCEXYFG_js.AttributeInUseError; }
6725
6817
  });
6726
6818
  Object.defineProperty(exports, "AttributeNotFoundError", {
6727
6819
  enumerable: true,
6728
- get: function () { return chunkMZOEL7FN_js.AttributeNotFoundError; }
6820
+ get: function () { return chunkSJCEXYFG_js.AttributeNotFoundError; }
6729
6821
  });
6730
6822
  Object.defineProperty(exports, "ChangeTypeNotSupportedError", {
6731
6823
  enumerable: true,
6732
- get: function () { return chunkMZOEL7FN_js.ChangeTypeNotSupportedError; }
6824
+ get: function () { return chunkSJCEXYFG_js.ChangeTypeNotSupportedError; }
6733
6825
  });
6734
6826
  Object.defineProperty(exports, "ConcurrentModificationError", {
6735
6827
  enumerable: true,
6736
- get: function () { return chunkMZOEL7FN_js.ConcurrentModificationError; }
6828
+ get: function () { return chunkSJCEXYFG_js.ConcurrentModificationError; }
6737
6829
  });
6738
6830
  Object.defineProperty(exports, "DestructiveSyncNotAllowedError", {
6739
6831
  enumerable: true,
6740
- get: function () { return chunkMZOEL7FN_js.DestructiveSyncNotAllowedError; }
6832
+ get: function () { return chunkSJCEXYFG_js.DestructiveSyncNotAllowedError; }
6741
6833
  });
6742
6834
  Object.defineProperty(exports, "DuplicateError", {
6743
6835
  enumerable: true,
6744
- get: function () { return chunkMZOEL7FN_js.DuplicateError; }
6836
+ get: function () { return chunkSJCEXYFG_js.DuplicateError; }
6745
6837
  });
6746
6838
  Object.defineProperty(exports, "ForbiddenError", {
6747
6839
  enumerable: true,
6748
- get: function () { return chunkMZOEL7FN_js.ForbiddenError; }
6840
+ get: function () { return chunkSJCEXYFG_js.ForbiddenError; }
6749
6841
  });
6750
6842
  Object.defineProperty(exports, "MemoryNotFoundError", {
6751
6843
  enumerable: true,
6752
- get: function () { return chunkMZOEL7FN_js.MemoryNotFoundError; }
6844
+ get: function () { return chunkSJCEXYFG_js.MemoryNotFoundError; }
6753
6845
  });
6754
6846
  Object.defineProperty(exports, "MigrationTimeoutError", {
6755
6847
  enumerable: true,
6756
- get: function () { return chunkMZOEL7FN_js.MigrationTimeoutError; }
6848
+ get: function () { return chunkSJCEXYFG_js.MigrationTimeoutError; }
6757
6849
  });
6758
6850
  Object.defineProperty(exports, "NotFoundError", {
6759
6851
  enumerable: true,
6760
- get: function () { return chunkMZOEL7FN_js.NotFoundError; }
6852
+ get: function () { return chunkSJCEXYFG_js.NotFoundError; }
6761
6853
  });
6762
6854
  Object.defineProperty(exports, "NotImplementedError", {
6763
6855
  enumerable: true,
6764
- get: function () { return chunkMZOEL7FN_js.NotImplementedError; }
6856
+ get: function () { return chunkSJCEXYFG_js.NotImplementedError; }
6765
6857
  });
6766
6858
  Object.defineProperty(exports, "ObjectNotFoundError", {
6767
6859
  enumerable: true,
6768
- get: function () { return chunkMZOEL7FN_js.ObjectNotFoundError; }
6860
+ get: function () { return chunkSJCEXYFG_js.ObjectNotFoundError; }
6769
6861
  });
6770
6862
  Object.defineProperty(exports, "ObjectReferencedError", {
6771
6863
  enumerable: true,
6772
- get: function () { return chunkMZOEL7FN_js.ObjectReferencedError; }
6864
+ get: function () { return chunkSJCEXYFG_js.ObjectReferencedError; }
6773
6865
  });
6774
6866
  Object.defineProperty(exports, "OrphanSystemAttributeError", {
6775
6867
  enumerable: true,
6776
- get: function () { return chunkMZOEL7FN_js.OrphanSystemAttributeError; }
6868
+ get: function () { return chunkSJCEXYFG_js.OrphanSystemAttributeError; }
6777
6869
  });
6778
6870
  Object.defineProperty(exports, "ProtectedResourceError", {
6779
6871
  enumerable: true,
6780
- get: function () { return chunkMZOEL7FN_js.ProtectedResourceError; }
6872
+ get: function () { return chunkSJCEXYFG_js.ProtectedResourceError; }
6781
6873
  });
6782
6874
  Object.defineProperty(exports, "ProtectedRoleError", {
6783
6875
  enumerable: true,
6784
- get: function () { return chunkMZOEL7FN_js.ProtectedRoleError; }
6876
+ get: function () { return chunkSJCEXYFG_js.ProtectedRoleError; }
6785
6877
  });
6786
6878
  Object.defineProperty(exports, "RecordNotFoundError", {
6787
6879
  enumerable: true,
6788
- get: function () { return chunkMZOEL7FN_js.RecordNotFoundError; }
6880
+ get: function () { return chunkSJCEXYFG_js.RecordNotFoundError; }
6789
6881
  });
6790
6882
  Object.defineProperty(exports, "RecordReferencedError", {
6791
6883
  enumerable: true,
6792
- get: function () { return chunkMZOEL7FN_js.RecordReferencedError; }
6884
+ get: function () { return chunkSJCEXYFG_js.RecordReferencedError; }
6793
6885
  });
6794
6886
  Object.defineProperty(exports, "RepositoryError", {
6795
6887
  enumerable: true,
6796
- get: function () { return chunkMZOEL7FN_js.RepositoryError; }
6888
+ get: function () { return chunkSJCEXYFG_js.RepositoryError; }
6797
6889
  });
6798
6890
  Object.defineProperty(exports, "RoleNotFoundError", {
6799
6891
  enumerable: true,
6800
- get: function () { return chunkMZOEL7FN_js.RoleNotFoundError; }
6892
+ get: function () { return chunkSJCEXYFG_js.RoleNotFoundError; }
6801
6893
  });
6802
6894
  Object.defineProperty(exports, "SchemaError", {
6803
6895
  enumerable: true,
6804
- get: function () { return chunkMZOEL7FN_js.SchemaError; }
6896
+ get: function () { return chunkSJCEXYFG_js.SchemaError; }
6805
6897
  });
6806
6898
  Object.defineProperty(exports, "SchemaErrorCode", {
6807
6899
  enumerable: true,
6808
- get: function () { return chunkMZOEL7FN_js.SchemaErrorCode; }
6900
+ get: function () { return chunkSJCEXYFG_js.SchemaErrorCode; }
6809
6901
  });
6810
6902
  Object.defineProperty(exports, "StorageError", {
6811
6903
  enumerable: true,
6812
- get: function () { return chunkMZOEL7FN_js.StorageError; }
6904
+ get: function () { return chunkSJCEXYFG_js.StorageError; }
6813
6905
  });
6814
6906
  Object.defineProperty(exports, "SyncCascadeError", {
6815
6907
  enumerable: true,
6816
- get: function () { return chunkMZOEL7FN_js.SyncCascadeError; }
6908
+ get: function () { return chunkSJCEXYFG_js.SyncCascadeError; }
6817
6909
  });
6818
6910
  Object.defineProperty(exports, "SyncConflictError", {
6819
6911
  enumerable: true,
6820
- get: function () { return chunkMZOEL7FN_js.SyncConflictError; }
6912
+ get: function () { return chunkSJCEXYFG_js.SyncConflictError; }
6821
6913
  });
6822
6914
  Object.defineProperty(exports, "SyncError", {
6823
6915
  enumerable: true,
6824
- get: function () { return chunkMZOEL7FN_js.SyncError; }
6916
+ get: function () { return chunkSJCEXYFG_js.SyncError; }
6825
6917
  });
6826
6918
  Object.defineProperty(exports, "SystemEntityImmutableError", {
6827
6919
  enumerable: true,
6828
- get: function () { return chunkMZOEL7FN_js.SystemEntityImmutableError; }
6920
+ get: function () { return chunkSJCEXYFG_js.SystemEntityImmutableError; }
6829
6921
  });
6830
6922
  Object.defineProperty(exports, "ValidationError", {
6831
6923
  enumerable: true,
6832
- get: function () { return chunkMZOEL7FN_js.ValidationError; }
6924
+ get: function () { return chunkSJCEXYFG_js.ValidationError; }
6833
6925
  });
6834
6926
  Object.defineProperty(exports, "computeRecordStatus", {
6835
6927
  enumerable: true,
6836
- get: function () { return chunkMZOEL7FN_js.computeRecordStatus; }
6928
+ get: function () { return chunkSJCEXYFG_js.computeRecordStatus; }
6837
6929
  });
6838
6930
  Object.defineProperty(exports, "createFormAttributeValidator", {
6839
6931
  enumerable: true,
6840
- get: function () { return chunkMZOEL7FN_js.createFormAttributeValidator; }
6932
+ get: function () { return chunkSJCEXYFG_js.createFormAttributeValidator; }
6841
6933
  });
6842
6934
  Object.defineProperty(exports, "isAttributeInUseError", {
6843
6935
  enumerable: true,
6844
- get: function () { return chunkMZOEL7FN_js.isAttributeInUseError; }
6936
+ get: function () { return chunkSJCEXYFG_js.isAttributeInUseError; }
6845
6937
  });
6846
6938
  Object.defineProperty(exports, "isNotFoundError", {
6847
6939
  enumerable: true,
6848
- get: function () { return chunkMZOEL7FN_js.isNotFoundError; }
6940
+ get: function () { return chunkSJCEXYFG_js.isNotFoundError; }
6849
6941
  });
6850
6942
  Object.defineProperty(exports, "isObjectReferencedError", {
6851
6943
  enumerable: true,
6852
- get: function () { return chunkMZOEL7FN_js.isObjectReferencedError; }
6944
+ get: function () { return chunkSJCEXYFG_js.isObjectReferencedError; }
6853
6945
  });
6854
6946
  Object.defineProperty(exports, "isProtectedResourceError", {
6855
6947
  enumerable: true,
6856
- get: function () { return chunkMZOEL7FN_js.isProtectedResourceError; }
6948
+ get: function () { return chunkSJCEXYFG_js.isProtectedResourceError; }
6857
6949
  });
6858
6950
  Object.defineProperty(exports, "isRecordReferencedError", {
6859
6951
  enumerable: true,
6860
- get: function () { return chunkMZOEL7FN_js.isRecordReferencedError; }
6952
+ get: function () { return chunkSJCEXYFG_js.isRecordReferencedError; }
6861
6953
  });
6862
6954
  Object.defineProperty(exports, "isSchemaError", {
6863
6955
  enumerable: true,
6864
- get: function () { return chunkMZOEL7FN_js.isSchemaError; }
6956
+ get: function () { return chunkSJCEXYFG_js.isSchemaError; }
6865
6957
  });
6866
6958
  Object.defineProperty(exports, "isValidationError", {
6867
6959
  enumerable: true,
6868
- get: function () { return chunkMZOEL7FN_js.isValidationError; }
6960
+ get: function () { return chunkSJCEXYFG_js.isValidationError; }
6869
6961
  });
6870
6962
  Object.defineProperty(exports, "rejectUnknownAttributesOrThrow", {
6871
6963
  enumerable: true,
6872
- get: function () { return chunkMZOEL7FN_js.rejectUnknownAttributesOrThrow; }
6964
+ get: function () { return chunkSJCEXYFG_js.rejectUnknownAttributesOrThrow; }
6873
6965
  });
6874
6966
  Object.defineProperty(exports, "validateDraft", {
6875
6967
  enumerable: true,
6876
- get: function () { return chunkMZOEL7FN_js.validateDraft; }
6968
+ get: function () { return chunkSJCEXYFG_js.validateDraft; }
6877
6969
  });
6878
6970
  Object.defineProperty(exports, "validateDraftOrThrow", {
6879
6971
  enumerable: true,
6880
- get: function () { return chunkMZOEL7FN_js.validateDraftOrThrow; }
6972
+ get: function () { return chunkSJCEXYFG_js.validateDraftOrThrow; }
6881
6973
  });
6882
6974
  Object.defineProperty(exports, "validateObject", {
6883
6975
  enumerable: true,
6884
- get: function () { return chunkMZOEL7FN_js.validateObject; }
6976
+ get: function () { return chunkSJCEXYFG_js.validateObject; }
6885
6977
  });
6886
6978
  Object.defineProperty(exports, "validateObjectOrThrow", {
6887
6979
  enumerable: true,
6888
- get: function () { return chunkMZOEL7FN_js.validateObjectOrThrow; }
6980
+ get: function () { return chunkSJCEXYFG_js.validateObjectOrThrow; }
6889
6981
  });
6890
6982
  Object.defineProperty(exports, "DEFAULT_VALIDATION_MESSAGES", {
6891
6983
  enumerable: true,
@@ -6931,6 +7023,18 @@ exports.LIVE_STREAM_START_CURSOR = LIVE_STREAM_START_CURSOR;
6931
7023
  exports.ListViewBuilder = ListViewBuilder;
6932
7024
  exports.ListViewTabConfigBuilder = ListViewTabConfigBuilder;
6933
7025
  exports.MAX_PRESET_DEPTH = MAX_PRESET_DEPTH;
7026
+ exports.NOTIFICATION_INBOX_STATES = NOTIFICATION_INBOX_STATES;
7027
+ exports.NOTIFICATION_KINDS = NOTIFICATION_KINDS;
7028
+ exports.NOTIFICATION_PRIORITIES = NOTIFICATION_PRIORITIES;
7029
+ exports.NOTIFICATION_SENSITIVITIES = NOTIFICATION_SENSITIVITIES;
7030
+ exports.NOTIFICATION_TYPES_V1 = NOTIFICATION_TYPES_V1;
7031
+ exports.NOTIFICATION_TYPE_AGENT_QUESTION_REQUESTED = NOTIFICATION_TYPE_AGENT_QUESTION_REQUESTED;
7032
+ exports.NOTIFICATION_TYPE_AGENT_SESSION_COMPLETED = NOTIFICATION_TYPE_AGENT_SESSION_COMPLETED;
7033
+ exports.NOTIFICATION_TYPE_AGENT_SESSION_FAILED = NOTIFICATION_TYPE_AGENT_SESSION_FAILED;
7034
+ exports.NOTIFICATION_TYPE_AGENT_SESSION_TIMEOUT = NOTIFICATION_TYPE_AGENT_SESSION_TIMEOUT;
7035
+ exports.NOTIFICATION_TYPE_AGENT_SESSION_WAITING_HUMAN = NOTIFICATION_TYPE_AGENT_SESSION_WAITING_HUMAN;
7036
+ exports.NOTIFICATION_TYPE_AGENT_TASK_ASSIGNED = NOTIFICATION_TYPE_AGENT_TASK_ASSIGNED;
7037
+ exports.NOTIFICATION_WORK_STATES = NOTIFICATION_WORK_STATES;
6934
7038
  exports.NO_VALUE_OPERATORS = NO_VALUE_OPERATORS;
6935
7039
  exports.NoopGeocodingAdapter = NoopGeocodingAdapter;
6936
7040
  exports.OPERATORS_BY_TYPE = OPERATORS_BY_TYPE;