arky-sdk 0.3.31 → 0.3.32

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.
package/dist/index.js CHANGED
@@ -530,6 +530,178 @@ var formatIdOrSlug = (id, apiConfig) => {
530
530
  return `${apiConfig.businessId}:${apiConfig.locale}:${id}`;
531
531
  };
532
532
 
533
+ // src/utils/blocks.ts
534
+ function getBlockLabel(block, locale = "en") {
535
+ if (!block) return "";
536
+ if (block.properties?.label) {
537
+ if (typeof block.properties.label === "object") {
538
+ return block.properties.label[locale] || block.properties.label.en || Object.values(block.properties.label)[0] || "";
539
+ }
540
+ if (typeof block.properties.label === "string") {
541
+ return block.properties.label;
542
+ }
543
+ }
544
+ return block.key?.replace(/_/g, " ").replace(/\b\w/g, (l) => l.toUpperCase()) || "";
545
+ }
546
+ function formatBlockValue(block) {
547
+ if (!block || block.value === null || block.value === void 0) {
548
+ return "";
549
+ }
550
+ switch (block.type) {
551
+ case "BOOLEAN":
552
+ return block.value ? "Yes" : "No";
553
+ case "NUMBER":
554
+ if (block.properties?.variant === "DATE" || block.properties?.variant === "DATE_TIME") {
555
+ try {
556
+ return new Date(block.value).toLocaleDateString();
557
+ } catch (e) {
558
+ return String(block.value);
559
+ }
560
+ }
561
+ return String(block.value);
562
+ case "RELATIONSHIP":
563
+ if (Array.isArray(block.value) && block.value.length > 0) {
564
+ const firstValue = block.value[0];
565
+ if (firstValue && firstValue.mimeType) {
566
+ return firstValue.name || firstValue.id || "Media";
567
+ }
568
+ return firstValue.title || firstValue.name || firstValue.id || "Entry";
569
+ }
570
+ return String(block.value);
571
+ default:
572
+ return String(block.value);
573
+ }
574
+ }
575
+ function prepareBlocksForSubmission(formData) {
576
+ const preparedBlocks = [];
577
+ Object.keys(formData).forEach((key) => {
578
+ if (formData[key] !== null && formData[key] !== void 0) {
579
+ preparedBlocks.push({
580
+ key,
581
+ value: [formData[key]]
582
+ });
583
+ }
584
+ });
585
+ return preparedBlocks;
586
+ }
587
+ function extractBlockValues(blocks) {
588
+ const values = {};
589
+ blocks.forEach((block) => {
590
+ if (block.value && block.value.length > 0) {
591
+ values[block.key] = block.value[0];
592
+ } else {
593
+ values[block.key] = null;
594
+ }
595
+ });
596
+ return values;
597
+ }
598
+ function getBlockTextValue(block, locale = "en") {
599
+ if (!block || !block.value || block.value.length === 0) return "";
600
+ const firstValue = block.value[0];
601
+ if (typeof firstValue === "object" && firstValue !== null) {
602
+ if (firstValue[locale]) return firstValue[locale];
603
+ if (firstValue.en) return firstValue.en;
604
+ const values = Object.values(firstValue);
605
+ return String(values[0] || "");
606
+ }
607
+ return String(firstValue);
608
+ }
609
+ var getBlockValue = (entry, blockKey) => {
610
+ if (!entry || !entry.blocks) return null;
611
+ const block = entry.blocks.find((f) => f.key === blockKey);
612
+ if (!block || !block.value || block.value.length === 0) return null;
613
+ return block.value[0];
614
+ };
615
+ var getBlockValues = (entry, blockKey) => {
616
+ if (!entry || !entry.blocks) return null;
617
+ const block = entry.blocks.find((f) => f.key === blockKey);
618
+ if (!block || !block.value || block.value.length === 0) return null;
619
+ return block.value;
620
+ };
621
+ function unwrapBlock(block, locale) {
622
+ if (!block?.type || block.value === void 0) return block;
623
+ if (block.type === "BLOCK") {
624
+ return block.value.map((obj) => {
625
+ const parsed = {};
626
+ for (const [k, v] of Object.entries(obj)) {
627
+ parsed[k] = unwrapBlock(v, locale);
628
+ }
629
+ return parsed;
630
+ });
631
+ }
632
+ const isLocalized = block.type === "TEXT";
633
+ const isList = block.properties?.ui === "list" || (block.properties?.maxValues ?? 1) > 1 || block.value.length > 1;
634
+ if (isList) {
635
+ return isLocalized ? block.value.map((v) => v[locale] || v["en"]) : [...block.value];
636
+ }
637
+ return isLocalized ? block.value[0][locale] || block.value[0]["en"] : block.value[0];
638
+ }
639
+ var getBlockObjectValues = (entry, blockKey, locale = "en") => {
640
+ if (!entry) {
641
+ return [];
642
+ }
643
+ const values = getBlockValues(entry, blockKey);
644
+ const parsed = values.map((obj) => {
645
+ const res = obj.value.reduce((acc, current) => {
646
+ acc[current.key] = unwrapBlock(current, locale);
647
+ return acc;
648
+ }, {});
649
+ return res;
650
+ });
651
+ return parsed;
652
+ };
653
+ var getBlockFromArray = (entry, blockKey, locale = "en") => {
654
+ if (!entry) {
655
+ return [];
656
+ }
657
+ const values = getBlockValues(entry, blockKey);
658
+ return values.reduce((acc, current) => {
659
+ acc[current.key] = unwrapBlock(current, locale);
660
+ return acc;
661
+ });
662
+ };
663
+ var getImageUrl = (imageBlock, isBlock = true, storageUrl = "https://storage.arky.io/dev") => {
664
+ if (!imageBlock) return null;
665
+ const isExternalUrl = (url) => {
666
+ return url.startsWith("http://") || url.startsWith("https://");
667
+ };
668
+ if (imageBlock.type === "RELATIONSHIP" && Array.isArray(imageBlock.value)) {
669
+ const mediaValue = imageBlock.value[0];
670
+ if (mediaValue && mediaValue.mimeType) {
671
+ if (mediaValue.resolutions && mediaValue.resolutions.original && mediaValue.resolutions.original.url) {
672
+ const url = mediaValue.resolutions.original.url;
673
+ return isExternalUrl(url) ? url : `${storageUrl}/${url}`;
674
+ }
675
+ if (mediaValue.url) {
676
+ return isExternalUrl(mediaValue.url) ? mediaValue.url : `${storageUrl}/${mediaValue.url}`;
677
+ }
678
+ }
679
+ return null;
680
+ }
681
+ if (isBlock) {
682
+ if (typeof imageBlock === "string") {
683
+ if (isExternalUrl(imageBlock)) {
684
+ return imageBlock;
685
+ }
686
+ return `${storageUrl}/${imageBlock}`;
687
+ }
688
+ if (imageBlock.url) {
689
+ if (isExternalUrl(imageBlock.url)) {
690
+ return imageBlock.url;
691
+ }
692
+ return `${storageUrl}/${imageBlock.url}`;
693
+ }
694
+ }
695
+ if (imageBlock.resolutions && imageBlock.resolutions.original && imageBlock.resolutions.original.url) {
696
+ const url = imageBlock.resolutions.original.url;
697
+ if (isExternalUrl(url)) {
698
+ return url;
699
+ }
700
+ return `${storageUrl}/${url}`;
701
+ }
702
+ return null;
703
+ };
704
+
533
705
  // src/api/cms.ts
534
706
  var createCmsApi = (apiConfig) => {
535
707
  return {
@@ -556,10 +728,23 @@ var createCmsApi = (apiConfig) => {
556
728
  },
557
729
  async getCollection(params, options) {
558
730
  const formattedId = formatIdOrSlug(params.id, apiConfig);
559
- return apiConfig.httpClient.get(
731
+ const response = await apiConfig.httpClient.get(
560
732
  `/v1/businesses/${apiConfig.businessId}/collections/${formattedId}`,
561
733
  options
562
734
  );
735
+ return {
736
+ ...response,
737
+ getBlock(key) {
738
+ return getBlockFromArray(response, key, apiConfig.locale);
739
+ },
740
+ getBlockValues(key) {
741
+ return getBlockObjectValues(response, key, apiConfig.locale);
742
+ },
743
+ getImage(key) {
744
+ const block = getBlockFromArray(response, key, apiConfig.locale);
745
+ return getImageUrl(block, true, apiConfig.storageUrl);
746
+ }
747
+ };
563
748
  },
564
749
  async getCollections(params, options) {
565
750
  return apiConfig.httpClient.get(
@@ -703,10 +888,21 @@ var createEshopApi = (apiConfig) => {
703
888
  },
704
889
  async getProduct(params, options) {
705
890
  const formattedId = formatIdOrSlug(params.id, apiConfig);
706
- return apiConfig.httpClient.get(
891
+ const response = await apiConfig.httpClient.get(
707
892
  `/v1/businesses/${apiConfig.businessId}/products/${formattedId}`,
708
893
  options
709
894
  );
895
+ return {
896
+ ...response,
897
+ getName() {
898
+ const locale = apiConfig.locale;
899
+ return response.name?.[locale] || response.name?.en || response.name || "";
900
+ },
901
+ getDescription() {
902
+ const locale = apiConfig.locale;
903
+ return response.description?.[locale] || response.description?.en || response.description || "";
904
+ }
905
+ };
710
906
  },
711
907
  async getProducts(params, options) {
712
908
  return apiConfig.httpClient.get(
@@ -903,10 +1099,21 @@ var createReservationApi = (apiConfig) => {
903
1099
  },
904
1100
  async getService(params, options) {
905
1101
  const formattedId = formatIdOrSlug(params.id, apiConfig);
906
- return apiConfig.httpClient.get(
1102
+ const response = await apiConfig.httpClient.get(
907
1103
  `/v1/businesses/${apiConfig.businessId}/services/${formattedId}`,
908
1104
  options
909
1105
  );
1106
+ return {
1107
+ ...response,
1108
+ getName() {
1109
+ const locale = apiConfig.locale;
1110
+ return response.name?.[locale] || response.name?.en || response.name || "";
1111
+ },
1112
+ getDescription() {
1113
+ const locale = apiConfig.locale;
1114
+ return response.description?.[locale] || response.description?.en || response.description || "";
1115
+ }
1116
+ };
910
1117
  },
911
1118
  async getServices(params, options) {
912
1119
  return apiConfig.httpClient.get(
@@ -1000,178 +1207,6 @@ var createPaymentApi = (apiConfig) => {
1000
1207
  };
1001
1208
  };
1002
1209
 
1003
- // src/utils/blocks.ts
1004
- function getBlockLabel(block, locale = "en") {
1005
- if (!block) return "";
1006
- if (block.properties?.label) {
1007
- if (typeof block.properties.label === "object") {
1008
- return block.properties.label[locale] || block.properties.label.en || Object.values(block.properties.label)[0] || "";
1009
- }
1010
- if (typeof block.properties.label === "string") {
1011
- return block.properties.label;
1012
- }
1013
- }
1014
- return block.key?.replace(/_/g, " ").replace(/\b\w/g, (l) => l.toUpperCase()) || "";
1015
- }
1016
- function formatBlockValue(block) {
1017
- if (!block || block.value === null || block.value === void 0) {
1018
- return "";
1019
- }
1020
- switch (block.type) {
1021
- case "BOOLEAN":
1022
- return block.value ? "Yes" : "No";
1023
- case "NUMBER":
1024
- if (block.properties?.variant === "DATE" || block.properties?.variant === "DATE_TIME") {
1025
- try {
1026
- return new Date(block.value).toLocaleDateString();
1027
- } catch (e) {
1028
- return String(block.value);
1029
- }
1030
- }
1031
- return String(block.value);
1032
- case "RELATIONSHIP":
1033
- if (Array.isArray(block.value) && block.value.length > 0) {
1034
- const firstValue = block.value[0];
1035
- if (firstValue && firstValue.mimeType) {
1036
- return firstValue.name || firstValue.id || "Media";
1037
- }
1038
- return firstValue.title || firstValue.name || firstValue.id || "Entry";
1039
- }
1040
- return String(block.value);
1041
- default:
1042
- return String(block.value);
1043
- }
1044
- }
1045
- function prepareBlocksForSubmission(formData) {
1046
- const preparedBlocks = [];
1047
- Object.keys(formData).forEach((key) => {
1048
- if (formData[key] !== null && formData[key] !== void 0) {
1049
- preparedBlocks.push({
1050
- key,
1051
- value: [formData[key]]
1052
- });
1053
- }
1054
- });
1055
- return preparedBlocks;
1056
- }
1057
- function extractBlockValues(blocks) {
1058
- const values = {};
1059
- blocks.forEach((block) => {
1060
- if (block.value && block.value.length > 0) {
1061
- values[block.key] = block.value[0];
1062
- } else {
1063
- values[block.key] = null;
1064
- }
1065
- });
1066
- return values;
1067
- }
1068
- function getBlockTextValue(block, locale = "en") {
1069
- if (!block || !block.value || block.value.length === 0) return "";
1070
- const firstValue = block.value[0];
1071
- if (typeof firstValue === "object" && firstValue !== null) {
1072
- if (firstValue[locale]) return firstValue[locale];
1073
- if (firstValue.en) return firstValue.en;
1074
- const values = Object.values(firstValue);
1075
- return String(values[0] || "");
1076
- }
1077
- return String(firstValue);
1078
- }
1079
- var getBlockValue = (entry, blockKey) => {
1080
- if (!entry || !entry.blocks) return null;
1081
- const block = entry.blocks.find((f) => f.key === blockKey);
1082
- if (!block || !block.value || block.value.length === 0) return null;
1083
- return block.value[0];
1084
- };
1085
- var getBlockValues = (entry, blockKey) => {
1086
- if (!entry || !entry.blocks) return null;
1087
- const block = entry.blocks.find((f) => f.key === blockKey);
1088
- if (!block || !block.value || block.value.length === 0) return null;
1089
- return block.value;
1090
- };
1091
- function unwrapBlock(block, locale) {
1092
- if (!block?.type || block.value === void 0) return block;
1093
- if (block.type === "BLOCK") {
1094
- return block.value.map((obj) => {
1095
- const parsed = {};
1096
- for (const [k, v] of Object.entries(obj)) {
1097
- parsed[k] = unwrapBlock(v, locale);
1098
- }
1099
- return parsed;
1100
- });
1101
- }
1102
- const isLocalized = block.type === "TEXT";
1103
- const isList = block.properties?.ui === "list" || (block.properties?.maxValues ?? 1) > 1 || block.value.length > 1;
1104
- if (isList) {
1105
- return isLocalized ? block.value.map((v) => v[locale] || v["en"]) : [...block.value];
1106
- }
1107
- return isLocalized ? block.value[0][locale] || block.value[0]["en"] : block.value[0];
1108
- }
1109
- var getBlockObjectValues = (entry, blockKey, locale = "en") => {
1110
- if (!entry) {
1111
- return [];
1112
- }
1113
- const values = getBlockValues(entry, blockKey);
1114
- const parsed = values.map((obj) => {
1115
- const res = obj.value.reduce((acc, current) => {
1116
- acc[current.key] = unwrapBlock(current, locale);
1117
- return acc;
1118
- }, {});
1119
- return res;
1120
- });
1121
- return parsed;
1122
- };
1123
- var getBlockFromArray = (entry, blockKey, locale = "en") => {
1124
- if (!entry) {
1125
- return [];
1126
- }
1127
- const values = getBlockValues(entry, blockKey);
1128
- return values.reduce((acc, current) => {
1129
- acc[current.key] = unwrapBlock(current, locale);
1130
- return acc;
1131
- });
1132
- };
1133
- var getImageUrl = (imageBlock, isBlock = true, storageUrl = "https://storage.arky.io/dev") => {
1134
- if (!imageBlock) return null;
1135
- const isExternalUrl = (url) => {
1136
- return url.startsWith("http://") || url.startsWith("https://");
1137
- };
1138
- if (imageBlock.type === "RELATIONSHIP" && Array.isArray(imageBlock.value)) {
1139
- const mediaValue = imageBlock.value[0];
1140
- if (mediaValue && mediaValue.mimeType) {
1141
- if (mediaValue.resolutions && mediaValue.resolutions.original && mediaValue.resolutions.original.url) {
1142
- const url = mediaValue.resolutions.original.url;
1143
- return isExternalUrl(url) ? url : `${storageUrl}/${url}`;
1144
- }
1145
- if (mediaValue.url) {
1146
- return isExternalUrl(mediaValue.url) ? mediaValue.url : `${storageUrl}/${mediaValue.url}`;
1147
- }
1148
- }
1149
- return null;
1150
- }
1151
- if (isBlock) {
1152
- if (typeof imageBlock === "string") {
1153
- if (isExternalUrl(imageBlock)) {
1154
- return imageBlock;
1155
- }
1156
- return `${storageUrl}/${imageBlock}`;
1157
- }
1158
- if (imageBlock.url) {
1159
- if (isExternalUrl(imageBlock.url)) {
1160
- return imageBlock.url;
1161
- }
1162
- return `${storageUrl}/${imageBlock.url}`;
1163
- }
1164
- }
1165
- if (imageBlock.resolutions && imageBlock.resolutions.original && imageBlock.resolutions.original.url) {
1166
- const url = imageBlock.resolutions.original.url;
1167
- if (isExternalUrl(url)) {
1168
- return url;
1169
- }
1170
- return `${storageUrl}/${url}`;
1171
- }
1172
- return null;
1173
- };
1174
-
1175
1210
  // src/utils/currency.ts
1176
1211
  function getCurrencySymbol(currency) {
1177
1212
  const currencySymbols = {