@krischoichoi/channel-lark 0.6.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.
Files changed (62) hide show
  1. package/README.md +114 -0
  2. package/lib/adapter.d.ts +128 -0
  3. package/lib/adapter.d.ts.map +1 -0
  4. package/lib/adapter.js +347 -0
  5. package/lib/adapter.js.map +1 -0
  6. package/lib/auth/device-authorization.d.ts +12 -0
  7. package/lib/auth/device-authorization.d.ts.map +1 -0
  8. package/lib/auth/device-authorization.js +169 -0
  9. package/lib/auth/device-authorization.js.map +1 -0
  10. package/lib/card.d.ts +124 -0
  11. package/lib/card.d.ts.map +1 -0
  12. package/lib/card.js +347 -0
  13. package/lib/card.js.map +1 -0
  14. package/lib/config.d.ts +103 -0
  15. package/lib/config.d.ts.map +1 -0
  16. package/lib/config.js +60 -0
  17. package/lib/config.js.map +1 -0
  18. package/lib/definition.d.ts +74 -0
  19. package/lib/definition.d.ts.map +1 -0
  20. package/lib/definition.js +190 -0
  21. package/lib/definition.js.map +1 -0
  22. package/lib/inbound.d.ts +41 -0
  23. package/lib/inbound.d.ts.map +1 -0
  24. package/lib/inbound.js +102 -0
  25. package/lib/inbound.js.map +1 -0
  26. package/lib/index.d.ts +58 -0
  27. package/lib/index.d.ts.map +1 -0
  28. package/lib/index.js +104 -0
  29. package/lib/index.js.map +1 -0
  30. package/lib/lark-sdk-upstream.d.ts +128 -0
  31. package/lib/lark-sdk-upstream.d.ts.map +1 -0
  32. package/lib/lark-sdk-upstream.js +339 -0
  33. package/lib/lark-sdk-upstream.js.map +1 -0
  34. package/lib/manifest.d.ts +23 -0
  35. package/lib/manifest.d.ts.map +1 -0
  36. package/lib/manifest.js +36 -0
  37. package/lib/manifest.js.map +1 -0
  38. package/lib/mapper.d.ts +47 -0
  39. package/lib/mapper.d.ts.map +1 -0
  40. package/lib/mapper.js +223 -0
  41. package/lib/mapper.js.map +1 -0
  42. package/lib/media-hydrator.d.ts +55 -0
  43. package/lib/media-hydrator.d.ts.map +1 -0
  44. package/lib/media-hydrator.js +172 -0
  45. package/lib/media-hydrator.js.map +1 -0
  46. package/lib/openapi-outbound.d.ts +216 -0
  47. package/lib/openapi-outbound.d.ts.map +1 -0
  48. package/lib/openapi-outbound.js +384 -0
  49. package/lib/openapi-outbound.js.map +1 -0
  50. package/lib/outbound.d.ts +21 -0
  51. package/lib/outbound.d.ts.map +1 -0
  52. package/lib/outbound.js +93 -0
  53. package/lib/outbound.js.map +1 -0
  54. package/lib/upstream/media-port.d.ts +154 -0
  55. package/lib/upstream/media-port.d.ts.map +1 -0
  56. package/lib/upstream/media-port.js +168 -0
  57. package/lib/upstream/media-port.js.map +1 -0
  58. package/lib/upstream.d.ts +119 -0
  59. package/lib/upstream.d.ts.map +1 -0
  60. package/lib/upstream.js +2 -0
  61. package/lib/upstream.js.map +1 -0
  62. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lark-sdk-upstream.js","sourceRoot":"","sources":["../src/lark-sdk-upstream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface LarkUpstreamManifest {
2
+ reference: string;
3
+ testedVersion: string;
4
+ versionRange: string;
5
+ strategy: 'sdk' | 'source';
6
+ }
7
+ /** Official SDK consumed by the upstream driver, when one is used. */
8
+ export interface LarkSdkManifest {
9
+ /** npm package name of the official SDK. */
10
+ package: string;
11
+ /** Version the adapter was verified against. */
12
+ testedVersion: string;
13
+ }
14
+ export interface LarkManifest {
15
+ id: 'lark';
16
+ adapterVersion: string;
17
+ upstream: LarkUpstreamManifest;
18
+ sdk: LarkSdkManifest | undefined;
19
+ status: 'tested';
20
+ }
21
+ /** Current manifest: inbound via the official @larksuiteoapi/node-sdk. */
22
+ export declare const manifest: LarkManifest;
23
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC5B;AAED,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,GAAG,EAAE,eAAe,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,EAAE,YActB,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Lark upstream compatibility manifest.
3
+ *
4
+ * Records the upstream reference and tested version so `channels doctor` and
5
+ * the upgrade pipeline can govern compatibility without re-verifying by hand.
6
+ *
7
+ * Strategy: 'sdk' — inbound rides the official `@larksuiteoapi/node-sdk`
8
+ * (WebSocket long-connection, `im.message.receive_v1` + `card.action.trigger`)
9
+ * and outbound rides the same SDK's OpenAPI client (`im.v1.message.create` /
10
+ * `patch`, media uploads, CardKit 2.0 card entities + native streaming).
11
+ * There is no self-hosted gateway.
12
+ *
13
+ * Status 'tested' is justified by the Channel Contract + fixture tests plus
14
+ * the official-SDK offline tests (fake WS client, real EventDispatcher) —
15
+ * fully offline. Live verification against a real Lark app (AppId/AppSecret),
16
+ * its published permissions and event subscriptions is a manual step and is
17
+ * LIVE-REQUIRED before the adapter may be claimed live-tested.
18
+ */
19
+ import pkg from '../package.json' with { type: 'json' };
20
+ /** Current manifest: inbound via the official @larksuiteoapi/node-sdk. */
21
+ export const manifest = {
22
+ id: 'lark',
23
+ adapterVersion: pkg.version,
24
+ upstream: {
25
+ reference: 'larksuite/node-sdk (https://github.com/larksuite/node-sdk)',
26
+ testedVersion: '1.73.1',
27
+ versionRange: '1.73.1',
28
+ strategy: 'sdk',
29
+ },
30
+ sdk: {
31
+ package: '@larksuiteoapi/node-sdk',
32
+ testedVersion: '1.73.1',
33
+ },
34
+ status: 'tested',
35
+ };
36
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAyBxD,0EAA0E;AAC1E,MAAM,CAAC,MAAM,QAAQ,GAAiB;IACpC,EAAE,EAAE,MAAM;IACV,cAAc,EAAE,GAAG,CAAC,OAAO;IAC3B,QAAQ,EAAE;QACR,SAAS,EAAE,4DAA4D;QACvE,aAAa,EAAE,QAAQ;QACvB,YAAY,EAAE,QAAQ;QACtB,QAAQ,EAAE,KAAK;KAChB;IACD,GAAG,EAAE;QACH,OAAO,EAAE,yBAAyB;QAClC,aAAa,EAAE,QAAQ;KACxB;IACD,MAAM,EAAE,QAAQ;CACjB,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Pure payload mapping (no I/O): platform raw payloads → Channel Contract,
3
+ * and outbound Channel messages → lark text/media payloads.
4
+ *
5
+ * Raw payloads only ever ride along in `event.raw` for debugging — core and
6
+ * the harness bridge never depend on their shape (red line 6).
7
+ *
8
+ * Lark canonical raw shapes are deliberately simple (produced by
9
+ * `mapSdkMessageEvent` / `mapSdkCardAction` from official SDK events), e.g.:
10
+ * ```json
11
+ * { "type": "text", "msgId": "msg_1", "senderId": "ou_123",
12
+ * "conversationId": "oc_456", "threadId": "om_789", "content": "hello" }
13
+ * ```
14
+ *
15
+ * The mapper PRESERVES both `conversationId` and the optional `threadId`
16
+ * (execution plan Task 12.2): when a raw payload carries a `threadId`, the
17
+ * mapped `conversation.threadId` is set, so the Harness session key becomes
18
+ * `channel:account:conversation:thread` and threads isolate sessions.
19
+ */
20
+ import type { AccountId, ChannelId, MessageReceived, InteractionReceived, OutboundMessage } from '@krischoichoi/channel-core';
21
+ export interface LarkInboundMeta {
22
+ channel: ChannelId;
23
+ accountId: AccountId;
24
+ }
25
+ /** Stable hash for ids when the SDK event omits a msgId. */
26
+ export declare function simpleHash(input: string): string;
27
+ /** Map one raw lark message into the stable channel event shape. */
28
+ export declare function mapInbound(raw: unknown, meta: LarkInboundMeta): MessageReceived;
29
+ /**
30
+ * Map one raw lark interaction callback (e.g. an editable-card button press)
31
+ * into an `interaction.received` channel event (Task 12.3). The conversation
32
+ * ref preserves `conversationId` + optional `threadId` exactly like messages.
33
+ */
34
+ export declare function mapInteraction(raw: unknown, meta: LarkInboundMeta): InteractionReceived;
35
+ /** Outbound lark payload; buffered strategy → single text message. */
36
+ export interface LarkTextPayload {
37
+ to: string;
38
+ type: 'text';
39
+ content: string;
40
+ }
41
+ /** Convert an outbound channel message into a lark text payload. */
42
+ export declare function toTextPayload(target: {
43
+ conversationId: string;
44
+ }, message: OutboundMessage): LarkTextPayload;
45
+ /** Dedup identity for raw payloads (webhook retries share one msgId/eventId). */
46
+ export declare function dedupKey(raw: unknown): string;
47
+ //# sourceMappingURL=mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../src/mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EAOT,eAAe,EACf,mBAAmB,EACnB,eAAe,EAIhB,MAAM,4BAA4B,CAAC;AAcpC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;CACtB;AAoCD,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMhD;AAyBD,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,GAAG,eAAe,CAwB/E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,GAAG,mBAAmB,CAgBvF;AAsDD,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,MAAM,EAAE;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,eAAe,GAAG,eAAe,CAkC3G;AAED,iFAAiF;AACjF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAU7C"}
package/lib/mapper.js ADDED
@@ -0,0 +1,223 @@
1
+ import { ChannelError, textParts } from '@krischoichoi/channel-core';
2
+ import { z } from 'zod';
3
+ /**
4
+ * A genuine http(s) URL (the only string allowed in the `url` carrier).
5
+ * Anything else (image_key, file_key, mediaId, …) is a
6
+ * platform-opaque handle and must be mapped into `resourceRef` instead.
7
+ */
8
+ function isHttpUrl(value) {
9
+ return typeof value === 'string' && /^https?:\/\//i.test(value);
10
+ }
11
+ const larkRawSchema = z.object({
12
+ type: z.string().optional(),
13
+ msgId: z.string().optional(),
14
+ /** Webhook event id; used as a dedup fallback when `msgId` is absent. */
15
+ eventId: z.string().optional(),
16
+ senderId: z.string().optional(),
17
+ conversationId: z.string().optional(),
18
+ /** Platform chat kind from im.message.receive_v1. */
19
+ chatType: z.enum(['p2p', 'group']),
20
+ /** Optional thread id within the conversation (e.g. a reply to a topic). */
21
+ threadId: z.string().optional(),
22
+ content: z.string().optional(),
23
+ picUrl: z.string().optional(),
24
+ mediaUrl: z.string().optional(),
25
+ durationMs: z.number().optional(),
26
+ title: z.string().optional(),
27
+ /** Interaction callback fields (card button press). */
28
+ interactionId: z.string().optional(),
29
+ action: z.string().optional(),
30
+ value: z.unknown().optional(),
31
+ }).passthrough();
32
+ function parseLarkRaw(raw) {
33
+ const parsed = larkRawSchema.safeParse(raw);
34
+ if (!parsed.success) {
35
+ const issue = parsed.error.issues[0];
36
+ const detail = issue ? `${issue.path.join('.') || '<root>'}: ${issue.message}` : 'unknown validation error';
37
+ throw new ChannelError('CHANNEL_ERROR', `lark inbound payload is invalid: ${detail}`);
38
+ }
39
+ return parsed.data;
40
+ }
41
+ /** Stable hash for ids when the SDK event omits a msgId. */
42
+ export function simpleHash(input) {
43
+ let hash = 0;
44
+ for (let i = 0; i < input.length; i += 1) {
45
+ hash = (hash * 31 + input.charCodeAt(i)) | 0;
46
+ }
47
+ return Math.abs(hash).toString(36);
48
+ }
49
+ /**
50
+ * Conversation kind from the platform event. Feishu uses `oc_` chat ids for
51
+ * both p2p and group conversations, so the id prefix is not an identity fact.
52
+ */
53
+ function conversationTypeFor(value) {
54
+ return value.chatType === 'p2p' ? 'dm' : 'group';
55
+ }
56
+ /**
57
+ * Shared conversation ref builder: preserves `conversationId` and sets
58
+ * `threadId` whenever the raw payload carries one.
59
+ */
60
+ function conversationFor(value, conversationId) {
61
+ const conversation = {
62
+ id: conversationId,
63
+ type: conversationTypeFor(value),
64
+ };
65
+ if (value.threadId) {
66
+ conversation.threadId = value.threadId;
67
+ }
68
+ return conversation;
69
+ }
70
+ /** Map one raw lark message into the stable channel event shape. */
71
+ export function mapInbound(raw, meta) {
72
+ const value = parseLarkRaw(raw);
73
+ const sender = (value.senderId ?? 'unknown');
74
+ // Lark payloads carry a conversation id; fall back to the sender when the
75
+ // SDK event omits it (direct/one-off payloads).
76
+ const conversationId = (value.conversationId ?? sender);
77
+ const messageId = value.msgId
78
+ ? value.msgId
79
+ : `lk-${simpleHash(`${sender}:${value.content ?? ''}:${value.type ?? 'unknown'}`)}`;
80
+ return {
81
+ type: 'message.received',
82
+ channel: meta.channel,
83
+ accountId: meta.accountId,
84
+ conversation: conversationFor(value, conversationId),
85
+ sender: { id: sender },
86
+ message: {
87
+ id: messageId,
88
+ content: partsFor(value),
89
+ createdAt: Date.now(),
90
+ },
91
+ raw,
92
+ };
93
+ }
94
+ /**
95
+ * Map one raw lark interaction callback (e.g. an editable-card button press)
96
+ * into an `interaction.received` channel event (Task 12.3). The conversation
97
+ * ref preserves `conversationId` + optional `threadId` exactly like messages.
98
+ */
99
+ export function mapInteraction(raw, meta) {
100
+ const value = parseLarkRaw(raw);
101
+ const sender = (value.senderId ?? 'unknown');
102
+ const conversationId = (value.conversationId ?? sender);
103
+ return {
104
+ type: 'interaction.received',
105
+ channel: meta.channel,
106
+ accountId: meta.accountId,
107
+ conversation: conversationFor(value, conversationId),
108
+ sender: { id: sender },
109
+ interactionId: value.interactionId ?? '',
110
+ action: value.action ?? '',
111
+ value: value.value,
112
+ raw,
113
+ };
114
+ }
115
+ function partsFor(raw) {
116
+ switch (raw.type) {
117
+ case 'text':
118
+ return textParts(raw.content ?? '');
119
+ case 'image':
120
+ case 'picture': {
121
+ // Per the url/resourceRef rule a Lark image locator is an opaque image_key (NOT a
122
+ // URL): it MUST live in `resourceRef`, never `url` — `url` is reserved
123
+ // for genuine http(s) URLs. The SDK path sets picUrl = image_key
124
+ // (opaque → resourceRef).
125
+ const locator = raw.picUrl ?? raw.mediaUrl;
126
+ const part = { type: 'image', alt: raw.title };
127
+ if (isHttpUrl(locator))
128
+ part.url = locator;
129
+ else if (locator)
130
+ part.resourceRef = locator;
131
+ return [part];
132
+ }
133
+ case 'audio':
134
+ case 'voice': {
135
+ // Per plan 28 the SDK audio body carries an opaque file_key; if it is
136
+ // not a genuine http(s) URL it maps to resourceRef (resolved later by the
137
+ // media port), mirroring the image-key rule (plan 9).
138
+ const locator = raw.mediaUrl;
139
+ const part = { type: 'audio', durationMs: raw.durationMs };
140
+ if (isHttpUrl(locator))
141
+ part.url = locator;
142
+ else if (locator)
143
+ part.resourceRef = locator;
144
+ return [part];
145
+ }
146
+ case 'video': {
147
+ const locator = raw.mediaUrl;
148
+ const part = { type: 'video', durationMs: raw.durationMs };
149
+ if (isHttpUrl(locator))
150
+ part.url = locator;
151
+ else if (locator)
152
+ part.resourceRef = locator;
153
+ return [part];
154
+ }
155
+ case 'file': {
156
+ // Per plan 28/84 the SDK file body carries an opaque file_key (currently
157
+ // routed through raw.mediaUrl by lark-sdk-upstream.ts). A genuine
158
+ // http(s) URL stays in url (plan 9); anything else maps to resourceRef,
159
+ // which the media port resolves into localData before emit.
160
+ const locator = raw.mediaUrl;
161
+ const part = { type: 'file', name: raw.title };
162
+ if (isHttpUrl(locator))
163
+ part.url = locator;
164
+ else if (locator)
165
+ part.resourceRef = locator;
166
+ return [part];
167
+ }
168
+ case 'link':
169
+ return textParts(raw.title ?? raw.content ?? '');
170
+ default:
171
+ return [{ type: 'unsupported', reason: `unknown lark type '${raw.type ?? 'undefined'}'` }];
172
+ }
173
+ }
174
+ /** Convert an outbound channel message into a lark text payload. */
175
+ export function toTextPayload(target, message) {
176
+ const segments = [];
177
+ if (message.text)
178
+ segments.push(message.text);
179
+ if (message.parts) {
180
+ for (const part of message.parts) {
181
+ switch (part.type) {
182
+ case 'text':
183
+ segments.push(part.text);
184
+ break;
185
+ case 'image':
186
+ segments.push(part.alt ? `[image: ${part.alt}]` : '[image]');
187
+ break;
188
+ case 'audio':
189
+ segments.push('[audio]');
190
+ break;
191
+ case 'video':
192
+ segments.push('[video]');
193
+ break;
194
+ case 'file':
195
+ segments.push(part.name ? `[file: ${part.name}]` : '[file]');
196
+ break;
197
+ case 'location':
198
+ segments.push(`[location: ${part.latitude},${part.longitude}]`);
199
+ break;
200
+ case 'card':
201
+ segments.push(`[card: ${part.kind}]`);
202
+ break;
203
+ case 'unsupported':
204
+ segments.push('[unsupported content]');
205
+ break;
206
+ }
207
+ }
208
+ }
209
+ return { to: target.conversationId, type: 'text', content: segments.join('') };
210
+ }
211
+ /** Dedup identity for raw payloads (webhook retries share one msgId/eventId). */
212
+ export function dedupKey(raw) {
213
+ const value = parseLarkRaw(raw);
214
+ // A card has one message id but may expose multiple actions (for example a
215
+ // multi-select question). The SDK-normalized action event therefore carries
216
+ // a per-button eventId; preferring it preserves distinct presses while a
217
+ // replay of the same press remains idempotent.
218
+ if (value.type === 'interaction') {
219
+ return value.eventId ?? value.interactionId ?? `lk-${simpleHash(JSON.stringify(value))}`;
220
+ }
221
+ return value.msgId ?? value.eventId ?? `lk-${simpleHash(JSON.stringify(value))}`;
222
+ }
223
+ //# sourceMappingURL=mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapper.js","sourceRoot":"","sources":["../src/mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { MessageReceived } from '@krischoichoi/channel-core';
2
+ import { type LarkMediaPort } from './upstream/media-port.js';
3
+ /** Avoid multiplying the 100 MiB per-resource bound across one message. */
4
+ export declare const DEFAULT_MEDIA_HYDRATION_CONCURRENCY = 2;
5
+ export interface MediaHydratorOptions {
6
+ /** Media port used to resolve binary resourceRefs into bytes. */
7
+ mediaPort?: LarkMediaPort;
8
+ /** Cancellation signal (the adapter context signal). */
9
+ signal?: AbortSignal;
10
+ /** Injectable logger (adapter context logger). */
11
+ logger?: {
12
+ debug(...args: unknown[]): void;
13
+ };
14
+ /**
15
+ * Optional hard byte cap for one resource download. Defaults to the official
16
+ * 100 MiB platform limit and is enforced while the SDK stream is consumed.
17
+ */
18
+ maxBytes?: number;
19
+ /** Maximum number of media downloads active for one inbound message. */
20
+ maxConcurrency?: number;
21
+ }
22
+ export declare class MediaHydrator {
23
+ private readonly options;
24
+ constructor(options: MediaHydratorOptions);
25
+ /**
26
+ * Hydrate image, file, audio and video parts in place on the given event
27
+ * using the event's own message id as the messageResource resolution
28
+ * context. Never throws: a download failure marks the part instead of
29
+ * blocking the message.
30
+ */
31
+ hydrateMedia(event: MessageReceived): Promise<void>;
32
+ /**
33
+ * @deprecated use {@link MediaHydrator.hydrateMedia} — this alias covers
34
+ * all four binary kinds and is kept so pre-§23-A4 call sites keep working.
35
+ */
36
+ hydrateImages(event: MessageReceived): Promise<void>;
37
+ private hydratePart;
38
+ }
39
+ /**
40
+ * @deprecated use {@link MediaHydrator} — kept under the legacy name so
41
+ * pre-§23-A4 imports (`new ImageHydrator(...)`) keep working.
42
+ */
43
+ export declare const ImageHydrator: typeof MediaHydrator;
44
+ /**
45
+ * @deprecated use {@link MediaHydratorOptions} — legacy alias for the
46
+ * pre-§23-A4 options shape.
47
+ */
48
+ export type ImageHydratorOptions = MediaHydratorOptions;
49
+ /**
50
+ * Map a hydration failure to a stable de-identified code. Platform-plumbing
51
+ * errors (SDK API errors / network) map to download-failed; a genuinely
52
+ * absent resource maps to resource-unavailable.
53
+ */
54
+ export declare function classifyIngressFailure(error: unknown): 'download-failed' | 'resource-unavailable' | 'too-large';
55
+ //# sourceMappingURL=media-hydrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-hydrator.d.ts","sourceRoot":"","sources":["../src/media-hydrator.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAElC,2EAA2E;AAC3E,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,iEAAiE;IACjE,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,wDAAwD;IACxD,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,kDAAkD;IAClD,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;KAAE,CAAC;IAC7C;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,oBAAoB;IAE1D;;;;;OAKG;IACG,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBzD;;;OAGG;IACG,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAI5C,WAAW;CAiD1B;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,sBAAgB,CAAC;AAE3C;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAExD;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,GACb,iBAAiB,GAAG,sBAAsB,GAAG,WAAW,CAoB1D"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Media hydration for inbound messages (plan section 28 / 79A Lark; section
3
+ * 23-A4 extends it from image/file to ALL four binary kinds).
4
+ *
5
+ * After a raw payload is mapped to a MessageReceived, the adapter hydrates
6
+ * every binary part (image, generic file, audio AND video) that carries a
7
+ * platform-opaque resourceRef (a Lark image_key / file_key) by resolving it
8
+ * through the injected LarkMediaPort into real bytes (localData + mimeType).
9
+ * The messageId needed for
10
+ * messageResource.get(message_id, file_key) comes from the invocation
11
+ * context (the event message id) - it is NOT persisted into the part (plan
12
+ * section 28 prefers the hydration invocation context over persisting it).
13
+ *
14
+ * The per-kind `type` fed to the port mirrors the resource kind: the official
15
+ * `message.resource` API documents its scope as 音频、视频、图片和文件 (audio,
16
+ * video, image and file — see the SDK-embedded doc statement), and the SDK
17
+ * `type` query param is typed `string`, so audio/video file_keys download
18
+ * through the SAME seam as image/file (plan section 23-A4). Platform-level
19
+ * resource limits (<= 100 MB; no stickers; no merged-forward sub-messages or
20
+ * card-message resources, error 234043) surface as port failures that this
21
+ * module maps to a stable ingressFailure — the locator is never fabricated
22
+ * into bytes.
23
+ *
24
+ * Generic files (M7A): the type fed to the port is 'file', and the resolved
25
+ * content-disposition filename is copied into part.name so the Harness bridge
26
+ * stores/extracts the attachment without a second platform round-trip.
27
+ *
28
+ * The APPLICATION step reuses core's protocol-neutral `applyHydrationResult`
29
+ * (plan section 6.3): it owns the byte cap ('too-large'), the AbortSignal
30
+ * handling, the localData/size/mime/name merge and the success-clears-failure
31
+ * rule. Failure CLASSIFICATION stays lark-specific (`classifyIngressFailure`)
32
+ * so genuinely absent resources ('not found' / 234043-style platform errors)
33
+ * map to 'resource-unavailable' while plumbing/network errors map to
34
+ * 'download-failed' — core's generic mapping would collapse both to
35
+ * 'download-failed' and lose that distinction.
36
+ *
37
+ * On hydration failure the part keeps its resourceRef (so the platform
38
+ * locator survives for a later retry) and records a stable ingressFailure;
39
+ * text delivery is never blocked (plan section 79A DoD).
40
+ */
41
+ import { applyHydrationResult, isHydratableBinaryPart, toIngressFailureCode, } from '@krischoichoi/channel-core';
42
+ import { LARK_MESSAGE_RESOURCE_MAX_BYTES, } from './upstream/media-port.js';
43
+ /** Avoid multiplying the 100 MiB per-resource bound across one message. */
44
+ export const DEFAULT_MEDIA_HYDRATION_CONCURRENCY = 2;
45
+ export class MediaHydrator {
46
+ options;
47
+ constructor(options) {
48
+ this.options = options;
49
+ }
50
+ /**
51
+ * Hydrate image, file, audio and video parts in place on the given event
52
+ * using the event's own message id as the messageResource resolution
53
+ * context. Never throws: a download failure marks the part instead of
54
+ * blocking the message.
55
+ */
56
+ async hydrateMedia(event) {
57
+ const port = this.options.mediaPort;
58
+ if (!port)
59
+ return;
60
+ const parts = event.message.content;
61
+ if (!Array.isArray(parts))
62
+ return;
63
+ const messageId = String(event.message.id);
64
+ const maxConcurrency = normalizeConcurrency(this.options.maxConcurrency);
65
+ let nextIndex = 0;
66
+ const worker = async () => {
67
+ for (;;) {
68
+ const index = nextIndex++;
69
+ if (index >= parts.length)
70
+ return;
71
+ await this.hydratePart(port, parts[index], messageId);
72
+ }
73
+ };
74
+ await Promise.all(Array.from({ length: Math.min(maxConcurrency, parts.length) }, () => worker()));
75
+ }
76
+ /**
77
+ * @deprecated use {@link MediaHydrator.hydrateMedia} — this alias covers
78
+ * all four binary kinds and is kept so pre-§23-A4 call sites keep working.
79
+ */
80
+ async hydrateImages(event) {
81
+ return this.hydrateMedia(event);
82
+ }
83
+ async hydratePart(port, part, messageId) {
84
+ // Hydrate the four binary kinds only; every other part type is ignored.
85
+ // `isHydratableBinaryPart` narrows `part` to the BinaryPartBase variants
86
+ // (resourceRef / localData / mimeType / name) shared by image, file,
87
+ // audio and video.
88
+ if (!isHydratableBinaryPart(part))
89
+ return;
90
+ const resourceType = part.type;
91
+ // Only hydrate parts that currently carry a platform handle and have no
92
+ // bytes yet; anything else (URL-based, already-hydrated, or already
93
+ // failed) is left untouched so a prior failure marker is preserved.
94
+ if (!part.resourceRef)
95
+ return;
96
+ if (part.localData !== undefined)
97
+ return;
98
+ if (part.ingressFailure)
99
+ return;
100
+ // Pre-aborted: same fail-fast semantics as `applyHydrationResult`
101
+ // (cancelled before the download started -> 'download-failed').
102
+ if (this.options.signal?.aborted) {
103
+ part.ingressFailure = 'download-failed';
104
+ return;
105
+ }
106
+ try {
107
+ const resolved = await port.downloadMessageResource({
108
+ messageId,
109
+ resourceKey: part.resourceRef,
110
+ type: resourceType,
111
+ signal: this.options.signal,
112
+ maxBytes: this.options.maxBytes ?? LARK_MESSAGE_RESOURCE_MAX_BYTES,
113
+ });
114
+ const result = {
115
+ data: resolved.data,
116
+ ...(resolved.mimeType !== undefined ? { mimeType: resolved.mimeType } : {}),
117
+ ...(resolved.name !== undefined ? { name: resolved.name } : {}),
118
+ };
119
+ await applyHydrationResult(part, async () => result, {
120
+ maxBytes: this.options.maxBytes ?? LARK_MESSAGE_RESOURCE_MAX_BYTES,
121
+ signal: this.options.signal,
122
+ });
123
+ // Image parts never carry `size` (keep that shape stable), while
124
+ // file/audio/video keep the authoritative `size` derived from the real
125
+ // bytes (mirrors channel-qq).
126
+ if (part.type === 'image')
127
+ delete part.size;
128
+ }
129
+ catch (error) {
130
+ this.options.logger?.debug('[channel-lark] ' + resourceType + ' hydration failed', error);
131
+ part.ingressFailure = classifyIngressFailure(error);
132
+ }
133
+ }
134
+ }
135
+ /**
136
+ * @deprecated use {@link MediaHydrator} — kept under the legacy name so
137
+ * pre-§23-A4 imports (`new ImageHydrator(...)`) keep working.
138
+ */
139
+ export const ImageHydrator = MediaHydrator;
140
+ /**
141
+ * Map a hydration failure to a stable de-identified code. Platform-plumbing
142
+ * errors (SDK API errors / network) map to download-failed; a genuinely
143
+ * absent resource maps to resource-unavailable.
144
+ */
145
+ export function classifyIngressFailure(error) {
146
+ const message = error instanceof Error ? error.message : String(error);
147
+ const text = message.toLowerCase();
148
+ const missing = [
149
+ 'not found',
150
+ 'no such',
151
+ 'does not exist',
152
+ 'resource not exist',
153
+ 'requested resource',
154
+ '234043',
155
+ 'invalid parameter',
156
+ 'no permission',
157
+ ];
158
+ if (missing.some((needle) => text.includes(needle)))
159
+ return 'resource-unavailable';
160
+ const failure = toIngressFailureCode(error);
161
+ return failure === 'resource-unavailable'
162
+ ? 'resource-unavailable'
163
+ : failure === 'too-large'
164
+ ? 'too-large'
165
+ : 'download-failed';
166
+ }
167
+ function normalizeConcurrency(value) {
168
+ if (value === undefined || !Number.isFinite(value))
169
+ return DEFAULT_MEDIA_HYDRATION_CONCURRENCY;
170
+ return Math.max(1, Math.floor(value));
171
+ }
172
+ //# sourceMappingURL=media-hydrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-hydrator.js","sourceRoot":"","sources":["../src/media-hydrator.ts"],"names":[],"mappings":"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"}