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.cjs +210 -175
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +210 -175
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 = {
|