node-opcua-pseudo-session
Version:
pure nodejs OPCUA SDK - module pseudo-session
264 lines (263 loc) • 15.2 kB
TypeScript
import { ByteString } from "node-opcua-basic-types";
import { DataValue } from "node-opcua-data-value";
import { NodeIdLike } from "node-opcua-nodeid";
import { BrowseDescriptionOptions, BrowseResult } from "node-opcua-service-browse";
import { Argument, CallMethodRequestOptions, CallMethodResult } from "node-opcua-service-call";
import { ReadValueIdOptions } from "node-opcua-service-read";
import { WriteValueOptions } from "node-opcua-service-write";
import { BrowsePathResult } from "node-opcua-service-translate-browse-path";
import { CallbackT, StatusCode } from "node-opcua-status-code";
import { BrowsePathOptions, UserTokenType, X509IdentityTokenOptions } from "node-opcua-types";
export type BrowseDescriptionLike = string | BrowseDescriptionOptions;
export type CallMethodRequestLike = CallMethodRequestOptions;
export type ResponseCallback<T> = (err: Error | null, result?: T) => void;
export type MethodId = NodeIdLike;
export interface ArgumentDefinition {
inputArguments: Argument[];
outputArguments: Argument[];
}
export interface IBasicTransportSettings {
maxMessageSize: number;
}
export interface IBasicSessionBrowseAsyncSimple {
browse(nodeToBrowse: BrowseDescriptionLike): Promise<BrowseResult>;
}
export interface IBasicSessionBrowseAsyncMultiple {
browse(nodesToBrowse: BrowseDescriptionLike[]): Promise<BrowseResult[]>;
}
export interface IBasicSessionBrowseAsync extends IBasicSessionBrowseAsyncSimple, IBasicSessionBrowseAsyncMultiple {
browse(nodeToBrowse: BrowseDescriptionLike): Promise<BrowseResult>;
browse(nodesToBrowse: BrowseDescriptionLike[]): Promise<BrowseResult[]>;
}
export interface IBasicSessionBrowseCallback {
browse(nodeToBrowse: BrowseDescriptionLike, callback: ResponseCallback<BrowseResult>): void;
browse(nodesToBrowse: BrowseDescriptionLike[], callback: ResponseCallback<BrowseResult[]>): void;
}
export interface IBasicSessionBrowse extends IBasicSessionBrowseAsync, IBasicSessionBrowseCallback {
browse(nodeToBrowse: BrowseDescriptionLike): Promise<BrowseResult>;
browse(nodesToBrowse: BrowseDescriptionLike[]): Promise<BrowseResult[]>;
browse(nodeToBrowse: BrowseDescriptionLike, callback: ResponseCallback<BrowseResult>): void;
browse(nodesToBrowse: BrowseDescriptionLike[], callback: ResponseCallback<BrowseResult[]>): void;
}
export interface IBasicSessionBrowseNextAsyncSimple {
browseNext(continuationPoint: Buffer, releaseContinuationPoints: boolean): Promise<BrowseResult>;
}
export interface IBasicSessionBrowseNextAsyncMultiple {
browseNext(continuationPoints: Buffer[], releaseContinuationPoints: boolean): Promise<BrowseResult[]>;
}
export interface IBasicSessionBrowseNextAsync extends IBasicSessionBrowseNextAsyncMultiple, IBasicSessionBrowseNextAsyncSimple {
browseNext(continuationPoint: Buffer, releaseContinuationPoints: boolean): Promise<BrowseResult>;
browseNext(continuationPoints: Buffer[], releaseContinuationPoints: boolean): Promise<BrowseResult[]>;
}
export interface IBasicSessionBrowseNextCallback {
/**
*
* @param continuationPoint
* @param releaseContinuationPoints a Boolean parameter with the following values:
* * `true` passed continuationPoints shall be reset to free resources in
* the Server. The continuation points are released and the results
* and diagnosticInfos arrays are empty.
* * `false` passed continuationPoints shall be used to get the next set of
* browse information.
*
* A Client shall always use the continuation point returned by a Browse or
* BrowseNext response to free the resources for the continuation point in the
* Server. If the Client does not want to get the next set of browse information,
* BrowseNext shall be called with this parameter set to `true`.
*
*/
browseNext(continuationPoint: Buffer, releaseContinuationPoints: boolean, callback: ResponseCallback<BrowseResult>): void;
browseNext(continuationPoints: Buffer[], releaseContinuationPoints: boolean, callback: ResponseCallback<BrowseResult[]>): void;
}
export interface IBasicSessionBrowseNext extends IBasicSessionBrowseNextAsync, IBasicSessionBrowseNextCallback {
browseNext(continuationPoint: Buffer, releaseContinuationPoints: boolean): Promise<BrowseResult>;
browseNext(continuationPoints: Buffer[], releaseContinuationPoints: boolean): Promise<BrowseResult[]>;
browseNext(continuationPoint: Buffer, releaseContinuationPoints: boolean, callback: ResponseCallback<BrowseResult>): void;
browseNext(continuationPoints: Buffer[], releaseContinuationPoints: boolean, callback: ResponseCallback<BrowseResult[]>): void;
}
export interface IBasicSessionReadAsyncSimple {
read(nodeToRead: ReadValueIdOptions, maxAge?: number): Promise<DataValue>;
}
export interface IBasicSessionReadAsyncMultiple {
read(nodesToRead: ReadValueIdOptions[], maxAge?: number): Promise<DataValue[]>;
}
export interface IBasicSessionReadAsync extends IBasicSessionReadAsyncSimple, IBasicSessionReadAsyncMultiple {
read(nodeToRead: ReadValueIdOptions, maxAge?: number): Promise<DataValue>;
read(nodesToRead: ReadValueIdOptions[], maxAge?: number): Promise<DataValue[]>;
}
export interface IBasicSessionReadCallback {
read(nodeToRead: ReadValueIdOptions, maxAge: number, callback: ResponseCallback<DataValue>): void;
read(nodesToRead: ReadValueIdOptions[], maxAge: number, callback: ResponseCallback<DataValue[]>): void;
read(nodeToRead: ReadValueIdOptions, callback: ResponseCallback<DataValue>): void;
read(nodesToRead: ReadValueIdOptions[], callback: ResponseCallback<DataValue[]>): void;
}
export interface IBasicSessionRead extends IBasicSessionReadCallback, IBasicSessionReadAsync {
read(nodeToRead: ReadValueIdOptions, maxAge?: number): Promise<DataValue>;
read(nodesToRead: ReadValueIdOptions[], maxAge?: number): Promise<DataValue[]>;
read(nodeToRead: ReadValueIdOptions, maxAge: number, callback: ResponseCallback<DataValue>): void;
read(nodesToRead: ReadValueIdOptions[], maxAge: number, callback: ResponseCallback<DataValue[]>): void;
read(nodeToRead: ReadValueIdOptions, callback: ResponseCallback<DataValue>): void;
read(nodesToRead: ReadValueIdOptions[], callback: ResponseCallback<DataValue[]>): void;
}
export interface IBasicSessionWriteAsyncSimple {
write(nodeToWrite: WriteValueOptions): Promise<StatusCode>;
}
export interface IBasicSessionWriteAsyncMultiple {
write(nodesToWrite: WriteValueOptions[]): Promise<StatusCode[]>;
}
export interface IBasicSessionWriteAsync extends IBasicSessionWriteAsyncSimple, IBasicSessionWriteAsyncMultiple {
write(nodeToWrite: WriteValueOptions): Promise<StatusCode>;
write(nodesToWrite: WriteValueOptions[]): Promise<StatusCode[]>;
}
export interface IBasicSessionWriteCallback {
write(nodeToWrite: WriteValueOptions, callback: ResponseCallback<StatusCode>): void;
write(nodesToWrite: WriteValueOptions[], callback: ResponseCallback<StatusCode[]>): void;
}
export interface IBasicSessionWrite extends IBasicSessionWriteCallback, IBasicSessionWriteAsync {
write(nodeToWrite: WriteValueOptions): Promise<StatusCode>;
write(nodesToWrite: WriteValueOptions[]): Promise<StatusCode[]>;
write(nodeToWrite: WriteValueOptions, callback: ResponseCallback<StatusCode>): void;
write(nodesToWrite: WriteValueOptions[], callback: ResponseCallback<StatusCode[]>): void;
}
export interface IBasicSessionCallAsyncSimple {
call(methodToCall: CallMethodRequestLike): Promise<CallMethodResult>;
}
export interface IBasicSessionCallAsyncMultiple {
call(methodsToCall: CallMethodRequestLike[]): Promise<CallMethodResult[]>;
}
export interface IBasicSessionCallAsync extends IBasicSessionCallAsyncSimple, IBasicSessionCallAsyncMultiple {
call(methodToCall: CallMethodRequestLike): Promise<CallMethodResult>;
call(methodsToCall: CallMethodRequestLike[]): Promise<CallMethodResult[]>;
}
export interface IBasicSessionCallCallback {
call(methodToCall: CallMethodRequestLike, callback: (err: Error | null, result?: CallMethodResult) => void): void;
call(methodsToCall: CallMethodRequestLike[], callback: (err: Error | null, results?: CallMethodResult[]) => void): void;
}
export interface IBasicSessionCall extends IBasicSessionCallCallback, IBasicSessionCallAsync {
/**
*
*
* @param methodToCall {CallMethodRequest} the call method request
* @param callback
*
* @example :
*
* ```javascript
* const methodToCall = {
* objectId: "ns=2;i=12",
* methodId: "ns=2;i=13",
* inputArguments: [
* new Variant({...}),
* new Variant({...}),
* ]
* }
* session.call(methodToCall,function(err,callResult) {
* if (!err) {
* console.log(" statusCode = ",callResult.statusCode);
* console.log(" inputArgumentResults[0] = ",callResult.inputArgumentResults[0].toString());
* console.log(" inputArgumentResults[1] = ",callResult.inputArgumentResults[1].toString());
* console.log(" outputArgument[0] = ",callResult.outputArgument[0].toString()); // array of variant
* }
* });
* ```
*
*
* @param methodsToCall {CallMethodRequest[]} the call method request array
* @param callback
*
*
* @example :
*
* ```javascript
* const methodsToCall = [ {
* objectId: "ns=2;i=12",
* methodId: "ns=2;i=13",
* inputArguments: [
* new Variant({...}),
* new Variant({...}),
* ]
* }];
* session.call(methodsToCall,function(err,callResults) {
* if (!err) {
* const callResult = callResults[0];
* console.log(" statusCode = ",rep.statusCode);
* console.log(" inputArgumentResults[0] = ",callResult.inputArgumentResults[0].toString());
* console.log(" inputArgumentResults[1] = ",callResult.inputArgumentResults[1].toString());
* console.log(" outputArgument[0] = ",callResult.outputArgument[0].toString()); // array of variant
* }
* });
* ```
*/
call(methodToCall: CallMethodRequestLike): Promise<CallMethodResult>;
call(methodsToCall: CallMethodRequestLike[]): Promise<CallMethodResult[]>;
call(methodToCall: CallMethodRequestLike, callback: (err: Error | null, result?: CallMethodResult) => void): void;
call(methodsToCall: CallMethodRequestLike[], callback: (err: Error | null, results?: CallMethodResult[]) => void): void;
}
export type BrowsePathLike = BrowsePathOptions;
export interface IBasicSessionTranslateBrowsePathAsyncSimple {
translateBrowsePath(browsePath: BrowsePathLike): Promise<BrowsePathResult>;
}
export interface IBasicSessionTranslateBrowsePathAsyncMultiple {
translateBrowsePath(browsePaths: BrowsePathLike[]): Promise<BrowsePathResult[]>;
}
export interface IBasicSessionTranslateBrowsePathAsync extends IBasicSessionTranslateBrowsePathAsyncSimple, IBasicSessionTranslateBrowsePathAsyncMultiple {
translateBrowsePath(browsePath: BrowsePathLike): Promise<BrowsePathResult>;
translateBrowsePath(browsePaths: BrowsePathLike[]): Promise<BrowsePathResult[]>;
}
export interface IBasicSessionTranslateBrowsePathCallback {
translateBrowsePath(browsesPath: BrowsePathLike[], callback: ResponseCallback<BrowsePathResult[]>): void;
translateBrowsePath(browsePath: BrowsePathLike, callback: ResponseCallback<BrowsePathResult>): void;
}
export interface IBasicSessionTranslateBrowsePath extends IBasicSessionTranslateBrowsePathCallback, IBasicSessionTranslateBrowsePathAsync {
translateBrowsePath(browsePath: BrowsePathLike): Promise<BrowsePathResult>;
translateBrowsePath(browsePaths: BrowsePathLike[]): Promise<BrowsePathResult[]>;
translateBrowsePath(browsesPath: BrowsePathLike[], callback: ResponseCallback<BrowsePathResult[]>): void;
translateBrowsePath(browsePath: BrowsePathLike, callback: ResponseCallback<BrowsePathResult>): void;
}
export interface IBasicSessionAsyncSimple extends IBasicSessionBrowseAsyncSimple, IBasicSessionReadAsyncSimple, IBasicSessionWriteAsyncSimple, IBasicSessionCallAsyncSimple, IBasicSessionTranslateBrowsePathAsyncSimple {
}
export interface IBasicSessionAsyncMultiple extends IBasicSessionBrowseAsyncMultiple, IBasicSessionReadAsyncMultiple, IBasicSessionWriteAsyncMultiple, IBasicSessionCallAsyncMultiple, IBasicSessionTranslateBrowsePathAsyncMultiple {
}
export interface IBasicSessionAsync extends IBasicSessionBrowseAsync, IBasicSessionReadAsync, IBasicSessionWriteAsync, IBasicSessionCallAsync, IBasicSessionTranslateBrowsePathAsync {
}
export type IVeryBasicSession = IBasicSessionAsync;
export interface IBasicSessionAsync2 extends IBasicSessionAsync, IBasicSessionBrowseNextAsync {
}
export interface ITransportSettingProvider {
getTransportSettings?: () => IBasicTransportSettings;
}
export interface IBasicSessionGetArgumentDefinitionCallback {
getArgumentDefinition(methodId: MethodId, callback: (err: Error | null, args?: ArgumentDefinition) => void): void;
}
export interface IBasicSessionGetArgumentDefinitionAsync {
getArgumentDefinition(methodId: MethodId): Promise<ArgumentDefinition>;
}
export interface IBasicSessionGetArgumentDefinition extends IBasicSessionGetArgumentDefinitionAsync, IBasicSessionGetArgumentDefinitionCallback {
getArgumentDefinition(methodId: MethodId): Promise<ArgumentDefinition>;
getArgumentDefinition(methodId: MethodId, callback: (err: Error | null, args?: ArgumentDefinition) => void): void;
}
export type IBasicSessionCallback = IBasicSessionReadCallback & IBasicSessionBrowseNextCallback & IBasicSessionBrowseCallback & IBasicSessionTranslateBrowsePathCallback & IBasicSessionGetArgumentDefinitionCallback & IBasicSessionWriteCallback;
export interface IBasicSession extends ITransportSettingProvider, IBasicSessionBrowse, IBasicSessionBrowseNext, IBasicSessionCall, IBasicSessionRead, IBasicSessionTranslateBrowsePath, IBasicSessionWrite, IBasicSessionGetArgumentDefinition {
}
export type PrivateKeyPEM = string;
export interface UserIdentityInfoUserName {
type: UserTokenType.UserName;
userName: string;
password: string;
}
export interface UserIdentityInfoX509 extends X509IdentityTokenOptions {
type: UserTokenType.Certificate;
certificateData: ByteString;
privateKey: PrivateKeyPEM;
}
export interface AnonymousIdentity {
type: UserTokenType.Anonymous;
}
export type UserIdentityInfo = AnonymousIdentity | UserIdentityInfoX509 | UserIdentityInfoUserName;
export interface IBasicSessionChangeUser {
changeUser(userIdentityInfo: UserIdentityInfo): Promise<StatusCode>;
changeUser(userIdentityInfo: UserIdentityInfo, callback: CallbackT<StatusCode>): void;
}
export declare function getArgumentDefinitionHelper(session: IBasicSessionBrowseAsyncSimple & IBasicSessionReadAsyncMultiple, methodId: MethodId): Promise<ArgumentDefinition>;
export declare function readNamespaceArray(session: IBasicSessionReadAsyncSimple): Promise<string[]>;
export declare function clearSessionCache(session: IBasicSessionAsync2): Promise<void>;