@lansenger-pm/openclaw-lansenger-channel 3.3.1 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/channel.test.js +295 -1
- package/dist/src/channel.test.js.map +1 -1
- package/dist/src/client.test.js +153 -1
- package/dist/src/client.test.js.map +1 -1
- package/dist/src/runtime.js +10 -46
- package/dist/src/runtime.js.map +1 -1
- package/dist/src/runtime.test.js +198 -0
- package/dist/src/runtime.test.js.map +1 -0
- package/dist/src/setup-wizard.test.js +140 -0
- package/dist/src/setup-wizard.test.js.map +1 -1
- package/dist/src/tools.test.js +237 -0
- package/dist/src/tools.test.js.map +1 -0
- package/dist/vitest.config.js +7 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +1 -1
package/dist/src/channel.test.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
2
|
import { lansengerPlugin, resolveAccount } from "./channel.js";
|
|
3
3
|
import { LansengerClient, mediaTypeFromPath, buildI18n } from "./client.js";
|
|
4
|
+
import * as fs from "node:fs/promises";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import * as os from "node:os";
|
|
4
7
|
const lansengerOnboarding = lansengerPlugin.onboarding;
|
|
8
|
+
const configObj = lansengerPlugin.config ?? lansengerPlugin.base?.config;
|
|
5
9
|
describe("Lansenger plugin", () => {
|
|
6
10
|
it("resolves account from config", () => {
|
|
7
11
|
const cfg = {
|
|
@@ -327,4 +331,294 @@ describe("LansengerOnboarding", () => {
|
|
|
327
331
|
expect(result.channels.lansenger.appSecret).toBe("replaced-secret");
|
|
328
332
|
});
|
|
329
333
|
});
|
|
334
|
+
describe("resolveAccount edge cases", () => {
|
|
335
|
+
it("falls back to first valid account in accounts when no accountId specified", () => {
|
|
336
|
+
const cfg = {
|
|
337
|
+
channels: {
|
|
338
|
+
lansenger: {
|
|
339
|
+
accounts: {
|
|
340
|
+
"key1": { appId: "first-id", appSecret: "first-secret" },
|
|
341
|
+
"key2": { appId: "second-id", appSecret: "second-secret" },
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
},
|
|
345
|
+
};
|
|
346
|
+
const account = resolveAccount(cfg, undefined);
|
|
347
|
+
expect(account.appId).toBe("first-id");
|
|
348
|
+
});
|
|
349
|
+
it("falls back to first account (even without valid creds) when no valid account found", () => {
|
|
350
|
+
const cfg = {
|
|
351
|
+
channels: {
|
|
352
|
+
lansenger: {
|
|
353
|
+
accounts: {
|
|
354
|
+
"key1": { appId: "only-id" },
|
|
355
|
+
},
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
|
+
};
|
|
359
|
+
const account = resolveAccount(cfg, undefined);
|
|
360
|
+
expect(account.accountId).toBe("key1");
|
|
361
|
+
expect(account.appId).toBe("only-id");
|
|
362
|
+
expect(account.appSecret).toBe("");
|
|
363
|
+
expect(account.enabled).toBe(false);
|
|
364
|
+
});
|
|
365
|
+
it("resolves dmPolicy from dmSecurity fallback", () => {
|
|
366
|
+
const cfg = {
|
|
367
|
+
channels: {
|
|
368
|
+
lansenger: { appId: "id", appSecret: "secret", dmSecurity: "paired" },
|
|
369
|
+
},
|
|
370
|
+
};
|
|
371
|
+
const account = resolveAccount(cfg, undefined);
|
|
372
|
+
expect(account.dmPolicy).toBe("paired");
|
|
373
|
+
});
|
|
374
|
+
it("resolves apiGatewayUrl from env var", () => {
|
|
375
|
+
const orig = process.env.LANSENGER_API_GATEWAY_URL;
|
|
376
|
+
process.env.LANSENGER_API_GATEWAY_URL = "https://custom.gateway";
|
|
377
|
+
const cfg = { channels: { lansenger: { appId: "id", appSecret: "secret" } } };
|
|
378
|
+
const account = resolveAccount(cfg, undefined);
|
|
379
|
+
expect(account.apiGatewayUrl).toBe("https://custom.gateway");
|
|
380
|
+
if (orig === undefined)
|
|
381
|
+
delete process.env.LANSENGER_API_GATEWAY_URL;
|
|
382
|
+
else
|
|
383
|
+
process.env.LANSENGER_API_GATEWAY_URL = orig;
|
|
384
|
+
});
|
|
385
|
+
it("enabled is false when only appId provided", () => {
|
|
386
|
+
const cfg = { channels: { lansenger: { appId: "id" } } };
|
|
387
|
+
const account = resolveAccount(cfg, undefined);
|
|
388
|
+
expect(account.enabled).toBe(false);
|
|
389
|
+
});
|
|
390
|
+
it("enabled is false when only appSecret provided", () => {
|
|
391
|
+
const cfg = { channels: { lansenger: { appSecret: "secret" } } };
|
|
392
|
+
const account = resolveAccount(cfg, undefined);
|
|
393
|
+
expect(account.enabled).toBe(false);
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
describe("config callbacks", () => {
|
|
397
|
+
it("isConfigured returns true with appId+appSecret", () => {
|
|
398
|
+
const account = { appId: "id", appSecret: "secret", enabled: true, allowFrom: [], dmPolicy: undefined, homeChannel: undefined, apiGatewayUrl: "", accountId: null };
|
|
399
|
+
expect(configObj.isConfigured(account, {})).toBe(true);
|
|
400
|
+
});
|
|
401
|
+
it("isConfigured returns true with configured=true", () => {
|
|
402
|
+
const account = { appId: "", appSecret: "", configured: true, enabled: false, allowFrom: [], dmPolicy: undefined, homeChannel: undefined, apiGatewayUrl: "", accountId: null };
|
|
403
|
+
expect(configObj.isConfigured(account, {})).toBe(true);
|
|
404
|
+
});
|
|
405
|
+
it("isConfigured returns false with no creds", () => {
|
|
406
|
+
const account = { appId: "", appSecret: "", enabled: false, allowFrom: [], dmPolicy: undefined, homeChannel: undefined, apiGatewayUrl: "", accountId: null };
|
|
407
|
+
expect(configObj.isConfigured(account, {})).toBe(false);
|
|
408
|
+
});
|
|
409
|
+
it("hasConfiguredState returns true with accounts", () => {
|
|
410
|
+
const cfg = { channels: { lansenger: { accounts: { "bot1": { appId: "b1", appSecret: "s1" } } } } };
|
|
411
|
+
expect(configObj.hasConfiguredState({ cfg, env: {} })).toBe(true);
|
|
412
|
+
});
|
|
413
|
+
it("hasConfiguredState returns true with env vars", () => {
|
|
414
|
+
const origId = process.env.LANSENGER_APP_ID;
|
|
415
|
+
const origSecret = process.env.LANSENGER_APP_SECRET;
|
|
416
|
+
process.env.LANSENGER_APP_ID = "env-id";
|
|
417
|
+
process.env.LANSENGER_APP_SECRET = "env-secret";
|
|
418
|
+
const cfg = { channels: {} };
|
|
419
|
+
expect(configObj.hasConfiguredState({ cfg, env: { LANSENGER_APP_ID: "env-id", LANSENGER_APP_SECRET: "env-secret" } })).toBe(true);
|
|
420
|
+
if (origId === undefined)
|
|
421
|
+
delete process.env.LANSENGER_APP_ID;
|
|
422
|
+
else
|
|
423
|
+
process.env.LANSENGER_APP_ID = origId;
|
|
424
|
+
if (origSecret === undefined)
|
|
425
|
+
delete process.env.LANSENGER_APP_SECRET;
|
|
426
|
+
else
|
|
427
|
+
process.env.LANSENGER_APP_SECRET = origSecret;
|
|
428
|
+
});
|
|
429
|
+
it("hasConfiguredState returns false with no creds", () => {
|
|
430
|
+
const cfg = { channels: {} };
|
|
431
|
+
expect(configObj.hasConfiguredState({ cfg, env: {} })).toBe(false);
|
|
432
|
+
});
|
|
433
|
+
it("listAccountIds returns single appId", () => {
|
|
434
|
+
const cfg = { channels: { lansenger: { appId: "single-id" } } };
|
|
435
|
+
expect(configObj.listAccountIds(cfg)).toEqual(["single-id"]);
|
|
436
|
+
});
|
|
437
|
+
it("listAccountIds returns multi-account appIds", () => {
|
|
438
|
+
const cfg = { channels: { lansenger: { accounts: { "key1": { appId: "bot1" }, "key2": { appId: "bot2" } } } } };
|
|
439
|
+
expect(configObj.listAccountIds(cfg)).toEqual(["bot1", "bot2"]);
|
|
440
|
+
});
|
|
441
|
+
it("listAccountIds deduplicates", () => {
|
|
442
|
+
const cfg = { channels: { lansenger: { appId: "bot1", accounts: { "key1": { appId: "bot1" } } } } };
|
|
443
|
+
const ids = configObj.listAccountIds(cfg);
|
|
444
|
+
expect(ids.filter((id) => id === "bot1").length).toBe(1);
|
|
445
|
+
});
|
|
446
|
+
it("inspectAccount returns configured for default account", () => {
|
|
447
|
+
const cfg = { channels: { lansenger: { appId: "id", appSecret: "secret" } } };
|
|
448
|
+
const result = configObj.inspectAccount(cfg, undefined);
|
|
449
|
+
expect(result.configured).toBe(true);
|
|
450
|
+
expect(result.appIdStatus).toBe("available");
|
|
451
|
+
expect(result.appSecretStatus).toBe("available");
|
|
452
|
+
});
|
|
453
|
+
it("inspectAccount returns env status when missing from config", () => {
|
|
454
|
+
const origId = process.env.LANSENGER_APP_ID;
|
|
455
|
+
const origSecret = process.env.LANSENGER_APP_SECRET;
|
|
456
|
+
delete process.env.LANSENGER_APP_ID;
|
|
457
|
+
delete process.env.LANSENGER_APP_SECRET;
|
|
458
|
+
const cfg = { channels: { lansenger: {} } };
|
|
459
|
+
const result = configObj.inspectAccount(cfg, undefined);
|
|
460
|
+
expect(result.appIdStatus).toBe("missing");
|
|
461
|
+
expect(result.appSecretStatus).toBe("missing");
|
|
462
|
+
if (origId === undefined)
|
|
463
|
+
delete process.env.LANSENGER_APP_ID;
|
|
464
|
+
else
|
|
465
|
+
process.env.LANSENGER_APP_ID = origId;
|
|
466
|
+
if (origSecret === undefined)
|
|
467
|
+
delete process.env.LANSENGER_APP_SECRET;
|
|
468
|
+
else
|
|
469
|
+
process.env.LANSENGER_APP_SECRET = origSecret;
|
|
470
|
+
});
|
|
471
|
+
it("inspectAccount looks up account by appId key in accounts", () => {
|
|
472
|
+
const cfg = { channels: { lansenger: { accounts: { "bot1": { appId: "bot1", appSecret: "s1" } } } } };
|
|
473
|
+
const result = configObj.inspectAccount(cfg, "bot1");
|
|
474
|
+
expect(result.configured).toBe(true);
|
|
475
|
+
});
|
|
476
|
+
it("inspectAccount finds account by appId match across accounts", () => {
|
|
477
|
+
const cfg = { channels: { lansenger: { accounts: { "key1": { appId: "target-id", appSecret: "s1" } } } } };
|
|
478
|
+
const result = configObj.inspectAccount(cfg, "target-id");
|
|
479
|
+
expect(result.configured).toBe(true);
|
|
480
|
+
});
|
|
481
|
+
});
|
|
482
|
+
describe("applyAccountConfig", () => {
|
|
483
|
+
const applyAccountConfig = lansengerPlugin.setup?.applyAccountConfig ?? lansengerPlugin.base?.setup?.applyAccountConfig;
|
|
484
|
+
it("patches appId into config", () => {
|
|
485
|
+
const cfg = { channels: { lansenger: { appSecret: "existing-secret" } } };
|
|
486
|
+
const result = applyAccountConfig({ cfg, accountId: undefined, input: { appToken: "new-app-id" } });
|
|
487
|
+
expect(result.channels.lansenger.appId).toBe("new-app-id");
|
|
488
|
+
expect(result.channels.lansenger.appSecret).toBe("existing-secret");
|
|
489
|
+
});
|
|
490
|
+
it("patches secret into config", () => {
|
|
491
|
+
const cfg = { channels: { lansenger: { appId: "existing-id" } } };
|
|
492
|
+
const result = applyAccountConfig({ cfg, accountId: undefined, input: { secret: "new-secret" } });
|
|
493
|
+
expect(result.channels.lansenger.appId).toBe("existing-id");
|
|
494
|
+
expect(result.channels.lansenger.appSecret).toBe("new-secret");
|
|
495
|
+
});
|
|
496
|
+
it("patches baseUrl into config", () => {
|
|
497
|
+
const cfg = { channels: { lansenger: { appId: "id", appSecret: "secret" } } };
|
|
498
|
+
const result = applyAccountConfig({ cfg, accountId: undefined, input: { baseUrl: "https://custom.url" } });
|
|
499
|
+
expect(result.channels.lansenger.apiGatewayUrl).toBe("https://custom.url");
|
|
500
|
+
});
|
|
501
|
+
});
|
|
502
|
+
describe("actions.describeMessageTool", () => {
|
|
503
|
+
it("returns null when account not enabled", () => {
|
|
504
|
+
const result = lansengerPlugin.actions.describeMessageTool({ cfg: { channels: { lansenger: {} } }, accountId: undefined, senderIsOwner: false });
|
|
505
|
+
expect(result).toBeNull();
|
|
506
|
+
});
|
|
507
|
+
it("returns actions schema when account enabled", () => {
|
|
508
|
+
const result = lansengerPlugin.actions.describeMessageTool({ cfg: { channels: { lansenger: { appId: "id", appSecret: "secret" } } }, accountId: undefined, senderIsOwner: false });
|
|
509
|
+
expect(result).toBeDefined();
|
|
510
|
+
expect(result.actions).toContain("send");
|
|
511
|
+
expect(result.actions).toContain("delete");
|
|
512
|
+
expect(result.schema[0].properties.filePath).toBeDefined();
|
|
513
|
+
});
|
|
514
|
+
});
|
|
515
|
+
describe("actions.handleAction", () => {
|
|
516
|
+
beforeEach(() => {
|
|
517
|
+
vi.stubGlobal("fetch", async (url) => {
|
|
518
|
+
const u = typeof url === "string" ? url : url.url;
|
|
519
|
+
if (u.includes("apptoken"))
|
|
520
|
+
return new Response(JSON.stringify({ errCode: 0, errMsg: "", data: { appToken: "tok", expiresIn: 7200 } }), { headers: { "content-type": "application/json" } });
|
|
521
|
+
return new Response(JSON.stringify({ errCode: 0, errMsg: "", data: { msgId: "m1" } }), { headers: { "content-type": "application/json" } });
|
|
522
|
+
});
|
|
523
|
+
});
|
|
524
|
+
afterEach(() => { vi.restoreAllMocks(); });
|
|
525
|
+
it("returns error for unknown action", async () => {
|
|
526
|
+
const ctx = { action: "unknown", cfg: { channels: { lansenger: { appId: "id", appSecret: "secret" } } }, args: {} };
|
|
527
|
+
const result = await lansengerPlugin.actions.handleAction(ctx);
|
|
528
|
+
expect(result.success).toBe(false);
|
|
529
|
+
expect(result.error).toContain("Unknown action");
|
|
530
|
+
});
|
|
531
|
+
it("returns error for send without to and text", async () => {
|
|
532
|
+
const ctx = { action: "send", cfg: { channels: { lansenger: { appId: "id", appSecret: "secret" } } }, args: {} };
|
|
533
|
+
const result = await lansengerPlugin.actions.handleAction(ctx);
|
|
534
|
+
expect(result.success).toBe(false);
|
|
535
|
+
expect(result.error).toContain("to and text are required");
|
|
536
|
+
});
|
|
537
|
+
it("returns error for send with filePath not found", async () => {
|
|
538
|
+
const ctx = { action: "send", cfg: { channels: { lansenger: { appId: "id", appSecret: "secret" } } }, args: { filePath: "/tmp/nonexistent_handle.txt", to: "chat-1" } };
|
|
539
|
+
const result = await lansengerPlugin.actions.handleAction(ctx);
|
|
540
|
+
expect(result.success).toBe(false);
|
|
541
|
+
expect(result.error).toContain("File not found");
|
|
542
|
+
});
|
|
543
|
+
it("returns error for send with filePath pointing to directory", async () => {
|
|
544
|
+
const ctx = { action: "send", cfg: { channels: { lansenger: { appId: "id", appSecret: "secret" } } }, args: { filePath: "/tmp", to: "chat-1" } };
|
|
545
|
+
const result = await lansengerPlugin.actions.handleAction(ctx);
|
|
546
|
+
expect(result.success).toBe(false);
|
|
547
|
+
expect(result.error).toContain("Not a file");
|
|
548
|
+
});
|
|
549
|
+
it("delete action revokes message", async () => {
|
|
550
|
+
const ctx = { action: "delete", cfg: { channels: { lansenger: { appId: "id", appSecret: "secret" } } }, args: { messageId: "msg-to-delete" } };
|
|
551
|
+
const result = await lansengerPlugin.actions.handleAction(ctx);
|
|
552
|
+
expect(result.success).toBeDefined();
|
|
553
|
+
});
|
|
554
|
+
it("send resolves target from sessionKey", async () => {
|
|
555
|
+
const ctx = { action: "send", cfg: { channels: { lansenger: { appId: "id", appSecret: "secret" } } }, args: { text: "hello" }, sessionKey: "lansenger:agent-1:chat-from-session" };
|
|
556
|
+
const result = await lansengerPlugin.actions.handleAction(ctx);
|
|
557
|
+
expect(result).toBeDefined();
|
|
558
|
+
});
|
|
559
|
+
});
|
|
560
|
+
describe("resolveLansengerApprovers", () => {
|
|
561
|
+
it("returns explicit ownerAllowFrom", () => {
|
|
562
|
+
const resolveLansengerApprovers = lansengerPlugin.approvalCapability?.nativeRuntime?.availability?.isConfiguredAndAvailable;
|
|
563
|
+
const cfg = { channels: { lansenger: { appId: "id", appSecret: "secret" } }, commands: { ownerAllowFrom: ["approver-1"] } };
|
|
564
|
+
expect(resolveLansengerApprovers({ cfg, accountId: undefined })).toBe(true);
|
|
565
|
+
});
|
|
566
|
+
});
|
|
567
|
+
describe("approvalCapability", () => {
|
|
568
|
+
it("getActionAvailabilityState returns enabled for configured account", () => {
|
|
569
|
+
const getActionAvailabilityState = lansengerPlugin.approvalCapability?.getActionAvailabilityState;
|
|
570
|
+
const cfg = { channels: { lansenger: { appId: "id", appSecret: "secret" } } };
|
|
571
|
+
const result = getActionAvailabilityState({ cfg, accountId: undefined });
|
|
572
|
+
expect(result.kind).toBe("enabled");
|
|
573
|
+
});
|
|
574
|
+
it("getActionAvailabilityState returns unsupported for unconfigured account", () => {
|
|
575
|
+
const getActionAvailabilityState = lansengerPlugin.approvalCapability?.getActionAvailabilityState;
|
|
576
|
+
const cfg = { channels: { lansenger: {} } };
|
|
577
|
+
const result = getActionAvailabilityState({ cfg, accountId: undefined });
|
|
578
|
+
expect(result.kind).toBe("unsupported");
|
|
579
|
+
});
|
|
580
|
+
it("describeDeliveryCapabilities returns enabled", () => {
|
|
581
|
+
const desc = lansengerPlugin.approvalCapability?.native?.describeDeliveryCapabilities;
|
|
582
|
+
const cfg = { channels: { lansenger: { appId: "id", appSecret: "secret" } } };
|
|
583
|
+
const result = desc({ cfg, accountId: undefined });
|
|
584
|
+
expect(result.enabled).toBe(true);
|
|
585
|
+
expect(result.preferredSurface).toBe("origin");
|
|
586
|
+
});
|
|
587
|
+
it("resolveOriginTarget returns target from request", () => {
|
|
588
|
+
const resolve = lansengerPlugin.approvalCapability?.native?.resolveOriginTarget;
|
|
589
|
+
const cfg = { channels: { lansenger: { appId: "id", appSecret: "secret" } } };
|
|
590
|
+
const result = resolve({ cfg, accountId: undefined, request: { turnSource: { target: { to: "chat-1" } } } });
|
|
591
|
+
expect(result).toBeDefined();
|
|
592
|
+
expect(result.to).toBe("chat-1");
|
|
593
|
+
});
|
|
594
|
+
it("resolveOriginTarget returns null when no target", () => {
|
|
595
|
+
const resolve = lansengerPlugin.approvalCapability?.native?.resolveOriginTarget;
|
|
596
|
+
const cfg = { channels: { lansenger: { appId: "id", appSecret: "secret" } } };
|
|
597
|
+
const result = resolve({ cfg, accountId: undefined, request: {} });
|
|
598
|
+
expect(result).toBeNull();
|
|
599
|
+
});
|
|
600
|
+
it("buildPendingPayload returns appCard type", () => {
|
|
601
|
+
const build = lansengerPlugin.approvalCapability?.nativeRuntime?.presentation?.buildPendingPayload;
|
|
602
|
+
const cfg = { channels: { lansenger: { appId: "id", appSecret: "secret" } } };
|
|
603
|
+
const result = build({ cfg, request: { command: "rm -rf /", sessionKey: "sess-1" }, target: { to: "chat-1" }, nowMs: Date.now() });
|
|
604
|
+
expect(result.type).toBe("appCard");
|
|
605
|
+
expect(result.zh).toBeDefined();
|
|
606
|
+
expect(result.en).toBeDefined();
|
|
607
|
+
expect(result.zh.isDynamic).toBe(true);
|
|
608
|
+
});
|
|
609
|
+
it("buildResolvedPayload returns approved text", () => {
|
|
610
|
+
const build = lansengerPlugin.approvalCapability?.nativeRuntime?.presentation?.buildResolvedPayload;
|
|
611
|
+
const cfg = { channels: { lansenger: { appId: "id", appSecret: "secret" } } };
|
|
612
|
+
const result = build({ cfg, resolved: { kind: "approved", actorLabel: "admin" }, target: { to: "chat-1" } });
|
|
613
|
+
expect(result.type).toBe("text");
|
|
614
|
+
expect(result.text).toContain("已批准");
|
|
615
|
+
});
|
|
616
|
+
it("buildResolvedPayload returns denied text", () => {
|
|
617
|
+
const build = lansengerPlugin.approvalCapability?.nativeRuntime?.presentation?.buildResolvedPayload;
|
|
618
|
+
const cfg = { channels: { lansenger: { appId: "id", appSecret: "secret" } } };
|
|
619
|
+
const result = build({ cfg, resolved: { kind: "denied" }, target: { to: "chat-1" } });
|
|
620
|
+
expect(result.type).toBe("text");
|
|
621
|
+
expect(result.text).toContain("已拒绝");
|
|
622
|
+
});
|
|
623
|
+
});
|
|
330
624
|
//# sourceMappingURL=channel.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.test.js","sourceRoot":"","sources":["../../src/channel.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"channel.test.js","sourceRoot":"","sources":["../../src/channel.test.ts"],"names":[],"mappings":"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"}
|
package/dist/src/client.test.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { LansengerClient, mediaTypeFromPath, buildI18n } from "./client.js";
|
|
2
|
+
import { LansengerClient, mediaTypeFromPath, buildI18n, DEFAULT_API_GATEWAY_URL, MAX_MESSAGE_LENGTH } from "./client.js";
|
|
3
3
|
function makeClient() {
|
|
4
4
|
return new LansengerClient({ appId: "test-id", appSecret: "test-secret" });
|
|
5
5
|
}
|
|
@@ -404,4 +404,156 @@ describe("LansengerClient processRawMessage", () => {
|
|
|
404
404
|
expect(events.length).toBe(2);
|
|
405
405
|
});
|
|
406
406
|
});
|
|
407
|
+
describe("constants", () => {
|
|
408
|
+
it("DEFAULT_API_GATEWAY_URL is correct", () => {
|
|
409
|
+
expect(DEFAULT_API_GATEWAY_URL).toBe("https://open.e.lanxin.cn/open/apigw");
|
|
410
|
+
});
|
|
411
|
+
it("MAX_MESSAGE_LENGTH is 4000", () => {
|
|
412
|
+
expect(MAX_MESSAGE_LENGTH).toBe(4000);
|
|
413
|
+
});
|
|
414
|
+
});
|
|
415
|
+
describe("LansengerClient.sendText", () => {
|
|
416
|
+
beforeEach(() => {
|
|
417
|
+
vi.stubGlobal("fetch", async (url) => {
|
|
418
|
+
const u = typeof url === "string" ? url : url.url;
|
|
419
|
+
if (u.includes("apptoken"))
|
|
420
|
+
return new Response(JSON.stringify({ errCode: 0, errMsg: "", data: { appToken: "tok", expiresIn: 7200 } }), { headers: { "content-type": "application/json" } });
|
|
421
|
+
if (u.includes("messages/create"))
|
|
422
|
+
return new Response(JSON.stringify({ errCode: 0, errMsg: "", data: { msgId: "m1" } }), { headers: { "content-type": "application/json" } });
|
|
423
|
+
return new Response(JSON.stringify({ errCode: 0, errMsg: "", data: {} }), { headers: { "content-type": "application/json" } });
|
|
424
|
+
});
|
|
425
|
+
});
|
|
426
|
+
afterEach(() => { vi.restoreAllMocks(); });
|
|
427
|
+
it("sends plain text successfully", async () => {
|
|
428
|
+
const client = new LansengerClient({ appId: "id", appSecret: "secret" });
|
|
429
|
+
const result = await client.sendText("user-1", "Hello");
|
|
430
|
+
expect(result.success).toBe(true);
|
|
431
|
+
expect(result.messageId).toBe("m1");
|
|
432
|
+
});
|
|
433
|
+
it("sends plain text with reminder", async () => {
|
|
434
|
+
const client = new LansengerClient({ appId: "id", appSecret: "secret" });
|
|
435
|
+
const result = await client.sendText("user-1", "Hello", { all: true });
|
|
436
|
+
expect(result.success).toBe(true);
|
|
437
|
+
});
|
|
438
|
+
it("returns error when no token", async () => {
|
|
439
|
+
vi.stubGlobal("fetch", async () => new Response(JSON.stringify({ errCode: 40001, errMsg: "bad" }), { headers: { "content-type": "application/json" } }));
|
|
440
|
+
const client = new LansengerClient({ appId: "id", appSecret: "secret" });
|
|
441
|
+
const result = await client.sendText("user-1", "Hello");
|
|
442
|
+
expect(result.success).toBe(false);
|
|
443
|
+
});
|
|
444
|
+
});
|
|
445
|
+
describe("LansengerClient.msgTarget (via sendText group vs dm)", () => {
|
|
446
|
+
beforeEach(() => {
|
|
447
|
+
vi.stubGlobal("fetch", async (url, init) => {
|
|
448
|
+
const u = typeof url === "string" ? url : url.url;
|
|
449
|
+
if (u.includes("apptoken"))
|
|
450
|
+
return new Response(JSON.stringify({ errCode: 0, errMsg: "", data: { appToken: "tok", expiresIn: 7200 } }), { headers: { "content-type": "application/json" } });
|
|
451
|
+
const body = init?.body ? JSON.parse(init.body) : {};
|
|
452
|
+
if (u.includes("messages/group")) {
|
|
453
|
+
return new Response(JSON.stringify({ errCode: 0, errMsg: "", data: { msgId: "group-msg" } }), { headers: { "content-type": "application/json" } });
|
|
454
|
+
}
|
|
455
|
+
return new Response(JSON.stringify({ errCode: 0, errMsg: "", data: { msgId: "dm-msg" } }), { headers: { "content-type": "application/json" } });
|
|
456
|
+
});
|
|
457
|
+
});
|
|
458
|
+
afterEach(() => { vi.restoreAllMocks(); });
|
|
459
|
+
it("uses group endpoint for cached group chatId", async () => {
|
|
460
|
+
const client = new LansengerClient({ appId: "id", appSecret: "secret" });
|
|
461
|
+
client.cacheChatType("group-1", "group");
|
|
462
|
+
const result = await client.sendText("group-1", "Hi group");
|
|
463
|
+
expect(result.success).toBe(true);
|
|
464
|
+
});
|
|
465
|
+
it("uses private endpoint for DM chatId", async () => {
|
|
466
|
+
const client = new LansengerClient({ appId: "id", appSecret: "secret" });
|
|
467
|
+
const result = await client.sendText("user-1", "Hi user");
|
|
468
|
+
expect(result.success).toBe(true);
|
|
469
|
+
});
|
|
470
|
+
it("uses group endpoint for group: prefix chatId", async () => {
|
|
471
|
+
const client = new LansengerClient({ appId: "id", appSecret: "secret" });
|
|
472
|
+
const result = await client.sendText("group:some-id", "Hi");
|
|
473
|
+
expect(result.success).toBe(true);
|
|
474
|
+
});
|
|
475
|
+
});
|
|
476
|
+
describe("processRawMessage additional msgTypes", () => {
|
|
477
|
+
it("handles position message", async () => {
|
|
478
|
+
const client = makeClient();
|
|
479
|
+
const raw = JSON.stringify({
|
|
480
|
+
events: [{ data: { msgType: "position", messageId: "pos-1", chatType: "p2p", from: "user-1", conversationId: "conv-1", senderName: "Alice", msgData: { position: { name: "Office", address: "Building 5", latitude: "39.9", longitude: "116.4" } } } }],
|
|
481
|
+
});
|
|
482
|
+
const events = await client.processRawMessage(raw);
|
|
483
|
+
expect(events.length).toBe(1);
|
|
484
|
+
expect(events[0].text).toContain("[Location]");
|
|
485
|
+
expect(events[0].text).toContain("Office");
|
|
486
|
+
});
|
|
487
|
+
it("handles card (contact card) message", async () => {
|
|
488
|
+
const client = makeClient();
|
|
489
|
+
const raw = JSON.stringify({
|
|
490
|
+
events: [{ data: { msgType: "card", messageId: "card-1", chatType: "p2p", from: "user-1", conversationId: "conv-1", senderName: "Alice", msgData: { card: { staffId: "staff-123" } } } }],
|
|
491
|
+
});
|
|
492
|
+
const events = await client.processRawMessage(raw);
|
|
493
|
+
expect(events.length).toBe(1);
|
|
494
|
+
expect(events[0].text).toContain("[Contact Card]");
|
|
495
|
+
expect(events[0].text).toContain("staff-123");
|
|
496
|
+
});
|
|
497
|
+
it("handles sticker message", async () => {
|
|
498
|
+
const client = makeClient();
|
|
499
|
+
const raw = JSON.stringify({
|
|
500
|
+
events: [{ data: { msgType: "sticker", messageId: "stk-1", chatType: "p2p", from: "user-1", conversationId: "conv-1", senderName: "Alice", msgData: { sticker: { stickerId: "stk-001" } } } }],
|
|
501
|
+
});
|
|
502
|
+
const events = await client.processRawMessage(raw);
|
|
503
|
+
expect(events.length).toBe(1);
|
|
504
|
+
expect(events[0].text).toContain("[Sticker]");
|
|
505
|
+
});
|
|
506
|
+
it("handles unknown msgType gracefully", async () => {
|
|
507
|
+
const client = makeClient();
|
|
508
|
+
const raw = JSON.stringify({
|
|
509
|
+
events: [{ data: { msgType: "unknown_type", messageId: "unk-1", chatType: "p2p", from: "user-1", conversationId: "conv-1", senderName: "Alice", msgData: {} } }],
|
|
510
|
+
});
|
|
511
|
+
const events = await client.processRawMessage(raw);
|
|
512
|
+
expect(events.length).toBe(0);
|
|
513
|
+
});
|
|
514
|
+
});
|
|
515
|
+
describe("convertPxToPtDeep", () => {
|
|
516
|
+
it("converts px in nested object", () => {
|
|
517
|
+
const client = makeClient();
|
|
518
|
+
const input = { bodyTitle: "Title", bodyContent: "font-size:16px text" };
|
|
519
|
+
const card = { bodyTitle: input.bodyTitle, bodyContent: "font-size:16px text" };
|
|
520
|
+
expect(card.bodyContent).toContain("16px");
|
|
521
|
+
});
|
|
522
|
+
it("convertPxToPt in string", () => {
|
|
523
|
+
const result = "font-size:20px and font-size:48px".replace(/font-size:\s*(\d+(?:\.\d+)?)px/gi, (_m, n) => `font-size:${Math.max(12, Math.min(36, Math.round(parseFloat(n) * 0.75)))}pt`);
|
|
524
|
+
expect(result).toBe("font-size:15pt and font-size:36pt");
|
|
525
|
+
});
|
|
526
|
+
});
|
|
527
|
+
describe("LansengerClient.isWsAlive", () => {
|
|
528
|
+
it("returns false when no ws connection", () => {
|
|
529
|
+
const client = makeClient();
|
|
530
|
+
expect(client.isWsAlive()).toBe(false);
|
|
531
|
+
});
|
|
532
|
+
});
|
|
533
|
+
describe("LansengerClient.setMessageHandler", () => {
|
|
534
|
+
it("sets handler", () => {
|
|
535
|
+
const client = makeClient();
|
|
536
|
+
const handler = async () => { };
|
|
537
|
+
client.setMessageHandler(handler);
|
|
538
|
+
expect(client.messageHandler).toBe(handler);
|
|
539
|
+
});
|
|
540
|
+
});
|
|
541
|
+
describe("postJson error handling", () => {
|
|
542
|
+
beforeEach(() => {
|
|
543
|
+
vi.stubGlobal("fetch", async (url) => {
|
|
544
|
+
const u = typeof url === "string" ? url : url.url;
|
|
545
|
+
if (u.includes("apptoken"))
|
|
546
|
+
return new Response(JSON.stringify({ errCode: 0, errMsg: "", data: { appToken: "tok", expiresIn: 7200 } }), { headers: { "content-type": "application/json" } });
|
|
547
|
+
if (u.includes("messages/create"))
|
|
548
|
+
return new Response("Internal Server Error", { status: 500, headers: { "content-type": "text/plain" } });
|
|
549
|
+
return new Response("{}", { status: 200, headers: { "content-type": "application/json" } });
|
|
550
|
+
});
|
|
551
|
+
});
|
|
552
|
+
afterEach(() => { vi.restoreAllMocks(); });
|
|
553
|
+
it("handles HTTP 500 from API", async () => {
|
|
554
|
+
const client = new LansengerClient({ appId: "id", appSecret: "secret" });
|
|
555
|
+
const result = await client.sendText("user-1", "Hello");
|
|
556
|
+
expect(result.success).toBe(false);
|
|
557
|
+
});
|
|
558
|
+
});
|
|
407
559
|
//# sourceMappingURL=client.test.js.map
|