@sider-ai/chrome-openclaw-sider 1.0.31
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/README.md +75 -0
- package/README.zh_CN.md +108 -0
- package/dist/account-cW9SLuNu.d.ts +75 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +87 -0
- package/dist/setup-entry.d.ts +6 -0
- package/dist/setup-entry.js +11 -0
- package/dist/setup-plugin-api.d.ts +7 -0
- package/dist/setup-plugin-api.js +4 -0
- package/dist/src/account.d.ts +6 -0
- package/dist/src/account.js +260 -0
- package/dist/src/auth.d.ts +30 -0
- package/dist/src/auth.js +225 -0
- package/dist/src/channel-auto-title.d.ts +6 -0
- package/dist/src/channel-auto-title.js +102 -0
- package/dist/src/channel-builders.d.ts +105 -0
- package/dist/src/channel-builders.js +238 -0
- package/dist/src/channel-hooks.d.ts +30 -0
- package/dist/src/channel-hooks.js +380 -0
- package/dist/src/channel-monitor.d.ts +34 -0
- package/dist/src/channel-monitor.js +335 -0
- package/dist/src/channel-parts.d.ts +26 -0
- package/dist/src/channel-parts.js +32 -0
- package/dist/src/channel-relay.d.ts +117 -0
- package/dist/src/channel-relay.js +574 -0
- package/dist/src/channel-runtime.d.ts +33 -0
- package/dist/src/channel-runtime.js +138 -0
- package/dist/src/channel-send-result.d.ts +19 -0
- package/dist/src/channel-send-result.js +126 -0
- package/dist/src/channel-send.d.ts +73 -0
- package/dist/src/channel-send.js +291 -0
- package/dist/src/channel-session-model.d.ts +19 -0
- package/dist/src/channel-session-model.js +244 -0
- package/dist/src/channel-shared.d.ts +153 -0
- package/dist/src/channel-shared.js +96 -0
- package/dist/src/channel-state.d.ts +93 -0
- package/dist/src/channel-state.js +475 -0
- package/dist/src/channel-streaming.d.ts +117 -0
- package/dist/src/channel-streaming.js +681 -0
- package/dist/src/channel-types.d.ts +209 -0
- package/dist/src/channel-types.js +40 -0
- package/dist/src/channel-typing.d.ts +17 -0
- package/dist/src/channel-typing.js +79 -0
- package/dist/src/channel-util.d.ts +78 -0
- package/dist/src/channel-util.js +604 -0
- package/dist/src/channel.d.ts +14 -0
- package/dist/src/channel.js +834 -0
- package/dist/src/channel.setup.d.ts +10 -0
- package/dist/src/channel.setup.js +9 -0
- package/dist/src/config.d.ts +18 -0
- package/dist/src/config.js +38 -0
- package/dist/src/inbound-media.d.ts +37 -0
- package/dist/src/inbound-media.js +148 -0
- package/dist/src/media-upload.d.ts +87 -0
- package/dist/src/media-upload.js +1308 -0
- package/dist/src/setup-core.d.ts +72 -0
- package/dist/src/setup-core.js +343 -0
- package/dist/src/user-agent.d.ts +4 -0
- package/dist/src/user-agent.js +6 -0
- package/openclaw.plugin.json +96 -0
- package/package.json +47 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ChannelPlugin } from 'openclaw/plugin-sdk';
|
|
2
|
+
import { R as ResolvedSiderAccount } from '../account-cW9SLuNu.js';
|
|
3
|
+
import 'openclaw/plugin-sdk/setup';
|
|
4
|
+
import './auth.js';
|
|
5
|
+
import 'openclaw/plugin-sdk/plugin-entry';
|
|
6
|
+
import 'openclaw/plugin-sdk/config-runtime';
|
|
7
|
+
|
|
8
|
+
declare const siderSetupPlugin: ChannelPlugin<ResolvedSiderAccount>;
|
|
9
|
+
|
|
10
|
+
export { siderSetupPlugin };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare const SIDER_PLUGIN_ID = "chrome-openclaw-sider";
|
|
2
|
+
declare const SIDER_CHANNEL_ID = "chrome-openclaw-sider";
|
|
3
|
+
declare const SIDER_SERVICE_ID = "sider-auth-setup";
|
|
4
|
+
declare const SIDER_PLUGIN_NAME = "Chrome channel for Openclaw by Sider";
|
|
5
|
+
declare const SIDER_PLUGIN_DESCRIPTION = "Official Chrome channel plugin for connecting OpenClaw in Sider Chrome extension";
|
|
6
|
+
declare const SIDER_CHANNEL_LABEL = "Chrome channel for Openclaw by Sider";
|
|
7
|
+
declare const SIDER_CHANNEL_SELECTION_LABEL = "Chrome channel for Openclaw by Sider";
|
|
8
|
+
declare const SIDER_CHANNEL_DOCS_PATH = "/channels/sider";
|
|
9
|
+
declare const SIDER_CHANNEL_DOCS_LABEL = "sider";
|
|
10
|
+
declare const SIDER_CHANNEL_BLURB = "Command your OpenClaw from Chrome Sidebar directly.";
|
|
11
|
+
declare const SIDER_CHANNEL_ALIASES: readonly ["sider"];
|
|
12
|
+
declare const SIDER_DEFAULT_BASE_URL = "https://sider.ai/api/claw/self";
|
|
13
|
+
declare const SIDER_PUSH_TOOL_ERROR_WARNINGS = true;
|
|
14
|
+
declare const SIDER_TOOL_ERROR_WARNING_TEXT_RE: RegExp;
|
|
15
|
+
declare function readSiderBaseUrlEnv(): string | undefined;
|
|
16
|
+
declare function readDefaultSiderSetupTokenEnv(): string | undefined;
|
|
17
|
+
|
|
18
|
+
export { SIDER_CHANNEL_ALIASES, SIDER_CHANNEL_BLURB, SIDER_CHANNEL_DOCS_LABEL, SIDER_CHANNEL_DOCS_PATH, SIDER_CHANNEL_ID, SIDER_CHANNEL_LABEL, SIDER_CHANNEL_SELECTION_LABEL, SIDER_DEFAULT_BASE_URL, SIDER_PLUGIN_DESCRIPTION, SIDER_PLUGIN_ID, SIDER_PLUGIN_NAME, SIDER_PUSH_TOOL_ERROR_WARNINGS, SIDER_SERVICE_ID, SIDER_TOOL_ERROR_WARNING_TEXT_RE, readDefaultSiderSetupTokenEnv, readSiderBaseUrlEnv };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const SIDER_PLUGIN_ID = "chrome-openclaw-sider";
|
|
2
|
+
const SIDER_CHANNEL_ID = SIDER_PLUGIN_ID;
|
|
3
|
+
const SIDER_SERVICE_ID = "sider-auth-setup";
|
|
4
|
+
const SIDER_PLUGIN_NAME = "Chrome channel for Openclaw by Sider";
|
|
5
|
+
const SIDER_PLUGIN_DESCRIPTION = "Official Chrome channel plugin for connecting OpenClaw in Sider Chrome extension";
|
|
6
|
+
const SIDER_CHANNEL_LABEL = "Chrome channel for Openclaw by Sider";
|
|
7
|
+
const SIDER_CHANNEL_SELECTION_LABEL = "Chrome channel for Openclaw by Sider";
|
|
8
|
+
const SIDER_CHANNEL_DOCS_PATH = "/channels/sider";
|
|
9
|
+
const SIDER_CHANNEL_DOCS_LABEL = "sider";
|
|
10
|
+
const SIDER_CHANNEL_BLURB = "Command your OpenClaw from Chrome Sidebar directly.";
|
|
11
|
+
const SIDER_CHANNEL_ALIASES = ["sider"];
|
|
12
|
+
const SIDER_DEFAULT_BASE_URL = "https://sider.ai/api/claw/self";
|
|
13
|
+
const SIDER_PUSH_TOOL_ERROR_WARNINGS = true;
|
|
14
|
+
const SIDER_TOOL_ERROR_WARNING_TEXT_RE = /^⚠️ [^\n]+ failed(?:: [^\n]+)?$/u;
|
|
15
|
+
function readSiderBaseUrlEnv() {
|
|
16
|
+
return process.env.SIDER_GATEWAY_URL;
|
|
17
|
+
}
|
|
18
|
+
function readDefaultSiderSetupTokenEnv() {
|
|
19
|
+
return process.env.SIDER_SETUP_TOKEN;
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
SIDER_CHANNEL_ALIASES,
|
|
23
|
+
SIDER_CHANNEL_BLURB,
|
|
24
|
+
SIDER_CHANNEL_DOCS_LABEL,
|
|
25
|
+
SIDER_CHANNEL_DOCS_PATH,
|
|
26
|
+
SIDER_CHANNEL_ID,
|
|
27
|
+
SIDER_CHANNEL_LABEL,
|
|
28
|
+
SIDER_CHANNEL_SELECTION_LABEL,
|
|
29
|
+
SIDER_DEFAULT_BASE_URL,
|
|
30
|
+
SIDER_PLUGIN_DESCRIPTION,
|
|
31
|
+
SIDER_PLUGIN_ID,
|
|
32
|
+
SIDER_PLUGIN_NAME,
|
|
33
|
+
SIDER_PUSH_TOOL_ERROR_WARNINGS,
|
|
34
|
+
SIDER_SERVICE_ID,
|
|
35
|
+
SIDER_TOOL_ERROR_WARNING_TEXT_RE,
|
|
36
|
+
readDefaultSiderSetupTokenEnv,
|
|
37
|
+
readSiderBaseUrlEnv
|
|
38
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { PluginRuntime, OpenClawConfig } from 'openclaw/plugin-sdk';
|
|
2
|
+
import { buildAgentMediaPayload } from 'openclaw/plugin-sdk/media-runtime';
|
|
3
|
+
|
|
4
|
+
type SiderInboundMediaItem = {
|
|
5
|
+
url?: string;
|
|
6
|
+
mimeType?: string;
|
|
7
|
+
fileName?: string;
|
|
8
|
+
objectKey?: string;
|
|
9
|
+
fileId?: string;
|
|
10
|
+
};
|
|
11
|
+
type ResolveInboundMediaParams = {
|
|
12
|
+
runtime: PluginRuntime;
|
|
13
|
+
cfg: OpenClawConfig;
|
|
14
|
+
accountId: string;
|
|
15
|
+
mediaItems: SiderInboundMediaItem[];
|
|
16
|
+
maxBytes?: number;
|
|
17
|
+
gatewayUrl?: string;
|
|
18
|
+
token?: string;
|
|
19
|
+
requestTimeoutMs?: number;
|
|
20
|
+
logger?: {
|
|
21
|
+
debug?: (message: string, data?: Record<string, unknown>) => void;
|
|
22
|
+
warn?: (message: string, data?: Record<string, unknown>) => void;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
type ResolveInboundMediaResult = {
|
|
26
|
+
mediaPayload: ReturnType<typeof buildAgentMediaPayload>;
|
|
27
|
+
unresolvedMedia: SiderInboundMediaItem[];
|
|
28
|
+
};
|
|
29
|
+
declare function resolveSiderDownloadUrl(params: {
|
|
30
|
+
gatewayUrl: string;
|
|
31
|
+
objectKey: string;
|
|
32
|
+
token?: string;
|
|
33
|
+
timeoutMs?: number;
|
|
34
|
+
}): Promise<string>;
|
|
35
|
+
declare function resolveInboundSiderMedia(params: ResolveInboundMediaParams): Promise<ResolveInboundMediaResult>;
|
|
36
|
+
|
|
37
|
+
export { type ResolveInboundMediaResult, type SiderInboundMediaItem, resolveInboundSiderMedia, resolveSiderDownloadUrl };
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { buildAgentMediaPayload } from "openclaw/plugin-sdk/media-runtime";
|
|
2
|
+
import { formatAuthorizationHeader } from "./auth.js";
|
|
3
|
+
import { DEFAULT_MEDIA_SAVE_MAX_BYTES } from "./channel-types.js";
|
|
4
|
+
import { SIDER_CHANNEL_ID } from "./config.js";
|
|
5
|
+
import { SIDER_USER_AGENT } from "./user-agent.js";
|
|
6
|
+
const DEFAULT_INBOUND_MEDIA_MAX_BYTES = DEFAULT_MEDIA_SAVE_MAX_BYTES;
|
|
7
|
+
const DEFAULT_DOWNLOAD_URL_TIMEOUT_MS = 8e3;
|
|
8
|
+
function resolveInboundMediaMaxBytes(params) {
|
|
9
|
+
if (typeof params.maxBytes === "number" && Number.isFinite(params.maxBytes) && params.maxBytes > 0) {
|
|
10
|
+
return Math.floor(params.maxBytes);
|
|
11
|
+
}
|
|
12
|
+
const channelCfg = params.cfg.channels?.[SIDER_CHANNEL_ID] ?? {};
|
|
13
|
+
const configuredMb = channelCfg.mediaMaxMb;
|
|
14
|
+
if (typeof configuredMb === "number" && Number.isFinite(configuredMb) && configuredMb > 0) {
|
|
15
|
+
return Math.floor(configuredMb * 1024 * 1024);
|
|
16
|
+
}
|
|
17
|
+
return DEFAULT_INBOUND_MEDIA_MAX_BYTES;
|
|
18
|
+
}
|
|
19
|
+
function resolveGatewayApiUrl(gatewayUrl, apiPath) {
|
|
20
|
+
const url = new URL(gatewayUrl);
|
|
21
|
+
const basePath = url.pathname.replace(/\/+$/, "");
|
|
22
|
+
const normalizedPath = apiPath.startsWith("/") ? apiPath : `/${apiPath}`;
|
|
23
|
+
url.pathname = `${basePath}${normalizedPath}`;
|
|
24
|
+
url.search = "";
|
|
25
|
+
url.hash = "";
|
|
26
|
+
return url.toString();
|
|
27
|
+
}
|
|
28
|
+
async function resolveSiderDownloadUrl(params) {
|
|
29
|
+
const url = new URL(resolveGatewayApiUrl(params.gatewayUrl, "/v1/files/download-url"));
|
|
30
|
+
url.searchParams.set("object_key", params.objectKey);
|
|
31
|
+
const headers = {
|
|
32
|
+
"User-Agent": SIDER_USER_AGENT
|
|
33
|
+
};
|
|
34
|
+
if (params.token?.trim()) {
|
|
35
|
+
headers.Authorization = formatAuthorizationHeader(params.token);
|
|
36
|
+
}
|
|
37
|
+
const response = await fetch(url.toString(), {
|
|
38
|
+
method: "GET",
|
|
39
|
+
headers,
|
|
40
|
+
signal: AbortSignal.timeout(
|
|
41
|
+
Math.max(1e3, Math.floor(params.timeoutMs ?? DEFAULT_DOWNLOAD_URL_TIMEOUT_MS))
|
|
42
|
+
)
|
|
43
|
+
});
|
|
44
|
+
const text = await response.text();
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
const detail = text.trim();
|
|
47
|
+
const suffix = detail ? `: ${detail.slice(0, 300)}` : "";
|
|
48
|
+
throw new Error(`HTTP ${response.status} ${response.statusText}${suffix}`);
|
|
49
|
+
}
|
|
50
|
+
let parsed;
|
|
51
|
+
try {
|
|
52
|
+
parsed = text.trim() ? JSON.parse(text) : {};
|
|
53
|
+
} catch (error) {
|
|
54
|
+
throw new Error(`invalid JSON from /v1/files/download-url: ${String(error)}`);
|
|
55
|
+
}
|
|
56
|
+
const record = parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : null;
|
|
57
|
+
const downloadUrl = typeof record?.url === "string" ? record.url.trim() : "";
|
|
58
|
+
if (!downloadUrl) {
|
|
59
|
+
throw new Error("/v1/files/download-url response missing url");
|
|
60
|
+
}
|
|
61
|
+
return downloadUrl;
|
|
62
|
+
}
|
|
63
|
+
async function resolveInboundSiderMedia(params) {
|
|
64
|
+
const maxBytes = resolveInboundMediaMaxBytes({
|
|
65
|
+
cfg: params.cfg,
|
|
66
|
+
maxBytes: params.maxBytes
|
|
67
|
+
});
|
|
68
|
+
const downloaded = [];
|
|
69
|
+
const unresolvedMedia = [];
|
|
70
|
+
for (const media of params.mediaItems) {
|
|
71
|
+
let sourceUrl = media.url?.trim();
|
|
72
|
+
if (!sourceUrl && media.objectKey?.trim() && params.gatewayUrl?.trim()) {
|
|
73
|
+
try {
|
|
74
|
+
sourceUrl = await resolveSiderDownloadUrl({
|
|
75
|
+
gatewayUrl: params.gatewayUrl,
|
|
76
|
+
objectKey: media.objectKey,
|
|
77
|
+
token: params.token,
|
|
78
|
+
timeoutMs: params.requestTimeoutMs
|
|
79
|
+
});
|
|
80
|
+
params.logger?.debug?.("sider inbound media resolved download url from object_key", {
|
|
81
|
+
accountId: params.accountId,
|
|
82
|
+
objectKey: media.objectKey,
|
|
83
|
+
fileId: media.fileId
|
|
84
|
+
});
|
|
85
|
+
} catch (error) {
|
|
86
|
+
params.logger?.warn?.("sider inbound media failed to resolve download url from object_key", {
|
|
87
|
+
accountId: params.accountId,
|
|
88
|
+
objectKey: media.objectKey,
|
|
89
|
+
fileId: media.fileId,
|
|
90
|
+
error: String(error)
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (!sourceUrl) {
|
|
95
|
+
unresolvedMedia.push(media);
|
|
96
|
+
params.logger?.warn?.("sider inbound media missing source url", {
|
|
97
|
+
accountId: params.accountId,
|
|
98
|
+
fileId: media.fileId,
|
|
99
|
+
objectKey: media.objectKey,
|
|
100
|
+
hasGatewayUrl: Boolean(params.gatewayUrl?.trim())
|
|
101
|
+
});
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const fetched = await params.runtime.channel.media.fetchRemoteMedia({
|
|
106
|
+
url: sourceUrl,
|
|
107
|
+
maxBytes
|
|
108
|
+
});
|
|
109
|
+
const saveResult = await params.runtime.channel.media.saveMediaBuffer(
|
|
110
|
+
fetched.buffer,
|
|
111
|
+
fetched.contentType ?? media.mimeType,
|
|
112
|
+
"inbound",
|
|
113
|
+
maxBytes,
|
|
114
|
+
media.fileName ?? fetched.fileName
|
|
115
|
+
);
|
|
116
|
+
downloaded.push({
|
|
117
|
+
path: saveResult.path,
|
|
118
|
+
contentType: saveResult.contentType
|
|
119
|
+
});
|
|
120
|
+
params.logger?.debug?.("sider inbound media saved", {
|
|
121
|
+
accountId: params.accountId,
|
|
122
|
+
sourceUrl,
|
|
123
|
+
savedPath: saveResult.path,
|
|
124
|
+
contentType: saveResult.contentType,
|
|
125
|
+
objectKey: media.objectKey,
|
|
126
|
+
fileId: media.fileId
|
|
127
|
+
});
|
|
128
|
+
} catch (error) {
|
|
129
|
+
unresolvedMedia.push(media);
|
|
130
|
+
params.logger?.warn?.("sider inbound media download failed", {
|
|
131
|
+
accountId: params.accountId,
|
|
132
|
+
sourceUrl,
|
|
133
|
+
mimeType: media.mimeType,
|
|
134
|
+
objectKey: media.objectKey,
|
|
135
|
+
fileId: media.fileId,
|
|
136
|
+
error: String(error)
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
mediaPayload: buildAgentMediaPayload(downloaded),
|
|
142
|
+
unresolvedMedia
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
export {
|
|
146
|
+
resolveInboundSiderMedia,
|
|
147
|
+
resolveSiderDownloadUrl
|
|
148
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
type SiderUploadAccount = {
|
|
2
|
+
accountId: string;
|
|
3
|
+
gatewayUrl: string;
|
|
4
|
+
sendTimeoutMs: number;
|
|
5
|
+
token?: string;
|
|
6
|
+
};
|
|
7
|
+
type SiderPart = {
|
|
8
|
+
id?: string;
|
|
9
|
+
type: string;
|
|
10
|
+
spec_version?: number;
|
|
11
|
+
payload?: unknown;
|
|
12
|
+
meta?: unknown;
|
|
13
|
+
};
|
|
14
|
+
type SiderReplyLike = {
|
|
15
|
+
text?: string;
|
|
16
|
+
mediaUrl?: string;
|
|
17
|
+
mediaUrls?: string[];
|
|
18
|
+
isError?: boolean;
|
|
19
|
+
};
|
|
20
|
+
type SiderUploadLogger = {
|
|
21
|
+
debug?: (message: string, data?: Record<string, unknown>) => void;
|
|
22
|
+
warn?: (message: string, data?: Record<string, unknown>) => void;
|
|
23
|
+
};
|
|
24
|
+
type BuildSiderPartsParams = {
|
|
25
|
+
account: SiderUploadAccount;
|
|
26
|
+
sessionId: string;
|
|
27
|
+
payload: SiderReplyLike;
|
|
28
|
+
mediaLocalRoots?: readonly string[];
|
|
29
|
+
deferUploads?: boolean;
|
|
30
|
+
};
|
|
31
|
+
type DeferredSiderUpload = {
|
|
32
|
+
fileName: string;
|
|
33
|
+
size: number;
|
|
34
|
+
source?: string;
|
|
35
|
+
upload: () => Promise<void>;
|
|
36
|
+
};
|
|
37
|
+
type OptimisticSiderPartResult = {
|
|
38
|
+
part: SiderPart;
|
|
39
|
+
deferredUpload?: DeferredSiderUpload;
|
|
40
|
+
};
|
|
41
|
+
type OptimisticSiderPartsResult = {
|
|
42
|
+
parts: SiderPart[];
|
|
43
|
+
deferredUploads: DeferredSiderUpload[];
|
|
44
|
+
};
|
|
45
|
+
declare function inferSourceMeta(sourceRef?: string): Record<string, unknown> | undefined;
|
|
46
|
+
declare function startDeferredSiderUploads(params: {
|
|
47
|
+
account: SiderUploadAccount;
|
|
48
|
+
sessionId: string;
|
|
49
|
+
uploads: readonly DeferredSiderUpload[];
|
|
50
|
+
context: string;
|
|
51
|
+
}): void;
|
|
52
|
+
declare function uploadMediaToSider(params: {
|
|
53
|
+
account: SiderUploadAccount;
|
|
54
|
+
sessionId: string;
|
|
55
|
+
loadUrl: string;
|
|
56
|
+
source?: string;
|
|
57
|
+
meta?: Record<string, unknown>;
|
|
58
|
+
mediaLocalRoots?: readonly string[];
|
|
59
|
+
logger?: SiderUploadLogger;
|
|
60
|
+
deferUpload?: boolean;
|
|
61
|
+
}): Promise<OptimisticSiderPartResult>;
|
|
62
|
+
declare function resolveOutboundMediaLoadUrl(params: {
|
|
63
|
+
source: string;
|
|
64
|
+
mediaLocalRoots?: readonly string[];
|
|
65
|
+
}): Promise<string | undefined>;
|
|
66
|
+
declare function buildSiderPartFromInlineAttachment(params: {
|
|
67
|
+
account: SiderUploadAccount;
|
|
68
|
+
sessionId: string;
|
|
69
|
+
buffer: Buffer;
|
|
70
|
+
contentType?: string;
|
|
71
|
+
fileName?: string;
|
|
72
|
+
mediaKind?: "image" | "file";
|
|
73
|
+
source?: string;
|
|
74
|
+
logger?: SiderUploadLogger;
|
|
75
|
+
}): Promise<SiderPart>;
|
|
76
|
+
declare function buildOptimisticSiderPartFromInlineAttachment(params: {
|
|
77
|
+
account: SiderUploadAccount;
|
|
78
|
+
sessionId: string;
|
|
79
|
+
buffer: Buffer;
|
|
80
|
+
contentType?: string;
|
|
81
|
+
fileName: string;
|
|
82
|
+
mediaKind?: string;
|
|
83
|
+
source?: string;
|
|
84
|
+
}): Promise<OptimisticSiderPartResult>;
|
|
85
|
+
declare function buildSiderPartsFromReplyPayload(params: BuildSiderPartsParams): Promise<OptimisticSiderPartsResult>;
|
|
86
|
+
|
|
87
|
+
export { type DeferredSiderUpload, type OptimisticSiderPartsResult, type SiderPart, type SiderUploadAccount, buildOptimisticSiderPartFromInlineAttachment, buildSiderPartFromInlineAttachment, buildSiderPartsFromReplyPayload, inferSourceMeta, resolveOutboundMediaLoadUrl, startDeferredSiderUploads, uploadMediaToSider };
|