@wuapidev/cli 0.1.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/LICENSE +21 -0
- package/README.md +84 -0
- package/dist/args.d.ts +17 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +96 -0
- package/dist/args.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +7 -0
- package/dist/cli.js.map +1 -0
- package/dist/context.d.ts +45 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +120 -0
- package/dist/context.js.map +1 -0
- package/dist/credentials.d.ts +31 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +90 -0
- package/dist/credentials.js.map +1 -0
- package/dist/dialcodes.d.ts +5 -0
- package/dist/dialcodes.d.ts.map +1 -0
- package/dist/dialcodes.js +51 -0
- package/dist/dialcodes.js.map +1 -0
- package/dist/dispatch.d.ts +37 -0
- package/dist/dispatch.d.ts.map +1 -0
- package/dist/dispatch.js +225 -0
- package/dist/dispatch.js.map +1 -0
- package/dist/dotenv.d.ts +7 -0
- package/dist/dotenv.d.ts.map +1 -0
- package/dist/dotenv.js +67 -0
- package/dist/dotenv.js.map +1 -0
- package/dist/errors.d.ts +24 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +41 -0
- package/dist/errors.js.map +1 -0
- package/dist/files.d.ts +4 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +35 -0
- package/dist/files.js.map +1 -0
- package/dist/generated/operations.d.ts +3 -0
- package/dist/generated/operations.d.ts.map +1 -0
- package/dist/generated/operations.js +4462 -0
- package/dist/generated/operations.js.map +1 -0
- package/dist/help.d.ts +13 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +176 -0
- package/dist/help.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/io.d.ts +35 -0
- package/dist/io.d.ts.map +1 -0
- package/dist/io.js +103 -0
- package/dist/io.js.map +1 -0
- package/dist/link.d.ts +26 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +226 -0
- package/dist/link.js.map +1 -0
- package/dist/login.d.ts +30 -0
- package/dist/login.d.ts.map +1 -0
- package/dist/login.js +224 -0
- package/dist/login.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +88 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp.d.ts +3 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +127 -0
- package/dist/mcp.js.map +1 -0
- package/dist/operation.d.ts +32 -0
- package/dist/operation.d.ts.map +1 -0
- package/dist/operation.js +3 -0
- package/dist/operation.js.map +1 -0
- package/dist/paths.d.ts +12 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +27 -0
- package/dist/paths.js.map +1 -0
- package/dist/profiles.d.ts +6 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +119 -0
- package/dist/profiles.js.map +1 -0
- package/dist/qr.d.ts +19 -0
- package/dist/qr.d.ts.map +1 -0
- package/dist/qr.js +198 -0
- package/dist/qr.js.map +1 -0
- package/dist/send.d.ts +3 -0
- package/dist/send.d.ts.map +1 -0
- package/dist/send.js +73 -0
- package/dist/send.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Country calling code -> ISO 3166-1 alpha-2, to default `wuapi link
|
|
2
|
+
// --country` from `--phone`. Shared codes go to the largest country (+1: US,
|
|
3
|
+
// +7: RU, +44: GB, +61: AU); pass --country for the others.
|
|
4
|
+
const CODES = {
|
|
5
|
+
"1": "US", "7": "RU", "20": "EG", "27": "ZA", "30": "GR", "31": "NL", "32": "BE", "33": "FR", "34": "ES",
|
|
6
|
+
"36": "HU", "39": "IT", "40": "RO", "41": "CH", "43": "AT", "44": "GB", "45": "DK", "46": "SE", "47": "NO",
|
|
7
|
+
"48": "PL", "49": "DE", "51": "PE", "52": "MX", "53": "CU", "54": "AR", "55": "BR", "56": "CL", "57": "CO",
|
|
8
|
+
"58": "VE", "60": "MY", "61": "AU", "62": "ID", "63": "PH", "64": "NZ", "65": "SG", "66": "TH", "81": "JP",
|
|
9
|
+
"82": "KR", "84": "VN", "86": "CN", "90": "TR", "91": "IN", "92": "PK", "93": "AF", "94": "LK", "95": "MM",
|
|
10
|
+
"98": "IR", "211": "SS", "212": "MA", "213": "DZ", "216": "TN", "218": "LY", "220": "GM", "221": "SN",
|
|
11
|
+
"222": "MR", "223": "ML", "224": "GN", "225": "CI", "226": "BF", "227": "NE", "228": "TG", "229": "BJ",
|
|
12
|
+
"230": "MU", "231": "LR", "232": "SL", "233": "GH", "234": "NG", "235": "TD", "236": "CF", "237": "CM",
|
|
13
|
+
"238": "CV", "239": "ST", "240": "GQ", "241": "GA", "242": "CG", "243": "CD", "244": "AO", "245": "GW",
|
|
14
|
+
"248": "SC", "249": "SD", "250": "RW", "251": "ET", "252": "SO", "253": "DJ", "254": "KE", "255": "TZ",
|
|
15
|
+
"256": "UG", "257": "BI", "258": "MZ", "260": "ZM", "261": "MG", "262": "RE", "263": "ZW", "264": "NA",
|
|
16
|
+
"265": "MW", "266": "LS", "267": "BW", "268": "SZ", "269": "KM", "290": "SH", "291": "ER", "297": "AW",
|
|
17
|
+
"298": "FO", "299": "GL", "350": "GI", "351": "PT", "352": "LU", "353": "IE", "354": "IS", "355": "AL",
|
|
18
|
+
"356": "MT", "357": "CY", "358": "FI", "359": "BG", "370": "LT", "371": "LV", "372": "EE", "373": "MD",
|
|
19
|
+
"374": "AM", "375": "BY", "376": "AD", "377": "MC", "378": "SM", "380": "UA", "381": "RS", "382": "ME",
|
|
20
|
+
"383": "XK", "385": "HR", "386": "SI", "387": "BA", "389": "MK", "420": "CZ", "421": "SK", "423": "LI",
|
|
21
|
+
"500": "FK", "501": "BZ", "502": "GT", "503": "SV", "504": "HN", "505": "NI", "506": "CR", "507": "PA",
|
|
22
|
+
"508": "PM", "509": "HT", "590": "GP", "591": "BO", "592": "GY", "593": "EC", "594": "GF", "595": "PY",
|
|
23
|
+
"596": "MQ", "597": "SR", "598": "UY", "599": "CW", "670": "TL", "673": "BN", "674": "NR", "675": "PG",
|
|
24
|
+
"676": "TO", "677": "SB", "678": "VU", "679": "FJ", "680": "PW", "685": "WS", "686": "KI", "687": "NC",
|
|
25
|
+
"689": "PF", "691": "FM", "692": "MH", "852": "HK", "853": "MO", "855": "KH", "856": "LA", "880": "BD",
|
|
26
|
+
"886": "TW", "960": "MV", "961": "LB", "962": "JO", "963": "SY", "964": "IQ", "965": "KW", "966": "SA",
|
|
27
|
+
"967": "YE", "968": "OM", "970": "PS", "971": "AE", "972": "IL", "973": "BH", "974": "QA", "975": "BT",
|
|
28
|
+
"976": "MN", "977": "NP", "992": "TJ", "993": "TM", "994": "AZ", "995": "GE", "996": "KG", "998": "UZ",
|
|
29
|
+
// NANP members with their own area codes.
|
|
30
|
+
"1787": "PR", "1939": "PR", "1809": "DO", "1829": "DO", "1849": "DO", "1876": "JM", "1868": "TT",
|
|
31
|
+
"1246": "BB", "1242": "BS", "1441": "BM", "1345": "KY",
|
|
32
|
+
// Canada's area codes would be a long list: pass --country CA.
|
|
33
|
+
};
|
|
34
|
+
/** `+584121234567` -> `VE`. Undefined when the number does not start with a known code. */
|
|
35
|
+
export function countryFromPhone(phone) {
|
|
36
|
+
const digits = phone.replace(/[^\d]/g, "");
|
|
37
|
+
for (let len = 4; len >= 1; len--) {
|
|
38
|
+
const hit = CODES[digits.slice(0, len)];
|
|
39
|
+
if (hit)
|
|
40
|
+
return hit;
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
/** `+58 412-123 4567` -> `+584121234567`; undefined when it is not a phone number. */
|
|
45
|
+
export function normalizePhone(input) {
|
|
46
|
+
const trimmed = input.trim();
|
|
47
|
+
const digits = trimmed.replace(/[\s().-]/g, "");
|
|
48
|
+
const m = /^\+?(\d{7,15})$/.exec(digits.startsWith("00") ? `+${digits.slice(2)}` : digits);
|
|
49
|
+
return m ? `+${m[1]}` : undefined;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=dialcodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialcodes.js","sourceRoot":"","sources":["../src/dialcodes.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,6EAA6E;AAC7E,4DAA4D;AAE5D,MAAM,KAAK,GAA2B;IACpC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IACxG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1G,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACrG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI;IACtG,0CAA0C;IAC1C,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;IAChG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI;IACtD,+DAA+D;CAChE,CAAC;AAEF,2FAA2F;AAC3F,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC3C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACxC,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAChD,MAAM,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3F,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type Wuapi } from "@wuapidev/sdk";
|
|
2
|
+
import { type Parsed } from "./args.js";
|
|
3
|
+
import { type Ctx } from "./context.js";
|
|
4
|
+
import type { Operation } from "./operation.js";
|
|
5
|
+
/** `webhook-endpoints`, `webhookEndpoints`, `webhook_endpoints` -> `webhookendpoints`. */
|
|
6
|
+
export declare const norm: (s: string) => string;
|
|
7
|
+
/** `createPairingCode` -> `create-pairing-code`. */
|
|
8
|
+
export declare const kebab: (s: string) => string;
|
|
9
|
+
export declare const resourceName: (op: Operation) => string;
|
|
10
|
+
export declare const commandName: (op: Operation) => string;
|
|
11
|
+
export declare function usageLine(op: Operation): string;
|
|
12
|
+
/** Resource paths, e.g. `accounts`, `projects.apiKeys`. */
|
|
13
|
+
export declare function resources(): string[];
|
|
14
|
+
/**
|
|
15
|
+
* Finds the operation named by the leading positionals. Returns how many
|
|
16
|
+
* positionals it used, or the resource when only that matched.
|
|
17
|
+
*/
|
|
18
|
+
export declare function findOperation(positionals: string[]): {
|
|
19
|
+
op?: Operation;
|
|
20
|
+
used: number;
|
|
21
|
+
resource?: string[];
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* A flag value: JSON when it parses (numbers, booleans, arrays, objects),
|
|
25
|
+
* else the string, except where the spec says the field is a string (so
|
|
26
|
+
* `--chatId 5841...` stays a string) or a list of strings (`a,b` splits).
|
|
27
|
+
*/
|
|
28
|
+
export declare function coerce(raw: string | true, type?: string): unknown;
|
|
29
|
+
/** The SDK call for an operation: path ids in order and the params object. */
|
|
30
|
+
export declare function buildCall(ctx: Ctx, op: Operation, rest: string[], args?: Parsed): Promise<{
|
|
31
|
+
ids: string[];
|
|
32
|
+
params?: Record<string, unknown>;
|
|
33
|
+
}>;
|
|
34
|
+
/** The SDK method for an operation on a client. */
|
|
35
|
+
export declare function sdkMethod(client: Wuapi, op: Operation): (...args: unknown[]) => unknown;
|
|
36
|
+
export declare function dispatch(ctx: Ctx, op: Operation, rest: string[]): Promise<void>;
|
|
37
|
+
//# sourceMappingURL=dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AAYA,OAAO,EAAa,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAoB,KAAK,GAAG,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,0FAA0F;AAC1F,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,WAAyC,CAAC;AACxE,oDAAoD;AACpD,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,WAAsD,CAAC;AAEtF,eAAO,MAAM,YAAY,GAAI,IAAI,SAAS,WAAqC,CAAC;AAChF,eAAO,MAAM,WAAW,GAAI,IAAI,SAAS,WAA4D,CAAC;AAEtG,wBAAgB,SAAS,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,CAK/C;AAED,2DAA2D;AAC3D,wBAAgB,SAAS,IAAI,MAAM,EAAE,CAEpC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG;IAAE,EAAE,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAoB1G;AASD;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAiBjE;AA6DD,8EAA8E;AAC9E,wBAAsB,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,MAAiB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CA8B9J;AAED,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAMvF;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBrF"}
|
package/dist/dispatch.js
ADDED
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
// Every API operation as `wuapi <resource> <method> [ids...] [--field value]`.
|
|
2
|
+
// The table (src/generated/operations.ts) comes from the OpenAPI spec and the
|
|
3
|
+
// SDK's naming; the call goes through the SDK method of the same name:
|
|
4
|
+
//
|
|
5
|
+
// client[resource...][method](...pathIds, params?)
|
|
6
|
+
//
|
|
7
|
+
// Generated SDK methods take the path parameters first, in path order, then
|
|
8
|
+
// one params object when the operation has query parameters or a body (never
|
|
9
|
+
// both), then call options.
|
|
10
|
+
import { readFileSync } from "node:fs";
|
|
11
|
+
import { isAbsolute, join } from "node:path";
|
|
12
|
+
import { Paginator } from "@wuapidev/sdk";
|
|
13
|
+
import { GLOBAL_FLAGS } from "./args.js";
|
|
14
|
+
import { emit, makeClient } from "./context.js";
|
|
15
|
+
import { CliError, usage } from "./errors.js";
|
|
16
|
+
import { OPERATIONS } from "./generated/operations.js";
|
|
17
|
+
/** `webhook-endpoints`, `webhookEndpoints`, `webhook_endpoints` -> `webhookendpoints`. */
|
|
18
|
+
export const norm = (s) => s.toLowerCase().replace(/[-_]/g, "");
|
|
19
|
+
/** `createPairingCode` -> `create-pairing-code`. */
|
|
20
|
+
export const kebab = (s) => s.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);
|
|
21
|
+
export const resourceName = (op) => op.resource.map(kebab).join(" ");
|
|
22
|
+
export const commandName = (op) => [...op.resource.map(kebab), kebab(op.method)].join(" ");
|
|
23
|
+
export function usageLine(op) {
|
|
24
|
+
const ids = op.pathParams.map((p) => `<${p}>`).join(" ");
|
|
25
|
+
const tail = op.hasBody ? " [--field value ...] [--data '<json>'|@file.json]" : op.query.length ? " [--param value ...]" : "";
|
|
26
|
+
const all = op.paginated ? " [--all]" : "";
|
|
27
|
+
return `wuapi ${commandName(op)}${ids ? ` ${ids}` : ""}${tail}${all}`;
|
|
28
|
+
}
|
|
29
|
+
/** Resource paths, e.g. `accounts`, `projects.apiKeys`. */
|
|
30
|
+
export function resources() {
|
|
31
|
+
return [...new Set(OPERATIONS.filter((o) => o.resource.length).map((o) => o.resource.join(".")))];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Finds the operation named by the leading positionals. Returns how many
|
|
35
|
+
* positionals it used, or the resource when only that matched.
|
|
36
|
+
*/
|
|
37
|
+
export function findOperation(positionals) {
|
|
38
|
+
const tokens = positionals.flatMap((p, i) => (i === 0 ? p.split(".") : [p]));
|
|
39
|
+
const extraFromDots = tokens.length - positionals.length;
|
|
40
|
+
if (tokens.length && norm(tokens[0]) === "me") {
|
|
41
|
+
const me = OPERATIONS.find((o) => o.resource.length === 0 && o.method === "me");
|
|
42
|
+
return { op: me, used: 1 };
|
|
43
|
+
}
|
|
44
|
+
const known = resources().map((r) => r.split("."));
|
|
45
|
+
// Longest resource first: `projects api-keys list` before `projects ...`.
|
|
46
|
+
const sorted = [...known].sort((a, b) => b.length - a.length);
|
|
47
|
+
for (const res of sorted) {
|
|
48
|
+
if (tokens.length < res.length)
|
|
49
|
+
continue;
|
|
50
|
+
if (!res.every((seg, i) => norm(seg) === norm(tokens[i])))
|
|
51
|
+
continue;
|
|
52
|
+
const method = tokens[res.length];
|
|
53
|
+
if (method === undefined)
|
|
54
|
+
return { used: res.length - extraFromDots, resource: res };
|
|
55
|
+
const op = OPERATIONS.find((o) => o.resource.join(".") === res.join(".") && norm(o.method) === norm(method));
|
|
56
|
+
if (op)
|
|
57
|
+
return { op, used: res.length + 1 - extraFromDots };
|
|
58
|
+
return { used: res.length - extraFromDots, resource: res };
|
|
59
|
+
}
|
|
60
|
+
return { used: 0 };
|
|
61
|
+
}
|
|
62
|
+
function fieldType(op, name) {
|
|
63
|
+
const q = op.query.find((f) => f.name === name);
|
|
64
|
+
if (q)
|
|
65
|
+
return q.type;
|
|
66
|
+
const types = new Set(op.body.flatMap((v) => v.fields.filter((f) => f.name === name).map((f) => f.type)));
|
|
67
|
+
return types.size === 1 ? [...types][0] : undefined;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* A flag value: JSON when it parses (numbers, booleans, arrays, objects),
|
|
71
|
+
* else the string, except where the spec says the field is a string (so
|
|
72
|
+
* `--chatId 5841...` stays a string) or a list of strings (`a,b` splits).
|
|
73
|
+
*/
|
|
74
|
+
export function coerce(raw, type) {
|
|
75
|
+
if (raw === true)
|
|
76
|
+
return true;
|
|
77
|
+
const stringy = type !== undefined && (type === "string" || /^"[^"]*"( \| "[^"]*")*$/.test(type));
|
|
78
|
+
if (stringy)
|
|
79
|
+
return raw;
|
|
80
|
+
let parsed;
|
|
81
|
+
let ok = false;
|
|
82
|
+
try {
|
|
83
|
+
parsed = JSON.parse(raw);
|
|
84
|
+
ok = true;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
ok = false;
|
|
88
|
+
}
|
|
89
|
+
if (type === "string[]") {
|
|
90
|
+
if (ok && Array.isArray(parsed))
|
|
91
|
+
return parsed;
|
|
92
|
+
return raw.split(",").map((s) => s.trim()).filter(Boolean);
|
|
93
|
+
}
|
|
94
|
+
return ok ? parsed : raw;
|
|
95
|
+
}
|
|
96
|
+
const isObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
97
|
+
function deepMerge(base, over) {
|
|
98
|
+
const out = { ...base };
|
|
99
|
+
for (const [k, v] of Object.entries(over))
|
|
100
|
+
out[k] = isObject(out[k]) && isObject(v) ? deepMerge(out[k], v) : v;
|
|
101
|
+
return out;
|
|
102
|
+
}
|
|
103
|
+
function setPath(target, path, value) {
|
|
104
|
+
let cur = target;
|
|
105
|
+
for (const seg of path.slice(0, -1)) {
|
|
106
|
+
if (["__proto__", "constructor", "prototype"].includes(seg))
|
|
107
|
+
throw usage(`Bad flag name: ${path.join(".")}`);
|
|
108
|
+
if (!isObject(cur[seg]))
|
|
109
|
+
cur[seg] = {};
|
|
110
|
+
cur = cur[seg];
|
|
111
|
+
}
|
|
112
|
+
const last = path.at(-1);
|
|
113
|
+
if (["__proto__", "constructor", "prototype"].includes(last))
|
|
114
|
+
throw usage(`Bad flag name: ${path.join(".")}`);
|
|
115
|
+
cur[last] = value;
|
|
116
|
+
}
|
|
117
|
+
async function readData(ctx, raw) {
|
|
118
|
+
if (raw === true)
|
|
119
|
+
throw usage("--data needs a JSON object, @file.json or @- (stdin).");
|
|
120
|
+
let text = raw;
|
|
121
|
+
if (raw === "@-")
|
|
122
|
+
text = await ctx.io.readStdin();
|
|
123
|
+
else if (raw.startsWith("@")) {
|
|
124
|
+
const file = raw.slice(1);
|
|
125
|
+
try {
|
|
126
|
+
text = readFileSync(isAbsolute(file) ? file : join(ctx.io.cwd, file), "utf8");
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
throw usage(`Cannot read ${file}: ${e.message}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
let value;
|
|
133
|
+
try {
|
|
134
|
+
value = JSON.parse(text);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
throw usage("--data is not valid JSON.");
|
|
138
|
+
}
|
|
139
|
+
if (!isObject(value))
|
|
140
|
+
throw usage("--data must be a JSON object.");
|
|
141
|
+
return value;
|
|
142
|
+
}
|
|
143
|
+
const OWN_FLAGS = new Set([...GLOBAL_FLAGS, "data", "all"]);
|
|
144
|
+
/** API field names of an operation. */
|
|
145
|
+
function fieldNames(op) {
|
|
146
|
+
return new Set([...op.query.map((f) => f.name), ...op.body.flatMap((v) => v.fields.map((f) => f.name))]);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Global flags an operation also has as a field (privacy settings have a
|
|
150
|
+
* `profile` field): there the flag is the field, and the global setting comes
|
|
151
|
+
* from its environment variable (WUAPI_PROFILE) instead.
|
|
152
|
+
*/
|
|
153
|
+
function shadowed(op) {
|
|
154
|
+
const names = fieldNames(op);
|
|
155
|
+
return new Set(GLOBAL_FLAGS.filter((f) => names.has(f)));
|
|
156
|
+
}
|
|
157
|
+
/** The SDK call for an operation: path ids in order and the params object. */
|
|
158
|
+
export async function buildCall(ctx, op, rest, args = ctx.args) {
|
|
159
|
+
const byFlag = new Map();
|
|
160
|
+
for (const p of op.pathParams) {
|
|
161
|
+
const v = args.flags.get(p);
|
|
162
|
+
if (typeof v === "string")
|
|
163
|
+
byFlag.set(p, v);
|
|
164
|
+
}
|
|
165
|
+
const queue = [...rest];
|
|
166
|
+
const ids = op.pathParams.map((p) => byFlag.get(p) ?? queue.shift());
|
|
167
|
+
if (ids.some((v) => v === undefined))
|
|
168
|
+
throw usage(`Missing ${op.pathParams.filter((_, i) => ids[i] === undefined).map((p) => `<${p}>`).join(" ")}.\nUsage: ${usageLine(op)}`);
|
|
169
|
+
if (queue.length)
|
|
170
|
+
throw usage(`Unexpected argument ${JSON.stringify(queue[0])}.\nUsage: ${usageLine(op)}`);
|
|
171
|
+
let params = {};
|
|
172
|
+
const data = args.flags.get("data");
|
|
173
|
+
if (data !== undefined)
|
|
174
|
+
params = await readData(ctx, data);
|
|
175
|
+
const fromFlags = {};
|
|
176
|
+
let any = data !== undefined;
|
|
177
|
+
const asField = shadowed(op);
|
|
178
|
+
for (const [name, raw] of args.flags) {
|
|
179
|
+
if ((OWN_FLAGS.has(name) && !asField.has(name)) || byFlag.has(name))
|
|
180
|
+
continue;
|
|
181
|
+
any = true;
|
|
182
|
+
const path = name.split(".");
|
|
183
|
+
setPath(fromFlags, path, coerce(raw, path.length === 1 ? fieldType(op, name) : undefined));
|
|
184
|
+
}
|
|
185
|
+
params = deepMerge(params, fromFlags);
|
|
186
|
+
const takesParams = op.hasBody || op.query.length > 0;
|
|
187
|
+
if (!takesParams) {
|
|
188
|
+
if (any)
|
|
189
|
+
throw usage(`wuapi ${commandName(op)} takes no fields.\nUsage: ${usageLine(op)}`);
|
|
190
|
+
return { ids: ids };
|
|
191
|
+
}
|
|
192
|
+
return { ids: ids, params };
|
|
193
|
+
}
|
|
194
|
+
/** The SDK method for an operation on a client. */
|
|
195
|
+
export function sdkMethod(client, op) {
|
|
196
|
+
let target = client;
|
|
197
|
+
for (const seg of op.resource)
|
|
198
|
+
target = target[seg];
|
|
199
|
+
const fn = target?.[op.method];
|
|
200
|
+
if (typeof fn !== "function")
|
|
201
|
+
throw new CliError("internal_error", `The SDK has no ${[...op.resource, op.method].join(".")}.`);
|
|
202
|
+
return fn.bind(target);
|
|
203
|
+
}
|
|
204
|
+
export async function dispatch(ctx, op, rest) {
|
|
205
|
+
const { ids, params } = await buildCall(ctx, op, rest);
|
|
206
|
+
const hidden = shadowed(op);
|
|
207
|
+
const authCtx = hidden.size ? { ...ctx, args: { ...ctx.args, flags: new Map([...ctx.args.flags].filter(([k]) => !hidden.has(k))) } } : ctx;
|
|
208
|
+
const call = sdkMethod(makeClient(authCtx), op);
|
|
209
|
+
const result = call(...ids, ...(params !== undefined ? [params] : []));
|
|
210
|
+
if (result instanceof Paginator) {
|
|
211
|
+
if (ctx.args.flags.get("all") !== undefined) {
|
|
212
|
+
const items = [];
|
|
213
|
+
for await (const item of result)
|
|
214
|
+
items.push(item);
|
|
215
|
+
emit(ctx, { object: "list", items, nextCursor: null }, () => JSON.stringify(items, null, 2));
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const page = await result.page();
|
|
219
|
+
emit(ctx, page, () => `${JSON.stringify(page.items, null, 2)}${page.nextCursor ? `\n\nMore: add --cursor ${page.nextCursor}, or --all for everything.` : ""}`);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
const value = await result;
|
|
223
|
+
emit(ctx, value === undefined ? { ok: true } : value, () => (value === undefined ? "Done." : JSON.stringify(value, null, 2)));
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"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"}
|
package/dist/dotenv.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** WUAPI_API_KEY from `<dir>/.env`, when the file sets it. */
|
|
2
|
+
export declare function readDotenvKey(dir: string): string | undefined;
|
|
3
|
+
/** Sets WUAPI_API_KEY in `<dir>/.env` (one line, created when missing). Returns the path. */
|
|
4
|
+
export declare function writeDotenvKey(dir: string, apiKey: string): string;
|
|
5
|
+
/** Makes sure `<dir>/.gitignore` ignores `.env`. Returns true when it added the line. */
|
|
6
|
+
export declare function ensureGitignored(dir: string): boolean;
|
|
7
|
+
//# sourceMappingURL=dotenv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dotenv.d.ts","sourceRoot":"","sources":["../src/dotenv.ts"],"names":[],"mappings":"AAcA,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ7D;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAwBlE;AAID,yFAAyF;AACzF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUrD"}
|
package/dist/dotenv.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// ./.env: read WUAPI_API_KEY from it, and write it there for `login --env`.
|
|
2
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
const KEY_LINE = /^\s*(?:export\s+)?WUAPI_API_KEY\s*=\s*(.*)$/;
|
|
5
|
+
function unquote(value) {
|
|
6
|
+
const v = value.trim();
|
|
7
|
+
const q = /^(["'])(.*)\1$/.exec(v);
|
|
8
|
+
if (q)
|
|
9
|
+
return q[2];
|
|
10
|
+
return v.replace(/\s+#.*$/, "");
|
|
11
|
+
}
|
|
12
|
+
/** WUAPI_API_KEY from `<dir>/.env`, when the file sets it. */
|
|
13
|
+
export function readDotenvKey(dir) {
|
|
14
|
+
const path = join(dir, ".env");
|
|
15
|
+
if (!existsSync(path))
|
|
16
|
+
return undefined;
|
|
17
|
+
for (const line of readFileSync(path, "utf8").split(/\r?\n/)) {
|
|
18
|
+
const m = KEY_LINE.exec(line);
|
|
19
|
+
if (m)
|
|
20
|
+
return unquote(m[1]) || undefined;
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
/** Sets WUAPI_API_KEY in `<dir>/.env` (one line, created when missing). Returns the path. */
|
|
25
|
+
export function writeDotenvKey(dir, apiKey) {
|
|
26
|
+
const path = join(dir, ".env");
|
|
27
|
+
const existing = existsSync(path) ? readFileSync(path, "utf8") : null;
|
|
28
|
+
const line = `WUAPI_API_KEY=${apiKey}`;
|
|
29
|
+
if (existing === null) {
|
|
30
|
+
writeFileSync(path, `${line}\n`, { mode: 0o600 });
|
|
31
|
+
return path;
|
|
32
|
+
}
|
|
33
|
+
const eol = existing.includes("\r\n") ? "\r\n" : "\n";
|
|
34
|
+
const lines = existing.split(/\r?\n/);
|
|
35
|
+
if (lines.at(-1) === "")
|
|
36
|
+
lines.pop();
|
|
37
|
+
let placed = false;
|
|
38
|
+
const out = [];
|
|
39
|
+
for (const l of lines) {
|
|
40
|
+
if (KEY_LINE.test(l)) {
|
|
41
|
+
if (!placed)
|
|
42
|
+
out.push(line);
|
|
43
|
+
placed = true;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
out.push(l);
|
|
47
|
+
}
|
|
48
|
+
if (!placed)
|
|
49
|
+
out.push(line);
|
|
50
|
+
writeFileSync(path, `${out.join(eol)}${eol}`);
|
|
51
|
+
return path;
|
|
52
|
+
}
|
|
53
|
+
const IGNORES_ENV = new Set([".env", "/.env", ".env*", "/.env*", "*.env"]);
|
|
54
|
+
/** Makes sure `<dir>/.gitignore` ignores `.env`. Returns true when it added the line. */
|
|
55
|
+
export function ensureGitignored(dir) {
|
|
56
|
+
const path = join(dir, ".gitignore");
|
|
57
|
+
if (!existsSync(path)) {
|
|
58
|
+
writeFileSync(path, ".env\n");
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
const text = readFileSync(path, "utf8");
|
|
62
|
+
if (text.split(/\r?\n/).some((l) => IGNORES_ENV.has(l.trim())))
|
|
63
|
+
return false;
|
|
64
|
+
writeFileSync(path, `${text}${text === "" || text.endsWith("\n") ? "" : "\n"}.env\n`);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=dotenv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dotenv.js","sourceRoot":"","sources":["../src/dotenv.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare class CliError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
/** 2 for usage errors, 1 otherwise. */
|
|
4
|
+
readonly exitCode: number;
|
|
5
|
+
readonly details: Record<string, unknown> | undefined;
|
|
6
|
+
constructor(code: string, message: string, options?: {
|
|
7
|
+
exitCode?: number;
|
|
8
|
+
details?: Record<string, unknown>;
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export declare const usage: (message: string, details?: Record<string, unknown>) => CliError;
|
|
12
|
+
export interface ErrorBody {
|
|
13
|
+
code: string;
|
|
14
|
+
message: string;
|
|
15
|
+
status?: number;
|
|
16
|
+
requestId?: string;
|
|
17
|
+
details?: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
/** Never carries a key: WuapiError messages and details come from the API, which never echoes it. */
|
|
20
|
+
export declare function toErrorBody(e: unknown): {
|
|
21
|
+
body: ErrorBody;
|
|
22
|
+
exitCode: number;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAIA,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAE1C,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAO;CAOlH;AAED,eAAO,MAAM,KAAK,GAAI,SAAS,MAAM,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,aACU,CAAC;AAEnF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAsB7E"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Errors the CLI reports: a code (stable, for scripts and agents) and a message.
|
|
2
|
+
import { WuapiError } from "@wuapidev/sdk";
|
|
3
|
+
export class CliError extends Error {
|
|
4
|
+
code;
|
|
5
|
+
/** 2 for usage errors, 1 otherwise. */
|
|
6
|
+
exitCode;
|
|
7
|
+
details;
|
|
8
|
+
constructor(code, message, options = {}) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = "CliError";
|
|
11
|
+
this.code = code;
|
|
12
|
+
this.exitCode = options.exitCode ?? 1;
|
|
13
|
+
this.details = options.details;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export const usage = (message, details) => new CliError("usage", message, { exitCode: 2, ...(details ? { details } : {}) });
|
|
17
|
+
/** Never carries a key: WuapiError messages and details come from the API, which never echoes it. */
|
|
18
|
+
export function toErrorBody(e) {
|
|
19
|
+
if (e instanceof CliError) {
|
|
20
|
+
return { body: { code: e.code, message: e.message, ...(e.details ? { details: e.details } : {}) }, exitCode: e.exitCode };
|
|
21
|
+
}
|
|
22
|
+
if (e instanceof WuapiError) {
|
|
23
|
+
const details = e.details && !("account" in e.details) ? e.details : undefined;
|
|
24
|
+
return {
|
|
25
|
+
body: {
|
|
26
|
+
code: e.code,
|
|
27
|
+
message: e.message,
|
|
28
|
+
...(e.status ? { status: e.status } : {}),
|
|
29
|
+
...(e.requestId ? { requestId: e.requestId } : {}),
|
|
30
|
+
...(details ? { details } : {}),
|
|
31
|
+
},
|
|
32
|
+
exitCode: 1,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const err = e;
|
|
36
|
+
return {
|
|
37
|
+
body: { code: typeof err?.code === "string" ? err.code : "internal_error", message: typeof err?.message === "string" ? err.message : String(e) },
|
|
38
|
+
exitCode: 1,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,iFAAiF;AAEjF,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAS;IACtB,uCAAuC;IAC9B,QAAQ,CAAS;IACjB,OAAO,CAAsC;IAEtD,YAAY,IAAY,EAAE,OAAe,EAAE,UAAoE,EAAE;QAC/G,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,OAAe,EAAE,OAAiC,EAAE,EAAE,CAC1E,IAAI,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAUnF,qGAAqG;AACrG,MAAM,UAAU,WAAW,CAAC,CAAU;IACpC,IAAI,CAAC,YAAY,QAAQ,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5H,CAAC;IACD,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,OAAO;YACL,IAAI,EAAE;gBACJ,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChC;YACD,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,CAA0C,CAAC;IACvD,OAAO;QACL,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QAChJ,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC"}
|
package/dist/files.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAMA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG9C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAgBnE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIhD"}
|
package/dist/files.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Small file helpers: private JSON files (0600 in a 0700 directory), written
|
|
2
|
+
// atomically so a crash never leaves half a credentials file.
|
|
3
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { dirname } from "node:path";
|
|
5
|
+
export function readJson(path) {
|
|
6
|
+
if (!existsSync(path))
|
|
7
|
+
return undefined;
|
|
8
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
9
|
+
}
|
|
10
|
+
export function writePrivateJson(path, value) {
|
|
11
|
+
const dir = dirname(path);
|
|
12
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
13
|
+
try {
|
|
14
|
+
chmodSync(dir, 0o700);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// Not ours to change (Windows, a shared directory): the file mode still applies.
|
|
18
|
+
}
|
|
19
|
+
const tmp = `${path}.${process.pid}.tmp`;
|
|
20
|
+
writeFileSync(tmp, `${JSON.stringify(value, null, 2)}\n`, { mode: 0o600 });
|
|
21
|
+
try {
|
|
22
|
+
chmodSync(tmp, 0o600);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Windows ignores POSIX modes.
|
|
26
|
+
}
|
|
27
|
+
renameSync(tmp, path);
|
|
28
|
+
}
|
|
29
|
+
export function removeFile(path) {
|
|
30
|
+
if (!existsSync(path))
|
|
31
|
+
return false;
|
|
32
|
+
rmSync(path, { force: true });
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8DAA8D;AAE9D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5G,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,KAAc;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,iFAAiF;IACnF,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC;IACzC,aAAa,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC;QACH,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IACD,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/generated/operations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,eAAO,MAAM,UAAU,EAAE,SAAS,SAAS,EA02I1C,CAAC"}
|