@openclaw/slack 2026.11.3 → 2026.11.5-beta.2
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/.setup/{account-inspect-CmkKiSb9.mjs → account-inspect-BLVha-ov.mjs} +11 -8
- package/dist/.setup/{accounts-msihSF3-.mjs → accounts-CGJScKtk.mjs} +10 -1
- package/dist/.setup/{action-runtime-ChRfnnBu.mjs → action-runtime-D01wBhx5.mjs} +38 -45
- package/dist/.setup/action-runtime.runtime-VQGaR6g8.mjs +1 -0
- package/dist/.setup/{actions-By7tvpvv.mjs → actions-D5S6D_BU.mjs} +89 -76
- package/dist/.setup/{approval-handler.runtime-D8ArtDQt.mjs → approval-handler.runtime-Buw5jh2Y.mjs} +26 -30
- package/dist/.setup/{approval-message-updates-DT7XBPbV.mjs → approval-message-updates-pmXcve5E.mjs} +1 -1
- package/dist/.setup/{channel-DLFiMJm2.mjs → channel-C_R98Nbv.mjs} +569 -339
- package/dist/.setup/{channel-type-BEFP2ORi.mjs → channel-type-B5P3w9eA.mjs} +4 -8
- package/dist/.setup/{channel.setup-CzFw73mU.mjs → channel.setup-Lq2OxKkF.mjs} +13 -13
- package/dist/.setup/{config-schema-DNnh6bWU.mjs → config-schema-BWAaa5au.mjs} +3 -7
- package/dist/.setup/cursor-pages-CATAzbTT.mjs +313 -0
- package/dist/.setup/{directory-config-Cjj0N8R0.mjs → directory-config-D-hf9KGQ.mjs} +3 -3
- package/dist/.setup/{directory-live-BIKD-5B_.mjs → directory-live-onKAFI1E.mjs} +4 -4
- package/dist/.setup/{doctor-contract-Cd4-VzIM.mjs → doctor-contract-9-QJRCXk.mjs} +37 -45
- package/dist/.setup/{message-tool-api-BS5ekEA_.mjs → message-tool-api-LGIgVXJf.mjs} +4 -3
- package/dist/.setup/{monitor-CV6Z6FKP.mjs → monitor-Cm1TuqxN.mjs} +3424 -3703
- package/dist/.setup/{outbound-adapter-9dbnYtL1.mjs → outbound-adapter-C-95EWl2.mjs} +30 -36
- package/dist/.setup/paths-B1u59oLK.mjs +8 -0
- package/dist/.setup/{pipeline.runtime-DLIQf1Bo.mjs → pipeline.runtime-DGnV6akc.mjs} +416 -534
- package/dist/.setup/{policy-yhn48xf5.mjs → policy-DxhGRvc2.mjs} +1 -2
- package/dist/.setup/{session-status-Dv8wNBEt.mjs → probe-DANukR3O.mjs} +1206 -839
- package/dist/.setup/question-delivery-CWC7sRhH.mjs +39 -0
- package/dist/.setup/{relay-source-CxDcrn16.mjs → relay-source-DoyOlTbK.mjs} +5 -3
- package/dist/.setup/{replies-MRkrg3rC.mjs → replies-BcmUKord.mjs} +34 -19
- package/dist/.setup/{reply-blocks-Ca-raz2z.mjs → reply-blocks-BzsXUUUL.mjs} +201 -206
- package/dist/.setup/{resolve-channels-DRRhElwz.mjs → resolve-channels-XDPgnesf.mjs} +4 -7
- package/dist/.setup/{resolve-users-Cz8e17ky.mjs → resolve-users-aDAv24U2.mjs} +8 -16
- package/dist/.setup/runtime-setter-api-Cx_PV-xu.mjs +2 -0
- package/dist/.setup/{scopes-DfQVi8Jw.mjs → scopes-BocHwImV.mjs} +2 -1
- package/dist/.setup/secret-contract-api-BlLz88mj.mjs +2 -0
- package/dist/.setup/{secret-contract-vVRMoE1D.mjs → secret-contract-uiQtoNlu.mjs} +2 -2
- package/dist/.setup/{send-results-eeOu_HYm.mjs → send-results-BGxlroJ-.mjs} +3 -4
- package/dist/.setup/{send-C-8wY0lK.mjs → send-yK6_-px6.mjs} +297 -334
- package/dist/.setup/setup-plugin-api-Cfz58xoh.mjs +2 -0
- package/dist/.setup/{setup-surface--n8VsDvV.mjs → setup-surface-C0KRtyqa.mjs} +5 -6
- package/dist/.setup/{slash-dispatch.runtime-D3Wq45ER.mjs → slash-dispatch.runtime-CyVC3bYx.mjs} +2 -2
- package/dist/.setup/{target-parsing-FFE26kOV.mjs → target-parsing-Bx2UZniD.mjs} +1 -2
- package/dist/.setup/{targets-C6LZQL1Q.mjs → targets-D-ASeWHy.mjs} +1 -1
- package/dist/.source-module-urls/c5ffd0957b234c7c12090e7de4eca2482ef339b8561e078da55b734211b0ba58.json +1 -0
- package/dist/account-inspect-api.js +1 -1
- package/dist/api.js +16 -17
- package/dist/channel-config-api.js +1 -2
- package/dist/channel-plugin-api.js +1 -2
- package/dist/directory-contract-api.js +1 -2
- package/dist/doctor-contract-api.js +1 -2
- package/dist/index.js +0 -6
- package/dist/message-tool-api.js +1 -2
- package/dist/runtime-api.js +10 -12
- package/dist/runtime-setter-api.js +1 -2
- package/dist/secret-contract-api.js +1 -2
- package/dist/security-contract-api.js +1 -2
- package/dist/setup-entry.js +3 -3
- package/dist/setup-plugin-api.js +1 -2
- package/node_modules/@slack/bolt/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/bolt/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/bolt/node_modules/@types/node/util.d.ts +6 -3
- package/node_modules/@slack/bolt/node_modules/content-disposition/README.md +105 -35
- package/node_modules/@slack/bolt/node_modules/content-disposition/dist/index.d.ts +72 -0
- package/node_modules/@slack/bolt/node_modules/content-disposition/dist/index.js +388 -0
- package/node_modules/@slack/bolt/node_modules/content-disposition/dist/index.js.map +1 -0
- package/node_modules/@slack/bolt/node_modules/content-disposition/package.json +31 -19
- package/node_modules/@slack/bolt/node_modules/content-type/README.md +34 -57
- package/node_modules/@slack/bolt/node_modules/content-type/package.json +35 -25
- package/node_modules/@slack/bolt/node_modules/express/Readme.md +15 -9
- package/node_modules/@slack/bolt/node_modules/express/lib/application.js +2 -2
- package/node_modules/@slack/bolt/node_modules/express/lib/request.js +32 -19
- package/node_modules/@slack/bolt/node_modules/express/lib/response.js +27 -30
- package/node_modules/@slack/bolt/node_modules/express/package.json +10 -10
- package/node_modules/@slack/bolt/node_modules/qs/.github/THREAT_MODEL.md +4 -2
- package/node_modules/@slack/bolt/node_modules/qs/CHANGELOG.md +38 -14
- package/node_modules/@slack/bolt/node_modules/qs/README.md +31 -3
- package/node_modules/@slack/bolt/node_modules/qs/dist/qs.js +20 -20
- package/node_modules/@slack/bolt/node_modules/qs/lib/parse.js +94 -4
- package/node_modules/@slack/bolt/node_modules/qs/lib/stringify.js +4 -4
- package/node_modules/@slack/bolt/node_modules/qs/lib/utils.js +130 -6
- package/node_modules/@slack/bolt/node_modules/qs/package.json +4 -4
- package/node_modules/@slack/bolt/node_modules/qs/test/parse.js +174 -0
- package/node_modules/@slack/bolt/node_modules/qs/test/stringify.js +263 -33
- package/node_modules/@slack/bolt/node_modules/qs/test/utils.js +184 -0
- package/node_modules/@slack/web-api/node_modules/@types/node/README.md +1 -1
- package/node_modules/@slack/web-api/node_modules/@types/node/package.json +2 -2
- package/node_modules/@slack/web-api/node_modules/@types/node/util.d.ts +6 -3
- package/node_modules/typebox/build/format/duration.d.mts +2 -2
- package/node_modules/typebox/build/format/duration.mjs +2 -2
- package/node_modules/typebox/build/format/idn_email.d.mts +1 -0
- package/node_modules/typebox/build/format/idn_email.mjs +1 -0
- package/node_modules/typebox/build/format/idn_hostname.d.mts +1 -1
- package/node_modules/typebox/build/format/idn_hostname.mjs +1 -1
- package/node_modules/typebox/build/format/ipv4.d.mts +2 -2
- package/node_modules/typebox/build/format/ipv4.mjs +2 -2
- package/node_modules/typebox/build/format/ipv6.d.mts +1 -1
- package/node_modules/typebox/build/format/ipv6.mjs +1 -1
- package/node_modules/typebox/build/format/relative_json_pointer.d.mts +2 -2
- package/node_modules/typebox/build/format/relative_json_pointer.mjs +2 -2
- package/node_modules/typebox/build/schema/build.mjs +1 -0
- package/node_modules/typebox/build/schema/engine/_unique.d.mts +4 -2
- package/node_modules/typebox/build/schema/engine/_unique.mjs +7 -3
- package/node_modules/typebox/build/schema/engine/additionalItems.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/additionalProperties.d.mts +0 -3
- package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +15 -17
- package/node_modules/typebox/build/schema/engine/contains.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/index.d.mts +1 -0
- package/node_modules/typebox/build/schema/engine/index.mjs +1 -0
- package/node_modules/typebox/build/schema/engine/items.mjs +7 -4
- package/node_modules/typebox/build/schema/engine/maxContains.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/minContains.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/oneOf.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/patternProperties.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/unevaluatedItems.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/unevaluatedProperties.mjs +2 -2
- package/node_modules/typebox/build/system/hashing/hash.mjs +63 -34
- package/node_modules/typebox/build/system/locale/en_US.mjs +2 -1
- package/node_modules/typebox/build/system/memory/assign.d.mts +2 -8
- package/node_modules/typebox/build/system/memory/assign.mjs +13 -6
- package/node_modules/typebox/build/system/memory/clone.d.mts +4 -5
- package/node_modules/typebox/build/system/memory/clone.mjs +8 -96
- package/node_modules/typebox/build/system/memory/create.d.mts +1 -5
- package/node_modules/typebox/build/system/memory/create.mjs +18 -13
- package/node_modules/typebox/build/system/memory/deep.d.mts +2 -0
- package/node_modules/typebox/build/system/memory/deep.mjs +108 -0
- package/node_modules/typebox/build/system/memory/discard.d.mts +1 -1
- package/node_modules/typebox/build/system/memory/discard.mjs +9 -8
- package/node_modules/typebox/build/system/memory/finalize.d.mts +4 -0
- package/node_modules/typebox/build/system/memory/finalize.mjs +30 -0
- package/node_modules/typebox/build/system/memory/keys.d.mts +2 -0
- package/node_modules/typebox/build/system/memory/keys.mjs +8 -0
- package/node_modules/typebox/build/system/memory/update.d.mts +1 -4
- package/node_modules/typebox/build/system/memory/update.mjs +43 -16
- package/node_modules/typebox/build/type/engine/call/index.d.mts +1 -0
- package/node_modules/typebox/build/type/engine/call/index.mjs +1 -0
- package/node_modules/typebox/build/type/engine/evaluate/composite.d.mts +2 -24
- package/node_modules/typebox/build/type/engine/evaluate/composite.mjs +2 -29
- package/node_modules/typebox/build/type/engine/evaluate/index.d.mts +1 -0
- package/node_modules/typebox/build/type/engine/evaluate/index.mjs +1 -0
- package/node_modules/typebox/build/type/engine/evaluate/narrow.d.mts +5 -1
- package/node_modules/typebox/build/type/engine/evaluate/narrow.mjs +6 -1
- package/node_modules/typebox/build/type/engine/evaluate/property.d.mts +30 -0
- package/node_modules/typebox/build/type/engine/evaluate/property.mjs +29 -0
- package/node_modules/typebox/build/type/engine/immutable/instantiate_add.d.mts +1 -3
- package/node_modules/typebox/build/type/engine/immutable/instantiate_add.mjs +1 -4
- package/node_modules/typebox/build/type/engine/object/from_intersect.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/object/from_intersect.mjs +2 -2
- package/node_modules/typebox/build/type/engine/object/from_union.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/object/from_union.mjs +2 -2
- package/node_modules/typebox/build/type/engine/optional/instantiate_add.d.mts +1 -3
- package/node_modules/typebox/build/type/engine/optional/instantiate_add.mjs +1 -4
- package/node_modules/typebox/build/type/engine/readonly/instantiate_add.d.mts +1 -3
- package/node_modules/typebox/build/type/engine/readonly/instantiate_add.mjs +1 -4
- package/node_modules/typebox/build/type/engine/this/index.d.mts +1 -0
- package/node_modules/typebox/build/type/engine/this/index.mjs +1 -0
- package/node_modules/typebox/build/value/clone/clone.d.mts +4 -3
- package/node_modules/typebox/build/value/clone/clone.mjs +5 -7
- package/node_modules/typebox/build/value/repair/from_cyclic.d.mts +2 -0
- package/node_modules/typebox/build/value/repair/from_cyclic.mjs +6 -0
- package/node_modules/typebox/build/value/shared/union_priority_sort.mjs +25 -14
- package/node_modules/typebox/package.json +1 -1
- package/node_modules/typebox/readme.md +1 -1
- package/node_modules/undici/docs/docs/api/Interceptors.md +15 -2
- package/node_modules/undici/lib/dispatcher/client-h2.js +78 -3
- package/node_modules/undici/lib/dispatcher/pool-base.js +20 -3
- package/node_modules/undici/package.json +3 -3
- package/node_modules/undici/types/api.d.ts +1 -1
- package/node_modules/undici/types/utility.d.ts +4 -4
- package/node_modules/zod/package.json +1 -1
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +7 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +6 -0
- package/node_modules/zod/src/v4/core/compile.ts +9 -0
- package/node_modules/zod/src/v4/core/schemas.ts +35 -1
- package/node_modules/zod/src/v4/core/util.ts +13 -0
- package/node_modules/zod/src/v4/core/versions.ts +1 -1
- package/node_modules/zod/v4/core/compile.cjs +8 -0
- package/node_modules/zod/v4/core/compile.js +8 -0
- package/node_modules/zod/v4/core/schemas.cjs +30 -0
- package/node_modules/zod/v4/core/schemas.d.cts +3 -1
- package/node_modules/zod/v4/core/schemas.d.ts +3 -1
- package/node_modules/zod/v4/core/schemas.js +30 -0
- package/node_modules/zod/v4/core/util.cjs +15 -0
- package/node_modules/zod/v4/core/util.d.cts +2 -0
- package/node_modules/zod/v4/core/util.d.ts +2 -0
- package/node_modules/zod/v4/core/util.js +14 -0
- package/node_modules/zod/v4/core/versions.cjs +1 -1
- package/node_modules/zod/v4/core/versions.js +1 -1
- package/openclaw.plugin.json +6 -30
- package/package.json +7 -7
- package/dist/.setup/action-runtime.runtime-vLxx_7s2.mjs +0 -2
- package/dist/.setup/http-C9sM-FXe.mjs +0 -2
- package/dist/.setup/plugin-routes-D4qozHVn.mjs +0 -22
- package/dist/.setup/probe-IiHogLQN.mjs +0 -694
- package/dist/.setup/registry-DizWcnNp.mjs +0 -36
- package/dist/.setup/runtime-setter-api-CMFvhrAr.mjs +0 -3
- package/dist/.setup/secret-contract-api-DK9gZldc.mjs +0 -3
- package/dist/.setup/setup-plugin-api-BGD1TYnK.mjs +0 -3
- package/dist/.setup/shared-BhJHIZs1.mjs +0 -259
- package/dist/http-routes-api.js +0 -2
- package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/LICENSE +0 -22
- package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/README.md +0 -71
- package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/package.json +0 -52
- package/node_modules/@slack/bolt/node_modules/content-disposition/index.js +0 -536
- package/node_modules/@slack/bolt/node_modules/content-type/HISTORY.md +0 -29
- package/node_modules/@slack/bolt/node_modules/content-type/index.js +0 -225
- package/node_modules/@slack/bolt/node_modules/negotiator/node_modules/content-type/LICENSE +0 -22
- package/node_modules/@slack/bolt/node_modules/negotiator/node_modules/content-type/README.md +0 -71
- package/node_modules/@slack/bolt/node_modules/negotiator/node_modules/content-type/dist/index.d.ts +0 -46
- package/node_modules/@slack/bolt/node_modules/negotiator/node_modules/content-type/dist/index.js +0 -176
- package/node_modules/@slack/bolt/node_modules/negotiator/node_modules/content-type/dist/index.js.map +0 -1
- package/node_modules/@slack/bolt/node_modules/negotiator/node_modules/content-type/package.json +0 -52
- package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/LICENSE +0 -22
- package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/README.md +0 -71
- package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/dist/index.d.ts +0 -46
- package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/dist/index.js +0 -176
- package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/dist/index.js.map +0 -1
- package/node_modules/@slack/bolt/node_modules/type-is/node_modules/content-type/package.json +0 -52
- package/node_modules/typebox/build/system/memory/freeze.d.mts +0 -4
- package/node_modules/typebox/build/system/memory/freeze.mjs +0 -6
- /package/node_modules/@slack/bolt/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.d.ts +0 -0
- /package/node_modules/@slack/bolt/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.js +0 -0
- /package/node_modules/@slack/bolt/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.js.map +0 -0
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { resolveGlobalMap } from "openclaw/plugin-sdk/global-singleton";
|
|
2
|
-
//#region extensions/slack/src/http/paths.ts
|
|
3
|
-
function normalizeSlackWebhookPath(path) {
|
|
4
|
-
const trimmed = path?.trim();
|
|
5
|
-
if (!trimmed) return "/slack/events";
|
|
6
|
-
return trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
|
|
7
|
-
}
|
|
8
|
-
//#endregion
|
|
9
|
-
//#region extensions/slack/src/http/registry.ts
|
|
10
|
-
const slackHttpRoutes = resolveGlobalMap(Symbol.for("openclaw.slack.httpRoutes.v1"));
|
|
11
|
-
function registerSlackHttpHandler(params) {
|
|
12
|
-
const normalizedPath = normalizeSlackWebhookPath(params.path);
|
|
13
|
-
const routes = slackHttpRoutes;
|
|
14
|
-
if (routes.has(normalizedPath)) {
|
|
15
|
-
const suffix = params.accountId ? ` for account "${params.accountId}"` : "";
|
|
16
|
-
params.log?.(`slack: webhook path ${normalizedPath} already registered${suffix}`);
|
|
17
|
-
return () => {};
|
|
18
|
-
}
|
|
19
|
-
const handler = params.handler;
|
|
20
|
-
routes.set(normalizedPath, handler);
|
|
21
|
-
let registered = true;
|
|
22
|
-
return () => {
|
|
23
|
-
if (!registered) return;
|
|
24
|
-
registered = false;
|
|
25
|
-
if (routes.get(normalizedPath) === handler) routes.delete(normalizedPath);
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
async function handleSlackHttpRequest(req, res) {
|
|
29
|
-
const url = new URL(req.url ?? "/", "http://localhost");
|
|
30
|
-
const handler = slackHttpRoutes.get(url.pathname);
|
|
31
|
-
if (!handler) return false;
|
|
32
|
-
await handler(req, res);
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
//#endregion
|
|
36
|
-
export { registerSlackHttpHandler as n, normalizeSlackWebhookPath as r, handleSlackHttpRequest as t };
|
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
import { r as isSlackPluginAccountConfigured } from "./account-configured-zcR9TJJN.mjs";
|
|
2
|
-
import { a as mergeSlackAccountConfig, c as resolveSlackAccountAllowFrom, i as listSlackAccountIds, l as resolveSlackAccountDmPolicy } from "./accounts-msihSF3-.mjs";
|
|
3
|
-
import { t as inspectSlackAccount } from "./account-inspect-CmkKiSb9.mjs";
|
|
4
|
-
import { a as parseSlackTarget } from "./target-parsing-FFE26kOV.mjs";
|
|
5
|
-
import { a as slackIngressIdentity, t as probeSlack } from "./probe-IiHogLQN.mjs";
|
|
6
|
-
import { n as SLACK_CHANNEL_META } from "./channel-meta-C443t-lI.mjs";
|
|
7
|
-
import { r as slackBaseConfigAdapter, t as slackSetupPlugin } from "./channel.setup-CzFw73mU.mjs";
|
|
8
|
-
import { n as normalizeCompatibilityConfig, r as runtime_doctor_migrations_exports, t as legacyConfigRules } from "./doctor-contract-Cd4-VzIM.mjs";
|
|
9
|
-
import { n as collectRuntimeConfigAssignments, r as secretTargetRegistryEntries } from "./secret-contract-vVRMoE1D.mjs";
|
|
10
|
-
import { adaptScopedAccountAccessor, createScopedDmSecurityResolver } from "openclaw/plugin-sdk/channel-config-helpers";
|
|
11
|
-
import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
|
|
12
|
-
import { buildMutableAllowEntryDetector, collectStandardAllowlistLists, createConditionalWarningCollector, createDangerousNameMatchingMutableAllowlistWarningCollector, createOpenProviderConfiguredRouteWarningCollector } from "openclaw/plugin-sdk/channel-policy";
|
|
13
|
-
import { identityEntryAuthenticationClassifier } from "openclaw/plugin-sdk/channel-ingress-runtime";
|
|
14
|
-
import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
|
|
15
|
-
//#region extensions/slack/src/security.ts
|
|
16
|
-
const resolveSlackDmPolicy = createScopedDmSecurityResolver({
|
|
17
|
-
channelKey: "slack",
|
|
18
|
-
resolvePolicy: (account) => account.config.dmPolicy,
|
|
19
|
-
resolveAllowFrom: (account) => account.config.allowFrom,
|
|
20
|
-
resolveAccess: ({ cfg, account }) => ({
|
|
21
|
-
dmPolicy: resolveSlackAccountDmPolicy({
|
|
22
|
-
cfg,
|
|
23
|
-
accountId: account.accountId
|
|
24
|
-
}),
|
|
25
|
-
allowFrom: resolveSlackAccountAllowFrom({
|
|
26
|
-
cfg,
|
|
27
|
-
accountId: account.accountId
|
|
28
|
-
})
|
|
29
|
-
}),
|
|
30
|
-
policyPathSuffix: "dmPolicy",
|
|
31
|
-
classifyEntryAuthentication: identityEntryAuthenticationClassifier(slackIngressIdentity),
|
|
32
|
-
normalizeEntry: (raw) => raw.trim().replace(/^(slack|user):/i, "").trim()
|
|
33
|
-
});
|
|
34
|
-
const collectSlackSecurityWarnings = createOpenProviderConfiguredRouteWarningCollector({
|
|
35
|
-
providerConfigPresent: (cfg) => cfg.channels?.slack !== void 0,
|
|
36
|
-
resolveGroupPolicy: (account) => account.config.groupPolicy,
|
|
37
|
-
resolveRouteAllowlistConfigured: (account) => Boolean(account.config.channels) && Object.keys(account.config.channels ?? {}).length > 0,
|
|
38
|
-
configureRouteAllowlist: {
|
|
39
|
-
surface: "Slack channels",
|
|
40
|
-
openScope: "any channel not explicitly denied",
|
|
41
|
-
groupPolicyPath: "channels.slack.groupPolicy",
|
|
42
|
-
routeAllowlistPath: "channels.slack.channels"
|
|
43
|
-
},
|
|
44
|
-
missingRouteAllowlist: {
|
|
45
|
-
surface: "Slack channels",
|
|
46
|
-
openBehavior: "with no channel allowlist; any channel can trigger (mention-gated)",
|
|
47
|
-
remediation: "Set channels.slack.groupPolicy=\"allowlist\" and configure channels.slack.channels"
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
const collectSlackSecurityFindings = createConditionalWarningCollector.findings({
|
|
51
|
-
collectWarnings: collectSlackSecurityWarnings,
|
|
52
|
-
checkId: "channels.slack.groups.open",
|
|
53
|
-
severity: "warn",
|
|
54
|
-
title: "Slack security warning"
|
|
55
|
-
});
|
|
56
|
-
const loadSlackSecurityAuditModule = createLazyRuntimeModule(() => import("./security-audit-DFGiFLqd.mjs").then((n) => n.n));
|
|
57
|
-
const slackSecurityAdapter = {
|
|
58
|
-
resolveDmPolicy: resolveSlackDmPolicy,
|
|
59
|
-
collectWarnings: collectSlackSecurityFindings,
|
|
60
|
-
collectAuditFindings: async (params) => {
|
|
61
|
-
const { collectSlackSecurityAuditFindings } = await loadSlackSecurityAuditModule();
|
|
62
|
-
return await collectSlackSecurityAuditFindings(params);
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
//#endregion
|
|
66
|
-
//#region extensions/slack/src/security-doctor.ts
|
|
67
|
-
const isSlackMutableUnqualifiedAllowEntry = buildMutableAllowEntryDetector({ stableIdPattern: /^(?:(?:(?:[sS][lL][aA][cC][kK]|[uU][sS][eE][rR]):)?(?:[UWBCGDT][A-Z0-9]{2,}|[A-Za-z0-9]{8,})|<@[A-Za-z0-9]{8,}>)$/ });
|
|
68
|
-
function isSlackMutableAllowEntry(entry) {
|
|
69
|
-
if (/^team:/i.test(entry)) try {
|
|
70
|
-
const target = parseSlackTarget(entry);
|
|
71
|
-
if (target?.kind === "user" && target.teamId) return false;
|
|
72
|
-
} catch {}
|
|
73
|
-
return isSlackMutableUnqualifiedAllowEntry(entry);
|
|
74
|
-
}
|
|
75
|
-
//#endregion
|
|
76
|
-
//#region extensions/slack/src/doctor.ts
|
|
77
|
-
const collectSlackMutableAllowlistWarnings = createDangerousNameMatchingMutableAllowlistWarningCollector({
|
|
78
|
-
channel: "slack",
|
|
79
|
-
detector: isSlackMutableAllowEntry,
|
|
80
|
-
collectLists: (scope) => collectStandardAllowlistLists(scope, {
|
|
81
|
-
includeGroupAllowFrom: false,
|
|
82
|
-
includeDm: true,
|
|
83
|
-
includeGroups: true,
|
|
84
|
-
groupsKey: "channels",
|
|
85
|
-
groupField: "users"
|
|
86
|
-
})
|
|
87
|
-
});
|
|
88
|
-
const SLACK_CANONICAL_CHANNEL_ID_RE = /^(?:channel:)?[CG][A-Z0-9]{8,}$/;
|
|
89
|
-
const SLACK_LOWERCASE_CHANNEL_ID_RE = /^(?:channel:)?[cg][0-9][a-z0-9]{7,}$/;
|
|
90
|
-
const SLACK_CANONICAL_DM_ID_RE = /^(?:channel:)?D[A-Z0-9]{8,}$/;
|
|
91
|
-
const SLACK_PREFIXED_LOWERCASE_DM_ID_RE = /^channel:d[a-z0-9]{8,}$/;
|
|
92
|
-
const SLACK_AMBIGUOUS_LOWERCASE_DM_ID_RE = /^d[a-z0-9]{8,}$/;
|
|
93
|
-
const SLACK_AMBIGUOUS_LOWERCASE_CHANNEL_ID_RE = /^(?:channel:)?[cgd][a-z][a-z0-9]{7,}$/;
|
|
94
|
-
const SLACK_CHANNEL_NAME_RE = /^[\p{L}\p{M}\p{N}_-]{1,80}$/u;
|
|
95
|
-
const SLACK_CHANNEL_NAME_ALPHANUMERIC_RE = /[\p{L}\p{N}]/u;
|
|
96
|
-
function looksLikeSlackChannelId(channelKey) {
|
|
97
|
-
const workspaceChannelId = parseWorkspaceQualifiedChannelId(channelKey);
|
|
98
|
-
return workspaceChannelId !== void 0 && /^[CG]/i.test(workspaceChannelId) || SLACK_CANONICAL_CHANNEL_ID_RE.test(channelKey) || SLACK_LOWERCASE_CHANNEL_ID_RE.test(channelKey);
|
|
99
|
-
}
|
|
100
|
-
function looksLikeSlackDmId(channelKey) {
|
|
101
|
-
const workspaceChannelId = parseWorkspaceQualifiedChannelId(channelKey);
|
|
102
|
-
return workspaceChannelId !== void 0 && /^D/i.test(workspaceChannelId) || SLACK_CANONICAL_DM_ID_RE.test(channelKey) || SLACK_PREFIXED_LOWERCASE_DM_ID_RE.test(channelKey);
|
|
103
|
-
}
|
|
104
|
-
function parseWorkspaceQualifiedChannelId(channelKey) {
|
|
105
|
-
if (!/^team:/i.test(channelKey)) return;
|
|
106
|
-
try {
|
|
107
|
-
const target = parseSlackTarget(channelKey);
|
|
108
|
-
return target?.kind === "channel" && target.teamId ? target.id : void 0;
|
|
109
|
-
} catch {
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
function looksLikeSlackChannelNameKey(channelKey) {
|
|
114
|
-
const name = channelKey.startsWith("#") ? channelKey.slice(1) : channelKey;
|
|
115
|
-
return name === name.toLowerCase() && SLACK_CHANNEL_NAME_RE.test(name) && SLACK_CHANNEL_NAME_ALPHANUMERIC_RE.test(name);
|
|
116
|
-
}
|
|
117
|
-
function collectSlackNameKeyedChannelWarnings({ cfg }) {
|
|
118
|
-
const warnings = /* @__PURE__ */ new Set();
|
|
119
|
-
const slackCfg = (0, runtime_doctor_migrations_exports.asObjectRecord)((0, runtime_doctor_migrations_exports.asObjectRecord)(cfg.channels)?.slack);
|
|
120
|
-
const providerChannels = (0, runtime_doctor_migrations_exports.asObjectRecord)(slackCfg?.channels);
|
|
121
|
-
const accounts = (0, runtime_doctor_migrations_exports.asObjectRecord)(slackCfg?.accounts);
|
|
122
|
-
for (const accountId of listSlackAccountIds(cfg)) {
|
|
123
|
-
const account = (0, runtime_doctor_migrations_exports.asObjectRecord)(mergeSlackAccountConfig(cfg, accountId));
|
|
124
|
-
if (!account || slackCfg?.enabled === false || account.enabled === false) continue;
|
|
125
|
-
const effectiveGroupPolicy = (typeof account.groupPolicy === "string" ? account.groupPolicy : void 0) ?? "allowlist";
|
|
126
|
-
const rawAccount = (0, runtime_doctor_migrations_exports.asObjectRecord)(accounts?.[accountId]);
|
|
127
|
-
const accountPrefix = rawAccount ? `channels.slack.accounts.${accountId}` : "channels.slack";
|
|
128
|
-
const accountChannels = (0, runtime_doctor_migrations_exports.asObjectRecord)(rawAccount?.channels);
|
|
129
|
-
const channels = accountChannels ?? providerChannels;
|
|
130
|
-
if (!channels) continue;
|
|
131
|
-
const channelsPrefix = accountChannels ? `channels.slack.accounts.${accountId}` : "channels.slack";
|
|
132
|
-
const fallbackDescription = Object.hasOwn(channels, "*") ? `${channelsPrefix}.channels."*" applies instead and this entry's overrides are ignored` : effectiveGroupPolicy === "open" ? "this entry's overrides are ignored and the channel remains allowed by groupPolicy: \"open\"" : "messages from the channel are dropped";
|
|
133
|
-
for (const channelKey of Object.keys(channels)) {
|
|
134
|
-
if (channelKey === "*") continue;
|
|
135
|
-
if (looksLikeSlackDmId(channelKey)) {
|
|
136
|
-
warnings.add(`${channelsPrefix}.channels."${channelKey}" is a Slack DM conversation ID, but ${channelsPrefix}.channels only configures channel and group rooms. Configure DM access with ${accountPrefix}.dmPolicy and ${accountPrefix}.allowFrom instead.`);
|
|
137
|
-
continue;
|
|
138
|
-
}
|
|
139
|
-
if (SLACK_AMBIGUOUS_LOWERCASE_DM_ID_RE.test(channelKey)) {
|
|
140
|
-
if (account.dangerouslyAllowNameMatching === true && looksLikeSlackChannelNameKey(channelKey)) continue;
|
|
141
|
-
warnings.add(`${channelsPrefix}.channels."${channelKey}" is ambiguous: it may be a lowercase Slack DM conversation ID or a channel name. Configure DMs with ${accountPrefix}.dmPolicy and ${accountPrefix}.allowFrom; otherwise re-key the room with its stable C/G ID.`);
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
if (effectiveGroupPolicy === "disabled") continue;
|
|
145
|
-
const channelConfig = (0, runtime_doctor_migrations_exports.asObjectRecord)(channels[channelKey]);
|
|
146
|
-
if (effectiveGroupPolicy === "open" && Object.keys(channelConfig ?? {}).length === 0) continue;
|
|
147
|
-
if (looksLikeSlackChannelId(channelKey)) continue;
|
|
148
|
-
if (account.dangerouslyAllowNameMatching === true && looksLikeSlackChannelNameKey(channelKey)) continue;
|
|
149
|
-
if (SLACK_AMBIGUOUS_LOWERCASE_CHANNEL_ID_RE.test(channelKey)) {
|
|
150
|
-
warnings.add(`${channelsPrefix}.channels."${channelKey}" is ambiguous: it may be a lowercase Slack channel ID or a channel name. If it is a channel name, inbound routing will not match it and ${fallbackDescription}. Re-key it with the channel's stable ID (e.g. C0123ABCD, from the channel's About details or conversations.info).`);
|
|
151
|
-
continue;
|
|
152
|
-
}
|
|
153
|
-
warnings.add(`${channelsPrefix}.channels."${channelKey}" is keyed by a channel name or unsupported ID form, not a routable Slack channel ID; under groupPolicy: "${effectiveGroupPolicy}" inbound routing does not match this entry, so ${fallbackDescription}. Re-key it with the channel's ID (e.g. C0123ABCD, from the channel's About details or conversations.info).`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return [...warnings];
|
|
157
|
-
}
|
|
158
|
-
async function collectSlackUserIdentityWarnings(params) {
|
|
159
|
-
const warnings = [];
|
|
160
|
-
for (const accountId of listSlackAccountIds(params.cfg)) {
|
|
161
|
-
const account = inspectSlackAccount({
|
|
162
|
-
cfg: params.cfg,
|
|
163
|
-
accountId,
|
|
164
|
-
envBotToken: params.env?.SLACK_BOT_TOKEN,
|
|
165
|
-
envAppToken: params.env?.SLACK_APP_TOKEN,
|
|
166
|
-
envUserToken: params.env?.SLACK_USER_TOKEN
|
|
167
|
-
});
|
|
168
|
-
if (!account.enabled || account.identity !== "user") continue;
|
|
169
|
-
const path = accountId === "default" ? "channels.slack" : `channels.slack.accounts.${accountId}`;
|
|
170
|
-
const mode = account.mode ?? "socket";
|
|
171
|
-
if (mode === "socket" && account.appTokenStatus === "missing") warnings.push(`- ${path}: identity "user" in Socket Mode requires appToken for companion-app events.`);
|
|
172
|
-
else if (mode === "http" && account.signingSecretStatus === "missing") warnings.push(`- ${path}: identity "user" in HTTP mode requires signingSecret for companion-app events.`);
|
|
173
|
-
if (!account.userToken) {
|
|
174
|
-
warnings.push(account.userTokenStatus === "configured_unavailable" ? `- ${path}: userToken is configured but unavailable; Slack auth.test validation was skipped.` : `- ${path}: identity "user" requires userToken for the authorizing human.`);
|
|
175
|
-
continue;
|
|
176
|
-
}
|
|
177
|
-
const probe = await probeSlack(account.userToken, 2500, {
|
|
178
|
-
accountId,
|
|
179
|
-
identity: "user"
|
|
180
|
-
});
|
|
181
|
-
if (!probe.ok) {
|
|
182
|
-
warnings.push(`- ${path}: userToken auth.test failed: ${probe.error ?? "unknown error"}.`);
|
|
183
|
-
continue;
|
|
184
|
-
}
|
|
185
|
-
const userId = probe.user?.id?.trim();
|
|
186
|
-
const userName = probe.user?.name?.trim();
|
|
187
|
-
if (!userId) {
|
|
188
|
-
warnings.push(`- ${path}: userToken auth.test succeeded but returned no human user_id.`);
|
|
189
|
-
continue;
|
|
190
|
-
}
|
|
191
|
-
warnings.push(`- ${path}: user identity authenticated as ${userName ? `@${userName} ` : ""}(${userId}).`);
|
|
192
|
-
}
|
|
193
|
-
return warnings;
|
|
194
|
-
}
|
|
195
|
-
const slackDoctor = {
|
|
196
|
-
dmAllowFromMode: "topOnly",
|
|
197
|
-
groupModel: "route",
|
|
198
|
-
groupAllowFromFallbackToAllowFrom: false,
|
|
199
|
-
warnOnEmptyGroupSenderAllowlist: false,
|
|
200
|
-
legacyConfigRules,
|
|
201
|
-
normalizeCompatibilityConfig,
|
|
202
|
-
collectPreviewWarnings: collectSlackUserIdentityWarnings,
|
|
203
|
-
collectMutableAllowlistWarnings: ({ cfg }) => [...collectSlackMutableAllowlistWarnings({ cfg }), ...collectSlackNameKeyedChannelWarnings({ cfg })]
|
|
204
|
-
};
|
|
205
|
-
//#endregion
|
|
206
|
-
//#region extensions/slack/src/shared.ts
|
|
207
|
-
const slackConfigAdapter = {
|
|
208
|
-
...slackBaseConfigAdapter,
|
|
209
|
-
inspectAccount: adaptScopedAccountAccessor(inspectSlackAccount)
|
|
210
|
-
};
|
|
211
|
-
const slackPluginBase = {
|
|
212
|
-
...slackSetupPlugin,
|
|
213
|
-
meta: {
|
|
214
|
-
...SLACK_CHANNEL_META,
|
|
215
|
-
preferSessionLookupForAnnounceTarget: true
|
|
216
|
-
},
|
|
217
|
-
doctor: slackDoctor,
|
|
218
|
-
agentPrompt: {
|
|
219
|
-
customInlineButtonHint: true,
|
|
220
|
-
inboundFormattingHints: () => ({
|
|
221
|
-
text_markup: "markdown",
|
|
222
|
-
rules: [
|
|
223
|
-
"Write replies in standard Markdown; OpenClaw converts them to Slack mrkdwn.",
|
|
224
|
-
"Bold uses **double asterisks**; *single asterisks* or _underscores_ produce italics.",
|
|
225
|
-
"Links use [label](url). Keep Slack mentions as <@USER_ID>.",
|
|
226
|
-
"Use presentation table blocks for tabular data; Markdown pipe tables are not auto-promoted.",
|
|
227
|
-
"Only raw Block Kit or presentation text fields use Slack mrkdwn directly: *bold*, _italic_, ~strike~, and <url|label> links. Avoid Markdown headings or pipe tables in those fields."
|
|
228
|
-
]
|
|
229
|
-
}),
|
|
230
|
-
messageToolHints: () => [
|
|
231
|
-
"- Use `presentation` buttons/selects for discrete choices or parameter picks instead of asking the user to type one.",
|
|
232
|
-
"- For line, bar, area, or pie data, use a `presentation` chart block; Slack renders it as a native chart and retains a text data summary for accessibility.",
|
|
233
|
-
"- For row-and-column data, use an explicit `presentation` table block; Slack renders it as a native table and retains a linear text summary for accessibility. Markdown pipe tables are not auto-promoted.",
|
|
234
|
-
"- Slack plain text sends: write standard Markdown; OpenClaw converts it to Slack mrkdwn, including `**bold**`, headings, lists, and `[label](url)` links.",
|
|
235
|
-
"- When mentioning Slack users, use the stable `<@USER_ID>` token from Slack context instead of plain `@name` text so Slack notifies and links the user.",
|
|
236
|
-
"- Slack Block Kit or presentation text fields are sent as Slack mrkdwn directly; use `*bold*`, `_italic_`, `~strike~`, `<url|label>` links, and avoid Markdown headings or pipe tables there."
|
|
237
|
-
]
|
|
238
|
-
},
|
|
239
|
-
security: slackSecurityAdapter,
|
|
240
|
-
config: {
|
|
241
|
-
...slackSetupPlugin.config,
|
|
242
|
-
...slackConfigAdapter,
|
|
243
|
-
isConfigured: isSlackPluginAccountConfigured,
|
|
244
|
-
describeAccount: (account) => describeAccountSnapshot({
|
|
245
|
-
account,
|
|
246
|
-
configured: isSlackPluginAccountConfigured(account),
|
|
247
|
-
extra: {
|
|
248
|
-
botTokenSource: account.botTokenSource,
|
|
249
|
-
appTokenSource: account.appTokenSource
|
|
250
|
-
}
|
|
251
|
-
})
|
|
252
|
-
},
|
|
253
|
-
secrets: {
|
|
254
|
-
secretTargetRegistryEntries,
|
|
255
|
-
collectRuntimeConfigAssignments
|
|
256
|
-
}
|
|
257
|
-
};
|
|
258
|
-
//#endregion
|
|
259
|
-
export { slackPluginBase as n, slackSecurityAdapter as r, slackConfigAdapter as t };
|
package/dist/http-routes-api.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
(The MIT License)
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2015 Douglas Christopher Wilson
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
|
-
a copy of this software and associated documentation files (the
|
|
7
|
-
'Software'), to deal in the Software without restriction, including
|
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
|
11
|
-
the following conditions:
|
|
12
|
-
|
|
13
|
-
The above copyright notice and this permission notice shall be
|
|
14
|
-
included in all copies or substantial portions of the Software.
|
|
15
|
-
|
|
16
|
-
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
19
|
-
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
20
|
-
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
21
|
-
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
22
|
-
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/README.md
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# content-type
|
|
2
|
-
|
|
3
|
-
[![NPM version][npm-image]][npm-url]
|
|
4
|
-
[![NPM downloads][downloads-image]][downloads-url]
|
|
5
|
-
[![Build status][build-image]][build-url]
|
|
6
|
-
[![Build coverage][coverage-image]][coverage-url]
|
|
7
|
-
[![License][license-image]][license-url]
|
|
8
|
-
|
|
9
|
-
Create and parse HTTP `Content-Type` header.
|
|
10
|
-
|
|
11
|
-
## Installation
|
|
12
|
-
|
|
13
|
-
```sh
|
|
14
|
-
npm install content-type
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## API
|
|
18
|
-
|
|
19
|
-
```js
|
|
20
|
-
const contentType = require("content-type");
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
### contentType.parse(string, options?)
|
|
24
|
-
|
|
25
|
-
```js
|
|
26
|
-
const obj = contentType.parse("image/svg+xml; charset=utf-8");
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
Parse a `Content-Type` header. This will return an object with the following properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`):
|
|
30
|
-
|
|
31
|
-
- `type`: The media type. Example: `'image/svg+xml'`.
|
|
32
|
-
- `parameters`: An object of the parameters in the media type (parameter name is always lower case). Example: `{charset: 'utf-8'}`.
|
|
33
|
-
|
|
34
|
-
The parser is lenient and does not error. You should validate `type` and `parameters` before trusting them.
|
|
35
|
-
|
|
36
|
-
#### Options
|
|
37
|
-
|
|
38
|
-
- `parameters` (default: `true`): Set to `false` to skip parameters.
|
|
39
|
-
- `comma` (default: `false`): Set to `true` to stop on a comma. This can be used to parse the media range in an `Accept` header.
|
|
40
|
-
- `start` (default: `0`): Set index to start parsing from.
|
|
41
|
-
|
|
42
|
-
### contentType.format(obj)
|
|
43
|
-
|
|
44
|
-
```js
|
|
45
|
-
const str = contentType.format({
|
|
46
|
-
type: "image/svg+xml",
|
|
47
|
-
parameters: { charset: "utf-8" },
|
|
48
|
-
});
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Format an object into a `Content-Type` header. This will return a string of the content type for the given object with the following properties (examples are shown that produce the string `'image/svg+xml; charset=utf-8'`):
|
|
52
|
-
|
|
53
|
-
- `type`: The media type. Example: `'image/svg+xml'`.
|
|
54
|
-
- `parameters`: An optional object of the parameters in the media type. Example: `{charset: 'utf-8'}`.
|
|
55
|
-
|
|
56
|
-
Throws a `TypeError` if the object contains an invalid type or parameter names.
|
|
57
|
-
|
|
58
|
-
## License
|
|
59
|
-
|
|
60
|
-
[MIT](LICENSE)
|
|
61
|
-
|
|
62
|
-
[npm-image]: https://img.shields.io/npm/v/content-type
|
|
63
|
-
[npm-url]: https://npmjs.org/package/content-type
|
|
64
|
-
[downloads-image]: https://img.shields.io/npm/dm/content-type
|
|
65
|
-
[downloads-url]: https://npmjs.org/package/content-type
|
|
66
|
-
[build-image]: https://img.shields.io/github/actions/workflow/status/jshttp/content-type/ci.yml?branch=master
|
|
67
|
-
[build-url]: https://github.com/jshttp/content-type/actions/workflows/ci.yml?query=branch%3Amaster
|
|
68
|
-
[coverage-image]: https://img.shields.io/codecov/c/gh/jshttp/content-type
|
|
69
|
-
[coverage-url]: https://codecov.io/gh/jshttp/content-type
|
|
70
|
-
[license-image]: http://img.shields.io/npm/l/content-type.svg?style=flat
|
|
71
|
-
[license-url]: LICENSE
|
package/node_modules/@slack/bolt/node_modules/body-parser/node_modules/content-type/package.json
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "content-type",
|
|
3
|
-
"version": "2.1.0",
|
|
4
|
-
"description": "Create and parse HTTP Content-Type header",
|
|
5
|
-
"keywords": [
|
|
6
|
-
"content-type",
|
|
7
|
-
"http",
|
|
8
|
-
"req",
|
|
9
|
-
"res",
|
|
10
|
-
"rfc7231",
|
|
11
|
-
"rfc9110"
|
|
12
|
-
],
|
|
13
|
-
"repository": "jshttp/content-type",
|
|
14
|
-
"funding": {
|
|
15
|
-
"type": "opencollective",
|
|
16
|
-
"url": "https://opencollective.com/express"
|
|
17
|
-
},
|
|
18
|
-
"license": "MIT",
|
|
19
|
-
"author": "Douglas Christopher Wilson <doug@somethingdoug.com>",
|
|
20
|
-
"type": "commonjs",
|
|
21
|
-
"exports": "./dist/index.js",
|
|
22
|
-
"main": "./dist/index.js",
|
|
23
|
-
"typings": "./dist/index.d.ts",
|
|
24
|
-
"files": [
|
|
25
|
-
"dist/"
|
|
26
|
-
],
|
|
27
|
-
"scripts": {
|
|
28
|
-
"bench": "vitest bench",
|
|
29
|
-
"build": "ts-scripts build",
|
|
30
|
-
"format": "ts-scripts format",
|
|
31
|
-
"prepare": "ts-scripts install && npm run build",
|
|
32
|
-
"specs": "ts-scripts specs",
|
|
33
|
-
"test": "ts-scripts test"
|
|
34
|
-
},
|
|
35
|
-
"devDependencies": {
|
|
36
|
-
"@borderless/ts-scripts": "^0.15.0",
|
|
37
|
-
"@vitest/coverage-v8": "^3.0.5",
|
|
38
|
-
"typescript": "^5.7.3",
|
|
39
|
-
"vitest": "^3.2.4"
|
|
40
|
-
},
|
|
41
|
-
"engines": {
|
|
42
|
-
"node": ">=18"
|
|
43
|
-
},
|
|
44
|
-
"ts-scripts": {
|
|
45
|
-
"dist": [
|
|
46
|
-
"dist"
|
|
47
|
-
],
|
|
48
|
-
"project": [
|
|
49
|
-
"tsconfig.build.json"
|
|
50
|
-
]
|
|
51
|
-
}
|
|
52
|
-
}
|