node-red-contrib-opcua-server-refresh
Version:
Fork of the original 'node-red-contrib-opcua-server' package that is no longer maintained. This has been refactored to support the latest version of node-opcua and fixes incomplete/non-working features.
110 lines (98 loc) • 3.04 kB
text/typescript
import {
OPCUAServer,
SecurityPolicy,
MessageSecurityMode,
AddressSpace,
} from "node-opcua";
import { NodeRedNode } from "./node-red";
export interface ServerOptions {
port: number;
resourcePath: string;
buildInfo: {
productName: string;
buildNumber: string;
buildDate: Date;
};
serverCapabilities: {
maxSessions: number;
maxBrowseContinuationPoints: number;
maxHistoryContinuationPoints: number;
operationLimits: {
maxNodesPerRead: number;
maxNodesPerWrite: number;
maxNodesPerHistoryReadData: number;
maxNodesPerBrowse: number;
};
};
serverInfo: {
productUri: string;
applicationName: { text: string; locale: string };
gatewayServerUri: null;
discoveryProfileUri: null;
discoveryUrls: string[];
};
alternateHostname?: string;
maxConnectionsPerEndpoint: number;
allowAnonymous: boolean;
certificateFile: string;
privateKeyFile: string;
userManager: {
isValidUser: () => boolean;
};
isAuditing: boolean;
disableDiscovery: boolean;
registerServerMethod: number;
securityPolicies: SecurityPolicy[];
securityModes: MessageSecurityMode[];
nodeset_filename?: string[];
}
export interface CoreServerModule {
// OPC UA Server exports
nodeOpcuaServer: any;
opcua: any;
// Debug loggers
debugLog: (message: string) => void;
detailLog: (message: string) => void;
errorLog: (message: string | Error) => void;
// Configuration
readConfigOfServerNode: (node: NodeRedNode, config: any) => NodeRedNode;
// Server lifecycle
initialize: (node: NodeRedNode, options: ServerOptions) => OPCUAServer;
run: (node: NodeRedNode, server: OPCUAServer) => Promise<void>;
stop: (node: NodeRedNode, server: OPCUAServer, done: () => void) => void;
// Server configuration
defaultServerOptions: (node: NodeRedNode) => ServerOptions;
loadOPCUANodeSets: (node: NodeRedNode, dirname: string) => string[];
getRegisterServerMethod: (id: number) => any;
// Address space construction
constructAddressSpaceFromScript: (
server: OPCUAServer,
constructAddressSpaceScript: Function,
opcua: any,
eventObjects: Record<string, any>,
done: () => void
) => Promise<void>;
postInitialize: (node: NodeRedNode, opcuaServer: OPCUAServer) => void;
// Status management
listenForErrors: (node: NodeRedNode) => void;
setStatusPending: (node: NodeRedNode) => void;
setStatusInit: (node: NodeRedNode) => void;
setStatusActive: (node: NodeRedNode) => void;
setStatusClosed: (node: NodeRedNode) => void;
setStatusError: (node: NodeRedNode, text: string) => void;
// Security functions
isWindows: () => boolean;
checkUserLogon: () => boolean;
getPackagePathFromIndex: () => string;
serverCertificateFile: (keybits: string) => string;
serverKeyFile: (keybits: string) => string;
}
export interface AddressSpaceScript {
(
server: OPCUAServer,
addressSpace: AddressSpace,
opcua: any,
eventObjects: Record<string, any>,
done: () => void
): void;
}