lurqrun 0.1.6 → 0.1.8
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/README.md +311 -139
- package/dist/auditHandler-VWCXSDVO.js +24 -0
- package/dist/autopilotInit-Q62MX5M6.js +178 -0
- package/dist/bin/lurq.js +3255 -23319
- package/dist/browserAuth-J7APSD4P.js +96 -0
- package/dist/cache-AEAKCV4I.js +12 -0
- package/dist/check-2JTQDQA6.js +2613 -0
- package/dist/check-PQSQ2MMA.js +192 -0
- package/dist/checkUpgrade-5YW77OBL.js +24 -0
- package/dist/chunk-2GAYNIHG.js +40 -0
- package/dist/chunk-2O6Z37IT.js +423 -0
- package/dist/chunk-2WD4QAH4.js +116 -0
- package/dist/chunk-3676XOBU.js +2235 -0
- package/dist/chunk-3D2MPGOQ.js +181 -0
- package/dist/chunk-3GHJR7XR.js +2049 -0
- package/dist/chunk-4ESO33J6.js +34 -0
- package/dist/chunk-4JHDSVIN.js +1229 -0
- package/dist/chunk-4KCPOMG6.js +68 -0
- package/dist/chunk-53SG6XWA.js +141 -0
- package/dist/chunk-5ABNDB3I.js +37 -0
- package/dist/chunk-5ALIJFDA.js +114 -0
- package/dist/chunk-63MUJNZL.js +318 -0
- package/dist/chunk-64ZF7KO4.js +1571 -0
- package/dist/chunk-6DM6UQFD.js +318 -0
- package/dist/chunk-6EQ3ARXA.js +304 -0
- package/dist/chunk-6L67QMCP.js +92 -0
- package/dist/chunk-72Y2FDVS.js +172 -0
- package/dist/chunk-A3TYI2TF.js +288 -0
- package/dist/chunk-B2UUYRBX.js +536 -0
- package/dist/chunk-BJT2LHAR.js +320 -0
- package/dist/chunk-BM3LF5T6.js +132 -0
- package/dist/chunk-BN3NM47Q.js +214 -0
- package/dist/chunk-BUALU27S.js +123 -0
- package/dist/chunk-C6GLE626.js +160 -0
- package/dist/chunk-D3K6IZVR.js +12845 -0
- package/dist/chunk-D3VTZS7V.js +222 -0
- package/dist/chunk-DM37MTOO.js +636 -0
- package/dist/chunk-DONTW3NE.js +171 -0
- package/dist/chunk-DSROTZ3Z.js +38 -0
- package/dist/chunk-ELGCAM7P.js +184 -0
- package/dist/chunk-EQCXENKZ.js +130 -0
- package/dist/chunk-EYAKM6YN.js +96 -0
- package/dist/chunk-FDFPMBCA.js +112 -0
- package/dist/chunk-FVYFV5HA.js +154 -0
- package/dist/chunk-GE37NVLN.js +15 -0
- package/dist/chunk-GM5Y555O.js +143 -0
- package/dist/chunk-GRJXQBQZ.js +793 -0
- package/dist/chunk-HWFX4BC4.js +177 -0
- package/dist/chunk-I3M2KJXB.js +56 -0
- package/dist/chunk-IFNONGRQ.js +603 -0
- package/dist/chunk-J3U2CPSK.js +136 -0
- package/dist/chunk-J6XQ7OPZ.js +74 -0
- package/dist/chunk-KMV4Y6R3.js +127 -0
- package/dist/chunk-KP5ZDDPE.js +340 -0
- package/dist/chunk-KYKSZ3XZ.js +202 -0
- package/dist/chunk-LEGPB7DO.js +81 -0
- package/dist/chunk-LUAKDHLZ.js +40 -0
- package/dist/chunk-MHUEVBVO.js +35 -0
- package/dist/chunk-MYGSLK44.js +37 -0
- package/dist/chunk-NEZNAPPN.js +41 -0
- package/dist/chunk-NPVN2THM.js +197 -0
- package/dist/chunk-NYZU5NCW.js +23 -0
- package/dist/chunk-O4KHCV6I.js +320 -0
- package/dist/chunk-ONDVTXUO.js +240 -0
- package/dist/chunk-OTJFHESY.js +176 -0
- package/dist/chunk-P6MIKSPY.js +243 -0
- package/dist/chunk-Q5VPF4WI.js +26 -0
- package/dist/chunk-QCRBX3LV.js +165 -0
- package/dist/chunk-QKGYDMWB.js +7409 -0
- package/dist/chunk-QSL6QN5X.js +115 -0
- package/dist/chunk-QUIMQ7YL.js +73 -0
- package/dist/chunk-RG3YLU6E.js +49 -0
- package/dist/chunk-SHCEBP3J.js +107 -0
- package/dist/chunk-SHZFOSXC.js +462 -0
- package/dist/chunk-SOXFMMXC.js +151 -0
- package/dist/chunk-TDTYV6QI.js +119 -0
- package/dist/chunk-TNTXWSYA.js +19 -0
- package/dist/chunk-TUXQ32WE.js +2251 -0
- package/dist/chunk-VGCDRK3S.js +37 -0
- package/dist/chunk-VLRHFMGJ.js +58 -0
- package/dist/chunk-WHX2ZFCG.js +4048 -0
- package/dist/chunk-X4W64MHU.js +2005 -0
- package/dist/chunk-XBQA4I36.js +92 -0
- package/dist/chunk-XGOV6KV4.js +413 -0
- package/dist/chunk-XIFQIFSZ.js +940 -0
- package/dist/chunk-XLXPVN3Y.js +15393 -0
- package/dist/chunk-ZJMLQ37G.js +90 -0
- package/dist/client-MU4EUDZV.js +15 -0
- package/dist/commands-UOOTMBKA.js +1023 -0
- package/dist/compat-Q5DVPITN.js +201 -0
- package/dist/constants-DJFOFZ44.js +24 -0
- package/dist/dashboardIssue-KBKLQMGC.js +274 -0
- package/dist/diff-I4SNUHU3.js +13 -0
- package/dist/dist-4XXIXHHZ.js +12945 -0
- package/dist/domains-VRT4BRVZ.js +14 -0
- package/dist/e2b-FVPHDULZ.js +172 -0
- package/dist/env-UN6KGZ7S.js +15 -0
- package/dist/envCheck-KUPTORFQ.js +71 -0
- package/dist/extract-6WG265BL.js +455 -0
- package/dist/fetch-PJ3SC32M.js +22 -0
- package/dist/firstTouch-COJCMOB3.js +55 -0
- package/dist/fix-3EDWNKW3.js +220 -0
- package/dist/handlers-4Q37WIFT.js +55 -0
- package/dist/hook-NA66XJLC.js +412 -0
- package/dist/http-25GJ6SKK.js +6928 -0
- package/dist/ingestQueue-FSVJC3AA.js +37 -0
- package/dist/install-G2HHXYJ2.js +20 -0
- package/dist/installSkill-5TIMYIJZ.js +70 -0
- package/dist/inventory-5AWSLJYU.js +31 -0
- package/dist/local-XPZMRH5R.js +13 -0
- package/dist/manifest-ENMIC54B.js +13 -0
- package/dist/mcp-PENLL2PK.js +500 -0
- package/dist/mcpConfig-3LYPRY5Q.js +80 -0
- package/dist/mcpHandlers-PO7GENA7.js +22 -0
- package/dist/mcpScan-ULP626TQ.js +1735 -0
- package/dist/mcpScanWorkflow-27O44FOE.js +98 -0
- package/dist/mcpStack-ZNYIFXZ5.js +20 -0
- package/dist/model-ASMZWLM7.js +214 -0
- package/dist/packages-RWF2LXST.js +40 -0
- package/dist/plan-SDILIDZT.js +465 -0
- package/dist/planView-ZAKRTGVS.js +82 -0
- package/dist/policy-JAGNMQJI.js +115 -0
- package/dist/probe-3IK646WN.js +610 -0
- package/dist/publicUpgrades-WTBGLDIK.js +42 -0
- package/dist/references-I6Y4BSRR.js +16 -0
- package/dist/release-7IU2R4YG.js +128 -0
- package/dist/remote-FN6225AH.js +42 -0
- package/dist/rename-OS6JYBZQ.js +204 -0
- package/dist/reportRuns-O4X7ZFTX.js +77 -0
- package/dist/safeFetch-COERXGFN.js +19 -0
- package/dist/sandbox-SAPSRKEI.js +39 -0
- package/dist/sarif-WLVJFJ7U.js +125 -0
- package/dist/server-OLTY3NYT.js +59 -0
- package/dist/surface-7MHE3RL7.js +143 -0
- package/dist/surface-JS2XU3U3.js +38 -0
- package/dist/surfaceHandlers-4B6TMZ34.js +20 -0
- package/dist/typecheck-NGOKNAJY.js +282 -0
- package/dist/types-M5JP2W3D.js +10 -0
- package/dist/uninstall-I2IJP5JZ.js +200 -0
- package/dist/upgrade-FS26DJGG.js +650 -0
- package/dist/upgradePlan-ZS5IOVMZ.js +181 -0
- package/dist/upkeepHandler-VFGYXJKB.js +13 -0
- package/dist/userConfig-ICASHI47.js +20 -0
- package/dist/watch-OCNEUXG6.js +204 -0
- package/package.json +26 -20
- package/templates/agent-rules.md +4 -4
- package/templates/skill-instructions.md +35 -17
- package/dist/bin/lurq.js.map +0 -1
- package/dist/index.d.ts +0 -805
- package/dist/index.js +0 -23570
- package/dist/index.js.map +0 -1
- package/drizzle/0000_confused_fabian_cortez.sql +0 -54
- package/drizzle/0001_aspiring_timeslip.sql +0 -15
- package/drizzle/0002_lyrical_lila_cheney.sql +0 -14
- package/drizzle/0003_violet_giant_girl.sql +0 -14
- package/drizzle/0004_slim_valeria_richards.sql +0 -15
- package/drizzle/0005_petite_luke_cage.sql +0 -12
- package/drizzle/0006_calm_nighthawk.sql +0 -3
- package/drizzle/0007_slimy_naoko.sql +0 -1
- package/drizzle/0008_peaceful_tigra.sql +0 -1
- package/drizzle/0009_smooth_harrier.sql +0 -10
- package/drizzle/0010_curved_amphibian.sql +0 -2
- package/drizzle/0011_compat_provenance_closures.sql +0 -11
- package/drizzle/0012_api_surfaces.sql +0 -9
- package/drizzle/0013_nice_thanos.sql +0 -1
- package/drizzle/0014_luxuriant_malcolm_colcord.sql +0 -10
- package/drizzle/0015_past_fat_cobra.sql +0 -11
- package/drizzle/0016_futuristic_junta.sql +0 -50
- package/drizzle/0017_absent_grandmaster.sql +0 -20
- package/drizzle/0018_rainy_proemial_gods.sql +0 -1
- package/drizzle/0019_dashing_korvac.sql +0 -11
- package/drizzle/0020_normal_vulture.sql +0 -3
- package/drizzle/0021_dazzling_blue_shield.sql +0 -17
- package/drizzle/0022_massive_ghost_rider.sql +0 -24
- package/drizzle/0023_next_shatterstar.sql +0 -1
- package/drizzle/0024_dusty_maelstrom.sql +0 -15
- package/drizzle/0025_gifted_harpoon.sql +0 -5
- package/drizzle/0026_awesome_mordo.sql +0 -1
- package/drizzle/0027_charming_ulik.sql +0 -2
- package/drizzle/0028_romantic_loners.sql +0 -2
- package/drizzle/0029_busy_korvac.sql +0 -16
- package/drizzle/0030_steady_mathemanic.sql +0 -6
- package/drizzle/0031_redundant_maginty.sql +0 -2
- package/drizzle/0032_stack_resolutions.sql +0 -14
- package/drizzle/0033_graceful_tyger_tiger.sql +0 -3
- package/drizzle/0034_uneven_thunderbird.sql +0 -1
- package/drizzle/0035_api_key_scopes.sql +0 -1
- package/drizzle/0036_policy_audit.sql +0 -21
- package/drizzle/0037_subscription_seats.sql +0 -1
- package/drizzle/0038_symbol_offsets.sql +0 -2
- package/drizzle/0039_mcp_runtime_scans.sql +0 -80
- package/drizzle/0040_subscription_overage_and_interval.sql +0 -4
- package/drizzle/0041_account_email.sql +0 -38
- package/drizzle/0042_alert_channels.sql +0 -21
- package/drizzle/meta/0000_snapshot.json +0 -370
- package/drizzle/meta/0001_snapshot.json +0 -482
- package/drizzle/meta/0002_snapshot.json +0 -575
- package/drizzle/meta/0003_snapshot.json +0 -667
- package/drizzle/meta/0004_snapshot.json +0 -769
- package/drizzle/meta/0005_snapshot.json +0 -864
- package/drizzle/meta/0006_snapshot.json +0 -882
- package/drizzle/meta/0007_snapshot.json +0 -876
- package/drizzle/meta/0008_snapshot.json +0 -882
- package/drizzle/meta/0009_snapshot.json +0 -948
- package/drizzle/meta/0010_snapshot.json +0 -969
- package/drizzle/meta/0011_snapshot.json +0 -1049
- package/drizzle/meta/0012_snapshot.json +0 -1115
- package/drizzle/meta/0013_snapshot.json +0 -1121
- package/drizzle/meta/0014_snapshot.json +0 -1190
- package/drizzle/meta/0015_snapshot.json +0 -1280
- package/drizzle/meta/0016_snapshot.json +0 -1683
- package/drizzle/meta/0017_snapshot.json +0 -1834
- package/drizzle/meta/0018_snapshot.json +0 -1834
- package/drizzle/meta/0019_snapshot.json +0 -1909
- package/drizzle/meta/0020_snapshot.json +0 -1921
- package/drizzle/meta/0021_snapshot.json +0 -2045
- package/drizzle/meta/0022_snapshot.json +0 -2246
- package/drizzle/meta/0023_snapshot.json +0 -2252
- package/drizzle/meta/0024_snapshot.json +0 -2375
- package/drizzle/meta/0025_snapshot.json +0 -2407
- package/drizzle/meta/0026_snapshot.json +0 -2413
- package/drizzle/meta/0027_snapshot.json +0 -2425
- package/drizzle/meta/0028_snapshot.json +0 -2438
- package/drizzle/meta/0029_snapshot.json +0 -2546
- package/drizzle/meta/0030_snapshot.json +0 -2586
- package/drizzle/meta/0031_snapshot.json +0 -2598
- package/drizzle/meta/0032_snapshot.json +0 -2699
- package/drizzle/meta/0033_snapshot.json +0 -2712
- package/drizzle/meta/0034_snapshot.json +0 -2719
- package/drizzle/meta/0035_snapshot.json +0 -2726
- package/drizzle/meta/0036_snapshot.json +0 -2876
- package/drizzle/meta/0037_snapshot.json +0 -2883
- package/drizzle/meta/0038_snapshot.json +0 -2895
- package/drizzle/meta/0039_snapshot.json +0 -3501
- package/drizzle/meta/0040_snapshot.json +0 -3527
- package/drizzle/meta/0041_snapshot.json +0 -3824
- package/drizzle/meta/0042_snapshot.json +0 -3960
- package/drizzle/meta/_journal.json +0 -307
- package/src/data/seed.json +0 -253
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { createRequire as __lurqCreateRequire } from 'node:module'; const require = __lurqCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
init_esm_shims
|
|
4
|
+
} from "./chunk-I3M2KJXB.js";
|
|
5
|
+
|
|
6
|
+
// src/notify/safeHttp.ts
|
|
7
|
+
init_esm_shims();
|
|
8
|
+
import { lookup as dnsLookup } from "dns";
|
|
9
|
+
import https from "https";
|
|
10
|
+
import { isIP } from "net";
|
|
11
|
+
var MAX_URL = 2e3;
|
|
12
|
+
var TIMEOUT_MS = 1e4;
|
|
13
|
+
var MAX_RESPONSE = 4e3;
|
|
14
|
+
function v4Private(ip) {
|
|
15
|
+
const [a = 0, b = 0] = ip.split(".").map(Number);
|
|
16
|
+
return a === 0 || a === 10 || a === 127 || a === 100 && b >= 64 && b <= 127 || // carrier-grade NAT
|
|
17
|
+
a === 169 && b === 254 || // link-local, cloud metadata
|
|
18
|
+
a === 172 && b >= 16 && b <= 31 || a === 192 && b === 168 || a === 192 && b === 0 || a === 198 && (b === 18 || b === 19) || // benchmarking
|
|
19
|
+
a >= 224;
|
|
20
|
+
}
|
|
21
|
+
function isPrivateAddress(ip) {
|
|
22
|
+
const kind = isIP(ip);
|
|
23
|
+
if (kind === 4) return v4Private(ip);
|
|
24
|
+
if (kind !== 6) return true;
|
|
25
|
+
const v = ip.toLowerCase();
|
|
26
|
+
if (v === "::" || v === "::1") return true;
|
|
27
|
+
const mapped = /^::ffff:(.+)$/.exec(v);
|
|
28
|
+
if (mapped) {
|
|
29
|
+
const rest = mapped[1];
|
|
30
|
+
if (isIP(rest) === 4) return v4Private(rest);
|
|
31
|
+
const [hi = "0", lo = "0"] = rest.split(":");
|
|
32
|
+
const n = parseInt(hi, 16) << 16 | parseInt(lo, 16);
|
|
33
|
+
return v4Private([n >>> 24 & 255, n >>> 16 & 255, n >>> 8 & 255, n & 255].join("."));
|
|
34
|
+
}
|
|
35
|
+
return /^f[cd]/.test(v) || /^fe[89ab]/.test(v) || v.startsWith("ff");
|
|
36
|
+
}
|
|
37
|
+
var SLACK_HOSTS = /* @__PURE__ */ new Set(["hooks.slack.com"]);
|
|
38
|
+
var DISCORD_HOSTS = /* @__PURE__ */ new Set([
|
|
39
|
+
"discord.com",
|
|
40
|
+
"discordapp.com",
|
|
41
|
+
"ptb.discord.com",
|
|
42
|
+
"canary.discord.com"
|
|
43
|
+
]);
|
|
44
|
+
var TEAMS_SUFFIXES = [".logic.azure.com", ".powerplatform.com", ".powerautomate.com"];
|
|
45
|
+
function validateChannelUrl(kind, raw) {
|
|
46
|
+
if (typeof raw !== "string" || !raw.trim() || raw.length > MAX_URL)
|
|
47
|
+
return { ok: false, error: "Paste the full webhook URL." };
|
|
48
|
+
let url;
|
|
49
|
+
try {
|
|
50
|
+
url = new URL(raw.trim());
|
|
51
|
+
} catch {
|
|
52
|
+
return { ok: false, error: "That is not a valid URL." };
|
|
53
|
+
}
|
|
54
|
+
if (url.protocol !== "https:") return { ok: false, error: "The URL must start with https://." };
|
|
55
|
+
if (url.username || url.password)
|
|
56
|
+
return { ok: false, error: "The URL must not contain a username or password." };
|
|
57
|
+
const host = url.hostname.toLowerCase();
|
|
58
|
+
if (kind === "slack") {
|
|
59
|
+
if (!SLACK_HOSTS.has(host) || !/^\/(services|triggers)\//.test(url.pathname)) {
|
|
60
|
+
return {
|
|
61
|
+
ok: false,
|
|
62
|
+
error: "A Slack incoming webhook URL starts with https://hooks.slack.com/services/."
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
} else if (kind === "discord") {
|
|
66
|
+
if (!DISCORD_HOSTS.has(host) || !url.pathname.startsWith("/api/webhooks/")) {
|
|
67
|
+
return {
|
|
68
|
+
ok: false,
|
|
69
|
+
error: "A Discord webhook URL starts with https://discord.com/api/webhooks/."
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
} else if (kind === "teams") {
|
|
73
|
+
if (host.endsWith(".webhook.office.com") || host === "outlook.office.com") {
|
|
74
|
+
return {
|
|
75
|
+
ok: false,
|
|
76
|
+
error: "Teams retired Office 365 connector webhooks in May 2026. Create one with the Workflows app instead."
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (!TEAMS_SUFFIXES.some((s) => host.endsWith(s))) {
|
|
80
|
+
return {
|
|
81
|
+
ok: false,
|
|
82
|
+
error: "Use the webhook URL a Teams Workflows flow gives you (a logic.azure.com or powerplatform.com address)."
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
} else {
|
|
86
|
+
if (host === "localhost" || host.endsWith(".localhost") || host.endsWith(".local") || host.endsWith(".internal")) {
|
|
87
|
+
return { ok: false, error: "The URL must be reachable on the public internet." };
|
|
88
|
+
}
|
|
89
|
+
if (isIP(host.replace(/^\[|\]$/g, "")) && isPrivateAddress(host.replace(/^\[|\]$/g, ""))) {
|
|
90
|
+
return { ok: false, error: "The URL must be reachable on the public internet." };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return { ok: true, url };
|
|
94
|
+
}
|
|
95
|
+
function safeLookup(resolve = dnsLookup) {
|
|
96
|
+
return (hostname, options, callback) => {
|
|
97
|
+
resolve(hostname, { all: true }, (err, addresses) => {
|
|
98
|
+
if (err) return callback(err, []);
|
|
99
|
+
const list = addresses;
|
|
100
|
+
if (!list.length || list.some((a) => isPrivateAddress(a.address))) {
|
|
101
|
+
const e = Object.assign(new Error(`${hostname} resolves to a private network address`), {
|
|
102
|
+
code: "EPRIVATE"
|
|
103
|
+
});
|
|
104
|
+
return callback(e, []);
|
|
105
|
+
}
|
|
106
|
+
if (options?.all) return callback(null, list);
|
|
107
|
+
callback(null, list[0].address, list[0].family);
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function postJson(url, payload, headers, opts = {}) {
|
|
112
|
+
return new Promise((resolvePost) => {
|
|
113
|
+
let settled = false;
|
|
114
|
+
const done = (o) => {
|
|
115
|
+
if (!settled) {
|
|
116
|
+
settled = true;
|
|
117
|
+
resolvePost(o);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
let req;
|
|
121
|
+
try {
|
|
122
|
+
req = https.request(
|
|
123
|
+
url,
|
|
124
|
+
{
|
|
125
|
+
method: "POST",
|
|
126
|
+
headers: {
|
|
127
|
+
"Content-Type": "application/json",
|
|
128
|
+
"User-Agent": "lurq-alerts",
|
|
129
|
+
"Content-Length": Buffer.byteLength(payload),
|
|
130
|
+
...headers
|
|
131
|
+
},
|
|
132
|
+
lookup: opts.lookup ?? safeLookup(),
|
|
133
|
+
timeout: opts.timeoutMs ?? TIMEOUT_MS
|
|
134
|
+
},
|
|
135
|
+
(res) => {
|
|
136
|
+
let body = "";
|
|
137
|
+
res.setEncoding("utf8");
|
|
138
|
+
res.on("data", (chunk) => {
|
|
139
|
+
if (body.length < MAX_RESPONSE) body += chunk;
|
|
140
|
+
});
|
|
141
|
+
res.on("end", () => {
|
|
142
|
+
const status = res.statusCode ?? 0;
|
|
143
|
+
done({
|
|
144
|
+
status,
|
|
145
|
+
error: status >= 200 && status < 300 ? null : `HTTP ${status}${body ? `: ${body.slice(0, 120).replace(/\s+/g, " ")}` : ""}`
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
res.on(
|
|
149
|
+
"error",
|
|
150
|
+
() => done({ status: res.statusCode ?? 0, error: "response interrupted" })
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
);
|
|
154
|
+
} catch (err) {
|
|
155
|
+
done({
|
|
156
|
+
status: 0,
|
|
157
|
+
error: err instanceof Error ? err.message : "request failed",
|
|
158
|
+
code: "EINVAL"
|
|
159
|
+
});
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
req.on("timeout", () => {
|
|
163
|
+
req.destroy(Object.assign(new Error("timed out"), { code: "ETIMEDOUT" }));
|
|
164
|
+
});
|
|
165
|
+
req.on("error", (err) => {
|
|
166
|
+
done({
|
|
167
|
+
status: 0,
|
|
168
|
+
error: err.code === "EPRIVATE" ? err.message : `could not connect (${err.code ?? err.message})`,
|
|
169
|
+
code: err.code ?? "ECONNECT"
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
req.end(payload);
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export {
|
|
177
|
+
isPrivateAddress,
|
|
178
|
+
validateChannelUrl,
|
|
179
|
+
safeLookup,
|
|
180
|
+
postJson
|
|
181
|
+
};
|