* refactor: remove channel shim directories, point all imports to extensions
Delete the 6 backward-compat shim directories (src/telegram, src/discord,
src/slack, src/signal, src/imessage, src/web) that were re-exporting from
extensions. Update all 112+ source files to import directly from
extensions/{channel}/src/ instead of through the shims.
Also:
- Move src/channels/telegram/ (allow-from, api) to extensions/telegram/src/
- Fix outbound adapters to use resolveOutboundSendDep (fixes 5 pre-existing TS errors)
- Update cross-extension imports (src/web/media.js → extensions/whatsapp/src/media.js)
- Update vitest, tsdown, knip, labeler, and script configs for new paths
- Update guard test allowlists for extension paths
After this, src/ has zero channel-specific implementation code — only the
generic plugin framework remains.
* fix: update raw-fetch guard allowlist line numbers after shim removal
* refactor: document direct extension channel imports
* test: mock transcript module in delivery helpers
95 lines
2.3 KiB
TypeScript
95 lines
2.3 KiB
TypeScript
import { beforeEach, vi } from "vitest";
|
|
import type { MockFn } from "../../../src/test-utils/vitest-mock-fn.js";
|
|
|
|
const { botApi, botCtorSpy } = vi.hoisted(() => ({
|
|
botApi: {
|
|
deleteMessage: vi.fn(),
|
|
editMessageText: vi.fn(),
|
|
sendChatAction: vi.fn(),
|
|
sendMessage: vi.fn(),
|
|
sendPoll: vi.fn(),
|
|
sendPhoto: vi.fn(),
|
|
sendVoice: vi.fn(),
|
|
sendAudio: vi.fn(),
|
|
sendVideo: vi.fn(),
|
|
sendVideoNote: vi.fn(),
|
|
sendAnimation: vi.fn(),
|
|
setMessageReaction: vi.fn(),
|
|
sendSticker: vi.fn(),
|
|
},
|
|
botCtorSpy: vi.fn(),
|
|
}));
|
|
|
|
const { loadWebMedia } = vi.hoisted(() => ({
|
|
loadWebMedia: vi.fn(),
|
|
}));
|
|
|
|
const { loadConfig } = vi.hoisted(() => ({
|
|
loadConfig: vi.fn(() => ({})),
|
|
}));
|
|
|
|
const { maybePersistResolvedTelegramTarget } = vi.hoisted(() => ({
|
|
maybePersistResolvedTelegramTarget: vi.fn(async () => {}),
|
|
}));
|
|
|
|
type TelegramSendTestMocks = {
|
|
botApi: Record<string, MockFn>;
|
|
botCtorSpy: MockFn;
|
|
loadConfig: MockFn;
|
|
loadWebMedia: MockFn;
|
|
maybePersistResolvedTelegramTarget: MockFn;
|
|
};
|
|
|
|
vi.mock("../../whatsapp/src/media.js", () => ({
|
|
loadWebMedia,
|
|
}));
|
|
|
|
vi.mock("grammy", () => ({
|
|
Bot: class {
|
|
api = botApi;
|
|
catch = vi.fn();
|
|
constructor(
|
|
public token: string,
|
|
public options?: {
|
|
client?: { fetch?: typeof fetch; timeoutSeconds?: number };
|
|
},
|
|
) {
|
|
botCtorSpy(token, options);
|
|
}
|
|
},
|
|
InputFile: class {},
|
|
}));
|
|
|
|
vi.mock("../../../src/config/config.js", async (importOriginal) => {
|
|
const actual = await importOriginal<typeof import("../../../src/config/config.js")>();
|
|
return {
|
|
...actual,
|
|
loadConfig,
|
|
};
|
|
});
|
|
|
|
vi.mock("./target-writeback.js", () => ({
|
|
maybePersistResolvedTelegramTarget,
|
|
}));
|
|
|
|
export function getTelegramSendTestMocks(): TelegramSendTestMocks {
|
|
return { botApi, botCtorSpy, loadConfig, loadWebMedia, maybePersistResolvedTelegramTarget };
|
|
}
|
|
|
|
export function installTelegramSendTestHooks() {
|
|
beforeEach(() => {
|
|
loadConfig.mockReturnValue({});
|
|
loadWebMedia.mockReset();
|
|
maybePersistResolvedTelegramTarget.mockReset();
|
|
maybePersistResolvedTelegramTarget.mockResolvedValue(undefined);
|
|
botCtorSpy.mockReset();
|
|
for (const fn of Object.values(botApi)) {
|
|
fn.mockReset();
|
|
}
|
|
});
|
|
}
|
|
|
|
export async function importTelegramSendModule() {
|
|
return await import("./send.js");
|
|
}
|