@stndrds/schema 1.0.0-alpha.277 → 1.0.0-alpha.278

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 (73) hide show
  1. package/dist/{all-D-E8v5yo.d.mts → all-BSeTO0fj.d.mts} +20 -3
  2. package/dist/{all-D5SkjRst.d.ts → all-DoYgTt64.d.ts} +20 -3
  3. package/dist/{attributes-_b3Db8vT.d.ts → attributes-Da15v-sw.d.ts} +1 -1
  4. package/dist/{attributes-lBLiOIY3.d.mts → attributes-VsYmgI0A.d.mts} +1 -1
  5. package/dist/{chunk-XQEDMB6B.mjs → chunk-5PLJHYSL.mjs} +24 -4
  6. package/dist/{chunk-KKR6I3YV.js → chunk-DEHBEFGO.js} +3 -3
  7. package/dist/{chunk-FMLZHHWB.js → chunk-NELH4AXI.js} +18 -20
  8. package/dist/{chunk-VVYIFBFQ.mjs → chunk-PQEOIDXD.mjs} +1 -1
  9. package/dist/{chunk-F32XOFSP.js → chunk-QMAVKX3Y.js} +55 -34
  10. package/dist/{chunk-K4UER3DU.mjs → chunk-V2WJFUZW.mjs} +14 -2
  11. package/dist/{chunk-PSCSTHUB.mjs → chunk-YCWGUPSI.mjs} +15 -18
  12. package/dist/{chunk-RYAQOR7M.js → chunk-ZBWTAKZO.js} +14 -2
  13. package/dist/exceptions.d.mts +14 -4
  14. package/dist/exceptions.d.ts +14 -4
  15. package/dist/exceptions.js +39 -39
  16. package/dist/exceptions.mjs +1 -1
  17. package/dist/{helpers-C1VVEAOO.d.mts → helpers-BYhVd4Gw.d.mts} +3 -3
  18. package/dist/{helpers-vQ6kp8ET.d.ts → helpers-D2cL7hI2.d.ts} +3 -3
  19. package/dist/index-CixTESyP.d.mts +790 -0
  20. package/dist/index-dJ6fAwcG.d.ts +790 -0
  21. package/dist/index.d.mts +2228 -393
  22. package/dist/index.d.ts +2228 -393
  23. package/dist/index.js +569 -328
  24. package/dist/index.mjs +362 -142
  25. package/dist/{migrations-BXd2ZGfM.d.mts → migrations-Dy9K8kJ0.d.mts} +1 -1
  26. package/dist/{migrations-DcuJZ8qO.d.ts → migrations-hbZHm8Tm.d.ts} +1 -1
  27. package/dist/{objects-BCaBw2ef.d.mts → objects-Cvt2T2Q5.d.mts} +19 -3
  28. package/dist/{objects-A1ED9af-.d.ts → objects-_6M6ngH3.d.ts} +19 -3
  29. package/dist/{types-DNz3ITS-.d.mts → types-CX7S3Fhh.d.mts} +1 -1
  30. package/dist/{types-DqLi1tx1.d.ts → types-DseDsbMu.d.ts} +1 -1
  31. package/dist/validation/all.d.mts +7 -7
  32. package/dist/validation/all.d.ts +7 -7
  33. package/dist/validation/all.js +33 -33
  34. package/dist/validation/all.mjs +8 -8
  35. package/dist/validation/complex/currency.d.mts +2 -2
  36. package/dist/validation/complex/currency.d.ts +2 -2
  37. package/dist/validation/complex/location.d.mts +2 -2
  38. package/dist/validation/complex/location.d.ts +2 -2
  39. package/dist/validation/complex/phone.d.mts +2 -2
  40. package/dist/validation/complex/phone.d.ts +2 -2
  41. package/dist/validation/complex/relation.d.mts +2 -2
  42. package/dist/validation/complex/relation.d.ts +2 -2
  43. package/dist/validation/complex/richtext.d.mts +2 -2
  44. package/dist/validation/complex/richtext.d.ts +2 -2
  45. package/dist/validation/complex/select.d.mts +2 -2
  46. package/dist/validation/complex/select.d.ts +2 -2
  47. package/dist/validation/complex/user.d.mts +2 -2
  48. package/dist/validation/complex/user.d.ts +2 -2
  49. package/dist/validation/computed/formula.d.mts +2 -2
  50. package/dist/validation/computed/formula.d.ts +2 -2
  51. package/dist/validation/computed/rollup.d.mts +2 -2
  52. package/dist/validation/computed/rollup.d.ts +2 -2
  53. package/dist/validation/config/index.d.mts +4 -4
  54. package/dist/validation/config/index.d.ts +4 -4
  55. package/dist/validation/config/index.js +11 -11
  56. package/dist/validation/config/index.mjs +2 -2
  57. package/dist/validation/core/index.d.mts +3 -3
  58. package/dist/validation/core/index.d.ts +3 -3
  59. package/dist/validation/object/index.d.mts +5 -5
  60. package/dist/validation/object/index.d.ts +5 -5
  61. package/dist/validation/object/index.js +18 -18
  62. package/dist/validation/object/index.mjs +6 -6
  63. package/dist/validation/primitives/checkbox.d.mts +2 -2
  64. package/dist/validation/primitives/checkbox.d.ts +2 -2
  65. package/dist/validation/primitives/date.d.mts +2 -2
  66. package/dist/validation/primitives/date.d.ts +2 -2
  67. package/dist/validation/primitives/number.d.mts +2 -2
  68. package/dist/validation/primitives/number.d.ts +2 -2
  69. package/dist/validation/primitives/text.d.mts +2 -2
  70. package/dist/validation/primitives/text.d.ts +2 -2
  71. package/package.json +2 -2
  72. package/dist/index-AJeEKoy6.d.ts +0 -2203
  73. package/dist/index-ApHE8c1J.d.mts +0 -2203
@@ -1,19 +1,19 @@
1
1
  'use strict';
2
2
 
3
+ var chunkQ4SZAMJT_js = require('./chunk-Q4SZAMJT.js');
4
+ var chunkEEH4XQ7W_js = require('./chunk-EEH4XQ7W.js');
3
5
  var chunkEW5XR2X3_js = require('./chunk-EW5XR2X3.js');
4
6
  var chunkQWKLQRBX_js = require('./chunk-QWKLQRBX.js');
5
7
  var chunkKNGWHQLR_js = require('./chunk-KNGWHQLR.js');
6
- var chunkHTSTPTNZ_js = require('./chunk-HTSTPTNZ.js');
7
- var chunkV2UA2D4E_js = require('./chunk-V2UA2D4E.js');
8
8
  var chunk5WATIVCA_js = require('./chunk-5WATIVCA.js');
9
9
  var chunkSI34M4IC_js = require('./chunk-SI34M4IC.js');
10
10
  var chunkYIP5FJ5H_js = require('./chunk-YIP5FJ5H.js');
11
11
  var chunkZPFOKBIN_js = require('./chunk-ZPFOKBIN.js');
12
- var chunkRYAQOR7M_js = require('./chunk-RYAQOR7M.js');
12
+ var chunkZBWTAKZO_js = require('./chunk-ZBWTAKZO.js');
13
+ var chunkHTSTPTNZ_js = require('./chunk-HTSTPTNZ.js');
14
+ var chunkV2UA2D4E_js = require('./chunk-V2UA2D4E.js');
13
15
  var chunkACKMC6FL_js = require('./chunk-ACKMC6FL.js');
14
16
  var chunkE6JUYGJX_js = require('./chunk-E6JUYGJX.js');
15
- var chunkQ4SZAMJT_js = require('./chunk-Q4SZAMJT.js');
16
- var chunkEEH4XQ7W_js = require('./chunk-EEH4XQ7W.js');
17
17
  var chunkYKWSHBT5_js = require('./chunk-YKWSHBT5.js');
18
18
  var zod = require('zod');
19
19
 
@@ -81,6 +81,12 @@ function createFormAttributeValidator(attr, messages = chunkYKWSHBT5_js.DEFAULT_
81
81
  function isNullishOrEmptyString(value) {
82
82
  return value === null || value === void 0 || value === "";
83
83
  }
84
+ function isValuePresent(value) {
85
+ if (value === null || value === void 0) return false;
86
+ if (typeof value === "string") return value.trim() !== "";
87
+ if (Array.isArray(value)) return value.length > 0;
88
+ return true;
89
+ }
84
90
 
85
91
  // src/validation/object/object-validator.ts
86
92
  var objectValidatorCache = /* @__PURE__ */ new WeakMap();
@@ -91,12 +97,12 @@ function createObjectValidator(objectDef) {
91
97
  const shape = {};
92
98
  for (const attr of objectDef.attributes) {
93
99
  const validator = createAttributeValidator(attr);
94
- if (attr.required && attr.type === "text") {
95
- shape[attr.name] = validator.refine((value) => !isNullishOrEmptyString(value), {
100
+ if (attr.required) {
101
+ shape[attr.name] = validator.refine(isValuePresent, {
96
102
  message: chunkYKWSHBT5_js.DEFAULT_VALIDATION_MESSAGES.required(attr)
97
103
  });
98
104
  } else {
99
- shape[attr.name] = attr.required ? validator : withEmptyToNull(validator);
105
+ shape[attr.name] = withEmptyToNull(validator);
100
106
  }
101
107
  }
102
108
  const schema = zod.z.object(shape).passthrough();
@@ -156,7 +162,7 @@ function validateObjectOrThrow(objectDef, data) {
156
162
  if (!result.success) {
157
163
  const errors = result.errors ?? [];
158
164
  const detail = errors.map((err) => `${err.path.join(".")}: ${err.message}`).join("\n") || "Unknown validation error";
159
- throw new chunkRYAQOR7M_js.ValidationError(
165
+ throw new chunkZBWTAKZO_js.ValidationError(
160
166
  `Validation failed for ${objectDef.label}:
161
167
  ${detail}`,
162
168
  errors.map((err) => ({ path: err.path, message: err.message }))
@@ -183,7 +189,7 @@ function validateDraftOrThrow(objectDef, data) {
183
189
  if (!result.success) {
184
190
  const errors = result.errors ?? [];
185
191
  const detail = errors.map((err) => `${err.path.join(".")}: ${err.message}`).join("\n") || "Unknown validation error";
186
- throw new chunkRYAQOR7M_js.ValidationError(
192
+ throw new chunkZBWTAKZO_js.ValidationError(
187
193
  `Draft validation failed for ${objectDef.label}:
188
194
  ${detail}`,
189
195
  errors.map((err) => ({ path: err.path, message: err.message }))
@@ -195,21 +201,12 @@ function rejectUnknownAttributesOrThrow(objectDef, data) {
195
201
  const knownNames = new Set(objectDef.attributes.map((a) => a.name));
196
202
  const unknownKeys = Object.keys(data).filter((key) => !knownNames.has(key));
197
203
  if (unknownKeys.length > 0) {
198
- throw new chunkRYAQOR7M_js.ValidationError(
204
+ throw new chunkZBWTAKZO_js.ValidationError(
199
205
  `Unknown attribute${unknownKeys.length > 1 ? "s" : ""} for ${objectDef.label}: ${unknownKeys.join(", ")}`,
200
206
  unknownKeys.map((key) => ({ path: [key], message: "Unknown attribute" }))
201
207
  );
202
208
  }
203
209
  }
204
- function isValuePresent(value) {
205
- if (value === void 0 || value === null) {
206
- return false;
207
- }
208
- if (typeof value === "string" && value.trim() === "") {
209
- return false;
210
- }
211
- return true;
212
- }
213
210
  function getMissingRequiredAttributes(objectDef, data) {
214
211
  const missing = [];
215
212
  for (const attr of objectDef.attributes) {
@@ -235,6 +232,7 @@ exports.createObjectValidator = createObjectValidator;
235
232
  exports.getMissingRequiredAttributes = getMissingRequiredAttributes;
236
233
  exports.isNullishOrEmptyString = isNullishOrEmptyString;
237
234
  exports.isRecordComplete = isRecordComplete;
235
+ exports.isValuePresent = isValuePresent;
238
236
  exports.rejectUnknownAttributesOrThrow = rejectUnknownAttributesOrThrow;
239
237
  exports.validateAttribute = validateAttribute;
240
238
  exports.validateDraft = validateDraft;
@@ -1,4 +1,4 @@
1
- import { ValidationError } from './chunk-K4UER3DU.mjs';
1
+ import { ValidationError } from './chunk-V2WJFUZW.mjs';
2
2
  import { z } from 'zod';
3
3
  import { ICONS, COLORS } from '@stndrds/constants';
4
4
 
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkKKR6I3YV_js = require('./chunk-KKR6I3YV.js');
4
- var chunkRYAQOR7M_js = require('./chunk-RYAQOR7M.js');
3
+ var chunkDEHBEFGO_js = require('./chunk-DEHBEFGO.js');
4
+ var chunkZBWTAKZO_js = require('./chunk-ZBWTAKZO.js');
5
5
  var zod = require('zod');
6
6
 
7
7
  // src/types/system-attributes.ts
@@ -500,7 +500,7 @@ function canonicalizeFilterValue(rule, effectiveType) {
500
500
  const message = `Filter on a currency attribute expected a numeric amount, received ${JSON.stringify(
501
501
  value
502
502
  )}`;
503
- throw new chunkRYAQOR7M_js.ValidationError(message, [{ path: ["value"], message }]);
503
+ throw new chunkZBWTAKZO_js.ValidationError(message, [{ path: ["value"], message }]);
504
504
  }
505
505
  function hasCurrencyAmount(value) {
506
506
  if (typeof value !== "object") return true;
@@ -661,13 +661,13 @@ function resolveCanonicalOperator(rawOperator, effectiveType) {
661
661
  const replacement = REMOVED_OPERATOR_REPLACEMENTS[rawOperator];
662
662
  if (replacement) {
663
663
  const m = `Unknown filter operator "${rawOperator}" \u2014 use ${replacement}`;
664
- throw new chunkRYAQOR7M_js.ValidationError(m, [{ path: ["operator"], message: m }]);
664
+ throw new chunkZBWTAKZO_js.ValidationError(m, [{ path: ["operator"], message: m }]);
665
665
  }
666
666
  const normalized = normalizeOperator(rawOperator);
667
667
  const membership = SUBSTRING_TO_MEMBERSHIP[normalized];
668
668
  if (membership && SET_MEMBERSHIP_TYPES.has(effectiveType)) {
669
669
  const m = `Operator "${normalized}" is not valid for type "${effectiveType}" \u2014 use "${membership}"`;
670
- throw new chunkRYAQOR7M_js.ValidationError(m, [{ path: ["operator"], message: m }]);
670
+ throw new chunkZBWTAKZO_js.ValidationError(m, [{ path: ["operator"], message: m }]);
671
671
  }
672
672
  return normalized;
673
673
  }
@@ -677,7 +677,7 @@ function assertOperatorForType(operator, type, context) {
677
677
  if (!ops?.includes(normalized)) {
678
678
  const validList = ops?.length ? ops.join(", ") : "(no operators registered for this type)";
679
679
  const summary = `Operator "${operator}" is not valid for ${context} type "${type}". Valid operators: ${validList}.`;
680
- throw new chunkRYAQOR7M_js.ValidationError(summary, [
680
+ throw new chunkZBWTAKZO_js.ValidationError(summary, [
681
681
  {
682
682
  path: ["operator"],
683
683
  message: summary
@@ -690,7 +690,7 @@ function assertRelativeDateValue(rule) {
690
690
  if (rule.operator !== "is_within") return;
691
691
  if (!isRelativeDateValue(rule.value)) {
692
692
  const m = `Operator "is_within" requires a relative-date value { amount: positive number, unit: days|weeks|months|years, direction: past|future }`;
693
- throw new chunkRYAQOR7M_js.ValidationError(m, [{ path: ["value"], message: m }]);
693
+ throw new chunkZBWTAKZO_js.ValidationError(m, [{ path: ["value"], message: m }]);
694
694
  }
695
695
  }
696
696
  function applyCanonicalForm(rule, operator, effectiveType) {
@@ -703,11 +703,11 @@ function assertDynamicValueForAttribute(rule, attrType) {
703
703
  const v = rule.value;
704
704
  if (v.dynamic === "actor" && attrType !== "user") {
705
705
  const m = `actor token (@me) is only valid on user attributes, not "${attrType}"`;
706
- throw new chunkRYAQOR7M_js.ValidationError(m, [{ path: ["value"], message: m }]);
706
+ throw new chunkZBWTAKZO_js.ValidationError(m, [{ path: ["value"], message: m }]);
707
707
  }
708
708
  if (v.dynamic === "date" && attrType !== "date") {
709
709
  const m = `date token (@today/@now) is only valid on date attributes, not "${attrType}"`;
710
- throw new chunkRYAQOR7M_js.ValidationError(m, [{ path: ["value"], message: m }]);
710
+ throw new chunkZBWTAKZO_js.ValidationError(m, [{ path: ["value"], message: m }]);
711
711
  }
712
712
  }
713
713
  function collectQualifiedRuleIssues(rule, context) {
@@ -715,7 +715,7 @@ function collectQualifiedRuleIssues(rule, context) {
715
715
  validateQualifiedRule({ ...rule }, context);
716
716
  return [];
717
717
  } catch (error) {
718
- if (!(error instanceof chunkRYAQOR7M_js.ValidationError)) throw error;
718
+ if (!(error instanceof chunkZBWTAKZO_js.ValidationError)) throw error;
719
719
  return error.errors.map((issue) => ({ ...issue, path: [...issue.path] }));
720
720
  }
721
721
  }
@@ -723,17 +723,17 @@ function validateQualifiedRule(rule, context) {
723
723
  const rootAttr = context.attributes.find((a) => a.name === rule.attribute);
724
724
  const systemOps = SYSTEM_FILTER_OPERATORS[rule.attribute];
725
725
  if (!(rootAttr || systemOps)) {
726
- throw new chunkRYAQOR7M_js.ValidationError(`Unknown attribute: ${rule.attribute}`, [
726
+ throw new chunkZBWTAKZO_js.ValidationError(`Unknown attribute: ${rule.attribute}`, [
727
727
  { path: ["attribute"], message: `Unknown attribute: ${rule.attribute}` }
728
728
  ]);
729
729
  }
730
730
  if (rule.quantifier !== void 0 && !rule.property) {
731
731
  const m = `quantifier is only valid on qualified edge rules (set "property")`;
732
- throw new chunkRYAQOR7M_js.ValidationError(m, [{ path: ["quantifier"], message: m }]);
732
+ throw new chunkZBWTAKZO_js.ValidationError(m, [{ path: ["quantifier"], message: m }]);
733
733
  }
734
734
  if (!rootAttr) {
735
735
  if (rule.property) {
736
- throw new chunkRYAQOR7M_js.ValidationError(`Cannot qualify system attribute "${rule.attribute}"`, [
736
+ throw new chunkZBWTAKZO_js.ValidationError(`Cannot qualify system attribute "${rule.attribute}"`, [
737
737
  { path: ["property"], message: `"${rule.attribute}" is a system column, not a reference` }
738
738
  ]);
739
739
  }
@@ -741,7 +741,7 @@ function validateQualifiedRule(rule, context) {
741
741
  const normalizedOperator2 = resolveCanonicalOperator(rule.operator, effectiveType);
742
742
  if (!systemOps.includes(normalizedOperator2)) {
743
743
  const summary = `Operator "${rule.operator}" is not valid for system attribute "${rule.attribute}". Valid operators: ${systemOps.join(", ")}.`;
744
- throw new chunkRYAQOR7M_js.ValidationError(summary, [{ path: ["operator"], message: summary }]);
744
+ throw new chunkZBWTAKZO_js.ValidationError(summary, [{ path: ["operator"], message: summary }]);
745
745
  }
746
746
  applyCanonicalForm(rule, normalizedOperator2, effectiveType);
747
747
  return;
@@ -753,25 +753,25 @@ function validateQualifiedRule(rule, context) {
753
753
  if (!ops.includes(normalizedOperator2)) {
754
754
  const validList = ops.length ? ops.join(", ") : "(not filterable)";
755
755
  const summary = `Operator "${rule.operator}" is not valid for attribute "${rootAttr.name}". Valid operators: ${validList}.`;
756
- throw new chunkRYAQOR7M_js.ValidationError(summary, [{ path: ["operator"], message: summary }]);
756
+ throw new chunkZBWTAKZO_js.ValidationError(summary, [{ path: ["operator"], message: summary }]);
757
757
  }
758
758
  applyCanonicalForm(rule, normalizedOperator2, resolveEffectiveFilterType(rootAttr));
759
759
  return;
760
760
  }
761
761
  if (!REFERENCE_TYPES.has(rootAttr.type)) {
762
- throw new chunkRYAQOR7M_js.ValidationError(`Cannot qualify ${rootAttr.type} attribute "${rule.attribute}"`, [
762
+ throw new chunkZBWTAKZO_js.ValidationError(`Cannot qualify ${rootAttr.type} attribute "${rule.attribute}"`, [
763
763
  { path: ["property"], message: `Attribute "${rule.attribute}" is not a reference type` }
764
764
  ]);
765
765
  }
766
766
  const propSchema = rootAttr.properties;
767
767
  if (!propSchema) {
768
- throw new chunkRYAQOR7M_js.ValidationError(`Attribute "${rule.attribute}" has no qualifyWith schema`, [
768
+ throw new chunkZBWTAKZO_js.ValidationError(`Attribute "${rule.attribute}" has no qualifyWith schema`, [
769
769
  { path: ["property"], message: `"${rule.attribute}" has no qualifyWith` }
770
770
  ]);
771
771
  }
772
772
  const propDef = propSchema.definitions.find((p) => p.name === rule.property);
773
773
  if (!propDef) {
774
- throw new chunkRYAQOR7M_js.ValidationError(
774
+ throw new chunkZBWTAKZO_js.ValidationError(
775
775
  `Property "${rule.property}" not defined on "${rule.attribute}".qualifyWith()`,
776
776
  [{ path: ["property"], message: `Unknown property: ${rule.property}` }]
777
777
  );
@@ -783,6 +783,15 @@ function validateQualifiedRule(rule, context) {
783
783
  // src/types/objects.ts
784
784
  var RESOURCE_VISIBILITIES = ["workspace", "private"];
785
785
  var LIST_VIEW_TAB_VISIBILITIES = ["all", ...RESOURCE_VISIBILITIES];
786
+ function parseResourceVisibility(value) {
787
+ if (typeof value === "string" && RESOURCE_VISIBILITIES.includes(value)) {
788
+ return value;
789
+ }
790
+ throw new chunkZBWTAKZO_js.ValidationError(
791
+ `visibility must be one of: ${RESOURCE_VISIBILITIES.join(", ")} (received: ${String(value)})`,
792
+ []
793
+ );
794
+ }
786
795
  var SYSTEM_FIELD_NAMES = [
787
796
  "id",
788
797
  "createdAt",
@@ -812,12 +821,12 @@ var RESERVED_OBJECT_NAMES = ["skill"];
812
821
  // src/validators/view-config.schema.ts
813
822
  var createModeSchema = zod.z.enum(["redirect", "inline", "peek"]);
814
823
  var nonEmptyStringArraySchema = zod.z.array(zod.z.string()).min(1);
815
- var columnsSchema = zod.z.array(zod.z.string()).max(chunkKKR6I3YV_js.SCHEMA_LIMITS.columnsPerTab);
824
+ var columnsSchema = zod.z.array(zod.z.string()).max(chunkDEHBEFGO_js.SCHEMA_LIMITS.columnsPerTab);
816
825
  var sortRuleSchema = zod.z.object({
817
826
  attribute: zod.z.string(),
818
827
  direction: zod.z.enum(["asc", "desc"])
819
828
  }).strict();
820
- var sortsSchema = zod.z.array(sortRuleSchema).max(chunkKKR6I3YV_js.SCHEMA_LIMITS.sortsPerTab);
829
+ var sortsSchema = zod.z.array(sortRuleSchema).max(chunkDEHBEFGO_js.SCHEMA_LIMITS.sortsPerTab);
821
830
  var relativeDateValueSchema = zod.z.object({
822
831
  amount: zod.z.number(),
823
832
  unit: zod.z.enum(["days", "weeks", "months", "years"]),
@@ -841,6 +850,10 @@ var dynamicFilterValueSchema = zod.z.discriminatedUnion("dynamic", [
841
850
  anchor: zod.z.enum(["today", "now"])
842
851
  }).strict()
843
852
  ]);
853
+ var dayMonthValueSchema = zod.z.object({
854
+ month: zod.z.number(),
855
+ day: zod.z.number()
856
+ }).strict();
844
857
  var filterValueSchema = zod.z.union([
845
858
  zod.z.string(),
846
859
  zod.z.number(),
@@ -849,6 +862,7 @@ var filterValueSchema = zod.z.union([
849
862
  relativeDateValueSchema,
850
863
  currencyFilterValueSchema,
851
864
  phoneFilterValueSchema,
865
+ dayMonthValueSchema,
852
866
  dynamicFilterValueSchema,
853
867
  zod.z.null()
854
868
  ]);
@@ -886,7 +900,7 @@ var filterRuleSchema = zod.z.object({
886
900
  operator: filterOperatorSchema,
887
901
  value: filterValueSchema
888
902
  }).strict();
889
- var filterRulesSchema = zod.z.array(filterRuleSchema).max(chunkKKR6I3YV_js.SCHEMA_LIMITS.filterRulesPerTab);
903
+ var filterRulesSchema = zod.z.array(filterRuleSchema).max(chunkDEHBEFGO_js.SCHEMA_LIMITS.filterRulesPerTab);
890
904
  var filterStateSchema = zod.z.object({
891
905
  combinator: zod.z.enum(["and", "or"]),
892
906
  rules: filterRulesSchema
@@ -970,13 +984,13 @@ var baseGroupShape = {
970
984
  var fieldGroupWriteSchema = zod.z.object({
971
985
  ...baseGroupShape,
972
986
  type: zod.z.literal("fields"),
973
- fields: zod.z.array(fieldSchema).max(chunkKKR6I3YV_js.SCHEMA_LIMITS.fieldsPerGroup)
987
+ fields: zod.z.array(fieldSchema).max(chunkDEHBEFGO_js.SCHEMA_LIMITS.fieldsPerGroup)
974
988
  }).strict();
975
989
  var relationGroupSchema = zod.z.object({
976
990
  ...baseGroupShape,
977
991
  type: zod.z.literal("relation"),
978
992
  attribute: zod.z.string(),
979
- columns: zod.z.array(zod.z.string()).max(chunkKKR6I3YV_js.SCHEMA_LIMITS.columnsPerTab).optional(),
993
+ columns: zod.z.array(zod.z.string()).max(chunkDEHBEFGO_js.SCHEMA_LIMITS.columnsPerTab).optional(),
980
994
  readOnly: zod.z.boolean().optional(),
981
995
  allowCreate: zod.z.boolean().optional()
982
996
  }).strict();
@@ -985,13 +999,13 @@ var baseTabShape = {
985
999
  id: zod.z.string(),
986
1000
  name: zod.z.string(),
987
1001
  label: zod.z.string(),
988
- icon: chunkKKR6I3YV_js.iconNameSchema.optional(),
1002
+ icon: chunkDEHBEFGO_js.iconNameSchema.optional(),
989
1003
  order: zod.z.number().optional()
990
1004
  };
991
1005
  var formTabWriteSchema = zod.z.object({
992
1006
  ...baseTabShape,
993
1007
  type: zod.z.literal("form"),
994
- groups: zod.z.array(groupWriteSchema).min(1).max(chunkKKR6I3YV_js.SCHEMA_LIMITS.groupsPerFormTab),
1008
+ groups: zod.z.array(groupWriteSchema).min(1).max(chunkDEHBEFGO_js.SCHEMA_LIMITS.groupsPerFormTab),
995
1009
  formColumns: zod.z.union([zod.z.literal(1), zod.z.literal(2), zod.z.literal(3)]).optional(),
996
1010
  density: zod.z.enum(["compact", "comfortable", "spacious"]).optional()
997
1011
  }).strict().superRefine((tab, ctx) => {
@@ -1000,13 +1014,13 @@ var formTabWriteSchema = zod.z.object({
1000
1014
  (count, group) => count + (group.type === "fields" ? group.fields.length : 0),
1001
1015
  0
1002
1016
  );
1003
- if (totalFields > chunkKKR6I3YV_js.SCHEMA_LIMITS.fieldsPerFormTab) {
1017
+ if (totalFields > chunkDEHBEFGO_js.SCHEMA_LIMITS.fieldsPerFormTab) {
1004
1018
  ctx.addIssue({
1005
1019
  code: "too_big",
1006
1020
  origin: "array",
1007
- maximum: chunkKKR6I3YV_js.SCHEMA_LIMITS.fieldsPerFormTab,
1021
+ maximum: chunkDEHBEFGO_js.SCHEMA_LIMITS.fieldsPerFormTab,
1008
1022
  inclusive: true,
1009
- message: `A form tab can contain at most ${chunkKKR6I3YV_js.SCHEMA_LIMITS.fieldsPerFormTab} fields`,
1023
+ message: `A form tab can contain at most ${chunkDEHBEFGO_js.SCHEMA_LIMITS.fieldsPerFormTab} fields`,
1010
1024
  path: ["groups"]
1011
1025
  });
1012
1026
  }
@@ -1208,7 +1222,12 @@ var formsTabSchema = zod.z.object({
1208
1222
  var emailsTabSchema = zod.z.object({
1209
1223
  ...baseTabShape,
1210
1224
  type: zod.z.literal("emails"),
1211
- emailAttributeIds: zod.z.array(zod.z.string()).max(chunkKKR6I3YV_js.SCHEMA_LIMITS.emailAttributesPerTab)
1225
+ emailAttributeIds: zod.z.array(zod.z.string()).max(chunkDEHBEFGO_js.SCHEMA_LIMITS.emailAttributesPerTab)
1226
+ }).strict();
1227
+ var meetingsTabSchema = zod.z.object({
1228
+ ...baseTabShape,
1229
+ type: zod.z.literal("meetings"),
1230
+ emailAttributeIds: zod.z.array(zod.z.string()).max(chunkDEHBEFGO_js.SCHEMA_LIMITS.emailAttributesPerTab)
1212
1231
  }).strict();
1213
1232
  var detailTabSchema = zod.z.discriminatedUnion("type", [
1214
1233
  formTabWriteSchema,
@@ -1218,12 +1237,13 @@ var detailTabSchema = zod.z.discriminatedUnion("type", [
1218
1237
  richtextTabSchema,
1219
1238
  documentsTabSchema,
1220
1239
  formsTabSchema,
1221
- emailsTabSchema
1240
+ emailsTabSchema,
1241
+ meetingsTabSchema
1222
1242
  ]);
1223
1243
  var listTabCommonShape = {
1224
1244
  id: zod.z.string(),
1225
1245
  label: zod.z.string(),
1226
- icon: chunkKKR6I3YV_js.iconNameSchema.optional(),
1246
+ icon: chunkDEHBEFGO_js.iconNameSchema.optional(),
1227
1247
  default: zod.z.boolean().optional(),
1228
1248
  // Which records the tab scopes to. `"all"` is the default and means "impose
1229
1249
  // no scope" — the mandatory viewer predicate alone decides, so the tab shows
@@ -1257,7 +1277,7 @@ var listViewTabSchema = zod.z.discriminatedUnion("layout", [
1257
1277
  ]);
1258
1278
  var _listViewConfigSchema = zod.z.object({
1259
1279
  defaultFilters: filterGroupSchema.optional(),
1260
- tabs: zod.z.array(listViewTabSchema).min(1).max(chunkKKR6I3YV_js.SCHEMA_LIMITS.tabsPerView)
1280
+ tabs: zod.z.array(listViewTabSchema).min(1).max(chunkDEHBEFGO_js.SCHEMA_LIMITS.tabsPerView)
1261
1281
  }).strict().superRefine((config, ctx) => {
1262
1282
  addDuplicateIdIssues(config.tabs, ctx, ["tabs"]);
1263
1283
  let hasDefault = false;
@@ -1274,9 +1294,9 @@ var _listViewConfigSchema = zod.z.object({
1274
1294
  });
1275
1295
  });
1276
1296
  var _detailViewConfigSchema = zod.z.object({
1277
- tabs: zod.z.array(detailTabSchema).min(1).max(chunkKKR6I3YV_js.SCHEMA_LIMITS.tabsPerView),
1297
+ tabs: zod.z.array(detailTabSchema).min(1).max(chunkDEHBEFGO_js.SCHEMA_LIMITS.tabsPerView),
1278
1298
  sidePanel: zod.z.object({
1279
- attributes: zod.z.array(zod.z.string()).max(chunkKKR6I3YV_js.SCHEMA_LIMITS.sidePanelAttributes),
1299
+ attributes: zod.z.array(zod.z.string()).max(chunkDEHBEFGO_js.SCHEMA_LIMITS.sidePanelAttributes),
1280
1300
  width: zod.z.number().optional()
1281
1301
  }).strict().optional()
1282
1302
  }).strict().superRefine((config, ctx) => {
@@ -1350,6 +1370,7 @@ exports.normalizeFilterRule = normalizeFilterRule;
1350
1370
  exports.normalizeForEdgeRpc = normalizeForEdgeRpc;
1351
1371
  exports.normalizeOperator = normalizeOperator;
1352
1372
  exports.now = now;
1373
+ exports.parseResourceVisibility = parseResourceVisibility;
1353
1374
  exports.parseViewConfig = parseViewConfig;
1354
1375
  exports.relationSourceSchema = relationSourceSchema;
1355
1376
  exports.resolveEffectiveFilterType = resolveEffectiveFilterType;
@@ -24,6 +24,13 @@ var SchemaErrorCode = {
24
24
  // Connectors
25
25
  CONNECTOR_AUTH_FAILED: "SCHEMA_CONNECTOR_AUTH_FAILED",
26
26
  CONNECTOR_INVALID_STATE: "SCHEMA_CONNECTOR_INVALID_STATE",
27
+ /**
28
+ * The provider issued tokens and the flow failed AFTER that — resolving the
29
+ * connected address. Distinct from CONNECTOR_AUTH_FAILED because the user is
30
+ * left holding a real grant: consent happened, and it may still be live on the
31
+ * provider side even though no connection row exists here.
32
+ */
33
+ CONNECTOR_GRANT_ORPHANED: "SCHEMA_CONNECTOR_GRANT_ORPHANED",
27
34
  // Sync
28
35
  SYNC_FAILED: "SCHEMA_SYNC_FAILED",
29
36
  SYNC_CONFLICT: "SCHEMA_SYNC_CONFLICT",
@@ -77,6 +84,10 @@ var SchemaErrorCode = {
77
84
  // Tenant / context
78
85
  TENANT_CONTEXT_MISSING: "TENANT_CONTEXT_MISSING",
79
86
  FEATURE_FLAGS_CONTEXT: "FEATURE_FLAGS_CONTEXT",
87
+ // Realtime delivery — stable codes shared by runtime and transport adapters
88
+ REALTIME_RATE_LIMITED: "REALTIME_RATE_LIMITED",
89
+ REALTIME_DELIVERY_FAILED: "REALTIME_DELIVERY_FAILED",
90
+ REALTIME_SUBSCRIPTION_FAILED: "REALTIME_SUBSCRIPTION_FAILED",
80
91
  // Agents
81
92
  AGENT_UNKNOWN: "AGENT_UNKNOWN",
82
93
  AGENT_DEPTH_EXCEEDED: "AGENT_DEPTH_EXCEEDED",
@@ -91,8 +102,7 @@ var SchemaErrorCode = {
91
102
  AGENT_COMPACTION_IMPOSSIBLE: "AGENT_COMPACTION_IMPOSSIBLE",
92
103
  AGENT_COMPACTION_TIMEOUT: "AGENT_COMPACTION_TIMEOUT",
93
104
  AGENT_LEASE_HELD: "AGENT_LEASE_HELD",
94
- AGENT_MISSION_CONFLICT: "AGENT_MISSION_CONFLICT",
95
- AGENT_MISSION_INCOMPLETE: "AGENT_MISSION_INCOMPLETE",
105
+ AGENT_WORK_MODE_REQUIRED: "AGENT_WORK_MODE_REQUIRED",
96
106
  // AI / LLM
97
107
  AI_UNKNOWN: "AI_UNKNOWN",
98
108
  AI_USAGE_LIMIT_EXCEEDED: "AI_USAGE_LIMIT_EXCEEDED",
@@ -120,6 +130,8 @@ var SchemaErrorCode = {
120
130
  // Email provider sync — transport failures from Gmail / Microsoft Graph
121
131
  EMAIL_PROVIDER_API_FAILED: "EMAIL_PROVIDER_API_FAILED",
122
132
  EMAIL_BATCH_ITEM_FAILED: "EMAIL_BATCH_ITEM_FAILED",
133
+ // Calendar provider sync — transport failures from Google Calendar / Microsoft Graph
134
+ CALENDAR_PROVIDER_API_FAILED: "CALENDAR_PROVIDER_API_FAILED",
123
135
  // Reflexes — agent-authored deterministic automations
124
136
  REFLEX_INVALID_TRANSITION: "REFLEX_INVALID_TRANSITION",
125
137
  REFLEX_INVALID_TOKEN: "REFLEX_INVALID_TOKEN",
@@ -1,17 +1,17 @@
1
+ import { createPhoneValidator } from './chunk-R5LAJCBU.mjs';
2
+ import { createRelationValidator } from './chunk-GO6LQADH.mjs';
1
3
  import { createRichtextValidator } from './chunk-QVLQPW3O.mjs';
2
4
  import { createMultiselectValidator, createSelectValidator, createStatusValidator } from './chunk-ZDQ5AP26.mjs';
3
5
  import { createUserValidator } from './chunk-LV3FEUKU.mjs';
4
- import { createFormulaValidator } from './chunk-UXAHLSWC.mjs';
5
- import { createRollupValidator } from './chunk-NS63SPNN.mjs';
6
6
  import { createCheckboxValidator } from './chunk-OSSGN43B.mjs';
7
7
  import { createDateValidator } from './chunk-Q44QKLN4.mjs';
8
8
  import { createNumberValidator } from './chunk-UANQJ2GH.mjs';
9
9
  import { createTextValidator } from './chunk-O73ROMWQ.mjs';
10
- import { ValidationError } from './chunk-K4UER3DU.mjs';
10
+ import { ValidationError } from './chunk-V2WJFUZW.mjs';
11
+ import { createFormulaValidator } from './chunk-UXAHLSWC.mjs';
12
+ import { createRollupValidator } from './chunk-NS63SPNN.mjs';
11
13
  import { createCurrencyValidator } from './chunk-AYVHMVKQ.mjs';
12
14
  import { createLocationValidator } from './chunk-YUFTHPOE.mjs';
13
- import { createPhoneValidator } from './chunk-R5LAJCBU.mjs';
14
- import { createRelationValidator } from './chunk-GO6LQADH.mjs';
15
15
  import { DEFAULT_VALIDATION_MESSAGES, formatZodErrors } from './chunk-HRQEZUAA.mjs';
16
16
  import { z } from 'zod';
17
17
 
@@ -79,6 +79,12 @@ function createFormAttributeValidator(attr, messages = DEFAULT_VALIDATION_MESSAG
79
79
  function isNullishOrEmptyString(value) {
80
80
  return value === null || value === void 0 || value === "";
81
81
  }
82
+ function isValuePresent(value) {
83
+ if (value === null || value === void 0) return false;
84
+ if (typeof value === "string") return value.trim() !== "";
85
+ if (Array.isArray(value)) return value.length > 0;
86
+ return true;
87
+ }
82
88
 
83
89
  // src/validation/object/object-validator.ts
84
90
  var objectValidatorCache = /* @__PURE__ */ new WeakMap();
@@ -89,12 +95,12 @@ function createObjectValidator(objectDef) {
89
95
  const shape = {};
90
96
  for (const attr of objectDef.attributes) {
91
97
  const validator = createAttributeValidator(attr);
92
- if (attr.required && attr.type === "text") {
93
- shape[attr.name] = validator.refine((value) => !isNullishOrEmptyString(value), {
98
+ if (attr.required) {
99
+ shape[attr.name] = validator.refine(isValuePresent, {
94
100
  message: DEFAULT_VALIDATION_MESSAGES.required(attr)
95
101
  });
96
102
  } else {
97
- shape[attr.name] = attr.required ? validator : withEmptyToNull(validator);
103
+ shape[attr.name] = withEmptyToNull(validator);
98
104
  }
99
105
  }
100
106
  const schema = z.object(shape).passthrough();
@@ -199,15 +205,6 @@ function rejectUnknownAttributesOrThrow(objectDef, data) {
199
205
  );
200
206
  }
201
207
  }
202
- function isValuePresent(value) {
203
- if (value === void 0 || value === null) {
204
- return false;
205
- }
206
- if (typeof value === "string" && value.trim() === "") {
207
- return false;
208
- }
209
- return true;
210
- }
211
208
  function getMissingRequiredAttributes(objectDef, data) {
212
209
  const missing = [];
213
210
  for (const attr of objectDef.attributes) {
@@ -226,4 +223,4 @@ function isRecordComplete(objectDef, data) {
226
223
  return validation.success;
227
224
  }
228
225
 
229
- export { createAttributeValidator, createDraftValidator, createFormAttributeValidator, createObjectValidator, getMissingRequiredAttributes, isNullishOrEmptyString, isRecordComplete, rejectUnknownAttributesOrThrow, validateAttribute, validateDraft, validateDraftOrThrow, validateObject, validateObjectOrThrow };
226
+ export { createAttributeValidator, createDraftValidator, createFormAttributeValidator, createObjectValidator, getMissingRequiredAttributes, isNullishOrEmptyString, isRecordComplete, isValuePresent, rejectUnknownAttributesOrThrow, validateAttribute, validateDraft, validateDraftOrThrow, validateObject, validateObjectOrThrow };
@@ -26,6 +26,13 @@ var SchemaErrorCode = {
26
26
  // Connectors
27
27
  CONNECTOR_AUTH_FAILED: "SCHEMA_CONNECTOR_AUTH_FAILED",
28
28
  CONNECTOR_INVALID_STATE: "SCHEMA_CONNECTOR_INVALID_STATE",
29
+ /**
30
+ * The provider issued tokens and the flow failed AFTER that — resolving the
31
+ * connected address. Distinct from CONNECTOR_AUTH_FAILED because the user is
32
+ * left holding a real grant: consent happened, and it may still be live on the
33
+ * provider side even though no connection row exists here.
34
+ */
35
+ CONNECTOR_GRANT_ORPHANED: "SCHEMA_CONNECTOR_GRANT_ORPHANED",
29
36
  // Sync
30
37
  SYNC_FAILED: "SCHEMA_SYNC_FAILED",
31
38
  SYNC_CONFLICT: "SCHEMA_SYNC_CONFLICT",
@@ -79,6 +86,10 @@ var SchemaErrorCode = {
79
86
  // Tenant / context
80
87
  TENANT_CONTEXT_MISSING: "TENANT_CONTEXT_MISSING",
81
88
  FEATURE_FLAGS_CONTEXT: "FEATURE_FLAGS_CONTEXT",
89
+ // Realtime delivery — stable codes shared by runtime and transport adapters
90
+ REALTIME_RATE_LIMITED: "REALTIME_RATE_LIMITED",
91
+ REALTIME_DELIVERY_FAILED: "REALTIME_DELIVERY_FAILED",
92
+ REALTIME_SUBSCRIPTION_FAILED: "REALTIME_SUBSCRIPTION_FAILED",
82
93
  // Agents
83
94
  AGENT_UNKNOWN: "AGENT_UNKNOWN",
84
95
  AGENT_DEPTH_EXCEEDED: "AGENT_DEPTH_EXCEEDED",
@@ -93,8 +104,7 @@ var SchemaErrorCode = {
93
104
  AGENT_COMPACTION_IMPOSSIBLE: "AGENT_COMPACTION_IMPOSSIBLE",
94
105
  AGENT_COMPACTION_TIMEOUT: "AGENT_COMPACTION_TIMEOUT",
95
106
  AGENT_LEASE_HELD: "AGENT_LEASE_HELD",
96
- AGENT_MISSION_CONFLICT: "AGENT_MISSION_CONFLICT",
97
- AGENT_MISSION_INCOMPLETE: "AGENT_MISSION_INCOMPLETE",
107
+ AGENT_WORK_MODE_REQUIRED: "AGENT_WORK_MODE_REQUIRED",
98
108
  // AI / LLM
99
109
  AI_UNKNOWN: "AI_UNKNOWN",
100
110
  AI_USAGE_LIMIT_EXCEEDED: "AI_USAGE_LIMIT_EXCEEDED",
@@ -122,6 +132,8 @@ var SchemaErrorCode = {
122
132
  // Email provider sync — transport failures from Gmail / Microsoft Graph
123
133
  EMAIL_PROVIDER_API_FAILED: "EMAIL_PROVIDER_API_FAILED",
124
134
  EMAIL_BATCH_ITEM_FAILED: "EMAIL_BATCH_ITEM_FAILED",
135
+ // Calendar provider sync — transport failures from Google Calendar / Microsoft Graph
136
+ CALENDAR_PROVIDER_API_FAILED: "CALENDAR_PROVIDER_API_FAILED",
125
137
  // Reflexes — agent-authored deterministic automations
126
138
  REFLEX_INVALID_TRANSITION: "REFLEX_INVALID_TRANSITION",
127
139
  REFLEX_INVALID_TOKEN: "REFLEX_INVALID_TOKEN",
@@ -1,5 +1,5 @@
1
- import { S as SchemaOperation } from './migrations-BXd2ZGfM.mjs';
2
- import './attributes-lBLiOIY3.mjs';
1
+ import { S as SchemaOperation } from './migrations-Dy9K8kJ0.mjs';
2
+ import './attributes-VsYmgI0A.mjs';
3
3
  import '@stndrds/constants';
4
4
  import './utils.mjs';
5
5
 
@@ -25,6 +25,13 @@ declare const SchemaErrorCode: {
25
25
  readonly ACCESS_DENIED: "SCHEMA_ACCESS_DENIED";
26
26
  readonly CONNECTOR_AUTH_FAILED: "SCHEMA_CONNECTOR_AUTH_FAILED";
27
27
  readonly CONNECTOR_INVALID_STATE: "SCHEMA_CONNECTOR_INVALID_STATE";
28
+ /**
29
+ * The provider issued tokens and the flow failed AFTER that — resolving the
30
+ * connected address. Distinct from CONNECTOR_AUTH_FAILED because the user is
31
+ * left holding a real grant: consent happened, and it may still be live on the
32
+ * provider side even though no connection row exists here.
33
+ */
34
+ readonly CONNECTOR_GRANT_ORPHANED: "SCHEMA_CONNECTOR_GRANT_ORPHANED";
28
35
  readonly SYNC_FAILED: "SCHEMA_SYNC_FAILED";
29
36
  readonly SYNC_CONFLICT: "SCHEMA_SYNC_CONFLICT";
30
37
  readonly SYNC_CASCADE: "SCHEMA_SYNC_CASCADE";
@@ -57,6 +64,9 @@ declare const SchemaErrorCode: {
57
64
  readonly INVARIANT_VIOLATION: "INVARIANT_VIOLATION";
58
65
  readonly TENANT_CONTEXT_MISSING: "TENANT_CONTEXT_MISSING";
59
66
  readonly FEATURE_FLAGS_CONTEXT: "FEATURE_FLAGS_CONTEXT";
67
+ readonly REALTIME_RATE_LIMITED: "REALTIME_RATE_LIMITED";
68
+ readonly REALTIME_DELIVERY_FAILED: "REALTIME_DELIVERY_FAILED";
69
+ readonly REALTIME_SUBSCRIPTION_FAILED: "REALTIME_SUBSCRIPTION_FAILED";
60
70
  readonly AGENT_UNKNOWN: "AGENT_UNKNOWN";
61
71
  readonly AGENT_DEPTH_EXCEEDED: "AGENT_DEPTH_EXCEEDED";
62
72
  readonly AGENT_COST_LIMIT_EXCEEDED: "AGENT_COST_LIMIT_EXCEEDED";
@@ -70,8 +80,7 @@ declare const SchemaErrorCode: {
70
80
  readonly AGENT_COMPACTION_IMPOSSIBLE: "AGENT_COMPACTION_IMPOSSIBLE";
71
81
  readonly AGENT_COMPACTION_TIMEOUT: "AGENT_COMPACTION_TIMEOUT";
72
82
  readonly AGENT_LEASE_HELD: "AGENT_LEASE_HELD";
73
- readonly AGENT_MISSION_CONFLICT: "AGENT_MISSION_CONFLICT";
74
- readonly AGENT_MISSION_INCOMPLETE: "AGENT_MISSION_INCOMPLETE";
83
+ readonly AGENT_WORK_MODE_REQUIRED: "AGENT_WORK_MODE_REQUIRED";
75
84
  readonly AI_UNKNOWN: "AI_UNKNOWN";
76
85
  readonly AI_USAGE_LIMIT_EXCEEDED: "AI_USAGE_LIMIT_EXCEEDED";
77
86
  readonly AI_INVALID_USAGE: "AI_INVALID_USAGE";
@@ -94,6 +103,7 @@ declare const SchemaErrorCode: {
94
103
  readonly DOCUMENT_FOLDER_PATH_NOT_FOUND: "DOCUMENT_FOLDER_PATH_NOT_FOUND";
95
104
  readonly EMAIL_PROVIDER_API_FAILED: "EMAIL_PROVIDER_API_FAILED";
96
105
  readonly EMAIL_BATCH_ITEM_FAILED: "EMAIL_BATCH_ITEM_FAILED";
106
+ readonly CALENDAR_PROVIDER_API_FAILED: "CALENDAR_PROVIDER_API_FAILED";
97
107
  readonly REFLEX_INVALID_TRANSITION: "REFLEX_INVALID_TRANSITION";
98
108
  readonly REFLEX_INVALID_TOKEN: "REFLEX_INVALID_TOKEN";
99
109
  readonly REFLEX_CAPABILITY_DENIED: "REFLEX_CAPABILITY_DENIED";