openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
66 lines (65 loc) • 2.53 kB
JavaScript
import { At as boolean, Et as array, Rn as string, Tn as object } from "./schemas-6cH6bZ7o.js";
import { h as MarkdownConfigSchema, o as DmPolicySchema } from "./zod-schema.core-1wQTyhOa.js";
import { t as AllowFromListSchema } from "./config-schema-CO2ikh7C.js";
import { r as buildSecretInputSchema } from "./secret-input-DVCzFGxN.js";
import "./channel-plugin-common-DTFXpVi6.js";
import "./status-helpers-BevxX6Pu.js";
import "./channel-config-primitives-Bk3iiMir.js";
//#region extensions/nostr/src/config-schema.ts
/**
* Validates https:// URLs only (no javascript:, data:, file:, etc.)
*/
const safeUrlSchema = string().url().refine((url) => {
try {
return new URL(url).protocol === "https:";
} catch {
return false;
}
}, { message: "URL must use https:// protocol" });
/**
* NIP-01 profile metadata schema
* https://github.com/nostr-protocol/nips/blob/master/01.md
*/
const NostrProfileSchema = object({
/** Username (NIP-01: name) - max 256 chars */
name: string().max(256).optional(),
/** Display name (NIP-01: display_name) - max 256 chars */
displayName: string().max(256).optional(),
/** Bio/description (NIP-01: about) - max 2000 chars */
about: string().max(2e3).optional(),
/** Profile picture URL (must be https) */
picture: safeUrlSchema.optional(),
/** Banner image URL (must be https) */
banner: safeUrlSchema.optional(),
/** Website URL (must be https) */
website: safeUrlSchema.optional(),
/** NIP-05 identifier (e.g., "user@example.com") */
nip05: string().optional(),
/** Lightning address (LUD-16) */
lud16: string().optional()
});
/**
* Zod schema for channels.nostr.* configuration
*/
const NostrConfigSchema = object({
/** Account name (optional display name) */
name: string().optional(),
/** Optional default account id for routing/account selection. */
defaultAccount: string().optional(),
/** Whether this channel is enabled */
enabled: boolean().optional(),
/** Markdown formatting overrides (tables). */
markdown: MarkdownConfigSchema,
/** Private key in hex or nsec bech32 format */
privateKey: buildSecretInputSchema().optional(),
/** WebSocket relay URLs to connect to */
relays: array(string()).optional(),
/** DM access policy: pairing, allowlist, open, or disabled */
dmPolicy: DmPolicySchema.optional(),
/** Allowed sender pubkeys (npub or hex format) */
allowFrom: AllowFromListSchema,
/** Profile metadata (NIP-01 kind:0 content) */
profile: NostrProfileSchema.optional()
});
//#endregion
export { NostrProfileSchema as n, NostrConfigSchema as t };