@effect-opcua/client 0.1.0-alpha.1
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/LICENSE +201 -0
- package/README.md +367 -0
- package/dist/Opcua.d.mts +13 -0
- package/dist/Opcua.d.mts.map +1 -0
- package/dist/Opcua.mjs +23 -0
- package/dist/Opcua.mjs.map +1 -0
- package/dist/OpcuaClient.d.mts +27 -0
- package/dist/OpcuaClient.d.mts.map +1 -0
- package/dist/OpcuaClient.mjs +20 -0
- package/dist/OpcuaClient.mjs.map +1 -0
- package/dist/OpcuaError.d.mts +249 -0
- package/dist/OpcuaError.d.mts.map +1 -0
- package/dist/OpcuaError.mjs +97 -0
- package/dist/OpcuaError.mjs.map +1 -0
- package/dist/OpcuaMethod.d.mts +158 -0
- package/dist/OpcuaMethod.d.mts.map +1 -0
- package/dist/OpcuaMethod.mjs +31 -0
- package/dist/OpcuaMethod.mjs.map +1 -0
- package/dist/OpcuaSession.d.mts +247 -0
- package/dist/OpcuaSession.d.mts.map +1 -0
- package/dist/OpcuaSession.mjs +50 -0
- package/dist/OpcuaSession.mjs.map +1 -0
- package/dist/OpcuaSubscription.d.mts +148 -0
- package/dist/OpcuaSubscription.d.mts.map +1 -0
- package/dist/OpcuaSubscription.mjs +45 -0
- package/dist/OpcuaSubscription.mjs.map +1 -0
- package/dist/OpcuaVariable.d.mts +179 -0
- package/dist/OpcuaVariable.d.mts.map +1 -0
- package/dist/OpcuaVariable.mjs +15 -0
- package/dist/OpcuaVariable.mjs.map +1 -0
- package/dist/_virtual/rolldown_runtime.mjs +18 -0
- package/dist/index.d.mts +8 -0
- package/dist/index.mjs +7 -0
- package/dist/internal/batch/chunk.d.mts +11 -0
- package/dist/internal/batch/chunk.d.mts.map +1 -0
- package/dist/internal/batch/chunk.mjs +23 -0
- package/dist/internal/batch/chunk.mjs.map +1 -0
- package/dist/internal/batch/keyed.d.mts +50 -0
- package/dist/internal/batch/keyed.d.mts.map +1 -0
- package/dist/internal/batch/keyed.mjs +112 -0
- package/dist/internal/batch/keyed.mjs.map +1 -0
- package/dist/internal/batch/operations.d.mts +25 -0
- package/dist/internal/batch/operations.d.mts.map +1 -0
- package/dist/internal/batch/operations.mjs +213 -0
- package/dist/internal/batch/operations.mjs.map +1 -0
- package/dist/internal/browse/operations.d.mts +15 -0
- package/dist/internal/browse/operations.d.mts.map +1 -0
- package/dist/internal/browse/operations.mjs +72 -0
- package/dist/internal/browse/operations.mjs.map +1 -0
- package/dist/internal/client/make.d.mts +16 -0
- package/dist/internal/client/make.d.mts.map +1 -0
- package/dist/internal/client/make.mjs +76 -0
- package/dist/internal/client/make.mjs.map +1 -0
- package/dist/internal/common/collections.d.mts +5 -0
- package/dist/internal/common/collections.d.mts.map +1 -0
- package/dist/internal/common/collections.mjs +10 -0
- package/dist/internal/common/collections.mjs.map +1 -0
- package/dist/internal/common/constants.d.mts +18 -0
- package/dist/internal/common/constants.d.mts.map +1 -0
- package/dist/internal/common/constants.mjs +19 -0
- package/dist/internal/common/constants.mjs.map +1 -0
- package/dist/internal/common/node-id.d.mts +2 -0
- package/dist/internal/common/node-id.mjs +1 -0
- package/dist/internal/common/options.d.mts +15 -0
- package/dist/internal/common/options.d.mts.map +1 -0
- package/dist/internal/common/options.mjs +22 -0
- package/dist/internal/common/options.mjs.map +1 -0
- package/dist/internal/common/predicates.d.mts +8 -0
- package/dist/internal/common/predicates.d.mts.map +1 -0
- package/dist/internal/common/predicates.mjs +13 -0
- package/dist/internal/common/predicates.mjs.map +1 -0
- package/dist/internal/data-types/enum.d.mts +2 -0
- package/dist/internal/data-types/enum.mjs +3 -0
- package/dist/internal/data-types/manager.d.mts +2 -0
- package/dist/internal/data-types/manager.mjs +3 -0
- package/dist/internal/data-types/model.d.mts +2 -0
- package/dist/internal/data-types/model.mjs +1 -0
- package/dist/internal/data-types/read.d.mts +14 -0
- package/dist/internal/data-types/read.d.mts.map +1 -0
- package/dist/internal/data-types/read.mjs +291 -0
- package/dist/internal/data-types/read.mjs.map +1 -0
- package/dist/internal/data-types/structure.d.mts +2 -0
- package/dist/internal/data-types/structure.mjs +3 -0
- package/dist/internal/events/model.d.mts +72 -0
- package/dist/internal/events/model.d.mts.map +1 -0
- package/dist/internal/events/model.mjs +1 -0
- package/dist/internal/events/wire.d.mts +37 -0
- package/dist/internal/events/wire.d.mts.map +1 -0
- package/dist/internal/events/wire.mjs +127 -0
- package/dist/internal/events/wire.mjs.map +1 -0
- package/dist/internal/metadata/arguments.d.mts +2 -0
- package/dist/internal/metadata/arguments.mjs +3 -0
- package/dist/internal/metadata/methods.d.mts +2 -0
- package/dist/internal/metadata/methods.mjs +3 -0
- package/dist/internal/metadata/service.d.mts +23 -0
- package/dist/internal/metadata/service.d.mts.map +1 -0
- package/dist/internal/metadata/service.mjs +416 -0
- package/dist/internal/metadata/service.mjs.map +1 -0
- package/dist/internal/metadata/variables.d.mts +3 -0
- package/dist/internal/metadata/variables.mjs +3 -0
- package/dist/internal/method/arguments.d.mts +48 -0
- package/dist/internal/method/arguments.d.mts.map +1 -0
- package/dist/internal/method/arguments.mjs +216 -0
- package/dist/internal/method/arguments.mjs.map +1 -0
- package/dist/internal/method/operations.d.mts +19 -0
- package/dist/internal/method/operations.d.mts.map +1 -0
- package/dist/internal/method/operations.mjs +111 -0
- package/dist/internal/method/operations.mjs.map +1 -0
- package/dist/internal/monitoring/options.d.mts +30 -0
- package/dist/internal/monitoring/options.d.mts.map +1 -0
- package/dist/internal/monitoring/options.mjs +260 -0
- package/dist/internal/monitoring/options.mjs.map +1 -0
- package/dist/internal/monitoring/requests.d.mts +16 -0
- package/dist/internal/monitoring/requests.d.mts.map +1 -0
- package/dist/internal/monitoring/requests.mjs +53 -0
- package/dist/internal/monitoring/requests.mjs.map +1 -0
- package/dist/internal/monitoring/runtime.d.mts +14 -0
- package/dist/internal/monitoring/runtime.d.mts.map +1 -0
- package/dist/internal/monitoring/runtime.mjs +321 -0
- package/dist/internal/monitoring/runtime.mjs.map +1 -0
- package/dist/internal/monitoring/samples.d.mts +23 -0
- package/dist/internal/monitoring/samples.d.mts.map +1 -0
- package/dist/internal/monitoring/samples.mjs +45 -0
- package/dist/internal/monitoring/samples.mjs.map +1 -0
- package/dist/internal/session/make.d.mts +11 -0
- package/dist/internal/session/make.d.mts.map +1 -0
- package/dist/internal/session/make.mjs +36 -0
- package/dist/internal/session/make.mjs.map +1 -0
- package/dist/internal/session/service.d.mts +10 -0
- package/dist/internal/session/service.d.mts.map +1 -0
- package/dist/internal/session/service.mjs +232 -0
- package/dist/internal/session/service.mjs.map +1 -0
- package/dist/internal/structures/adapter.d.mts +11 -0
- package/dist/internal/structures/adapter.d.mts.map +1 -0
- package/dist/internal/structures/adapter.mjs +37 -0
- package/dist/internal/structures/adapter.mjs.map +1 -0
- package/dist/internal/structures/model.d.mts +21 -0
- package/dist/internal/structures/model.d.mts.map +1 -0
- package/dist/internal/structures/model.mjs +7 -0
- package/dist/internal/structures/model.mjs.map +1 -0
- package/dist/internal/structures/runtime.d.mts +28 -0
- package/dist/internal/structures/runtime.d.mts.map +1 -0
- package/dist/internal/structures/runtime.mjs +119 -0
- package/dist/internal/structures/runtime.mjs.map +1 -0
- package/dist/internal/subscription/options.d.mts +17 -0
- package/dist/internal/subscription/options.d.mts.map +1 -0
- package/dist/internal/subscription/options.mjs +51 -0
- package/dist/internal/subscription/options.mjs.map +1 -0
- package/dist/internal/subscription/runtime.d.mts +15 -0
- package/dist/internal/subscription/runtime.d.mts.map +1 -0
- package/dist/internal/subscription/runtime.mjs +43 -0
- package/dist/internal/subscription/runtime.mjs.map +1 -0
- package/dist/internal/values/codec.d.mts +53 -0
- package/dist/internal/values/codec.d.mts.map +1 -0
- package/dist/internal/values/codec.mjs +117 -0
- package/dist/internal/values/codec.mjs.map +1 -0
- package/dist/internal/values/normalize.d.mts +33 -0
- package/dist/internal/values/normalize.d.mts.map +1 -0
- package/dist/internal/values/normalize.mjs +177 -0
- package/dist/internal/values/normalize.mjs.map +1 -0
- package/dist/internal/values/result.d.mts +16 -0
- package/dist/internal/values/result.d.mts.map +1 -0
- package/dist/internal/values/result.mjs +15 -0
- package/dist/internal/values/result.mjs.map +1 -0
- package/dist/internal/variable/operations.d.mts +50 -0
- package/dist/internal/variable/operations.d.mts.map +1 -0
- package/dist/internal/variable/operations.mjs +192 -0
- package/dist/internal/variable/operations.mjs.map +1 -0
- package/dist/node-opcua.d.mts +2 -0
- package/dist/node-opcua.mjs +3 -0
- package/package.json +57 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { NodeIdString, ReadResult, ReadableVariableDef, ValueOfVariableDef, VariableAccess, VariableCapability, VariableDef, VariableMetadata, WritableVariableDef, WriteResult } from "../../OpcuaVariable.mjs";
|
|
2
|
+
import "../common/node-id.mjs";
|
|
3
|
+
import { OpcuaStructureRuntime } from "../structures/runtime.mjs";
|
|
4
|
+
import { OpcuaAccessDeniedError, OpcuaEncodeError, OpcuaServiceError } from "../../OpcuaError.mjs";
|
|
5
|
+
import { BatchOptions } from "../batch/chunk.mjs";
|
|
6
|
+
import { ClientSession, DataType, DataValue, NodeId, StatusCode } from "node-opcua";
|
|
7
|
+
import { Effect } from "effect";
|
|
8
|
+
|
|
9
|
+
//#region src/internal/variable/operations.d.ts
|
|
10
|
+
declare const readDataValue: (session: ClientSession, nodeId: NodeIdString) => Effect.Effect<DataValue, OpcuaServiceError, never>;
|
|
11
|
+
declare const readVariable: <const Id extends string, A>(session: ClientSession, def: VariableDef<Id, A, "read" | "readWrite"> | VariableDef<Id, A, VariableAccess>, structureRuntime: OpcuaStructureRuntime) => Effect.Effect<ReadResult<A, Id>, OpcuaServiceError, never>;
|
|
12
|
+
type PreparedReadVariable<Def extends ReadableVariableDef = ReadableVariableDef> = {
|
|
13
|
+
readonly def: Def;
|
|
14
|
+
readonly rawNodeId: NodeId;
|
|
15
|
+
};
|
|
16
|
+
declare const readPreparedVariables: (session: ClientSession, items: ReadonlyArray<PreparedReadVariable>, structureRuntime: OpcuaStructureRuntime, options?: BatchOptions) => Effect.Effect<ReadResult<unknown, string>[], OpcuaServiceError, never>;
|
|
17
|
+
declare const sampleFromDataValue: <const Id extends string, A>(def: VariableDef<Id, A, VariableAccess>, dataValue: DataValue, structureRuntime: OpcuaStructureRuntime) => Effect.Effect<ReadResult<A, Id>, never, never>;
|
|
18
|
+
declare const writeVariable: <const Id extends string, A>(session: ClientSession, def: VariableDef<Id, A, VariableAccess>, metadata: VariableMetadata, value: A, structureRuntime: OpcuaStructureRuntime) => Effect.Effect<WriteResult<Id>, OpcuaEncodeError | OpcuaServiceError, never>;
|
|
19
|
+
type PreparedWriteVariable<Def extends WritableVariableDef = WritableVariableDef> = {
|
|
20
|
+
readonly def: Def;
|
|
21
|
+
readonly metadata: VariableMetadata;
|
|
22
|
+
readonly value: ValueOfVariableDef<Def>;
|
|
23
|
+
readonly rawNodeId: NodeId;
|
|
24
|
+
};
|
|
25
|
+
declare const writePreparedVariables: (session: ClientSession, entries: ReadonlyArray<PreparedWriteVariable>, structureRuntime: OpcuaStructureRuntime, options?: BatchOptions) => Effect.Effect<WriteResult<string>[], OpcuaEncodeError | OpcuaServiceError, never>;
|
|
26
|
+
declare const writeResult: <Id extends string>(nodeId: Id, statusCode: StatusCode) => WriteResult<Id>;
|
|
27
|
+
declare const accessDeniedError: (nodeId: NodeIdString, requestedCapability: VariableCapability, accessLevel: number, userAccessLevel?: number) => OpcuaAccessDeniedError | undefined;
|
|
28
|
+
declare const variableAccessCapabilities: (access: VariableAccess) => ReadonlyArray<VariableCapability>;
|
|
29
|
+
declare const hasAccess: (accessLevel: number, capability: VariableCapability) => boolean;
|
|
30
|
+
declare const variableMetadataFromRaw: (input: {
|
|
31
|
+
readonly nodeId: NodeIdString;
|
|
32
|
+
readonly dataTypeNodeId: NodeId;
|
|
33
|
+
readonly builtInDataType: DataType;
|
|
34
|
+
readonly valueRank: number;
|
|
35
|
+
readonly arrayDimensions?: ReadonlyArray<number>;
|
|
36
|
+
readonly accessLevel: number;
|
|
37
|
+
readonly userAccessLevel?: number;
|
|
38
|
+
}) => VariableMetadata;
|
|
39
|
+
declare const codecMetadata: (metadata: VariableMetadata) => {
|
|
40
|
+
nodeId: string;
|
|
41
|
+
valueRank: number;
|
|
42
|
+
arrayDimensions: readonly number[] | undefined;
|
|
43
|
+
raw: {
|
|
44
|
+
declaredDataType: NodeId;
|
|
45
|
+
builtInDataType: DataType;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
//#endregion
|
|
49
|
+
export { PreparedReadVariable, PreparedWriteVariable, accessDeniedError, codecMetadata, hasAccess, readDataValue, readPreparedVariables, readVariable, sampleFromDataValue, variableAccessCapabilities, variableMetadataFromRaw, writePreparedVariables, writeResult, writeVariable };
|
|
50
|
+
//# sourceMappingURL=operations.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.d.mts","names":[],"sources":["../../../src/internal/variable/operations.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { isGood, normalizeNodeId, normalizeStatusCode, normalizeTimestamp, normalizeVariantInfo } from "../values/normalize.mjs";
|
|
2
|
+
import { accessDeniedError as accessDeniedError$1, serviceError } from "../../OpcuaError.mjs";
|
|
3
|
+
import { Codec } from "../values/codec.mjs";
|
|
4
|
+
import { runChunked } from "../batch/chunk.mjs";
|
|
5
|
+
import { resultFromStatusAndDecode } from "../values/result.mjs";
|
|
6
|
+
import { AccessLevelFlag, AttributeIds, DataType, coerceNodeId } from "node-opcua";
|
|
7
|
+
import { Effect } from "effect";
|
|
8
|
+
|
|
9
|
+
//#region src/internal/variable/operations.ts
|
|
10
|
+
const readDataValue = (session, nodeId) => Effect.tryPromise({
|
|
11
|
+
try: () => session.read({
|
|
12
|
+
nodeId: coerceNodeId(nodeId),
|
|
13
|
+
attributeId: AttributeIds.Value
|
|
14
|
+
}, 0),
|
|
15
|
+
catch: (cause) => serviceError({
|
|
16
|
+
operation: "read",
|
|
17
|
+
nodeId,
|
|
18
|
+
cause
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
const readVariable = (session, def, structureRuntime) => Effect.gen(function* () {
|
|
22
|
+
if (Codec.requiresStructureRuntime(def.codec)) yield* structureRuntime.ensureInitialized();
|
|
23
|
+
return yield* sampleFromDataValue(def, yield* readDataValue(session, def.nodeId).pipe(Effect.withSpan("opcua.raw.read", {
|
|
24
|
+
attributes: { "opcua.node_id": def.nodeId },
|
|
25
|
+
kind: "client"
|
|
26
|
+
})), structureRuntime);
|
|
27
|
+
});
|
|
28
|
+
const readPreparedVariables = (session, items, structureRuntime, options) => Effect.gen(function* () {
|
|
29
|
+
if (items.some((item) => Codec.requiresStructureRuntime(item.def.codec))) yield* structureRuntime.ensureInitialized();
|
|
30
|
+
const dataValues = yield* runChunked(items, options, (chunk) => Effect.gen(function* () {
|
|
31
|
+
const readValueIds = chunk.map((item) => ({
|
|
32
|
+
nodeId: item.rawNodeId,
|
|
33
|
+
attributeId: AttributeIds.Value
|
|
34
|
+
}));
|
|
35
|
+
const dataValues$1 = yield* Effect.tryPromise({
|
|
36
|
+
try: () => session.read([...readValueIds], 0),
|
|
37
|
+
catch: (cause) => serviceError({
|
|
38
|
+
operation: "read",
|
|
39
|
+
cause
|
|
40
|
+
})
|
|
41
|
+
}).pipe(Effect.withSpan("opcua.raw.read.batch", {
|
|
42
|
+
attributes: { "opcua.node_count": chunk.length },
|
|
43
|
+
kind: "client"
|
|
44
|
+
}));
|
|
45
|
+
if (dataValues$1.length !== chunk.length) return yield* Effect.fail(serviceError({
|
|
46
|
+
operation: "read",
|
|
47
|
+
cause: `Expected ${chunk.length} DataValues, got ${dataValues$1.length}`
|
|
48
|
+
}));
|
|
49
|
+
return dataValues$1;
|
|
50
|
+
}));
|
|
51
|
+
return yield* Effect.forEach(items, (item, index) => sampleFromDataValue(item.def, dataValues[index], structureRuntime));
|
|
52
|
+
});
|
|
53
|
+
const sampleFromDataValue = (def, dataValue, structureRuntime) => Effect.suspend(() => {
|
|
54
|
+
const base = sampleBase(def.nodeId, dataValue, def.includeRaw ?? false);
|
|
55
|
+
return resultFromStatusAndDecode({
|
|
56
|
+
statusCode: dataValue.statusCode,
|
|
57
|
+
status: base,
|
|
58
|
+
decode: Codec.decode(def.codec, dataValue.value, dataValue, structureRuntime),
|
|
59
|
+
nonGoodStatus: (base$1) => ({
|
|
60
|
+
_tag: "NonGoodStatus",
|
|
61
|
+
...base$1
|
|
62
|
+
}),
|
|
63
|
+
decodeError: (error, base$1) => ({
|
|
64
|
+
_tag: "DecodeError",
|
|
65
|
+
...base$1,
|
|
66
|
+
error
|
|
67
|
+
}),
|
|
68
|
+
value: (value) => ({
|
|
69
|
+
_tag: "Value",
|
|
70
|
+
...base,
|
|
71
|
+
value
|
|
72
|
+
})
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
const writeVariable = (session, def, metadata, value, structureRuntime) => Effect.gen(function* () {
|
|
76
|
+
if (Codec.requiresStructureRuntime(def.codec)) yield* structureRuntime.ensureInitialized();
|
|
77
|
+
const variant = yield* Codec.encode(def.codec, value, codecMetadata(metadata), structureRuntime);
|
|
78
|
+
const statusCode = yield* Effect.tryPromise({
|
|
79
|
+
try: () => session.write({
|
|
80
|
+
nodeId: coerceNodeId(def.nodeId),
|
|
81
|
+
attributeId: AttributeIds.Value,
|
|
82
|
+
value: { value: variant }
|
|
83
|
+
}),
|
|
84
|
+
catch: (cause) => serviceError({
|
|
85
|
+
operation: "write",
|
|
86
|
+
nodeId: def.nodeId,
|
|
87
|
+
cause
|
|
88
|
+
})
|
|
89
|
+
}).pipe(Effect.withSpan("opcua.raw.write", {
|
|
90
|
+
attributes: { "opcua.node_id": def.nodeId },
|
|
91
|
+
kind: "client"
|
|
92
|
+
}));
|
|
93
|
+
return writeResult(def.nodeId, statusCode);
|
|
94
|
+
});
|
|
95
|
+
const writePreparedVariables = (session, entries, structureRuntime, options) => Effect.gen(function* () {
|
|
96
|
+
if (entries.some((entry) => Codec.requiresStructureRuntime(entry.def.codec))) yield* structureRuntime.ensureInitialized();
|
|
97
|
+
const statusCodes = yield* runChunked(yield* Effect.forEach(entries, (entry) => encodeWriteValue(entry, structureRuntime)), options, (chunk) => Effect.gen(function* () {
|
|
98
|
+
const statusCodes$1 = yield* Effect.tryPromise({
|
|
99
|
+
try: () => session.write([...chunk]),
|
|
100
|
+
catch: (cause) => serviceError({
|
|
101
|
+
operation: "write",
|
|
102
|
+
cause
|
|
103
|
+
})
|
|
104
|
+
});
|
|
105
|
+
if (statusCodes$1.length !== chunk.length) return yield* Effect.fail(serviceError({
|
|
106
|
+
operation: "write",
|
|
107
|
+
cause: `Expected ${chunk.length} StatusCodes, got ${statusCodes$1.length}`
|
|
108
|
+
}));
|
|
109
|
+
return statusCodes$1;
|
|
110
|
+
}));
|
|
111
|
+
return entries.map((entry, index) => writeResult(entry.def.nodeId, statusCodes[index]));
|
|
112
|
+
});
|
|
113
|
+
const writeResult = (nodeId, statusCode) => isGood(statusCode) ? {
|
|
114
|
+
_tag: "Written",
|
|
115
|
+
nodeId,
|
|
116
|
+
status: normalizeStatusCode(statusCode)
|
|
117
|
+
} : {
|
|
118
|
+
_tag: "NonGoodStatus",
|
|
119
|
+
nodeId,
|
|
120
|
+
status: normalizeStatusCode(statusCode)
|
|
121
|
+
};
|
|
122
|
+
const encodeWriteValue = (entry, structureRuntime) => Effect.gen(function* () {
|
|
123
|
+
const variant = yield* Codec.encode(entry.def.codec, entry.value, codecMetadata(entry.metadata), structureRuntime);
|
|
124
|
+
return {
|
|
125
|
+
nodeId: entry.rawNodeId,
|
|
126
|
+
attributeId: AttributeIds.Value,
|
|
127
|
+
value: { value: variant }
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
const accessDeniedError = (nodeId, requestedCapability, accessLevel, userAccessLevel) => {
|
|
131
|
+
const hasNodeAccess = hasAccess(accessLevel, requestedCapability);
|
|
132
|
+
const hasUserAccess = userAccessLevel === void 0 || hasAccess(userAccessLevel, requestedCapability);
|
|
133
|
+
if (!hasNodeAccess || !hasUserAccess) return accessDeniedError$1({
|
|
134
|
+
nodeId,
|
|
135
|
+
requestedCapability,
|
|
136
|
+
accessLevel,
|
|
137
|
+
userAccessLevel
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
const variableAccessCapabilities = (access) => {
|
|
141
|
+
switch (access) {
|
|
142
|
+
case "read": return ["read"];
|
|
143
|
+
case "write": return ["write"];
|
|
144
|
+
case "readWrite": return ["read", "write"];
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
const hasAccess = (accessLevel, capability) => {
|
|
148
|
+
return (accessLevel & (capability === "read" ? AccessLevelFlag.CurrentRead : AccessLevelFlag.CurrentWrite)) !== 0;
|
|
149
|
+
};
|
|
150
|
+
const variableMetadataFromRaw = (input) => ({
|
|
151
|
+
nodeId: input.nodeId,
|
|
152
|
+
declaredDataType: normalizeNodeId(input.dataTypeNodeId),
|
|
153
|
+
builtInDataType: DataType[input.builtInDataType] ?? String(input.builtInDataType),
|
|
154
|
+
valueRank: input.valueRank,
|
|
155
|
+
arrayDimensions: input.arrayDimensions,
|
|
156
|
+
accessLevel: input.accessLevel,
|
|
157
|
+
userAccessLevel: input.userAccessLevel,
|
|
158
|
+
access: {
|
|
159
|
+
readable: hasAccess(input.accessLevel, "read"),
|
|
160
|
+
writable: hasAccess(input.accessLevel, "write"),
|
|
161
|
+
userReadable: input.userAccessLevel === void 0 || hasAccess(input.userAccessLevel, "read"),
|
|
162
|
+
userWritable: input.userAccessLevel === void 0 || hasAccess(input.userAccessLevel, "write")
|
|
163
|
+
},
|
|
164
|
+
unsafeRaw: {
|
|
165
|
+
declaredDataType: input.dataTypeNodeId,
|
|
166
|
+
builtInDataType: input.builtInDataType
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
const codecMetadata = (metadata) => ({
|
|
170
|
+
nodeId: metadata.nodeId,
|
|
171
|
+
valueRank: metadata.valueRank,
|
|
172
|
+
arrayDimensions: metadata.arrayDimensions,
|
|
173
|
+
raw: {
|
|
174
|
+
declaredDataType: metadata.unsafeRaw.declaredDataType,
|
|
175
|
+
builtInDataType: metadata.unsafeRaw.builtInDataType
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
const sampleBase = (nodeId, dataValue, includeRaw) => ({
|
|
179
|
+
nodeId,
|
|
180
|
+
status: normalizeStatusCode(dataValue.statusCode),
|
|
181
|
+
sourceTimestamp: normalizeTimestamp(dataValue.sourceTimestamp),
|
|
182
|
+
serverTimestamp: normalizeTimestamp(dataValue.serverTimestamp),
|
|
183
|
+
variant: dataValue.value ? normalizeVariantInfo(dataValue.value) : void 0,
|
|
184
|
+
unsafeRaw: includeRaw ? {
|
|
185
|
+
dataValue,
|
|
186
|
+
variant: dataValue.value
|
|
187
|
+
} : void 0
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
//#endregion
|
|
191
|
+
export { accessDeniedError, codecMetadata, hasAccess, readDataValue, readPreparedVariables, readVariable, sampleFromDataValue, variableAccessCapabilities, variableMetadataFromRaw, writePreparedVariables, writeResult, writeVariable };
|
|
192
|
+
//# sourceMappingURL=operations.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operations.mjs","names":["readValueIds: ReadonlyArray<ReadValueIdOptions>","dataValues","base","statusCodes","makeAccessDeniedError"],"sources":["../../../src/internal/variable/operations.ts"],"sourcesContent":["import {\n AccessLevelFlag,\n AttributeIds,\n DataType,\n NodeId,\n coerceNodeId,\n type ClientSession,\n type DataValue,\n type ReadValueIdOptions,\n type StatusCode,\n type WriteValueOptions,\n} from \"node-opcua\";\nimport { Effect } from \"effect\";\n\nimport { runChunked, type BatchOptions } from \"../batch/chunk.js\";\nimport type { NodeIdString, VariableCapability } from \"../common/node-id.js\";\nimport { Codec, type OpcuaCodec } from \"../values/codec.js\";\nimport {\n accessDeniedError as makeAccessDeniedError,\n serviceError,\n type OpcuaEncodeError,\n type OpcuaServiceError,\n} from \"../../OpcuaError.js\";\nimport {\n isGood,\n normalizeNodeId,\n normalizeStatusCode,\n normalizeTimestamp,\n normalizeVariantInfo,\n} from \"../values/normalize.js\";\nimport { resultFromStatusAndDecode } from \"../values/result.js\";\nimport type { OpcuaStructureRuntime } from \"../structures/runtime.js\";\nimport type {\n ReadResult,\n ReadableVariableDef,\n ValueOfVariableDef,\n VariableAccess,\n VariableDef,\n VariableMetadata,\n WritableVariableDef,\n WriteResult,\n} from \"../../OpcuaVariable.js\";\n\nexport const readDataValue = (session: ClientSession, nodeId: NodeIdString) =>\n Effect.tryPromise({\n try: () =>\n session.read(\n {\n nodeId: coerceNodeId(nodeId),\n attributeId: AttributeIds.Value,\n },\n 0,\n ),\n catch: (cause) => serviceError({ operation: \"read\", nodeId, cause }),\n });\n\nexport const readVariable = <const Id extends string, A>(\n session: ClientSession,\n def:\n | VariableDef<Id, A, \"read\" | \"readWrite\">\n | VariableDef<Id, A, VariableAccess>,\n structureRuntime: OpcuaStructureRuntime,\n) =>\n Effect.gen(function* () {\n if (Codec.requiresStructureRuntime(def.codec)) {\n yield* structureRuntime.ensureInitialized();\n }\n const dataValue = yield* readDataValue(session, def.nodeId).pipe(\n Effect.withSpan(\"opcua.raw.read\", {\n attributes: { \"opcua.node_id\": def.nodeId },\n kind: \"client\",\n }),\n );\n return yield* sampleFromDataValue(def, dataValue, structureRuntime);\n });\n\nexport type PreparedReadVariable<\n Def extends ReadableVariableDef = ReadableVariableDef,\n> = {\n readonly def: Def;\n readonly rawNodeId: NodeId;\n};\n\nexport const readPreparedVariables = (\n session: ClientSession,\n items: ReadonlyArray<PreparedReadVariable>,\n structureRuntime: OpcuaStructureRuntime,\n options?: BatchOptions,\n) =>\n Effect.gen(function* () {\n if (items.some((item) => Codec.requiresStructureRuntime(item.def.codec))) {\n yield* structureRuntime.ensureInitialized();\n }\n const dataValues = yield* runChunked(items, options, (chunk) =>\n Effect.gen(function* () {\n const readValueIds: ReadonlyArray<ReadValueIdOptions> = chunk.map(\n (item) => ({\n nodeId: item.rawNodeId,\n attributeId: AttributeIds.Value,\n }),\n );\n const dataValues = yield* Effect.tryPromise({\n try: () => session.read([...readValueIds], 0),\n catch: (cause) =>\n serviceError({\n operation: \"read\",\n cause,\n }),\n }).pipe(\n Effect.withSpan(\"opcua.raw.read.batch\", {\n attributes: { \"opcua.node_count\": chunk.length },\n kind: \"client\",\n }),\n );\n if (dataValues.length !== chunk.length) {\n return yield* Effect.fail(\n serviceError({\n operation: \"read\",\n cause: `Expected ${chunk.length} DataValues, got ${dataValues.length}`,\n }),\n );\n }\n return dataValues;\n }),\n );\n return yield* Effect.forEach(items, (item, index) =>\n sampleFromDataValue(item.def, dataValues[index]!, structureRuntime),\n );\n });\n\nexport const sampleFromDataValue = <const Id extends string, A>(\n def: VariableDef<Id, A, VariableAccess>,\n dataValue: DataValue,\n structureRuntime: OpcuaStructureRuntime,\n) =>\n Effect.suspend(() => {\n const base = sampleBase(def.nodeId, dataValue, def.includeRaw ?? false);\n return resultFromStatusAndDecode<A, typeof base, ReadResult<A, Id>>({\n statusCode: dataValue.statusCode,\n status: base,\n decode: Codec.decode(\n def.codec,\n dataValue.value,\n dataValue,\n structureRuntime,\n ),\n nonGoodStatus: (base) =>\n ({ _tag: \"NonGoodStatus\", ...base }) as ReadResult<A, Id>,\n decodeError: (error, base) =>\n ({ _tag: \"DecodeError\", ...base, error }) as ReadResult<A, Id>,\n value: (value) =>\n ({\n _tag: \"Value\",\n ...base,\n value: value as unknown as A,\n }) as ReadResult<A, Id>,\n });\n });\n\nexport const writeVariable = <const Id extends string, A>(\n session: ClientSession,\n def: VariableDef<Id, A, VariableAccess>,\n metadata: VariableMetadata,\n value: A,\n structureRuntime: OpcuaStructureRuntime,\n) =>\n Effect.gen(function* () {\n if (Codec.requiresStructureRuntime(def.codec)) {\n yield* structureRuntime.ensureInitialized();\n }\n const variant = yield* Codec.encode(\n def.codec as OpcuaCodec<unknown>,\n value as unknown,\n codecMetadata(metadata),\n structureRuntime,\n );\n const statusCode = yield* Effect.tryPromise({\n try: () =>\n session.write({\n nodeId: coerceNodeId(def.nodeId),\n attributeId: AttributeIds.Value,\n value: { value: variant },\n }),\n catch: (cause) =>\n serviceError({\n operation: \"write\",\n nodeId: def.nodeId,\n cause,\n }),\n }).pipe(\n Effect.withSpan(\"opcua.raw.write\", {\n attributes: { \"opcua.node_id\": def.nodeId },\n kind: \"client\",\n }),\n );\n return writeResult(def.nodeId, statusCode);\n });\n\nexport type PreparedWriteVariable<\n Def extends WritableVariableDef = WritableVariableDef,\n> = {\n readonly def: Def;\n readonly metadata: VariableMetadata;\n readonly value: ValueOfVariableDef<Def>;\n readonly rawNodeId: NodeId;\n};\n\nexport const writePreparedVariables = (\n session: ClientSession,\n entries: ReadonlyArray<PreparedWriteVariable>,\n structureRuntime: OpcuaStructureRuntime,\n options?: BatchOptions,\n) =>\n Effect.gen(function* () {\n if (\n entries.some((entry) => Codec.requiresStructureRuntime(entry.def.codec))\n ) {\n yield* structureRuntime.ensureInitialized();\n }\n const writeValues = yield* Effect.forEach(entries, (entry) =>\n encodeWriteValue(entry, structureRuntime),\n );\n const statusCodes = yield* runChunked(writeValues, options, (chunk) =>\n Effect.gen(function* () {\n const statusCodes = yield* Effect.tryPromise({\n try: () => session.write([...chunk]),\n catch: (cause) =>\n serviceError({\n operation: \"write\",\n cause,\n }),\n });\n if (statusCodes.length !== chunk.length) {\n return yield* Effect.fail(\n serviceError({\n operation: \"write\",\n cause: `Expected ${chunk.length} StatusCodes, got ${statusCodes.length}`,\n }),\n );\n }\n return statusCodes;\n }),\n );\n return entries.map((entry, index) =>\n writeResult(entry.def.nodeId, statusCodes[index]!),\n );\n });\n\nexport const writeResult = <Id extends string>(\n nodeId: Id,\n statusCode: StatusCode,\n): WriteResult<Id> =>\n isGood(statusCode)\n ? { _tag: \"Written\", nodeId, status: normalizeStatusCode(statusCode) }\n : {\n _tag: \"NonGoodStatus\",\n nodeId,\n status: normalizeStatusCode(statusCode),\n };\n\nconst encodeWriteValue = (\n entry: PreparedWriteVariable,\n structureRuntime: OpcuaStructureRuntime,\n): Effect.Effect<WriteValueOptions, OpcuaEncodeError | OpcuaServiceError> =>\n Effect.gen(function* () {\n const variant = yield* Codec.encode(\n entry.def.codec as OpcuaCodec<unknown>,\n entry.value as unknown,\n codecMetadata(entry.metadata),\n structureRuntime,\n );\n return {\n nodeId: entry.rawNodeId,\n attributeId: AttributeIds.Value,\n value: { value: variant },\n };\n });\n\nexport const accessDeniedError = (\n nodeId: NodeIdString,\n requestedCapability: VariableCapability,\n accessLevel: number,\n userAccessLevel?: number,\n) => {\n const hasNodeAccess = hasAccess(accessLevel, requestedCapability);\n const hasUserAccess =\n userAccessLevel === undefined ||\n hasAccess(userAccessLevel, requestedCapability);\n if (!hasNodeAccess || !hasUserAccess) {\n return makeAccessDeniedError({\n nodeId,\n requestedCapability,\n accessLevel,\n userAccessLevel,\n });\n }\n return undefined;\n};\n\nexport const variableAccessCapabilities = (\n access: VariableAccess,\n): ReadonlyArray<VariableCapability> => {\n switch (access) {\n case \"read\":\n return [\"read\"];\n case \"write\":\n return [\"write\"];\n case \"readWrite\":\n return [\"read\", \"write\"];\n }\n};\n\nexport const hasAccess = (\n accessLevel: number,\n capability: VariableCapability,\n) => {\n const flag =\n capability === \"read\"\n ? AccessLevelFlag.CurrentRead\n : AccessLevelFlag.CurrentWrite;\n return (accessLevel & flag) !== 0;\n};\n\nexport const variableMetadataFromRaw = (input: {\n readonly nodeId: NodeIdString;\n readonly dataTypeNodeId: NodeId;\n readonly builtInDataType: DataType;\n readonly valueRank: number;\n readonly arrayDimensions?: ReadonlyArray<number>;\n readonly accessLevel: number;\n readonly userAccessLevel?: number;\n}): VariableMetadata => ({\n nodeId: input.nodeId,\n declaredDataType: normalizeNodeId(input.dataTypeNodeId),\n builtInDataType:\n DataType[input.builtInDataType] ?? String(input.builtInDataType),\n valueRank: input.valueRank,\n arrayDimensions: input.arrayDimensions,\n accessLevel: input.accessLevel,\n userAccessLevel: input.userAccessLevel,\n access: {\n readable: hasAccess(input.accessLevel, \"read\"),\n writable: hasAccess(input.accessLevel, \"write\"),\n userReadable:\n input.userAccessLevel === undefined ||\n hasAccess(input.userAccessLevel, \"read\"),\n userWritable:\n input.userAccessLevel === undefined ||\n hasAccess(input.userAccessLevel, \"write\"),\n },\n unsafeRaw: {\n declaredDataType: input.dataTypeNodeId,\n builtInDataType: input.builtInDataType,\n },\n});\n\nexport const codecMetadata = (metadata: VariableMetadata) => ({\n nodeId: metadata.nodeId,\n valueRank: metadata.valueRank,\n arrayDimensions: metadata.arrayDimensions,\n raw: {\n declaredDataType: metadata.unsafeRaw.declaredDataType,\n builtInDataType: metadata.unsafeRaw.builtInDataType,\n },\n});\n\nconst sampleBase = <Id extends string>(\n nodeId: Id,\n dataValue: DataValue,\n includeRaw: boolean,\n) => ({\n nodeId,\n status: normalizeStatusCode(dataValue.statusCode),\n sourceTimestamp: normalizeTimestamp(dataValue.sourceTimestamp),\n serverTimestamp: normalizeTimestamp(dataValue.serverTimestamp),\n variant: dataValue.value ? normalizeVariantInfo(dataValue.value) : undefined,\n unsafeRaw: includeRaw\n ? {\n dataValue,\n variant: dataValue.value,\n }\n : undefined,\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { AccessLevelFlag, Argument, AttributeIds, BrowseDirection, BrowseResult, ClientMonitoredItemGroup, ClientSession, ClientSubscription, DataType, DataValue, ExpandedNodeId, NodeClass, NodeClassMask, NodeId, OPCUAClient, OPCUAClientOptions, ReadValueIdOptions, ReferenceDescription, ResultMask, StatusCode, StatusCodes, TimestampsToReturn, UserIdentityInfo, UserTokenType, Variant, VariantArrayType, coerceNodeId, makeNodeClassMask, makeResultMask } from "node-opcua";
|
|
2
|
+
export { AccessLevelFlag, type Argument, AttributeIds, BrowseDirection, type BrowseResult, type ClientMonitoredItemGroup, type ClientSession, type ClientSubscription, DataType, type DataValue, type ExpandedNodeId, NodeClass, NodeClassMask, type NodeId, type OPCUAClient, type OPCUAClientOptions, type ReadValueIdOptions, type ReferenceDescription, ResultMask, type StatusCode, StatusCodes, TimestampsToReturn, type UserIdentityInfo, UserTokenType, Variant, VariantArrayType, coerceNodeId, makeNodeClassMask, makeResultMask };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { AccessLevelFlag, AttributeIds, BrowseDirection, DataType, NodeClass, NodeClassMask, ResultMask, StatusCodes, TimestampsToReturn, UserTokenType, Variant, VariantArrayType, coerceNodeId, makeNodeClassMask, makeResultMask } from "node-opcua";
|
|
2
|
+
|
|
3
|
+
export { AccessLevelFlag, AttributeIds, BrowseDirection, DataType, NodeClass, NodeClassMask, ResultMask, StatusCodes, TimestampsToReturn, UserTokenType, Variant, VariantArrayType, coerceNodeId, makeNodeClassMask, makeResultMask };
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@effect-opcua/client",
|
|
3
|
+
"version": "0.1.0-alpha.1",
|
|
4
|
+
"description": "Effect-native OPC-UA client wrapper for node-opcua",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"type": "module",
|
|
8
|
+
"files": [
|
|
9
|
+
"LICENSE",
|
|
10
|
+
"README.md",
|
|
11
|
+
"dist",
|
|
12
|
+
"package.json"
|
|
13
|
+
],
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=22"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/bastikohn/effect-opcua.git",
|
|
20
|
+
"directory": "packages/client"
|
|
21
|
+
},
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/bastikohn/effect-opcua/issues"
|
|
24
|
+
},
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public"
|
|
27
|
+
},
|
|
28
|
+
"exports": {
|
|
29
|
+
".": {
|
|
30
|
+
"types": "./dist/index.d.mts",
|
|
31
|
+
"default": "./dist/index.mjs"
|
|
32
|
+
},
|
|
33
|
+
"./node-opcua": {
|
|
34
|
+
"types": "./dist/node-opcua.d.mts",
|
|
35
|
+
"default": "./dist/node-opcua.mjs"
|
|
36
|
+
},
|
|
37
|
+
"./package.json": "./package.json",
|
|
38
|
+
"./internal/*": null
|
|
39
|
+
},
|
|
40
|
+
"main": "./dist/index.mjs",
|
|
41
|
+
"module": "./dist/index.mjs",
|
|
42
|
+
"types": "./dist/index.d.mts",
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsdown --config-loader unrun",
|
|
45
|
+
"dev": "tsdown --watch --config-loader unrun",
|
|
46
|
+
"typecheck": "tsc --noEmit --project tsconfig.json",
|
|
47
|
+
"test": "vitest run --passWithNoTests",
|
|
48
|
+
"clean": "rm -rf dist coverage node_modules"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"effect": "4.0.0-beta.79"
|
|
52
|
+
},
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"node-opcua": "^2.170.0"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {}
|
|
57
|
+
}
|