@foxtware/mineral 1.0.4 → 1.0.7
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/.creds.yml.sample +1 -0
- package/_build_scripts/createNewFunction.js +23 -41
- package/api/UTILS.md +1 -1
- package/api/bleckmann/bleckmannPickticketGet.js +4 -2
- package/api/github/githubActionsSecretCreateOrUpdate.js +139 -0
- package/api/github/githubActionsSecretPublicKeyGet.js +59 -0
- package/api/google/googlecalendarEventCreate.js +2 -0
- package/api/linear/linearTeamGet.js +6 -3
- package/api/shopify/shopify.constants.js +25 -0
- package/api/shopify/shopify.utils.js +41 -6
- package/api/shopify/shopifyInventoryQuantitiesSet.js +164 -0
- package/api/shopify/shopifyMutationDo.js +12 -6
- package/api/shopify/shopifyShopGet.js +68 -0
- package/api/shopify/shopifyStorefrontArticleGet.js +86 -0
- package/api/shopify/shopifyStorefrontArticlesGet.js +67 -0
- package/api/shopify/shopifyStorefrontBlogGet.js +110 -0
- package/api/shopify/shopifyStorefrontBlogsGet.js +66 -0
- package/api/shopify/shopifyStorefrontCartAttributesUpdate.js +87 -0
- package/api/shopify/shopifyStorefrontCartBuyerIdentityUpdate.js +87 -0
- package/api/shopify/shopifyStorefrontCartCreate.js +83 -0
- package/api/shopify/shopifyStorefrontCartDeliveryAddressesAdd.js +87 -0
- package/api/shopify/shopifyStorefrontCartDeliveryAddressesRemove.js +87 -0
- package/api/shopify/shopifyStorefrontCartDeliveryAddressesReplace.js +87 -0
- package/api/shopify/shopifyStorefrontCartDeliveryAddressesUpdate.js +87 -0
- package/api/shopify/shopifyStorefrontCartDiscountCodesUpdate.js +87 -0
- package/api/shopify/shopifyStorefrontCartGet.js +100 -0
- package/api/shopify/shopifyStorefrontCartGiftCardCodesAdd.js +87 -0
- package/api/shopify/shopifyStorefrontCartGiftCardCodesRemove.js +87 -0
- package/api/shopify/shopifyStorefrontCartGiftCardCodesUpdate.js +87 -0
- package/api/shopify/shopifyStorefrontCartLinesAdd.js +87 -0
- package/api/shopify/shopifyStorefrontCartLinesRemove.js +87 -0
- package/api/shopify/shopifyStorefrontCartLinesUpdate.js +87 -0
- package/api/shopify/shopifyStorefrontCartMetafieldDelete.js +69 -0
- package/api/shopify/shopifyStorefrontCartMetafieldsSet.js +80 -0
- package/api/shopify/shopifyStorefrontCartNoteUpdate.js +87 -0
- package/api/shopify/shopifyStorefrontCartSelectedDeliveryOptionsUpdate.js +87 -0
- package/api/shopify/shopifyStorefrontCollectionGet.js +92 -0
- package/api/shopify/shopifyStorefrontCollectionsGet.js +66 -0
- package/api/shopify/shopifyStorefrontCustomerAccessTokenCreate.js +75 -0
- package/api/shopify/shopifyStorefrontCustomerAccessTokenCreateWithMultipass.js +72 -0
- package/api/shopify/shopifyStorefrontCustomerAccessTokenDelete.js +67 -0
- package/api/shopify/shopifyStorefrontCustomerAccessTokenRenew.js +72 -0
- package/api/shopify/shopifyStorefrontCustomerActivate.js +98 -0
- package/api/shopify/shopifyStorefrontCustomerActivateByUrl.js +91 -0
- package/api/shopify/shopifyStorefrontCustomerAddressCreate.js +94 -0
- package/api/shopify/shopifyStorefrontCustomerAddressDelete.js +78 -0
- package/api/shopify/shopifyStorefrontCustomerAddressUpdate.js +101 -0
- package/api/shopify/shopifyStorefrontCustomerCreate.js +79 -0
- package/api/shopify/shopifyStorefrontCustomerDefaultAddressUpdate.js +89 -0
- package/api/shopify/shopifyStorefrontCustomerGet.js +92 -0
- package/api/shopify/shopifyStorefrontCustomerRecover.js +64 -0
- package/api/shopify/shopifyStorefrontCustomerReset.js +98 -0
- package/api/shopify/shopifyStorefrontCustomerResetByUrl.js +91 -0
- package/api/shopify/shopifyStorefrontCustomerUpdate.js +93 -0
- package/api/shopify/shopifyStorefrontGet.js +233 -0
- package/api/shopify/shopifyStorefrontLocalizationGet.js +98 -0
- package/api/shopify/shopifyStorefrontLocationsGet.js +70 -0
- package/api/shopify/shopifyStorefrontMenuGet.js +93 -0
- package/api/shopify/shopifyStorefrontMetaobjectGet.js +126 -0
- package/api/shopify/shopifyStorefrontMetaobjectsGet.js +73 -0
- package/api/shopify/shopifyStorefrontMutationDo.js +103 -0
- package/api/shopify/shopifyStorefrontNodeGet.js +90 -0
- package/api/shopify/shopifyStorefrontNodesGet.js +86 -0
- package/api/shopify/shopifyStorefrontPageGet.js +93 -0
- package/api/shopify/shopifyStorefrontPagesGet.js +66 -0
- package/api/shopify/shopifyStorefrontPaymentSettingsGet.js +79 -0
- package/api/shopify/shopifyStorefrontPredictiveSearch.js +138 -0
- package/api/shopify/shopifyStorefrontProductGet.js +94 -0
- package/api/shopify/shopifyStorefrontProductRecommendationsGet.js +112 -0
- package/api/shopify/shopifyStorefrontProductTagsGet.js +80 -0
- package/api/shopify/shopifyStorefrontProductTypesGet.js +80 -0
- package/api/shopify/shopifyStorefrontProductsGet.js +76 -0
- package/api/shopify/shopifyStorefrontPublicApiVersionsGet.js +75 -0
- package/api/shopify/shopifyStorefrontSearch.js +8 -2
- package/api/shopify/shopifyStorefrontShopGet.js +81 -0
- package/api/shopify/shopifyStorefrontShopPayPaymentRequestSessionCreate.js +91 -0
- package/api/shopify/shopifyStorefrontShopPayPaymentRequestSessionSubmit.js +95 -0
- package/api/shopify/shopifyStorefrontSitemapGet.js +98 -0
- package/api/shopify/shopifyStorefrontUrlRedirectsGet.js +67 -0
- package/api/slack/docs.md +4 -0
- package/api/slack/slack.utils.js +36 -2
- package/api/slack/slackMessagePost.js +11 -3
- package/api/slack/slackMessagesSearch.js +81 -0
- package/api/utils.js +47 -10
- package/hosting/deployFromHostingYml.js +9 -21
- package/package.json +3 -1
- package/server.utils.js +24 -15
package/api/utils.js
CHANGED
|
@@ -185,7 +185,13 @@ const xmlResponseParser = (parserOptions = {}) => {
|
|
|
185
185
|
};
|
|
186
186
|
|
|
187
187
|
const getResponseParser = (contentType) => {
|
|
188
|
-
if (contentType
|
|
188
|
+
if (!contentType) {
|
|
189
|
+
return async (res) => {
|
|
190
|
+
const text = await res.text();
|
|
191
|
+
return text || null;
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
if (contentType.includes('jsonl') || contentType.includes('ndjson')) return (res) => res.text();
|
|
189
195
|
if (contentType.includes('application/json')) return (res) => res.json();
|
|
190
196
|
if (contentType.includes('text/xml')) return xmlResponseParser();
|
|
191
197
|
if (contentType.includes('application/soap+xml')) return (res) => res.text();
|
|
@@ -851,7 +857,7 @@ class OperationQueue {
|
|
|
851
857
|
|
|
852
858
|
async run({
|
|
853
859
|
interval = false,
|
|
854
|
-
verbose =
|
|
860
|
+
verbose = !HOSTED,
|
|
855
861
|
inspect = false,
|
|
856
862
|
} = {}) {
|
|
857
863
|
|
|
@@ -1182,6 +1188,7 @@ class Processor extends EventEmitter {
|
|
|
1182
1188
|
}
|
|
1183
1189
|
}
|
|
1184
1190
|
|
|
1191
|
+
// TODO: verbose as option
|
|
1185
1192
|
class Getter extends EventEmitter {
|
|
1186
1193
|
constructor(
|
|
1187
1194
|
startingParams,
|
|
@@ -1277,7 +1284,7 @@ class Getter extends EventEmitter {
|
|
|
1277
1284
|
[done, paginatedParams] = await paginator(paginatedParams, response);
|
|
1278
1285
|
}
|
|
1279
1286
|
|
|
1280
|
-
console.log(`${ ifTextThenSpace(this.logFlavourText) }resultsCount`, resultsCount);
|
|
1287
|
+
!HOSTED && console.log(`${ ifTextThenSpace(this.logFlavourText) }resultsCount`, resultsCount);
|
|
1281
1288
|
this.emit('done');
|
|
1282
1289
|
|
|
1283
1290
|
if (returnAll) {
|
|
@@ -1392,10 +1399,11 @@ const objectMatchesPartial = (object, partial) => {
|
|
|
1392
1399
|
));
|
|
1393
1400
|
};
|
|
1394
1401
|
|
|
1395
|
-
const
|
|
1402
|
+
const oneFromManyResponse = (
|
|
1396
1403
|
response,
|
|
1397
|
-
|
|
1398
|
-
|
|
1404
|
+
{
|
|
1405
|
+
validator,
|
|
1406
|
+
} = {},
|
|
1399
1407
|
) => {
|
|
1400
1408
|
const {
|
|
1401
1409
|
ok,
|
|
@@ -1405,15 +1413,19 @@ const oneFromManyInResponse = (
|
|
|
1405
1413
|
if (!ok || !data) {
|
|
1406
1414
|
return response;
|
|
1407
1415
|
}
|
|
1416
|
+
|
|
1417
|
+
let candidates = data;
|
|
1408
1418
|
|
|
1409
|
-
|
|
1419
|
+
if (validator) {
|
|
1420
|
+
candidates = candidates.filter(validator);
|
|
1421
|
+
}
|
|
1410
1422
|
|
|
1411
1423
|
if (candidates.length === 0) {
|
|
1412
1424
|
return {
|
|
1413
1425
|
ok: true,
|
|
1414
1426
|
data: null,
|
|
1415
1427
|
meta: {
|
|
1416
|
-
message: `No
|
|
1428
|
+
message: `No ${ validator ? 'matching ' : '' }item found`,
|
|
1417
1429
|
},
|
|
1418
1430
|
};
|
|
1419
1431
|
}
|
|
@@ -1424,7 +1436,7 @@ const oneFromManyInResponse = (
|
|
|
1424
1436
|
ok: true,
|
|
1425
1437
|
data: null,
|
|
1426
1438
|
meta: {
|
|
1427
|
-
message: `Multiple
|
|
1439
|
+
message: `Multiple ${ validator ? 'matching ' : '' }items found`,
|
|
1428
1440
|
},
|
|
1429
1441
|
};
|
|
1430
1442
|
}
|
|
@@ -1571,6 +1583,30 @@ const arrayPartition = (array, partitioner) => {
|
|
|
1571
1583
|
return { passed, rejected };
|
|
1572
1584
|
};
|
|
1573
1585
|
|
|
1586
|
+
const truncateMiddle = (
|
|
1587
|
+
value,
|
|
1588
|
+
maxLength,
|
|
1589
|
+
{
|
|
1590
|
+
marker = '...',
|
|
1591
|
+
includeMarkerInLength = false,
|
|
1592
|
+
} = {},
|
|
1593
|
+
) => {
|
|
1594
|
+
const string = String(value ?? '');
|
|
1595
|
+
if (string.length <= maxLength) {
|
|
1596
|
+
return string;
|
|
1597
|
+
}
|
|
1598
|
+
|
|
1599
|
+
if (includeMarkerInLength && maxLength <= marker.length) {
|
|
1600
|
+
return marker.slice(0, maxLength);
|
|
1601
|
+
}
|
|
1602
|
+
|
|
1603
|
+
const available = includeMarkerInLength ? maxLength - marker.length : maxLength;
|
|
1604
|
+
const frontLength = Math.ceil(available / 2);
|
|
1605
|
+
const backLength = Math.floor(available / 2);
|
|
1606
|
+
|
|
1607
|
+
return `${ string.slice(0, frontLength) }${ marker }${ string.slice(string.length - backLength) }`;
|
|
1608
|
+
};
|
|
1609
|
+
|
|
1574
1610
|
module.exports = {
|
|
1575
1611
|
wait,
|
|
1576
1612
|
timeMs,
|
|
@@ -1612,7 +1648,7 @@ module.exports = {
|
|
|
1612
1648
|
valueProvided,
|
|
1613
1649
|
objectToArray,
|
|
1614
1650
|
objectMatchesPartial,
|
|
1615
|
-
|
|
1651
|
+
oneFromManyResponse,
|
|
1616
1652
|
surveyObject,
|
|
1617
1653
|
diffObjects,
|
|
1618
1654
|
objectPropsTranslate,
|
|
@@ -1620,4 +1656,5 @@ module.exports = {
|
|
|
1620
1656
|
deterministicArrayItem,
|
|
1621
1657
|
oneTrickProcessor,
|
|
1622
1658
|
arrayPartition,
|
|
1659
|
+
truncateMiddle,
|
|
1623
1660
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const readline = require('readline');
|
|
2
1
|
const { toAbsolutePath, setWorkspace, loadWorkspaceEnv } = require('../api/workspace');
|
|
2
|
+
const choicy = require('choicy');
|
|
3
3
|
const { getApiDirs, readCliFlag } = require('../cli');
|
|
4
4
|
const { loadHandlers } = require('../server');
|
|
5
5
|
const {
|
|
@@ -31,24 +31,6 @@ const getHostConfig = (options = {}) => ({
|
|
|
31
31
|
api_dirs: getApiDirs(options),
|
|
32
32
|
});
|
|
33
33
|
|
|
34
|
-
const chooseOption = async (prompt, options) => new Promise((resolve) => {
|
|
35
|
-
const rl = readline.createInterface({
|
|
36
|
-
input: process.stdin,
|
|
37
|
-
output: process.stdout,
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
console.log(prompt);
|
|
41
|
-
options.forEach((option, index) => {
|
|
42
|
-
console.log(` ${ index + 1 }. ${ option }`);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
rl.question('> ', (answer) => {
|
|
46
|
-
rl.close();
|
|
47
|
-
const choice = Number(answer) - 1;
|
|
48
|
-
resolve(options[choice] ?? options[0]);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
|
|
52
34
|
const getDeployArgs = () => {
|
|
53
35
|
const args = process.argv.slice(2);
|
|
54
36
|
const deployArgs = [];
|
|
@@ -257,7 +239,10 @@ const deployFromHostingYml = async (options = {}) => {
|
|
|
257
239
|
return;
|
|
258
240
|
}
|
|
259
241
|
|
|
260
|
-
const selectedGroup = await
|
|
242
|
+
const selectedGroup = await choicy(groupNames, {
|
|
243
|
+
question: 'Which group would you like to deploy?',
|
|
244
|
+
oneChoice: true,
|
|
245
|
+
});
|
|
261
246
|
for (const functionName of groups[selectedGroup] || []) {
|
|
262
247
|
await deployOne(functionName);
|
|
263
248
|
}
|
|
@@ -271,7 +256,10 @@ const deployFromHostingYml = async (options = {}) => {
|
|
|
271
256
|
return;
|
|
272
257
|
}
|
|
273
258
|
|
|
274
|
-
const selectedFunction = await
|
|
259
|
+
const selectedFunction = await choicy(functionNames, {
|
|
260
|
+
question: 'Which function would you like to deploy?',
|
|
261
|
+
oneChoice: true,
|
|
262
|
+
});
|
|
275
263
|
await deployOne(selectedFunction);
|
|
276
264
|
return;
|
|
277
265
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foxtware/mineral",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"bin": {
|
|
5
5
|
"mineral": "bin/mineral.js"
|
|
6
6
|
},
|
|
@@ -23,10 +23,12 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@supabase/supabase-js": "^2.55.0",
|
|
25
25
|
"@upstash/redis": "^1.28.4",
|
|
26
|
+
"choicy": "^1.1.1",
|
|
26
27
|
"csvtojson": "^2.0.14",
|
|
27
28
|
"dotenv": "^17.2.0",
|
|
28
29
|
"googleapis": "^165.0.0",
|
|
29
30
|
"json-2-csv": "^5.5.9",
|
|
31
|
+
"libsodium-wrappers": "^0.8.4",
|
|
30
32
|
"xml2js": "^0.6.2",
|
|
31
33
|
"yaml": "^2.9.0"
|
|
32
34
|
},
|
package/server.utils.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const { execFileSync } = require('child_process');
|
|
2
|
-
const { logDeep
|
|
2
|
+
const { logDeep } = require('./api/utils');
|
|
3
|
+
const choicy = require('choicy');
|
|
3
4
|
const { HOSTED } = require('./api/constants');
|
|
4
5
|
const { StringDecoder } = require('string_decoder');
|
|
5
6
|
|
|
@@ -368,17 +369,21 @@ const listenOrOfferKillPort = (server, port, onListening) => {
|
|
|
368
369
|
};
|
|
369
370
|
|
|
370
371
|
const askRecoveryQuestions = async () => {
|
|
371
|
-
const shouldFind = await
|
|
372
|
+
const shouldFind = await choicy(
|
|
373
|
+
[
|
|
374
|
+
{ title: 'Yes', value: true },
|
|
375
|
+
{ title: 'No', value: false },
|
|
376
|
+
],
|
|
377
|
+
{
|
|
378
|
+
question: 'Look up the process using it?',
|
|
379
|
+
oneChoice: true,
|
|
380
|
+
},
|
|
381
|
+
);
|
|
372
382
|
|
|
373
|
-
if (shouldFind
|
|
383
|
+
if (!shouldFind) {
|
|
374
384
|
return false;
|
|
375
385
|
}
|
|
376
386
|
|
|
377
|
-
if (shouldFind !== '') {
|
|
378
|
-
console.error('not a valid input');
|
|
379
|
-
exitServer(1);
|
|
380
|
-
}
|
|
381
|
-
|
|
382
387
|
const listeners = findPortListeners(port);
|
|
383
388
|
|
|
384
389
|
if (!listeners.length) {
|
|
@@ -388,17 +393,21 @@ const listenOrOfferKillPort = (server, port, onListening) => {
|
|
|
388
393
|
|
|
389
394
|
console.log('Port in use by:', formatPortListeners(listeners));
|
|
390
395
|
|
|
391
|
-
const shouldKill = await
|
|
396
|
+
const shouldKill = await choicy(
|
|
397
|
+
[
|
|
398
|
+
{ title: 'Yes', value: true },
|
|
399
|
+
{ title: 'No', value: false },
|
|
400
|
+
],
|
|
401
|
+
{
|
|
402
|
+
question: 'Kill it and retry?',
|
|
403
|
+
oneChoice: true,
|
|
404
|
+
},
|
|
405
|
+
);
|
|
392
406
|
|
|
393
|
-
if (shouldKill
|
|
407
|
+
if (!shouldKill) {
|
|
394
408
|
return false;
|
|
395
409
|
}
|
|
396
410
|
|
|
397
|
-
if (shouldKill !== '') {
|
|
398
|
-
console.error('not a valid input');
|
|
399
|
-
exitServer(1);
|
|
400
|
-
}
|
|
401
|
-
|
|
402
411
|
await killPortListeners(listeners);
|
|
403
412
|
return true;
|
|
404
413
|
};
|