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