feat: make notifyBotToken/adminUserId optional

The client never sends pairing notifications (the server does); these
Discord fields were required but unused. Make them optional + drop from
the config schema's required list. Back-compat: still accepted if set.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
h z
2026-05-19 15:59:08 +01:00
parent c3c11c1b27
commit d0b19cf116
3 changed files with 22 additions and 14 deletions

8
package-lock.json generated
View File

@@ -12,10 +12,14 @@
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^25.5.2", "@types/node": "^25.5.2",
"openclaw": "file:/usr/lib/node_modules/openclaw",
"typescript": "^5.6.3", "typescript": "^5.6.3",
"vitest": "^4.1.3" "vitest": "^4.1.3"
} }
}, },
"../../../../../usr/lib/node_modules/openclaw": {
"dev": true
},
"node_modules/@emnapi/core": { "node_modules/@emnapi/core": {
"version": "1.9.1", "version": "1.9.1",
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz",
@@ -914,6 +918,10 @@
], ],
"license": "MIT" "license": "MIT"
}, },
"node_modules/openclaw": {
"resolved": "../../../../../usr/lib/node_modules/openclaw",
"link": true
},
"node_modules/pathe": { "node_modules/pathe": {
"version": "2.0.3", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",

View File

@@ -1,8 +1,12 @@
export interface YonexusClientConfig { export interface YonexusClientConfig {
mainHost: string; mainHost: string;
identifier: string; identifier: string;
notifyBotToken: string; /**
adminUserId: string; * Optional. The client never sends pairing notifications (the server
* does); accepted for back-compat but no longer required.
*/
notifyBotToken?: string;
adminUserId?: string;
} }
export class YonexusClientConfigError extends Error { export class YonexusClientConfigError extends Error {
@@ -44,15 +48,9 @@ export function validateYonexusClientConfig(raw: unknown): YonexusClientConfig {
issues.push("identifier is required"); issues.push("identifier is required");
} }
// Optional (back-compat): the client does not send notifications.
const rawNotifyBotToken = source.notifyBotToken; const rawNotifyBotToken = source.notifyBotToken;
if (!isNonEmptyString(rawNotifyBotToken)) {
issues.push("notifyBotToken is required");
}
const rawAdminUserId = source.adminUserId; const rawAdminUserId = source.adminUserId;
if (!isNonEmptyString(rawAdminUserId)) {
issues.push("adminUserId is required");
}
if (issues.length > 0) { if (issues.length > 0) {
throw new YonexusClientConfigError(issues); throw new YonexusClientConfigError(issues);
@@ -60,13 +58,15 @@ export function validateYonexusClientConfig(raw: unknown): YonexusClientConfig {
const mainHost = (rawMainHost as string).trim(); const mainHost = (rawMainHost as string).trim();
const identifier = (rawIdentifier as string).trim(); const identifier = (rawIdentifier as string).trim();
const notifyBotToken = (rawNotifyBotToken as string).trim();
const adminUserId = (rawAdminUserId as string).trim();
return { return {
mainHost, mainHost,
identifier, identifier,
notifyBotToken, notifyBotToken: isNonEmptyString(rawNotifyBotToken)
adminUserId ? rawNotifyBotToken.trim()
: undefined,
adminUserId: isNonEmptyString(rawAdminUserId)
? rawAdminUserId.trim()
: undefined
}; };
} }

View File

@@ -14,6 +14,6 @@
"notifyBotToken": { "type": "string" }, "notifyBotToken": { "type": "string" },
"adminUserId": { "type": "string" } "adminUserId": { "type": "string" }
}, },
"required": ["mainHost", "identifier", "notifyBotToken", "adminUserId"] "required": ["mainHost", "identifier"]
} }
} }