@keboola/api-client 1.0.0 → 2.0.0
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/ai/index.cjs +5 -201
- package/dist/ai/index.cjs.map +1 -1
- package/dist/ai/index.js +2 -201
- package/dist/ai/index.js.map +1 -1
- package/dist/assets/index.cjs +5 -180
- package/dist/assets/index.cjs.map +1 -1
- package/dist/assets/index.js +2 -180
- package/dist/assets/index.js.map +1 -1
- package/dist/chat/index.cjs +6 -422
- package/dist/chat/index.cjs.map +1 -1
- package/dist/chat/index.d.cts +1 -1
- package/dist/chat/index.d.ts +1 -1
- package/dist/chat/index.js +3 -422
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/suggestions.cjs +70 -152
- package/dist/chat/suggestions.cjs.map +1 -1
- package/dist/chat/suggestions.js +1 -138
- package/dist/chat/suggestions.js.map +1 -1
- package/dist/chat/types.d.cts +1 -1
- package/dist/chat/types.d.ts +1 -1
- package/dist/chunk-345V46LR.cjs +934 -0
- package/dist/chunk-345V46LR.cjs.map +1 -0
- package/dist/chunk-3B7L6MCG.js +189 -0
- package/dist/chunk-3B7L6MCG.js.map +1 -0
- package/dist/chunk-3T54WH4X.cjs +42 -0
- package/dist/chunk-3T54WH4X.cjs.map +1 -0
- package/dist/chunk-3Y6NK7TC.js +34 -0
- package/dist/chunk-3Y6NK7TC.js.map +1 -0
- package/dist/chunk-4N7XBMWP.js +930 -0
- package/dist/chunk-4N7XBMWP.js.map +1 -0
- package/dist/chunk-4RC5E3SL.js +140 -0
- package/dist/chunk-4RC5E3SL.js.map +1 -0
- package/dist/chunk-633QJMHH.cjs +73 -0
- package/dist/chunk-633QJMHH.cjs.map +1 -0
- package/dist/chunk-6RQDX6JY.cjs +132 -0
- package/dist/chunk-6RQDX6JY.cjs.map +1 -0
- package/dist/chunk-76AHKXLC.cjs +29 -0
- package/dist/chunk-76AHKXLC.cjs.map +1 -0
- package/dist/chunk-7FY6COWG.js +71 -0
- package/dist/chunk-7FY6COWG.js.map +1 -0
- package/dist/chunk-7J2R6XHB.js +3 -0
- package/dist/chunk-7J2R6XHB.js.map +1 -0
- package/dist/chunk-BGLICNTG.cjs +33 -0
- package/dist/chunk-BGLICNTG.cjs.map +1 -0
- package/dist/chunk-BR3SBEFE.cjs +182 -0
- package/dist/chunk-BR3SBEFE.cjs.map +1 -0
- package/dist/chunk-CVV4HROS.cjs +37 -0
- package/dist/chunk-CVV4HROS.cjs.map +1 -0
- package/dist/chunk-DCTDH77P.cjs +277 -0
- package/dist/chunk-DCTDH77P.cjs.map +1 -0
- package/dist/chunk-EBCZUGUX.js +35 -0
- package/dist/chunk-EBCZUGUX.js.map +1 -0
- package/dist/chunk-EY5LALX2.cjs +26 -0
- package/dist/chunk-EY5LALX2.cjs.map +1 -0
- package/dist/chunk-FBQHHAL5.js +40 -0
- package/dist/chunk-FBQHHAL5.js.map +1 -0
- package/dist/chunk-GF4XZK5N.cjs +43 -0
- package/dist/chunk-GF4XZK5N.cjs.map +1 -0
- package/dist/chunk-GNPQB3MT.js +27 -0
- package/dist/chunk-GNPQB3MT.js.map +1 -0
- package/dist/chunk-GO6SOMGL.js +181 -0
- package/dist/chunk-GO6SOMGL.js.map +1 -0
- package/dist/chunk-HCNNMUTR.cjs +36 -0
- package/dist/chunk-HCNNMUTR.cjs.map +1 -0
- package/dist/chunk-HPVTVQBJ.cjs +238 -0
- package/dist/chunk-HPVTVQBJ.cjs.map +1 -0
- package/dist/chunk-HYUGRMCY.cjs +247 -0
- package/dist/chunk-HYUGRMCY.cjs.map +1 -0
- package/dist/chunk-IJMQCOBC.js +34 -0
- package/dist/chunk-IJMQCOBC.js.map +1 -0
- package/dist/chunk-IY3VNVXD.cjs +183 -0
- package/dist/chunk-IY3VNVXD.cjs.map +1 -0
- package/dist/chunk-JKFIB6SQ.cjs +685 -0
- package/dist/chunk-JKFIB6SQ.cjs.map +1 -0
- package/dist/chunk-JLNOESHX.cjs +47 -0
- package/dist/chunk-JLNOESHX.cjs.map +1 -0
- package/dist/chunk-JURD5MC3.js +178 -0
- package/dist/chunk-JURD5MC3.js.map +1 -0
- package/dist/chunk-LV3ZWNDC.js +75 -0
- package/dist/chunk-LV3ZWNDC.js.map +1 -0
- package/dist/chunk-LZ6A6J2E.cjs +77 -0
- package/dist/chunk-LZ6A6J2E.cjs.map +1 -0
- package/dist/chunk-OKVYLO6C.js +108 -0
- package/dist/chunk-OKVYLO6C.js.map +1 -0
- package/dist/chunk-PD3LJYS2.js +218 -0
- package/dist/chunk-PD3LJYS2.js.map +1 -0
- package/dist/chunk-PV4HIVW2.js +130 -0
- package/dist/chunk-PV4HIVW2.js.map +1 -0
- package/dist/chunk-R7PD3BRA.js +261 -0
- package/dist/chunk-R7PD3BRA.js.map +1 -0
- package/dist/chunk-SAEG42HW.js +64 -0
- package/dist/chunk-SAEG42HW.js.map +1 -0
- package/dist/chunk-TIIRBQUA.cjs +110 -0
- package/dist/chunk-TIIRBQUA.cjs.map +1 -0
- package/dist/chunk-TXFQ4YIK.js +31 -0
- package/dist/chunk-TXFQ4YIK.js.map +1 -0
- package/dist/chunk-U5SE6W5M.cjs +158 -0
- package/dist/chunk-U5SE6W5M.cjs.map +1 -0
- package/dist/chunk-UABYNGBZ.js +39 -0
- package/dist/chunk-UABYNGBZ.js.map +1 -0
- package/dist/chunk-UXF53ZOV.js +220 -0
- package/dist/chunk-UXF53ZOV.js.map +1 -0
- package/dist/chunk-VAOCYA6B.js +20 -0
- package/dist/chunk-VAOCYA6B.js.map +1 -0
- package/dist/chunk-VS5PM7KL.js +45 -0
- package/dist/chunk-VS5PM7KL.js.map +1 -0
- package/dist/chunk-WQ7EZWBF.js +24 -0
- package/dist/chunk-WQ7EZWBF.js.map +1 -0
- package/dist/chunk-XPDEQND7.cjs +4 -0
- package/dist/chunk-XPDEQND7.cjs.map +1 -0
- package/dist/chunk-XUDMML5C.cjs +211 -0
- package/dist/chunk-XUDMML5C.cjs.map +1 -0
- package/dist/chunk-YPCD7M2N.cjs +22 -0
- package/dist/chunk-YPCD7M2N.cjs.map +1 -0
- package/dist/chunk-YUEYMIMI.cjs +67 -0
- package/dist/chunk-YUEYMIMI.cjs.map +1 -0
- package/dist/chunk-YXCVNX2Q.cjs +36 -0
- package/dist/chunk-YXCVNX2Q.cjs.map +1 -0
- package/dist/chunk-ZEMKE6DI.js +681 -0
- package/dist/chunk-ZEMKE6DI.js.map +1 -0
- package/dist/dataScience/index.cjs +8 -412
- package/dist/dataScience/index.cjs.map +1 -1
- package/dist/dataScience/index.js +2 -391
- package/dist/dataScience/index.js.map +1 -1
- package/dist/domain/permissions/index.cjs +131 -2
- package/dist/domain/permissions/index.cjs.map +1 -1
- package/dist/domain/permissions/index.d.cts +108 -2
- package/dist/domain/permissions/index.d.ts +108 -2
- package/dist/domain/permissions/index.js +106 -3
- package/dist/domain/permissions/index.js.map +1 -1
- package/dist/editor/index.cjs +5 -264
- package/dist/editor/index.cjs.map +1 -1
- package/dist/editor/index.js +2 -264
- package/dist/editor/index.js.map +1 -1
- package/dist/encryption/index.cjs +5 -190
- package/dist/encryption/index.cjs.map +1 -1
- package/dist/encryption/index.js +2 -190
- package/dist/encryption/index.js.map +1 -1
- package/dist/import/index.cjs +5 -196
- package/dist/import/index.cjs.map +1 -1
- package/dist/import/index.js +2 -196
- package/dist/import/index.js.map +1 -1
- package/dist/index.cjs +314 -3569
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2004 -105
- package/dist/index.d.ts +2004 -105
- package/dist/index.js +176 -3464
- package/dist/index.js.map +1 -1
- package/dist/management/index.cjs +10 -881
- package/dist/management/index.cjs.map +1 -1
- package/dist/management/index.js +3 -880
- package/dist/management/index.js.map +1 -1
- package/dist/metastore/index.cjs +5 -337
- package/dist/metastore/index.cjs.map +1 -1
- package/dist/metastore/index.js +2 -337
- package/dist/metastore/index.js.map +1 -1
- package/dist/oauth/index.cjs +5 -226
- package/dist/oauth/index.cjs.map +1 -1
- package/dist/oauth/index.js +2 -226
- package/dist/oauth/index.js.map +1 -1
- package/dist/project-Bzslbq4u.d.ts +16 -0
- package/dist/project-CYhB6rYN.d.cts +16 -0
- package/dist/queryService/index.cjs +5 -248
- package/dist/queryService/index.cjs.map +1 -1
- package/dist/queryService/index.js +2 -248
- package/dist/queryService/index.js.map +1 -1
- package/dist/queue/index.cjs +5 -190
- package/dist/queue/index.cjs.map +1 -1
- package/dist/queue/index.js +2 -190
- package/dist/queue/index.js.map +1 -1
- package/dist/sdk/configurations/index.d.cts +2 -12
- package/dist/sdk/configurations/index.d.ts +2 -12
- package/dist/sdk/storage/index.cjs +49 -248
- package/dist/sdk/storage/index.cjs.map +1 -1
- package/dist/sdk/storage/index.d.cts +2 -2
- package/dist/sdk/storage/index.d.ts +2 -2
- package/dist/sdk/storage/index.js +1 -240
- package/dist/sdk/storage/index.js.map +1 -1
- package/dist/sdk/tag/index.cjs +6 -203
- package/dist/sdk/tag/index.cjs.map +1 -1
- package/dist/sdk/tag/index.js +2 -206
- package/dist/sdk/tag/index.js.map +1 -1
- package/dist/status/index.cjs +6 -176
- package/dist/status/index.cjs.map +1 -1
- package/dist/status/index.js +3 -176
- package/dist/status/index.js.map +1 -1
- package/dist/status/types.cjs +2 -0
- package/dist/status/types.js +1 -1
- package/dist/storage/index.cjs +9 -1023
- package/dist/storage/index.cjs.map +1 -1
- package/dist/storage/index.d.cts +1 -1
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.js +3 -1023
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/types.d.cts +68 -5
- package/dist/storage/types.d.ts +68 -5
- package/dist/{storageClient-C8LDO4gr.d.ts → storageClient-BicsbzZy.d.ts} +7 -1
- package/dist/{storageClient-D05fdGHW.d.cts → storageClient-CmK1LPHr.d.cts} +7 -1
- package/dist/storageSdk-BZ7ZW6_h.d.cts +143 -0
- package/dist/storageSdk-DCcD68FQ.d.ts +143 -0
- package/dist/syncActions/index.cjs +5 -364
- package/dist/syncActions/index.cjs.map +1 -1
- package/dist/syncActions/index.js +2 -345
- package/dist/syncActions/index.js.map +1 -1
- package/dist/telemetry/index.cjs +5 -187
- package/dist/telemetry/index.cjs.map +1 -1
- package/dist/telemetry/index.js +2 -187
- package/dist/telemetry/index.js.map +1 -1
- package/dist/{types-DJ6nbNq5.d.cts → types-CNkgmuhe.d.cts} +1 -1
- package/dist/{types-BjrNNn5I.d.ts → types-DzwzVgyG.d.ts} +1 -1
- package/dist/vault/index.cjs +5 -219
- package/dist/vault/index.cjs.map +1 -1
- package/dist/vault/index.js +2 -219
- package/dist/vault/index.js.map +1 -1
- package/dist/verify/index.cjs +5 -184
- package/dist/verify/index.cjs.map +1 -1
- package/dist/verify/index.js +2 -184
- package/dist/verify/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/storageSdk-CX03lGn-.d.ts +0 -18
- package/dist/storageSdk-DZV4nB3o.d.cts +0 -18
package/dist/sdk/tag/index.js
CHANGED
|
@@ -1,208 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
items,
|
|
4
|
-
process,
|
|
5
|
-
concurrency = 2,
|
|
6
|
-
middlewares = []
|
|
7
|
-
}) => {
|
|
8
|
-
if (concurrency < 1) throw new Error("Concurrency must be greater than 0");
|
|
9
|
-
if (items.length === 0) return [];
|
|
10
|
-
if (concurrency === Infinity)
|
|
11
|
-
return Promise.all(items.map((item, index) => process(item, index, items.length)));
|
|
12
|
-
const n = items.length;
|
|
13
|
-
const results = new Array(n);
|
|
14
|
-
const processWithMiddlewares = middlewares.reduceRight(
|
|
15
|
-
(next, middleware) => middleware(next),
|
|
16
|
-
process
|
|
17
|
-
);
|
|
18
|
-
const queue = items.map((item, index) => async () => {
|
|
19
|
-
results[index] = await processWithMiddlewares(item, index, items.length);
|
|
20
|
-
});
|
|
21
|
-
const workers = Array.from(
|
|
22
|
-
{ length: Math.min(concurrency, items.length) },
|
|
23
|
-
async function processQueue() {
|
|
24
|
-
while (queue.length) {
|
|
25
|
-
await queue.shift()?.();
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
);
|
|
29
|
-
await Promise.all(workers);
|
|
30
|
-
return results;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
// src/utils/keboolaUID.ts
|
|
34
|
-
var KEBOOLA_OBJECT_ID_DELIMITER = "--";
|
|
35
|
-
var keboolaUID = {
|
|
36
|
-
serialize: (input) => {
|
|
37
|
-
if (input.uid === "")
|
|
38
|
-
throw new Error("Invalid Keboola Object ID: uid of an object cannot be empty");
|
|
39
|
-
return ["KID", input.projectId, input.type, input.uid].join(KEBOOLA_OBJECT_ID_DELIMITER);
|
|
40
|
-
},
|
|
41
|
-
deserialize: (input) => {
|
|
42
|
-
const [identifier, projectId, type, uid] = input.split(KEBOOLA_OBJECT_ID_DELIMITER);
|
|
43
|
-
if (identifier !== "KID" || !projectId || !type || !uid)
|
|
44
|
-
throw new Error("Invalid Keboola Object ID");
|
|
45
|
-
return {
|
|
46
|
-
projectId: Number(projectId),
|
|
47
|
-
type,
|
|
48
|
-
uid
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
// src/utils/generateUUID.ts
|
|
54
|
-
var generateUUID = () => crypto.randomUUID();
|
|
55
|
-
|
|
56
|
-
// src/sdks/tag/tagSdk.ts
|
|
57
|
-
var ObjectType = {
|
|
58
|
-
TAG: "tag",
|
|
59
|
-
TAG_BINDING: "tag-binding"
|
|
60
|
-
};
|
|
61
|
-
var createTagSdk = ({ metastoreClient }) => {
|
|
62
|
-
const _getTagMetaObjects = async (type, signal) => {
|
|
63
|
-
const response = await metastoreClient.repository.getMetaObjects(
|
|
64
|
-
{
|
|
65
|
-
objectType: type
|
|
66
|
-
},
|
|
67
|
-
signal
|
|
68
|
-
);
|
|
69
|
-
return response.data.map(({ attributes }) => attributes);
|
|
70
|
-
};
|
|
71
|
-
const _getAllTagBindingMapByTagId = async (signal) => {
|
|
72
|
-
const tagBindings = await _getTagMetaObjects(ObjectType.TAG_BINDING, signal);
|
|
73
|
-
return Object.groupBy(tagBindings, (binding) => binding.data.tagUUID);
|
|
74
|
-
};
|
|
75
|
-
const _getTagBindingMapByTagId = async (tagUUIDs, objectId, signal) => {
|
|
76
|
-
const tagBindingMapByTagId = await _getAllTagBindingMapByTagId(signal);
|
|
77
|
-
const objectUID = keboolaUID.serialize(objectId);
|
|
78
|
-
return tagUUIDs.reduce((acc, tagUUID) => {
|
|
79
|
-
if (acc[tagUUID]) return acc;
|
|
80
|
-
const tagBindings = tagBindingMapByTagId[tagUUID] ?? [];
|
|
81
|
-
acc[tagUUID] = tagBindings.find((binding) => binding.data.objectUID === objectUID) ?? null;
|
|
82
|
-
return acc;
|
|
83
|
-
}, {});
|
|
84
|
-
};
|
|
85
|
-
const _deleteTagBindings = async (tagBindings) => {
|
|
86
|
-
await concurrent({
|
|
87
|
-
items: tagBindings,
|
|
88
|
-
process: async (binding) => metastoreClient.repository.deleteMetaObject({
|
|
89
|
-
objectType: ObjectType.TAG_BINDING,
|
|
90
|
-
UUID: binding.uuid
|
|
91
|
-
}),
|
|
92
|
-
concurrency: 5
|
|
93
|
-
});
|
|
94
|
-
};
|
|
95
|
-
const getTags = async (signal) => {
|
|
96
|
-
const [tags, tagBindingMapByTagId] = await Promise.all([
|
|
97
|
-
_getTagMetaObjects(ObjectType.TAG, signal),
|
|
98
|
-
_getAllTagBindingMapByTagId(signal)
|
|
99
|
-
]);
|
|
100
|
-
return tags.map((tag) => ({
|
|
101
|
-
tag,
|
|
102
|
-
bindings: tagBindingMapByTagId[tag.uuid] ?? []
|
|
103
|
-
}));
|
|
104
|
-
};
|
|
105
|
-
const getTagsByObjectId = async (objectId, signal) => {
|
|
106
|
-
const tags = await getTags(signal);
|
|
107
|
-
const keboolaObjectUID = keboolaUID.serialize(objectId);
|
|
108
|
-
const mapByTagId = tags.reduce((acc, { tag, bindings }) => {
|
|
109
|
-
acc[tag.uuid] = new Set(bindings.map((binding) => binding.data.objectUID));
|
|
110
|
-
return acc;
|
|
111
|
-
}, {});
|
|
112
|
-
return tags.filter(({ tag }) => mapByTagId[tag.uuid]?.has(keboolaObjectUID));
|
|
113
|
-
};
|
|
114
|
-
const createTag = async (data, meta = {}) => {
|
|
115
|
-
const {
|
|
116
|
-
data: { attributes: tag }
|
|
117
|
-
} = await metastoreClient.repository.createMetaObject({
|
|
118
|
-
objectType: ObjectType.TAG,
|
|
119
|
-
data,
|
|
120
|
-
name: generateUUID(),
|
|
121
|
-
...meta
|
|
122
|
-
});
|
|
123
|
-
return tag;
|
|
124
|
-
};
|
|
125
|
-
const updateTag = async (tagUUID, data, meta = {}) => {
|
|
126
|
-
const {
|
|
127
|
-
data: { attributes: tag }
|
|
128
|
-
} = await metastoreClient.repository.updateMetaObject({
|
|
129
|
-
objectType: ObjectType.TAG,
|
|
130
|
-
UUID: tagUUID,
|
|
131
|
-
data,
|
|
132
|
-
...meta
|
|
133
|
-
});
|
|
134
|
-
return tag;
|
|
135
|
-
};
|
|
136
|
-
const deleteTag = async (tagUUID) => {
|
|
137
|
-
const allBindings = await _getTagMetaObjects(ObjectType.TAG_BINDING);
|
|
138
|
-
const tagBindings = allBindings.filter(({ data }) => data.tagUUID === tagUUID);
|
|
139
|
-
await Promise.all([
|
|
140
|
-
// delete tag itself
|
|
141
|
-
metastoreClient.repository.deleteMetaObject({
|
|
142
|
-
objectType: ObjectType.TAG,
|
|
143
|
-
UUID: tagUUID
|
|
144
|
-
}),
|
|
145
|
-
// delete all tag associations
|
|
146
|
-
_deleteTagBindings(tagBindings)
|
|
147
|
-
]);
|
|
148
|
-
};
|
|
149
|
-
const assignTags = async (tagUUIDs, objectId, meta = {}) => {
|
|
150
|
-
const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectId);
|
|
151
|
-
const unassignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] === null);
|
|
152
|
-
await concurrent({
|
|
153
|
-
items: unassignedTagUUIDs,
|
|
154
|
-
process: async (tagUUID) => metastoreClient.repository.createMetaObject({
|
|
155
|
-
objectType: ObjectType.TAG_BINDING,
|
|
156
|
-
data: {
|
|
157
|
-
objectUID: keboolaUID.serialize(objectId),
|
|
158
|
-
tagUUID
|
|
159
|
-
},
|
|
160
|
-
name: generateUUID(),
|
|
161
|
-
...meta
|
|
162
|
-
}),
|
|
163
|
-
concurrency: 5
|
|
164
|
-
});
|
|
165
|
-
};
|
|
166
|
-
const unassignTags = async (tagUUIDs, objectID) => {
|
|
167
|
-
const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectID);
|
|
168
|
-
const assignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] !== null);
|
|
169
|
-
const tagBindings = assignedTagUUIDs.map((tagUUID) => tagBindingMapByTagId[tagUUID]);
|
|
170
|
-
await concurrent({
|
|
171
|
-
items: tagBindings,
|
|
172
|
-
process: async (tagBinding) => metastoreClient.repository.deleteMetaObject({
|
|
173
|
-
objectType: ObjectType.TAG_BINDING,
|
|
174
|
-
UUID: tagBinding.uuid
|
|
175
|
-
}),
|
|
176
|
-
concurrency: 5
|
|
177
|
-
});
|
|
178
|
-
};
|
|
179
|
-
const unassignAllTags = async (objectID, signal) => {
|
|
180
|
-
const tagBindings = await _getTagMetaObjects(ObjectType.TAG_BINDING, signal);
|
|
181
|
-
const objectsTagBindings = tagBindings.filter(
|
|
182
|
-
({ data }) => data.objectUID === keboolaUID.serialize(objectID)
|
|
183
|
-
);
|
|
184
|
-
await _deleteTagBindings(objectsTagBindings);
|
|
185
|
-
};
|
|
186
|
-
const createAndAssignTag = async (data, objectId, meta = {}) => {
|
|
187
|
-
const tag = await createTag(data, meta);
|
|
188
|
-
await assignTags([tag.uuid], objectId, meta);
|
|
189
|
-
return tag;
|
|
190
|
-
};
|
|
191
|
-
return {
|
|
192
|
-
// retrievals
|
|
193
|
-
getTags,
|
|
194
|
-
getTagsByObjectId,
|
|
195
|
-
// modifications
|
|
196
|
-
createTag,
|
|
197
|
-
updateTag,
|
|
198
|
-
deleteTag,
|
|
199
|
-
assignTags,
|
|
200
|
-
unassignTags,
|
|
201
|
-
unassignAllTags,
|
|
202
|
-
createAndAssignTag
|
|
203
|
-
};
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
export { createTagSdk };
|
|
1
|
+
export { createTagSdk } from '../../chunk-JURD5MC3.js';
|
|
2
|
+
import '../../chunk-EBCZUGUX.js';
|
|
207
3
|
//# sourceMappingURL=index.js.map
|
|
208
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/concurrent.ts","../../../src/utils/keboolaUID.ts","../../../src/utils/generateUUID.ts","../../../src/sdks/tag/tagSdk.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["type ProcessFn<T, R> = (item: T, index: number, arrayLength: number) => Promise<R>;\nexport type MiddlewareFn<T, R> = (next: ProcessFn<T, R>) => ProcessFn<T, R>;\n\nexport type ConcurrentOptions<T, R> = {\n items: T[];\n process: ProcessFn<T, R>;\n concurrency?: number;\n middlewares?: MiddlewareFn<T, R>[];\n};\n\n/**\n * Executes an asynchronous callback function on an array of items, processing multiple items concurrently with a specified concurrency limit.\n * It behaves similarly to Promise.all(), failing on the first rejected promise.\n * The order of the results matches the order of the promises.\n * The API is the same as Bluebird.map().\n */\nexport const concurrent = async <T, R>({\n items,\n process,\n concurrency = 2,\n middlewares = [],\n}: ConcurrentOptions<T, R>): Promise<R[]> => {\n if (concurrency < 1) throw new Error('Concurrency must be greater than 0');\n if (items.length === 0) return [];\n if (concurrency === Infinity)\n return Promise.all(items.map((item, index) => process(item, index, items.length)));\n\n const n = items.length;\n const results: R[] = new Array(n);\n\n const processWithMiddlewares = middlewares.reduceRight(\n (next, middleware) => middleware(next),\n process,\n );\n\n const queue = items.map((item, index) => async () => {\n results[index] = await processWithMiddlewares(item, index, items.length);\n });\n\n const workers = Array.from(\n { length: Math.min(concurrency, items.length) },\n async function processQueue() {\n while (queue.length) {\n await queue.shift()?.();\n }\n },\n );\n\n await Promise.all(workers);\n return results;\n};\n","type KeboolaObjectType =\n | 'data-catalog'\n | 'table'\n | 'bucket'\n | 'flow'\n | 'configuration'\n | 'transformation'\n | 'data-app'\n | 'workspace';\n\nexport type KeboolaObjectId = {\n uid: string;\n type: KeboolaObjectType;\n projectId: number;\n};\n\n//As a delimiter for serialization, we use a double hyphen (--) instead of a single hyphen in type names.\nconst KEBOOLA_OBJECT_ID_DELIMITER = '--';\n\n/**\n * There is a proposal for a string format to identify objects in Keboola.\n *\n * https://keboola.atlassian.net/wiki/spaces/ENGG/pages/3967615431/Keboola+UUID+Format\n * Unfortunately, this format will not pass BE validation as `:` is not allowed in the `uid`, and the length is limited to 50 characters only.\n *\n */\nexport const keboolaUID = {\n serialize: (input: KeboolaObjectId): string => {\n if (input.uid === '')\n throw new Error('Invalid Keboola Object ID: uid of an object cannot be empty');\n\n return ['KID', input.projectId, input.type, input.uid].join(KEBOOLA_OBJECT_ID_DELIMITER);\n },\n\n deserialize: (input: string): KeboolaObjectId => {\n const [identifier, projectId, type, uid] = input.split(KEBOOLA_OBJECT_ID_DELIMITER);\n if (identifier !== 'KID' || !projectId || !type || !uid)\n throw new Error('Invalid Keboola Object ID');\n\n return {\n projectId: Number(projectId),\n type: type as KeboolaObjectType,\n uid,\n };\n },\n};\n","export const generateUUID = () => crypto.randomUUID();\n","import type { MetaObject } from '../../clients/metastore/repository/types';\nimport { concurrent, generateUUID, type KeboolaObjectId, keboolaUID } from '../../utils';\n\nimport type {\n CreateMetaObjectMetaDataInput,\n MetastoreClient,\n TagBindingData,\n TagData,\n TagWithBindings,\n UpdateMetaObjectMetaDataInput,\n} from './types';\n\nconst ObjectType = {\n TAG: 'tag',\n TAG_BINDING: 'tag-binding',\n};\ntype ObjectTypes = (typeof ObjectType)[keyof typeof ObjectType];\n\ntype Options = {\n metastoreClient: MetastoreClient;\n};\n\nexport const createTagSdk = ({ metastoreClient }: Options) => {\n const _getTagMetaObjects = async <T extends Record<string, unknown>>(\n type: ObjectTypes,\n signal?: AbortSignal,\n ) => {\n const response = await metastoreClient.repository.getMetaObjects<T>(\n {\n objectType: type,\n },\n signal,\n );\n return response.data.map(({ attributes }) => attributes);\n };\n\n const _getAllTagBindingMapByTagId = async (signal?: AbortSignal) => {\n const tagBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING, signal);\n return Object.groupBy(tagBindings, (binding) => binding.data.tagUUID);\n };\n\n const _getTagBindingMapByTagId = async (\n tagUUIDs: string[],\n objectId: KeboolaObjectId,\n signal?: AbortSignal,\n ) => {\n const tagBindingMapByTagId = await _getAllTagBindingMapByTagId(signal);\n const objectUID = keboolaUID.serialize(objectId);\n return tagUUIDs.reduce<Record<string, MetaObject<TagBindingData> | null>>((acc, tagUUID) => {\n if (acc[tagUUID]) return acc; // filter out duplicated ids\n\n const tagBindings = tagBindingMapByTagId[tagUUID] ?? [];\n acc[tagUUID] = tagBindings.find((binding) => binding.data.objectUID === objectUID) ?? null;\n return acc;\n }, {});\n };\n\n const _deleteTagBindings = async (tagBindings: MetaObject<TagBindingData>[]) => {\n await concurrent({\n items: tagBindings,\n process: async (binding) =>\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG_BINDING,\n UUID: binding.uuid!,\n }),\n concurrency: 5,\n });\n };\n\n const getTags = async (signal?: AbortSignal) => {\n const [tags, tagBindingMapByTagId] = await Promise.all([\n _getTagMetaObjects<TagData>(ObjectType.TAG, signal),\n _getAllTagBindingMapByTagId(signal),\n ]);\n\n return tags.map<TagWithBindings>((tag) => ({\n tag,\n bindings: tagBindingMapByTagId[tag.uuid!] ?? [],\n }));\n };\n\n const getTagsByObjectId = async (objectId: KeboolaObjectId, signal?: AbortSignal) => {\n const tags = await getTags(signal);\n\n const keboolaObjectUID = keboolaUID.serialize(objectId);\n const mapByTagId = tags.reduce<Record<string, Set<string>>>((acc, { tag, bindings }) => {\n acc[tag.uuid!] = new Set(bindings.map((binding) => binding.data.objectUID));\n return acc;\n }, {});\n\n return tags.filter(({ tag }) => mapByTagId[tag.uuid!]?.has(keboolaObjectUID));\n };\n\n const createTag = async (data: TagData, meta: CreateMetaObjectMetaDataInput = {}) => {\n const {\n data: { attributes: tag },\n } = await metastoreClient.repository.createMetaObject({\n objectType: ObjectType.TAG,\n data,\n name: generateUUID(),\n ...meta,\n });\n\n return tag;\n };\n\n const updateTag = async (\n tagUUID: string,\n data: TagData,\n meta: UpdateMetaObjectMetaDataInput = {},\n ) => {\n const {\n data: { attributes: tag },\n } = await metastoreClient.repository.updateMetaObject<TagData>({\n objectType: ObjectType.TAG,\n UUID: tagUUID,\n data,\n ...meta,\n });\n\n return tag;\n };\n\n const deleteTag = async (tagUUID: string) => {\n const allBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING);\n const tagBindings = allBindings.filter(({ data }) => data.tagUUID === tagUUID);\n\n await Promise.all([\n // delete tag itself\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG,\n UUID: tagUUID,\n }),\n // delete all tag associations\n _deleteTagBindings(tagBindings),\n ]);\n };\n\n const assignTags = async (\n tagUUIDs: string[],\n objectId: KeboolaObjectId,\n meta: CreateMetaObjectMetaDataInput = {},\n ) => {\n const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectId);\n // Assign only the unassigned tag IDs. Ignore the rest.\n const unassignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] === null);\n\n await concurrent({\n items: unassignedTagUUIDs,\n process: async (tagUUID) =>\n metastoreClient.repository.createMetaObject<TagBindingData>({\n objectType: ObjectType.TAG_BINDING,\n data: {\n objectUID: keboolaUID.serialize(objectId),\n tagUUID: tagUUID,\n },\n name: generateUUID(),\n ...meta,\n }),\n concurrency: 5,\n });\n };\n\n const unassignTags = async (tagUUIDs: string[], objectID: KeboolaObjectId) => {\n const tagBindingMapByTagId = await _getTagBindingMapByTagId(tagUUIDs, objectID);\n const assignedTagUUIDs = tagUUIDs.filter((tagUUID) => tagBindingMapByTagId[tagUUID] !== null);\n\n const tagBindings = assignedTagUUIDs.map((tagUUID) => tagBindingMapByTagId[tagUUID]!);\n\n await concurrent({\n items: tagBindings,\n process: async (tagBinding) =>\n metastoreClient.repository.deleteMetaObject({\n objectType: ObjectType.TAG_BINDING,\n UUID: tagBinding.uuid!,\n }),\n concurrency: 5,\n });\n };\n\n const unassignAllTags = async (objectID: KeboolaObjectId, signal?: AbortSignal) => {\n const tagBindings = await _getTagMetaObjects<TagBindingData>(ObjectType.TAG_BINDING, signal);\n\n const objectsTagBindings = tagBindings.filter(\n ({ data }) => data.objectUID === keboolaUID.serialize(objectID),\n );\n\n await _deleteTagBindings(objectsTagBindings);\n };\n\n const createAndAssignTag = async (\n data: TagData,\n objectId: KeboolaObjectId,\n meta: CreateMetaObjectMetaDataInput = {},\n ) => {\n const tag = await createTag(data, meta);\n await assignTags([tag.uuid!], objectId, meta);\n return tag;\n };\n\n return {\n // retrievals\n getTags,\n getTagsByObjectId,\n\n // modifications\n createTag,\n updateTag,\n deleteTag,\n assignTags,\n unassignTags,\n unassignAllTags,\n createAndAssignTag,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
package/dist/status/index.cjs
CHANGED
|
@@ -1,184 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkYPCD7M2N_cjs = require('../chunk-YPCD7M2N.cjs');
|
|
4
|
+
require('../chunk-XPDEQND7.cjs');
|
|
5
|
+
require('../chunk-HPVTVQBJ.cjs');
|
|
4
6
|
|
|
5
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
7
|
|
|
7
|
-
var qs__default = /*#__PURE__*/_interopDefault(qs);
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
request;
|
|
13
|
-
data;
|
|
14
|
-
constructor({ response, request, data }) {
|
|
15
|
-
super(response.statusText);
|
|
16
|
-
this.response = response;
|
|
17
|
-
this.request = request;
|
|
18
|
-
this.data = data;
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
// src/constants.ts
|
|
23
|
-
var HttpStatus = {
|
|
24
|
-
NO_CONTENT: 204};
|
|
25
|
-
|
|
26
|
-
// src/fetchClient/createFetchClient/utils.ts
|
|
27
|
-
var HttpHeader = {
|
|
28
|
-
CONTENT_TYPE: "content-type"};
|
|
29
|
-
var HttpContentType = {
|
|
30
|
-
JSON: "application/json"};
|
|
31
|
-
var defaultValidateStatus = ({ response }) => response.status >= 200 && response.status <= 299;
|
|
32
|
-
function removeUndefined(obj) {
|
|
33
|
-
const objCopy = { ...obj };
|
|
34
|
-
for (const [key, value] of Object.entries(objCopy)) {
|
|
35
|
-
if (value == null) delete objCopy[key];
|
|
36
|
-
}
|
|
37
|
-
return objCopy;
|
|
38
|
-
}
|
|
39
|
-
var parseData = async (response) => {
|
|
40
|
-
if (response.status === HttpStatus.NO_CONTENT) return null;
|
|
41
|
-
const contentType = response.headers.get(HttpHeader.CONTENT_TYPE);
|
|
42
|
-
if (contentType && contentType == HttpContentType.JSON) {
|
|
43
|
-
return response.json();
|
|
44
|
-
}
|
|
45
|
-
const text = await response.text();
|
|
46
|
-
try {
|
|
47
|
-
return JSON.parse(text);
|
|
48
|
-
} catch {
|
|
49
|
-
return text;
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
var cleanHeadersInit = (headersInit) => {
|
|
53
|
-
if (Array.isArray(headersInit)) return headersInit;
|
|
54
|
-
if (headersInit instanceof Headers) return headersInit;
|
|
55
|
-
if (headersInit == null) return headersInit;
|
|
56
|
-
return removeUndefined(headersInit);
|
|
57
|
-
};
|
|
58
|
-
var createHeaders = (headersInitA, headersInitB) => {
|
|
59
|
-
const headersA = new Headers(cleanHeadersInit(headersInitA));
|
|
60
|
-
const headersB = new Headers(cleanHeadersInit(headersInitB));
|
|
61
|
-
headersB.forEach((value, key) => {
|
|
62
|
-
headersA.set(key, value);
|
|
63
|
-
});
|
|
64
|
-
return headersA;
|
|
65
|
-
};
|
|
66
|
-
var createPath = (path, pathParam = {}) => path.replace(/\{([^}]+)}/g, (_, key) => {
|
|
67
|
-
if (!(key in pathParam))
|
|
68
|
-
throw new Error(`Path parameter "${key}" is missing in the path "${path}"`);
|
|
69
|
-
return encodeURIComponent(pathParam[key]);
|
|
9
|
+
Object.defineProperty(exports, "createStatusClient", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
get: function () { return chunkYPCD7M2N_cjs.createStatusClient; }
|
|
70
12
|
});
|
|
71
|
-
var createSearch = (query, options = {}) => {
|
|
72
|
-
return qs__default.default.stringify(query, {
|
|
73
|
-
encodeValuesOnly: true,
|
|
74
|
-
skipNulls: true,
|
|
75
|
-
...options
|
|
76
|
-
});
|
|
77
|
-
};
|
|
78
|
-
var createBody = (body, headers) => {
|
|
79
|
-
if (body == null) return null;
|
|
80
|
-
if (body instanceof FormData) return body;
|
|
81
|
-
if (typeof body === "string") return body;
|
|
82
|
-
const stringifyBody = JSON.stringify(body);
|
|
83
|
-
const stringBody = stringifyBody === "{}" ? null : stringifyBody;
|
|
84
|
-
if (stringBody) headers.set(HttpHeader.CONTENT_TYPE, HttpContentType.JSON);
|
|
85
|
-
return stringBody;
|
|
86
|
-
};
|
|
87
|
-
var createFetchRequest = ({
|
|
88
|
-
url,
|
|
89
|
-
method,
|
|
90
|
-
params,
|
|
91
|
-
options = {},
|
|
92
|
-
defaultOptions
|
|
93
|
-
}) => {
|
|
94
|
-
const {
|
|
95
|
-
baseUrl,
|
|
96
|
-
validateStatus: defValidateStatus = defaultValidateStatus,
|
|
97
|
-
headers: defaultHeaders,
|
|
98
|
-
...restDefaultOptions
|
|
99
|
-
} = defaultOptions;
|
|
100
|
-
const { validateStatus, queryArrayFormat, headers: endpointHeaders, ...restOptions } = options;
|
|
101
|
-
const headers = createHeaders(defaultHeaders, endpointHeaders);
|
|
102
|
-
const path = createPath(url, params.path);
|
|
103
|
-
const search = createSearch(params.query ?? {}, { arrayFormat: queryArrayFormat });
|
|
104
|
-
const body = createBody(params.body, headers);
|
|
105
|
-
const urlInstance = new URL(baseUrl + path);
|
|
106
|
-
urlInstance.search = search;
|
|
107
|
-
const request = new Request(urlInstance, {
|
|
108
|
-
...restDefaultOptions,
|
|
109
|
-
...restOptions,
|
|
110
|
-
headers,
|
|
111
|
-
method: method.toUpperCase(),
|
|
112
|
-
body
|
|
113
|
-
});
|
|
114
|
-
return { request, validateStatus: validateStatus ?? defValidateStatus };
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
// src/fetchClient/createFetchClient/createFetchClient.ts
|
|
118
|
-
var isApiError = (error) => error instanceof ApiError;
|
|
119
|
-
var createCoreFetch = (fetchFn) => async ({ request, validateStatus }) => {
|
|
120
|
-
const response = await fetchFn(request);
|
|
121
|
-
const data = await parseData(response);
|
|
122
|
-
const apiResponse = {
|
|
123
|
-
request,
|
|
124
|
-
response,
|
|
125
|
-
data
|
|
126
|
-
};
|
|
127
|
-
const boolOrError = validateStatus(apiResponse);
|
|
128
|
-
if (isApiError(boolOrError)) throw boolOrError;
|
|
129
|
-
if (!boolOrError) throw new ApiError(apiResponse);
|
|
130
|
-
return apiResponse;
|
|
131
|
-
};
|
|
132
|
-
var createFetchClient = ({
|
|
133
|
-
middlewares = [],
|
|
134
|
-
...defaultOptions
|
|
135
|
-
}) => {
|
|
136
|
-
const coreFetch = createCoreFetch(defaultOptions.fetchFn ?? fetch);
|
|
137
|
-
const fetchWithMiddlewares = middlewares.reduceRight(
|
|
138
|
-
(next, middleware) => middleware(next),
|
|
139
|
-
coreFetch
|
|
140
|
-
);
|
|
141
|
-
const createFetchMethod = (method) => async (url, params, options = {}) => {
|
|
142
|
-
const request = createFetchRequest({
|
|
143
|
-
url,
|
|
144
|
-
method,
|
|
145
|
-
params,
|
|
146
|
-
defaultOptions,
|
|
147
|
-
options
|
|
148
|
-
});
|
|
149
|
-
const methodMiddlewares = options?.middlewares ?? [];
|
|
150
|
-
return methodMiddlewares.reduceRight(
|
|
151
|
-
(next, middleware) => middleware(next),
|
|
152
|
-
fetchWithMiddlewares
|
|
153
|
-
)(request);
|
|
154
|
-
};
|
|
155
|
-
return {
|
|
156
|
-
get: createFetchMethod("get"),
|
|
157
|
-
post: createFetchMethod("post"),
|
|
158
|
-
put: createFetchMethod("put"),
|
|
159
|
-
patch: createFetchMethod("patch"),
|
|
160
|
-
delete: createFetchMethod("delete")
|
|
161
|
-
};
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
// src/fetchClient/createGenericFetchClient.ts
|
|
165
|
-
var createGenericFetchClient = (defaultOptions) => createFetchClient(defaultOptions);
|
|
166
|
-
|
|
167
|
-
// src/clients/status/statusClient.ts
|
|
168
|
-
var createStatusClient = ({ baseUrl, middlewares }) => {
|
|
169
|
-
const client = createGenericFetchClient({
|
|
170
|
-
baseUrl,
|
|
171
|
-
middlewares
|
|
172
|
-
});
|
|
173
|
-
const getSummary = async (signal) => {
|
|
174
|
-
const { data } = await client.get("/summary.json", {}, { signal });
|
|
175
|
-
return data;
|
|
176
|
-
};
|
|
177
|
-
return {
|
|
178
|
-
getSummary
|
|
179
|
-
};
|
|
180
|
-
};
|
|
181
|
-
|
|
182
|
-
exports.createStatusClient = createStatusClient;
|
|
183
13
|
//# sourceMappingURL=index.cjs.map
|
|
184
14
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/errors/ApiError.ts","../../src/constants.ts","../../src/fetchClient/createFetchClient/utils.ts","../../src/fetchClient/createFetchClient/createFetchClient.ts","../../src/fetchClient/createGenericFetchClient.ts","../../src/clients/status/statusClient.ts"],"names":["qs"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ApiResponse } from '../fetchClient/createFetchClient/types';\n\nexport class ApiError extends Error {\n response: Response;\n request: Request;\n data: unknown;\n\n constructor({ response, request, data }: ApiResponse) {\n super(response.statusText);\n this.response = response;\n this.request = request;\n this.data = data;\n }\n}\n","export const KeboolaHttpHeader = {\n STORAGE_API_TOKEN: 'X-StorageApi-Token',\n MANAGEMENT_API_TOKEN: 'X-Kbc-Manageapitoken',\n STORAGE_API_URL: 'x-storageapi-url',\n};\n\nexport const HttpStatus = {\n NO_CONTENT: 204,\n BAD_REQUEST: 400,\n UNPROCESSABLE_ENTITY: 422,\n INTERNAL_SERVER_ERROR: 500,\n BAD_GATEWAY: 502,\n SERVICE_UNAVAILABLE: 503,\n GATEWAY_TIMEOUT: 504,\n} as const;\n\nexport const ENCRYPTED_VALUE_PREFIX = 'KBC::';\n","import type { IStringifyOptions } from 'qs';\nimport qs from 'qs';\n\nimport { HttpStatus } from '../../constants';\n\nimport type { BodyParam, CreateFetchRequestFn, PathParam, ValidateStatusFn } from './types';\n\nexport const HttpHeader = {\n CONTENT_TYPE: 'content-type',\n CONTENT_DISPOSITION: 'content-disposition',\n};\n\nexport const HttpContentType = {\n JSON: 'application/json',\n TEXT_PLAIN: 'text/plain',\n FORM_DATA: 'multipart/form-data',\n TEXT_HTML: 'text/html',\n};\n\nexport const defaultValidateStatus: ValidateStatusFn = ({ response }) =>\n response.status >= 200 && response.status <= 299;\n\nfunction removeUndefined(obj: Record<string, string>) {\n const objCopy = { ...obj };\n for (const [key, value] of Object.entries(objCopy)) {\n if (value == null) delete objCopy[key];\n }\n return objCopy;\n}\n\nexport const parseData = async (response: Response) => {\n if (response.status === HttpStatus.NO_CONTENT) return null;\n\n // headers indicates that the content is JSON, so parse it.\n const contentType = response.headers.get(HttpHeader.CONTENT_TYPE);\n if (contentType && contentType == HttpContentType.JSON) {\n return response.json();\n }\n\n // try JSON parsing on the text\n // If it fails, return the string. The headers does not have a content type.\n const text = await response.text();\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n};\n\n// Header instance serialize undefined value as `undefined`, we do not want that\nconst cleanHeadersInit = (headersInit: HeadersInit | undefined) => {\n if (Array.isArray(headersInit)) return headersInit;\n if (headersInit instanceof Headers) return headersInit;\n if (headersInit == null) return headersInit;\n\n return removeUndefined(headersInit);\n};\n\nconst createHeaders = (\n headersInitA: HeadersInit | undefined,\n headersInitB: HeadersInit | undefined,\n) => {\n const headersA = new Headers(cleanHeadersInit(headersInitA));\n const headersB = new Headers(cleanHeadersInit(headersInitB));\n\n headersB.forEach((value, key) => {\n headersA.set(key, value);\n });\n\n return headersA;\n};\n\nexport const createPath = (path: string, pathParam: PathParam = {}) =>\n path.replace(/\\{([^}]+)}/g, (_, key) => {\n if (!(key in pathParam))\n throw new Error(`Path parameter \"${key}\" is missing in the path \"${path}\"`);\n\n return encodeURIComponent(pathParam[key]!);\n });\n\nexport const createSearch = (\n query: Record<string, unknown>,\n options: Pick<IStringifyOptions, 'arrayFormat'> = {},\n) => {\n return qs.stringify(query, {\n encodeValuesOnly: true,\n skipNulls: true,\n ...options,\n });\n};\n\nexport const createBody = (body: BodyParam, headers: Headers) => {\n if (body == null) return null;\n if (body instanceof FormData) return body; // fetch automatically sets content-type header\n if (typeof body === 'string') return body; // fetch automatically sets content-type header\n\n const stringifyBody = JSON.stringify(body);\n const stringBody = stringifyBody === '{}' ? null : stringifyBody;\n if (stringBody) headers.set(HttpHeader.CONTENT_TYPE, HttpContentType.JSON);\n\n return stringBody;\n};\n\nexport const parseContentDispositionHeader = (contentDisposition?: string | null) => {\n // extract the type ('inline' or 'attachment'), default the type to 'unknown'\n const type = (() => {\n const typeMatch = contentDisposition?.match(/^\\s*(inline|attachment)\\s*;/i);\n return (typeMatch?.[1]?.toLowerCase() ?? 'unknown') as 'inline' | 'attachment' | 'unknown';\n })();\n\n // extract the filename, default the type to null\n const filename = (() => {\n const filenameMatch = contentDisposition?.match(/filename=\"([^\"]+)\"/i);\n if (filenameMatch) return filenameMatch[1];\n\n // If no filename=\"...\", check for encoded filename*=UTF-8''\n const encodedFilenameMatch = contentDisposition?.match(/filename\\*=(?:UTF-8'')?([^;]+)/i);\n if (encodedFilenameMatch?.[1]) return decodeURIComponent(encodedFilenameMatch[1]);\n\n // Check for unquoted filenames (rare but possible)\n const unquotedFilenameMatch = contentDisposition?.match(/filename=([^;]+)/i);\n return unquotedFilenameMatch?.[1] ?? null;\n })();\n\n // Return the parsed result\n return { type, filename };\n};\n\nexport const createFetchRequest: CreateFetchRequestFn = ({\n url,\n method,\n params,\n options = {},\n defaultOptions,\n}) => {\n const {\n baseUrl,\n validateStatus: defValidateStatus = defaultValidateStatus,\n headers: defaultHeaders,\n ...restDefaultOptions\n } = defaultOptions;\n const { validateStatus, queryArrayFormat, headers: endpointHeaders, ...restOptions } = options;\n\n const headers = createHeaders(defaultHeaders, endpointHeaders);\n const path = createPath(url, params.path);\n const search = createSearch(params.query ?? {}, { arrayFormat: queryArrayFormat });\n const body = createBody(params.body, headers);\n\n const urlInstance = new URL(baseUrl + path);\n urlInstance.search = search;\n\n const request = new Request(urlInstance, {\n ...restDefaultOptions,\n ...restOptions,\n headers,\n method: method.toUpperCase(),\n body,\n });\n\n return { request, validateStatus: validateStatus ?? defValidateStatus };\n};\n","import { ApiError } from '../../errors';\n\nimport type {\n BaseFetchParams,\n CoreFetchFn,\n CreateFetchClientOptions,\n FetchClientOptions,\n FetchFn,\n HttpMethod,\n} from './types';\nimport { createFetchRequest, parseData } from './utils';\n\nexport type FetchClientError = TypeError | ApiError | SyntaxError | DOMException;\n\nexport const isApiError = (error: unknown): error is ApiError => error instanceof ApiError;\n\nexport const isAbortError = (error: unknown): error is DOMException =>\n error instanceof DOMException && error.name === 'AbortError';\n\nexport const isFetchClientError = (error: unknown): error is FetchClientError =>\n error instanceof TypeError || error instanceof SyntaxError || isApiError(error);\n\nconst createCoreFetch =\n (fetchFn: FetchFn): CoreFetchFn =>\n async ({ request, validateStatus }) => {\n const response = await fetchFn(request);\n const data = await parseData(response);\n\n const apiResponse = {\n request,\n response,\n data,\n };\n\n const boolOrError = validateStatus(apiResponse);\n if (isApiError(boolOrError)) throw boolOrError;\n if (!boolOrError) throw new ApiError(apiResponse);\n\n return apiResponse;\n };\n\nexport const createFetchClient = ({\n middlewares = [],\n ...defaultOptions\n}: CreateFetchClientOptions) => {\n const coreFetch = createCoreFetch(defaultOptions.fetchFn ?? fetch);\n const fetchWithMiddlewares = middlewares.reduceRight(\n (next, middleware) => middleware(next),\n coreFetch,\n );\n\n const createFetchMethod =\n (method: HttpMethod) =>\n async (url: string, params: BaseFetchParams, options: FetchClientOptions = {}) => {\n const request = createFetchRequest({\n url,\n method,\n params,\n defaultOptions,\n options,\n });\n\n const methodMiddlewares = options?.middlewares ?? [];\n\n return methodMiddlewares.reduceRight(\n (next, middleware) => middleware(next),\n fetchWithMiddlewares,\n )(request);\n };\n\n return {\n get: createFetchMethod('get'),\n post: createFetchMethod('post'),\n put: createFetchMethod('put'),\n patch: createFetchMethod('patch'),\n delete: createFetchMethod('delete'),\n };\n};\n","import type {\n ApiResponse,\n BodyParam,\n CreateFetchClientOptions,\n FetchClientOptions,\n PathParam,\n QueryParam,\n} from './createFetchClient';\nimport { createFetchClient } from './createFetchClient';\n\ntype FetchParams<Path = PathParam, Query = QueryParam, Body = BodyParam> = {\n path?: Path;\n query?: Query;\n body?: Body;\n};\n\ntype FetchMethod = <Data, Path = PathParam, Query = QueryParam, Body = BodyParam>(\n url: string,\n params: FetchParams<Path, Query, Body>,\n options?: FetchClientOptions,\n) => Promise<ApiResponse<Data>>;\n\ntype FetchClient = {\n get: FetchMethod;\n post: FetchMethod;\n put: FetchMethod;\n patch: FetchMethod;\n delete: FetchMethod;\n};\n\nexport const createGenericFetchClient = (defaultOptions: CreateFetchClientOptions) =>\n createFetchClient(defaultOptions) as FetchClient;\n","import { createGenericFetchClient } from '../../fetchClient';\nimport type { ClientInitOptions } from '../types';\n\nimport type { StatusSummary } from './types';\n\nexport const createStatusClient = ({ baseUrl, middlewares }: ClientInitOptions) => {\n const client = createGenericFetchClient({\n baseUrl,\n middlewares,\n });\n\n const getSummary = async (signal?: AbortSignal) => {\n const { data } = await client.get<StatusSummary>('/summary.json', {}, { signal });\n return data;\n };\n\n return {\n getSummary,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
|
package/dist/status/index.js
CHANGED
|
@@ -1,178 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var ApiError = class extends Error {
|
|
5
|
-
response;
|
|
6
|
-
request;
|
|
7
|
-
data;
|
|
8
|
-
constructor({ response, request, data }) {
|
|
9
|
-
super(response.statusText);
|
|
10
|
-
this.response = response;
|
|
11
|
-
this.request = request;
|
|
12
|
-
this.data = data;
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
// src/constants.ts
|
|
17
|
-
var HttpStatus = {
|
|
18
|
-
NO_CONTENT: 204};
|
|
19
|
-
|
|
20
|
-
// src/fetchClient/createFetchClient/utils.ts
|
|
21
|
-
var HttpHeader = {
|
|
22
|
-
CONTENT_TYPE: "content-type"};
|
|
23
|
-
var HttpContentType = {
|
|
24
|
-
JSON: "application/json"};
|
|
25
|
-
var defaultValidateStatus = ({ response }) => response.status >= 200 && response.status <= 299;
|
|
26
|
-
function removeUndefined(obj) {
|
|
27
|
-
const objCopy = { ...obj };
|
|
28
|
-
for (const [key, value] of Object.entries(objCopy)) {
|
|
29
|
-
if (value == null) delete objCopy[key];
|
|
30
|
-
}
|
|
31
|
-
return objCopy;
|
|
32
|
-
}
|
|
33
|
-
var parseData = async (response) => {
|
|
34
|
-
if (response.status === HttpStatus.NO_CONTENT) return null;
|
|
35
|
-
const contentType = response.headers.get(HttpHeader.CONTENT_TYPE);
|
|
36
|
-
if (contentType && contentType == HttpContentType.JSON) {
|
|
37
|
-
return response.json();
|
|
38
|
-
}
|
|
39
|
-
const text = await response.text();
|
|
40
|
-
try {
|
|
41
|
-
return JSON.parse(text);
|
|
42
|
-
} catch {
|
|
43
|
-
return text;
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
var cleanHeadersInit = (headersInit) => {
|
|
47
|
-
if (Array.isArray(headersInit)) return headersInit;
|
|
48
|
-
if (headersInit instanceof Headers) return headersInit;
|
|
49
|
-
if (headersInit == null) return headersInit;
|
|
50
|
-
return removeUndefined(headersInit);
|
|
51
|
-
};
|
|
52
|
-
var createHeaders = (headersInitA, headersInitB) => {
|
|
53
|
-
const headersA = new Headers(cleanHeadersInit(headersInitA));
|
|
54
|
-
const headersB = new Headers(cleanHeadersInit(headersInitB));
|
|
55
|
-
headersB.forEach((value, key) => {
|
|
56
|
-
headersA.set(key, value);
|
|
57
|
-
});
|
|
58
|
-
return headersA;
|
|
59
|
-
};
|
|
60
|
-
var createPath = (path, pathParam = {}) => path.replace(/\{([^}]+)}/g, (_, key) => {
|
|
61
|
-
if (!(key in pathParam))
|
|
62
|
-
throw new Error(`Path parameter "${key}" is missing in the path "${path}"`);
|
|
63
|
-
return encodeURIComponent(pathParam[key]);
|
|
64
|
-
});
|
|
65
|
-
var createSearch = (query, options = {}) => {
|
|
66
|
-
return qs.stringify(query, {
|
|
67
|
-
encodeValuesOnly: true,
|
|
68
|
-
skipNulls: true,
|
|
69
|
-
...options
|
|
70
|
-
});
|
|
71
|
-
};
|
|
72
|
-
var createBody = (body, headers) => {
|
|
73
|
-
if (body == null) return null;
|
|
74
|
-
if (body instanceof FormData) return body;
|
|
75
|
-
if (typeof body === "string") return body;
|
|
76
|
-
const stringifyBody = JSON.stringify(body);
|
|
77
|
-
const stringBody = stringifyBody === "{}" ? null : stringifyBody;
|
|
78
|
-
if (stringBody) headers.set(HttpHeader.CONTENT_TYPE, HttpContentType.JSON);
|
|
79
|
-
return stringBody;
|
|
80
|
-
};
|
|
81
|
-
var createFetchRequest = ({
|
|
82
|
-
url,
|
|
83
|
-
method,
|
|
84
|
-
params,
|
|
85
|
-
options = {},
|
|
86
|
-
defaultOptions
|
|
87
|
-
}) => {
|
|
88
|
-
const {
|
|
89
|
-
baseUrl,
|
|
90
|
-
validateStatus: defValidateStatus = defaultValidateStatus,
|
|
91
|
-
headers: defaultHeaders,
|
|
92
|
-
...restDefaultOptions
|
|
93
|
-
} = defaultOptions;
|
|
94
|
-
const { validateStatus, queryArrayFormat, headers: endpointHeaders, ...restOptions } = options;
|
|
95
|
-
const headers = createHeaders(defaultHeaders, endpointHeaders);
|
|
96
|
-
const path = createPath(url, params.path);
|
|
97
|
-
const search = createSearch(params.query ?? {}, { arrayFormat: queryArrayFormat });
|
|
98
|
-
const body = createBody(params.body, headers);
|
|
99
|
-
const urlInstance = new URL(baseUrl + path);
|
|
100
|
-
urlInstance.search = search;
|
|
101
|
-
const request = new Request(urlInstance, {
|
|
102
|
-
...restDefaultOptions,
|
|
103
|
-
...restOptions,
|
|
104
|
-
headers,
|
|
105
|
-
method: method.toUpperCase(),
|
|
106
|
-
body
|
|
107
|
-
});
|
|
108
|
-
return { request, validateStatus: validateStatus ?? defValidateStatus };
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
// src/fetchClient/createFetchClient/createFetchClient.ts
|
|
112
|
-
var isApiError = (error) => error instanceof ApiError;
|
|
113
|
-
var createCoreFetch = (fetchFn) => async ({ request, validateStatus }) => {
|
|
114
|
-
const response = await fetchFn(request);
|
|
115
|
-
const data = await parseData(response);
|
|
116
|
-
const apiResponse = {
|
|
117
|
-
request,
|
|
118
|
-
response,
|
|
119
|
-
data
|
|
120
|
-
};
|
|
121
|
-
const boolOrError = validateStatus(apiResponse);
|
|
122
|
-
if (isApiError(boolOrError)) throw boolOrError;
|
|
123
|
-
if (!boolOrError) throw new ApiError(apiResponse);
|
|
124
|
-
return apiResponse;
|
|
125
|
-
};
|
|
126
|
-
var createFetchClient = ({
|
|
127
|
-
middlewares = [],
|
|
128
|
-
...defaultOptions
|
|
129
|
-
}) => {
|
|
130
|
-
const coreFetch = createCoreFetch(defaultOptions.fetchFn ?? fetch);
|
|
131
|
-
const fetchWithMiddlewares = middlewares.reduceRight(
|
|
132
|
-
(next, middleware) => middleware(next),
|
|
133
|
-
coreFetch
|
|
134
|
-
);
|
|
135
|
-
const createFetchMethod = (method) => async (url, params, options = {}) => {
|
|
136
|
-
const request = createFetchRequest({
|
|
137
|
-
url,
|
|
138
|
-
method,
|
|
139
|
-
params,
|
|
140
|
-
defaultOptions,
|
|
141
|
-
options
|
|
142
|
-
});
|
|
143
|
-
const methodMiddlewares = options?.middlewares ?? [];
|
|
144
|
-
return methodMiddlewares.reduceRight(
|
|
145
|
-
(next, middleware) => middleware(next),
|
|
146
|
-
fetchWithMiddlewares
|
|
147
|
-
)(request);
|
|
148
|
-
};
|
|
149
|
-
return {
|
|
150
|
-
get: createFetchMethod("get"),
|
|
151
|
-
post: createFetchMethod("post"),
|
|
152
|
-
put: createFetchMethod("put"),
|
|
153
|
-
patch: createFetchMethod("patch"),
|
|
154
|
-
delete: createFetchMethod("delete")
|
|
155
|
-
};
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
// src/fetchClient/createGenericFetchClient.ts
|
|
159
|
-
var createGenericFetchClient = (defaultOptions) => createFetchClient(defaultOptions);
|
|
160
|
-
|
|
161
|
-
// src/clients/status/statusClient.ts
|
|
162
|
-
var createStatusClient = ({ baseUrl, middlewares }) => {
|
|
163
|
-
const client = createGenericFetchClient({
|
|
164
|
-
baseUrl,
|
|
165
|
-
middlewares
|
|
166
|
-
});
|
|
167
|
-
const getSummary = async (signal) => {
|
|
168
|
-
const { data } = await client.get("/summary.json", {}, { signal });
|
|
169
|
-
return data;
|
|
170
|
-
};
|
|
171
|
-
return {
|
|
172
|
-
getSummary
|
|
173
|
-
};
|
|
174
|
-
};
|
|
175
|
-
|
|
176
|
-
export { createStatusClient };
|
|
1
|
+
export { createStatusClient } from '../chunk-VAOCYA6B.js';
|
|
2
|
+
import '../chunk-7J2R6XHB.js';
|
|
3
|
+
import '../chunk-PD3LJYS2.js';
|
|
177
4
|
//# sourceMappingURL=index.js.map
|
|
178
5
|
//# sourceMappingURL=index.js.map
|