opcjs-client 0.1.3

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/services/serviceBase.ts","../src/services/sessionService.ts","../src/issuerConfiguration.ts","../src/sessions/session.ts","../src/sessions/sessionHandler.ts","../src/services/attributeServiceAttributes.ts","../src/services/attributeService.ts","../src/readValueResult.ts","../src/subscriptionHandlerEntry.ts","../src/subscriptionHandler.ts","../src/services/subscriptionService.ts","../src/services/monitoredItemService.ts","../src/client.ts","../../base/src/codecs/codecError.ts","../../base/src/codecs/binary/binaryWriter.ts","../src/configurationClient.ts","../src/id.ts","../src/userIdentity.ts"],"names":["RequestHeader","ExtensionObject","ApplicationDescription","LocalizedText","ApplicationTypeEnum","CreateSessionRequest","CreateSessionResponse","SignatureData","ActivateSessionRequest","UserTokenTypeEnum","NodeId","ReadValueId","QualifiedName","ReadRequest","TimestampsToReturnEnum","SubscriptionAcknowledgement","CreateSubscriptionRequest","PublishRequest","MonitoringParameters","MonitoredItemCreateRequest","CreateMonitoredItemsRequest","ChannelFactory","SecureChannel","Configuration","Encoder","registerEncoders","Decoder","BinaryReader","registerTypeDecoders","registerBinaryDecoders","AnonymousIdentityToken","UserNameIdentityToken","IssuedIdentityToken"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ExtensionObject, ISecureChannel, NodeId, RequestHeader } from \"@opcua/base\";\n\nexport abstract class ServiceBase{\n\n\n protected createRequestHeader(): RequestHeader {\n const requestHeader = new RequestHeader();\n requestHeader.authenticationToken = this.authToken;\n requestHeader.timestamp = new Date();\n requestHeader.requestHandle = 0; // will be set by secure channel\n requestHeader.returnDiagnostics = 0;\n requestHeader.auditEntryId = '';\n requestHeader.timeoutHint = 60000;\n requestHeader.additionalHeader = ExtensionObject.newEmpty();\n\n return requestHeader;\n }\n \n constructor(private authToken: NodeId, protected secureChannel: ISecureChannel){}\n}","import { ActivateSessionRequest, ApplicationDescription, ApplicationTypeEnum, Configuration, CreateSessionRequest, CreateSessionResponse, EndpointDescription, ExtensionObject, ISecureChannel, LocalizedText, NodeId, SignatureData, SignedSoftwareCertificate, UserIdentityToken } from \"@opcua/base\";\nimport { ServiceBase } from \"./serviceBase\";\n\nexport class SessionService extends ServiceBase {\n async createSession(): Promise<{ sessionId: number, authToken: NodeId, endpoint: EndpointDescription }> {\n console.log(\"Creating session...\");\n\n const clientDescription = new ApplicationDescription();\n clientDescription.applicationUri = this.configuration.applicationUri;\n clientDescription.productUri = this.configuration.productUri;\n clientDescription.applicationName = new LocalizedText(undefined, this.configuration.productName);\n clientDescription.applicationType = ApplicationTypeEnum.Client;\n clientDescription.gatewayServerUri = '';\n clientDescription.discoveryProfileUri = '';\n clientDescription.discoveryUrls = new Array<string>();\n\n const request = new CreateSessionRequest();\n request.requestHeader = this.createRequestHeader();\n request.clientDescription = clientDescription;\n request.serverUri = '';\n request.endpointUrl = this.secureChannel.getEndpointUrl();\n request.sessionName = '';\n request.clientNonce = null;\n request.clientCertificate = null;\n request.requestedSessionTimeout = 60000;\n request.maxResponseMessageSize = 0;\n\n\n // todo: verify endpoints\n // todo: check application uri in server certificate\n\n console.log(\"Sending CreateSessionRequest...\");\n const response = await this.secureChannel.issueServiceRequest(request);\n if (!response || !(response instanceof CreateSessionResponse)) {\n throw new Error(\"Invalid response type for CreateSessionRequest\");\n }\n\n const castedResponse = response as CreateSessionResponse;\n if (!castedResponse || !castedResponse.sessionId || !castedResponse.authenticationToken) {\n throw new Error(\"CreateSessionResponse missing SessionId or AuthenticationToken\");\n }\n\n const endpoint = 'opc.' + this.secureChannel.getEndpointUrl();\n const securityMode = this.secureChannel.getSecurityMode();\n const securityPolicyUri = this.secureChannel.getSecurityPolicy(); // todo: does not work with localhost. Not sure why.\n\n const serverEndpoint = castedResponse\n ?.serverEndpoints\n ?.find(ep => ep.endpointUrl === endpoint\n && ep.securityMode === securityMode\n && ep.securityPolicyUri === securityPolicyUri);\n\n if (!serverEndpoint) {\n throw new Error(`Server endpoint ${endpoint} not found in CreateSessionResponse`);\n }\n\n console.log(\"Session created with id:\", castedResponse.sessionId.identifier);\n return {\n sessionId: castedResponse.sessionId.identifier as number,\n authToken: castedResponse.authenticationToken,\n endpoint: serverEndpoint\n };\n }\n\n async activateSession(identityToken: UserIdentityToken): Promise<void> {\n const signatureData = new SignatureData();\n signatureData.algorithm = this.secureChannel.getSecurityPolicy();\n signatureData.signature = new Uint8Array(0);\n\n const request = new ActivateSessionRequest();\n request.requestHeader = this.createRequestHeader();\n request.clientSignature = signatureData;\n request.clientSoftwareCertificates = new Array<SignedSoftwareCertificate>();\n request.localeIds = ['en-US'];\n request.userIdentityToken = ExtensionObject.newBinary(identityToken);\n request.userTokenSignature = signatureData;\n\n console.log(\"Sending ActivateSessionRequest...\");\n await this.secureChannel.issueServiceRequest(request);\n console.log(\"Session activated.\");\n }\n\n recreate(authToken: NodeId): SessionService {\n return new SessionService(authToken, this.secureChannel, this.configuration)\n }\n\n constructor(authToken: NodeId, secureChannel: ISecureChannel, private configuration: Configuration) {\n super(authToken, secureChannel)\n }\n}","export class IssuerConfiguration{\n public static newFrom(issuerEndpointUrl: any): IssuerConfiguration {\n return new IssuerConfiguration(\n issuerEndpointUrl['ua.resourceId'],\n issuerEndpointUrl['ua.authorityUrl'],\n issuerEndpointUrl['ua.authorityProfileUri'],\n issuerEndpointUrl['ua.tokenEndpoint'],\n issuerEndpointUrl['ua.authorizationEndpoint'],\n issuerEndpointUrl['ua.requestTypes'],\n issuerEndpointUrl['ua.scopes']\n );\n }\n \n constructor(\n public resourceId: string,\n public authorityUrl: string,\n public authorityProfileUri: string,\n public tokenEndpoint: string,\n public authorizationEndpoint: string,\n public requestTypes: string[],\n public scopes: string[]\n ){\n \n }\n}","import { EndpointDescription, IssuedIdentityToken, NodeId, UserTokenTypeEnum } from \"@opcua/base\";\nimport { IssuerConfiguration } from \"../issuerConfiguration\";\nimport { SessionService } from \"../services/sessionService\";\nimport { UserIdentity } from \"../userIdentity\";\n\nexport class Session {\n async activateSession(identity: UserIdentity): Promise<void> {\n const token = identity.getUserIdentityToken();\n const tokenType = identity.getTokenType();\n const tokenPolicy = this.endpoint.userIdentityTokens?.find(t => t.tokenType === tokenType);\n if (!tokenPolicy) {\n throw new Error(`UserIdentityToken of type ${tokenType} not supported by server`);\n }\n token.policyId = tokenPolicy.policyId;\n\n if (tokenType === UserTokenTypeEnum.IssuedToken) {\n if (!tokenPolicy.issuerEndpointUrl) {\n throw new Error(\"IssuerEndpointUrl not defined for IssuedToken\");\n }\n const issuerEndpointUrl = JSON.parse(tokenPolicy.issuerEndpointUrl)\n const issuerConfig = IssuerConfiguration.newFrom(issuerEndpointUrl);\n\n const issuerLoginCallback = identity.getIssuerLoginCallback();\n const tokenData = await issuerLoginCallback(issuerConfig);\n\n const issuerToken = token as IssuedIdentityToken;\n issuerToken.tokenData = new TextEncoder().encode(tokenData.json);\n }\n\n await this.sessionServices.activateSession(token);\n }\n\n getAuthToken(): NodeId {\n return this.authToken;\n }\n\n constructor(\n public sessionId: number,\n private authToken: NodeId,\n private endpoint: EndpointDescription,\n private sessionServices: SessionService) { }\n}","import { ConfigurationClient } from \"../configurationClient\";\nimport { ISecureChannel, NodeId } from \"@opcua/base\";\nimport { SessionService } from \"../services/sessionService\";\nimport { UserIdentity } from \"../userIdentity\";\nimport { Session } from \"./session\";\n\nexport class SessionHandler {\n private sessionServices: SessionService;\n async createNewSession(identity:UserIdentity) : Promise<Session>{\n const ret = await this.sessionServices.createSession();\n this.sessionServices = this.sessionServices.recreate(ret.authToken)\n\n const session = new Session(ret.sessionId, ret.authToken, ret.endpoint, this.sessionServices);\n await session.activateSession(identity);\n return session;\n }\n\n constructor(secureChannel:ISecureChannel, configuration: ConfigurationClient) {\n this.sessionServices = new SessionService(NodeId.newTwoByte(0), secureChannel, configuration);\n }\n}","// according to https://reference.opcfoundation.org/Core/Part6/v105/docs/A.1\n// see also: https://reference.opcfoundation.org/Core/Part4/v105/docs/7.24.1#Table154\n\nexport const AttrIdNodeId = 1\nexport const AttrIdNodeClass = 2\nexport const AttrIdBrowseName = 3\nexport const AttrIdDisplayName = 4\nexport const AttrIdDescription = 5\nexport const AttrIdWriteMask = 6\nexport const AttrIdUserWriteMask = 7\nexport const AttrIdIsAbstract = 8\nexport const AttrIdSymmetric = 9\nexport const AttrIdInverseName = 10\nexport const AttrIdContainsNoLoops = 11\nexport const AttrIdEventNotifier = 12\nexport const AttrIdValue = 13\nexport const AttrIdDataType = 14\nexport const AttrIdValueRank = 15\nexport const AttrIdArrayDimensions = 16\nexport const AttrIdAccessLevel = 17\nexport const AttrIdUserAccessLevel = 18\nexport const AttrIdMinimumSamplingInterval = 19\nexport const AttrIdHistorizing = 20\nexport const AttrIdExecutable = 21\nexport const AttrIdUserExecutable = 22\nexport const AttrIdDataTypeDefinition = 23\nexport const AttrIdRolePermissions = 24\nexport const AttrIdUserRolePermissions = 25\nexport const AttrIdAccessRestrictions = 26\nexport const AttrIdAccessLevelEx = 27\n","import { ISecureChannel, NodeId, QualifiedName, ReadRequest, ReadResponse, ReadValueId, TimestampsToReturnEnum } from \"@opcua/base\";\nimport { AttrIdValue } from \"./attributeServiceAttributes\";\nimport { ServiceBase } from \"./serviceBase\";\n\n// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.11\nexport class AttributeService extends ServiceBase {\n async ReadValue(nodeIds: NodeId[]): Promise<{ status: string, value: unknown }[]> {\n const readValueIds = nodeIds.map(ni => {\n const readValueId = new ReadValueId();\n readValueId.nodeId = ni;\n readValueId.attributeId = AttrIdValue;\n readValueId.indexRange = '';\n readValueId.dataEncoding = new QualifiedName(0, '');\n return readValueId;\n });\n\n const request = new ReadRequest();\n request.requestHeader = this.createRequestHeader();\n request.maxAge = 60000; // one minute\n request.timestampsToReturn = TimestampsToReturnEnum.Source;\n request.nodesToRead = readValueIds;\n\n console.log(\"Sending ReadRequest...\");\n const response = await this.secureChannel.issueServiceRequest(request) as ReadResponse;\n\n const results = new Array<{ status: string, value: unknown }>()\n for (let dataValue of response.results ?? []) {\n const result = {\n status: dataValue.statusCode?.toString() ?? 'Unknown',\n value: dataValue.value as unknown\n }\n results.push(result)\n }\n return results;\n }\n\n constructor(authToken: NodeId, secureChannel: ISecureChannel) {\n super(authToken, secureChannel);\n }\n}","export class ReadValueResult{\n constructor(public value:unknown, public status:string){}\n}","import { Id } from \"./id\";\n\nexport class SubscriptionHandlerEntry{\n constructor(\n public subscriptionId:number,\n public handle: number, \n public id:Id, \n public callback: (data: { id: Id, value: unknown }[]) => void\n ){}\n}","import { DataChangeNotification, SubscriptionAcknowledgement } from \"@opcua/base\";\nimport { Id } from \"./id\";\nimport { MonitoredItemService } from \"./services/monitoredItemService\";\nimport { SubscriptionService } from \"./services/subscriptionService\";\nimport { SubscriptionHandlerEntry } from \"./subscriptionHandlerEntry\";\n\nexport class SubscriptionHandler {\n private entries = new Array<SubscriptionHandlerEntry>()\n private nextHandle = 0\n\n async subscribe(ids: Id[], callback: (data: { id: Id, value: unknown }[]) => void) {\n if (this.entries.length > 0) {\n throw new Error('Subscribing more than once is not implemented');\n }\n\n const subscriptionId = await this.subscriptionService.createSubscription()\n const items = []\n for (let id of ids) {\n const entry = new SubscriptionHandlerEntry(\n subscriptionId,\n this.nextHandle++,\n id,\n callback\n );\n this.entries.push(entry)\n const item = {\n id: id.toNodeId(),\n handle: entry.handle\n }\n items.push(item)\n }\n await this.monitoredItemService.createMonitoredItems(subscriptionId, items)\n this.publish([])\n }\n\n private async publish(acknowledgeSequenceNumbers: number[]) {\n const acknowledgements = []\n for (let i = 0; i < acknowledgeSequenceNumbers.length; i++) {\n const acknowledgement = new SubscriptionAcknowledgement();\n acknowledgement.subscriptionId = this.entries[i].subscriptionId;\n acknowledgement.sequenceNumber = acknowledgeSequenceNumbers[i];\n acknowledgements.push(acknowledgement);\n }\n const response = await this.subscriptionService.publish(acknowledgements);\n\n const messagesToAcknowledge = response.notificationMessage.sequenceNumber\n // todo: evaluatin status codes\n const notificationDatas = response.notificationMessage.notificationData\n\n for (let notificationData of notificationDatas) {\n const decodedData = notificationData.data;\n const typeNodeId = notificationData.typeId;\n if (typeNodeId.namespace === 0 && typeNodeId.identifier === 811) {\n const dataChangeNotification = decodedData as DataChangeNotification;\n for (let item of dataChangeNotification.monitoredItems) {\n const clientHandle = item.clientHandle;\n const value = item.value;\n const entry = this.entries.find(e => e.handle == clientHandle);\n entry?.callback([{\n id: entry.id,\n value: value.value?.value\n }]);\n }\n } else {\n console.log(`The change notification data type ${typeNodeId.namespace}:${typeNodeId.identifier} is not supported.`)\n }\n }\n\n setTimeout(() => {\n this.publish([messagesToAcknowledge]);\n }, 500);\n }\n\n constructor(\n private subscriptionService: SubscriptionService,\n private monitoredItemService: MonitoredItemService\n ) {\n }\n}","import { CreateSubscriptionRequest, CreateSubscriptionResponse, ISecureChannel, NodeId, PublishRequest, PublishResponse, SubscriptionAcknowledgement } from \"@opcua/base\";\nimport { ServiceBase } from \"./serviceBase\";\n\n// https://reference.opcfoundation.org/Core/Part4/v105/docs/5.14\nexport class SubscriptionService extends ServiceBase {\n // https://reference.opcfoundation.org/Core/Part4/v105/docs/5.14.2\n async createSubscription(): Promise<number> {\n const request = new CreateSubscriptionRequest();\n request.requestHeader = this.createRequestHeader();\n request.requestedPublishingInterval = 2000; // 2 sec\n request.requestedLifetimeCount = 360000; // 5 min\n request.requestedMaxKeepAliveCount = 60000; // 1 min\n request.maxNotificationsPerPublish = 200;\n request.publishingEnabled = true;\n request.priority = 1;\n\n\n console.log(\"Sending createSubscription...\");\n const response = await this.secureChannel.issueServiceRequest(request) as CreateSubscriptionResponse;\n console.log(\"Subscription created with id:\", response.subscriptionId);\n return response.subscriptionId;\n }\n\n // https://reference.opcfoundation.org/Core/Part4/v105/docs/5.14.5\n async publish(acknowledgements: SubscriptionAcknowledgement[]): Promise<PublishResponse> {\n const request = new PublishRequest();\n request.requestHeader = this.createRequestHeader();\n request.subscriptionAcknowledgements = acknowledgements;\n\n console.log('Sending publish...');\n const response = await this.secureChannel.issueServiceRequest(request) as PublishResponse;\n console.log('Received publish response.')\n return response;\n }\n\n constructor(authToken: NodeId, secureChannel: ISecureChannel) {\n super(authToken, secureChannel);\n }\n}","import { CreateMonitoredItemsRequest, CreateMonitoredItemsResponse, ExtensionObject, ISecureChannel, MonitoredItemCreateRequest, MonitoringParameters, NodeId, QualifiedName, ReadValueId, TimestampsToReturnEnum } from \"@opcua/base\";\nimport { AttrIdValue } from \"./attributeServiceAttributes\";\nimport { ServiceBase } from \"./serviceBase\";\n\nexport class MonitoredItemService extends ServiceBase {\n\n async createMonitoredItems(subscriptionId: number, ids: { id: NodeId, handle: number }[]): Promise<void> {\n const items = ids.map(ni => {\n const readValueId = new ReadValueId();\n readValueId.nodeId = ni.id;\n readValueId.attributeId = AttrIdValue;\n readValueId.indexRange = '';\n readValueId.dataEncoding = new QualifiedName(0, '');\n\n const monitoringParameters = new MonitoringParameters();\n monitoringParameters.clientHandle = ni.handle;\n monitoringParameters.samplingInterval = 1000; // 1 sec\n monitoringParameters.filter = ExtensionObject.newEmpty();\n monitoringParameters.queueSize = 100;\n monitoringParameters.discardOldest = true;\n\n const monitoredItemCreateRequest = new MonitoredItemCreateRequest();\n monitoredItemCreateRequest.itemToMonitor = readValueId;\n monitoredItemCreateRequest.requestedParameters = monitoringParameters;\n return monitoredItemCreateRequest; \n });\n\n const request = new CreateMonitoredItemsRequest();\n request.requestHeader = this.createRequestHeader();\n request.subscriptionId = subscriptionId;\n request.timestampsToReturn = TimestampsToReturnEnum.Source;\n request.itemsToCreate = items;\n\n console.log(\"Sending createMonitoredItems...\");\n await this.secureChannel.issueServiceRequest(request) as CreateMonitoredItemsResponse;\n // todo: handle Statuscodes\n }\n\n constructor(authToken: NodeId, secureChannel: ISecureChannel) {\n super(authToken, secureChannel)\n }\n}","import { SecureChannel } from \"@opcua/base\";\nimport { ChannelFactory } from \"@opcua/base\";\nimport { SessionHandler } from \"./sessions/sessionHandler\";\nimport { ISecureChannel } from \"@opcua/base\";\nimport { Session } from \"./sessions/session\";\nimport { Id } from \"./id\";\nimport { AttributeService } from \"./services/attributeService\";\nimport { ReadValueResult } from \"./readValueResult\";\nimport { SubscriptionHandler } from \"./subscriptionHandler\";\nimport { SubscriptionService } from \"./services/subscriptionService\";\nimport { MonitoredItemService } from \"./services/monitoredItemService\";\nimport { UserIdentity } from \"./userIdentity\";\nimport { ConfigurationClient } from \"./configurationClient\";\n\nexport class Client {\n\n private endpointUrl: string;\n private channel?: SecureChannel;\n private session?: Session;\n private subscriptionHandler?:SubscriptionHandler;\n\n getSession(): Session{\n if(!this.session){\n throw new Error(\"No session available\");\n }\n return this.session;\n }\n\n async connect(): Promise<void> {\n const channel = ChannelFactory.createChannel(this.endpointUrl);\n let connected = false;\n while (!connected){\n console.log(`Connecting to OPC UA server at ${this.endpointUrl}...`);\n connected = await channel.connect();\n if(!connected){\n console.log(\"Connection failed, retrying in 2 seconds...\");\n await new Promise(resolve => setTimeout(resolve, 2000));\n }\n }\n console.log('Connected to OPC UA server.');\n\n this.channel = new SecureChannel(channel, this.configuration);\n await this.channel.openSecureChannelRequest();\n\n const sessionHandler = new SessionHandler(this.channel, this.configuration);\n this.session = await sessionHandler.createNewSession(this.identity);\n this.subscriptionHandler = new SubscriptionHandler(\n new SubscriptionService(this.session.getAuthToken(), this.channel),\n new MonitoredItemService(this.session.getAuthToken(), this.channel)\n )\n }\n\n async disconnect(): Promise<void> {\n console.log('Disconnecting from OPC UA server...');\n // Implementation of disconnection logic goes here\n if (this.channel) {\n await this.channel.disconnect();\n }\n }\n\n async read(ids: Id[]):Promise<ReadValueResult[]>{\n const service = new AttributeService(this.getSession().getAuthToken(), this.channel as ISecureChannel);\n const result = await service.ReadValue(ids.map(i => i.toNodeId()))\n return result.map(r => new ReadValueResult(r.value, r.status))\n }\n\n async subscribe(ids: Id[], callback: (data: {id:Id, value:unknown}[]) => void){\n this.subscriptionHandler?.subscribe(ids, callback)\n }\n\n constructor(endpointUrl: string, private configuration: ConfigurationClient, private identity: UserIdentity) {\n this.endpointUrl = endpointUrl;\n }\n}","/**\n * @fileoverview Codec error class for OPC UA encoding/decoding errors\n * @module codec/errors\n */\n\n/**\n * CodecError represents errors that occur during encoding or decoding operations.\n * @see FR-044 - Error must contain encoding ID, format, and suggested action\n */\nexport class CodecError extends Error {\n /**\n * The encoding ID involved in the error (if applicable).\n */\n public readonly encodingId?: string;\n \n /**\n * The encoding format where the error occurred (Binary, Xml, Json).\n */\n public readonly format?: string;\n \n /**\n * Suggested action to resolve the error.\n */\n public readonly suggestedAction?: string;\n \n /**\n * The type name involved in the error (if applicable).\n */\n public readonly typeName?: string;\n \n /**\n * Original error that caused this codec error (if any).\n */\n public readonly cause?: Error;\n\n constructor(message: string, options?: {\n encodingId?: string;\n format?: string;\n suggestedAction?: string;\n typeName?: string;\n cause?: Error;\n }) {\n super(message);\n this.name = 'CodecError';\n this.encodingId = options?.encodingId;\n this.format = options?.format;\n this.suggestedAction = options?.suggestedAction;\n this.typeName = options?.typeName;\n this.cause = options?.cause;\n \n // Maintains proper stack trace for where error was thrown (V8 engines)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CodecError);\n }\n }\n\n /**\n * Returns a detailed error message including all context.\n */\n override toString(): string {\n let result = `${this.name}: ${this.message}`;\n \n if (this.encodingId) {\n result += `\\n Encoding ID: ${this.encodingId}`;\n }\n \n if (this.format) {\n result += `\\n Format: ${this.format}`;\n }\n \n if (this.typeName) {\n result += `\\n Type: ${this.typeName}`;\n }\n \n if (this.suggestedAction) {\n result += `\\n Suggested Action: ${this.suggestedAction}`;\n }\n \n return result;\n }\n}\n","/**\n * @fileoverview Binary encoder implementation for OPC UA Binary encoding\n * @module codec/binary/encoder\n */\n\nimport { CodecError } from '../codecError.js';\nimport { NodeId, NodeIdType } from '../../types/nodeId.js';\nimport { ExpandedNodeId } from '../../types/expandedNodeId.js';\nimport { StatusCode } from '../../types/statusCode.js';\nimport { QualifiedName } from '../../types/qualifiedName.js';\nimport { LocalizedText } from '../../types/localizedText.js';\nimport { ExtensionObject } from '../../types/extensionObject.js';\nimport { ExtensionObjectEncoding } from '../../types/extensionObjectEncoding.js';\nimport { DataValue } from '../../types/dataValue.js';\nimport { Variant, VariantType } from '../../types/variant.js';\nimport { DiagnosticInfo } from '../../types/diagnosticInfo.js';\nimport { IWriter } from '../interfaces/iWriter.js';\nimport { Encoder } from '../encoder.js';\nimport { UaString } from '../../types/primitives.js';\n\n/**\n * OPC UA DateTime epoch: January 1, 1601 00:00:00 UTC\n * JavaScript Date epoch: January 1, 1970 00:00:00 UTC\n * Difference in milliseconds\n */\nconst EPOCH_DIFF_MS = 11644473600000n;\nconst TICKS_PER_MS = 10000n;\n\n// === NodeId encoding helpers ===\n// todo: refactor the complex type coding into separate files.\nenum NodeIdEncodingByte {\n TwoByte = 0x00,\n FourByte = 0x01,\n Numeric = 0x02,\n String = 0x03,\n Guid = 0x04,\n ByteString = 0x05,\n}\n\nfunction selectNodeIdEncodingFormat(nodeId: NodeId): NodeIdEncodingByte {\n if (nodeId.identifierType === NodeIdType.Numeric) {\n const id = nodeId.identifier as number;\n const ns = nodeId.namespace;\n if (ns === 0 && id >= 0 && id <= 255) {\n return NodeIdEncodingByte.TwoByte;\n }\n if (ns >= 0 && ns <= 255 && id >= 0 && id <= 65535) {\n return NodeIdEncodingByte.FourByte;\n }\n return NodeIdEncodingByte.Numeric;\n }\n if (nodeId.identifierType === NodeIdType.String) {\n return NodeIdEncodingByte.String;\n }\n if (nodeId.identifierType === NodeIdType.Guid) {\n return NodeIdEncodingByte.Guid;\n }\n if (nodeId.identifierType === NodeIdType.ByteString) {\n return NodeIdEncodingByte.ByteString;\n }\n throw new CodecError(`Invalid NodeId identifier type: ${nodeId.identifierType}`);\n}\n\n// === Encoding mask constants ===\n\nconst ExpandedNodeIdMask = {\n ServerIndexFlag: 0x40,\n NamespaceUriFlag: 0x80,\n} as const;\n\nconst LocalizedTextMask = {\n LocaleFlag: 0x01,\n TextFlag: 0x02,\n} as const;\n\nconst DataValueMaskBits = {\n Value: 0x01,\n StatusCode: 0x02,\n SourceTimestamp: 0x04,\n ServerTimestamp: 0x08,\n SourcePicoseconds: 0x10,\n ServerPicoseconds: 0x20,\n} as const;\n\nconst DiagnosticInfoMaskBits = {\n SymbolicId: 0x01,\n NamespaceUri: 0x02,\n LocalizedText: 0x04,\n Locale: 0x08,\n AdditionalInfo: 0x10,\n InnerStatusCode: 0x20,\n InnerDiagnosticInfo: 0x40,\n} as const;\n\nconst VariantMask = {\n TypeMask: 0x3F,\n ArrayDimensions: 0x40,\n Array: 0x80,\n} as const;\n\n/**\n * BinaryEncoder implements OPC UA Binary encoding per OPC 10000-6 Section 5.2.\n * Uses little-endian byte order and IEEE 754 floating point representation.\n * \n * @see OPC 10000-6 Part 6 Section 5.2 - UA Binary\n * @see FR-008 - Little-endian byte order for multi-byte numeric values\n * @see FR-009 - IEEE 754 binary representation for Float and Double\n * @see FR-010 - String values as length-prefixed UTF-8\n */\nexport class BinaryWriter implements IWriter {\n private buffer: Buffer;\n private position: number;\n\n public getData(): Uint8Array {\n return this.buffer.subarray(0, this.position);\n }\n\n /** Returns the number of bytes written so far. */\n public getLength(): number {\n return this.position;\n }\n\n /** Appends raw bytes to the buffer. */\n public writeBytes(data: Uint8Array): void {\n this.ensureCapacity(data.length);\n this.buffer.set(data, this.position);\n this.position += data.length;\n }\n\n /**\n * Overwrites bytes in the buffer starting at the given position.\n * Also truncates the written length to `offset + data.length` if that\n * is less than the current position (i.e. replaces and trims the tail).\n */\n public writeBytesAt(data: Uint8Array, offset: number): void {\n const end = offset + data.length;\n this.ensureCapacity(Math.max(0, end - this.position));\n this.buffer.set(data, offset);\n if (end > this.position) {\n this.position = end;\n }\n }\n\n /**\n * Inserts bytes at the given offset, shifting all subsequent content right.\n */\n public insertBytesAt(data: Uint8Array, offset: number): void {\n this.ensureCapacity(data.length);\n this.buffer.copyWithin(offset + data.length, offset, this.position);\n this.buffer.set(data, offset);\n this.position += data.length;\n }\n\n /**\n * Overwrites a UInt32 (little-endian) at the given byte offset without\n * advancing the write position.\n */\n public writeUInt32At(value: number, offset: number): void {\n if (!Number.isInteger(value) || value < 0 || value > 4294967295) {\n throw new CodecError(`UInt32 value ${value} out of range [0, 4294967295]`);\n }\n this.buffer.writeUInt32LE(value, offset);\n }\n\n /**\n * Ensure buffer has enough capacity, growing if necessary.\n */\n private ensureCapacity(additionalBytes: number): void {\n const required = this.position + additionalBytes;\n if (required > this.buffer.length) {\n const newSize = Math.max(required, this.buffer.length * 2);\n const newBuffer = Buffer.allocUnsafe(newSize);\n this.buffer.copy(newBuffer, 0, 0, this.position);\n this.buffer = newBuffer;\n }\n }\n\n writeBoolean(value: boolean): void {\n this.ensureCapacity(1);\n this.buffer.writeUInt8(value ? 1 : 0, this.position);\n this.position += 1;\n }\n\n writeByte(value: number): void {\n if (value < 0 || value > 255) {\n throw new CodecError(`Byte value ${value} out of range [0, 255]`);\n }\n this.ensureCapacity(1);\n this.buffer.writeUInt8(value, this.position);\n this.position += 1;\n }\n\n writeSByte(value: number): void {\n if (value < -128 || value > 127) {\n throw new CodecError(`SByte value ${value} out of range [-128, 127]`);\n }\n this.ensureCapacity(1);\n this.buffer.writeInt8(value, this.position);\n this.position += 1;\n }\n\n writeInt16(value: number): void {\n if (value < -32768 || value > 32767) {\n throw new CodecError(`Int16 value ${value} out of range [-32768, 32767]`);\n }\n this.ensureCapacity(2);\n this.buffer.writeInt16LE(value, this.position);\n this.position += 2;\n }\n\n writeUInt16(value: number): void {\n if (value < 0 || value > 65535) {\n throw new CodecError(`UInt16 value ${value} out of range [0, 65535]`);\n }\n this.ensureCapacity(2);\n this.buffer.writeUInt16LE(value, this.position);\n this.position += 2;\n }\n\n writeInt32(value: number): void {\n if (!Number.isInteger(value) || value < -2147483648 || value > 2147483647) {\n throw new CodecError(`Int32 value ${value} out of range [-2147483648, 2147483647]`);\n }\n this.ensureCapacity(4);\n this.buffer.writeInt32LE(value, this.position);\n this.position += 4;\n }\n\n writeUInt32(value: number): void {\n if (!Number.isInteger(value) || value < 0 || value > 4294967295) {\n throw new CodecError(`UInt32 value ${value} out of range [0, 4294967295]`);\n }\n this.ensureCapacity(4);\n this.buffer.writeUInt32LE(value, this.position);\n this.position += 4;\n }\n\n writeInt64(value: bigint): void {\n this.ensureCapacity(8);\n this.buffer.writeBigInt64LE(value, this.position);\n this.position += 8;\n }\n\n writeUInt64(value: bigint): void {\n this.ensureCapacity(8);\n this.buffer.writeBigUInt64LE(value, this.position);\n this.position += 8;\n }\n\n writeFloat(value: number): void {\n this.ensureCapacity(4);\n this.buffer.writeFloatLE(value, this.position);\n this.position += 4;\n }\n\n writeDouble(value: number): void {\n this.ensureCapacity(8);\n this.buffer.writeDoubleLE(value, this.position);\n this.position += 8;\n }\n\n writeString(value: UaString): void {\n if (value == null) {\n this.writeInt32(-1);\n return;\n }\n\n const utf8Bytes = Buffer.from(value, 'utf8');\n const length = utf8Bytes.length;\n\n // FR-019: Reject String length > 16,777,216 bytes\n if (length > 16777216) {\n throw new CodecError(\n `String length ${length} exceeds maximum allowed length of 16,777,216 bytes`,\n { format: 'Binary', suggestedAction: 'Reduce string length' }\n );\n }\n\n this.writeInt32(length);\n this.ensureCapacity(length);\n utf8Bytes.copy(this.buffer, this.position);\n this.position += length;\n }\n\n writeDateTime(value: Date): void {\n // Convert JavaScript Date to OPC UA DateTime (100-nanosecond ticks since 1601-01-01 UTC)\n const jsTimestamp = BigInt(value.getTime());\n const opcTimestamp = (jsTimestamp + EPOCH_DIFF_MS) * TICKS_PER_MS;\n this.writeInt64(opcTimestamp);\n }\n\n writeGuid(value: string): void {\n // Parse GUID string (e.g., \"550e8400-e29b-41d4-a716-446655440000\")\n const hex = value.replace(/-/g, '');\n if (hex.length !== 32) {\n throw new CodecError(`Invalid GUID format: ${value}`);\n }\n\n this.ensureCapacity(16);\n\n // Data1 (UInt32, bytes 0-3)\n const data1 = parseInt(hex.substr(0, 8), 16);\n this.buffer.writeUInt32LE(data1, this.position);\n\n // Data2 (UInt16, bytes 4-5)\n const data2 = parseInt(hex.substr(8, 4), 16);\n this.buffer.writeUInt16LE(data2, this.position + 4);\n\n // Data3 (UInt16, bytes 6-7)\n const data3 = parseInt(hex.substr(12, 4), 16);\n this.buffer.writeUInt16LE(data3, this.position + 6);\n\n // Data4 (Byte[8], bytes 8-15)\n for (let i = 0; i < 8; i++) {\n const byte = parseInt(hex.substr(16 + i * 2, 2), 16);\n this.buffer.writeUInt8(byte, this.position + 8 + i);\n }\n\n this.position += 16;\n }\n\n writeByteString(value: Uint8Array | null | undefined): void {\n if (value == null) {\n this.writeInt32(-1);\n return;\n }\n\n const length = value.length;\n\n // FR-019: Reject ByteString length > 16,777,216 bytes\n if (length > 16777216) {\n throw new CodecError(\n `ByteString length ${length} exceeds maximum allowed length of 16,777,216 bytes`,\n { format: 'Binary', suggestedAction: 'Reduce ByteString length' }\n );\n }\n\n this.writeInt32(length);\n this.ensureCapacity(length);\n\n if (Buffer.isBuffer(value)) {\n value.copy(this.buffer, this.position);\n } else {\n this.buffer.set(value, this.position);\n }\n\n this.position += length;\n }\n\n writeXmlElement(value: string): void {\n // XmlElement is encoded as string in binary format\n this.writeString(value);\n }\n\n /**\n * Write an array with Int32 length prefix.\n * Per FR-011: -1 = null, 0 = empty, positive = element count\n * Per FR-019: Maximum array length is 2,147,483,647 elements\n * \n * @param array The array to encode (undefined for null array)\n * @param encodeElement Function to encode each element\n * @throws {CodecError} if array length exceeds Int32 maximum\n * @see OPC 10000-6 Section 5.2.5 - Arrays\n */\n writeArray<T>(array: T[] | undefined, encodeElement: (encoder: this, value: T) => void): void {\n if (array === undefined) {\n this.writeInt32(-1);\n return;\n }\n\n const length = array.length;\n\n // FR-019: Validate array length\n if (length > 2147483647) {\n throw new CodecError(\n `Array length ${length} exceeds maximum allowed length of 2,147,483,647 elements`,\n { format: 'Binary', suggestedAction: 'Reduce array size' }\n );\n }\n\n this.writeInt32(length);\n\n for (const element of array) {\n encodeElement(this, element);\n }\n }\n\n // === Complex type write methods ===\n\n /**\n * Encode a NodeId in binary format using the most compact representation.\n * @see OPC 10000-6 Tables 16-19\n */\n writeNodeId(value: NodeId): void {\n const format = selectNodeIdEncodingFormat(value);\n\n switch (format) {\n case NodeIdEncodingByte.TwoByte:\n this.writeByte(NodeIdEncodingByte.TwoByte);\n this.writeByte(value.identifier as number);\n break;\n\n case NodeIdEncodingByte.FourByte:\n this.writeByte(NodeIdEncodingByte.FourByte);\n this.writeByte(value.namespace);\n this.writeUInt16(value.identifier as number);\n break;\n\n case NodeIdEncodingByte.Numeric:\n this.writeByte(NodeIdEncodingByte.Numeric);\n this.writeUInt16(value.namespace);\n this.writeUInt32(value.identifier as number);\n break;\n\n case NodeIdEncodingByte.String:\n this.writeByte(NodeIdEncodingByte.String);\n this.writeUInt16(value.namespace);\n this.writeString(value.identifier as string);\n break;\n\n case NodeIdEncodingByte.Guid:\n this.writeByte(NodeIdEncodingByte.Guid);\n this.writeUInt16(value.namespace);\n this.writeGuid(value.identifier as string);\n break;\n\n case NodeIdEncodingByte.ByteString: {\n this.writeByte(NodeIdEncodingByte.ByteString);\n this.writeUInt16(value.namespace);\n const ident = value.identifier;\n const buf = ident instanceof Uint8Array && !(ident instanceof Buffer)\n ? Buffer.from(ident)\n : ident as Buffer;\n this.writeByteString(buf);\n break;\n }\n\n default:\n throw new CodecError(`Unsupported NodeId encoding format: ${format}`);\n }\n }\n\n /**\n * Encode an ExpandedNodeId in binary format.\n * @see OPC 10000-6 Table 20\n */\n writeExpandedNodeId(value: ExpandedNodeId): void {\n const startPos = this.position;\n this.writeNodeId(value);\n\n let encodingByte = this.buffer[startPos];\n\n if (value.namespaceUri !== undefined) {\n encodingByte |= ExpandedNodeIdMask.NamespaceUriFlag;\n }\n if (value.serverIndex !== undefined) {\n encodingByte |= ExpandedNodeIdMask.ServerIndexFlag;\n }\n\n this.buffer[startPos] = encodingByte;\n\n if (value.namespaceUri !== undefined) {\n this.writeString(value.namespaceUri);\n }\n if (value.serverIndex !== undefined) {\n this.writeUInt32(value.serverIndex);\n }\n }\n\n /**\n * Encode a StatusCode as a UInt32.\n * @see OPC 10000-6 Section 5.2.2.16\n */\n writeStatusCode(value: StatusCode): void {\n this.writeUInt32(value);\n }\n\n /**\n * Encode a QualifiedName as NamespaceIndex (UInt16) + Name (String).\n * @see OPC 10000-6 Table 8\n */\n writeQualifiedName(value: QualifiedName): void {\n this.writeUInt16(value.namespaceIndex);\n this.writeString(value.name);\n }\n\n /**\n * Encode a LocalizedText with optional locale and text.\n * @see OPC 10000-6 Table 9\n */\n writeLocalizedText(value: LocalizedText): void {\n let encodingMask = 0;\n if (value.locale !== undefined && value.locale !== '') {\n encodingMask |= LocalizedTextMask.LocaleFlag;\n }\n if (value.text !== '') {\n encodingMask |= LocalizedTextMask.TextFlag;\n }\n this.writeByte(encodingMask);\n if (encodingMask & LocalizedTextMask.LocaleFlag) {\n this.writeString(value.locale!);\n }\n if (encodingMask & LocalizedTextMask.TextFlag) {\n this.writeString(value.text);\n }\n }\n\n /**\n * Encode an ExtensionObject with its TypeId and body.\n * @see OPC 10000-6 Section 5.2.2.15\n */\n writeExtensionObject(value: ExtensionObject, encoder: Encoder): void {\n const typeId = value.typeId;\n if ('namespaceUri' in typeId || 'serverIndex' in typeId) {\n this.writeExpandedNodeId(typeId as ExpandedNodeId);\n } else {\n this.writeNodeId(typeId);\n }\n\n this.writeByte(value.encoding);\n\n switch (value.encoding) {\n case ExtensionObjectEncoding.None:\n break;\n case ExtensionObjectEncoding.Binary:\n if (!value.data) {\n throw new CodecError('ExtensionObject with Binary encoding must have data');\n }\n\n const binaryData = encoder.encodeWithoutId(value.data, 'binary') as Uint8Array;\n this.writeByteString(binaryData);\n break;\n case ExtensionObjectEncoding.Xml:\n if (!value.data) {\n throw new CodecError('ExtensionObject with Xml encoding must have data');\n }\n const xmlString = encoder.encodeWithoutId(value.data, 'xml') as string;\n this.writeXmlElement(xmlString);\n break;\n default:\n throw new CodecError(`Invalid ExtensionObject encoding: ${value.encoding}`);\n }\n }\n\n /**\n * Encode a DataValue with optional fields controlled by an encoding mask.\n * @see OPC 10000-6 Table 26\n */\n writeDataValue(value: DataValue, encoder: Encoder): void {\n let encodingMask = 0;\n if (value.value !== null && value.value !== undefined) {\n encodingMask |= DataValueMaskBits.Value;\n }\n if (value.statusCode !== null) {\n encodingMask |= DataValueMaskBits.StatusCode;\n }\n if (value.sourceTimestamp !== null) {\n encodingMask |= DataValueMaskBits.SourceTimestamp;\n }\n if (value.serverTimestamp !== null) {\n encodingMask |= DataValueMaskBits.ServerTimestamp;\n }\n if (value.sourcePicoseconds !== null) {\n encodingMask |= DataValueMaskBits.SourcePicoseconds;\n }\n if (value.serverPicoseconds !== null) {\n encodingMask |= DataValueMaskBits.ServerPicoseconds;\n }\n\n this.writeByte(encodingMask);\n\n if (encodingMask & DataValueMaskBits.Value) {\n this.writeVariant(value.value as Variant, encoder);\n }\n if (encodingMask & DataValueMaskBits.StatusCode) {\n this.writeUInt32(value.statusCode ?? StatusCode.Good);\n }\n if (encodingMask & DataValueMaskBits.SourceTimestamp) {\n this.writeDateTime(value.sourceTimestamp!);\n }\n if (encodingMask & DataValueMaskBits.ServerTimestamp) {\n this.writeDateTime(value.serverTimestamp!);\n }\n if (encodingMask & DataValueMaskBits.SourcePicoseconds) {\n this.writeUInt16(value.sourcePicoseconds!);\n }\n if (encodingMask & DataValueMaskBits.ServerPicoseconds) {\n this.writeUInt16(value.serverPicoseconds!);\n }\n }\n\n /**\n * Encode a Variant with type ID, value(s), and optional array dimensions.\n * @see OPC 10000-6 Section 5.2.2.16\n */\n writeVariant(value: Variant, encoder: Encoder): void {\n if (value.variantType < 0 || value.variantType > 25) {\n throw new CodecError(`Invalid Variant type ID: ${value.variantType}. Must be 0-25.`);\n }\n\n let mask = value.variantType & VariantMask.TypeMask;\n const isArrayValue = Array.isArray(value.value);\n\n if (isArrayValue) {\n mask |= VariantMask.Array;\n }\n if (value.arrayDimensions !== undefined && value.arrayDimensions.length > 0) {\n mask |= VariantMask.ArrayDimensions;\n }\n\n this.writeByte(mask);\n\n if (isArrayValue) {\n const array = value.value as unknown[];\n this.writeInt32(array.length);\n for (const elem of array) {\n this.writeVariantValue(value.variantType, elem, encoder);\n }\n } else if (value.variantType !== VariantType.Null) {\n this.writeVariantValue(value.variantType, value.value, encoder);\n }\n\n if (value.arrayDimensions !== undefined && value.arrayDimensions.length > 0) {\n this.writeInt32(value.arrayDimensions.length);\n for (const dim of value.arrayDimensions) {\n this.writeInt32(dim);\n }\n }\n }\n\n /**\n * Encode a DiagnosticInfo with optional fields controlled by an encoding mask.\n * Supports recursive InnerDiagnosticInfo.\n * @see OPC 10000-6 Table 24\n */\n writeDiagnosticInfo(value: DiagnosticInfo): void {\n let encodingMask = 0;\n if (value.symbolicId !== null) { encodingMask |= DiagnosticInfoMaskBits.SymbolicId; }\n if (value.namespaceUri !== null) { encodingMask |= DiagnosticInfoMaskBits.NamespaceUri; }\n if (value.localizedText !== null) { encodingMask |= DiagnosticInfoMaskBits.LocalizedText; }\n if (value.locale !== null) { encodingMask |= DiagnosticInfoMaskBits.Locale; }\n if (value.additionalInfo !== null) { encodingMask |= DiagnosticInfoMaskBits.AdditionalInfo; }\n if (value.innerStatusCode !== null) { encodingMask |= DiagnosticInfoMaskBits.InnerStatusCode; }\n if (value.innerDiagnosticInfo !== null) { encodingMask |= DiagnosticInfoMaskBits.InnerDiagnosticInfo; }\n\n this.writeByte(encodingMask);\n\n if (encodingMask & DiagnosticInfoMaskBits.SymbolicId) { this.writeInt32(value.symbolicId!); }\n if (encodingMask & DiagnosticInfoMaskBits.NamespaceUri) { this.writeInt32(value.namespaceUri!); }\n if (encodingMask & DiagnosticInfoMaskBits.LocalizedText) { this.writeInt32(value.localizedText!); }\n if (encodingMask & DiagnosticInfoMaskBits.Locale) { this.writeInt32(value.locale!); }\n if (encodingMask & DiagnosticInfoMaskBits.AdditionalInfo) { this.writeString(value.additionalInfo!); }\n if (encodingMask & DiagnosticInfoMaskBits.InnerStatusCode) { this.writeUInt32(value.innerStatusCode ?? StatusCode.Good); }\n if (encodingMask & DiagnosticInfoMaskBits.InnerDiagnosticInfo) { this.writeDiagnosticInfo(value.innerDiagnosticInfo!); }\n }\n\n // === Private helpers ===\n\n private writeVariantValue(type: VariantType, value: unknown, encoder: Encoder): void {\n switch (type) {\n case VariantType.Null: break;\n case VariantType.Boolean: this.writeBoolean(value as boolean); break;\n case VariantType.SByte: this.writeSByte(value as number); break;\n case VariantType.Byte: this.writeByte(value as number); break;\n case VariantType.Int16: this.writeInt16(value as number); break;\n case VariantType.UInt16: this.writeUInt16(value as number); break;\n case VariantType.Int32: this.writeInt32(value as number); break;\n case VariantType.UInt32: this.writeUInt32(value as number); break;\n case VariantType.Int64: this.writeInt64(value as bigint); break;\n case VariantType.UInt64: this.writeUInt64(value as bigint); break;\n case VariantType.Float: this.writeFloat(value as number); break;\n case VariantType.Double: this.writeDouble(value as number); break;\n case VariantType.String: this.writeString(value as string); break;\n case VariantType.DateTime: this.writeDateTime(value as Date); break;\n case VariantType.Guid: this.writeGuid(value as string); break;\n case VariantType.ByteString: this.writeByteString(value as Uint8Array); break;\n case VariantType.XmlElement: this.writeXmlElement(value as string); break;\n case VariantType.NodeId: this.writeNodeId(value as NodeId); break;\n case VariantType.ExpandedNodeId: this.writeExpandedNodeId(value as ExpandedNodeId); break;\n case VariantType.StatusCode: this.writeStatusCode(value as StatusCode); break;\n case VariantType.QualifiedName: this.writeQualifiedName(value as QualifiedName); break;\n case VariantType.LocalizedText: this.writeLocalizedText(value as LocalizedText); break;\n case VariantType.ExtensionObject: this.writeExtensionObject(value as ExtensionObject, encoder); break;\n case VariantType.DataValue: this.writeDataValue(value as DataValue, encoder); break;\n case VariantType.Variant: this.writeVariant(value as Variant, encoder); break;\n case VariantType.DiagnosticInfo: this.writeDiagnosticInfo(value as DiagnosticInfo); break;\n default: throw new CodecError(`Unsupported Variant type: ${type}`);\n }\n }\n\n constructor(initialSize: number = 1024) {\n this.buffer = Buffer.allocUnsafe(initialSize);\n this.position = 0;\n }\n}\n","import { BinaryReader, Configuration, Decoder, Encoder, registerBinaryDecoders, registerEncoders, registerTypeDecoders } from \"@opcua/base\";\nimport { BinaryWriter } from \"../../base/src/codecs/binary/binaryWriter\";\n\nexport class ConfigurationClient extends Configuration {\n public static getSimple(name:string, company:string): \n ConfigurationClient {\n\n const applicationUri = `urn:${company}:${name}`;\n const productUri = `urn:${company}:${name}:product`;\n\n const encoder = new Encoder();\n encoder.registerWriterFactory('binary', () => { return new BinaryWriter();});\n registerEncoders(encoder);\n\n const decoder = new Decoder();\n decoder.registerReaderFactory('binary', (data:unknown) => { return new BinaryReader(data as Uint8Array);});\n registerTypeDecoders(decoder);\n registerBinaryDecoders(decoder);\n \n return new ConfigurationClient(name, applicationUri, name, productUri, encoder, decoder);\n }\n\n constructor(\n applicationName:string,\n applicationUri:string,\n productName:string,\n productUri:string,\n encoder: Encoder,\n decoder: Decoder) {\n super(applicationName, applicationUri, productName, productUri, encoder, decoder);\n }\n}","import { NodeId } from \"@opcua/base\";\n\nexport class Id {\n static newId(namespace: number, identifier: string) {\n return new Id(new NodeId(namespace, identifier));\n }\n\n toNodeId(){\n return this.nodeId\n }\n\n toString(){\n return `${this.nodeId.namespace}:${this.nodeId.identifier}`\n }\n\n constructor(private nodeId: NodeId) { }\n}","import { IssuedIdentityToken, UserIdentityToken, UserNameIdentityToken, UserTokenTypeEnum } from \"@opcua/base\";\nimport { IssuerConfiguration } from \"./issuerConfiguration\";\nimport { IssuerToken } from \"./issuerToken\";\nimport { AnonymousIdentityToken } from \"@opcua/base\";\n\nexport class UserIdentity {\n private userIdentityToken?: UserIdentityToken;\n private tokenType = UserTokenTypeEnum.Anonymous;\n private issuerLoginCallback: ((config:IssuerConfiguration)=>Promise<IssuerToken>) | undefined = undefined;\n\n public static newAnonymous(): UserIdentity {\n const userIdentity = new UserIdentity();\n userIdentity.userIdentityToken = new AnonymousIdentityToken();\n userIdentity.userIdentityToken.policyId = \"anonymous\";\n userIdentity.tokenType = UserTokenTypeEnum.Anonymous;\n return userIdentity;\n }\n \n public static newWithUserName(userName: string, password: string): UserIdentity {\n const userIdentity = new UserIdentity();\n const nameToken = new UserNameIdentityToken();\n nameToken.userName = userName;\n nameToken.password = new TextEncoder().encode(password);\n\n userIdentity.userIdentityToken = nameToken;\n userIdentity.tokenType = UserTokenTypeEnum.UserName;\n return userIdentity;\n }\n\n public static newWithIssuerToken(loginCallback: (config:IssuerConfiguration)=>Promise<IssuerToken>): UserIdentity {\n const userIdentity = new UserIdentity();\n const issuedToken = new IssuedIdentityToken();\n issuedToken.tokenData = new TextEncoder().encode(\"\"); // token data will be filled by the login callback \n userIdentity.userIdentityToken = issuedToken;\n userIdentity.tokenType = UserTokenTypeEnum.IssuedToken;\n userIdentity.issuerLoginCallback = loginCallback;\n return userIdentity;\n }\n\n public getUserIdentityToken(): UserIdentityToken {\n return this.userIdentityToken as UserIdentityToken;\n }\n\n public getTokenType(): UserTokenTypeEnum {\n return this.tokenType;\n }\n\n public getIssuerLoginCallback(): ((config:IssuerConfiguration)=>Promise<IssuerToken>) {\n if(!this.issuerLoginCallback){\n throw new Error(\"No issuer login callback defined\");\n }\n \n return this.issuerLoginCallback;\n }\n}\n"]}
@@ -0,0 +1,98 @@
1
+ import { ISecureChannel, RequestHeader, NodeId, EndpointDescription, UserIdentityToken, Configuration, UserTokenTypeEnum, Encoder, Decoder } from '@opcua/base';
2
+
3
+ declare abstract class ServiceBase {
4
+ private authToken;
5
+ protected secureChannel: ISecureChannel;
6
+ protected createRequestHeader(): RequestHeader;
7
+ constructor(authToken: NodeId, secureChannel: ISecureChannel);
8
+ }
9
+
10
+ declare class SessionService extends ServiceBase {
11
+ private configuration;
12
+ createSession(): Promise<{
13
+ sessionId: number;
14
+ authToken: NodeId;
15
+ endpoint: EndpointDescription;
16
+ }>;
17
+ activateSession(identityToken: UserIdentityToken): Promise<void>;
18
+ recreate(authToken: NodeId): SessionService;
19
+ constructor(authToken: NodeId, secureChannel: ISecureChannel, configuration: Configuration);
20
+ }
21
+
22
+ declare class IssuerConfiguration {
23
+ resourceId: string;
24
+ authorityUrl: string;
25
+ authorityProfileUri: string;
26
+ tokenEndpoint: string;
27
+ authorizationEndpoint: string;
28
+ requestTypes: string[];
29
+ scopes: string[];
30
+ static newFrom(issuerEndpointUrl: any): IssuerConfiguration;
31
+ constructor(resourceId: string, authorityUrl: string, authorityProfileUri: string, tokenEndpoint: string, authorizationEndpoint: string, requestTypes: string[], scopes: string[]);
32
+ }
33
+
34
+ declare class IssuerToken {
35
+ json: string;
36
+ constructor(json: string);
37
+ }
38
+
39
+ declare class UserIdentity {
40
+ private userIdentityToken?;
41
+ private tokenType;
42
+ private issuerLoginCallback;
43
+ static newAnonymous(): UserIdentity;
44
+ static newWithUserName(userName: string, password: string): UserIdentity;
45
+ static newWithIssuerToken(loginCallback: (config: IssuerConfiguration) => Promise<IssuerToken>): UserIdentity;
46
+ getUserIdentityToken(): UserIdentityToken;
47
+ getTokenType(): UserTokenTypeEnum;
48
+ getIssuerLoginCallback(): ((config: IssuerConfiguration) => Promise<IssuerToken>);
49
+ }
50
+
51
+ declare class Session {
52
+ sessionId: number;
53
+ private authToken;
54
+ private endpoint;
55
+ private sessionServices;
56
+ activateSession(identity: UserIdentity): Promise<void>;
57
+ getAuthToken(): NodeId;
58
+ constructor(sessionId: number, authToken: NodeId, endpoint: EndpointDescription, sessionServices: SessionService);
59
+ }
60
+
61
+ declare class Id {
62
+ private nodeId;
63
+ static newId(namespace: number, identifier: string): Id;
64
+ toNodeId(): NodeId;
65
+ toString(): string;
66
+ constructor(nodeId: NodeId);
67
+ }
68
+
69
+ declare class ReadValueResult {
70
+ value: unknown;
71
+ status: string;
72
+ constructor(value: unknown, status: string);
73
+ }
74
+
75
+ declare class ConfigurationClient extends Configuration {
76
+ static getSimple(name: string, company: string): ConfigurationClient;
77
+ constructor(applicationName: string, applicationUri: string, productName: string, productUri: string, encoder: Encoder, decoder: Decoder);
78
+ }
79
+
80
+ declare class Client {
81
+ private configuration;
82
+ private identity;
83
+ private endpointUrl;
84
+ private channel?;
85
+ private session?;
86
+ private subscriptionHandler?;
87
+ getSession(): Session;
88
+ connect(): Promise<void>;
89
+ disconnect(): Promise<void>;
90
+ read(ids: Id[]): Promise<ReadValueResult[]>;
91
+ subscribe(ids: Id[], callback: (data: {
92
+ id: Id;
93
+ value: unknown;
94
+ }[]) => void): Promise<void>;
95
+ constructor(endpointUrl: string, configuration: ConfigurationClient, identity: UserIdentity);
96
+ }
97
+
98
+ export { Client, ConfigurationClient, Id, UserIdentity };
@@ -0,0 +1,98 @@
1
+ import { ISecureChannel, RequestHeader, NodeId, EndpointDescription, UserIdentityToken, Configuration, UserTokenTypeEnum, Encoder, Decoder } from '@opcua/base';
2
+
3
+ declare abstract class ServiceBase {
4
+ private authToken;
5
+ protected secureChannel: ISecureChannel;
6
+ protected createRequestHeader(): RequestHeader;
7
+ constructor(authToken: NodeId, secureChannel: ISecureChannel);
8
+ }
9
+
10
+ declare class SessionService extends ServiceBase {
11
+ private configuration;
12
+ createSession(): Promise<{
13
+ sessionId: number;
14
+ authToken: NodeId;
15
+ endpoint: EndpointDescription;
16
+ }>;
17
+ activateSession(identityToken: UserIdentityToken): Promise<void>;
18
+ recreate(authToken: NodeId): SessionService;
19
+ constructor(authToken: NodeId, secureChannel: ISecureChannel, configuration: Configuration);
20
+ }
21
+
22
+ declare class IssuerConfiguration {
23
+ resourceId: string;
24
+ authorityUrl: string;
25
+ authorityProfileUri: string;
26
+ tokenEndpoint: string;
27
+ authorizationEndpoint: string;
28
+ requestTypes: string[];
29
+ scopes: string[];
30
+ static newFrom(issuerEndpointUrl: any): IssuerConfiguration;
31
+ constructor(resourceId: string, authorityUrl: string, authorityProfileUri: string, tokenEndpoint: string, authorizationEndpoint: string, requestTypes: string[], scopes: string[]);
32
+ }
33
+
34
+ declare class IssuerToken {
35
+ json: string;
36
+ constructor(json: string);
37
+ }
38
+
39
+ declare class UserIdentity {
40
+ private userIdentityToken?;
41
+ private tokenType;
42
+ private issuerLoginCallback;
43
+ static newAnonymous(): UserIdentity;
44
+ static newWithUserName(userName: string, password: string): UserIdentity;
45
+ static newWithIssuerToken(loginCallback: (config: IssuerConfiguration) => Promise<IssuerToken>): UserIdentity;
46
+ getUserIdentityToken(): UserIdentityToken;
47
+ getTokenType(): UserTokenTypeEnum;
48
+ getIssuerLoginCallback(): ((config: IssuerConfiguration) => Promise<IssuerToken>);
49
+ }
50
+
51
+ declare class Session {
52
+ sessionId: number;
53
+ private authToken;
54
+ private endpoint;
55
+ private sessionServices;
56
+ activateSession(identity: UserIdentity): Promise<void>;
57
+ getAuthToken(): NodeId;
58
+ constructor(sessionId: number, authToken: NodeId, endpoint: EndpointDescription, sessionServices: SessionService);
59
+ }
60
+
61
+ declare class Id {
62
+ private nodeId;
63
+ static newId(namespace: number, identifier: string): Id;
64
+ toNodeId(): NodeId;
65
+ toString(): string;
66
+ constructor(nodeId: NodeId);
67
+ }
68
+
69
+ declare class ReadValueResult {
70
+ value: unknown;
71
+ status: string;
72
+ constructor(value: unknown, status: string);
73
+ }
74
+
75
+ declare class ConfigurationClient extends Configuration {
76
+ static getSimple(name: string, company: string): ConfigurationClient;
77
+ constructor(applicationName: string, applicationUri: string, productName: string, productUri: string, encoder: Encoder, decoder: Decoder);
78
+ }
79
+
80
+ declare class Client {
81
+ private configuration;
82
+ private identity;
83
+ private endpointUrl;
84
+ private channel?;
85
+ private session?;
86
+ private subscriptionHandler?;
87
+ getSession(): Session;
88
+ connect(): Promise<void>;
89
+ disconnect(): Promise<void>;
90
+ read(ids: Id[]): Promise<ReadValueResult[]>;
91
+ subscribe(ids: Id[], callback: (data: {
92
+ id: Id;
93
+ value: unknown;
94
+ }[]) => void): Promise<void>;
95
+ constructor(endpointUrl: string, configuration: ConfigurationClient, identity: UserIdentity);
96
+ }
97
+
98
+ export { Client, ConfigurationClient, Id, UserIdentity };