@openclaw/msteams 2026.10.10-beta.5 → 2026.10.10
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/{adapter.runtime-B-6Q3nMI.cjs → adapter.runtime-BMvpm7sS.cjs} +3 -5
- package/dist/.setup/{approval-card-DWPDItvq.cjs → approval-card-Bo8kHYbj.cjs} +2 -4
- package/dist/.setup/{approval-handler.runtime-CGIr9ItR.cjs → approval-handler.runtime-BS3avHFu.cjs} +5 -6
- package/dist/.setup/{bot-framework-service-url-B3FWn2SV.cjs → bot-framework-service-url-CgVuKiIR.cjs} +2 -4
- package/dist/.setup/{channel-Du4L0JEh.cjs → channel-CdCSk3Rg.cjs} +27 -47
- package/dist/.setup/{channel.runtime-3-5Ty0Vy.cjs → channel.runtime--ZjTYgkY.cjs} +17 -26
- package/dist/.setup/{channel.setup-BN3uhq3r.cjs → channel.setup-nSTtK77J.cjs} +11 -17
- package/dist/.setup/{config-schema-CkKdphSp.cjs → config-schema-Bm15lF-j.cjs} +5 -8
- package/dist/.setup/{conversation-store-state-B-4g4uq5.cjs → conversation-store-state-NJU9osd-.cjs} +23 -40
- package/dist/.setup/{delegated-state-Bv5cWuec.cjs → delegated-state-CbMd3rIh.cjs} +4 -6
- package/dist/.setup/{monitor-DK0bsDpk.cjs → monitor-BxLDs5fk.cjs} +46 -81
- package/dist/.setup/{oauth-BBUQCwmq.cjs → oauth-B-Y5pNM4.cjs} +3 -5
- package/dist/.setup/{reaction-types-CwP5RVQB.cjs → reaction-types-BaL1EVBS.cjs} +3 -5
- package/dist/.setup/{resolve-allowlist-gI34MnpE.cjs → resolve-allowlist-CqNzS9bZ.cjs} +19 -34
- package/dist/.setup/{rolldown-runtime-BloeesfJ.cjs → rolldown-runtime-CiKaZLfC.cjs} +1 -2
- package/dist/.setup/{runtime-gZTAuFux.cjs → runtime-CbKazLGv.cjs} +1 -2
- package/dist/.setup/{secret-contract-api-YY3v6MP8.cjs → secret-contract-api-5aH1Fl_c.cjs} +1 -1
- package/dist/.setup/{secret-contract-api-wAyY5UHv.cjs → secret-contract-api-BOzdWSn9.cjs} +1 -2
- package/dist/.setup/{send-ZvscULyk.cjs → send-BXjI3ufq.cjs} +9 -11
- package/dist/.setup/{setup-plugin-api-B-NYBLkF.cjs → setup-plugin-api-lPpin6Gg.cjs} +1 -1
- package/dist/.setup/{thread-session-BWVCoYza.cjs → thread-session-DZMoCsSR.cjs} +3 -5
- package/dist/.setup/{token-config-bEpua_Q7.cjs → token-config-DTZ00Ibq.cjs} +1 -2
- package/dist/.source-module-urls/7e43ee3ae4faab430a47269c8217f8d99ec60ecd85233f40e81d03efeb543068.json +1 -1
- package/dist/api.cjs +2 -2
- package/dist/channel-config-api.cjs +1 -1
- package/dist/channel-plugin-api.cjs +1 -1
- package/dist/configured-state.cjs +1 -2
- package/dist/directory-contract-api.cjs +1 -2
- package/dist/doctor-backup-resources.cjs +2 -3
- package/dist/doctor-contract-api.cjs +9 -15
- package/dist/index.cjs +1 -2
- package/dist/qa-runner-api.cjs +3 -5
- package/dist/runtime-api.cjs +1 -1
- package/dist/secret-contract-api.cjs +1 -1
- package/dist/setup-entry.cjs +3 -4
- package/dist/setup-plugin-api.cjs +1 -1
- package/package.json +4 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_rolldown_runtime = require("./rolldown-runtime-
|
|
1
|
+
const require_rolldown_runtime = require("./rolldown-runtime-CiKaZLfC.cjs");
|
|
2
2
|
let node_url = require("node:url");
|
|
3
3
|
let openclaw_plugin_sdk_ssrf_runtime = require("openclaw/plugin-sdk/ssrf-runtime");
|
|
4
4
|
let openclaw_plugin_sdk_error_runtime = require("openclaw/plugin-sdk/error-runtime");
|
|
@@ -10,7 +10,7 @@ node_fs_promises = require_rolldown_runtime.__toESM(node_fs_promises, 1);
|
|
|
10
10
|
let node_timers_promises = require("node:timers/promises");
|
|
11
11
|
let node_events = require("node:events");
|
|
12
12
|
let node_http = require("node:http");
|
|
13
|
-
|
|
13
|
+
// extensions/msteams/src/qa/bot-framework-server.ts
|
|
14
14
|
const AMBIGUOUS_GATEWAY_TIMEOUT_MARKER = "QA-MSTEAMS-AMBIGUOUS-504";
|
|
15
15
|
async function readJson(request) {
|
|
16
16
|
const chunks = [];
|
|
@@ -71,8 +71,7 @@ async function startMSTeamsQaBotFrameworkServer(options) {
|
|
|
71
71
|
}
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
|
-
|
|
75
|
-
//#region extensions/msteams/src/qa/adapter.runtime.ts
|
|
74
|
+
// extensions/msteams/src/qa/adapter.runtime.ts
|
|
76
75
|
const SERVICE_URL = "https://smba.trafficmanager.net/qa";
|
|
77
76
|
const APP_ID = "qa-msteams-app";
|
|
78
77
|
const TENANT_ID = "qa-msteams-tenant";
|
|
@@ -305,5 +304,4 @@ async function createMSTeamsQaTransportAdapter(context) {
|
|
|
305
304
|
}
|
|
306
305
|
};
|
|
307
306
|
}
|
|
308
|
-
//#endregion
|
|
309
307
|
exports.createMSTeamsQaTransportAdapter = createMSTeamsQaTransportAdapter;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
|
|
2
2
|
let openclaw_plugin_sdk_approval_runtime = require("openclaw/plugin-sdk/approval-runtime");
|
|
3
|
-
|
|
3
|
+
// extensions/msteams/src/approval-card-actions.ts
|
|
4
4
|
const msTeamsApprovalControls = (0, openclaw_plugin_sdk_approval_runtime.createNativeApprovalControlRegistry)({ releaseClaimOnLookupExpiry: true });
|
|
5
5
|
function readMSTeamsApprovalActionToken(value) {
|
|
6
6
|
if (!(0, openclaw_plugin_sdk_string_coerce_runtime.isRecord)(value)) return null;
|
|
@@ -9,8 +9,7 @@ function readMSTeamsApprovalActionToken(value) {
|
|
|
9
9
|
if (submitted.openclawAction !== "approval") return null;
|
|
10
10
|
return (0, openclaw_plugin_sdk_string_coerce_runtime.normalizeOptionalString)(submitted.token) ?? null;
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
//#region extensions/msteams/src/approval-card.ts
|
|
12
|
+
// extensions/msteams/src/approval-card.ts
|
|
14
13
|
function formatMSTeamsApprovalKind(kind) {
|
|
15
14
|
return kind === "plugin" ? "Plugin" : kind === "system-agent" ? "OpenClaw Change" : "Exec";
|
|
16
15
|
}
|
|
@@ -199,7 +198,6 @@ function buildMSTeamsCanonicalApprovalTerminalCard(result) {
|
|
|
199
198
|
buildApprovalMetadata(approval.id, metadata)
|
|
200
199
|
]);
|
|
201
200
|
}
|
|
202
|
-
//#endregion
|
|
203
201
|
Object.defineProperty(exports, "buildMSTeamsCanonicalApprovalTerminalCard", {
|
|
204
202
|
enumerable: true,
|
|
205
203
|
get: function() {
|
package/dist/.setup/{approval-handler.runtime-CGIr9ItR.cjs → approval-handler.runtime-BS3avHFu.cjs}
RENAMED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
const require_resolve_allowlist = require("./resolve-allowlist-
|
|
2
|
-
const require_channel = require("./channel-
|
|
3
|
-
const require_approval_card = require("./approval-card-
|
|
4
|
-
const require_send = require("./send-
|
|
1
|
+
const require_resolve_allowlist = require("./resolve-allowlist-CqNzS9bZ.cjs");
|
|
2
|
+
const require_channel = require("./channel-CdCSk3Rg.cjs");
|
|
3
|
+
const require_approval_card = require("./approval-card-Bo8kHYbj.cjs");
|
|
4
|
+
const require_send = require("./send-BXjI3ufq.cjs");
|
|
5
5
|
let openclaw_plugin_sdk_account_id = require("openclaw/plugin-sdk/account-id");
|
|
6
6
|
let openclaw_plugin_sdk_approval_native_runtime = require("openclaw/plugin-sdk/approval-native-runtime");
|
|
7
7
|
let openclaw_plugin_sdk_approval_handler_runtime = require("openclaw/plugin-sdk/approval-handler-runtime");
|
|
8
|
-
|
|
8
|
+
// extensions/msteams/src/approval-handler.runtime.ts
|
|
9
9
|
const log = (0, require("openclaw/plugin-sdk/runtime-env").createSubsystemLogger)("msteams/approvals");
|
|
10
10
|
const msTeamsApprovalNativeRuntime = (0, openclaw_plugin_sdk_approval_handler_runtime.createChannelApprovalNativeRuntimeAdapterAsync)({
|
|
11
11
|
eventKinds: [
|
|
@@ -117,5 +117,4 @@ const msTeamsApprovalNativeRuntime = (0, openclaw_plugin_sdk_approval_handler_ru
|
|
|
117
117
|
});
|
|
118
118
|
} }
|
|
119
119
|
});
|
|
120
|
-
//#endregion
|
|
121
120
|
exports.msTeamsApprovalNativeRuntime = msTeamsApprovalNativeRuntime;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
let openclaw_plugin_sdk_account_id = require("openclaw/plugin-sdk/account-id");
|
|
2
2
|
let openclaw_plugin_sdk_ssrf_policy = require("openclaw/plugin-sdk/ssrf-policy");
|
|
3
|
-
|
|
3
|
+
// extensions/msteams/src/accounts-webhook.ts
|
|
4
4
|
function resolveMSTeamsWebhookPath(channelConfig, accountId, account) {
|
|
5
5
|
const rootPath = channelConfig?.webhook?.path?.trim() || "/api/messages";
|
|
6
6
|
return account?.webhook?.path?.trim() || (accountId === openclaw_plugin_sdk_account_id.DEFAULT_ACCOUNT_ID ? rootPath : `${rootPath.replace(/\/+$/u, "")}/${accountId}`);
|
|
7
7
|
}
|
|
8
|
-
|
|
9
|
-
//#region extensions/msteams/src/bot-framework-service-url.ts
|
|
8
|
+
// extensions/msteams/src/bot-framework-service-url.ts
|
|
10
9
|
const BOT_FRAMEWORK_SERVICE_URL_HOST_ALLOWLIST = (0, openclaw_plugin_sdk_ssrf_policy.normalizeHostnameSuffixAllowlist)([
|
|
11
10
|
"smba.trafficmanager.net",
|
|
12
11
|
"smba.infra.gcc.teams.microsoft.com",
|
|
@@ -31,7 +30,6 @@ function normalizeBotFrameworkServiceUrl(serviceUrl) {
|
|
|
31
30
|
if (normalized) return normalized;
|
|
32
31
|
throw new Error(`Blocked Microsoft Teams serviceUrl host: ${describeBotFrameworkServiceUrlHost(serviceUrl)}`);
|
|
33
32
|
}
|
|
34
|
-
//#endregion
|
|
35
33
|
Object.defineProperty(exports, "describeBotFrameworkServiceUrlHost", {
|
|
36
34
|
enumerable: true,
|
|
37
35
|
get: function() {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const require_rolldown_runtime = require("./rolldown-runtime-
|
|
2
|
-
const require_resolve_allowlist = require("./resolve-allowlist-
|
|
1
|
+
const require_rolldown_runtime = require("./rolldown-runtime-CiKaZLfC.cjs");
|
|
2
|
+
const require_resolve_allowlist = require("./resolve-allowlist-CqNzS9bZ.cjs");
|
|
3
3
|
require("../runtime-api.cjs");
|
|
4
4
|
const require_directory_contract_api = require("../directory-contract-api.cjs");
|
|
5
|
-
const require_thread_session = require("./thread-session-
|
|
6
|
-
const require_channel_setup = require("./channel.setup-
|
|
5
|
+
const require_thread_session = require("./thread-session-DZMoCsSR.cjs");
|
|
6
|
+
const require_channel_setup = require("./channel.setup-nSTtK77J.cjs");
|
|
7
7
|
let openclaw_plugin_sdk_approval_handler_adapter_runtime = require("openclaw/plugin-sdk/approval-handler-adapter-runtime");
|
|
8
8
|
let openclaw_plugin_sdk_channel_actions = require("openclaw/plugin-sdk/channel-actions");
|
|
9
9
|
let openclaw_plugin_sdk_channel_core = require("openclaw/plugin-sdk/channel-core");
|
|
@@ -27,7 +27,7 @@ let openclaw_plugin_sdk_channel_targets = require("openclaw/plugin-sdk/channel-t
|
|
|
27
27
|
let openclaw_plugin_sdk_dangerous_name_runtime = require("openclaw/plugin-sdk/dangerous-name-runtime");
|
|
28
28
|
let openclaw_plugin_sdk_runtime_group_policy = require("openclaw/plugin-sdk/runtime-group-policy");
|
|
29
29
|
let openclaw_plugin_sdk_channel_status = require("openclaw/plugin-sdk/channel-status");
|
|
30
|
-
|
|
30
|
+
// extensions/msteams/src/action-params.ts
|
|
31
31
|
/** Text and upload-source aliases shared by Teams message actions. */
|
|
32
32
|
function resolveActionContent(params) {
|
|
33
33
|
return typeof params.text === "string" ? params.text : typeof params.content === "string" ? params.content : typeof params.message === "string" ? params.message : "";
|
|
@@ -42,8 +42,7 @@ function resolveActionUploadFilePath(params) {
|
|
|
42
42
|
if (value.trim()) return value;
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
|
-
|
|
46
|
-
//#region extensions/msteams/src/action-results.ts
|
|
45
|
+
// extensions/msteams/src/action-results.ts
|
|
47
46
|
function jsonActionResult(data, details = data) {
|
|
48
47
|
return (0, openclaw_plugin_sdk_tool_results.textResult)(JSON.stringify(data), details);
|
|
49
48
|
}
|
|
@@ -78,8 +77,7 @@ function actionError(message) {
|
|
|
78
77
|
...(0, openclaw_plugin_sdk_tool_results.textResult)(message, { error: message })
|
|
79
78
|
};
|
|
80
79
|
}
|
|
81
|
-
|
|
82
|
-
//#region extensions/msteams/src/policy.ts
|
|
80
|
+
// extensions/msteams/src/policy.ts
|
|
83
81
|
function matchMSTeamsPolicyEntry(entries, ...keys) {
|
|
84
82
|
return (0, openclaw_plugin_sdk_channel_targets.resolveChannelEntryMatchWithFallback)({
|
|
85
83
|
entries,
|
|
@@ -160,8 +158,7 @@ function resolveMSTeamsReplyPolicy(params) {
|
|
|
160
158
|
...requireMentionInBotThreads === void 0 ? {} : { requireMentionInBotThreads }
|
|
161
159
|
};
|
|
162
160
|
}
|
|
163
|
-
|
|
164
|
-
//#region extensions/msteams/src/action-threading.ts
|
|
161
|
+
// extensions/msteams/src/action-threading.ts
|
|
165
162
|
/** Normalize Teams conversation targets for equality (strips `conversation:` and `;messageid=`). */
|
|
166
163
|
function normalizeMSTeamsThreadingTarget(raw) {
|
|
167
164
|
const value = (0, openclaw_plugin_sdk_string_coerce_runtime.normalizeOptionalString)(raw);
|
|
@@ -226,8 +223,7 @@ function resolveMSTeamsAutoThreadId(params) {
|
|
|
226
223
|
if ((0, openclaw_plugin_sdk_reply_reference.isSingleUseReplyToMode)(context.replyToMode ?? "off") && context.hasRepliedRef?.value) return;
|
|
227
224
|
return context.currentThreadTs;
|
|
228
225
|
}
|
|
229
|
-
|
|
230
|
-
//#region extensions/msteams/src/approval-native.ts
|
|
226
|
+
// extensions/msteams/src/approval-native.ts
|
|
231
227
|
function isMSTeamsApprovalTransportEnabled(params) {
|
|
232
228
|
const account = require_resolve_allowlist.resolveMSTeamsAccount(params);
|
|
233
229
|
return account.enabled && account.configured && account.tokenStatus === "available";
|
|
@@ -302,7 +298,7 @@ const msTeamsLazyApprovalNativeRuntime = (0, openclaw_plugin_sdk_approval_handle
|
|
|
302
298
|
request
|
|
303
299
|
}),
|
|
304
300
|
load: async () => {
|
|
305
|
-
const { msTeamsApprovalNativeRuntime } = await Promise.resolve().then(() => require("./approval-handler.runtime-
|
|
301
|
+
const { msTeamsApprovalNativeRuntime } = await Promise.resolve().then(() => require("./approval-handler.runtime-BS3avHFu.cjs"));
|
|
306
302
|
return msTeamsApprovalNativeRuntime;
|
|
307
303
|
}
|
|
308
304
|
});
|
|
@@ -348,8 +344,7 @@ const msTeamsApprovalCapability = {
|
|
|
348
344
|
}),
|
|
349
345
|
authorizeActorActionAsync: async (params) => require_thread_session.msTeamsApprovalAuth.authorizeActorAction?.(params)
|
|
350
346
|
};
|
|
351
|
-
|
|
352
|
-
//#region extensions/msteams/src/channel-message-tool.ts
|
|
347
|
+
// extensions/msteams/src/channel-message-tool.ts
|
|
353
348
|
function describeMSTeamsMessageTool({ cfg, accountId }) {
|
|
354
349
|
const account = require_resolve_allowlist.resolveMSTeamsAccount({
|
|
355
350
|
cfg,
|
|
@@ -383,8 +378,7 @@ function describeMSTeamsMessageTool({ cfg, accountId }) {
|
|
|
383
378
|
} : null
|
|
384
379
|
};
|
|
385
380
|
}
|
|
386
|
-
|
|
387
|
-
//#region src/gateway/gateway-http-route-contracts.ts
|
|
381
|
+
// src/gateway/gateway-http-route-contracts.ts
|
|
388
382
|
const GATEWAY_PROBE_ROUTES = /* @__PURE__ */ new Map([
|
|
389
383
|
["/health", "live"],
|
|
390
384
|
["/healthz", "live"],
|
|
@@ -400,8 +394,7 @@ function classifyGatewayProbePath(pathname) {
|
|
|
400
394
|
}
|
|
401
395
|
return "outside";
|
|
402
396
|
}
|
|
403
|
-
|
|
404
|
-
//#region packages/normalization-core/src/string-coerce.ts
|
|
397
|
+
// packages/normalization-core/src/string-coerce.ts
|
|
405
398
|
/** Trims string input and returns null for non-strings or empty strings. */
|
|
406
399
|
function normalizeNullableString(value) {
|
|
407
400
|
if (typeof value !== "string") return null;
|
|
@@ -420,13 +413,11 @@ function normalizeOptionalLowercaseString(value) {
|
|
|
420
413
|
function normalizeLowercaseStringOrEmpty$1(value) {
|
|
421
414
|
return normalizeOptionalLowercaseString(value) ?? "";
|
|
422
415
|
}
|
|
423
|
-
|
|
424
|
-
//#region src/plugins/http-path-prefix.ts
|
|
416
|
+
// src/plugins/http-path-prefix.ts
|
|
425
417
|
function prefixMatchPath(pathname, prefix) {
|
|
426
418
|
return pathname === prefix || pathname.startsWith(`${prefix}/`) || pathname.startsWith(`${prefix}%`);
|
|
427
419
|
}
|
|
428
|
-
|
|
429
|
-
//#region src/gateway/security-path.ts
|
|
420
|
+
// src/gateway/security-path.ts
|
|
430
421
|
const MAX_PATH_DECODE_PASSES = 32;
|
|
431
422
|
function normalizePathSeparators(pathname) {
|
|
432
423
|
const collapsed = pathname.replace(/\/{2,}/g, "/");
|
|
@@ -479,8 +470,7 @@ function canonicalizePathForSecurity(pathname) {
|
|
|
479
470
|
};
|
|
480
471
|
}
|
|
481
472
|
const PROTECTED_PLUGIN_ROUTE_PREFIXES = ["/api/channels"];
|
|
482
|
-
|
|
483
|
-
//#region src/gateway/server/plugins-http/path-context.ts
|
|
473
|
+
// src/gateway/server/plugins-http/path-context.ts
|
|
484
474
|
function normalizeProtectedPrefix(prefix) {
|
|
485
475
|
const collapsed = normalizeLowercaseStringOrEmpty$1(prefix).replace(/\/{2,}/g, "/");
|
|
486
476
|
if (collapsed.length <= 1) return collapsed || "/";
|
|
@@ -506,16 +496,14 @@ function resolvePluginRoutePathContext(pathname) {
|
|
|
506
496
|
rawNormalizedPath: canonical.rawNormalizedPath
|
|
507
497
|
};
|
|
508
498
|
}
|
|
509
|
-
|
|
510
|
-
//#region \0openclaw:bundled-sdk:openclaw/plugin-sdk/gateway-config-runtime
|
|
499
|
+
// \0openclaw:bundled-sdk:openclaw/plugin-sdk/gateway-config-runtime
|
|
511
500
|
var gateway_config_runtime_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
|
|
512
501
|
classifyGatewayProbePath: () => classifyGatewayProbePath,
|
|
513
502
|
isProtectedPluginRoutePathFromContext: () => isProtectedPluginRoutePathFromContext,
|
|
514
503
|
resolvePluginRoutePathContext: () => resolvePluginRoutePathContext
|
|
515
504
|
});
|
|
516
505
|
require_rolldown_runtime.__reExport(gateway_config_runtime_exports, require("openclaw/plugin-sdk/gateway-config-runtime"));
|
|
517
|
-
|
|
518
|
-
//#region extensions/msteams/src/webhook-route.ts
|
|
506
|
+
// extensions/msteams/src/webhook-route.ts
|
|
519
507
|
function resolveMSTeamsWebhookCollisionIssue(cfg) {
|
|
520
508
|
const owners = /* @__PURE__ */ new Map();
|
|
521
509
|
for (const accountId of require_resolve_allowlist.listMSTeamsAccountIds(cfg)) {
|
|
@@ -550,8 +538,7 @@ function resolveMSTeamsWebhookPathIssue({ cfg, env, accountId = openclaw_plugin_
|
|
|
550
538
|
const recoveryPath = accountId === openclaw_plugin_sdk_account_id.DEFAULT_ACCOUNT_ID ? "/api/messages" : `/api/messages/${accountId}`;
|
|
551
539
|
return `Microsoft Teams webhook path ${path} ${reason}. Set ${configPath}.webhook.path to ${recoveryPath} and update the Azure Bot messaging endpoint or reverse-proxy upstream to Gateway port ${(0, gateway_config_runtime_exports.resolveGatewayPort)(cfg, env)}${recoveryPath}.` + (legacy ? ` Compatibility port ${legacy.port} continues serving the current path; verify delivery before removing ${resolveMSTeamsLegacyWebhookConfigPath(cfg, accountId)}.` : " The compatibility listener is disabled, so this path cannot receive Teams callbacks.");
|
|
552
540
|
}
|
|
553
|
-
|
|
554
|
-
//#region extensions/msteams/src/doctor.ts
|
|
541
|
+
// extensions/msteams/src/doctor.ts
|
|
555
542
|
const isMSTeamsMutableAllowEntry = (0, openclaw_plugin_sdk_channel_policy.buildMutableAllowEntryDetector)({
|
|
556
543
|
prefixes: ["msteams:", "user:"],
|
|
557
544
|
stableIdPattern: /^[^\s@]+$/
|
|
@@ -603,8 +590,7 @@ const msteamsDoctor = {
|
|
|
603
590
|
collectMutableAllowlistWarnings: collectMSTeamsMutableAllowlistWarnings,
|
|
604
591
|
runConfigSequence: runMSTeamsWebhookDoctorSequence
|
|
605
592
|
};
|
|
606
|
-
|
|
607
|
-
//#region extensions/msteams/src/graph-action-context.ts
|
|
593
|
+
// extensions/msteams/src/graph-action-context.ts
|
|
608
594
|
const MSTEAMS_GROUP_MANAGEMENT_ACTIONS = /* @__PURE__ */ new Set([
|
|
609
595
|
"addParticipant",
|
|
610
596
|
"removeParticipant",
|
|
@@ -616,8 +602,7 @@ function withMSTeamsGraphMutationCurrentness(handleAction) {
|
|
|
616
602
|
return handleAction(ctx);
|
|
617
603
|
};
|
|
618
604
|
}
|
|
619
|
-
|
|
620
|
-
//#region extensions/msteams/src/presentation.ts
|
|
605
|
+
// extensions/msteams/src/presentation.ts
|
|
621
606
|
const MSTEAMS_PRESENTATION_CAPABILITIES = {
|
|
622
607
|
supported: true,
|
|
623
608
|
buttons: true,
|
|
@@ -711,8 +696,7 @@ function buildMSTeamsPresentationCard(params) {
|
|
|
711
696
|
...actions.length ? { actions } : {}
|
|
712
697
|
};
|
|
713
698
|
}
|
|
714
|
-
|
|
715
|
-
//#region extensions/msteams/src/outbound-config.ts
|
|
699
|
+
// extensions/msteams/src/outbound-config.ts
|
|
716
700
|
const MSTEAMS_TEXT_CHUNK_LIMIT = 4e3;
|
|
717
701
|
function resolveMSTeamsEffectiveTextChunkLimit(configuredLimit) {
|
|
718
702
|
return typeof configuredLimit === "number" && configuredLimit > 0 ? Math.min(configuredLimit, MSTEAMS_TEXT_CHUNK_LIMIT) : MSTEAMS_TEXT_CHUNK_LIMIT;
|
|
@@ -732,8 +716,7 @@ const msteamsOutboundConfig = {
|
|
|
732
716
|
} },
|
|
733
717
|
presentationCapabilities: MSTEAMS_PRESENTATION_CAPABILITIES
|
|
734
718
|
};
|
|
735
|
-
|
|
736
|
-
//#region extensions/msteams/src/read-policy.ts
|
|
719
|
+
// extensions/msteams/src/read-policy.ts
|
|
737
720
|
function normalizeTarget(raw) {
|
|
738
721
|
return raw ? require_resolve_allowlist.normalizeMSTeamsMessagingTarget(raw) ?? "" : "";
|
|
739
722
|
}
|
|
@@ -936,8 +919,7 @@ async function assertMSTeamsTeamEnumerationAllowed(params) {
|
|
|
936
919
|
if (!((directRoute.allowlistConfigured ? directRoute.allowed : groupPolicy === "open") || await isMappedChannelAllowed(cfg, accountId, stableTeamId, "__openclaw_all_channels__"))) throw new openclaw_plugin_sdk_channel_actions.ToolAuthorizationError("Microsoft Teams channel list requires access to every channel in the team.");
|
|
937
920
|
return stableTeamId;
|
|
938
921
|
}
|
|
939
|
-
|
|
940
|
-
//#region extensions/msteams/src/session-route.ts
|
|
922
|
+
// extensions/msteams/src/session-route.ts
|
|
941
923
|
function inferMSTeamsTargetChatType(raw) {
|
|
942
924
|
const target = (0, openclaw_plugin_sdk_channel_core.stripChannelTargetPrefix)(raw, "msteams", "teams");
|
|
943
925
|
if (!target) return;
|
|
@@ -988,8 +970,7 @@ function resolveMSTeamsOutboundSessionRoute(params) {
|
|
|
988
970
|
...channelThreadId !== void 0 ? { threadId: channelThreadId } : {}
|
|
989
971
|
} : route;
|
|
990
972
|
}
|
|
991
|
-
|
|
992
|
-
//#region extensions/msteams/src/channel.ts
|
|
973
|
+
// extensions/msteams/src/channel.ts
|
|
993
974
|
const TEAMS_GRAPH_PERMISSION_HINTS = {
|
|
994
975
|
"ChannelMessage.Read.All": "channel history",
|
|
995
976
|
"Chat.Read.All": "chat history",
|
|
@@ -1005,7 +986,7 @@ const collectMSTeamsSecurityFindings = openclaw_plugin_sdk_channel_policy.create
|
|
|
1005
986
|
severity: "warn",
|
|
1006
987
|
title: "MS Teams security warning"
|
|
1007
988
|
});
|
|
1008
|
-
const loadMSTeamsChannelRuntime = (0, openclaw_plugin_sdk_lazy_runtime.createLazyRuntimeNamedExport)(() => Promise.resolve().then(() => require("./channel.runtime
|
|
989
|
+
const loadMSTeamsChannelRuntime = (0, openclaw_plugin_sdk_lazy_runtime.createLazyRuntimeNamedExport)(() => Promise.resolve().then(() => require("./channel.runtime--ZjTYgkY.cjs")), "msTeamsChannelRuntime");
|
|
1009
990
|
const MSTEAMS_REACTION_TYPES = [
|
|
1010
991
|
"like",
|
|
1011
992
|
"heart",
|
|
@@ -1514,7 +1495,7 @@ const msteamsPlugin = (0, openclaw_plugin_sdk_channel_core.createChatChannelPlug
|
|
|
1514
1495
|
})
|
|
1515
1496
|
}),
|
|
1516
1497
|
gateway: { startAccount: async (ctx) => {
|
|
1517
|
-
const { monitorMSTeamsProvider } = await Promise.resolve().then(() => require("./monitor-
|
|
1498
|
+
const { monitorMSTeamsProvider } = await Promise.resolve().then(() => require("./monitor-BxLDs5fk.cjs"));
|
|
1518
1499
|
const account = require_resolve_allowlist.resolveMSTeamsAccount({
|
|
1519
1500
|
cfg: ctx.cfg,
|
|
1520
1501
|
accountId: ctx.accountId
|
|
@@ -1590,7 +1571,6 @@ const msteamsPlugin = (0, openclaw_plugin_sdk_channel_core.createChatChannelPlug
|
|
|
1590
1571
|
},
|
|
1591
1572
|
outbound: msteamsChannelOutbound
|
|
1592
1573
|
});
|
|
1593
|
-
//#endregion
|
|
1594
1574
|
Object.defineProperty(exports, "buildMSTeamsPresentationCard", {
|
|
1595
1575
|
enumerable: true,
|
|
1596
1576
|
get: function() {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
const require_token_config = require("./token-config-
|
|
2
|
-
const require_resolve_allowlist = require("./resolve-allowlist-
|
|
1
|
+
const require_token_config = require("./token-config-DTZ00Ibq.cjs");
|
|
2
|
+
const require_resolve_allowlist = require("./resolve-allowlist-CqNzS9bZ.cjs");
|
|
3
3
|
require("../runtime-api.cjs");
|
|
4
|
-
const require_delegated_state = require("./delegated-state-
|
|
5
|
-
const require_channel = require("./channel-
|
|
6
|
-
const require_channel_setup = require("./channel.setup-
|
|
7
|
-
const require_conversation_store_state = require("./conversation-store-state-
|
|
8
|
-
const require_send = require("./send-
|
|
9
|
-
const require_reaction_types = require("./reaction-types-
|
|
4
|
+
const require_delegated_state = require("./delegated-state-CbMd3rIh.cjs");
|
|
5
|
+
const require_channel = require("./channel-CdCSk3Rg.cjs");
|
|
6
|
+
const require_channel_setup = require("./channel.setup-nSTtK77J.cjs");
|
|
7
|
+
const require_conversation_store_state = require("./conversation-store-state-NJU9osd-.cjs");
|
|
8
|
+
const require_send = require("./send-BXjI3ufq.cjs");
|
|
9
|
+
const require_reaction_types = require("./reaction-types-BaL1EVBS.cjs");
|
|
10
10
|
let openclaw_plugin_sdk_channel_outbound = require("openclaw/plugin-sdk/channel-outbound");
|
|
11
11
|
let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
|
|
12
12
|
let openclaw_plugin_sdk_account_id = require("openclaw/plugin-sdk/account-id");
|
|
@@ -16,7 +16,7 @@ let openclaw_plugin_sdk_channel_inbound = require("openclaw/plugin-sdk/channel-i
|
|
|
16
16
|
let openclaw_plugin_sdk_channel_send_result = require("openclaw/plugin-sdk/channel-send-result");
|
|
17
17
|
let openclaw_plugin_sdk_string_normalization_runtime = require("openclaw/plugin-sdk/string-normalization-runtime");
|
|
18
18
|
let openclaw_plugin_sdk_text_chunking = require("openclaw/plugin-sdk/text-chunking");
|
|
19
|
-
|
|
19
|
+
// extensions/msteams/src/directory-live.ts
|
|
20
20
|
async function listMSTeamsDirectoryPeersLive(params) {
|
|
21
21
|
const query = require_resolve_allowlist.normalizeQuery(params.query);
|
|
22
22
|
if (!query) return [];
|
|
@@ -81,8 +81,7 @@ async function listMSTeamsDirectoryGroupsLive(params) {
|
|
|
81
81
|
}
|
|
82
82
|
return results;
|
|
83
83
|
}
|
|
84
|
-
|
|
85
|
-
//#region extensions/msteams/src/graph-messages.ts
|
|
84
|
+
// extensions/msteams/src/graph-messages.ts
|
|
86
85
|
function stripTargetPrefix(raw) {
|
|
87
86
|
return raw.trim().replace(/^(conversation|user):/i, "").trim();
|
|
88
87
|
}
|
|
@@ -324,8 +323,7 @@ async function searchMessagesMSTeams(params) {
|
|
|
324
323
|
truncated
|
|
325
324
|
};
|
|
326
325
|
}
|
|
327
|
-
|
|
328
|
-
//#region extensions/msteams/src/graph-conversation-members.ts
|
|
326
|
+
// extensions/msteams/src/graph-conversation-members.ts
|
|
329
327
|
const MAX_CONVERSATION_MEMBER_PAGES = 100;
|
|
330
328
|
async function findMSTeamsConversationMember(params) {
|
|
331
329
|
const conversationId = await resolveGraphConversationId(params.to, {
|
|
@@ -347,8 +345,7 @@ async function findMSTeamsConversationMember(params) {
|
|
|
347
345
|
member: result.found
|
|
348
346
|
};
|
|
349
347
|
}
|
|
350
|
-
|
|
351
|
-
//#region extensions/msteams/src/graph-group-management.ts
|
|
348
|
+
// extensions/msteams/src/graph-group-management.ts
|
|
352
349
|
function resolveConversationMemberRoles(role, kind) {
|
|
353
350
|
const normalized = role?.trim().toLowerCase() || "member";
|
|
354
351
|
if (normalized !== "member" && normalized !== "owner") throw new Error("MS Teams participant role must be \"member\" or \"owner\".");
|
|
@@ -411,8 +408,7 @@ async function renameGroupMSTeams(params) {
|
|
|
411
408
|
newName: params.name
|
|
412
409
|
} };
|
|
413
410
|
}
|
|
414
|
-
|
|
415
|
-
//#region extensions/msteams/src/graph-members.ts
|
|
411
|
+
// extensions/msteams/src/graph-members.ts
|
|
416
412
|
const MAX_TEAM_MEMBER_PAGES = 100;
|
|
417
413
|
function normalizeUserId(value) {
|
|
418
414
|
return value?.replace(/^(msteams|teams|user):/i, "").trim().toLowerCase() ?? "";
|
|
@@ -465,8 +461,7 @@ async function getMemberInfoMSTeams(params) {
|
|
|
465
461
|
roles: member.roles ?? []
|
|
466
462
|
} };
|
|
467
463
|
}
|
|
468
|
-
|
|
469
|
-
//#region extensions/msteams/src/graph-teams.ts
|
|
464
|
+
// extensions/msteams/src/graph-teams.ts
|
|
470
465
|
async function listChannelsMSTeams(params) {
|
|
471
466
|
const token = await require_resolve_allowlist.resolveGraphToken(params.cfg, { accountId: params.accountId });
|
|
472
467
|
const result = await require_resolve_allowlist.fetchAllGraphPages({
|
|
@@ -500,8 +495,7 @@ async function getChannelInfoMSTeams(params) {
|
|
|
500
495
|
createdDateTime: ch.createdDateTime
|
|
501
496
|
} };
|
|
502
497
|
}
|
|
503
|
-
|
|
504
|
-
//#region extensions/msteams/src/outbound.ts
|
|
498
|
+
// extensions/msteams/src/outbound.ts
|
|
505
499
|
function toMSTeamsOutboundResult(result) {
|
|
506
500
|
const { conversationId, ...delivery } = result;
|
|
507
501
|
return {
|
|
@@ -690,8 +684,7 @@ const msteamsOutbound = {
|
|
|
690
684
|
}
|
|
691
685
|
})
|
|
692
686
|
};
|
|
693
|
-
|
|
694
|
-
//#region extensions/msteams/src/probe.ts
|
|
687
|
+
// extensions/msteams/src/probe.ts
|
|
695
688
|
function decodeJwtPayload(token) {
|
|
696
689
|
const parts = token.split(".");
|
|
697
690
|
if (parts.length < 2) return null;
|
|
@@ -783,8 +776,7 @@ async function probeMSTeams(cfg, params) {
|
|
|
783
776
|
};
|
|
784
777
|
}
|
|
785
778
|
}
|
|
786
|
-
|
|
787
|
-
//#region extensions/msteams/src/channel.runtime.ts
|
|
779
|
+
// extensions/msteams/src/channel.runtime.ts
|
|
788
780
|
const msTeamsChannelRuntime = {
|
|
789
781
|
addParticipantMSTeams,
|
|
790
782
|
deleteMessageMSTeams: require_send.deleteMessageMSTeams,
|
|
@@ -809,5 +801,4 @@ const msTeamsChannelRuntime = {
|
|
|
809
801
|
sendAdaptiveCardMSTeams: require_send.sendAdaptiveCardMSTeams,
|
|
810
802
|
sendMessageMSTeams: require_send.sendMessageMSTeams
|
|
811
803
|
};
|
|
812
|
-
//#endregion
|
|
813
804
|
exports.msTeamsChannelRuntime = msTeamsChannelRuntime;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const require_token_config = require("./token-config-
|
|
2
|
-
const require_resolve_allowlist = require("./resolve-allowlist-
|
|
1
|
+
const require_token_config = require("./token-config-DTZ00Ibq.cjs");
|
|
2
|
+
const require_resolve_allowlist = require("./resolve-allowlist-CqNzS9bZ.cjs");
|
|
3
3
|
require("../runtime-api.cjs");
|
|
4
|
-
const require_delegated_state = require("./delegated-state-
|
|
5
|
-
const require_config_schema = require("./config-schema-
|
|
4
|
+
const require_delegated_state = require("./delegated-state-CbMd3rIh.cjs");
|
|
5
|
+
const require_config_schema = require("./config-schema-Bm15lF-j.cjs");
|
|
6
6
|
let openclaw_plugin_sdk_channel_policy = require("openclaw/plugin-sdk/channel-policy");
|
|
7
7
|
let openclaw_plugin_sdk_string_coerce_runtime = require("openclaw/plugin-sdk/string-coerce-runtime");
|
|
8
8
|
let openclaw_plugin_sdk_account_helpers = require("openclaw/plugin-sdk/account-helpers");
|
|
@@ -16,7 +16,7 @@ let openclaw_plugin_sdk_setup_tools = require("openclaw/plugin-sdk/setup-tools")
|
|
|
16
16
|
let openclaw_plugin_sdk_channel_dm_policy = require("openclaw/plugin-sdk/channel-dm-policy");
|
|
17
17
|
let openclaw_plugin_sdk_setup_runtime = require("openclaw/plugin-sdk/setup-runtime");
|
|
18
18
|
let openclaw_plugin_sdk_retry_runtime = require("openclaw/plugin-sdk/retry-runtime");
|
|
19
|
-
|
|
19
|
+
// extensions/msteams/src/accounts-mutations.ts
|
|
20
20
|
function splitRootIdentity(msteams) {
|
|
21
21
|
const { appId, appPassword, ...root } = msteams;
|
|
22
22
|
return {
|
|
@@ -82,8 +82,7 @@ function patchMSTeamsAccountConfig(params) {
|
|
|
82
82
|
}
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
|
-
|
|
86
|
-
//#region extensions/msteams/src/channel-config.ts
|
|
85
|
+
// extensions/msteams/src/channel-config.ts
|
|
87
86
|
const msteamsMeta = {
|
|
88
87
|
id: "msteams",
|
|
89
88
|
label: "Microsoft Teams",
|
|
@@ -183,8 +182,7 @@ const msteamsConfigAdapter = {
|
|
|
183
182
|
accountId: params.accountId
|
|
184
183
|
}) ?? msteamsBaseConfigAdapter.deleteAccount(params)
|
|
185
184
|
};
|
|
186
|
-
|
|
187
|
-
//#region extensions/msteams/src/setup-core.ts
|
|
185
|
+
// extensions/msteams/src/setup-core.ts
|
|
188
186
|
const t$1 = (0, openclaw_plugin_sdk_setup.createSetupTranslator)();
|
|
189
187
|
const channel$1 = "msteams";
|
|
190
188
|
function applySecretAuthCredentials(patch, existing) {
|
|
@@ -442,8 +440,7 @@ function createMSTeamsSetupWizardBase() {
|
|
|
442
440
|
}
|
|
443
441
|
};
|
|
444
442
|
}
|
|
445
|
-
|
|
446
|
-
//#region extensions/msteams/src/errors.ts
|
|
443
|
+
// extensions/msteams/src/errors.ts
|
|
447
444
|
const MAX_SAFE_RETRY_AFTER_SECONDS = Number.MAX_SAFE_INTEGER / 1e3;
|
|
448
445
|
function formatUnknownError(err) {
|
|
449
446
|
if (err instanceof Error) return err.message;
|
|
@@ -614,8 +611,7 @@ function formatMSTeamsDeliveryFailureGuidance(classification) {
|
|
|
614
611
|
if (classification.kind === "replay-safe") return "The request was rate-limited before delivery; retrying later may succeed.";
|
|
615
612
|
if (classification.kind === "ambiguous") return "Delivery may already have succeeded; do not send the same content again without checking the conversation.";
|
|
616
613
|
}
|
|
617
|
-
|
|
618
|
-
//#region extensions/msteams/src/setup-surface.ts
|
|
614
|
+
// extensions/msteams/src/setup-surface.ts
|
|
619
615
|
const t = (0, openclaw_plugin_sdk_setup.createSetupTranslator)();
|
|
620
616
|
const channel = "msteams";
|
|
621
617
|
function openDelegatedOAuthUrl(url) {
|
|
@@ -827,7 +823,7 @@ const msteamsSetupWizard = {
|
|
|
827
823
|
};
|
|
828
824
|
let oauthModule;
|
|
829
825
|
try {
|
|
830
|
-
oauthModule = await Promise.resolve().then(() => require("./oauth-
|
|
826
|
+
oauthModule = await Promise.resolve().then(() => require("./oauth-B-Y5pNM4.cjs"));
|
|
831
827
|
} catch (err) {
|
|
832
828
|
await noteDelegatedAuthFailure(err);
|
|
833
829
|
return {
|
|
@@ -878,8 +874,7 @@ const msteamsSetupWizard = {
|
|
|
878
874
|
groupAccess: msteamsGroupAccess,
|
|
879
875
|
disable: (cfg) => (0, openclaw_plugin_sdk_setup.setSetupChannelEnabled)(cfg, channel, false)
|
|
880
876
|
};
|
|
881
|
-
|
|
882
|
-
//#region extensions/msteams/src/channel.setup.ts
|
|
877
|
+
// extensions/msteams/src/channel.setup.ts
|
|
883
878
|
const msteamsSetupPlugin = {
|
|
884
879
|
id: "msteams",
|
|
885
880
|
meta: {
|
|
@@ -915,7 +910,6 @@ const msteamsSetupPlugin = {
|
|
|
915
910
|
setupWizard: msteamsSetupWizard,
|
|
916
911
|
setupContract: msteamsSetupContract
|
|
917
912
|
};
|
|
918
|
-
//#endregion
|
|
919
913
|
Object.defineProperty(exports, "classifyMSTeamsSendError", {
|
|
920
914
|
enumerable: true,
|
|
921
915
|
get: function() {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const require_bot_framework_service_url = require("./bot-framework-service-url-
|
|
2
|
-
const require_token_config = require("./token-config-
|
|
1
|
+
const require_bot_framework_service_url = require("./bot-framework-service-url-CgVuKiIR.cjs");
|
|
2
|
+
const require_token_config = require("./token-config-DTZ00Ibq.cjs");
|
|
3
3
|
let openclaw_plugin_sdk_channel_core = require("openclaw/plugin-sdk/channel-core");
|
|
4
4
|
let openclaw_plugin_sdk_account_id = require("openclaw/plugin-sdk/account-id");
|
|
5
5
|
let openclaw_plugin_sdk_secret_input = require("openclaw/plugin-sdk/secret-input");
|
|
@@ -7,7 +7,7 @@ let openclaw_plugin_sdk_ssrf_policy = require("openclaw/plugin-sdk/ssrf-policy")
|
|
|
7
7
|
let openclaw_plugin_sdk_channel_config_schema = require("openclaw/plugin-sdk/channel-config-schema");
|
|
8
8
|
let zod = require("zod");
|
|
9
9
|
let openclaw_plugin_sdk_webhook_targets = require("openclaw/plugin-sdk/webhook-targets");
|
|
10
|
-
|
|
10
|
+
// extensions/msteams/src/config-schema-refinement.ts
|
|
11
11
|
function hasConfiguredValue(value) {
|
|
12
12
|
return typeof value === "string" ? value.trim().length > 0 : value !== void 0 && value !== null;
|
|
13
13
|
}
|
|
@@ -161,8 +161,7 @@ function refineMSTeamsConfig(value, ctx) {
|
|
|
161
161
|
]);
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
|
-
|
|
165
|
-
//#region extensions/msteams/src/config-ui-hints.ts
|
|
164
|
+
// extensions/msteams/src/config-ui-hints.ts
|
|
166
165
|
const msTeamsChannelConfigUiHints = {
|
|
167
166
|
"": {
|
|
168
167
|
label: "MS Teams",
|
|
@@ -208,8 +207,7 @@ const msTeamsChannelConfigUiHints = {
|
|
|
208
207
|
}
|
|
209
208
|
})
|
|
210
209
|
};
|
|
211
|
-
|
|
212
|
-
//#region extensions/msteams/src/config-schema.ts
|
|
210
|
+
// extensions/msteams/src/config-schema.ts
|
|
213
211
|
const SecretInputSchema = (0, openclaw_plugin_sdk_secret_input.buildSecretInputSchema)();
|
|
214
212
|
const ToolPolicyBySenderSchema = zod.z.record(zod.z.string(), openclaw_plugin_sdk_channel_config_schema.ToolPolicySchema).optional();
|
|
215
213
|
const MSTeamsChannelSchema = zod.z.object({
|
|
@@ -284,7 +282,6 @@ const MSTeamsConfigSchema = MSTeamsAccountConfigBaseSchema.extend({
|
|
|
284
282
|
defaultAccount: zod.z.string().optional()
|
|
285
283
|
}).strict().superRefine(refineMSTeamsConfig);
|
|
286
284
|
const MSTeamsChannelConfigSchema = (0, openclaw_plugin_sdk_channel_config_schema.buildChannelConfigSchema)(MSTeamsConfigSchema, { uiHints: msTeamsChannelConfigUiHints });
|
|
287
|
-
//#endregion
|
|
288
285
|
Object.defineProperty(exports, "MSTeamsChannelConfigSchema", {
|
|
289
286
|
enumerable: true,
|
|
290
287
|
get: function() {
|