@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":"card.js","sourceRoot":"","sources":["../src/card.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Lark adapter configuration (Schemastery).
3
+ *
4
+ * Every deployment-tunable parameter is configurable here — no hardcoded
5
+ * deployment constants. The upstream is ALWAYS the official
6
+ * `@larksuiteoapi/node-sdk`: the Lark AppId is a plain config string
7
+ * (`upstream.appId` — not a secret) while the AppSecret is resolved via
8
+ * `ctx.credentials` (reference `DSH_CHANNEL_LARK_MAIN_APP_SECRET`). The secret
9
+ * value never appears in profile config, logs, or fixtures — only its reference
10
+ * name does.
11
+ *
12
+ * Fail-closed config governance:
13
+ * - `upstream.mode` is a fixed literal `'sdk'`. A legacy config carrying
14
+ * `mode: 'gateway'` fails config validation (the plugin never enters the
15
+ * runtime), so no gateway fallback can silently come back.
16
+ * - `baseUrl` / `longPollTimeoutMs` (old self-hosted gateway settings) are
17
+ * removed from the schema and defaults.
18
+ */
19
+ import Schema from '@deepseek-ai/schemastery';
20
+ import type { Volatile } from '@deepseek-ai/cordis';
21
+ /** Default credential reference name for the Lark AppSecret (web + config default). */
22
+ export declare const LARK_APP_SECRET_REF = "DSH_CHANNEL_LARK_MAIN_APP_SECRET";
23
+ export interface LarkReconnectConfig {
24
+ enabled: boolean;
25
+ baseDelayMs: number;
26
+ maxDelayMs: number;
27
+ maxRetries: number;
28
+ }
29
+ export interface LarkDedupConfig {
30
+ enabled: boolean;
31
+ windowMs: number;
32
+ }
33
+ export interface LarkCardConfig {
34
+ /**
35
+ * Create the CardKit streaming card entity on the first streamed delta
36
+ * (eager preview). When `false`, deltas buffer locally and the card is only
37
+ * created at `finish`.
38
+ */
39
+ createOnFirstDelta: boolean;
40
+ /** Add/remove the Feishu `Typing` reaction while generating a reply. */
41
+ typingIndicator: boolean;
42
+ }
43
+ /**
44
+ * Upstream driver selection. The official `@larksuiteoapi/node-sdk` is the
45
+ * ONLY driver: inbound via its WebSocket long-connection (`WSClient` +
46
+ * `EventDispatcher`, `im.message.receive_v1` / `card.action.trigger`) and
47
+ * outbound via its OpenAPI client, including CardKit 2.0 native streaming.
48
+ * The legacy self-hosted HTTP gateway mode is removed — `mode` is a fixed
49
+ * literal so old `'gateway'` configs fail validation.
50
+ */
51
+ export interface LarkUpstreamConfig {
52
+ /** Fixed: the official SDK is the only upstream driver. */
53
+ mode: 'sdk';
54
+ /**
55
+ * Feishu/Lark AppId — a PLAIN config string (not a secret). The web UI writes
56
+ * it through the config endpoint. Defaults to unset.
57
+ */
58
+ appId?: string;
59
+ /**
60
+ * Credential reference name for the Lark AppSecret (resolved via
61
+ * `ctx.credentials`). Defaults to `LARK_APP_SECRET_REF`. Only the
62
+ * reference name lives in config — the value never appears in profile / git.
63
+ */
64
+ appSecretRef?: string;
65
+ /**
66
+ * API domain: 'feishu' | 'lark' | custom base domain. Defaults to 'feishu'
67
+ * (Feishu China).
68
+ */
69
+ domain?: string;
70
+ }
71
+ export interface LarkConfig {
72
+ enabled: boolean;
73
+ /** Account id within the lark channel (defaults to 'main'). */
74
+ accountId: string;
75
+ /** Per-request timeout. */
76
+ timeoutMs: number;
77
+ reconnect: LarkReconnectConfig;
78
+ dedup: LarkDedupConfig;
79
+ card: LarkCardConfig;
80
+ /** Upstream driver: always the official SDK (detailed above). */
81
+ upstream: LarkUpstreamConfig;
82
+ }
83
+ /**
84
+ * Activation-time config shape (Harness 0.2.0): every volatile field resolves
85
+ * to a `Volatile<T>` live handle instead of a plain value. `apply()` unwraps
86
+ * these once via `resolveVolatileConfig` into a plain `LarkConfig`.
87
+ *
88
+ * Volatile = the fields the control plane's saveConfig may write at runtime
89
+ * (accountId, reconnect/dedup/card, upstream.appId/upstream.domain, enabled).
90
+ * `timeoutMs` and `upstream.appSecretRef`/`upstream.mode` are not runtime-
91
+ * writable and stay plain.
92
+ */
93
+ export interface LarkConfigLive {
94
+ enabled: Volatile<boolean>;
95
+ accountId: Volatile<string>;
96
+ timeoutMs: number;
97
+ reconnect: Volatile<LarkReconnectConfig>;
98
+ dedup: Volatile<LarkDedupConfig>;
99
+ card: Volatile<LarkCardConfig>;
100
+ upstream: Volatile<LarkUpstreamConfig>;
101
+ }
102
+ export declare const Config: Schema<LarkConfigLive>;
103
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,MAAM,MAAM,0BAA0B,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAC5B,wEAAwE;IACxE,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,2DAA2D;IAC3D,IAAI,EAAE,KAAK,CAAC;IACZ;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,iEAAiE;IACjE,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACzC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IACjC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC/B,QAAQ,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;CACxC;AAMD,eAAO,MAAM,MAAM,EAiCF,MAAM,CAAC,cAAc,CAAC,CAAC"}
package/lib/config.js ADDED
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Lark adapter configuration (Schemastery).
3
+ *
4
+ * Every deployment-tunable parameter is configurable here — no hardcoded
5
+ * deployment constants. The upstream is ALWAYS the official
6
+ * `@larksuiteoapi/node-sdk`: the Lark AppId is a plain config string
7
+ * (`upstream.appId` — not a secret) while the AppSecret is resolved via
8
+ * `ctx.credentials` (reference `DSH_CHANNEL_LARK_MAIN_APP_SECRET`). The secret
9
+ * value never appears in profile config, logs, or fixtures — only its reference
10
+ * name does.
11
+ *
12
+ * Fail-closed config governance:
13
+ * - `upstream.mode` is a fixed literal `'sdk'`. A legacy config carrying
14
+ * `mode: 'gateway'` fails config validation (the plugin never enters the
15
+ * runtime), so no gateway fallback can silently come back.
16
+ * - `baseUrl` / `longPollTimeoutMs` (old self-hosted gateway settings) are
17
+ * removed from the schema and defaults.
18
+ */
19
+ import Schema from '@deepseek-ai/schemastery';
20
+ /** Default credential reference name for the Lark AppSecret (web + config default). */
21
+ export const LARK_APP_SECRET_REF = 'DSH_CHANNEL_LARK_MAIN_APP_SECRET';
22
+ // The runtime schema is genuine Schemastery (validation happens at the Loader
23
+ // boundary); the annotation records the activation-time output shape. The cast
24
+ // is required because Schemastery's inferred ObjectT models per-field optionality
25
+ // more precisely than the hand-written `LarkConfigLive` alias.
26
+ export const Config = Schema.object({
27
+ // Harness 0.2.0 settings model: fields the control plane / settings page may
28
+ // write at runtime are declared `.volatile()` — they surface on the
29
+ // auto-generated settings form, `ctx.settings.update(entryId, patch)` accepts
30
+ // exactly these paths, and at activation they resolve to `Volatile<T>`
31
+ // handles (unwrapped by `resolveVolatileConfig` in definition.ts / apply()).
32
+ enabled: Schema.boolean().default(true).volatile(),
33
+ accountId: Schema.string().default('main').volatile(),
34
+ timeoutMs: Schema.natural().default(30000),
35
+ reconnect: Schema.object({
36
+ enabled: Schema.boolean().default(true),
37
+ baseDelayMs: Schema.natural().default(1000),
38
+ maxDelayMs: Schema.natural().default(30000),
39
+ maxRetries: Schema.natural().default(10),
40
+ }).default({}).volatile(),
41
+ dedup: Schema.object({
42
+ enabled: Schema.boolean().default(true),
43
+ windowMs: Schema.natural().default(5000),
44
+ }).default({}).volatile(),
45
+ card: Schema.object({
46
+ createOnFirstDelta: Schema.boolean().default(true),
47
+ typingIndicator: Schema.boolean().default(true),
48
+ }).default({}).volatile(),
49
+ upstream: Schema.object({
50
+ // Fixed literal — `mode: 'gateway'` fails validation (fail closed).
51
+ mode: Schema.union(['sdk']).default('sdk'),
52
+ // AppId is a plain (non-secret) config string, written via the config endpoint.
53
+ appId: Schema.string(),
54
+ // Credential reference name only — never the secret value itself.
55
+ appSecretRef: Schema.string().default(LARK_APP_SECRET_REF),
56
+ // 'feishu' | 'lark' | custom base domain (resolved to the SDK Domain).
57
+ domain: Schema.string().default('feishu'),
58
+ }).default({}).volatile(),
59
+ });
60
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,MAAM,MAAM,0BAA0B,CAAC;AAG9C,uFAAuF;AACvF,MAAM,CAAC,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAuFtE,8EAA8E;AAC9E,+EAA+E;AAC/E,kFAAkF;AAClF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,6EAA6E;IAC7E,oEAAoE;IACpE,8EAA8E;IAC9E,uEAAuE;IACvE,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAClD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IACrD,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACvC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC3C,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3C,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KACzC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACvC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KACzC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;QAClB,kBAAkB,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAClD,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KAChD,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;QACtB,oEAAoE;QACpE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAC1C,gFAAgF;QAChF,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QACtB,kEAAkE;QAClE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAC1D,uEAAuE;QACvE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;KAC1C,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1B,CAAsC,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Lark ChannelDefinition — the description of the lark channel exposed to the
3
+ * Channel Control Plane (doc §14, §26, §29, §49, §52 Task 5).
4
+ *
5
+ * The control plane (when present) drives setup, configured-state reporting and
6
+ * adapter instantiation purely through this object, never through per-channel
7
+ * conditionals. Binding the definition:
8
+ *
9
+ * - `setup.fields` — `appId` is a plain config string (kind 'text'); `appSecret`
10
+ * is a secret referenced by `LARK_APP_SECRET_REF` and only
11
+ * ever written through the credentials seam (doc §31).
12
+ * - `getConfiguredState` — the official-SDK adapter is configured when both
13
+ * `appId` (config) and the `appSecretRef` credential exist.
14
+ * - `saveConfig` — merges only non-secret keys (appId/domain + nested
15
+ * reconnect/dedup/card + accountId/enabled) into an internal
16
+ * mutable snapshot used by createAdapter. Secret fields are
17
+ * rejected upstream by the control plane.
18
+ * - `createAdapter` — resolves `appSecretRef` via the injected credentials seam
19
+ * and throws a stable error when either the AppId or the
20
+ * credential is missing (fail closed; the official SDK is
21
+ * the only upstream driver).
22
+ * - `setup.setupUrl` — points at the official Feishu/Lark console. Console
23
+ * navigation is not modeled as an auth session.
24
+ *
25
+ * Fully offline-testable: inject a fake credentials seam and fake
26
+ * sdk/openapi clients via `deps` — no network, no host.
27
+ */
28
+ import type { ChannelDefinition } from '@krischoichoi/channel-control';
29
+ import type { LarkConfig } from './config.js';
30
+ import { type LarkAdapterDeps } from './adapter.js';
31
+ /**
32
+ * Structural credential seam used by the definition. Mirrors the tiny slice of
33
+ * `ctx.credentials` the control plane needs; injected so the definition stays
34
+ * host-agnostic and offline-testable. Resolution is per call and must not be
35
+ * cached across calls.
36
+ */
37
+ export interface LarkCredentialSeam {
38
+ resolve(ref: string): Promise<{
39
+ value: string;
40
+ source: string;
41
+ } | undefined>;
42
+ describe(ref: string): Promise<{
43
+ configured: boolean;
44
+ source?: string;
45
+ writable: boolean;
46
+ }>;
47
+ set(ref: string, value: string): Promise<void>;
48
+ }
49
+ export interface CreateLarkDefinitionOptions {
50
+ config: LarkConfig;
51
+ deps?: LarkAdapterDeps;
52
+ /** Injected credentials seam (wraps ctx.credentials in apply()). */
53
+ credentials: LarkCredentialSeam;
54
+ /** Durable store for the non-secret setup field when the host provides one. */
55
+ persistSetup?: (patch: {
56
+ upstream: Pick<LarkConfig['upstream'], 'appId'>;
57
+ }) => Promise<void>;
58
+ /** Durable store for the enabled intent (doc §21) when the host provides one. */
59
+ persistEnabled?: (enabled: boolean) => Promise<void>;
60
+ }
61
+ /**
62
+ * Feishu/Lark open-platform console "Apps" URL derived from the configured API
63
+ * domain (doc §39/§40). Mirrors `resolveDomain`: the well-known 'feishu' and
64
+ * 'lark' map to their official consoles; any other value is treated as a custom
65
+ * base domain and prefixed with https + '/app'. When the app's appId is known
66
+ * the link deep-links to that app (`/app/<appId>`), mirroring openclaw-toolkit.
67
+ */
68
+ export declare function larkConsoleAppUrl(domain: string | undefined, appId?: string): string;
69
+ /**
70
+ * Build the lark ChannelDefinition for the control plane. Returns a fresh object
71
+ * each call (cheap) so a plugin can register it against any control instance.
72
+ */
73
+ export declare function createLarkDefinition(options: CreateLarkDefinitionOptions): ChannelDefinition;
74
+ //# sourceMappingURL=definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EACV,iBAAiB,EAGlB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAe,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAMjE;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;IAC7E,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5F,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,oEAAoE;IACpE,WAAW,EAAE,kBAAkB,CAAC;IAChC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7F,iFAAiF;IACjF,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAoBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CASpF;AAKD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,2BAA2B,GACnC,iBAAiB,CAuJnB"}
@@ -0,0 +1,190 @@
1
+ import { ControlError } from '@krischoichoi/channel-control';
2
+ import { ChannelError, resolveVolatileConfig } from '@krischoichoi/channel-core';
3
+ import { LARK_APP_SECRET_REF } from './config.js';
4
+ import { LarkAdapter } from './adapter.js';
5
+ import { beginLarkDeviceAuthorization, pollLarkDeviceAuthorization, } from './auth/device-authorization.js';
6
+ /** Allowed non-secret nested sub-config keys merged by saveConfig. */
7
+ const NESTED_KEYS = ['reconnect', 'dedup', 'card'];
8
+ /** Allowed non-secret 'upstream.*' keys merged by saveConfig (doc §30). */
9
+ const UPSTREAM_KEYS = ['appId', 'domain'];
10
+ /** Deep-copy a LarkConfig into an independent mutable snapshot. */
11
+ function snapshotOf(config) {
12
+ // Harness 0.2.0: volatile fields arrive as `Volatile<T>` handles; unwrap
13
+ // them once so the snapshot (and everything reading it) sees plain values.
14
+ const plain = resolveVolatileConfig(config);
15
+ const copy = { ...plain };
16
+ copy.reconnect = { ...plain.reconnect };
17
+ copy.dedup = { ...plain.dedup };
18
+ copy.card = { ...plain.card };
19
+ copy.upstream = { ...plain.upstream };
20
+ return copy;
21
+ }
22
+ /**
23
+ * Feishu/Lark open-platform console "Apps" URL derived from the configured API
24
+ * domain (doc §39/§40). Mirrors `resolveDomain`: the well-known 'feishu' and
25
+ * 'lark' map to their official consoles; any other value is treated as a custom
26
+ * base domain and prefixed with https + '/app'. When the app's appId is known
27
+ * the link deep-links to that app (`/app/<appId>`), mirroring openclaw-toolkit.
28
+ */
29
+ export function larkConsoleAppUrl(domain, appId) {
30
+ const base = domain === 'lark'
31
+ ? 'https://open.larksuite.com/app'
32
+ : domain && domain !== 'feishu'
33
+ ? `https://${domain.replace(originRE, '').replace(trailRE, '')}/app`
34
+ : 'https://open.feishu.cn/app';
35
+ const id = appId?.trim();
36
+ return id ? `${base}/${encodeURIComponent(id)}` : base;
37
+ }
38
+ const originRE = /^https?:\/\//;
39
+ const trailRE = /\/+$/;
40
+ /**
41
+ * Build the lark ChannelDefinition for the control plane. Returns a fresh object
42
+ * each call (cheap) so a plugin can register it against any control instance.
43
+ */
44
+ export function createLarkDefinition(options) {
45
+ const credentials = options.credentials;
46
+ const deps = options.deps ?? {};
47
+ // Mutable snapshot: saveConfig merges non-secret patches into this; the same
48
+ // object feeds getConfiguredState + createAdapter so both always agree.
49
+ const state = snapshotOf(options.config);
50
+ const appSecretRef = () => state.upstream.appSecretRef ?? LARK_APP_SECRET_REF;
51
+ const setup = {
52
+ fields: [
53
+ {
54
+ name: 'appId',
55
+ kind: 'text',
56
+ secret: false,
57
+ configured: Boolean(state.upstream.appId),
58
+ writable: true,
59
+ },
60
+ {
61
+ name: 'appSecret',
62
+ kind: 'secret',
63
+ secret: true,
64
+ configured: false,
65
+ writable: true,
66
+ ref: appSecretRef(),
67
+ },
68
+ ],
69
+ authMethods: ['credentials', 'hybrid'],
70
+ setupUrl: larkConsoleAppUrl(state.upstream.domain, state.upstream.appId),
71
+ };
72
+ const configuredState = async () => {
73
+ const appIdConfigured = Boolean(state.upstream.appId);
74
+ const secret = await credentials.describe(appSecretRef());
75
+ const configured = appIdConfigured && secret.configured;
76
+ return {
77
+ configured,
78
+ fields: {
79
+ appId: { configured: appIdConfigured, writable: true, value: state.upstream.appId },
80
+ appSecret: {
81
+ configured: secret.configured,
82
+ writable: secret.writable,
83
+ source: secret.source,
84
+ },
85
+ },
86
+ };
87
+ };
88
+ const saveConfig = async (patch) => {
89
+ // Nested sub-objects (deep-merge): reconnect / dedup / card.
90
+ for (const key of NESTED_KEYS) {
91
+ const value = patch[key];
92
+ if (value && typeof value === 'object') {
93
+ Object.assign(state[key], value);
94
+ }
95
+ }
96
+ // Object-form 'upstream' non-secret keys.
97
+ const upstreamPatch = patch.upstream;
98
+ if (upstreamPatch && typeof upstreamPatch === 'object') {
99
+ const target = state.upstream;
100
+ for (const key of UPSTREAM_KEYS) {
101
+ const value = upstreamPatch[key];
102
+ if (value !== undefined)
103
+ target[key] = value;
104
+ }
105
+ }
106
+ // Dot-path 'upstream.*' non-secret keys.
107
+ for (const key of UPSTREAM_KEYS.map((k) => `upstream.${k}`)) {
108
+ const value = patch[key];
109
+ if (value === undefined)
110
+ continue;
111
+ const field = key.slice('upstream.'.length);
112
+ state.upstream[field] = value;
113
+ }
114
+ if (typeof patch.appId === 'string')
115
+ state.upstream.appId = patch.appId;
116
+ if (patch.accountId !== undefined)
117
+ state.accountId = String(patch.accountId);
118
+ if (patch.enabled !== undefined)
119
+ state.enabled = Boolean(patch.enabled);
120
+ setup.setupUrl = larkConsoleAppUrl(state.upstream.domain, state.upstream.appId);
121
+ const hasUpstreamAppId = patch.upstream !== null &&
122
+ typeof patch.upstream === 'object' &&
123
+ !Array.isArray(patch.upstream) &&
124
+ patch.upstream.appId !== undefined;
125
+ if (patch.appId !== undefined || hasUpstreamAppId) {
126
+ await options.persistSetup?.({ upstream: { appId: state.upstream.appId } });
127
+ }
128
+ };
129
+ const restoreConfig = async (saved) => {
130
+ const restored = snapshotOf(saved);
131
+ Object.assign(state, restored);
132
+ state.reconnect = restored.reconnect;
133
+ state.dedup = restored.dedup;
134
+ state.card = restored.card;
135
+ state.upstream = restored.upstream;
136
+ setup.setupUrl = larkConsoleAppUrl(state.upstream.domain, state.upstream.appId);
137
+ await options.persistSetup?.({ upstream: { appId: state.upstream.appId } });
138
+ };
139
+ const createAdapter = async () => {
140
+ const appId = state.upstream.appId;
141
+ const resolved = await credentials.resolve(appSecretRef());
142
+ const appSecret = resolved?.value;
143
+ if (!appId || !appSecret) {
144
+ // Stable, logged-out error — never includes the secret value.
145
+ throw new ChannelError('CHANNEL_ERROR', `lark upstream requires configured appId (config) and appSecret (credentials ref ${appSecretRef()})`);
146
+ }
147
+ return new LarkAdapter(state, { ...deps, appId, appSecret });
148
+ };
149
+ return {
150
+ id: 'lark',
151
+ get enabled() {
152
+ return state.enabled;
153
+ },
154
+ async setEnabled(enabled) {
155
+ state.enabled = enabled;
156
+ await options.persistEnabled?.(enabled);
157
+ },
158
+ setup,
159
+ getConfiguredState: configuredState,
160
+ saveConfig,
161
+ snapshotConfig: () => snapshotOf(state),
162
+ restoreConfig,
163
+ async beginAuth(input) {
164
+ if (input.method !== 'hybrid' && input.method !== 'device') {
165
+ throw new ControlError('AUTH_NOT_SUPPORTED', 'lark supports device authorization after credentials setup');
166
+ }
167
+ const resolved = await credentials.resolve(appSecretRef());
168
+ return beginLarkDeviceAuthorization({
169
+ appId: state.upstream.appId ?? '',
170
+ appSecret: resolved?.value ?? '',
171
+ domain: state.upstream.domain,
172
+ });
173
+ },
174
+ async pollAuth(session) {
175
+ return pollLarkDeviceAuthorization(session);
176
+ },
177
+ createAdapter,
178
+ autoStart: true,
179
+ // Lark exposes message.mentions[] but this adapter does not yet inject a
180
+ // trusted bot open_id, so mention activation remains deliberately disabled.
181
+ access: {
182
+ directMessages: true,
183
+ groups: true,
184
+ mentions: false,
185
+ ownerDiscovery: 'claim',
186
+ identityLabels: { user: 'Lark User ID', group: 'Lark Chat ID' },
187
+ },
188
+ };
189
+ }
190
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Inbound processing: dedup window + structured mapping + emit.
3
+ *
4
+ * Message payloads map to `message.received`; interaction callbacks (card
5
+ * button presses) route to `interaction.received` (Task 12.3). Both paths
6
+ * share the same dedup window so webhook retries cannot double-deliver.
7
+ */
8
+ import type { ChannelAdapterContext } from '@krischoichoi/channel-core';
9
+ import { type LarkInboundMeta } from './mapper.js';
10
+ import type { LarkMediaPort } from './upstream/media-port.js';
11
+ export interface InboundProcessorOptions {
12
+ ctx: ChannelAdapterContext;
13
+ meta: LarkInboundMeta;
14
+ dedupEnabled: boolean;
15
+ dedupWindowMs: number;
16
+ /** Injectable clock (tests). */
17
+ now?: () => number;
18
+ /**
19
+ * Optional media port used to hydrate inbound binary resourceRefs into bytes
20
+ * before emit (Milestone M2A). When absent, binary parts keep
21
+ * their resourceRef untouched (no ingress).
22
+ */
23
+ mediaPort?: LarkMediaPort;
24
+ /** Test/embedding override; production defaults to two concurrent downloads. */
25
+ mediaHydrationConcurrency?: number;
26
+ /** Test/embedding override; production defaults to the Lark 100 MiB cap. */
27
+ maxMediaBytes?: number;
28
+ }
29
+ export declare class InboundProcessor {
30
+ private readonly options;
31
+ private readonly now;
32
+ /** dedup key -> last-seen timestamp, pruned on every handle. */
33
+ private readonly seen;
34
+ /** Resolves inbound binary resourceRefs into bytes before emit (M2A/§23-A4). */
35
+ private readonly hydrator;
36
+ constructor(options: InboundProcessorOptions);
37
+ /** Process one raw payload from the upstream; dedup then emit. */
38
+ handle(raw: unknown): Promise<void>;
39
+ private prune;
40
+ }
41
+ //# sourceMappingURL=inbound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound.d.ts","sourceRoot":"","sources":["../src/inbound.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAqD,MAAM,4BAA4B,CAAC;AA+C3H,OAAO,EAAwC,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,qBAAqB,CAAC;IAC3B,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,gFAAgF;IAChF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,gBAAgB;IAOf,OAAO,CAAC,QAAQ,CAAC,OAAO;IANpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA6B;IAClD,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;gBAEZ,OAAO,EAAE,uBAAuB;IAW7D,kEAAkE;IAC5D,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCzC,OAAO,CAAC,KAAK;CAKd"}
package/lib/inbound.js ADDED
@@ -0,0 +1,102 @@
1
+ /** Compact per-part summary for inbound message logs (debug diagnostics). */
2
+ function summarizeParts(parts) {
3
+ return parts.map((part) => {
4
+ switch (part.type) {
5
+ case 'text':
6
+ return { type: 'text', text: part.text.slice(0, 80) };
7
+ case 'image':
8
+ return {
9
+ type: 'image',
10
+ url: part.url,
11
+ resourceRef: part.resourceRef,
12
+ mimeType: part.mimeType,
13
+ localDataBytes: part.localData?.byteLength,
14
+ ingressFailure: part.ingressFailure,
15
+ };
16
+ case 'file':
17
+ return {
18
+ type: 'file',
19
+ name: part.name,
20
+ size: part.size,
21
+ mimeType: part.mimeType,
22
+ localDataBytes: part.localData?.byteLength,
23
+ ingressFailure: part.ingressFailure,
24
+ };
25
+ case 'audio':
26
+ return {
27
+ type: 'audio',
28
+ durationMs: part.durationMs,
29
+ mimeType: part.mimeType,
30
+ localDataBytes: part.localData?.byteLength,
31
+ ingressFailure: part.ingressFailure,
32
+ };
33
+ case 'video':
34
+ return {
35
+ type: 'video',
36
+ durationMs: part.durationMs,
37
+ mimeType: part.mimeType,
38
+ localDataBytes: part.localData?.byteLength,
39
+ ingressFailure: part.ingressFailure,
40
+ };
41
+ default:
42
+ return { type: part.type };
43
+ }
44
+ });
45
+ }
46
+ import { dedupKey, mapInbound, mapInteraction } from './mapper.js';
47
+ import { MediaHydrator } from './media-hydrator.js';
48
+ export class InboundProcessor {
49
+ options;
50
+ now;
51
+ /** dedup key -> last-seen timestamp, pruned on every handle. */
52
+ seen = new Map();
53
+ /** Resolves inbound binary resourceRefs into bytes before emit (M2A/§23-A4). */
54
+ hydrator;
55
+ constructor(options) {
56
+ this.options = options;
57
+ this.now = options.now ?? Date.now;
58
+ this.hydrator = new MediaHydrator({
59
+ mediaPort: options.mediaPort,
60
+ signal: options.ctx.signal,
61
+ logger: options.ctx.logger,
62
+ maxConcurrency: options.mediaHydrationConcurrency,
63
+ maxBytes: options.maxMediaBytes,
64
+ });
65
+ }
66
+ /** Process one raw payload from the upstream; dedup then emit. */
67
+ async handle(raw) {
68
+ const key = dedupKey(raw);
69
+ if (this.options.dedupEnabled) {
70
+ const now = this.now();
71
+ const last = this.seen.get(key);
72
+ if (last !== undefined && now - last < this.options.dedupWindowMs) {
73
+ this.options.ctx.logger.debug(`[channel-lark] dropped duplicate payload '${key}'`);
74
+ return;
75
+ }
76
+ this.seen.set(key, now);
77
+ this.prune(now);
78
+ }
79
+ const kind = raw?.type;
80
+ if (kind === 'interaction') {
81
+ const event = mapInteraction(raw, this.options.meta);
82
+ await this.options.ctx.emit(event);
83
+ return;
84
+ }
85
+ const event = mapInbound(raw, this.options.meta);
86
+ // Hydrate binary resourceRefs (image/file/audio/video) into bytes before
87
+ // emit; failures mark the part (ingressFailure) and never block text
88
+ // delivery.
89
+ await this.hydrator.hydrateMedia(event);
90
+ // Inbound message log (debug diagnostics): visible in web:debug with
91
+ // DSH_CHANNELS_DEBUG=1, shows mapped parts incl. hydration result.
92
+ this.options.ctx.logger.info(`[channel-lark] inbound message ${event.message.id} from ${event.sender.id} in ${event.conversation.id}`, { parts: summarizeParts(event.message.content) });
93
+ await this.options.ctx.emit(event);
94
+ }
95
+ prune(now) {
96
+ for (const [key, ts] of this.seen) {
97
+ if (now - ts >= this.options.dedupWindowMs)
98
+ this.seen.delete(key);
99
+ }
100
+ }
101
+ }
102
+ //# sourceMappingURL=inbound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound.js","sourceRoot":"","sources":["../src/inbound.ts"],"names":[],"mappings":"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"}