@claw-manager/openclaw-api-channel 2026.6.29 → 2026.6.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 CHANGED
@@ -2,4 +2,5 @@
2
2
 
3
3
  OpenClaw channel plugin used by Claw Manager to deliver external API messages into the normal OpenClaw agent runtime.
4
4
 
5
- The plugin expects Claw Manager to call the Gateway method `claw-manager-api.sendMessage`. It receives pre-derived sender identity and OpenViking user identity, then records an inbound session message and dispatches the reply through OpenClaw.
5
+ Claw Manager writes request files into the instance queue under `.openclaw/claw-manager-api/requests`.
6
+ When the Gateway starts the `claw-manager-api` channel, this plugin runs a queue monitor, converts each request into an inbound direct-message context, writes an OpenViking sender handoff for the current API user, dispatches the turn through OpenClaw, and writes the response under `.openclaw/claw-manager-api/responses`.
package/dist/index.js CHANGED
@@ -1,13 +1,22 @@
1
+ import { defineChannelPluginEntry } from "openclaw/plugin-sdk/core";
2
+ import { buildJsonChannelConfigSchema } from "openclaw/plugin-sdk/channel-config-schema";
1
3
  import { apiChannelPlugin } from "./src/channel.js";
2
- export const API_GATEWAY_METHOD = "claw-manager-api.sendMessage";
3
- export default {
4
+ export default defineChannelPluginEntry({
4
5
  id: "claw-manager-api",
5
6
  name: "Claw Manager API",
6
7
  description: "External API channel for Claw Manager",
7
- register(api) {
8
+ plugin: apiChannelPlugin,
9
+ configSchema: buildJsonChannelConfigSchema({
10
+ "$schema": "http://json-schema.org/draft-07/schema#",
11
+ type: "object",
12
+ properties: {
13
+ enabled: { type: "boolean" },
14
+ },
15
+ additionalProperties: false,
16
+ }),
17
+ registerFull(api) {
8
18
  api.logger?.info?.(`claw-manager-api: register channel mode=${String(api.registrationMode ?? "unknown")} ` +
9
19
  `hasGatewayMethod=${String(typeof api.registerGatewayMethod === "function")}`);
10
- api.registerChannel({ plugin: apiChannelPlugin });
11
20
  },
12
- };
21
+ });
13
22
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,8BAA8B,CAAC;AAEjE,eAAe;IACb,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,uCAAuC;IACpD,QAAQ,CAAC,GAAsB;QAC7B,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAChB,2CAA2C,MAAM,CAAC,GAAG,CAAC,gBAAgB,IAAI,SAAS,CAAC,GAAG;YACrF,oBAAoB,MAAM,CAAC,OAAO,GAAG,CAAC,qBAAqB,KAAK,UAAU,CAAC,EAAE,CAChF,CAAC;QACF,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAEzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAe,wBAAwB,CAAC;IACtC,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,uCAAuC;IACpD,MAAM,EAAE,gBAAgB;IACxB,YAAY,EAAE,4BAA4B,CAAC;QACzC,SAAS,EAAE,yCAAyC;QACpD,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SAC7B;QACD,oBAAoB,EAAE,KAAK;KAC5B,CAAC;IACF,YAAY,CAAC,GAAsB;QACjC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAChB,2CAA2C,MAAM,CAAC,GAAG,CAAC,gBAAgB,IAAI,SAAS,CAAC,GAAG;YACrF,oBAAoB,MAAM,CAAC,OAAO,GAAG,CAAC,qBAAqB,KAAK,UAAU,CAAC,EAAE,CAChF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -2,9 +2,33 @@ import { randomUUID } from "node:crypto";
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { createTypingCallbacks } from "openclaw/plugin-sdk/channel-runtime";
5
+ import { writeApiOpenVikingHandoff } from "./openviking-handoff.js";
5
6
  const API_CHANNEL_ID = "claw-manager-api";
6
7
  const API_ACCOUNT_ID = "global";
7
8
  const API_QUEUE_POLL_MS = 200;
9
+ const API_HEARTBEAT_INTERVAL_MS = 1000;
10
+ const API_STATUS_FILE = "status.json";
11
+ async function writeOpenVikingHandoffForTurn(params) {
12
+ const secret = trim(process.env.OPENVIKING_IDENTITY_HASH_SECRET);
13
+ if (!secret) {
14
+ params.log?.debug?.(`[${API_ACCOUNT_ID}] openviking handoff skipped: identity secret missing`);
15
+ return;
16
+ }
17
+ try {
18
+ const wrote = await writeApiOpenVikingHandoff({
19
+ sessionKey: params.sessionKey,
20
+ openVikingUserId: params.openVikingUserId,
21
+ senderHash: params.senderHash,
22
+ secret,
23
+ });
24
+ if (wrote) {
25
+ params.log?.info?.(`[${API_ACCOUNT_ID}] openviking handoff written user=${params.openVikingUserId}`);
26
+ }
27
+ }
28
+ catch (error) {
29
+ params.log?.warn?.(`[${API_ACCOUNT_ID}] openviking handoff write failed: ${errorMessage(error)}`);
30
+ }
31
+ }
8
32
  export function buildApiInboundContext(params) {
9
33
  const message = trim(params.message);
10
34
  const openVikingUserId = trim(params.openVikingUserId) || trim(params.openvikingUserId);
@@ -67,6 +91,12 @@ export async function dispatchApiMessage(ctx) {
67
91
  agentId: route.agentId,
68
92
  });
69
93
  const finalized = runtime.reply.finalizeInboundContext(inbound);
94
+ await writeOpenVikingHandoffForTurn({
95
+ sessionKey,
96
+ openVikingUserId: inbound.openVikingUserId,
97
+ senderHash: trim(ctx.senderHash),
98
+ log: ctx.log,
99
+ });
70
100
  await runtime.session.recordInboundSession({
71
101
  storePath,
72
102
  sessionKey,
@@ -122,6 +152,20 @@ export function resolveApiQueueRoot() {
122
152
  const home = trim(process.env.OPENCLAW_HOME) || trim(process.env.HOME) || process.cwd();
123
153
  return path.join(home, ".openclaw", API_CHANNEL_ID);
124
154
  }
155
+ export async function writeApiQueueHeartbeat(root, running) {
156
+ await fs.mkdir(root, { recursive: true });
157
+ const now = Date.now();
158
+ const statusPath = path.join(root, API_STATUS_FILE);
159
+ const tempPath = `${statusPath}.tmp-${process.pid}-${now}`;
160
+ await fs.writeFile(tempPath, JSON.stringify({
161
+ version: 1,
162
+ running,
163
+ updatedAt: new Date(now).toISOString(),
164
+ updatedAtEpochMs: now,
165
+ pid: process.pid,
166
+ }), "utf8");
167
+ await fs.rename(tempPath, statusPath);
168
+ }
125
169
  export async function monitorApiQueue(ctx) {
126
170
  if (!ctx.channelRuntime) {
127
171
  throw new Error("ctx.channelRuntime missing");
@@ -138,6 +182,16 @@ export async function monitorApiQueue(ctx) {
138
182
  failed: path.join(root, "failed"),
139
183
  };
140
184
  await Promise.all(Object.values(dirs).map((dir) => fs.mkdir(dir, { recursive: true })));
185
+ let lastHeartbeatAt = 0;
186
+ const writeHeartbeatIfDue = async (force = false) => {
187
+ const now = Date.now();
188
+ if (!force && now - lastHeartbeatAt < API_HEARTBEAT_INTERVAL_MS) {
189
+ return;
190
+ }
191
+ await writeApiQueueHeartbeat(root, true);
192
+ lastHeartbeatAt = now;
193
+ };
194
+ await writeHeartbeatIfDue(true);
141
195
  ctx.log?.info?.(`[${API_ACCOUNT_ID}] claw-manager-api queue monitor started (${root})`);
142
196
  ctx.setStatus?.({
143
197
  accountId: API_ACCOUNT_ID,
@@ -147,9 +201,11 @@ export async function monitorApiQueue(ctx) {
147
201
  lastError: null,
148
202
  });
149
203
  while (!ctx.abortSignal?.aborted) {
204
+ await writeHeartbeatIfDue();
150
205
  await processPendingApiRequests(ctx, dirs);
151
206
  await sleep(API_QUEUE_POLL_MS, ctx.abortSignal);
152
207
  }
208
+ await writeApiQueueHeartbeat(root, false);
153
209
  }
154
210
  async function processPendingApiRequests(ctx, dirs) {
155
211
  let files = [];
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/channel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import { createHmac } from "node:crypto";
2
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ function trimString(value) {
6
+ return typeof value === "string" ? value.trim() : "";
7
+ }
8
+ function hmacSha256Hex(secret, value) {
9
+ return createHmac("sha256", secret).update(value, "utf8").digest("hex");
10
+ }
11
+ export function resolveApiOpenVikingHandoffStateDir(stateDir) {
12
+ return (trimString(stateDir) ||
13
+ trimString(process.env.OPENCLAW_STATE_DIR) ||
14
+ trimString(process.env.CLAWDBOT_STATE_DIR) ||
15
+ path.join(os.homedir(), ".openclaw"));
16
+ }
17
+ function handoffPath(stateDir) {
18
+ return path.join(resolveApiOpenVikingHandoffStateDir(stateDir), "openviking", "sender-handoff.json");
19
+ }
20
+ function sessionKeyHash(sessionKey, secret) {
21
+ const normalizedSessionKey = trimString(sessionKey);
22
+ const normalizedSecret = trimString(secret);
23
+ if (!normalizedSessionKey || !normalizedSecret) {
24
+ return undefined;
25
+ }
26
+ return hmacSha256Hex(normalizedSecret, normalizedSessionKey).slice(0, 32);
27
+ }
28
+ async function readHandoffFile(filePath) {
29
+ try {
30
+ const raw = await readFile(filePath, "utf8");
31
+ const parsed = JSON.parse(raw);
32
+ return {
33
+ version: 1,
34
+ entries: parsed.entries && typeof parsed.entries === "object" ? parsed.entries : {},
35
+ };
36
+ }
37
+ catch (error) {
38
+ if (error.code === "ENOENT") {
39
+ return { version: 1, entries: {} };
40
+ }
41
+ throw error;
42
+ }
43
+ }
44
+ export async function writeApiOpenVikingHandoff(params) {
45
+ const key = sessionKeyHash(params.sessionKey ?? "", params.secret ?? "");
46
+ const openVikingUserId = trimString(params.openVikingUserId);
47
+ const senderHash = trimString(params.senderHash);
48
+ if (!key || !openVikingUserId || !senderHash) {
49
+ return false;
50
+ }
51
+ const filePath = handoffPath(params.stateDir);
52
+ await mkdir(path.dirname(filePath), { recursive: true });
53
+ const file = await readHandoffFile(filePath);
54
+ file.entries[key] = {
55
+ openVikingUserId,
56
+ senderHash,
57
+ updatedAt: new Date().toISOString(),
58
+ };
59
+ const tempPath = `${filePath}.${process.pid}.tmp`;
60
+ await writeFile(tempPath, `${JSON.stringify(file, null, 2)}\n`, "utf8");
61
+ await rename(tempPath, filePath);
62
+ return true;
63
+ }
64
+ export async function readApiOpenVikingHandoff(params) {
65
+ const key = sessionKeyHash(params.sessionKey ?? "", params.secret ?? "");
66
+ if (!key) {
67
+ return undefined;
68
+ }
69
+ const file = await readHandoffFile(handoffPath(params.stateDir));
70
+ return file.entries[key];
71
+ }
72
+ //# sourceMappingURL=openviking-handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openviking-handoff.js","sourceRoot":"","sources":["../../src/openviking-handoff.ts"],"names":[],"mappings":"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"}
package/index.ts CHANGED
@@ -1,18 +1,26 @@
1
1
  import type { OpenClawPluginApi } from "openclaw/plugin-sdk/plugin-entry";
2
+ import { defineChannelPluginEntry } from "openclaw/plugin-sdk/core";
3
+ import { buildJsonChannelConfigSchema } from "openclaw/plugin-sdk/channel-config-schema";
2
4
 
3
5
  import { apiChannelPlugin } from "./src/channel.js";
4
6
 
5
- export const API_GATEWAY_METHOD = "claw-manager-api.sendMessage";
6
-
7
- export default {
7
+ export default defineChannelPluginEntry({
8
8
  id: "claw-manager-api",
9
9
  name: "Claw Manager API",
10
10
  description: "External API channel for Claw Manager",
11
- register(api: OpenClawPluginApi) {
11
+ plugin: apiChannelPlugin,
12
+ configSchema: buildJsonChannelConfigSchema({
13
+ "$schema": "http://json-schema.org/draft-07/schema#",
14
+ type: "object",
15
+ properties: {
16
+ enabled: { type: "boolean" },
17
+ },
18
+ additionalProperties: false,
19
+ }),
20
+ registerFull(api: OpenClawPluginApi) {
12
21
  api.logger?.info?.(
13
22
  `claw-manager-api: register channel mode=${String(api.registrationMode ?? "unknown")} ` +
14
23
  `hasGatewayMethod=${String(typeof api.registerGatewayMethod === "function")}`,
15
24
  );
16
- api.registerChannel({ plugin: apiChannelPlugin });
17
25
  },
18
- };
26
+ });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "claw-manager-api",
3
- "version": "2026.6.29",
3
+ "version": "2026.6.31",
4
4
  "channels": [
5
5
  "claw-manager-api"
6
6
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claw-manager/openclaw-api-channel",
3
- "version": "2026.6.29",
3
+ "version": "2026.6.31",
4
4
  "description": "OpenClaw API channel for Claw Manager",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/src/channel.ts CHANGED
@@ -5,6 +5,8 @@ import path from "node:path";
5
5
  import { createTypingCallbacks } from "openclaw/plugin-sdk/channel-runtime";
6
6
  import type { ChannelPlugin, OpenClawConfig, PluginRuntime } from "openclaw/plugin-sdk/core";
7
7
 
8
+ import { writeApiOpenVikingHandoff } from "./openviking-handoff.js";
9
+
8
10
  export type ApiSendMessageParams = {
9
11
  requestId?: string;
10
12
  openVikingUserId?: string;
@@ -71,6 +73,34 @@ type ApiQueueResponse = {
71
73
  const API_CHANNEL_ID = "claw-manager-api";
72
74
  const API_ACCOUNT_ID = "global";
73
75
  const API_QUEUE_POLL_MS = 200;
76
+ const API_HEARTBEAT_INTERVAL_MS = 1000;
77
+ const API_STATUS_FILE = "status.json";
78
+
79
+ async function writeOpenVikingHandoffForTurn(params: {
80
+ sessionKey?: string;
81
+ openVikingUserId?: string;
82
+ senderHash?: string;
83
+ log?: ApiLogSink;
84
+ }): Promise<void> {
85
+ const secret = trim(process.env.OPENVIKING_IDENTITY_HASH_SECRET);
86
+ if (!secret) {
87
+ params.log?.debug?.(`[${API_ACCOUNT_ID}] openviking handoff skipped: identity secret missing`);
88
+ return;
89
+ }
90
+ try {
91
+ const wrote = await writeApiOpenVikingHandoff({
92
+ sessionKey: params.sessionKey,
93
+ openVikingUserId: params.openVikingUserId,
94
+ senderHash: params.senderHash,
95
+ secret,
96
+ });
97
+ if (wrote) {
98
+ params.log?.info?.(`[${API_ACCOUNT_ID}] openviking handoff written user=${params.openVikingUserId}`);
99
+ }
100
+ } catch (error) {
101
+ params.log?.warn?.(`[${API_ACCOUNT_ID}] openviking handoff write failed: ${errorMessage(error)}`);
102
+ }
103
+ }
74
104
 
75
105
  export function buildApiInboundContext(params: ApiSendMessageParams): ApiMsgContext {
76
106
  const message = trim(params.message);
@@ -137,6 +167,12 @@ export async function dispatchApiMessage(ctx: GatewaySendMessageContext): Promis
137
167
  const finalized = runtime.reply.finalizeInboundContext(
138
168
  inbound as Parameters<typeof runtime.reply.finalizeInboundContext>[0],
139
169
  ) as unknown as ApiMsgContext & { CommandAuthorized: boolean };
170
+ await writeOpenVikingHandoffForTurn({
171
+ sessionKey,
172
+ openVikingUserId: inbound.openVikingUserId,
173
+ senderHash: trim(ctx.senderHash),
174
+ log: ctx.log,
175
+ });
140
176
  await runtime.session.recordInboundSession({
141
177
  storePath,
142
178
  sessionKey,
@@ -196,6 +232,21 @@ export function resolveApiQueueRoot(): string {
196
232
  return path.join(home, ".openclaw", API_CHANNEL_ID);
197
233
  }
198
234
 
235
+ export async function writeApiQueueHeartbeat(root: string, running: boolean): Promise<void> {
236
+ await fs.mkdir(root, { recursive: true });
237
+ const now = Date.now();
238
+ const statusPath = path.join(root, API_STATUS_FILE);
239
+ const tempPath = `${statusPath}.tmp-${process.pid}-${now}`;
240
+ await fs.writeFile(tempPath, JSON.stringify({
241
+ version: 1,
242
+ running,
243
+ updatedAt: new Date(now).toISOString(),
244
+ updatedAtEpochMs: now,
245
+ pid: process.pid,
246
+ }), "utf8");
247
+ await fs.rename(tempPath, statusPath);
248
+ }
249
+
199
250
  export async function monitorApiQueue(ctx: ApiGatewayStartContext): Promise<void> {
200
251
  if (!ctx.channelRuntime) {
201
252
  throw new Error("ctx.channelRuntime missing");
@@ -212,6 +263,16 @@ export async function monitorApiQueue(ctx: ApiGatewayStartContext): Promise<void
212
263
  failed: path.join(root, "failed"),
213
264
  };
214
265
  await Promise.all(Object.values(dirs).map((dir) => fs.mkdir(dir, { recursive: true })));
266
+ let lastHeartbeatAt = 0;
267
+ const writeHeartbeatIfDue = async (force = false) => {
268
+ const now = Date.now();
269
+ if (!force && now - lastHeartbeatAt < API_HEARTBEAT_INTERVAL_MS) {
270
+ return;
271
+ }
272
+ await writeApiQueueHeartbeat(root, true);
273
+ lastHeartbeatAt = now;
274
+ };
275
+ await writeHeartbeatIfDue(true);
215
276
  ctx.log?.info?.(`[${API_ACCOUNT_ID}] claw-manager-api queue monitor started (${root})`);
216
277
  ctx.setStatus?.({
217
278
  accountId: API_ACCOUNT_ID,
@@ -222,9 +283,11 @@ export async function monitorApiQueue(ctx: ApiGatewayStartContext): Promise<void
222
283
  });
223
284
 
224
285
  while (!ctx.abortSignal?.aborted) {
286
+ await writeHeartbeatIfDue();
225
287
  await processPendingApiRequests(ctx, dirs);
226
288
  await sleep(API_QUEUE_POLL_MS, ctx.abortSignal);
227
289
  }
290
+ await writeApiQueueHeartbeat(root, false);
228
291
  }
229
292
 
230
293
  async function processPendingApiRequests(
@@ -0,0 +1,102 @@
1
+ import { createHmac } from "node:crypto";
2
+ import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+
6
+ export type ApiOpenVikingHandoff = {
7
+ openVikingUserId: string;
8
+ senderHash: string;
9
+ updatedAt: string;
10
+ };
11
+
12
+ type HandoffFile = {
13
+ version: 1;
14
+ entries: Record<string, ApiOpenVikingHandoff>;
15
+ };
16
+
17
+ function trimString(value: unknown): string {
18
+ return typeof value === "string" ? value.trim() : "";
19
+ }
20
+
21
+ function hmacSha256Hex(secret: string, value: string): string {
22
+ return createHmac("sha256", secret).update(value, "utf8").digest("hex");
23
+ }
24
+
25
+ export function resolveApiOpenVikingHandoffStateDir(stateDir?: string): string {
26
+ return (
27
+ trimString(stateDir) ||
28
+ trimString(process.env.OPENCLAW_STATE_DIR) ||
29
+ trimString(process.env.CLAWDBOT_STATE_DIR) ||
30
+ path.join(os.homedir(), ".openclaw")
31
+ );
32
+ }
33
+
34
+ function handoffPath(stateDir?: string): string {
35
+ return path.join(resolveApiOpenVikingHandoffStateDir(stateDir), "openviking", "sender-handoff.json");
36
+ }
37
+
38
+ function sessionKeyHash(sessionKey: string, secret: string): string | undefined {
39
+ const normalizedSessionKey = trimString(sessionKey);
40
+ const normalizedSecret = trimString(secret);
41
+ if (!normalizedSessionKey || !normalizedSecret) {
42
+ return undefined;
43
+ }
44
+ return hmacSha256Hex(normalizedSecret, normalizedSessionKey).slice(0, 32);
45
+ }
46
+
47
+ async function readHandoffFile(filePath: string): Promise<HandoffFile> {
48
+ try {
49
+ const raw = await readFile(filePath, "utf8");
50
+ const parsed = JSON.parse(raw) as Partial<HandoffFile>;
51
+ return {
52
+ version: 1,
53
+ entries: parsed.entries && typeof parsed.entries === "object" ? parsed.entries : {},
54
+ };
55
+ } catch (error) {
56
+ if ((error as NodeJS.ErrnoException).code === "ENOENT") {
57
+ return { version: 1, entries: {} };
58
+ }
59
+ throw error;
60
+ }
61
+ }
62
+
63
+ export async function writeApiOpenVikingHandoff(params: {
64
+ stateDir?: string;
65
+ sessionKey?: string;
66
+ openVikingUserId?: string;
67
+ senderHash?: string;
68
+ secret?: string;
69
+ }): Promise<boolean> {
70
+ const key = sessionKeyHash(params.sessionKey ?? "", params.secret ?? "");
71
+ const openVikingUserId = trimString(params.openVikingUserId);
72
+ const senderHash = trimString(params.senderHash);
73
+ if (!key || !openVikingUserId || !senderHash) {
74
+ return false;
75
+ }
76
+
77
+ const filePath = handoffPath(params.stateDir);
78
+ await mkdir(path.dirname(filePath), { recursive: true });
79
+ const file = await readHandoffFile(filePath);
80
+ file.entries[key] = {
81
+ openVikingUserId,
82
+ senderHash,
83
+ updatedAt: new Date().toISOString(),
84
+ };
85
+ const tempPath = `${filePath}.${process.pid}.tmp`;
86
+ await writeFile(tempPath, `${JSON.stringify(file, null, 2)}\n`, "utf8");
87
+ await rename(tempPath, filePath);
88
+ return true;
89
+ }
90
+
91
+ export async function readApiOpenVikingHandoff(params: {
92
+ stateDir?: string;
93
+ sessionKey?: string;
94
+ secret?: string;
95
+ }): Promise<ApiOpenVikingHandoff | undefined> {
96
+ const key = sessionKeyHash(params.sessionKey ?? "", params.secret ?? "");
97
+ if (!key) {
98
+ return undefined;
99
+ }
100
+ const file = await readHandoffFile(handoffPath(params.stateDir));
101
+ return file.entries[key];
102
+ }