zapry-openclaw-plugin 0.0.1 → 0.0.3

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.
Files changed (46) hide show
  1. package/README.md +6 -4
  2. package/dist/index.d.ts +12 -0
  3. package/dist/index.js +344 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/src/actions.d.ts +14 -0
  6. package/dist/src/actions.js +2026 -0
  7. package/dist/src/actions.js.map +1 -0
  8. package/dist/src/api-client.d.ts +96 -0
  9. package/dist/src/api-client.js +252 -0
  10. package/dist/src/api-client.js.map +1 -0
  11. package/dist/src/channel.d.ts +127 -0
  12. package/dist/src/channel.js +248 -0
  13. package/dist/src/channel.js.map +1 -0
  14. package/dist/src/config.d.ts +4 -0
  15. package/dist/src/config.js +58 -0
  16. package/dist/src/config.js.map +1 -0
  17. package/dist/src/inbound.d.ts +27 -0
  18. package/dist/src/inbound.js +2826 -0
  19. package/dist/src/inbound.js.map +1 -0
  20. package/dist/src/monitor.d.ts +18 -0
  21. package/dist/src/monitor.js +113 -0
  22. package/dist/src/monitor.js.map +1 -0
  23. package/dist/src/profile-sync.d.ts +5 -0
  24. package/dist/src/profile-sync.js +153 -0
  25. package/dist/src/profile-sync.js.map +1 -0
  26. package/dist/src/runtime.d.ts +18 -0
  27. package/dist/src/runtime.js +41 -0
  28. package/dist/src/runtime.js.map +1 -0
  29. package/dist/src/send.d.ts +6 -0
  30. package/dist/src/send.js +222 -0
  31. package/dist/src/send.js.map +1 -0
  32. package/dist/src/types.d.ts +152 -0
  33. package/dist/src/types.js +3 -0
  34. package/dist/src/types.js.map +1 -0
  35. package/package.json +16 -4
  36. package/index.ts +0 -345
  37. package/src/actions.ts +0 -2241
  38. package/src/api-client.ts +0 -357
  39. package/src/channel.ts +0 -268
  40. package/src/config.ts +0 -68
  41. package/src/inbound.ts +0 -3494
  42. package/src/monitor.ts +0 -144
  43. package/src/profile-sync.ts +0 -195
  44. package/src/runtime.ts +0 -66
  45. package/src/send.ts +0 -257
  46. package/src/types.ts +0 -175
@@ -0,0 +1,222 @@
1
+ import { ZapryApiClient } from "./api-client.js";
2
+ import { readFile } from "node:fs/promises";
3
+ import { extname } from "node:path";
4
+ const MIME_MAP = {
5
+ ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".png": "image/png",
6
+ ".webp": "image/webp", ".gif": "image/gif", ".bmp": "image/bmp",
7
+ ".heic": "image/heic", ".heif": "image/heif",
8
+ ".mp4": "video/mp4", ".mov": "video/quicktime", ".avi": "video/x-msvideo", ".webm": "video/webm",
9
+ ".mp3": "audio/mpeg", ".wav": "audio/wav", ".aac": "audio/aac",
10
+ ".ogg": "audio/ogg", ".opus": "audio/opus", ".m4a": "audio/mp4", ".amr": "audio/amr",
11
+ ".flac": "audio/flac",
12
+ };
13
+ const IMAGE_EXTS = new Set(["jpg", "jpeg", "png", "webp", "bmp", "heic", "heif"]);
14
+ const ANIMATION_EXTS = new Set(["gif"]);
15
+ const VIDEO_EXTS = new Set(["mp4", "mov", "avi", "webm"]);
16
+ const VOICE_EXTS = new Set(["opus", "ogg", "oga", "amr", "m4a"]);
17
+ const AUDIO_EXTS = new Set(["mp3", "wav", "aac", "flac", "m4b"]);
18
+ const EXTERNAL_IMAGE_FETCH_TIMEOUT_MS = 15_000;
19
+ const MAX_EXTERNAL_IMAGE_BYTES = 10 * 1024 * 1024;
20
+ async function toDataUri(localPath) {
21
+ const buf = await readFile(localPath);
22
+ const ext = extname(localPath).toLowerCase();
23
+ const mime = MIME_MAP[ext] || "application/octet-stream";
24
+ return `data:${mime};base64,${buf.toString("base64")}`;
25
+ }
26
+ function isLocalPath(url) {
27
+ return /^(\/|~\/|\.\/|\.\.\/)/.test(url) || /^[a-zA-Z]:\\/.test(url);
28
+ }
29
+ function isHttpUrl(url) {
30
+ return /^https?:\/\//i.test(url);
31
+ }
32
+ function extractDataUriMime(source) {
33
+ const match = /^data:([^;,]+)[;,]/i.exec(source.trim());
34
+ if (!match) {
35
+ return null;
36
+ }
37
+ return String(match[1]).trim().toLowerCase();
38
+ }
39
+ function mediaKindFromMime(mime) {
40
+ const normalized = mime.toLowerCase();
41
+ if (normalized === "image/gif") {
42
+ return "animation";
43
+ }
44
+ if (normalized.startsWith("image/")) {
45
+ return "photo";
46
+ }
47
+ if (normalized.startsWith("video/")) {
48
+ return "video";
49
+ }
50
+ if (normalized.startsWith("audio/")) {
51
+ if (/(ogg|opus|amr|x-m4a|mp4)/i.test(normalized)) {
52
+ return "voice";
53
+ }
54
+ return "audio";
55
+ }
56
+ return "document";
57
+ }
58
+ function inferMimeFromPath(pathLike) {
59
+ const clean = pathLike.split("?")[0]?.split("#")[0] ?? pathLike;
60
+ const ext = extname(clean).toLowerCase();
61
+ return MIME_MAP[ext] || "application/octet-stream";
62
+ }
63
+ function detectMediaKind(mediaRef, originalSource) {
64
+ const dataUriMime = extractDataUriMime(mediaRef);
65
+ if (dataUriMime) {
66
+ return mediaKindFromMime(dataUriMime);
67
+ }
68
+ const clean = (originalSource || mediaRef).split("?")[0]?.split("#")[0] ?? (originalSource || mediaRef);
69
+ const ext = clean.split(".").pop()?.toLowerCase() ?? "";
70
+ if (ANIMATION_EXTS.has(ext)) {
71
+ return "animation";
72
+ }
73
+ if (IMAGE_EXTS.has(ext)) {
74
+ return "photo";
75
+ }
76
+ if (VIDEO_EXTS.has(ext)) {
77
+ return "video";
78
+ }
79
+ if (VOICE_EXTS.has(ext)) {
80
+ return "voice";
81
+ }
82
+ if (AUDIO_EXTS.has(ext)) {
83
+ return "audio";
84
+ }
85
+ return "document";
86
+ }
87
+ function normalizeContentType(contentType) {
88
+ return String(contentType ?? "")
89
+ .split(";")[0]
90
+ .trim()
91
+ .toLowerCase();
92
+ }
93
+ function isGifBinary(binary) {
94
+ if (binary.length < 6) {
95
+ return false;
96
+ }
97
+ const header = binary.subarray(0, 6).toString("ascii");
98
+ return header === "GIF87a" || header === "GIF89a";
99
+ }
100
+ async function readResponseBodyWithSizeLimit(response, maxBytes) {
101
+ const contentLength = Number.parseInt(response.headers.get("content-length") ?? "", 10);
102
+ if (Number.isFinite(contentLength) && contentLength > maxBytes) {
103
+ throw new Error(`file is too large (${contentLength} bytes), max ${maxBytes} bytes`);
104
+ }
105
+ if (!response.body) {
106
+ throw new Error("empty response body");
107
+ }
108
+ const reader = response.body.getReader();
109
+ const chunks = [];
110
+ let total = 0;
111
+ while (true) {
112
+ const { done, value } = await reader.read();
113
+ if (done) {
114
+ break;
115
+ }
116
+ if (!value || value.byteLength === 0) {
117
+ continue;
118
+ }
119
+ total += value.byteLength;
120
+ if (total > maxBytes) {
121
+ throw new Error(`file is too large (${total} bytes), max ${maxBytes} bytes`);
122
+ }
123
+ chunks.push(Buffer.from(value));
124
+ }
125
+ return Buffer.concat(chunks, total);
126
+ }
127
+ function isAbortError(err) {
128
+ if (!err || typeof err !== "object") {
129
+ return false;
130
+ }
131
+ const maybeError = err;
132
+ return maybeError.name === "AbortError" || maybeError.code === "ABORT_ERR";
133
+ }
134
+ async function downloadGifAsDataUri(source) {
135
+ const controller = new AbortController();
136
+ const timeout = setTimeout(() => controller.abort(), EXTERNAL_IMAGE_FETCH_TIMEOUT_MS);
137
+ try {
138
+ const response = await fetch(source, {
139
+ method: "GET",
140
+ signal: controller.signal,
141
+ redirect: "follow",
142
+ });
143
+ if (!response.ok) {
144
+ throw new Error(`HTTP ${response.status}`);
145
+ }
146
+ const declaredMime = normalizeContentType(response.headers.get("content-type"));
147
+ const binary = await readResponseBodyWithSizeLimit(response, MAX_EXTERNAL_IMAGE_BYTES);
148
+ const inferredMime = inferMimeFromPath(source);
149
+ const mime = declaredMime || inferredMime;
150
+ if (mime !== "image/gif" && !isGifBinary(binary)) {
151
+ throw new Error(`sendAnimation requires GIF source, but got ${JSON.stringify(mime || "unknown")} (tip: use the direct .gif URL)`);
152
+ }
153
+ return `data:image/gif;base64,${binary.toString("base64")}`;
154
+ }
155
+ catch (err) {
156
+ if (isAbortError(err)) {
157
+ throw new Error(`animation download timed out after ${EXTERNAL_IMAGE_FETCH_TIMEOUT_MS}ms`);
158
+ }
159
+ if (err instanceof Error) {
160
+ throw new Error(`animation download failed: ${err.message}`);
161
+ }
162
+ throw new Error("animation download failed");
163
+ }
164
+ finally {
165
+ clearTimeout(timeout);
166
+ }
167
+ }
168
+ export async function sendMessageZapry(account, to, text, opts) {
169
+ const client = new ZapryApiClient(account.config.apiBaseUrl, account.botToken);
170
+ const chatId = normalizeTarget(to);
171
+ if (opts?.mediaUrl) {
172
+ const originalMediaUrl = opts.mediaUrl.trim();
173
+ let mediaRef = originalMediaUrl;
174
+ if (isLocalPath(mediaRef)) {
175
+ const resolved = mediaRef.replace(/^~/, process.env.HOME || "");
176
+ mediaRef = await toDataUri(resolved);
177
+ }
178
+ const initialKind = detectMediaKind(mediaRef, originalMediaUrl);
179
+ if (initialKind === "animation" && isHttpUrl(mediaRef)) {
180
+ mediaRef = await downloadGifAsDataUri(mediaRef);
181
+ }
182
+ const mediaKind = detectMediaKind(mediaRef, originalMediaUrl);
183
+ let resp;
184
+ switch (mediaKind) {
185
+ case "animation":
186
+ resp = await client.sendAnimation(chatId, mediaRef);
187
+ break;
188
+ case "photo":
189
+ resp = await client.sendPhoto(chatId, mediaRef);
190
+ break;
191
+ case "video":
192
+ resp = await client.sendVideo(chatId, mediaRef);
193
+ break;
194
+ case "voice":
195
+ resp = await client.sendVoice(chatId, mediaRef);
196
+ break;
197
+ case "audio":
198
+ resp = await client.sendAudio(chatId, mediaRef);
199
+ break;
200
+ default:
201
+ resp = await client.sendDocument(chatId, mediaRef);
202
+ break;
203
+ }
204
+ if (!resp.ok) {
205
+ return { ok: false, error: resp.description ?? "send media failed" };
206
+ }
207
+ const result = resp.result;
208
+ return { ok: true, messageId: result?.message_id };
209
+ }
210
+ const resp = await client.sendMessage(chatId, text, {
211
+ replyToMessageId: opts?.replyTo,
212
+ });
213
+ if (!resp.ok) {
214
+ return { ok: false, error: resp.description ?? "send message failed" };
215
+ }
216
+ const result = resp.result;
217
+ return { ok: true, messageId: result?.message_id };
218
+ }
219
+ function normalizeTarget(to) {
220
+ return to.replace(/^(chat|zapry):/i, "").trim();
221
+ }
222
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/send.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ export declare const DEFAULT_ACCOUNT_ID = "default";
2
+ export declare const DEFAULT_API_BASE_URL = "https://openapi.mimo.immo";
3
+ export type ZapryAccountConfig = {
4
+ botToken?: string;
5
+ apiBaseUrl?: string;
6
+ mode?: "polling" | "webhook";
7
+ webhookUrl?: string;
8
+ enabled?: boolean;
9
+ name?: string;
10
+ dm?: {
11
+ policy?: string;
12
+ allowFrom?: string[];
13
+ };
14
+ };
15
+ export type ZapryChannelConfig = {
16
+ enabled?: boolean;
17
+ botToken?: string;
18
+ apiBaseUrl?: string;
19
+ mode?: "polling" | "webhook";
20
+ webhookUrl?: string;
21
+ accounts?: Record<string, ZapryAccountConfig>;
22
+ dm?: {
23
+ policy?: string;
24
+ allowFrom?: string[];
25
+ };
26
+ };
27
+ export type ResolvedZapryAccount = {
28
+ accountId: string;
29
+ name?: string;
30
+ enabled: boolean;
31
+ botToken: string;
32
+ tokenSource: "config" | "env";
33
+ config: {
34
+ apiBaseUrl: string;
35
+ mode: "polling" | "webhook";
36
+ webhookUrl?: string;
37
+ dm?: {
38
+ policy?: string;
39
+ allowFrom?: string[];
40
+ };
41
+ };
42
+ };
43
+ export type ZapryApiResponse<T = unknown> = {
44
+ ok: boolean;
45
+ result?: T;
46
+ error_code?: number;
47
+ description?: string;
48
+ };
49
+ export type ZaprySendOpts = {
50
+ replyToMessageId?: string;
51
+ messageThreadId?: string;
52
+ replyMarkup?: unknown;
53
+ accountId?: string;
54
+ };
55
+ export type ZaprySendResult = {
56
+ ok: boolean;
57
+ messageId?: string;
58
+ error?: string;
59
+ };
60
+ export type ProfileSourceSkill = {
61
+ skillKey: string;
62
+ skillVersion: string;
63
+ source: string;
64
+ path: string;
65
+ content: string;
66
+ sha256: string;
67
+ bytes: number;
68
+ };
69
+ export type ProfileSource = {
70
+ version: string;
71
+ source: string;
72
+ agentKey: string;
73
+ snapshotId: string;
74
+ soulMd: string;
75
+ skills: ProfileSourceSkill[];
76
+ };
77
+ export type DerivedProfile = {
78
+ name?: string;
79
+ role?: string;
80
+ vibe?: string;
81
+ emoji?: string;
82
+ avatar?: string;
83
+ tags?: string[];
84
+ summary?: string;
85
+ skills?: string[];
86
+ routeTags?: string[];
87
+ derivedVersion?: string;
88
+ derivedAt?: string;
89
+ overrideRevision?: number;
90
+ };
91
+ export type PostComment = {
92
+ id: number;
93
+ user_id: number;
94
+ text: string;
95
+ time: number;
96
+ nick: string;
97
+ avatar: string;
98
+ type: number;
99
+ };
100
+ export type PostInfo = {
101
+ id: number;
102
+ user_id: number;
103
+ desc: string;
104
+ text: string;
105
+ media: string;
106
+ ctime: number;
107
+ nick: string;
108
+ avatar: string;
109
+ praise_count: number;
110
+ comment_count: number;
111
+ share_count: number;
112
+ can_share: number;
113
+ };
114
+ export type FeedItem = {
115
+ info: PostInfo;
116
+ comments: PostComment[];
117
+ };
118
+ export type FeedListResponse = {
119
+ items: FeedItem[];
120
+ pages: number;
121
+ };
122
+ export type CreatePostResponse = {
123
+ created: boolean;
124
+ dynamic_id: number;
125
+ };
126
+ export type ChatHistoryMessage = {
127
+ message_id: string;
128
+ from_id: string;
129
+ from_name?: string;
130
+ is_bot: boolean;
131
+ chat_id: string;
132
+ text?: string;
133
+ type: string;
134
+ timestamp: number;
135
+ media_url?: string;
136
+ };
137
+ export type ChatHistoryResponse = {
138
+ chat_id: string;
139
+ count: number;
140
+ messages: ChatHistoryMessage[];
141
+ };
142
+ export type SetMyProfilePayload = {
143
+ profileSource: ProfileSource;
144
+ };
145
+ export type SetMyProfileResponse = {
146
+ ok: boolean;
147
+ unsupported_profile_source?: boolean;
148
+ derived?: {
149
+ snapshotId?: string;
150
+ profile?: DerivedProfile;
151
+ };
152
+ };
@@ -0,0 +1,3 @@
1
+ export const DEFAULT_ACCOUNT_ID = "default";
2
+ export const DEFAULT_API_BASE_URL = "https://openapi.mimo.immo";
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAC5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,2BAA2B,CAAC"}
package/package.json CHANGED
@@ -1,20 +1,32 @@
1
1
  {
2
2
  "name": "zapry-openclaw-plugin",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "OpenClaw Zapry channel plugin — messaging, groups, feed, clubs, and bot self-management",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./openclaw.plugin.json": "./openclaw.plugin.json"
15
+ },
7
16
  "openclaw": {
8
17
  "extensions": [
9
- "./index.ts"
18
+ "./dist/index.js"
10
19
  ]
11
20
  },
12
21
  "files": [
13
- "index.ts",
14
- "src/",
22
+ "dist/",
15
23
  "skills/",
16
24
  "openclaw.plugin.json"
17
25
  ],
26
+ "scripts": {
27
+ "build": "tsc -p tsconfig.json",
28
+ "prepack": "npm run build"
29
+ },
18
30
  "devDependencies": {
19
31
  "@types/node": "^25.5.0",
20
32
  "typescript": "^5.9.3"