@fayz-ai/core 0.8.1 → 0.8.2

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 (98) hide show
  1. package/dist/access/denial.d.ts +21 -0
  2. package/dist/access/denial.d.ts.map +1 -0
  3. package/dist/access/engine.d.ts +63 -0
  4. package/dist/access/engine.d.ts.map +1 -0
  5. package/dist/access/index.cjs +60 -0
  6. package/dist/access/index.cjs.map +1 -0
  7. package/dist/access/index.d.ts +6 -0
  8. package/dist/access/index.d.ts.map +1 -0
  9. package/dist/access/index.js +51 -0
  10. package/dist/access/index.js.map +1 -0
  11. package/dist/access/limits.d.ts +10 -0
  12. package/dist/access/limits.d.ts.map +1 -0
  13. package/dist/address/index.d.ts +52 -0
  14. package/dist/address/index.d.ts.map +1 -0
  15. package/dist/{chunk-WKZVSKEU.js → chunk-CU64QI4A.js} +2 -2
  16. package/dist/chunk-CU64QI4A.js.map +1 -0
  17. package/dist/{chunk-54SRL7AJ.cjs → chunk-CYAWDW44.cjs} +141 -84
  18. package/dist/chunk-CYAWDW44.cjs.map +1 -0
  19. package/dist/{chunk-KNIVT6XZ.js → chunk-JHGXROKV.js} +230 -2
  20. package/dist/chunk-JHGXROKV.js.map +1 -0
  21. package/dist/{chunk-QR7U2URY.cjs → chunk-SO3VUKGZ.cjs} +230 -2
  22. package/dist/chunk-SO3VUKGZ.cjs.map +1 -0
  23. package/dist/{chunk-2NTHNWEH.cjs → chunk-UKU4RIWM.cjs} +2 -2
  24. package/dist/chunk-UKU4RIWM.cjs.map +1 -0
  25. package/dist/{chunk-ZBIWYDAR.js → chunk-XJKW2JRW.js} +140 -85
  26. package/dist/chunk-XJKW2JRW.js.map +1 -0
  27. package/dist/{chunk-CHGX6UYR.js → chunk-YH25Y4FW.js} +6 -3
  28. package/dist/chunk-YH25Y4FW.js.map +1 -0
  29. package/dist/{chunk-5X2VX3RQ.cjs → chunk-ZOPJB5FN.cjs} +6 -3
  30. package/dist/chunk-ZOPJB5FN.cjs.map +1 -0
  31. package/dist/data/count.d.ts +34 -0
  32. package/dist/data/count.d.ts.map +1 -0
  33. package/dist/data/index.cjs +18 -10
  34. package/dist/data/index.d.ts +2 -0
  35. package/dist/data/index.d.ts.map +1 -1
  36. package/dist/data/index.js +1 -1
  37. package/dist/data/resolve.d.ts.map +1 -1
  38. package/dist/entity/index.cjs +6 -6
  39. package/dist/entity/index.js +1 -1
  40. package/dist/entity/registry.d.ts +9 -0
  41. package/dist/entity/registry.d.ts.map +1 -1
  42. package/dist/i18n/index.cjs +10 -10
  43. package/dist/i18n/index.js +1 -1
  44. package/dist/i18n/shell-translations.d.ts.map +1 -1
  45. package/dist/index.cjs +852 -124
  46. package/dist/index.cjs.map +1 -1
  47. package/dist/index.d.ts +10 -4
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +765 -56
  50. package/dist/index.js.map +1 -1
  51. package/dist/manifest/index.d.ts +109 -3
  52. package/dist/manifest/index.d.ts.map +1 -1
  53. package/dist/manifest/serialize.d.ts +14 -0
  54. package/dist/manifest/serialize.d.ts.map +1 -0
  55. package/dist/plugin/index.cjs +7 -7
  56. package/dist/plugin/index.js +1 -1
  57. package/dist/plugin/runtime.d.ts.map +1 -1
  58. package/dist/types/billing.d.ts +20 -0
  59. package/dist/types/billing.d.ts.map +1 -1
  60. package/dist/types/crud.d.ts +47 -1
  61. package/dist/types/crud.d.ts.map +1 -1
  62. package/dist/types/entitlements.d.ts +45 -0
  63. package/dist/types/entitlements.d.ts.map +1 -0
  64. package/dist/types/index.d.ts +4 -3
  65. package/dist/types/index.d.ts.map +1 -1
  66. package/dist/types/plugins.d.ts +84 -0
  67. package/dist/types/plugins.d.ts.map +1 -1
  68. package/package.json +14 -4
  69. package/src/access/denial.ts +33 -0
  70. package/src/access/engine.test.ts +48 -0
  71. package/src/access/engine.ts +121 -0
  72. package/src/access/index.ts +13 -0
  73. package/src/access/limits.ts +18 -0
  74. package/src/address/index.ts +188 -0
  75. package/src/data/count.test.ts +152 -0
  76. package/src/data/count.ts +131 -0
  77. package/src/data/index.ts +2 -0
  78. package/src/data/resolve.ts +7 -1
  79. package/src/entity/registry.ts +7 -0
  80. package/src/i18n/shell-translations.ts +230 -0
  81. package/src/index.ts +18 -3
  82. package/src/manifest/app-manifest.schema.json +618 -45
  83. package/src/manifest/index.ts +127 -3
  84. package/src/manifest/serialize.ts +52 -0
  85. package/src/plugin/runtime.ts +5 -1
  86. package/src/types/billing.ts +22 -0
  87. package/src/types/crud.ts +48 -1
  88. package/src/types/entitlements.ts +45 -0
  89. package/src/types/index.ts +4 -3
  90. package/src/types/plugins.ts +79 -0
  91. package/dist/chunk-2NTHNWEH.cjs.map +0 -1
  92. package/dist/chunk-54SRL7AJ.cjs.map +0 -1
  93. package/dist/chunk-5X2VX3RQ.cjs.map +0 -1
  94. package/dist/chunk-CHGX6UYR.js.map +0 -1
  95. package/dist/chunk-KNIVT6XZ.js.map +0 -1
  96. package/dist/chunk-QR7U2URY.cjs.map +0 -1
  97. package/dist/chunk-WKZVSKEU.js.map +0 -1
  98. package/dist/chunk-ZBIWYDAR.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  var chunk56GH3WC2_cjs = require('./chunk-56GH3WC2.cjs');
4
4
  var chunkP5OJUH25_cjs = require('./chunk-P5OJUH25.cjs');
5
- var chunk54SRL7AJ_cjs = require('./chunk-54SRL7AJ.cjs');
6
- var chunk2NTHNWEH_cjs = require('./chunk-2NTHNWEH.cjs');
7
- var chunk5X2VX3RQ_cjs = require('./chunk-5X2VX3RQ.cjs');
8
- var chunkQR7U2URY_cjs = require('./chunk-QR7U2URY.cjs');
5
+ var chunkCYAWDW44_cjs = require('./chunk-CYAWDW44.cjs');
6
+ var chunkUKU4RIWM_cjs = require('./chunk-UKU4RIWM.cjs');
7
+ var chunkZOPJB5FN_cjs = require('./chunk-ZOPJB5FN.cjs');
8
+ var chunkSO3VUKGZ_cjs = require('./chunk-SO3VUKGZ.cjs');
9
9
  var chunkAXTWKF5X_cjs = require('./chunk-AXTWKF5X.cjs');
10
10
  var chunk5TKIZVVJ_cjs = require('./chunk-5TKIZVVJ.cjs');
11
11
  var React2 = require('react');
@@ -49,7 +49,7 @@ function createSafeDataProvider(makeSupabase, makeMock) {
49
49
  let resolved = null;
50
50
  const get = () => {
51
51
  if (!resolved) {
52
- resolved = chunk54SRL7AJ_cjs.getSupabaseClientOptional() ? makeSupabase() : makeMock();
52
+ resolved = chunkCYAWDW44_cjs.getSupabaseClientOptional() ? makeSupabase() : makeMock();
53
53
  }
54
54
  return resolved;
55
55
  };
@@ -102,6 +102,92 @@ function maskDigitCount(mask) {
102
102
  for (const ch of mask) if (ch === "#") n++;
103
103
  return n;
104
104
  }
105
+
106
+ // src/address/index.ts
107
+ function normalizePostalCode(value) {
108
+ return (value || "").replace(/\D/g, "");
109
+ }
110
+ function formatPostalCode(value) {
111
+ const digits = normalizePostalCode(value).slice(0, 8);
112
+ return digits.length > 5 ? `${digits.slice(0, 5)}-${digits.slice(5)}` : digits;
113
+ }
114
+ function isValidPostalCode(value) {
115
+ return normalizePostalCode(value).length === 8;
116
+ }
117
+ var CACHE_KEY = "fayz.postal.cache.v1";
118
+ var memoryCache = /* @__PURE__ */ new Map();
119
+ function readCache(code) {
120
+ const hit = memoryCache.get(code);
121
+ if (hit) return hit;
122
+ try {
123
+ const raw = globalThis.localStorage?.getItem(CACHE_KEY);
124
+ if (!raw) return void 0;
125
+ const all = JSON.parse(raw);
126
+ const stored = all[code];
127
+ if (stored) memoryCache.set(code, stored);
128
+ return stored;
129
+ } catch {
130
+ return void 0;
131
+ }
132
+ }
133
+ function writeCache(code, address) {
134
+ memoryCache.set(code, address);
135
+ try {
136
+ const store = globalThis.localStorage;
137
+ if (!store) return;
138
+ const raw = store.getItem(CACHE_KEY);
139
+ const all = raw ? JSON.parse(raw) : {};
140
+ all[code] = address;
141
+ store.setItem(CACHE_KEY, JSON.stringify(all));
142
+ } catch {
143
+ }
144
+ }
145
+ function clearPostalCache() {
146
+ memoryCache.clear();
147
+ try {
148
+ globalThis.localStorage?.removeItem(CACHE_KEY);
149
+ } catch {
150
+ }
151
+ }
152
+ function createViaCepProvider(options) {
153
+ const fetcher = options?.fetcher ?? globalThis.fetch;
154
+ return {
155
+ async lookup(postalCode) {
156
+ const code = normalizePostalCode(postalCode);
157
+ if (code.length !== 8) return null;
158
+ const response = await fetcher(`https://viacep.com.br/ws/${code}/json/`);
159
+ if (!response.ok) throw new Error(`Consulta de CEP falhou (${response.status})`);
160
+ const data = await response.json();
161
+ if (data.erro === true || data.erro === "true" || !data.localidade) return null;
162
+ return {
163
+ postalCode: code,
164
+ street: data.logradouro ?? "",
165
+ district: data.bairro ?? "",
166
+ city: data.localidade,
167
+ state: (data.uf ?? "").toUpperCase(),
168
+ country: "BR",
169
+ cityCode: data.ibge || void 0
170
+ };
171
+ }
172
+ };
173
+ }
174
+ var _provider = null;
175
+ function setPostalLookupProvider(provider) {
176
+ _provider = provider;
177
+ }
178
+ function getPostalLookupProvider() {
179
+ if (!_provider) _provider = createViaCepProvider();
180
+ return _provider;
181
+ }
182
+ async function lookupPostalCode(postalCode) {
183
+ const code = normalizePostalCode(postalCode);
184
+ if (code.length !== 8) return null;
185
+ const cached = readCache(code);
186
+ if (cached) return cached;
187
+ const address = await getPostalLookupProvider().lookup(code);
188
+ if (address) writeCache(code, address);
189
+ return address;
190
+ }
105
191
  var MANAGED = "data-fayz-seo";
106
192
  function seoOrigin() {
107
193
  return typeof window !== "undefined" ? window.location.origin : "";
@@ -196,7 +282,7 @@ function setDefaultCurrency(code) {
196
282
  }
197
283
  function getActiveLocale() {
198
284
  try {
199
- return chunkQR7U2URY_cjs.getCurrentLocale() || "en";
285
+ return chunkSO3VUKGZ_cjs.getCurrentLocale() || "en";
200
286
  } catch {
201
287
  return "en";
202
288
  }
@@ -329,7 +415,7 @@ function UnknownBlock({ type }) {
329
415
  );
330
416
  }
331
417
  function BlockRenderer({ node }) {
332
- const Comp = chunk5X2VX3RQ_cjs.getBlock(node.type);
418
+ const Comp = chunkZOPJB5FN_cjs.getBlock(node.type);
333
419
  const childEls = node.children?.length ? node.children.map(
334
420
  (child, i) => React2__namespace.createElement(BlockRenderer, { key: child.id ?? `${child.type}-${i}`, node: child })
335
421
  ) : null;
@@ -347,7 +433,7 @@ function BlockChildren({ node }) {
347
433
  }
348
434
 
349
435
  // src/manifest/index.ts
350
- var CURRENT_MANIFEST_VERSION = 2;
436
+ var CURRENT_MANIFEST_VERSION = 3;
351
437
  var migrations = /* @__PURE__ */ new Map();
352
438
  var supportedBackendProviders = ["supabase", "fayz-api", "fayz-shop", "mock", "custom"];
353
439
  var supportedPageSections = /* @__PURE__ */ new Set(["main", "secondary", "settings"]);
@@ -361,7 +447,10 @@ var allowedManifestKeys = /* @__PURE__ */ new Set([
361
447
  "permissions",
362
448
  "billing",
363
449
  "entities",
364
- "surfaces"
450
+ "surfaces",
451
+ "limitDeclarations",
452
+ "agent",
453
+ "contractHash"
365
454
  ]);
366
455
  var allowedBackendKeys = /* @__PURE__ */ new Set(["provider", "projectRef", "url", "adapterId", "options"]);
367
456
  var allowedSurfaceKeys = /* @__PURE__ */ new Set(["scaffold", "options", "plugins", "pages"]);
@@ -373,6 +462,7 @@ var manifestIdPattern = /^[a-z0-9][a-z0-9-]*$/;
373
462
  function registerManifestMigration(fromVersion, fn) {
374
463
  migrations.set(fromVersion, fn);
375
464
  }
465
+ registerManifestMigration(2, (m) => m);
376
466
  function migrateManifest(input) {
377
467
  let m = { ...input };
378
468
  let version = typeof m.manifestVersion === "number" ? m.manifestVersion : 1;
@@ -410,6 +500,21 @@ function validateManifest(m) {
410
500
  validateLooseObject(manifest.theme, "manifest.theme", problems);
411
501
  validateLooseObject(manifest.permissions, "manifest.permissions", problems);
412
502
  validateLooseObject(manifest.billing, "manifest.billing", problems);
503
+ validateLooseObject(manifest.agent, "manifest.agent", problems);
504
+ if (manifest.contractHash !== void 0 && !isNonEmptyString(manifest.contractHash)) {
505
+ problems.push("manifest.contractHash must be a non-empty string");
506
+ }
507
+ if (manifest.limitDeclarations !== void 0) {
508
+ if (!Array.isArray(manifest.limitDeclarations)) {
509
+ problems.push("manifest.limitDeclarations must be an array");
510
+ } else {
511
+ manifest.limitDeclarations.forEach((decl, index) => {
512
+ if (!isRecord(decl) || !isNonEmptyString(decl.key) || !isNonEmptyString(decl.table)) {
513
+ problems.push(`manifest.limitDeclarations[${index}] must declare key and table`);
514
+ }
515
+ });
516
+ }
517
+ }
413
518
  if (manifest.entities !== void 0) {
414
519
  if (!Array.isArray(manifest.entities)) {
415
520
  problems.push("manifest.entities must be an array");
@@ -570,7 +675,7 @@ function validateBlockManifest(block, path, problems) {
570
675
  function addUnsupportedKeys(value, allowedKeys, path, problems) {
571
676
  for (const key of Object.keys(value)) {
572
677
  if (!allowedKeys.has(key)) {
573
- problems.push(`${path}.${key} is not part of AppManifest v2`);
678
+ problems.push(`${path}.${key} is not part of AppManifest v${CURRENT_MANIFEST_VERSION}`);
574
679
  }
575
680
  }
576
681
  }
@@ -591,106 +696,710 @@ function isNonEmptyString(value) {
591
696
  return typeof value === "string" && value.trim().length > 0;
592
697
  }
593
698
 
699
+ // src/manifest/serialize.ts
700
+ function sortValue(value) {
701
+ if (Array.isArray(value)) return value.map(sortValue);
702
+ if (value !== null && typeof value === "object") {
703
+ const record = value;
704
+ const out = {};
705
+ for (const key of Object.keys(record).sort()) {
706
+ const v = record[key];
707
+ if (v !== void 0) out[key] = sortValue(v);
708
+ }
709
+ return out;
710
+ }
711
+ return value;
712
+ }
713
+ function serializeManifest(manifest) {
714
+ const { contractHash: _omit, ...rest } = manifest;
715
+ return `${JSON.stringify(sortValue(rest), null, 2)}
716
+ `;
717
+ }
718
+ async function computeContractHash(manifest) {
719
+ const bytes = new TextEncoder().encode(serializeManifest(manifest));
720
+ const digest = await globalThis.crypto.subtle.digest("SHA-256", bytes);
721
+ return Array.from(new Uint8Array(digest)).map((b) => b.toString(16).padStart(2, "0")).join("");
722
+ }
723
+ async function serializeManifestWithHash(manifest) {
724
+ const contractHash = await computeContractHash(manifest);
725
+ const { contractHash: _omit, ...rest } = manifest;
726
+ return `${JSON.stringify(sortValue({ ...rest, contractHash }), null, 2)}
727
+ `;
728
+ }
729
+
594
730
  // src/manifest/app-manifest.schema.json
595
731
  var app_manifest_schema_default = {
596
732
  $schema: "https://json-schema.org/draft/2020-12/schema",
597
- $id: "https://fayz.ai/schemas/app-manifest/v2.json",
733
+ $id: "https://fayz.ai/schemas/app-manifest/v3.json",
598
734
  title: "Fayz AppManifest",
599
735
  description: "The canonical, JSON-serializable definition of a Fayz app. Code is referenced by registry id; never inlined.",
600
736
  type: "object",
601
- required: ["manifestVersion", "id", "name", "surfaces"],
737
+ required: [
738
+ "manifestVersion",
739
+ "id",
740
+ "name",
741
+ "surfaces"
742
+ ],
602
743
  additionalProperties: false,
603
744
  properties: {
604
745
  manifestVersion: {
605
746
  type: "integer",
606
- const: 2,
747
+ const: 3,
607
748
  description: "Current AppManifest schema version. Older or newer versions require an explicit SDK migration before validation."
608
749
  },
609
- id: { type: "string", minLength: 1, pattern: "^[a-z0-9][a-z0-9-]*$" },
610
- name: { type: "string", minLength: 1 },
750
+ id: {
751
+ type: "string",
752
+ minLength: 1,
753
+ pattern: "^[a-z0-9][a-z0-9-]*$"
754
+ },
755
+ name: {
756
+ type: "string",
757
+ minLength: 1
758
+ },
611
759
  backend: {
612
760
  type: "object",
613
761
  additionalProperties: false,
614
- required: ["provider"],
762
+ required: [
763
+ "provider"
764
+ ],
615
765
  properties: {
616
- provider: { enum: ["supabase", "fayz-api", "fayz-shop", "mock", "custom"] },
617
- projectRef: { type: "string", minLength: 1 },
618
- url: { type: "string", minLength: 1 },
619
- adapterId: { type: "string", minLength: 1 },
620
- options: { type: "object" }
766
+ provider: {
767
+ enum: [
768
+ "supabase",
769
+ "fayz-api",
770
+ "fayz-shop",
771
+ "mock",
772
+ "custom"
773
+ ]
774
+ },
775
+ projectRef: {
776
+ type: "string",
777
+ minLength: 1
778
+ },
779
+ url: {
780
+ type: "string",
781
+ minLength: 1
782
+ },
783
+ adapterId: {
784
+ type: "string",
785
+ minLength: 1
786
+ },
787
+ options: {
788
+ type: "object"
789
+ }
790
+ }
791
+ },
792
+ locale: {
793
+ type: "object"
794
+ },
795
+ theme: {
796
+ type: "object"
797
+ },
798
+ permissions: {
799
+ type: "object"
800
+ },
801
+ billing: {
802
+ type: "object"
803
+ },
804
+ entities: {
805
+ type: "array",
806
+ items: {
807
+ type: "object"
621
808
  }
622
809
  },
623
- locale: { type: "object" },
624
- theme: { type: "object" },
625
- permissions: { type: "object" },
626
- billing: { type: "object" },
627
- entities: { type: "array", items: { type: "object" } },
628
810
  surfaces: {
629
811
  type: "object",
630
812
  minProperties: 1,
631
- additionalProperties: { $ref: "#/$defs/surface" }
813
+ additionalProperties: {
814
+ $ref: "#/$defs/surface"
815
+ }
816
+ },
817
+ limitDeclarations: {
818
+ type: "array",
819
+ description: "Resolved 4-layer limit-declaration merge (core < entity-derived < plugin < app) so server runtimes count exactly what the client counts.",
820
+ items: {
821
+ type: "object",
822
+ required: [
823
+ "key",
824
+ "table"
825
+ ],
826
+ additionalProperties: false,
827
+ properties: {
828
+ key: {
829
+ type: "string",
830
+ minLength: 1
831
+ },
832
+ label: {
833
+ type: "string"
834
+ },
835
+ table: {
836
+ type: "string",
837
+ minLength: 1
838
+ },
839
+ kindFilter: {
840
+ type: "string"
841
+ },
842
+ period: {
843
+ enum: [
844
+ "month",
845
+ "total"
846
+ ]
847
+ }
848
+ }
849
+ }
850
+ },
851
+ agent: {
852
+ $ref: "#/$defs/agentContract"
853
+ },
854
+ contractHash: {
855
+ type: "string",
856
+ minLength: 1,
857
+ description: "sha256 of the canonical serialization (excluding this field)."
632
858
  }
633
859
  },
634
860
  $defs: {
635
861
  surface: {
636
862
  type: "object",
637
- required: ["scaffold"],
863
+ required: [
864
+ "scaffold"
865
+ ],
638
866
  additionalProperties: false,
639
867
  properties: {
640
- scaffold: { type: "string", minLength: 1 },
641
- options: { type: "object" },
642
- plugins: { type: "array", items: { $ref: "#/$defs/pluginRef" } },
643
- pages: { type: "array", items: { $ref: "#/$defs/page" } }
868
+ scaffold: {
869
+ type: "string",
870
+ minLength: 1
871
+ },
872
+ options: {
873
+ type: "object"
874
+ },
875
+ plugins: {
876
+ type: "array",
877
+ items: {
878
+ $ref: "#/$defs/pluginRef"
879
+ }
880
+ },
881
+ pages: {
882
+ type: "array",
883
+ items: {
884
+ $ref: "#/$defs/page"
885
+ }
886
+ }
644
887
  }
645
888
  },
646
889
  pluginRef: {
647
890
  type: "object",
648
- required: ["id"],
891
+ required: [
892
+ "id"
893
+ ],
649
894
  additionalProperties: false,
650
895
  properties: {
651
- id: { type: "string", minLength: 1 },
652
- config: { type: "object" },
653
- enabled: { type: "boolean" }
896
+ id: {
897
+ type: "string",
898
+ minLength: 1
899
+ },
900
+ config: {
901
+ type: "object"
902
+ },
903
+ enabled: {
904
+ type: "boolean"
905
+ }
654
906
  }
655
907
  },
656
908
  page: {
657
909
  type: "object",
658
- required: ["path"],
910
+ required: [
911
+ "path"
912
+ ],
659
913
  additionalProperties: false,
660
914
  description: "Exactly one of blocks/entity/component must be set.",
661
915
  properties: {
662
- path: { type: "string", minLength: 1 },
663
- label: { type: "string" },
664
- icon: { type: "string" },
665
- section: { enum: ["main", "secondary", "settings"] },
666
- blocks: { type: "array", items: { $ref: "#/$defs/block" } },
667
- entity: { type: "string", minLength: 1 },
668
- component: { type: "string", minLength: 1 },
916
+ path: {
917
+ type: "string",
918
+ minLength: 1
919
+ },
920
+ label: {
921
+ type: "string"
922
+ },
923
+ icon: {
924
+ type: "string"
925
+ },
926
+ section: {
927
+ enum: [
928
+ "main",
929
+ "secondary",
930
+ "settings"
931
+ ]
932
+ },
933
+ blocks: {
934
+ type: "array",
935
+ items: {
936
+ $ref: "#/$defs/block"
937
+ }
938
+ },
939
+ entity: {
940
+ type: "string",
941
+ minLength: 1
942
+ },
943
+ component: {
944
+ type: "string",
945
+ minLength: 1
946
+ },
669
947
  permission: {
670
948
  type: "object",
671
- required: ["feature", "action"],
949
+ required: [
950
+ "feature",
951
+ "action"
952
+ ],
672
953
  additionalProperties: false,
673
954
  properties: {
674
- feature: { type: "string", minLength: 1 },
675
- action: { type: "string", minLength: 1 }
955
+ feature: {
956
+ type: "string",
957
+ minLength: 1
958
+ },
959
+ action: {
960
+ type: "string",
961
+ minLength: 1
962
+ }
676
963
  }
677
964
  }
678
965
  },
679
966
  oneOf: [
680
- { required: ["blocks"] },
681
- { required: ["entity"] },
682
- { required: ["component"] }
967
+ {
968
+ required: [
969
+ "blocks"
970
+ ]
971
+ },
972
+ {
973
+ required: [
974
+ "entity"
975
+ ]
976
+ },
977
+ {
978
+ required: [
979
+ "component"
980
+ ]
981
+ }
683
982
  ]
684
983
  },
685
984
  block: {
686
985
  type: "object",
687
- required: ["type"],
986
+ required: [
987
+ "type"
988
+ ],
989
+ additionalProperties: false,
990
+ properties: {
991
+ type: {
992
+ type: "string",
993
+ minLength: 1
994
+ },
995
+ id: {
996
+ type: "string"
997
+ },
998
+ props: {
999
+ type: "object"
1000
+ },
1001
+ children: {
1002
+ type: "array",
1003
+ items: {
1004
+ $ref: "#/$defs/block"
1005
+ }
1006
+ }
1007
+ }
1008
+ },
1009
+ agentContract: {
1010
+ type: "object",
688
1011
  additionalProperties: false,
1012
+ description: "Everything a server-side agent runtime needs to operate the app without a browser. Derived from code at publish; synced to Fayz as the versioned AgentContract.",
689
1013
  properties: {
690
- type: { type: "string", minLength: 1 },
691
- id: { type: "string" },
692
- props: { type: "object" },
693
- children: { type: "array", items: { $ref: "#/$defs/block" } }
1014
+ persona: {
1015
+ type: "object",
1016
+ additionalProperties: false,
1017
+ properties: {
1018
+ name: {
1019
+ type: "string"
1020
+ },
1021
+ systemPrompt: {
1022
+ type: "string"
1023
+ },
1024
+ icon: {
1025
+ type: "string"
1026
+ }
1027
+ }
1028
+ },
1029
+ executionPlane: {
1030
+ enum: [
1031
+ "client",
1032
+ "server"
1033
+ ]
1034
+ },
1035
+ entities: {
1036
+ type: "array",
1037
+ items: {
1038
+ $ref: "#/$defs/entityContract"
1039
+ }
1040
+ },
1041
+ tools: {
1042
+ type: "array",
1043
+ items: {
1044
+ $ref: "#/$defs/aiToolContract"
1045
+ }
1046
+ },
1047
+ registries: {
1048
+ type: "array",
1049
+ items: {
1050
+ type: "object",
1051
+ required: [
1052
+ "pluginId",
1053
+ "id"
1054
+ ],
1055
+ additionalProperties: false,
1056
+ properties: {
1057
+ pluginId: {
1058
+ type: "string",
1059
+ minLength: 1
1060
+ },
1061
+ id: {
1062
+ type: "string",
1063
+ minLength: 1
1064
+ },
1065
+ entityKey: {
1066
+ type: "string"
1067
+ },
1068
+ readOnly: {
1069
+ type: "boolean"
1070
+ }
1071
+ }
1072
+ }
1073
+ },
1074
+ declaredFeatures: {
1075
+ type: "array",
1076
+ items: {
1077
+ type: "object"
1078
+ }
1079
+ },
1080
+ rpcs: {
1081
+ type: "array",
1082
+ items: {
1083
+ $ref: "#/$defs/rpcContract"
1084
+ }
1085
+ },
1086
+ domainKnowledge: {
1087
+ type: "object",
1088
+ additionalProperties: false,
1089
+ properties: {
1090
+ statuses: {
1091
+ type: "object"
1092
+ },
1093
+ scheduleDefaults: {
1094
+ type: "object"
1095
+ },
1096
+ businessRules: {
1097
+ type: "array",
1098
+ items: {
1099
+ type: "object",
1100
+ required: [
1101
+ "id",
1102
+ "description"
1103
+ ],
1104
+ additionalProperties: false,
1105
+ properties: {
1106
+ id: {
1107
+ type: "string",
1108
+ minLength: 1
1109
+ },
1110
+ description: {
1111
+ type: "string",
1112
+ minLength: 1
1113
+ }
1114
+ }
1115
+ }
1116
+ }
1117
+ }
1118
+ }
1119
+ }
1120
+ },
1121
+ entityContract: {
1122
+ type: "object",
1123
+ required: [
1124
+ "key",
1125
+ "label",
1126
+ "data",
1127
+ "fields"
1128
+ ],
1129
+ additionalProperties: false,
1130
+ properties: {
1131
+ key: {
1132
+ type: "string",
1133
+ minLength: 1
1134
+ },
1135
+ label: {
1136
+ type: "string",
1137
+ minLength: 1
1138
+ },
1139
+ labelPlural: {
1140
+ type: "string"
1141
+ },
1142
+ limitKey: {
1143
+ type: "string"
1144
+ },
1145
+ data: {
1146
+ type: "object",
1147
+ required: [
1148
+ "table"
1149
+ ],
1150
+ additionalProperties: false,
1151
+ properties: {
1152
+ table: {
1153
+ type: "string",
1154
+ minLength: 1
1155
+ },
1156
+ schema: {
1157
+ type: "string"
1158
+ },
1159
+ tenantScoped: {
1160
+ type: "boolean"
1161
+ },
1162
+ tenantIdColumn: {
1163
+ type: "string"
1164
+ },
1165
+ searchColumns: {
1166
+ type: "array",
1167
+ items: {
1168
+ type: "string"
1169
+ }
1170
+ },
1171
+ selectColumns: {
1172
+ type: "string"
1173
+ },
1174
+ columnMap: {
1175
+ type: "object"
1176
+ },
1177
+ archetype: {
1178
+ type: "string"
1179
+ },
1180
+ archetypeKind: {
1181
+ type: "string"
1182
+ },
1183
+ filters: {
1184
+ type: "object"
1185
+ }
1186
+ }
1187
+ },
1188
+ fields: {
1189
+ type: "array",
1190
+ items: {
1191
+ type: "object",
1192
+ required: [
1193
+ "key",
1194
+ "label",
1195
+ "type"
1196
+ ],
1197
+ additionalProperties: false,
1198
+ properties: {
1199
+ key: {
1200
+ type: "string",
1201
+ minLength: 1
1202
+ },
1203
+ label: {
1204
+ type: "string"
1205
+ },
1206
+ type: {
1207
+ type: "string",
1208
+ minLength: 1
1209
+ },
1210
+ required: {
1211
+ type: "boolean"
1212
+ },
1213
+ searchable: {
1214
+ type: "boolean"
1215
+ },
1216
+ hint: {
1217
+ type: "string"
1218
+ },
1219
+ options: {
1220
+ type: "array",
1221
+ items: {
1222
+ type: "string"
1223
+ }
1224
+ },
1225
+ relationTable: {
1226
+ type: "string"
1227
+ }
1228
+ }
1229
+ }
1230
+ },
1231
+ permission: {
1232
+ type: "object",
1233
+ required: [
1234
+ "feature",
1235
+ "action"
1236
+ ],
1237
+ additionalProperties: false,
1238
+ properties: {
1239
+ feature: {
1240
+ type: "string",
1241
+ minLength: 1
1242
+ },
1243
+ action: {
1244
+ type: "string",
1245
+ minLength: 1
1246
+ }
1247
+ }
1248
+ }
1249
+ }
1250
+ },
1251
+ aiToolContract: {
1252
+ type: "object",
1253
+ required: [
1254
+ "id",
1255
+ "name",
1256
+ "description",
1257
+ "mode"
1258
+ ],
1259
+ additionalProperties: false,
1260
+ properties: {
1261
+ id: {
1262
+ type: "string",
1263
+ minLength: 1
1264
+ },
1265
+ name: {
1266
+ type: "string",
1267
+ minLength: 1,
1268
+ pattern: "^[a-zA-Z0-9_-]{1,64}$"
1269
+ },
1270
+ description: {
1271
+ type: "string",
1272
+ minLength: 1
1273
+ },
1274
+ mode: {
1275
+ enum: [
1276
+ "read",
1277
+ "persist"
1278
+ ]
1279
+ },
1280
+ parameters: {
1281
+ type: "object"
1282
+ },
1283
+ permission: {
1284
+ type: "object",
1285
+ required: [
1286
+ "feature",
1287
+ "action"
1288
+ ],
1289
+ additionalProperties: false,
1290
+ properties: {
1291
+ feature: {
1292
+ type: "string",
1293
+ minLength: 1
1294
+ },
1295
+ action: {
1296
+ type: "string",
1297
+ minLength: 1
1298
+ }
1299
+ }
1300
+ },
1301
+ limitKey: {
1302
+ type: "string"
1303
+ },
1304
+ execution: {
1305
+ oneOf: [
1306
+ {
1307
+ type: "object",
1308
+ required: [
1309
+ "plane",
1310
+ "kind",
1311
+ "rpc"
1312
+ ],
1313
+ additionalProperties: false,
1314
+ properties: {
1315
+ plane: {
1316
+ const: "server"
1317
+ },
1318
+ kind: {
1319
+ const: "rpc"
1320
+ },
1321
+ rpc: {
1322
+ type: "string",
1323
+ minLength: 1
1324
+ }
1325
+ }
1326
+ },
1327
+ {
1328
+ type: "object",
1329
+ required: [
1330
+ "plane",
1331
+ "kind",
1332
+ "entity"
1333
+ ],
1334
+ additionalProperties: false,
1335
+ properties: {
1336
+ plane: {
1337
+ const: "server"
1338
+ },
1339
+ kind: {
1340
+ const: "entity_read"
1341
+ },
1342
+ entity: {
1343
+ type: "string",
1344
+ minLength: 1
1345
+ }
1346
+ }
1347
+ },
1348
+ {
1349
+ type: "object",
1350
+ required: [
1351
+ "plane"
1352
+ ],
1353
+ additionalProperties: false,
1354
+ properties: {
1355
+ plane: {
1356
+ const: "client"
1357
+ }
1358
+ }
1359
+ }
1360
+ ]
1361
+ },
1362
+ requiresConfirmation: {
1363
+ type: "boolean"
1364
+ },
1365
+ pluginId: {
1366
+ type: "string"
1367
+ },
1368
+ category: {
1369
+ type: "string"
1370
+ }
1371
+ }
1372
+ },
1373
+ rpcContract: {
1374
+ type: "object",
1375
+ required: [
1376
+ "name",
1377
+ "kind",
1378
+ "description"
1379
+ ],
1380
+ additionalProperties: false,
1381
+ properties: {
1382
+ name: {
1383
+ type: "string",
1384
+ minLength: 1,
1385
+ pattern: "^agent_[a-z0-9_]+$"
1386
+ },
1387
+ kind: {
1388
+ enum: [
1389
+ "read",
1390
+ "write"
1391
+ ]
1392
+ },
1393
+ description: {
1394
+ type: "string",
1395
+ minLength: 1
1396
+ },
1397
+ payloadSchema: {
1398
+ type: "object"
1399
+ },
1400
+ audits: {
1401
+ type: "boolean"
1402
+ }
694
1403
  }
695
1404
  }
696
1405
  }
@@ -723,7 +1432,7 @@ function renderApp(input, opts = {}) {
723
1432
  if (!surface) {
724
1433
  throw new Error(`Surface "${surfaceName}" not found in manifest.`);
725
1434
  }
726
- const Scaffold = chunk5X2VX3RQ_cjs.getScaffold(surface.scaffold);
1435
+ const Scaffold = chunkZOPJB5FN_cjs.getScaffold(surface.scaffold);
727
1436
  if (!Scaffold) {
728
1437
  throw new Error(
729
1438
  `Scaffold "${surface.scaffold}" is not registered. Import the package that provides it (e.g. @fayz-ai/saas or @fayz-ai/shop) before calling renderApp.`
@@ -793,275 +1502,283 @@ Object.defineProperty(exports, "assertPluginManifestContract", {
793
1502
  });
794
1503
  Object.defineProperty(exports, "FAYZ_CLOUD_PUBLISHABLE_KEY", {
795
1504
  enumerable: true,
796
- get: function () { return chunk54SRL7AJ_cjs.FAYZ_CLOUD_PUBLISHABLE_KEY; }
1505
+ get: function () { return chunkCYAWDW44_cjs.FAYZ_CLOUD_PUBLISHABLE_KEY; }
797
1506
  });
798
1507
  Object.defineProperty(exports, "FAYZ_CLOUD_URL", {
799
1508
  enumerable: true,
800
- get: function () { return chunk54SRL7AJ_cjs.FAYZ_CLOUD_URL; }
1509
+ get: function () { return chunkCYAWDW44_cjs.FAYZ_CLOUD_URL; }
801
1510
  });
802
1511
  Object.defineProperty(exports, "clearGlobalCache", {
803
1512
  enumerable: true,
804
- get: function () { return chunk54SRL7AJ_cjs.clearGlobalCache; }
1513
+ get: function () { return chunkCYAWDW44_cjs.clearGlobalCache; }
1514
+ });
1515
+ Object.defineProperty(exports, "countByTenant", {
1516
+ enumerable: true,
1517
+ get: function () { return chunkCYAWDW44_cjs.countByTenant; }
805
1518
  });
806
1519
  Object.defineProperty(exports, "createArchetypeProvider", {
807
1520
  enumerable: true,
808
- get: function () { return chunk54SRL7AJ_cjs.createArchetypeProvider; }
1521
+ get: function () { return chunkCYAWDW44_cjs.createArchetypeProvider; }
809
1522
  });
810
1523
  Object.defineProperty(exports, "createCacheStore", {
811
1524
  enumerable: true,
812
- get: function () { return chunk54SRL7AJ_cjs.createCacheStore; }
1525
+ get: function () { return chunkCYAWDW44_cjs.createCacheStore; }
813
1526
  });
814
1527
  Object.defineProperty(exports, "createFayzApiProvider", {
815
1528
  enumerable: true,
816
- get: function () { return chunk54SRL7AJ_cjs.createFayzApiProvider; }
1529
+ get: function () { return chunkCYAWDW44_cjs.createFayzApiProvider; }
817
1530
  });
818
1531
  Object.defineProperty(exports, "createMockProvider", {
819
1532
  enumerable: true,
820
- get: function () { return chunk54SRL7AJ_cjs.createMockProvider; }
1533
+ get: function () { return chunkCYAWDW44_cjs.createMockProvider; }
821
1534
  });
822
1535
  Object.defineProperty(exports, "createSupabaseProvider", {
823
1536
  enumerable: true,
824
- get: function () { return chunk54SRL7AJ_cjs.createSupabaseProvider; }
1537
+ get: function () { return chunkCYAWDW44_cjs.createSupabaseProvider; }
825
1538
  });
826
1539
  Object.defineProperty(exports, "getActiveTenantId", {
827
1540
  enumerable: true,
828
- get: function () { return chunk54SRL7AJ_cjs.getActiveTenantId; }
1541
+ get: function () { return chunkCYAWDW44_cjs.getActiveTenantId; }
829
1542
  });
830
1543
  Object.defineProperty(exports, "getFayzCloudClient", {
831
1544
  enumerable: true,
832
- get: function () { return chunk54SRL7AJ_cjs.getFayzCloudClient; }
1545
+ get: function () { return chunkCYAWDW44_cjs.getFayzCloudClient; }
833
1546
  });
834
1547
  Object.defineProperty(exports, "getSupabaseClientOptional", {
835
1548
  enumerable: true,
836
- get: function () { return chunk54SRL7AJ_cjs.getSupabaseClientOptional; }
1549
+ get: function () { return chunkCYAWDW44_cjs.getSupabaseClientOptional; }
837
1550
  });
838
1551
  Object.defineProperty(exports, "globalCache", {
839
1552
  enumerable: true,
840
- get: function () { return chunk54SRL7AJ_cjs.globalCache; }
1553
+ get: function () { return chunkCYAWDW44_cjs.globalCache; }
1554
+ });
1555
+ Object.defineProperty(exports, "invalidateCount", {
1556
+ enumerable: true,
1557
+ get: function () { return chunkCYAWDW44_cjs.invalidateCount; }
841
1558
  });
842
1559
  Object.defineProperty(exports, "resolveDataProvider", {
843
1560
  enumerable: true,
844
- get: function () { return chunk54SRL7AJ_cjs.resolveDataProvider; }
1561
+ get: function () { return chunkCYAWDW44_cjs.resolveDataProvider; }
845
1562
  });
846
1563
  Object.defineProperty(exports, "setActiveTenantId", {
847
1564
  enumerable: true,
848
- get: function () { return chunk54SRL7AJ_cjs.setActiveTenantId; }
1565
+ get: function () { return chunkCYAWDW44_cjs.setActiveTenantId; }
849
1566
  });
850
1567
  Object.defineProperty(exports, "setGlobalSupabaseClient", {
851
1568
  enumerable: true,
852
- get: function () { return chunk54SRL7AJ_cjs.setGlobalSupabaseClient; }
1569
+ get: function () { return chunkCYAWDW44_cjs.setGlobalSupabaseClient; }
853
1570
  });
854
1571
  Object.defineProperty(exports, "stableKey", {
855
1572
  enumerable: true,
856
- get: function () { return chunk54SRL7AJ_cjs.stableKey; }
1573
+ get: function () { return chunkCYAWDW44_cjs.stableKey; }
857
1574
  });
858
1575
  Object.defineProperty(exports, "withCache", {
859
1576
  enumerable: true,
860
- get: function () { return chunk54SRL7AJ_cjs.withCache; }
1577
+ get: function () { return chunkCYAWDW44_cjs.withCache; }
861
1578
  });
862
1579
  Object.defineProperty(exports, "clearEntityRegistry", {
863
1580
  enumerable: true,
864
- get: function () { return chunk2NTHNWEH_cjs.clearEntityRegistry; }
1581
+ get: function () { return chunkUKU4RIWM_cjs.clearEntityRegistry; }
865
1582
  });
866
1583
  Object.defineProperty(exports, "deriveEntityKey", {
867
1584
  enumerable: true,
868
- get: function () { return chunk2NTHNWEH_cjs.deriveEntityKey; }
1585
+ get: function () { return chunkUKU4RIWM_cjs.deriveEntityKey; }
869
1586
  });
870
1587
  Object.defineProperty(exports, "getAllEntities", {
871
1588
  enumerable: true,
872
- get: function () { return chunk2NTHNWEH_cjs.getAllEntities; }
1589
+ get: function () { return chunkUKU4RIWM_cjs.getAllEntities; }
873
1590
  });
874
1591
  Object.defineProperty(exports, "getEntityByKey", {
875
1592
  enumerable: true,
876
- get: function () { return chunk2NTHNWEH_cjs.getEntityByKey; }
1593
+ get: function () { return chunkUKU4RIWM_cjs.getEntityByKey; }
877
1594
  });
878
1595
  Object.defineProperty(exports, "registerEntity", {
879
1596
  enumerable: true,
880
- get: function () { return chunk2NTHNWEH_cjs.registerEntity; }
1597
+ get: function () { return chunkUKU4RIWM_cjs.registerEntity; }
881
1598
  });
882
1599
  Object.defineProperty(exports, "PLUGIN_API_VERSION", {
883
1600
  enumerable: true,
884
- get: function () { return chunk5X2VX3RQ_cjs.PLUGIN_API_VERSION; }
1601
+ get: function () { return chunkZOPJB5FN_cjs.PLUGIN_API_VERSION; }
885
1602
  });
886
1603
  Object.defineProperty(exports, "PluginRuntimeProvider", {
887
1604
  enumerable: true,
888
- get: function () { return chunk5X2VX3RQ_cjs.PluginRuntimeProvider; }
1605
+ get: function () { return chunkZOPJB5FN_cjs.PluginRuntimeProvider; }
889
1606
  });
890
1607
  Object.defineProperty(exports, "Registry", {
891
1608
  enumerable: true,
892
- get: function () { return chunk5X2VX3RQ_cjs.Registry; }
1609
+ get: function () { return chunkZOPJB5FN_cjs.Registry; }
893
1610
  });
894
1611
  Object.defineProperty(exports, "blockRegistry", {
895
1612
  enumerable: true,
896
- get: function () { return chunk5X2VX3RQ_cjs.blockRegistry; }
1613
+ get: function () { return chunkZOPJB5FN_cjs.blockRegistry; }
897
1614
  });
898
1615
  Object.defineProperty(exports, "componentRegistry", {
899
1616
  enumerable: true,
900
- get: function () { return chunk5X2VX3RQ_cjs.componentRegistry; }
1617
+ get: function () { return chunkZOPJB5FN_cjs.componentRegistry; }
901
1618
  });
902
1619
  Object.defineProperty(exports, "definePlugin", {
903
1620
  enumerable: true,
904
- get: function () { return chunk5X2VX3RQ_cjs.definePlugin; }
1621
+ get: function () { return chunkZOPJB5FN_cjs.definePlugin; }
905
1622
  });
906
1623
  Object.defineProperty(exports, "getBlock", {
907
1624
  enumerable: true,
908
- get: function () { return chunk5X2VX3RQ_cjs.getBlock; }
1625
+ get: function () { return chunkZOPJB5FN_cjs.getBlock; }
909
1626
  });
910
1627
  Object.defineProperty(exports, "getComponent", {
911
1628
  enumerable: true,
912
- get: function () { return chunk5X2VX3RQ_cjs.getComponent; }
1629
+ get: function () { return chunkZOPJB5FN_cjs.getComponent; }
913
1630
  });
914
1631
  Object.defineProperty(exports, "getDashboardWidgets", {
915
1632
  enumerable: true,
916
- get: function () { return chunk5X2VX3RQ_cjs.getDashboardWidgets; }
1633
+ get: function () { return chunkZOPJB5FN_cjs.getDashboardWidgets; }
917
1634
  });
918
1635
  Object.defineProperty(exports, "getMetric", {
919
1636
  enumerable: true,
920
- get: function () { return chunk5X2VX3RQ_cjs.getMetric; }
1637
+ get: function () { return chunkZOPJB5FN_cjs.getMetric; }
921
1638
  });
922
1639
  Object.defineProperty(exports, "getPage", {
923
1640
  enumerable: true,
924
- get: function () { return chunk5X2VX3RQ_cjs.getPage; }
1641
+ get: function () { return chunkZOPJB5FN_cjs.getPage; }
925
1642
  });
926
1643
  Object.defineProperty(exports, "getPlugin", {
927
1644
  enumerable: true,
928
- get: function () { return chunk5X2VX3RQ_cjs.getPlugin; }
1645
+ get: function () { return chunkZOPJB5FN_cjs.getPlugin; }
929
1646
  });
930
1647
  Object.defineProperty(exports, "getPluginFactory", {
931
1648
  enumerable: true,
932
- get: function () { return chunk5X2VX3RQ_cjs.getPluginFactory; }
1649
+ get: function () { return chunkZOPJB5FN_cjs.getPluginFactory; }
933
1650
  });
934
1651
  Object.defineProperty(exports, "getScaffold", {
935
1652
  enumerable: true,
936
- get: function () { return chunk5X2VX3RQ_cjs.getScaffold; }
1653
+ get: function () { return chunkZOPJB5FN_cjs.getScaffold; }
937
1654
  });
938
1655
  Object.defineProperty(exports, "getWidgetsForZone", {
939
1656
  enumerable: true,
940
- get: function () { return chunk5X2VX3RQ_cjs.getWidgetsForZone; }
1657
+ get: function () { return chunkZOPJB5FN_cjs.getWidgetsForZone; }
941
1658
  });
942
1659
  Object.defineProperty(exports, "isCustomId", {
943
1660
  enumerable: true,
944
- get: function () { return chunk5X2VX3RQ_cjs.isCustomId; }
1661
+ get: function () { return chunkZOPJB5FN_cjs.isCustomId; }
945
1662
  });
946
1663
  Object.defineProperty(exports, "listBlocks", {
947
1664
  enumerable: true,
948
- get: function () { return chunk5X2VX3RQ_cjs.listBlocks; }
1665
+ get: function () { return chunkZOPJB5FN_cjs.listBlocks; }
949
1666
  });
950
1667
  Object.defineProperty(exports, "listMetrics", {
951
1668
  enumerable: true,
952
- get: function () { return chunk5X2VX3RQ_cjs.listMetrics; }
1669
+ get: function () { return chunkZOPJB5FN_cjs.listMetrics; }
953
1670
  });
954
1671
  Object.defineProperty(exports, "listPluginFactories", {
955
1672
  enumerable: true,
956
- get: function () { return chunk5X2VX3RQ_cjs.listPluginFactories; }
1673
+ get: function () { return chunkZOPJB5FN_cjs.listPluginFactories; }
957
1674
  });
958
1675
  Object.defineProperty(exports, "listPlugins", {
959
1676
  enumerable: true,
960
- get: function () { return chunk5X2VX3RQ_cjs.listPlugins; }
1677
+ get: function () { return chunkZOPJB5FN_cjs.listPlugins; }
961
1678
  });
962
1679
  Object.defineProperty(exports, "metricRegistry", {
963
1680
  enumerable: true,
964
- get: function () { return chunk5X2VX3RQ_cjs.metricRegistry; }
1681
+ get: function () { return chunkZOPJB5FN_cjs.metricRegistry; }
965
1682
  });
966
1683
  Object.defineProperty(exports, "pageRegistry", {
967
1684
  enumerable: true,
968
- get: function () { return chunk5X2VX3RQ_cjs.pageRegistry; }
1685
+ get: function () { return chunkZOPJB5FN_cjs.pageRegistry; }
969
1686
  });
970
1687
  Object.defineProperty(exports, "pluginFactoryRegistry", {
971
1688
  enumerable: true,
972
- get: function () { return chunk5X2VX3RQ_cjs.pluginFactoryRegistry; }
1689
+ get: function () { return chunkZOPJB5FN_cjs.pluginFactoryRegistry; }
973
1690
  });
974
1691
  Object.defineProperty(exports, "pluginRegistry", {
975
1692
  enumerable: true,
976
- get: function () { return chunk5X2VX3RQ_cjs.pluginRegistry; }
1693
+ get: function () { return chunkZOPJB5FN_cjs.pluginRegistry; }
977
1694
  });
978
1695
  Object.defineProperty(exports, "registerBlock", {
979
1696
  enumerable: true,
980
- get: function () { return chunk5X2VX3RQ_cjs.registerBlock; }
1697
+ get: function () { return chunkZOPJB5FN_cjs.registerBlock; }
981
1698
  });
982
1699
  Object.defineProperty(exports, "registerComponent", {
983
1700
  enumerable: true,
984
- get: function () { return chunk5X2VX3RQ_cjs.registerComponent; }
1701
+ get: function () { return chunkZOPJB5FN_cjs.registerComponent; }
985
1702
  });
986
1703
  Object.defineProperty(exports, "registerMetric", {
987
1704
  enumerable: true,
988
- get: function () { return chunk5X2VX3RQ_cjs.registerMetric; }
1705
+ get: function () { return chunkZOPJB5FN_cjs.registerMetric; }
989
1706
  });
990
1707
  Object.defineProperty(exports, "registerPage", {
991
1708
  enumerable: true,
992
- get: function () { return chunk5X2VX3RQ_cjs.registerPage; }
1709
+ get: function () { return chunkZOPJB5FN_cjs.registerPage; }
993
1710
  });
994
1711
  Object.defineProperty(exports, "registerPlugin", {
995
1712
  enumerable: true,
996
- get: function () { return chunk5X2VX3RQ_cjs.registerPlugin; }
1713
+ get: function () { return chunkZOPJB5FN_cjs.registerPlugin; }
997
1714
  });
998
1715
  Object.defineProperty(exports, "registerPluginFactory", {
999
1716
  enumerable: true,
1000
- get: function () { return chunk5X2VX3RQ_cjs.registerPluginFactory; }
1717
+ get: function () { return chunkZOPJB5FN_cjs.registerPluginFactory; }
1001
1718
  });
1002
1719
  Object.defineProperty(exports, "registerScaffold", {
1003
1720
  enumerable: true,
1004
- get: function () { return chunk5X2VX3RQ_cjs.registerScaffold; }
1721
+ get: function () { return chunkZOPJB5FN_cjs.registerScaffold; }
1005
1722
  });
1006
1723
  Object.defineProperty(exports, "resolvePluginComponent", {
1007
1724
  enumerable: true,
1008
- get: function () { return chunk5X2VX3RQ_cjs.resolvePluginComponent; }
1725
+ get: function () { return chunkZOPJB5FN_cjs.resolvePluginComponent; }
1009
1726
  });
1010
1727
  Object.defineProperty(exports, "resolvePluginRuntime", {
1011
1728
  enumerable: true,
1012
- get: function () { return chunk5X2VX3RQ_cjs.resolvePluginRuntime; }
1729
+ get: function () { return chunkZOPJB5FN_cjs.resolvePluginRuntime; }
1013
1730
  });
1014
1731
  Object.defineProperty(exports, "scaffoldRegistry", {
1015
1732
  enumerable: true,
1016
- get: function () { return chunk5X2VX3RQ_cjs.scaffoldRegistry; }
1733
+ get: function () { return chunkZOPJB5FN_cjs.scaffoldRegistry; }
1017
1734
  });
1018
1735
  Object.defineProperty(exports, "useConnectorsForPlugin", {
1019
1736
  enumerable: true,
1020
- get: function () { return chunk5X2VX3RQ_cjs.useConnectorsForPlugin; }
1737
+ get: function () { return chunkZOPJB5FN_cjs.useConnectorsForPlugin; }
1021
1738
  });
1022
1739
  Object.defineProperty(exports, "usePluginRuntime", {
1023
1740
  enumerable: true,
1024
- get: function () { return chunk5X2VX3RQ_cjs.usePluginRuntime; }
1741
+ get: function () { return chunkZOPJB5FN_cjs.usePluginRuntime; }
1025
1742
  });
1026
1743
  Object.defineProperty(exports, "usePluginRuntimeOptional", {
1027
1744
  enumerable: true,
1028
- get: function () { return chunk5X2VX3RQ_cjs.usePluginRuntimeOptional; }
1745
+ get: function () { return chunkZOPJB5FN_cjs.usePluginRuntimeOptional; }
1029
1746
  });
1030
1747
  Object.defineProperty(exports, "I18nProvider", {
1031
1748
  enumerable: true,
1032
- get: function () { return chunkQR7U2URY_cjs.I18nProvider; }
1749
+ get: function () { return chunkSO3VUKGZ_cjs.I18nProvider; }
1033
1750
  });
1034
1751
  Object.defineProperty(exports, "coreTranslations", {
1035
1752
  enumerable: true,
1036
- get: function () { return chunkQR7U2URY_cjs.coreTranslations; }
1753
+ get: function () { return chunkSO3VUKGZ_cjs.coreTranslations; }
1037
1754
  });
1038
1755
  Object.defineProperty(exports, "getCurrentLocale", {
1039
1756
  enumerable: true,
1040
- get: function () { return chunkQR7U2URY_cjs.getCurrentLocale; }
1757
+ get: function () { return chunkSO3VUKGZ_cjs.getCurrentLocale; }
1041
1758
  });
1042
1759
  Object.defineProperty(exports, "mergeTranslations", {
1043
1760
  enumerable: true,
1044
- get: function () { return chunkQR7U2URY_cjs.mergeTranslations; }
1761
+ get: function () { return chunkSO3VUKGZ_cjs.mergeTranslations; }
1045
1762
  });
1046
1763
  Object.defineProperty(exports, "registerTranslations", {
1047
1764
  enumerable: true,
1048
- get: function () { return chunkQR7U2URY_cjs.registerTranslations; }
1765
+ get: function () { return chunkSO3VUKGZ_cjs.registerTranslations; }
1049
1766
  });
1050
1767
  Object.defineProperty(exports, "setCurrentLocale", {
1051
1768
  enumerable: true,
1052
- get: function () { return chunkQR7U2URY_cjs.setCurrentLocale; }
1769
+ get: function () { return chunkSO3VUKGZ_cjs.setCurrentLocale; }
1053
1770
  });
1054
1771
  Object.defineProperty(exports, "setLocaleStore", {
1055
1772
  enumerable: true,
1056
- get: function () { return chunkQR7U2URY_cjs.setLocaleStore; }
1773
+ get: function () { return chunkSO3VUKGZ_cjs.setLocaleStore; }
1057
1774
  });
1058
1775
  Object.defineProperty(exports, "useI18nConfig", {
1059
1776
  enumerable: true,
1060
- get: function () { return chunkQR7U2URY_cjs.useI18nConfig; }
1777
+ get: function () { return chunkSO3VUKGZ_cjs.useI18nConfig; }
1061
1778
  });
1062
1779
  Object.defineProperty(exports, "useTranslation", {
1063
1780
  enumerable: true,
1064
- get: function () { return chunkQR7U2URY_cjs.useTranslation; }
1781
+ get: function () { return chunkSO3VUKGZ_cjs.useTranslation; }
1065
1782
  });
1066
1783
  Object.defineProperty(exports, "hashRouterAdapter", {
1067
1784
  enumerable: true,
@@ -1090,8 +1807,11 @@ exports.appManifestSchema = app_manifest_schema_default;
1090
1807
  exports.applySeo = applySeo;
1091
1808
  exports.breadcrumbJsonLd = breadcrumbJsonLd;
1092
1809
  exports.buildCSV = buildCSV;
1810
+ exports.clearPostalCache = clearPostalCache;
1811
+ exports.computeContractHash = computeContractHash;
1093
1812
  exports.createEventBus = createEventBus;
1094
1813
  exports.createSafeDataProvider = createSafeDataProvider;
1814
+ exports.createViaCepProvider = createViaCepProvider;
1095
1815
  exports.defineApp = defineApp;
1096
1816
  exports.downloadCSV = downloadCSV;
1097
1817
  exports.eventBus = eventBus;
@@ -1099,13 +1819,18 @@ exports.exportCSV = exportCSV;
1099
1819
  exports.formatCurrency = formatCurrency;
1100
1820
  exports.formatDate = formatDate;
1101
1821
  exports.formatDateTime = formatDateTime;
1822
+ exports.formatPostalCode = formatPostalCode;
1102
1823
  exports.getActiveLocale = getActiveLocale;
1103
1824
  exports.getCountry = getCountry;
1104
1825
  exports.getDefaultCurrency = getDefaultCurrency;
1826
+ exports.getPostalLookupProvider = getPostalLookupProvider;
1827
+ exports.isValidPostalCode = isValidPostalCode;
1828
+ exports.lookupPostalCode = lookupPostalCode;
1105
1829
  exports.maskDigitCount = maskDigitCount;
1106
1830
  exports.maskPhone = maskPhone;
1107
1831
  exports.migrateManifest = migrateManifest;
1108
1832
  exports.navHistoryBack = navHistoryBack;
1833
+ exports.normalizePostalCode = normalizePostalCode;
1109
1834
  exports.organizationJsonLd = organizationJsonLd;
1110
1835
  exports.recordNavigation = recordNavigation;
1111
1836
  exports.registerManifestMigration = registerManifestMigration;
@@ -1113,7 +1838,10 @@ exports.renderApp = renderApp;
1113
1838
  exports.renderBlocks = renderBlocks;
1114
1839
  exports.routeModule = routeModule;
1115
1840
  exports.seoOrigin = seoOrigin;
1841
+ exports.serializeManifest = serializeManifest;
1842
+ exports.serializeManifestWithHash = serializeManifestWithHash;
1116
1843
  exports.setDefaultCurrency = setDefaultCurrency;
1844
+ exports.setPostalLookupProvider = setPostalLookupProvider;
1117
1845
  exports.unmaskPhone = unmaskPhone;
1118
1846
  exports.useManifest = useManifest;
1119
1847
  exports.useNavHistoryStore = useNavHistoryStore;