opcjs-client 0.1.10 → 0.1.13

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.
package/dist/index.cjs CHANGED
@@ -244,7 +244,7 @@ var SubscriptionHandler = class {
244
244
  );
245
245
  this.entries.push(entry);
246
246
  const item = {
247
- id: id.toNodeId(),
247
+ id,
248
248
  handle: entry.handle
249
249
  };
250
250
  items.push(item);
@@ -395,7 +395,7 @@ var Client = class {
395
395
  }
396
396
  async read(ids) {
397
397
  const service = new AttributeService(this.getSession().getAuthToken(), this.channel);
398
- const result = await service.ReadValue(ids.map((i) => i.toNodeId()));
398
+ const result = await service.ReadValue(ids);
399
399
  return result.map((r) => new ReadValueResult(r.value, r.status));
400
400
  }
401
401
  async subscribe(ids, callback) {
@@ -423,20 +423,6 @@ var ConfigurationClient = class _ConfigurationClient extends opcjsBase.Configura
423
423
  super(applicationName, applicationUri, productName, productUri, encoder, decoder);
424
424
  }
425
425
  };
426
- var Id = class _Id {
427
- constructor(nodeId) {
428
- this.nodeId = nodeId;
429
- }
430
- static newId(namespace, identifier) {
431
- return new _Id(new opcjsBase.NodeId(namespace, identifier));
432
- }
433
- toNodeId() {
434
- return this.nodeId;
435
- }
436
- toString() {
437
- return `${this.nodeId.namespace}:${this.nodeId.identifier}`;
438
- }
439
- };
440
426
  var UserIdentity = class _UserIdentity {
441
427
  userIdentityToken;
442
428
  tokenType = opcjsBase.UserTokenTypeEnum.Anonymous;
@@ -482,7 +468,6 @@ var UserIdentity = class _UserIdentity {
482
468
 
483
469
  exports.Client = Client;
484
470
  exports.ConfigurationClient = ConfigurationClient;
485
- exports.Id = Id;
486
471
  exports.UserIdentity = UserIdentity;
487
472
  //# sourceMappingURL=index.cjs.map
488
473
  //# sourceMappingURL=index.cjs.map
@@ -1 +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","../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","MonitoringModeEnum","CreateMonitoredItemsRequest","ChannelFactory","SecureChannel","Configuration","Encoder","BinaryWriter","registerEncoders","Decoder","BinaryReader","registerTypeDecoders","registerBinaryDecoders","AnonymousIdentityToken","UserNameIdentityToken","IssuedIdentityToken"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ExtensionObject, ISecureChannel, NodeId, RequestHeader } from \"opcjs-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 {\n ActivateSessionRequest, ApplicationDescription, ApplicationTypeEnum,\n Configuration, CreateSessionRequest, CreateSessionResponse, EndpointDescription, ExtensionObject,\n ISecureChannel, LocalizedText, NodeId, SignatureData, SignedSoftwareCertificate, UserIdentityToken\n} from \"opcjs-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 endpointUrl = new URL(endpoint);\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(currentEndpoint => {\n const currentEndpointUrl = new URL(currentEndpoint.endpointUrl as string);\n\n return currentEndpointUrl.protocol === endpointUrl.protocol\n && currentEndpointUrl.pathname === endpointUrl.pathname\n && currentEndpointUrl.port === endpointUrl.port\n && currentEndpoint.securityMode === securityMode\n && currentEndpoint.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 \"opcjs-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 \"opcjs-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 \"opcjs-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 \"opcjs-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 {\n CreateSubscriptionRequest, CreateSubscriptionResponse, ISecureChannel, NodeId, PublishRequest,\n PublishResponse, SubscriptionAcknowledgement\n} from \"opcjs-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 { \n CreateMonitoredItemsRequest, CreateMonitoredItemsResponse, \n ExtensionObject, ISecureChannel, MonitoredItemCreateRequest, MonitoringModeEnum, MonitoringParameters, \n NodeId, QualifiedName, ReadValueId, TimestampsToReturnEnum } from \"opcjs-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.monitoringMode = MonitoringModeEnum.Reporting;\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 \"opcjs-base\";\nimport { ChannelFactory } from \"opcjs-base\";\nimport { SessionHandler } from \"./sessions/sessionHandler\";\nimport { ISecureChannel } from \"opcjs-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}","import { BinaryReader, BinaryWriter, Configuration, Decoder, Encoder, registerBinaryDecoders, registerEncoders, registerTypeDecoders } from \"opcjs-base\";\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 \"opcjs-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 \"opcjs-base\";\nimport { IssuerConfiguration } from \"./issuerConfiguration\";\nimport { IssuerToken } from \"./issuerToken\";\nimport { AnonymousIdentityToken } from \"opcjs-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"]}
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","../src/configurationClient.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","MonitoringModeEnum","CreateMonitoredItemsRequest","ChannelFactory","SecureChannel","Configuration","Encoder","BinaryWriter","registerEncoders","Decoder","BinaryReader","registerTypeDecoders","registerBinaryDecoders","AnonymousIdentityToken","UserNameIdentityToken","IssuedIdentityToken"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ExtensionObject, ISecureChannel, NodeId, RequestHeader } from \"opcjs-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 {\n ActivateSessionRequest, ApplicationDescription, ApplicationTypeEnum,\n Configuration, CreateSessionRequest, CreateSessionResponse, EndpointDescription, ExtensionObject,\n ISecureChannel, LocalizedText, NodeId, SignatureData, SignedSoftwareCertificate, UserIdentityToken\n} from \"opcjs-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 endpointUrl = new URL(endpoint);\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(currentEndpoint => {\n const currentEndpointUrl = new URL(currentEndpoint.endpointUrl as string);\n\n return currentEndpointUrl.protocol === endpointUrl.protocol\n && currentEndpointUrl.pathname === endpointUrl.pathname\n && currentEndpointUrl.port === endpointUrl.port\n && currentEndpoint.securityMode === securityMode\n && currentEndpoint.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 \"opcjs-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 \"opcjs-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 \"opcjs-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 { NodeId } from \"opcjs-base\";\n\nexport class SubscriptionHandlerEntry{\n constructor(\n public subscriptionId:number,\n public handle: number, \n public id:NodeId, \n public callback: (data: { id: NodeId, value: unknown }[]) => void\n ){}\n}","import { DataChangeNotification, NodeId, SubscriptionAcknowledgement } from \"opcjs-base\";\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: NodeId[], callback: (data: { id: NodeId, 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,\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 {\n CreateSubscriptionRequest, CreateSubscriptionResponse, ISecureChannel, NodeId, PublishRequest,\n PublishResponse, SubscriptionAcknowledgement\n} from \"opcjs-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 { \n CreateMonitoredItemsRequest, CreateMonitoredItemsResponse, \n ExtensionObject, ISecureChannel, MonitoredItemCreateRequest, MonitoringModeEnum, MonitoringParameters, \n NodeId, QualifiedName, ReadValueId, TimestampsToReturnEnum } from \"opcjs-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.monitoringMode = MonitoringModeEnum.Reporting;\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 { NodeId, SecureChannel } from \"opcjs-base\";\nimport { ChannelFactory } from \"opcjs-base\";\nimport { SessionHandler } from \"./sessions/sessionHandler\";\nimport { ISecureChannel } from \"opcjs-base\";\nimport { Session } from \"./sessions/session\";\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: NodeId[]):Promise<ReadValueResult[]>{\n const service = new AttributeService(this.getSession().getAuthToken(), this.channel as ISecureChannel);\n const result = await service.ReadValue(ids);\n return result.map(r => new ReadValueResult(r.value, r.status))\n }\n\n async subscribe(ids: NodeId[], callback: (data: {id:NodeId, 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}","import { BinaryReader, BinaryWriter, Configuration, Decoder, Encoder, registerBinaryDecoders, registerEncoders, registerTypeDecoders } from \"opcjs-base\";\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 { IssuedIdentityToken, UserIdentityToken, UserNameIdentityToken, UserTokenTypeEnum } from \"opcjs-base\";\nimport { IssuerConfiguration } from \"./issuerConfiguration\";\nimport { IssuerToken } from \"./issuerToken\";\nimport { AnonymousIdentityToken } from \"opcjs-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"]}
package/dist/index.d.cts CHANGED
@@ -58,14 +58,6 @@ declare class Session {
58
58
  constructor(sessionId: number, authToken: NodeId, endpoint: EndpointDescription, sessionServices: SessionService);
59
59
  }
60
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
61
  declare class ReadValueResult {
70
62
  value: unknown;
71
63
  status: string;
@@ -87,12 +79,12 @@ declare class Client {
87
79
  getSession(): Session;
88
80
  connect(): Promise<void>;
89
81
  disconnect(): Promise<void>;
90
- read(ids: Id[]): Promise<ReadValueResult[]>;
91
- subscribe(ids: Id[], callback: (data: {
92
- id: Id;
82
+ read(ids: NodeId[]): Promise<ReadValueResult[]>;
83
+ subscribe(ids: NodeId[], callback: (data: {
84
+ id: NodeId;
93
85
  value: unknown;
94
86
  }[]) => void): Promise<void>;
95
87
  constructor(endpointUrl: string, configuration: ConfigurationClient, identity: UserIdentity);
96
88
  }
97
89
 
98
- export { Client, ConfigurationClient, Id, UserIdentity };
90
+ export { Client, ConfigurationClient, UserIdentity };
package/dist/index.d.ts CHANGED
@@ -58,14 +58,6 @@ declare class Session {
58
58
  constructor(sessionId: number, authToken: NodeId, endpoint: EndpointDescription, sessionServices: SessionService);
59
59
  }
60
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
61
  declare class ReadValueResult {
70
62
  value: unknown;
71
63
  status: string;
@@ -87,12 +79,12 @@ declare class Client {
87
79
  getSession(): Session;
88
80
  connect(): Promise<void>;
89
81
  disconnect(): Promise<void>;
90
- read(ids: Id[]): Promise<ReadValueResult[]>;
91
- subscribe(ids: Id[], callback: (data: {
92
- id: Id;
82
+ read(ids: NodeId[]): Promise<ReadValueResult[]>;
83
+ subscribe(ids: NodeId[], callback: (data: {
84
+ id: NodeId;
93
85
  value: unknown;
94
86
  }[]) => void): Promise<void>;
95
87
  constructor(endpointUrl: string, configuration: ConfigurationClient, identity: UserIdentity);
96
88
  }
97
89
 
98
- export { Client, ConfigurationClient, Id, UserIdentity };
90
+ export { Client, ConfigurationClient, UserIdentity };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { ChannelFactory, SecureChannel, Configuration, Encoder, BinaryWriter, registerEncoders, Decoder, BinaryReader, registerTypeDecoders, registerBinaryDecoders, NodeId, UserTokenTypeEnum, AnonymousIdentityToken, UserNameIdentityToken, IssuedIdentityToken, SubscriptionAcknowledgement, CreateSubscriptionRequest, PublishRequest, ReadValueId, QualifiedName, MonitoringParameters, ExtensionObject, MonitoredItemCreateRequest, MonitoringModeEnum, CreateMonitoredItemsRequest, TimestampsToReturnEnum, ReadRequest, ApplicationDescription, LocalizedText, ApplicationTypeEnum, CreateSessionRequest, CreateSessionResponse, SignatureData, ActivateSessionRequest, RequestHeader } from 'opcjs-base';
1
+ import { ChannelFactory, SecureChannel, Configuration, Encoder, BinaryWriter, registerEncoders, Decoder, BinaryReader, registerTypeDecoders, registerBinaryDecoders, UserTokenTypeEnum, AnonymousIdentityToken, UserNameIdentityToken, IssuedIdentityToken, NodeId, SubscriptionAcknowledgement, CreateSubscriptionRequest, PublishRequest, ReadValueId, QualifiedName, MonitoringParameters, ExtensionObject, MonitoredItemCreateRequest, MonitoringModeEnum, CreateMonitoredItemsRequest, TimestampsToReturnEnum, ReadRequest, ApplicationDescription, LocalizedText, ApplicationTypeEnum, CreateSessionRequest, CreateSessionResponse, SignatureData, ActivateSessionRequest, RequestHeader } from 'opcjs-base';
2
2
 
3
3
  // src/client.ts
4
4
  var ServiceBase = class {
@@ -242,7 +242,7 @@ var SubscriptionHandler = class {
242
242
  );
243
243
  this.entries.push(entry);
244
244
  const item = {
245
- id: id.toNodeId(),
245
+ id,
246
246
  handle: entry.handle
247
247
  };
248
248
  items.push(item);
@@ -393,7 +393,7 @@ var Client = class {
393
393
  }
394
394
  async read(ids) {
395
395
  const service = new AttributeService(this.getSession().getAuthToken(), this.channel);
396
- const result = await service.ReadValue(ids.map((i) => i.toNodeId()));
396
+ const result = await service.ReadValue(ids);
397
397
  return result.map((r) => new ReadValueResult(r.value, r.status));
398
398
  }
399
399
  async subscribe(ids, callback) {
@@ -421,20 +421,6 @@ var ConfigurationClient = class _ConfigurationClient extends Configuration {
421
421
  super(applicationName, applicationUri, productName, productUri, encoder, decoder);
422
422
  }
423
423
  };
424
- var Id = class _Id {
425
- constructor(nodeId) {
426
- this.nodeId = nodeId;
427
- }
428
- static newId(namespace, identifier) {
429
- return new _Id(new NodeId(namespace, identifier));
430
- }
431
- toNodeId() {
432
- return this.nodeId;
433
- }
434
- toString() {
435
- return `${this.nodeId.namespace}:${this.nodeId.identifier}`;
436
- }
437
- };
438
424
  var UserIdentity = class _UserIdentity {
439
425
  userIdentityToken;
440
426
  tokenType = UserTokenTypeEnum.Anonymous;
@@ -478,6 +464,6 @@ var UserIdentity = class _UserIdentity {
478
464
  }
479
465
  };
480
466
 
481
- export { Client, ConfigurationClient, Id, UserIdentity };
467
+ export { Client, ConfigurationClient, UserIdentity };
482
468
  //# sourceMappingURL=index.js.map
483
469
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +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","../src/configurationClient.ts","../src/id.ts","../src/userIdentity.ts"],"names":["ExtensionObject","NodeId","ReadValueId","QualifiedName","TimestampsToReturnEnum","Configuration","UserTokenTypeEnum","IssuedIdentityToken"],"mappings":"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","file":"index.js","sourcesContent":["import { ExtensionObject, ISecureChannel, NodeId, RequestHeader } from \"opcjs-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 {\n ActivateSessionRequest, ApplicationDescription, ApplicationTypeEnum,\n Configuration, CreateSessionRequest, CreateSessionResponse, EndpointDescription, ExtensionObject,\n ISecureChannel, LocalizedText, NodeId, SignatureData, SignedSoftwareCertificate, UserIdentityToken\n} from \"opcjs-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 endpointUrl = new URL(endpoint);\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(currentEndpoint => {\n const currentEndpointUrl = new URL(currentEndpoint.endpointUrl as string);\n\n return currentEndpointUrl.protocol === endpointUrl.protocol\n && currentEndpointUrl.pathname === endpointUrl.pathname\n && currentEndpointUrl.port === endpointUrl.port\n && currentEndpoint.securityMode === securityMode\n && currentEndpoint.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 \"opcjs-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 \"opcjs-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 \"opcjs-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 \"opcjs-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 {\n CreateSubscriptionRequest, CreateSubscriptionResponse, ISecureChannel, NodeId, PublishRequest,\n PublishResponse, SubscriptionAcknowledgement\n} from \"opcjs-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 { \n CreateMonitoredItemsRequest, CreateMonitoredItemsResponse, \n ExtensionObject, ISecureChannel, MonitoredItemCreateRequest, MonitoringModeEnum, MonitoringParameters, \n NodeId, QualifiedName, ReadValueId, TimestampsToReturnEnum } from \"opcjs-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.monitoringMode = MonitoringModeEnum.Reporting;\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 \"opcjs-base\";\nimport { ChannelFactory } from \"opcjs-base\";\nimport { SessionHandler } from \"./sessions/sessionHandler\";\nimport { ISecureChannel } from \"opcjs-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}","import { BinaryReader, BinaryWriter, Configuration, Decoder, Encoder, registerBinaryDecoders, registerEncoders, registerTypeDecoders } from \"opcjs-base\";\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 \"opcjs-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 \"opcjs-base\";\nimport { IssuerConfiguration } from \"./issuerConfiguration\";\nimport { IssuerToken } from \"./issuerToken\";\nimport { AnonymousIdentityToken } from \"opcjs-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"]}
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","../src/configurationClient.ts","../src/userIdentity.ts"],"names":["ExtensionObject","NodeId","ReadValueId","QualifiedName","TimestampsToReturnEnum","Configuration","UserTokenTypeEnum","IssuedIdentityToken"],"mappings":"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","file":"index.js","sourcesContent":["import { ExtensionObject, ISecureChannel, NodeId, RequestHeader } from \"opcjs-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 {\n ActivateSessionRequest, ApplicationDescription, ApplicationTypeEnum,\n Configuration, CreateSessionRequest, CreateSessionResponse, EndpointDescription, ExtensionObject,\n ISecureChannel, LocalizedText, NodeId, SignatureData, SignedSoftwareCertificate, UserIdentityToken\n} from \"opcjs-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 endpointUrl = new URL(endpoint);\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(currentEndpoint => {\n const currentEndpointUrl = new URL(currentEndpoint.endpointUrl as string);\n\n return currentEndpointUrl.protocol === endpointUrl.protocol\n && currentEndpointUrl.pathname === endpointUrl.pathname\n && currentEndpointUrl.port === endpointUrl.port\n && currentEndpoint.securityMode === securityMode\n && currentEndpoint.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 \"opcjs-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 \"opcjs-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 \"opcjs-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 { NodeId } from \"opcjs-base\";\n\nexport class SubscriptionHandlerEntry{\n constructor(\n public subscriptionId:number,\n public handle: number, \n public id:NodeId, \n public callback: (data: { id: NodeId, value: unknown }[]) => void\n ){}\n}","import { DataChangeNotification, NodeId, SubscriptionAcknowledgement } from \"opcjs-base\";\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: NodeId[], callback: (data: { id: NodeId, 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,\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 {\n CreateSubscriptionRequest, CreateSubscriptionResponse, ISecureChannel, NodeId, PublishRequest,\n PublishResponse, SubscriptionAcknowledgement\n} from \"opcjs-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 { \n CreateMonitoredItemsRequest, CreateMonitoredItemsResponse, \n ExtensionObject, ISecureChannel, MonitoredItemCreateRequest, MonitoringModeEnum, MonitoringParameters, \n NodeId, QualifiedName, ReadValueId, TimestampsToReturnEnum } from \"opcjs-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.monitoringMode = MonitoringModeEnum.Reporting;\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 { NodeId, SecureChannel } from \"opcjs-base\";\nimport { ChannelFactory } from \"opcjs-base\";\nimport { SessionHandler } from \"./sessions/sessionHandler\";\nimport { ISecureChannel } from \"opcjs-base\";\nimport { Session } from \"./sessions/session\";\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: NodeId[]):Promise<ReadValueResult[]>{\n const service = new AttributeService(this.getSession().getAuthToken(), this.channel as ISecureChannel);\n const result = await service.ReadValue(ids);\n return result.map(r => new ReadValueResult(r.value, r.status))\n }\n\n async subscribe(ids: NodeId[], callback: (data: {id:NodeId, 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}","import { BinaryReader, BinaryWriter, Configuration, Decoder, Encoder, registerBinaryDecoders, registerEncoders, registerTypeDecoders } from \"opcjs-base\";\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 { IssuedIdentityToken, UserIdentityToken, UserNameIdentityToken, UserTokenTypeEnum } from \"opcjs-base\";\nimport { IssuerConfiguration } from \"./issuerConfiguration\";\nimport { IssuerToken } from \"./issuerToken\";\nimport { AnonymousIdentityToken } from \"opcjs-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"]}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "opcjs-client",
3
- "version": "0.1.10",
3
+ "version": "0.1.13",
4
4
  "description": "A client for OPC UA communication.",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "https://github.com/slompf18/opcjs.git"
7
+ "url": "https://github.com/iarbre/opcjs.git"
8
8
  },
9
9
  "type": "module",
10
10
  "main": "./dist/index.js",