@truenas/api-client 1.0.2 → 1.0.4
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 +1265 -1427
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4207 -7685
- package/dist/index.d.ts +4207 -7685
- package/dist/index.js +1266 -1425
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -865,1172 +865,6 @@ var makeConnectionError = (message, hostname) => ({
|
|
|
865
865
|
});
|
|
866
866
|
var closedConnection = { state: "closed" };
|
|
867
867
|
|
|
868
|
-
// src/config/api-version.config.ts
|
|
869
|
-
var apiVersionConfig = {
|
|
870
|
-
/**
|
|
871
|
-
* Minimum supported API version.
|
|
872
|
-
* Systems with older API versions will be rejected.
|
|
873
|
-
*/
|
|
874
|
-
MIN_SUPPORTED_VERSION: "v25.10.0",
|
|
875
|
-
/**
|
|
876
|
-
* Maximum supported API version.
|
|
877
|
-
* Systems with newer API versions will be rejected.
|
|
878
|
-
*/
|
|
879
|
-
MAX_SUPPORTED_VERSION: "v26.0.0",
|
|
880
|
-
/**
|
|
881
|
-
* Fallback version to use when version discovery fails due to CORS/network errors.
|
|
882
|
-
* When /api/versions returns HTTP status 0 (CORS block, network down, etc.),
|
|
883
|
-
* the system will attempt to connect using this version as a best-effort fallback.
|
|
884
|
-
*
|
|
885
|
-
* WARNING: Status 0 errors have multiple causes:
|
|
886
|
-
* - CORS policy blocking the request
|
|
887
|
-
* - Network disconnected
|
|
888
|
-
* - DNS lookup failure
|
|
889
|
-
* - Server unreachable
|
|
890
|
-
*
|
|
891
|
-
* Using this fallback means systems with genuine network issues will still
|
|
892
|
-
* attempt connection (and fail during WebSocket handshake instead of immediately).
|
|
893
|
-
*/
|
|
894
|
-
FALLBACK_VERSION: "v25.10.0"
|
|
895
|
-
};
|
|
896
|
-
|
|
897
|
-
// src/types/api-version.type.ts
|
|
898
|
-
var VersionCompatibility = /* @__PURE__ */ ((VersionCompatibility2) => {
|
|
899
|
-
VersionCompatibility2["Compatible"] = "compatible";
|
|
900
|
-
VersionCompatibility2["TooOld"] = "too-old";
|
|
901
|
-
VersionCompatibility2["TooNew"] = "too-new";
|
|
902
|
-
VersionCompatibility2["Invalid"] = "invalid";
|
|
903
|
-
return VersionCompatibility2;
|
|
904
|
-
})(VersionCompatibility || {});
|
|
905
|
-
|
|
906
|
-
// src/utils/api-version.utils.ts
|
|
907
|
-
var legacyCutoffYear = 25;
|
|
908
|
-
function parseApiVersion(versionString) {
|
|
909
|
-
const regex = /^v(\d{2})\.(\d+)\.(\d+)$/;
|
|
910
|
-
const match = versionString.match(regex);
|
|
911
|
-
if (!match) {
|
|
912
|
-
return null;
|
|
913
|
-
}
|
|
914
|
-
const [, yearStr, minorStr, patchStr] = match;
|
|
915
|
-
const year = parseInt(yearStr, 10);
|
|
916
|
-
const minor = parseInt(minorStr, 10);
|
|
917
|
-
const patch = parseInt(patchStr, 10);
|
|
918
|
-
if (year <= legacyCutoffYear) {
|
|
919
|
-
if (minor < 1 || minor > 12) {
|
|
920
|
-
return null;
|
|
921
|
-
}
|
|
922
|
-
} else if (year >= 26) {
|
|
923
|
-
if (minor < 0 || minor > 99) {
|
|
924
|
-
return null;
|
|
925
|
-
}
|
|
926
|
-
}
|
|
927
|
-
return {
|
|
928
|
-
version: versionString,
|
|
929
|
-
year,
|
|
930
|
-
minor,
|
|
931
|
-
patch,
|
|
932
|
-
websocketPath: `/api/${versionString}`
|
|
933
|
-
};
|
|
934
|
-
}
|
|
935
|
-
function compareVersions(a, b) {
|
|
936
|
-
if (a.year !== b.year) {
|
|
937
|
-
return a.year - b.year;
|
|
938
|
-
}
|
|
939
|
-
if (a.minor !== b.minor) {
|
|
940
|
-
return a.minor - b.minor;
|
|
941
|
-
}
|
|
942
|
-
return a.patch - b.patch;
|
|
943
|
-
}
|
|
944
|
-
function checkVersionCompatibility(version) {
|
|
945
|
-
const minVersion = parseApiVersion(apiVersionConfig.MIN_SUPPORTED_VERSION);
|
|
946
|
-
const maxVersion = parseApiVersion(apiVersionConfig.MAX_SUPPORTED_VERSION);
|
|
947
|
-
if (!minVersion || !maxVersion) {
|
|
948
|
-
return "invalid" /* Invalid */;
|
|
949
|
-
}
|
|
950
|
-
if (compareVersions(version, minVersion) < 0) {
|
|
951
|
-
return "too-old" /* TooOld */;
|
|
952
|
-
}
|
|
953
|
-
if (compareVersions(version, maxVersion) > 0) {
|
|
954
|
-
return "too-new" /* TooNew */;
|
|
955
|
-
}
|
|
956
|
-
return "compatible" /* Compatible */;
|
|
957
|
-
}
|
|
958
|
-
function isVersionSupported(version) {
|
|
959
|
-
return checkVersionCompatibility(version) === "compatible" /* Compatible */;
|
|
960
|
-
}
|
|
961
|
-
function filterCompatibleVersions(versions) {
|
|
962
|
-
return versions.filter(isVersionSupported);
|
|
963
|
-
}
|
|
964
|
-
function getWebSocketPath(version) {
|
|
965
|
-
return version.websocketPath;
|
|
966
|
-
}
|
|
967
|
-
|
|
968
|
-
// src/client/truenas-api-client.ts
|
|
969
|
-
var TrueNasApiClient = class {
|
|
970
|
-
constructor(uuid, hostnames, version, enabled, systemName, logger = noopLogger) {
|
|
971
|
-
this.uuid = uuid;
|
|
972
|
-
this.hostnames = hostnames;
|
|
973
|
-
this.version = version;
|
|
974
|
-
this.enabled = enabled;
|
|
975
|
-
this.systemName = systemName;
|
|
976
|
-
this.logger = logger;
|
|
977
|
-
this.connection = this.createConnection();
|
|
978
|
-
this.authenticator = this.createAuthenticator();
|
|
979
|
-
this.api = this.createApi();
|
|
980
|
-
this.ops = this.createOperations();
|
|
981
|
-
}
|
|
982
|
-
/**
|
|
983
|
-
* Get current connection status.
|
|
984
|
-
* @returns true if WebSocket is connected
|
|
985
|
-
*/
|
|
986
|
-
get connected() {
|
|
987
|
-
return this.connection.opened.getValue();
|
|
988
|
-
}
|
|
989
|
-
/**
|
|
990
|
-
* Get current authentication status.
|
|
991
|
-
* @returns true if authenticated with the system
|
|
992
|
-
*/
|
|
993
|
-
get authenticated() {
|
|
994
|
-
return this.authenticator.authenticated$.getValue();
|
|
995
|
-
}
|
|
996
|
-
/**
|
|
997
|
-
* Close the WebSocket connection.
|
|
998
|
-
* Connection will automatically retry if retry is enabled.
|
|
999
|
-
*/
|
|
1000
|
-
close() {
|
|
1001
|
-
this.connection.close();
|
|
1002
|
-
}
|
|
1003
|
-
/**
|
|
1004
|
-
* Factory method to create the WebSocket connection.
|
|
1005
|
-
* Override in subclasses to provide version-specific connection handling.
|
|
1006
|
-
*/
|
|
1007
|
-
createConnection() {
|
|
1008
|
-
const websocketPath = getWebSocketPath(this.version);
|
|
1009
|
-
return new TrueNasConnection(
|
|
1010
|
-
this.enabled,
|
|
1011
|
-
this.hostnames,
|
|
1012
|
-
this.uuid,
|
|
1013
|
-
websocketPath,
|
|
1014
|
-
this.systemName,
|
|
1015
|
-
void 0,
|
|
1016
|
-
// retryDelay (use default)
|
|
1017
|
-
void 0,
|
|
1018
|
-
// maxRetry (use default)
|
|
1019
|
-
this.logger
|
|
1020
|
-
);
|
|
1021
|
-
}
|
|
1022
|
-
/**
|
|
1023
|
-
* Factory method to create the API handler.
|
|
1024
|
-
* Override in subclasses to provide version-specific API implementations.
|
|
1025
|
-
*/
|
|
1026
|
-
createApi() {
|
|
1027
|
-
return new TrueNasApi(this.authenticator.authenticated$, this.connection);
|
|
1028
|
-
}
|
|
1029
|
-
/**
|
|
1030
|
-
* Factory method to create the authenticator.
|
|
1031
|
-
* Override in subclasses to provide version-specific authentication.
|
|
1032
|
-
*/
|
|
1033
|
-
createAuthenticator() {
|
|
1034
|
-
return new TrueNasAuthenticator(this.connection);
|
|
1035
|
-
}
|
|
1036
|
-
};
|
|
1037
|
-
|
|
1038
|
-
// src/client/truenas-api-client-v25-10.ts
|
|
1039
|
-
var TrueNasApiClientV2510 = class extends TrueNasApiClient {
|
|
1040
|
-
/**
|
|
1041
|
-
* Create v25.10-specific operation mappings
|
|
1042
|
-
*
|
|
1043
|
-
* virt.instance.* APIs return boolean (true) but emit job events via websocket.
|
|
1044
|
-
* We use callAndGetJobId to capture the job ID, then track the job.
|
|
1045
|
-
* All operations emit Job updates until the operation completes.
|
|
1046
|
-
*/
|
|
1047
|
-
createOperations() {
|
|
1048
|
-
return {
|
|
1049
|
-
containerQuery: () => this.api.call("virt.instance.query" /* VirtualInstanceQuery */, [
|
|
1050
|
-
[["type", "=", "CONTAINER" /* Container */]]
|
|
1051
|
-
]).pipe(map((instances) => instances.map(this.toContainer))),
|
|
1052
|
-
containerStart: (id) => this.api.callAndGetJobId("virt.instance.start" /* VirtualInstanceStart */, [id]).pipe(switchMap((jobId) => this.api.trackJob(jobId))),
|
|
1053
|
-
containerStop: (id, options) => this.api.callAndGetJobId("virt.instance.stop" /* VirtualInstanceStop */, [id, options]).pipe(switchMap((jobId) => this.api.trackJob(jobId))),
|
|
1054
|
-
containerRestart: (id, options) => this.api.callAndGetJobId("virt.instance.restart" /* VirtualInstanceRestart */, [
|
|
1055
|
-
id,
|
|
1056
|
-
options
|
|
1057
|
-
]).pipe(switchMap((jobId) => this.api.trackJob(jobId)))
|
|
1058
|
-
};
|
|
1059
|
-
}
|
|
1060
|
-
/**
|
|
1061
|
-
* Transform VirtualInstanceQuery to unified Container type
|
|
1062
|
-
*/
|
|
1063
|
-
toContainer(instance) {
|
|
1064
|
-
return {
|
|
1065
|
-
id: instance.id,
|
|
1066
|
-
name: instance.name,
|
|
1067
|
-
status: instance.status,
|
|
1068
|
-
autostart: instance.autostart,
|
|
1069
|
-
cpu: instance.cpu,
|
|
1070
|
-
memory: instance.memory,
|
|
1071
|
-
image: instance.image
|
|
1072
|
-
};
|
|
1073
|
-
}
|
|
1074
|
-
};
|
|
1075
|
-
var TrueNasApiClientV26 = class _TrueNasApiClientV26 extends TrueNasApiClient {
|
|
1076
|
-
/**
|
|
1077
|
-
* Map v26 status state string to AppState enum
|
|
1078
|
-
*/
|
|
1079
|
-
static mapStatus(state) {
|
|
1080
|
-
switch (state.toUpperCase()) {
|
|
1081
|
-
case "RUNNING":
|
|
1082
|
-
return "RUNNING" /* Running */;
|
|
1083
|
-
case "STOPPED":
|
|
1084
|
-
return "STOPPED" /* Stopped */;
|
|
1085
|
-
case "STOPPING":
|
|
1086
|
-
return "STOPPING" /* Stopping */;
|
|
1087
|
-
default:
|
|
1088
|
-
return "STOPPED" /* Stopped */;
|
|
1089
|
-
}
|
|
1090
|
-
}
|
|
1091
|
-
/**
|
|
1092
|
-
* Create v26-specific operation mappings
|
|
1093
|
-
*
|
|
1094
|
-
* Operations return Observable<Job | null>:
|
|
1095
|
-
* - Async operations emit Job updates until complete
|
|
1096
|
-
* - Sync operations emit null once
|
|
1097
|
-
*/
|
|
1098
|
-
createOperations() {
|
|
1099
|
-
return {
|
|
1100
|
-
containerQuery: () => this.api.call("container.query" /* ContainerQuery */, [[]]).pipe(map((containers) => containers.map(this.toContainer))),
|
|
1101
|
-
// container.start is synchronous in v26.0.0 - emit null
|
|
1102
|
-
containerStart: (id) => this.api.call("container.start" /* ContainerStart */, [parseInt(id, 10)]).pipe(map(() => null)),
|
|
1103
|
-
// container.stop emits job updates
|
|
1104
|
-
containerStop: (id, options) => this.api.callAndGetJobId("container.stop" /* ContainerStop */, [
|
|
1105
|
-
parseInt(id, 10),
|
|
1106
|
-
{
|
|
1107
|
-
force: options.force,
|
|
1108
|
-
force_after_timeout: options.force
|
|
1109
|
-
}
|
|
1110
|
-
]).pipe(switchMap((jobId) => this.api.trackJob(jobId))),
|
|
1111
|
-
// v26.0.0 doesn't have container.restart - chain stop + start
|
|
1112
|
-
// Emits Job updates during stop, then null when start completes
|
|
1113
|
-
containerRestart: (id, options) => {
|
|
1114
|
-
const numericId = parseInt(id, 10);
|
|
1115
|
-
return this.api.callAndGetJobId("container.stop" /* ContainerStop */, [
|
|
1116
|
-
numericId,
|
|
1117
|
-
{
|
|
1118
|
-
force: options.force,
|
|
1119
|
-
force_after_timeout: options.force
|
|
1120
|
-
}
|
|
1121
|
-
]).pipe(
|
|
1122
|
-
// Track stop job until it completes
|
|
1123
|
-
switchMap((stopJobId) => this.api.trackJob(stopJobId)),
|
|
1124
|
-
// Collect all job updates to ensure stop fully completes
|
|
1125
|
-
toArray(),
|
|
1126
|
-
// Re-emit job updates, then call start after stop is done
|
|
1127
|
-
switchMap(
|
|
1128
|
-
(jobUpdates) => concat(
|
|
1129
|
-
from(jobUpdates),
|
|
1130
|
-
this.api.call("container.start" /* ContainerStart */, [numericId]).pipe(map(() => null))
|
|
1131
|
-
)
|
|
1132
|
-
)
|
|
1133
|
-
);
|
|
1134
|
-
}
|
|
1135
|
-
};
|
|
1136
|
-
}
|
|
1137
|
-
/**
|
|
1138
|
-
* Transform v26 ContainerQueryV26 to unified Container type
|
|
1139
|
-
*/
|
|
1140
|
-
toContainer(container) {
|
|
1141
|
-
return {
|
|
1142
|
-
id: container.id.toString(),
|
|
1143
|
-
name: container.name,
|
|
1144
|
-
status: _TrueNasApiClientV26.mapStatus(container.status.state),
|
|
1145
|
-
autostart: container.autostart,
|
|
1146
|
-
description: container.description
|
|
1147
|
-
// cpu and memory are not available in v26 container.query
|
|
1148
|
-
// image is not available in v26 container.query
|
|
1149
|
-
};
|
|
1150
|
-
}
|
|
1151
|
-
};
|
|
1152
|
-
|
|
1153
|
-
// src/errors/version-discovery.errors.ts
|
|
1154
|
-
var VersionDiscoveryError = class extends Error {
|
|
1155
|
-
constructor(message, hostname) {
|
|
1156
|
-
super(message);
|
|
1157
|
-
this.hostname = hostname;
|
|
1158
|
-
this.name = this.constructor.name;
|
|
1159
|
-
Object.setPrototypeOf(this, new.target.prototype);
|
|
1160
|
-
}
|
|
1161
|
-
};
|
|
1162
|
-
var VersionTooOldError = class extends VersionDiscoveryError {
|
|
1163
|
-
constructor(hostname, availableVersions, minRequired = apiVersionConfig.MIN_SUPPORTED_VERSION) {
|
|
1164
|
-
super(
|
|
1165
|
-
`System API version is too old. Minimum supported: ${minRequired}. Available versions: ${availableVersions.join(
|
|
1166
|
-
", "
|
|
1167
|
-
)}`,
|
|
1168
|
-
hostname
|
|
1169
|
-
);
|
|
1170
|
-
this.availableVersions = availableVersions;
|
|
1171
|
-
this.minRequired = minRequired;
|
|
1172
|
-
}
|
|
1173
|
-
};
|
|
1174
|
-
var VersionTooNewError = class extends VersionDiscoveryError {
|
|
1175
|
-
constructor(hostname, availableVersions, maxSupported = apiVersionConfig.MAX_SUPPORTED_VERSION) {
|
|
1176
|
-
super(
|
|
1177
|
-
`System API version is too new. Maximum supported: ${maxSupported}. Available versions: ${availableVersions.join(
|
|
1178
|
-
", "
|
|
1179
|
-
)}`,
|
|
1180
|
-
hostname
|
|
1181
|
-
);
|
|
1182
|
-
this.availableVersions = availableVersions;
|
|
1183
|
-
this.maxSupported = maxSupported;
|
|
1184
|
-
}
|
|
1185
|
-
};
|
|
1186
|
-
var VersionEndpointNotFoundError = class extends VersionDiscoveryError {
|
|
1187
|
-
constructor(hostname, statusCode = 404) {
|
|
1188
|
-
super(
|
|
1189
|
-
`Version discovery endpoint not found: ${hostname} (HTTP ${String(
|
|
1190
|
-
statusCode
|
|
1191
|
-
)})`,
|
|
1192
|
-
hostname
|
|
1193
|
-
);
|
|
1194
|
-
this.statusCode = statusCode;
|
|
1195
|
-
}
|
|
1196
|
-
};
|
|
1197
|
-
var VersionDiscoveryTimeoutError = class extends VersionDiscoveryError {
|
|
1198
|
-
constructor(hostname, timeoutMs = 5e3) {
|
|
1199
|
-
super(
|
|
1200
|
-
`Cannot connect to system (timeout after ${String(
|
|
1201
|
-
timeoutMs
|
|
1202
|
-
)}ms): ${hostname}`,
|
|
1203
|
-
hostname
|
|
1204
|
-
);
|
|
1205
|
-
this.timeoutMs = timeoutMs;
|
|
1206
|
-
}
|
|
1207
|
-
};
|
|
1208
|
-
var VersionDiscoveryNetworkError = class extends VersionDiscoveryError {
|
|
1209
|
-
constructor(hostname, originalError) {
|
|
1210
|
-
super(
|
|
1211
|
-
`Network error connecting to ${hostname}: ${originalError.message}`,
|
|
1212
|
-
hostname
|
|
1213
|
-
);
|
|
1214
|
-
this.originalError = originalError;
|
|
1215
|
-
}
|
|
1216
|
-
};
|
|
1217
|
-
var NoCompatibleVersionsError = class extends VersionDiscoveryError {
|
|
1218
|
-
constructor(hostname, availableVersions, supportedRange = {
|
|
1219
|
-
min: apiVersionConfig.MIN_SUPPORTED_VERSION,
|
|
1220
|
-
max: apiVersionConfig.MAX_SUPPORTED_VERSION
|
|
1221
|
-
}) {
|
|
1222
|
-
super(
|
|
1223
|
-
`No compatible API versions available. Supported: ${supportedRange.min} to ${supportedRange.max}. Available: ${availableVersions.join(", ")}`,
|
|
1224
|
-
hostname
|
|
1225
|
-
);
|
|
1226
|
-
this.availableVersions = availableVersions;
|
|
1227
|
-
this.supportedRange = supportedRange;
|
|
1228
|
-
}
|
|
1229
|
-
};
|
|
1230
|
-
var InvalidVersionResponseError = class extends VersionDiscoveryError {
|
|
1231
|
-
constructor(hostname, reason) {
|
|
1232
|
-
super(`Invalid API response format from ${hostname}: ${reason}`, hostname);
|
|
1233
|
-
this.reason = reason;
|
|
1234
|
-
}
|
|
1235
|
-
};
|
|
1236
|
-
var discoveryTimeoutMs = 5e3;
|
|
1237
|
-
function hasErrorName(error, expected) {
|
|
1238
|
-
return typeof error === "object" && error !== null && "name" in error && error.name === expected;
|
|
1239
|
-
}
|
|
1240
|
-
var VersionDiscovery = class {
|
|
1241
|
-
constructor(logger = noopLogger) {
|
|
1242
|
-
this.logger = logger;
|
|
1243
|
-
this.versionCache = /* @__PURE__ */ new Map();
|
|
1244
|
-
}
|
|
1245
|
-
/**
|
|
1246
|
-
* Discovers the API version for a given hostname.
|
|
1247
|
-
*
|
|
1248
|
-
* Makes a GET request to `https://{hostname}/api/versions` and returns the latest
|
|
1249
|
-
* compatible version. Results are cached per hostname; the cache entry is removed
|
|
1250
|
-
* on failure so the next call retries.
|
|
1251
|
-
*
|
|
1252
|
-
* @param hostname - The TrueNAS system hostname (e.g., "truenas.local")
|
|
1253
|
-
* @returns Observable that emits the selected ApiVersion
|
|
1254
|
-
* @throws VersionDiscoveryError subclasses for specific failure scenarios
|
|
1255
|
-
*/
|
|
1256
|
-
discoverVersion(hostname) {
|
|
1257
|
-
const cached = this.versionCache.get(hostname);
|
|
1258
|
-
if (cached) {
|
|
1259
|
-
this.logger.info("Version discovery cache hit", { hostname });
|
|
1260
|
-
return cached;
|
|
1261
|
-
}
|
|
1262
|
-
const url = `https://${hostname}/api/versions`;
|
|
1263
|
-
this.logger.info("Starting version discovery", { hostname, url });
|
|
1264
|
-
const discovery$ = defer(() => from(this.fetchVersions(hostname))).pipe(
|
|
1265
|
-
map$1((versionStrings) => this.selectVersion(hostname, versionStrings)),
|
|
1266
|
-
catchError((error) => {
|
|
1267
|
-
this.versionCache.delete(hostname);
|
|
1268
|
-
this.logger.error("Version discovery failed", { hostname, error });
|
|
1269
|
-
return throwError(() => this.classify(error, hostname));
|
|
1270
|
-
}),
|
|
1271
|
-
shareReplay(1)
|
|
1272
|
-
);
|
|
1273
|
-
this.versionCache.set(hostname, discovery$);
|
|
1274
|
-
return discovery$;
|
|
1275
|
-
}
|
|
1276
|
-
/**
|
|
1277
|
-
* Clears the version cache for a specific hostname or all hostnames.
|
|
1278
|
-
*
|
|
1279
|
-
* @param hostname - Optional hostname to clear. If omitted, clears all cached versions.
|
|
1280
|
-
*/
|
|
1281
|
-
clearCache(hostname) {
|
|
1282
|
-
if (hostname) {
|
|
1283
|
-
this.versionCache.delete(hostname);
|
|
1284
|
-
} else {
|
|
1285
|
-
this.versionCache.clear();
|
|
1286
|
-
}
|
|
1287
|
-
}
|
|
1288
|
-
/**
|
|
1289
|
-
* Performs the `fetch` with a 5-second `AbortController` timeout and inspects the
|
|
1290
|
-
* *resolved* Response (fetch does not reject on non-2xx). Throws
|
|
1291
|
-
* `VersionEndpointNotFoundError` on 404 and `InvalidVersionResponseError` on any
|
|
1292
|
-
* other non-2xx or a body that is not an array of strings; lets `TypeError`
|
|
1293
|
-
* (network) and `AbortError` (timeout) bubble to `classify`.
|
|
1294
|
-
*
|
|
1295
|
-
* The element-type check matters: a reachable server returning an array of
|
|
1296
|
-
* non-strings (e.g. `[1, 2, 3]`) would otherwise reach `parseApiVersion`, whose
|
|
1297
|
-
* `.match()` throws a `TypeError` on a non-string — which `classify` would then
|
|
1298
|
-
* misfile as a network error. Validating here keeps it an `InvalidVersionResponseError`.
|
|
1299
|
-
*/
|
|
1300
|
-
async fetchVersions(hostname) {
|
|
1301
|
-
const url = `https://${hostname}/api/versions`;
|
|
1302
|
-
const controller = new AbortController();
|
|
1303
|
-
const timer2 = setTimeout(() => controller.abort(), discoveryTimeoutMs);
|
|
1304
|
-
try {
|
|
1305
|
-
const response = await fetch(url, { signal: controller.signal });
|
|
1306
|
-
if (response.status === 404) {
|
|
1307
|
-
throw new VersionEndpointNotFoundError(hostname);
|
|
1308
|
-
}
|
|
1309
|
-
if (!response.ok) {
|
|
1310
|
-
throw new InvalidVersionResponseError(
|
|
1311
|
-
hostname,
|
|
1312
|
-
`HTTP ${String(response.status)}`
|
|
1313
|
-
);
|
|
1314
|
-
}
|
|
1315
|
-
const body = await response.json();
|
|
1316
|
-
if (!Array.isArray(body) || !body.every((v) => typeof v === "string")) {
|
|
1317
|
-
throw new InvalidVersionResponseError(
|
|
1318
|
-
hostname,
|
|
1319
|
-
"Response was not an array of version strings"
|
|
1320
|
-
);
|
|
1321
|
-
}
|
|
1322
|
-
return body;
|
|
1323
|
-
} finally {
|
|
1324
|
-
clearTimeout(timer2);
|
|
1325
|
-
}
|
|
1326
|
-
}
|
|
1327
|
-
/**
|
|
1328
|
-
* Parses, filters, and selects the latest compatible version from the raw response
|
|
1329
|
-
* array. Throws the appropriate typed error when no valid/compatible version exists.
|
|
1330
|
-
*/
|
|
1331
|
-
selectVersion(hostname, versionStrings) {
|
|
1332
|
-
this.logger.info("Version discovery response received", {
|
|
1333
|
-
hostname,
|
|
1334
|
-
versionCount: versionStrings.length,
|
|
1335
|
-
versions: versionStrings
|
|
1336
|
-
});
|
|
1337
|
-
const parsedVersions = versionStrings.map(parseApiVersion).filter((v) => v !== null);
|
|
1338
|
-
if (parsedVersions.length === 0) {
|
|
1339
|
-
this.logger.error("No valid versions in response", {
|
|
1340
|
-
hostname,
|
|
1341
|
-
versionStrings
|
|
1342
|
-
});
|
|
1343
|
-
throw new InvalidVersionResponseError(
|
|
1344
|
-
hostname,
|
|
1345
|
-
"No valid API versions found in response"
|
|
1346
|
-
);
|
|
1347
|
-
}
|
|
1348
|
-
const compatibleVersions = filterCompatibleVersions(parsedVersions);
|
|
1349
|
-
this.logger.info("Version compatibility check", {
|
|
1350
|
-
hostname,
|
|
1351
|
-
total: parsedVersions.length,
|
|
1352
|
-
compatible: compatibleVersions.length,
|
|
1353
|
-
supportedRange: {
|
|
1354
|
-
min: apiVersionConfig.MIN_SUPPORTED_VERSION,
|
|
1355
|
-
max: apiVersionConfig.MAX_SUPPORTED_VERSION
|
|
1356
|
-
}
|
|
1357
|
-
});
|
|
1358
|
-
if (compatibleVersions.length === 0) {
|
|
1359
|
-
const allTooOld = parsedVersions.every(
|
|
1360
|
-
(v) => checkVersionCompatibility(v) === "too-old" /* TooOld */
|
|
1361
|
-
);
|
|
1362
|
-
const allTooNew = parsedVersions.every(
|
|
1363
|
-
(v) => checkVersionCompatibility(v) === "too-new" /* TooNew */
|
|
1364
|
-
);
|
|
1365
|
-
const availableVersions = parsedVersions.map((v) => v.version);
|
|
1366
|
-
if (allTooOld) {
|
|
1367
|
-
this.logger.warn("All available versions too old", {
|
|
1368
|
-
hostname,
|
|
1369
|
-
availableVersions
|
|
1370
|
-
});
|
|
1371
|
-
throw new VersionTooOldError(hostname, availableVersions);
|
|
1372
|
-
} else if (allTooNew) {
|
|
1373
|
-
this.logger.warn("All available versions too new", {
|
|
1374
|
-
hostname,
|
|
1375
|
-
availableVersions
|
|
1376
|
-
});
|
|
1377
|
-
throw new VersionTooNewError(hostname, availableVersions);
|
|
1378
|
-
} else {
|
|
1379
|
-
this.logger.warn("No compatible versions found", {
|
|
1380
|
-
hostname,
|
|
1381
|
-
availableVersions
|
|
1382
|
-
});
|
|
1383
|
-
throw new NoCompatibleVersionsError(hostname, availableVersions);
|
|
1384
|
-
}
|
|
1385
|
-
}
|
|
1386
|
-
const sortedVersions = compatibleVersions.sort(
|
|
1387
|
-
(a, b) => compareVersions(b, a)
|
|
1388
|
-
);
|
|
1389
|
-
const selectedVersion = sortedVersions[0];
|
|
1390
|
-
this.logger.info("Version selected", {
|
|
1391
|
-
hostname,
|
|
1392
|
-
selected: selectedVersion.version,
|
|
1393
|
-
websocketPath: selectedVersion.websocketPath
|
|
1394
|
-
});
|
|
1395
|
-
return selectedVersion;
|
|
1396
|
-
}
|
|
1397
|
-
/**
|
|
1398
|
-
* Maps a raw failure to a typed {@link VersionDiscoveryError}. Errors thrown by
|
|
1399
|
-
* `fetchVersions`/`selectVersion` are already typed and pass through unchanged; a
|
|
1400
|
-
* `fetch` `TypeError` becomes {@link VersionDiscoveryNetworkError} (the CORS/network
|
|
1401
|
-
* sentinel), an `AbortError` becomes {@link VersionDiscoveryTimeoutError}, and any
|
|
1402
|
-
* other failure (e.g. an unparseable body's `SyntaxError`) becomes
|
|
1403
|
-
* {@link InvalidVersionResponseError}.
|
|
1404
|
-
*/
|
|
1405
|
-
classify(error, hostname) {
|
|
1406
|
-
if (error instanceof VersionDiscoveryError) {
|
|
1407
|
-
return error;
|
|
1408
|
-
}
|
|
1409
|
-
if (hasErrorName(error, "AbortError")) {
|
|
1410
|
-
this.logger.warn("Version discovery timeout", { hostname });
|
|
1411
|
-
return new VersionDiscoveryTimeoutError(hostname);
|
|
1412
|
-
}
|
|
1413
|
-
if (error instanceof TypeError) {
|
|
1414
|
-
this.logger.warn("Version discovery network error", {
|
|
1415
|
-
hostname,
|
|
1416
|
-
message: error.message
|
|
1417
|
-
});
|
|
1418
|
-
return new VersionDiscoveryNetworkError(hostname, error);
|
|
1419
|
-
}
|
|
1420
|
-
const reason = error instanceof Error ? error.message : "Unknown error";
|
|
1421
|
-
this.logger.warn("Version discovery failed with unknown error", {
|
|
1422
|
-
hostname,
|
|
1423
|
-
reason
|
|
1424
|
-
});
|
|
1425
|
-
return new InvalidVersionResponseError(
|
|
1426
|
-
hostname,
|
|
1427
|
-
`Versioned API not available. This system may be running an older TrueNAS version (requires v25.10.0+). ${reason}`
|
|
1428
|
-
);
|
|
1429
|
-
}
|
|
1430
|
-
};
|
|
1431
|
-
|
|
1432
|
-
// src/factory.ts
|
|
1433
|
-
async function createTrueNasClient(opts) {
|
|
1434
|
-
const { uuid, hostnames, systemName } = opts;
|
|
1435
|
-
const logger = opts.logger ?? noopLogger;
|
|
1436
|
-
if (!hostnames || hostnames.length === 0) {
|
|
1437
|
-
throw new Error(
|
|
1438
|
-
`Cannot create client for system ${uuid}: hostnames array is empty`
|
|
1439
|
-
);
|
|
1440
|
-
}
|
|
1441
|
-
const primaryHostname = hostnames[0];
|
|
1442
|
-
const versionDiscovery = new VersionDiscovery(logger);
|
|
1443
|
-
logger.info("Creating versioned API client", {
|
|
1444
|
-
uuid: uuid.slice(0, 8),
|
|
1445
|
-
hostname: primaryHostname,
|
|
1446
|
-
systemName
|
|
1447
|
-
});
|
|
1448
|
-
let version;
|
|
1449
|
-
try {
|
|
1450
|
-
version = await firstValueFrom(
|
|
1451
|
-
versionDiscovery.discoverVersion(primaryHostname)
|
|
1452
|
-
);
|
|
1453
|
-
logger.info("API version discovered, instantiating client", {
|
|
1454
|
-
uuid: uuid.slice(0, 8),
|
|
1455
|
-
version: version.version,
|
|
1456
|
-
websocketPath: version.websocketPath
|
|
1457
|
-
});
|
|
1458
|
-
} catch (error) {
|
|
1459
|
-
const errorMessage = errorMessageOrDefault(error, "Unknown error");
|
|
1460
|
-
if (!(error instanceof VersionDiscoveryNetworkError)) {
|
|
1461
|
-
logger.error("Version discovery failed", {
|
|
1462
|
-
uuid: uuid.slice(0, 8),
|
|
1463
|
-
hostname: primaryHostname,
|
|
1464
|
-
error: errorMessage,
|
|
1465
|
-
errorType: error instanceof Error ? error.constructor.name : typeof error
|
|
1466
|
-
});
|
|
1467
|
-
throw error;
|
|
1468
|
-
}
|
|
1469
|
-
const fallbackVersionString = apiVersionConfig.FALLBACK_VERSION;
|
|
1470
|
-
const fallbackVersion = parseApiVersion(fallbackVersionString);
|
|
1471
|
-
if (!fallbackVersion) {
|
|
1472
|
-
logger.error("Invalid fallback version configuration", {
|
|
1473
|
-
uuid: uuid.slice(0, 8),
|
|
1474
|
-
hostname: primaryHostname,
|
|
1475
|
-
fallbackVersion: fallbackVersionString
|
|
1476
|
-
});
|
|
1477
|
-
throw error;
|
|
1478
|
-
}
|
|
1479
|
-
logger.warn(
|
|
1480
|
-
"Version discovery failed with a network error (possible CORS or network issue), falling back to assumed version",
|
|
1481
|
-
{
|
|
1482
|
-
uuid: uuid.slice(0, 8),
|
|
1483
|
-
hostname: primaryHostname,
|
|
1484
|
-
fallbackVersion: fallbackVersionString,
|
|
1485
|
-
originalError: errorMessage,
|
|
1486
|
-
warning: "A network error has multiple causes (CORS, network down, DNS failure). The connection may still fail during the WebSocket handshake."
|
|
1487
|
-
}
|
|
1488
|
-
);
|
|
1489
|
-
version = fallbackVersion;
|
|
1490
|
-
}
|
|
1491
|
-
return instantiateClientForVersion(version, opts, logger);
|
|
1492
|
-
}
|
|
1493
|
-
function instantiateClientForVersion(version, opts, logger) {
|
|
1494
|
-
const { uuid, hostnames, enabled, systemName } = opts;
|
|
1495
|
-
let versionKey;
|
|
1496
|
-
if (version.year <= legacyCutoffYear) {
|
|
1497
|
-
const monthPadded = version.minor.toString().padStart(2, "0");
|
|
1498
|
-
versionKey = `${version.year.toString()}.${monthPadded}`;
|
|
1499
|
-
} else {
|
|
1500
|
-
versionKey = version.year.toString();
|
|
1501
|
-
}
|
|
1502
|
-
switch (versionKey) {
|
|
1503
|
-
case "25.10":
|
|
1504
|
-
logger.info("Instantiating TrueNasApiClientV2510", {
|
|
1505
|
-
uuid: uuid.slice(0, 8),
|
|
1506
|
-
version: version.version,
|
|
1507
|
-
versionKey
|
|
1508
|
-
});
|
|
1509
|
-
return new TrueNasApiClientV2510(
|
|
1510
|
-
uuid,
|
|
1511
|
-
hostnames,
|
|
1512
|
-
version,
|
|
1513
|
-
enabled,
|
|
1514
|
-
systemName,
|
|
1515
|
-
logger
|
|
1516
|
-
);
|
|
1517
|
-
case "26":
|
|
1518
|
-
logger.info("Instantiating TrueNasApiClientV26", {
|
|
1519
|
-
uuid: uuid.slice(0, 8),
|
|
1520
|
-
version: version.version,
|
|
1521
|
-
versionKey
|
|
1522
|
-
});
|
|
1523
|
-
return new TrueNasApiClientV26(
|
|
1524
|
-
uuid,
|
|
1525
|
-
hostnames,
|
|
1526
|
-
version,
|
|
1527
|
-
enabled,
|
|
1528
|
-
systemName,
|
|
1529
|
-
logger
|
|
1530
|
-
);
|
|
1531
|
-
default:
|
|
1532
|
-
logger.error("No client implementation for version", {
|
|
1533
|
-
uuid: uuid.slice(0, 8),
|
|
1534
|
-
version: version.version,
|
|
1535
|
-
versionKey
|
|
1536
|
-
});
|
|
1537
|
-
throw new Error(
|
|
1538
|
-
`No client implementation for API version ${version.version}. Supported versions: v25.10.x, v26.x.y. Version key: ${versionKey}`
|
|
1539
|
-
);
|
|
1540
|
-
}
|
|
1541
|
-
}
|
|
1542
|
-
function errorMessageOrDefault(error, fallback) {
|
|
1543
|
-
if (error instanceof Error) {
|
|
1544
|
-
return error.message;
|
|
1545
|
-
}
|
|
1546
|
-
if (typeof error === "object" && error !== null && "message" in error && typeof error.message === "string") {
|
|
1547
|
-
return error.message;
|
|
1548
|
-
}
|
|
1549
|
-
return fallback;
|
|
1550
|
-
}
|
|
1551
|
-
|
|
1552
|
-
// src/generated/v25_04_0/index.ts
|
|
1553
|
-
var v25_04_0_exports = {};
|
|
1554
|
-
__export(v25_04_0_exports, {
|
|
1555
|
-
Acltype: () => Acltype,
|
|
1556
|
-
Action: () => Action,
|
|
1557
|
-
AppContainerDetailsStateInput: () => AppContainerDetailsStateInput,
|
|
1558
|
-
Authenticator: () => Authenticator,
|
|
1559
|
-
Authmethod: () => Authmethod,
|
|
1560
|
-
Basic: () => Basic,
|
|
1561
|
-
Blocksize: () => Blocksize,
|
|
1562
|
-
CloudBackupSnapshotItemType: () => CloudBackupSnapshotItemType,
|
|
1563
|
-
CloudTaskAttributesEncryptionInput: () => CloudTaskAttributesEncryptionInput,
|
|
1564
|
-
Credentials: () => Credentials,
|
|
1565
|
-
DeviceGetInfoOtherTypeInput: () => DeviceGetInfoOtherTypeInput,
|
|
1566
|
-
DockerStatusInfoStatusInput: () => DockerStatusInfoStatusInput,
|
|
1567
|
-
Enclosure2SetSlotStatusStatusInput: () => Enclosure2SetSlotStatusStatusInput,
|
|
1568
|
-
Encryption: () => Encryption,
|
|
1569
|
-
Endpoint: () => Endpoint,
|
|
1570
|
-
FilesystemDirEntryType: () => FilesystemDirEntryType,
|
|
1571
|
-
Function: () => Function,
|
|
1572
|
-
InitShutdownScriptCreateType: () => InitShutdownScriptCreateType,
|
|
1573
|
-
InitShutdownScriptCreateTypeInput: () => InitShutdownScriptCreateTypeInput,
|
|
1574
|
-
IscsiExtentCreateType: () => IscsiExtentCreateType,
|
|
1575
|
-
IscsiExtentCreateTypeInput: () => IscsiExtentCreateTypeInput,
|
|
1576
|
-
KeychainCredentialEntryType: () => KeychainCredentialEntryType,
|
|
1577
|
-
KeychainCredentialEntryTypeInput: () => KeychainCredentialEntryTypeInput,
|
|
1578
|
-
Level: () => Level,
|
|
1579
|
-
Mode: () => Mode,
|
|
1580
|
-
NFS4ACEType: () => NFS4ACEType,
|
|
1581
|
-
NFS4ACETypeInput: () => NFS4ACETypeInput,
|
|
1582
|
-
PoolScanStateInput: () => PoolScanStateInput,
|
|
1583
|
-
Rpm: () => Rpm,
|
|
1584
|
-
SMBEntryEncryptionInput: () => SMBEntryEncryptionInput,
|
|
1585
|
-
STIGType: () => STIGType,
|
|
1586
|
-
Source: () => Source,
|
|
1587
|
-
State: () => State,
|
|
1588
|
-
Status: () => Status,
|
|
1589
|
-
Tag: () => Tag,
|
|
1590
|
-
Unixcharset: () => Unixcharset,
|
|
1591
|
-
Username: () => Username,
|
|
1592
|
-
Vendor: () => Vendor,
|
|
1593
|
-
When: () => When,
|
|
1594
|
-
ZfsTierRewriteJobEntryStatusInput: () => ZfsTierRewriteJobEntryStatusInput
|
|
1595
|
-
});
|
|
1596
|
-
|
|
1597
|
-
// src/generated/v25_04_0/api-types.ts
|
|
1598
|
-
var Acltype = {
|
|
1599
|
-
Nfs4: "NFS4",
|
|
1600
|
-
Posix1e: "POSIX1E"
|
|
1601
|
-
};
|
|
1602
|
-
var Action = {
|
|
1603
|
-
Start: "START",
|
|
1604
|
-
Stop: "STOP",
|
|
1605
|
-
Pause: "PAUSE"
|
|
1606
|
-
};
|
|
1607
|
-
var AppContainerDetailsStateInput = {
|
|
1608
|
-
Crashed: "crashed",
|
|
1609
|
-
Created: "created",
|
|
1610
|
-
Exited: "exited",
|
|
1611
|
-
Running: "running",
|
|
1612
|
-
Starting: "starting"
|
|
1613
|
-
};
|
|
1614
|
-
var Authenticator = {
|
|
1615
|
-
Level1: "LEVEL_1",
|
|
1616
|
-
Level2: "LEVEL_2"
|
|
1617
|
-
};
|
|
1618
|
-
var Authmethod = {
|
|
1619
|
-
None: "NONE",
|
|
1620
|
-
Chap: "CHAP",
|
|
1621
|
-
ChapMutual: "CHAP_MUTUAL"
|
|
1622
|
-
};
|
|
1623
|
-
var Basic = {
|
|
1624
|
-
Inherit: "INHERIT",
|
|
1625
|
-
Noinherit: "NOINHERIT"
|
|
1626
|
-
};
|
|
1627
|
-
var Blocksize = {
|
|
1628
|
-
"512": 512,
|
|
1629
|
-
"1024": 1024,
|
|
1630
|
-
"2048": 2048,
|
|
1631
|
-
"4096": 4096
|
|
1632
|
-
};
|
|
1633
|
-
var CloudBackupSnapshotItemType = {
|
|
1634
|
-
Dir: "dir",
|
|
1635
|
-
File: "file"
|
|
1636
|
-
};
|
|
1637
|
-
var CloudTaskAttributesEncryptionInput = {
|
|
1638
|
-
Null: null,
|
|
1639
|
-
Aes256: "AES256"
|
|
1640
|
-
};
|
|
1641
|
-
var Credentials = {
|
|
1642
|
-
UnixSocket: "UNIX_SOCKET",
|
|
1643
|
-
LoginPassword: "LOGIN_PASSWORD",
|
|
1644
|
-
LoginTwofactor: "LOGIN_TWOFACTOR",
|
|
1645
|
-
LoginOnetimePassword: "LOGIN_ONETIME_PASSWORD",
|
|
1646
|
-
ApiKey: "API_KEY",
|
|
1647
|
-
Token: "TOKEN",
|
|
1648
|
-
TruenasNode: "TRUENAS_NODE"
|
|
1649
|
-
};
|
|
1650
|
-
var DeviceGetInfoOtherTypeInput = {
|
|
1651
|
-
Serial: "SERIAL",
|
|
1652
|
-
Gpu: "GPU"
|
|
1653
|
-
};
|
|
1654
|
-
var DockerStatusInfoStatusInput = {
|
|
1655
|
-
Pending: "PENDING",
|
|
1656
|
-
Running: "RUNNING",
|
|
1657
|
-
Stopped: "STOPPED",
|
|
1658
|
-
Initializing: "INITIALIZING",
|
|
1659
|
-
Stopping: "STOPPING",
|
|
1660
|
-
Unconfigured: "UNCONFIGURED",
|
|
1661
|
-
Failed: "FAILED",
|
|
1662
|
-
Migrating: "MIGRATING",
|
|
1663
|
-
MigrationFailed: "MIGRATION_FAILED"
|
|
1664
|
-
};
|
|
1665
|
-
var Enclosure2SetSlotStatusStatusInput = {
|
|
1666
|
-
Clear: "CLEAR",
|
|
1667
|
-
On: "ON",
|
|
1668
|
-
Off: "OFF"
|
|
1669
|
-
};
|
|
1670
|
-
var Encryption = {
|
|
1671
|
-
Default: "DEFAULT",
|
|
1672
|
-
Negotiate: "NEGOTIATE",
|
|
1673
|
-
Desired: "DESIRED",
|
|
1674
|
-
Required: "REQUIRED"
|
|
1675
|
-
};
|
|
1676
|
-
var Endpoint = {
|
|
1677
|
-
OvhEu: "ovh-eu",
|
|
1678
|
-
OvhCa: "ovh-ca",
|
|
1679
|
-
OvhUs: "ovh-us",
|
|
1680
|
-
KimsufiEu: "kimsufi-eu",
|
|
1681
|
-
KimsufiCa: "kimsufi-ca",
|
|
1682
|
-
SoyoustartEu: "soyoustart-eu",
|
|
1683
|
-
SoyoustartCa: "soyoustart-ca"
|
|
1684
|
-
};
|
|
1685
|
-
var FilesystemDirEntryType = {
|
|
1686
|
-
Directory: "DIRECTORY",
|
|
1687
|
-
File: "FILE",
|
|
1688
|
-
Symlink: "SYMLINK",
|
|
1689
|
-
Other: "OTHER"
|
|
1690
|
-
};
|
|
1691
|
-
var Function = {
|
|
1692
|
-
Resilver: "RESILVER",
|
|
1693
|
-
Scrub: "SCRUB"
|
|
1694
|
-
};
|
|
1695
|
-
var InitShutdownScriptCreateType = {
|
|
1696
|
-
Command: "COMMAND",
|
|
1697
|
-
Script: "SCRIPT"
|
|
1698
|
-
};
|
|
1699
|
-
var InitShutdownScriptCreateTypeInput = {
|
|
1700
|
-
Command: "COMMAND",
|
|
1701
|
-
Script: "SCRIPT"
|
|
1702
|
-
};
|
|
1703
|
-
var IscsiExtentCreateType = {
|
|
1704
|
-
Disk: "DISK",
|
|
1705
|
-
File: "FILE"
|
|
1706
|
-
};
|
|
1707
|
-
var IscsiExtentCreateTypeInput = {
|
|
1708
|
-
Disk: "DISK",
|
|
1709
|
-
File: "FILE"
|
|
1710
|
-
};
|
|
1711
|
-
var KeychainCredentialEntryType = {
|
|
1712
|
-
SshKeyPair: "SSH_KEY_PAIR",
|
|
1713
|
-
SshCredentials: "SSH_CREDENTIALS"
|
|
1714
|
-
};
|
|
1715
|
-
var KeychainCredentialEntryTypeInput = {
|
|
1716
|
-
SshKeyPair: "SSH_KEY_PAIR",
|
|
1717
|
-
SshCredentials: "SSH_CREDENTIALS"
|
|
1718
|
-
};
|
|
1719
|
-
var Level = {
|
|
1720
|
-
Info: "INFO",
|
|
1721
|
-
Notice: "NOTICE",
|
|
1722
|
-
Warning: "WARNING",
|
|
1723
|
-
Error: "ERROR",
|
|
1724
|
-
Critical: "CRITICAL",
|
|
1725
|
-
Alert: "ALERT",
|
|
1726
|
-
Emergency: "EMERGENCY"
|
|
1727
|
-
};
|
|
1728
|
-
var Mode = {
|
|
1729
|
-
Iscsi: "ISCSI",
|
|
1730
|
-
Fc: "FC",
|
|
1731
|
-
Both: "BOTH"
|
|
1732
|
-
};
|
|
1733
|
-
var NFS4ACEType = {
|
|
1734
|
-
Allow: "ALLOW",
|
|
1735
|
-
Deny: "DENY"
|
|
1736
|
-
};
|
|
1737
|
-
var NFS4ACETypeInput = {
|
|
1738
|
-
Allow: "ALLOW",
|
|
1739
|
-
Deny: "DENY"
|
|
1740
|
-
};
|
|
1741
|
-
var PoolScanStateInput = {
|
|
1742
|
-
Scanning: "SCANNING",
|
|
1743
|
-
Finished: "FINISHED",
|
|
1744
|
-
Canceled: "CANCELED"
|
|
1745
|
-
};
|
|
1746
|
-
var Rpm = {
|
|
1747
|
-
Unknown: "UNKNOWN",
|
|
1748
|
-
Ssd: "SSD",
|
|
1749
|
-
"5400": "5400",
|
|
1750
|
-
"7200": "7200",
|
|
1751
|
-
"10000": "10000",
|
|
1752
|
-
"15000": "15000"
|
|
1753
|
-
};
|
|
1754
|
-
var SMBEntryEncryptionInput = {
|
|
1755
|
-
Default: "DEFAULT",
|
|
1756
|
-
Negotiate: "NEGOTIATE",
|
|
1757
|
-
Desired: "DESIRED",
|
|
1758
|
-
Required: "REQUIRED"
|
|
1759
|
-
};
|
|
1760
|
-
var Source = {
|
|
1761
|
-
Local: "LOCAL",
|
|
1762
|
-
Activedirectory: "ACTIVEDIRECTORY",
|
|
1763
|
-
Ldap: "LDAP"
|
|
1764
|
-
};
|
|
1765
|
-
var State = {
|
|
1766
|
-
Crashed: "crashed",
|
|
1767
|
-
Created: "created",
|
|
1768
|
-
Exited: "exited",
|
|
1769
|
-
Running: "running",
|
|
1770
|
-
Starting: "starting"
|
|
1771
|
-
};
|
|
1772
|
-
var Status = {
|
|
1773
|
-
Pending: "PENDING",
|
|
1774
|
-
Running: "RUNNING",
|
|
1775
|
-
Stopped: "STOPPED",
|
|
1776
|
-
Initializing: "INITIALIZING",
|
|
1777
|
-
Stopping: "STOPPING",
|
|
1778
|
-
Unconfigured: "UNCONFIGURED",
|
|
1779
|
-
Failed: "FAILED"
|
|
1780
|
-
};
|
|
1781
|
-
var STIGType = {
|
|
1782
|
-
"0": 0,
|
|
1783
|
-
"1": 1
|
|
1784
|
-
};
|
|
1785
|
-
var Tag = {
|
|
1786
|
-
Owner: "owner@",
|
|
1787
|
-
Group: "group@",
|
|
1788
|
-
Everyone: "everyone@",
|
|
1789
|
-
User: "USER",
|
|
1790
|
-
"GROUP": "GROUP"
|
|
1791
|
-
};
|
|
1792
|
-
var Unixcharset = {
|
|
1793
|
-
Utf8: "UTF-8",
|
|
1794
|
-
Gb2312: "GB2312",
|
|
1795
|
-
HzGb2312: "HZ-GB-2312",
|
|
1796
|
-
Cp1361: "CP1361",
|
|
1797
|
-
Big5: "BIG5",
|
|
1798
|
-
Big5hkscs: "BIG5HKSCS",
|
|
1799
|
-
Cp037: "CP037",
|
|
1800
|
-
Cp273: "CP273",
|
|
1801
|
-
Cp424: "CP424",
|
|
1802
|
-
Cp437: "CP437",
|
|
1803
|
-
Cp500: "CP500",
|
|
1804
|
-
Cp775: "CP775",
|
|
1805
|
-
Cp850: "CP850",
|
|
1806
|
-
Cp852: "CP852",
|
|
1807
|
-
Cp855: "CP855",
|
|
1808
|
-
Cp857: "CP857",
|
|
1809
|
-
Cp858: "CP858",
|
|
1810
|
-
Cp860: "CP860",
|
|
1811
|
-
Cp861: "CP861",
|
|
1812
|
-
Cp862: "CP862",
|
|
1813
|
-
Cp863: "CP863",
|
|
1814
|
-
Cp864: "CP864",
|
|
1815
|
-
Cp865: "CP865",
|
|
1816
|
-
Cp866: "CP866",
|
|
1817
|
-
Cp869: "CP869",
|
|
1818
|
-
Cp932: "CP932",
|
|
1819
|
-
Cp949: "CP949",
|
|
1820
|
-
Cp950: "CP950",
|
|
1821
|
-
Cp1026: "CP1026",
|
|
1822
|
-
Cp1125: "CP1125",
|
|
1823
|
-
Cp1140: "CP1140",
|
|
1824
|
-
Cp1250: "CP1250",
|
|
1825
|
-
Cp1251: "CP1251",
|
|
1826
|
-
Cp1252: "CP1252",
|
|
1827
|
-
Cp1253: "CP1253",
|
|
1828
|
-
Cp1254: "CP1254",
|
|
1829
|
-
Cp1255: "CP1255",
|
|
1830
|
-
Cp1256: "CP1256",
|
|
1831
|
-
Cp1257: "CP1257",
|
|
1832
|
-
Cp1258: "CP1258",
|
|
1833
|
-
EucJis2004: "EUC_JIS_2004",
|
|
1834
|
-
EucJisx0213: "EUC_JISX0213",
|
|
1835
|
-
EucJp: "EUC_JP",
|
|
1836
|
-
EucKr: "EUC_KR",
|
|
1837
|
-
Gb18030: "GB18030",
|
|
1838
|
-
Gbk: "GBK",
|
|
1839
|
-
Hz: "HZ",
|
|
1840
|
-
Iso2022Jp: "ISO2022_JP",
|
|
1841
|
-
Iso2022Jp1: "ISO2022_JP_1",
|
|
1842
|
-
Iso2022Jp2: "ISO2022_JP_2",
|
|
1843
|
-
Iso2022Jp2004: "ISO2022_JP_2004",
|
|
1844
|
-
Iso2022Jp3: "ISO2022_JP_3",
|
|
1845
|
-
Iso2022JpExt: "ISO2022_JP_EXT",
|
|
1846
|
-
Iso2022Kr: "ISO2022_KR",
|
|
1847
|
-
Iso88591: "ISO8859_1",
|
|
1848
|
-
Iso88592: "ISO8859_2",
|
|
1849
|
-
Iso88593: "ISO8859_3",
|
|
1850
|
-
Iso88594: "ISO8859_4",
|
|
1851
|
-
Iso88595: "ISO8859_5",
|
|
1852
|
-
Iso88596: "ISO8859_6",
|
|
1853
|
-
Iso88597: "ISO8859_7",
|
|
1854
|
-
Iso88598: "ISO8859_8",
|
|
1855
|
-
Iso88599: "ISO8859_9",
|
|
1856
|
-
Iso885910: "ISO8859_10",
|
|
1857
|
-
Iso885911: "ISO8859_11",
|
|
1858
|
-
Iso885913: "ISO8859_13",
|
|
1859
|
-
Iso885914: "ISO8859_14",
|
|
1860
|
-
Iso885915: "ISO8859_15",
|
|
1861
|
-
Iso885916: "ISO8859_16",
|
|
1862
|
-
Johab: "JOHAB",
|
|
1863
|
-
Koi8R: "KOI8_R",
|
|
1864
|
-
Kz1048: "KZ1048",
|
|
1865
|
-
Latin1: "LATIN_1",
|
|
1866
|
-
MacCyrillic: "MAC_CYRILLIC",
|
|
1867
|
-
MacGreek: "MAC_GREEK",
|
|
1868
|
-
MacIceland: "MAC_ICELAND",
|
|
1869
|
-
MacLatin2: "MAC_LATIN2",
|
|
1870
|
-
MacRoman: "MAC_ROMAN",
|
|
1871
|
-
MacTurkish: "MAC_TURKISH",
|
|
1872
|
-
Ptcp154: "PTCP154",
|
|
1873
|
-
ShiftJis: "SHIFT_JIS",
|
|
1874
|
-
ShiftJis2004: "SHIFT_JIS_2004",
|
|
1875
|
-
ShiftJisx0213: "SHIFT_JISX0213",
|
|
1876
|
-
Tis620: "TIS_620",
|
|
1877
|
-
Utf16: "UTF_16",
|
|
1878
|
-
Utf16Be: "UTF_16_BE",
|
|
1879
|
-
Utf16Le: "UTF_16_LE"
|
|
1880
|
-
};
|
|
1881
|
-
var Username = {
|
|
1882
|
-
Root: "root",
|
|
1883
|
-
TruenasAdmin: "truenas_admin"
|
|
1884
|
-
};
|
|
1885
|
-
var Vendor = {
|
|
1886
|
-
Nextcloud: "NEXTCLOUD",
|
|
1887
|
-
Owncloud: "OWNCLOUD",
|
|
1888
|
-
Sharepoint: "SHAREPOINT",
|
|
1889
|
-
Other: "OTHER"
|
|
1890
|
-
};
|
|
1891
|
-
var When = {
|
|
1892
|
-
Preinit: "PREINIT",
|
|
1893
|
-
Postinit: "POSTINIT",
|
|
1894
|
-
Shutdown: "SHUTDOWN"
|
|
1895
|
-
};
|
|
1896
|
-
var ZfsTierRewriteJobEntryStatusInput = {
|
|
1897
|
-
Complete: "COMPLETE",
|
|
1898
|
-
Running: "RUNNING",
|
|
1899
|
-
Queued: "QUEUED",
|
|
1900
|
-
Cancelled: "CANCELLED",
|
|
1901
|
-
Stopped: "STOPPED",
|
|
1902
|
-
Error: "ERROR"
|
|
1903
|
-
};
|
|
1904
|
-
|
|
1905
|
-
// src/generated/v25_04_1/index.ts
|
|
1906
|
-
var v25_04_1_exports = {};
|
|
1907
|
-
__export(v25_04_1_exports, {
|
|
1908
|
-
Acltype: () => Acltype,
|
|
1909
|
-
Action: () => Action,
|
|
1910
|
-
AppContainerDetailsStateInput: () => AppContainerDetailsStateInput,
|
|
1911
|
-
Authenticator: () => Authenticator,
|
|
1912
|
-
Authmethod: () => Authmethod,
|
|
1913
|
-
Basic: () => Basic,
|
|
1914
|
-
Blocksize: () => Blocksize,
|
|
1915
|
-
CloudBackupSnapshotItemType: () => CloudBackupSnapshotItemType,
|
|
1916
|
-
CloudTaskAttributesEncryptionInput: () => CloudTaskAttributesEncryptionInput,
|
|
1917
|
-
Credentials: () => Credentials,
|
|
1918
|
-
DeviceGetInfoOtherTypeInput: () => DeviceGetInfoOtherTypeInput,
|
|
1919
|
-
DockerStatusInfoStatusInput: () => DockerStatusInfoStatusInput,
|
|
1920
|
-
Encryption: () => Encryption,
|
|
1921
|
-
Endpoint: () => Endpoint,
|
|
1922
|
-
FilesystemDirEntryType: () => FilesystemDirEntryType,
|
|
1923
|
-
Function: () => Function,
|
|
1924
|
-
InitShutdownScriptCreateType: () => InitShutdownScriptCreateType,
|
|
1925
|
-
InitShutdownScriptCreateTypeInput: () => InitShutdownScriptCreateTypeInput,
|
|
1926
|
-
IscsiExtentCreateType: () => IscsiExtentCreateType,
|
|
1927
|
-
IscsiExtentCreateTypeInput: () => IscsiExtentCreateTypeInput,
|
|
1928
|
-
KeychainCredentialEntryType: () => KeychainCredentialEntryType,
|
|
1929
|
-
KeychainCredentialEntryTypeInput: () => KeychainCredentialEntryTypeInput,
|
|
1930
|
-
Level: () => Level,
|
|
1931
|
-
Mode: () => Mode,
|
|
1932
|
-
NFS4ACEType: () => NFS4ACEType,
|
|
1933
|
-
NFS4ACETypeInput: () => NFS4ACETypeInput,
|
|
1934
|
-
PoolScanStateInput: () => PoolScanStateInput,
|
|
1935
|
-
Rpm: () => Rpm,
|
|
1936
|
-
SMBEntryEncryptionInput: () => SMBEntryEncryptionInput,
|
|
1937
|
-
STIGType: () => STIGType,
|
|
1938
|
-
Source: () => Source,
|
|
1939
|
-
State: () => State,
|
|
1940
|
-
Status: () => Status,
|
|
1941
|
-
Tag: () => Tag,
|
|
1942
|
-
Unixcharset: () => Unixcharset,
|
|
1943
|
-
Username: () => Username,
|
|
1944
|
-
Vendor: () => Vendor,
|
|
1945
|
-
When: () => When,
|
|
1946
|
-
ZfsTierRewriteJobEntryStatusInput: () => ZfsTierRewriteJobEntryStatusInput
|
|
1947
|
-
});
|
|
1948
|
-
|
|
1949
|
-
// src/generated/v25_04_2/index.ts
|
|
1950
|
-
var v25_04_2_exports = {};
|
|
1951
|
-
__export(v25_04_2_exports, {
|
|
1952
|
-
Acltype: () => Acltype,
|
|
1953
|
-
Action: () => Action,
|
|
1954
|
-
AppContainerDetailsStateInput: () => AppContainerDetailsStateInput,
|
|
1955
|
-
Authenticator: () => Authenticator,
|
|
1956
|
-
Authmethod: () => Authmethod,
|
|
1957
|
-
Basic: () => Basic,
|
|
1958
|
-
Blocksize: () => Blocksize,
|
|
1959
|
-
Bootloader: () => Bootloader,
|
|
1960
|
-
CloudBackupSnapshotItemType: () => CloudBackupSnapshotItemType,
|
|
1961
|
-
CloudTaskAttributesEncryptionInput: () => CloudTaskAttributesEncryptionInput,
|
|
1962
|
-
Credentials: () => Credentials,
|
|
1963
|
-
DeviceGetInfoOtherTypeInput: () => DeviceGetInfoOtherTypeInput,
|
|
1964
|
-
DockerStatusInfoStatusInput: () => DockerStatusInfoStatusInput,
|
|
1965
|
-
Encryption: () => Encryption,
|
|
1966
|
-
Endpoint: () => Endpoint,
|
|
1967
|
-
FilesystemDirEntryType: () => FilesystemDirEntryType,
|
|
1968
|
-
Function: () => Function,
|
|
1969
|
-
InitShutdownScriptCreateType: () => InitShutdownScriptCreateType,
|
|
1970
|
-
InitShutdownScriptCreateTypeInput: () => InitShutdownScriptCreateTypeInput,
|
|
1971
|
-
Iotype: () => Iotype,
|
|
1972
|
-
IscsiExtentCreateType: () => IscsiExtentCreateType,
|
|
1973
|
-
IscsiExtentCreateTypeInput: () => IscsiExtentCreateTypeInput,
|
|
1974
|
-
KeychainCredentialEntryType: () => KeychainCredentialEntryType,
|
|
1975
|
-
KeychainCredentialEntryTypeInput: () => KeychainCredentialEntryTypeInput,
|
|
1976
|
-
Level: () => Level,
|
|
1977
|
-
Mode: () => Mode,
|
|
1978
|
-
NFS4ACEType: () => NFS4ACEType,
|
|
1979
|
-
NFS4ACETypeInput: () => NFS4ACETypeInput,
|
|
1980
|
-
PoolScanStateInput: () => PoolScanStateInput,
|
|
1981
|
-
Resolution: () => Resolution,
|
|
1982
|
-
Rpm: () => Rpm,
|
|
1983
|
-
SMBEntryEncryptionInput: () => SMBEntryEncryptionInput,
|
|
1984
|
-
STIGType: () => STIGType,
|
|
1985
|
-
Source: () => Source,
|
|
1986
|
-
State: () => State,
|
|
1987
|
-
Status: () => Status,
|
|
1988
|
-
Tag: () => Tag,
|
|
1989
|
-
Time: () => Time,
|
|
1990
|
-
Unixcharset: () => Unixcharset,
|
|
1991
|
-
Username: () => Username,
|
|
1992
|
-
VMDiskDeviceType: () => VMDiskDeviceType,
|
|
1993
|
-
VMDiskDeviceTypeInput: () => VMDiskDeviceTypeInput,
|
|
1994
|
-
Vendor: () => Vendor,
|
|
1995
|
-
When: () => When,
|
|
1996
|
-
ZfsTierRewriteJobEntryStatusInput: () => ZfsTierRewriteJobEntryStatusInput
|
|
1997
|
-
});
|
|
1998
|
-
|
|
1999
|
-
// src/generated/v25_04_2/api-types.ts
|
|
2000
|
-
var Bootloader = {
|
|
2001
|
-
UefiCsm: "UEFI_CSM",
|
|
2002
|
-
Uefi: "UEFI"
|
|
2003
|
-
};
|
|
2004
|
-
var Iotype = {
|
|
2005
|
-
Native: "NATIVE",
|
|
2006
|
-
Threads: "THREADS",
|
|
2007
|
-
IoUring: "IO_URING"
|
|
2008
|
-
};
|
|
2009
|
-
var Resolution = {
|
|
2010
|
-
"1920x1200": "1920x1200",
|
|
2011
|
-
"1920x1080": "1920x1080",
|
|
2012
|
-
"1600x1200": "1600x1200",
|
|
2013
|
-
"1600x900": "1600x900",
|
|
2014
|
-
"1400x1050": "1400x1050",
|
|
2015
|
-
"1280x1024": "1280x1024",
|
|
2016
|
-
"1280x720": "1280x720",
|
|
2017
|
-
"1024x768": "1024x768",
|
|
2018
|
-
"800x600": "800x600",
|
|
2019
|
-
"640x480": "640x480"
|
|
2020
|
-
};
|
|
2021
|
-
var Time = {
|
|
2022
|
-
Local: "LOCAL",
|
|
2023
|
-
Utc: "UTC"
|
|
2024
|
-
};
|
|
2025
|
-
var VMDiskDeviceType = {
|
|
2026
|
-
Ahci: "AHCI",
|
|
2027
|
-
Virtio: "VIRTIO"
|
|
2028
|
-
};
|
|
2029
|
-
var VMDiskDeviceTypeInput = {
|
|
2030
|
-
Ahci: "AHCI",
|
|
2031
|
-
Virtio: "VIRTIO"
|
|
2032
|
-
};
|
|
2033
|
-
|
|
2034
868
|
// src/generated/v25_10_0/index.ts
|
|
2035
869
|
var v25_10_0_exports = {};
|
|
2036
870
|
__export(v25_10_0_exports, {
|
|
@@ -2061,7 +895,7 @@ __export(v25_10_0_exports, {
|
|
|
2061
895
|
DiskDetailsTypeInput: () => DiskDetailsTypeInput,
|
|
2062
896
|
DiskWipeModeInput: () => DiskWipeModeInput,
|
|
2063
897
|
DockerStatusInfoStatusInput: () => DockerStatusInfoStatusInput,
|
|
2064
|
-
Enclosure2SetSlotStatusStatusInput: () =>
|
|
898
|
+
Enclosure2SetSlotStatusStatusInput: () => Enclosure2SetSlotStatusStatusInput,
|
|
2065
899
|
Encryption: () => Encryption,
|
|
2066
900
|
Endpoint: () => Endpoint,
|
|
2067
901
|
Exec: () => Exec,
|
|
@@ -2161,6 +995,15 @@ var ACLTemplateEntryAcltypeInput = {
|
|
|
2161
995
|
Nfs4: "NFS4",
|
|
2162
996
|
Posix1e: "POSIX1E"
|
|
2163
997
|
};
|
|
998
|
+
var Acltype = {
|
|
999
|
+
Nfs4: "NFS4",
|
|
1000
|
+
Posix1e: "POSIX1E"
|
|
1001
|
+
};
|
|
1002
|
+
var Action = {
|
|
1003
|
+
Start: "START",
|
|
1004
|
+
Stop: "STOP",
|
|
1005
|
+
Pause: "PAUSE"
|
|
1006
|
+
};
|
|
2164
1007
|
var Advpowermgmt = {
|
|
2165
1008
|
Disabled: "DISABLED",
|
|
2166
1009
|
"1": "1",
|
|
@@ -2178,20 +1021,54 @@ var Algorithm = {
|
|
|
2178
1021
|
Aes192Gcm: "AES-192-GCM",
|
|
2179
1022
|
Aes256Gcm: "AES-256-GCM"
|
|
2180
1023
|
};
|
|
1024
|
+
var AppContainerDetailsStateInput = {
|
|
1025
|
+
Crashed: "crashed",
|
|
1026
|
+
Created: "created",
|
|
1027
|
+
Exited: "exited",
|
|
1028
|
+
Running: "running",
|
|
1029
|
+
Starting: "starting"
|
|
1030
|
+
};
|
|
2181
1031
|
var Atime = {
|
|
2182
1032
|
On: "ON",
|
|
2183
1033
|
Off: "OFF",
|
|
2184
1034
|
Inherit: "INHERIT"
|
|
2185
1035
|
};
|
|
1036
|
+
var Authenticator = {
|
|
1037
|
+
Level1: "LEVEL_1",
|
|
1038
|
+
Level2: "LEVEL_2"
|
|
1039
|
+
};
|
|
1040
|
+
var Authmethod = {
|
|
1041
|
+
None: "NONE",
|
|
1042
|
+
Chap: "CHAP",
|
|
1043
|
+
ChapMutual: "CHAP_MUTUAL"
|
|
1044
|
+
};
|
|
2186
1045
|
var Autotrim = {
|
|
2187
1046
|
On: "ON",
|
|
2188
1047
|
Off: "OFF"
|
|
2189
1048
|
};
|
|
1049
|
+
var Basic = {
|
|
1050
|
+
Inherit: "INHERIT",
|
|
1051
|
+
Noinherit: "NOINHERIT"
|
|
1052
|
+
};
|
|
1053
|
+
var Blocksize = {
|
|
1054
|
+
"512": 512,
|
|
1055
|
+
"1024": 1024,
|
|
1056
|
+
"2048": 2048,
|
|
1057
|
+
"4096": 4096
|
|
1058
|
+
};
|
|
1059
|
+
var Bootloader = {
|
|
1060
|
+
UefiCsm: "UEFI_CSM",
|
|
1061
|
+
Uefi: "UEFI"
|
|
1062
|
+
};
|
|
2190
1063
|
var Casesensitivity = {
|
|
2191
1064
|
Sensitive: "SENSITIVE",
|
|
2192
1065
|
Insensitive: "INSENSITIVE",
|
|
2193
1066
|
Inherit: "INHERIT"
|
|
2194
1067
|
};
|
|
1068
|
+
var CloudBackupSnapshotItemType = {
|
|
1069
|
+
Dir: "dir",
|
|
1070
|
+
File: "file"
|
|
1071
|
+
};
|
|
2195
1072
|
var CloudSyncCreateDirection = {
|
|
2196
1073
|
Push: "PUSH",
|
|
2197
1074
|
Pull: "PULL"
|
|
@@ -2200,6 +1077,10 @@ var CloudSyncCreateDirectionInput = {
|
|
|
2200
1077
|
Push: "PUSH",
|
|
2201
1078
|
Pull: "PULL"
|
|
2202
1079
|
};
|
|
1080
|
+
var CloudTaskAttributesEncryptionInput = {
|
|
1081
|
+
Null: null,
|
|
1082
|
+
Aes256: "AES256"
|
|
1083
|
+
};
|
|
2203
1084
|
var Code = {
|
|
2204
1085
|
Normal: "NORMAL",
|
|
2205
1086
|
Error: "ERROR"
|
|
@@ -2262,6 +1143,19 @@ var CorePingRemoteTypeInput = {
|
|
|
2262
1143
|
Icmpv4: "ICMPV4",
|
|
2263
1144
|
Icmpv6: "ICMPV6"
|
|
2264
1145
|
};
|
|
1146
|
+
var Credentials = {
|
|
1147
|
+
UnixSocket: "UNIX_SOCKET",
|
|
1148
|
+
LoginPassword: "LOGIN_PASSWORD",
|
|
1149
|
+
LoginTwofactor: "LOGIN_TWOFACTOR",
|
|
1150
|
+
LoginOnetimePassword: "LOGIN_ONETIME_PASSWORD",
|
|
1151
|
+
ApiKey: "API_KEY",
|
|
1152
|
+
Token: "TOKEN",
|
|
1153
|
+
TruenasNode: "TRUENAS_NODE"
|
|
1154
|
+
};
|
|
1155
|
+
var DeviceGetInfoOtherTypeInput = {
|
|
1156
|
+
Serial: "SERIAL",
|
|
1157
|
+
Gpu: "GPU"
|
|
1158
|
+
};
|
|
2265
1159
|
var DiskDetailsTypeInput = {
|
|
2266
1160
|
Used: "USED",
|
|
2267
1161
|
Unused: "UNUSED",
|
|
@@ -2272,11 +1166,37 @@ var DiskWipeModeInput = {
|
|
|
2272
1166
|
Full: "FULL",
|
|
2273
1167
|
FullRandom: "FULL_RANDOM"
|
|
2274
1168
|
};
|
|
2275
|
-
var
|
|
1169
|
+
var DockerStatusInfoStatusInput = {
|
|
1170
|
+
Pending: "PENDING",
|
|
1171
|
+
Running: "RUNNING",
|
|
1172
|
+
Stopped: "STOPPED",
|
|
1173
|
+
Initializing: "INITIALIZING",
|
|
1174
|
+
Stopping: "STOPPING",
|
|
1175
|
+
Unconfigured: "UNCONFIGURED",
|
|
1176
|
+
Failed: "FAILED",
|
|
1177
|
+
Migrating: "MIGRATING",
|
|
1178
|
+
MigrationFailed: "MIGRATION_FAILED"
|
|
1179
|
+
};
|
|
1180
|
+
var Enclosure2SetSlotStatusStatusInput = {
|
|
2276
1181
|
Clear: "CLEAR",
|
|
2277
1182
|
On: "ON",
|
|
2278
1183
|
Off: "OFF"
|
|
2279
1184
|
};
|
|
1185
|
+
var Encryption = {
|
|
1186
|
+
Default: "DEFAULT",
|
|
1187
|
+
Negotiate: "NEGOTIATE",
|
|
1188
|
+
Desired: "DESIRED",
|
|
1189
|
+
Required: "REQUIRED"
|
|
1190
|
+
};
|
|
1191
|
+
var Endpoint = {
|
|
1192
|
+
OvhEu: "ovh-eu",
|
|
1193
|
+
OvhCa: "ovh-ca",
|
|
1194
|
+
OvhUs: "ovh-us",
|
|
1195
|
+
KimsufiEu: "kimsufi-eu",
|
|
1196
|
+
KimsufiCa: "kimsufi-ca",
|
|
1197
|
+
SoyoustartEu: "soyoustart-eu",
|
|
1198
|
+
SoyoustartCa: "soyoustart-ca"
|
|
1199
|
+
};
|
|
2280
1200
|
var Exec = {
|
|
2281
1201
|
On: "ON",
|
|
2282
1202
|
Off: "OFF",
|
|
@@ -2287,6 +1207,16 @@ var Feature = {
|
|
|
2287
1207
|
Fibrechannel: "FIBRECHANNEL",
|
|
2288
1208
|
Vm: "VM"
|
|
2289
1209
|
};
|
|
1210
|
+
var FilesystemDirEntryType = {
|
|
1211
|
+
Directory: "DIRECTORY",
|
|
1212
|
+
File: "FILE",
|
|
1213
|
+
Symlink: "SYMLINK",
|
|
1214
|
+
Other: "OTHER"
|
|
1215
|
+
};
|
|
1216
|
+
var Function = {
|
|
1217
|
+
Resilver: "RESILVER",
|
|
1218
|
+
Scrub: "SCRUB"
|
|
1219
|
+
};
|
|
2290
1220
|
var GetDisplayDeviceType = {
|
|
2291
1221
|
Spice: "SPICE",
|
|
2292
1222
|
Vnc: "VNC"
|
|
@@ -2304,6 +1234,14 @@ var Hddstandby = {
|
|
|
2304
1234
|
"300": "300",
|
|
2305
1235
|
"330": "330"
|
|
2306
1236
|
};
|
|
1237
|
+
var InitShutdownScriptCreateType = {
|
|
1238
|
+
Command: "COMMAND",
|
|
1239
|
+
Script: "SCRIPT"
|
|
1240
|
+
};
|
|
1241
|
+
var InitShutdownScriptCreateTypeInput = {
|
|
1242
|
+
Command: "COMMAND",
|
|
1243
|
+
Script: "SCRIPT"
|
|
1244
|
+
};
|
|
2307
1245
|
var InterfaceCreateAliasTypeInput = {
|
|
2308
1246
|
Inet: "INET",
|
|
2309
1247
|
Inet6: "INET6"
|
|
@@ -2313,10 +1251,23 @@ var InterfaceCreateTypeInput = {
|
|
|
2313
1251
|
LinkAggregation: "LINK_AGGREGATION",
|
|
2314
1252
|
Vlan: "VLAN"
|
|
2315
1253
|
};
|
|
1254
|
+
var Iotype = {
|
|
1255
|
+
Native: "NATIVE",
|
|
1256
|
+
Threads: "THREADS",
|
|
1257
|
+
IoUring: "IO_URING"
|
|
1258
|
+
};
|
|
2316
1259
|
var IpmiChassisIdentifyVerb = {
|
|
2317
1260
|
On: "ON",
|
|
2318
1261
|
Off: "OFF"
|
|
2319
1262
|
};
|
|
1263
|
+
var IscsiExtentCreateType = {
|
|
1264
|
+
Disk: "DISK",
|
|
1265
|
+
File: "FILE"
|
|
1266
|
+
};
|
|
1267
|
+
var IscsiExtentCreateTypeInput = {
|
|
1268
|
+
Disk: "DISK",
|
|
1269
|
+
File: "FILE"
|
|
1270
|
+
};
|
|
2320
1271
|
var IscsiTargetCreateMode = {
|
|
2321
1272
|
Iscsi: "ISCSI",
|
|
2322
1273
|
Fc: "FC",
|
|
@@ -2327,6 +1278,23 @@ var IscsiTargetCreateModeInput = {
|
|
|
2327
1278
|
Fc: "FC",
|
|
2328
1279
|
Both: "BOTH"
|
|
2329
1280
|
};
|
|
1281
|
+
var KeychainCredentialEntryType = {
|
|
1282
|
+
SshKeyPair: "SSH_KEY_PAIR",
|
|
1283
|
+
SshCredentials: "SSH_CREDENTIALS"
|
|
1284
|
+
};
|
|
1285
|
+
var KeychainCredentialEntryTypeInput = {
|
|
1286
|
+
SshKeyPair: "SSH_KEY_PAIR",
|
|
1287
|
+
SshCredentials: "SSH_CREDENTIALS"
|
|
1288
|
+
};
|
|
1289
|
+
var Level = {
|
|
1290
|
+
Info: "INFO",
|
|
1291
|
+
Notice: "NOTICE",
|
|
1292
|
+
Warning: "WARNING",
|
|
1293
|
+
Error: "ERROR",
|
|
1294
|
+
Critical: "CRITICAL",
|
|
1295
|
+
Alert: "ALERT",
|
|
1296
|
+
Emergency: "EMERGENCY"
|
|
1297
|
+
};
|
|
2330
1298
|
var Name = {
|
|
2331
1299
|
Cpu: "cpu",
|
|
2332
1300
|
Cputemp: "cputemp",
|
|
@@ -2349,6 +1317,14 @@ var Name = {
|
|
|
2349
1317
|
Upsload: "upsload",
|
|
2350
1318
|
Upstemperature: "upstemperature"
|
|
2351
1319
|
};
|
|
1320
|
+
var NFS4ACEType = {
|
|
1321
|
+
Allow: "ALLOW",
|
|
1322
|
+
Deny: "DENY"
|
|
1323
|
+
};
|
|
1324
|
+
var NFS4ACETypeInput = {
|
|
1325
|
+
Allow: "ALLOW",
|
|
1326
|
+
Deny: "DENY"
|
|
1327
|
+
};
|
|
2352
1328
|
var Policy = {
|
|
2353
1329
|
Immediately: "IMMEDIATELY",
|
|
2354
1330
|
Hourly: "HOURLY",
|
|
@@ -2411,6 +1387,11 @@ var PoolDatasetDeleteResult = {
|
|
|
2411
1387
|
Null: null,
|
|
2412
1388
|
True: true
|
|
2413
1389
|
};
|
|
1390
|
+
var PoolScanStateInput = {
|
|
1391
|
+
Scanning: "SCANNING",
|
|
1392
|
+
Finished: "FINISHED",
|
|
1393
|
+
Canceled: "CANCELED"
|
|
1394
|
+
};
|
|
2414
1395
|
var Protocol = {
|
|
2415
1396
|
Http: "HTTP",
|
|
2416
1397
|
Https: "HTTPS"
|
|
@@ -2440,6 +1421,26 @@ var ReplicationCreateReadonlyInput = {
|
|
|
2440
1421
|
Require: "REQUIRE",
|
|
2441
1422
|
Ignore: "IGNORE"
|
|
2442
1423
|
};
|
|
1424
|
+
var Resolution = {
|
|
1425
|
+
"1920x1200": "1920x1200",
|
|
1426
|
+
"1920x1080": "1920x1080",
|
|
1427
|
+
"1600x1200": "1600x1200",
|
|
1428
|
+
"1600x900": "1600x900",
|
|
1429
|
+
"1400x1050": "1400x1050",
|
|
1430
|
+
"1280x1024": "1280x1024",
|
|
1431
|
+
"1280x720": "1280x720",
|
|
1432
|
+
"1024x768": "1024x768",
|
|
1433
|
+
"800x600": "800x600",
|
|
1434
|
+
"640x480": "640x480"
|
|
1435
|
+
};
|
|
1436
|
+
var Rpm = {
|
|
1437
|
+
Unknown: "UNKNOWN",
|
|
1438
|
+
Ssd: "SSD",
|
|
1439
|
+
"5400": "5400",
|
|
1440
|
+
"7200": "7200",
|
|
1441
|
+
"10000": "10000",
|
|
1442
|
+
"15000": "15000"
|
|
1443
|
+
};
|
|
2443
1444
|
var RsyncTaskCreateDirection = {
|
|
2444
1445
|
Pull: "PULL",
|
|
2445
1446
|
Push: "PUSH"
|
|
@@ -2503,6 +1504,12 @@ var Shutdown = {
|
|
|
2503
1504
|
Lowbatt: "LOWBATT",
|
|
2504
1505
|
Batt: "BATT"
|
|
2505
1506
|
};
|
|
1507
|
+
var SMBEntryEncryptionInput = {
|
|
1508
|
+
Default: "DEFAULT",
|
|
1509
|
+
Negotiate: "NEGOTIATE",
|
|
1510
|
+
Desired: "DESIRED",
|
|
1511
|
+
Required: "REQUIRED"
|
|
1512
|
+
};
|
|
2506
1513
|
var Snapdev = {
|
|
2507
1514
|
Hidden: "HIDDEN",
|
|
2508
1515
|
Visible: "VISIBLE",
|
|
@@ -2514,6 +1521,11 @@ var Snapdir = {
|
|
|
2514
1521
|
Hidden: "HIDDEN",
|
|
2515
1522
|
Inherit: "INHERIT"
|
|
2516
1523
|
};
|
|
1524
|
+
var Source = {
|
|
1525
|
+
Local: "LOCAL",
|
|
1526
|
+
Activedirectory: "ACTIVEDIRECTORY",
|
|
1527
|
+
Ldap: "LDAP"
|
|
1528
|
+
};
|
|
2517
1529
|
var SourceInput = {
|
|
2518
1530
|
None: "NONE",
|
|
2519
1531
|
Default: "DEFAULT",
|
|
@@ -2522,6 +1534,26 @@ var SourceInput = {
|
|
|
2522
1534
|
Inherited: "INHERITED",
|
|
2523
1535
|
Received: "RECEIVED"
|
|
2524
1536
|
};
|
|
1537
|
+
var State = {
|
|
1538
|
+
Crashed: "crashed",
|
|
1539
|
+
Created: "created",
|
|
1540
|
+
Exited: "exited",
|
|
1541
|
+
Running: "running",
|
|
1542
|
+
Starting: "starting"
|
|
1543
|
+
};
|
|
1544
|
+
var Status = {
|
|
1545
|
+
Pending: "PENDING",
|
|
1546
|
+
Running: "RUNNING",
|
|
1547
|
+
Stopped: "STOPPED",
|
|
1548
|
+
Initializing: "INITIALIZING",
|
|
1549
|
+
Stopping: "STOPPING",
|
|
1550
|
+
Unconfigured: "UNCONFIGURED",
|
|
1551
|
+
Failed: "FAILED"
|
|
1552
|
+
};
|
|
1553
|
+
var STIGType = {
|
|
1554
|
+
"0": 0,
|
|
1555
|
+
"1": 1
|
|
1556
|
+
};
|
|
2525
1557
|
var SupportNewTicketCommunityTypeInput = {
|
|
2526
1558
|
Bug: "BUG",
|
|
2527
1559
|
Feature: "FEATURE"
|
|
@@ -2556,11 +1588,22 @@ var SystemStateResult = {
|
|
|
2556
1588
|
Ready: "READY",
|
|
2557
1589
|
ShuttingDown: "SHUTTING_DOWN"
|
|
2558
1590
|
};
|
|
1591
|
+
var Tag = {
|
|
1592
|
+
Owner: "owner@",
|
|
1593
|
+
Group: "group@",
|
|
1594
|
+
Everyone: "everyone@",
|
|
1595
|
+
User: "USER",
|
|
1596
|
+
"GROUP": "GROUP"
|
|
1597
|
+
};
|
|
2559
1598
|
var Target = {
|
|
2560
1599
|
Ws: "WS",
|
|
2561
1600
|
Cli: "CLI",
|
|
2562
1601
|
Rest: "REST"
|
|
2563
1602
|
};
|
|
1603
|
+
var Time = {
|
|
1604
|
+
Local: "LOCAL",
|
|
1605
|
+
Utc: "UTC"
|
|
1606
|
+
};
|
|
2564
1607
|
var Transport = {
|
|
2565
1608
|
Ssh: "SSH",
|
|
2566
1609
|
SshNetcat: "SSH+NETCAT",
|
|
@@ -2588,6 +1631,95 @@ var TunableCreateTypeInput = {
|
|
|
2588
1631
|
Udev: "UDEV",
|
|
2589
1632
|
Zfs: "ZFS"
|
|
2590
1633
|
};
|
|
1634
|
+
var Unixcharset = {
|
|
1635
|
+
Utf8: "UTF-8",
|
|
1636
|
+
Gb2312: "GB2312",
|
|
1637
|
+
HzGb2312: "HZ-GB-2312",
|
|
1638
|
+
Cp1361: "CP1361",
|
|
1639
|
+
Big5: "BIG5",
|
|
1640
|
+
Big5hkscs: "BIG5HKSCS",
|
|
1641
|
+
Cp037: "CP037",
|
|
1642
|
+
Cp273: "CP273",
|
|
1643
|
+
Cp424: "CP424",
|
|
1644
|
+
Cp437: "CP437",
|
|
1645
|
+
Cp500: "CP500",
|
|
1646
|
+
Cp775: "CP775",
|
|
1647
|
+
Cp850: "CP850",
|
|
1648
|
+
Cp852: "CP852",
|
|
1649
|
+
Cp855: "CP855",
|
|
1650
|
+
Cp857: "CP857",
|
|
1651
|
+
Cp858: "CP858",
|
|
1652
|
+
Cp860: "CP860",
|
|
1653
|
+
Cp861: "CP861",
|
|
1654
|
+
Cp862: "CP862",
|
|
1655
|
+
Cp863: "CP863",
|
|
1656
|
+
Cp864: "CP864",
|
|
1657
|
+
Cp865: "CP865",
|
|
1658
|
+
Cp866: "CP866",
|
|
1659
|
+
Cp869: "CP869",
|
|
1660
|
+
Cp932: "CP932",
|
|
1661
|
+
Cp949: "CP949",
|
|
1662
|
+
Cp950: "CP950",
|
|
1663
|
+
Cp1026: "CP1026",
|
|
1664
|
+
Cp1125: "CP1125",
|
|
1665
|
+
Cp1140: "CP1140",
|
|
1666
|
+
Cp1250: "CP1250",
|
|
1667
|
+
Cp1251: "CP1251",
|
|
1668
|
+
Cp1252: "CP1252",
|
|
1669
|
+
Cp1253: "CP1253",
|
|
1670
|
+
Cp1254: "CP1254",
|
|
1671
|
+
Cp1255: "CP1255",
|
|
1672
|
+
Cp1256: "CP1256",
|
|
1673
|
+
Cp1257: "CP1257",
|
|
1674
|
+
Cp1258: "CP1258",
|
|
1675
|
+
EucJis2004: "EUC_JIS_2004",
|
|
1676
|
+
EucJisx0213: "EUC_JISX0213",
|
|
1677
|
+
EucJp: "EUC_JP",
|
|
1678
|
+
EucKr: "EUC_KR",
|
|
1679
|
+
Gb18030: "GB18030",
|
|
1680
|
+
Gbk: "GBK",
|
|
1681
|
+
Hz: "HZ",
|
|
1682
|
+
Iso2022Jp: "ISO2022_JP",
|
|
1683
|
+
Iso2022Jp1: "ISO2022_JP_1",
|
|
1684
|
+
Iso2022Jp2: "ISO2022_JP_2",
|
|
1685
|
+
Iso2022Jp2004: "ISO2022_JP_2004",
|
|
1686
|
+
Iso2022Jp3: "ISO2022_JP_3",
|
|
1687
|
+
Iso2022JpExt: "ISO2022_JP_EXT",
|
|
1688
|
+
Iso2022Kr: "ISO2022_KR",
|
|
1689
|
+
Iso88591: "ISO8859_1",
|
|
1690
|
+
Iso88592: "ISO8859_2",
|
|
1691
|
+
Iso88593: "ISO8859_3",
|
|
1692
|
+
Iso88594: "ISO8859_4",
|
|
1693
|
+
Iso88595: "ISO8859_5",
|
|
1694
|
+
Iso88596: "ISO8859_6",
|
|
1695
|
+
Iso88597: "ISO8859_7",
|
|
1696
|
+
Iso88598: "ISO8859_8",
|
|
1697
|
+
Iso88599: "ISO8859_9",
|
|
1698
|
+
Iso885910: "ISO8859_10",
|
|
1699
|
+
Iso885911: "ISO8859_11",
|
|
1700
|
+
Iso885913: "ISO8859_13",
|
|
1701
|
+
Iso885914: "ISO8859_14",
|
|
1702
|
+
Iso885915: "ISO8859_15",
|
|
1703
|
+
Iso885916: "ISO8859_16",
|
|
1704
|
+
Johab: "JOHAB",
|
|
1705
|
+
Koi8R: "KOI8_R",
|
|
1706
|
+
Kz1048: "KZ1048",
|
|
1707
|
+
Latin1: "LATIN_1",
|
|
1708
|
+
MacCyrillic: "MAC_CYRILLIC",
|
|
1709
|
+
MacGreek: "MAC_GREEK",
|
|
1710
|
+
MacIceland: "MAC_ICELAND",
|
|
1711
|
+
MacLatin2: "MAC_LATIN2",
|
|
1712
|
+
MacRoman: "MAC_ROMAN",
|
|
1713
|
+
MacTurkish: "MAC_TURKISH",
|
|
1714
|
+
Ptcp154: "PTCP154",
|
|
1715
|
+
ShiftJis: "SHIFT_JIS",
|
|
1716
|
+
ShiftJis2004: "SHIFT_JIS_2004",
|
|
1717
|
+
ShiftJisx0213: "SHIFT_JISX0213",
|
|
1718
|
+
Tis620: "TIS_620",
|
|
1719
|
+
Utf16: "UTF_16",
|
|
1720
|
+
Utf16Be: "UTF_16_BE",
|
|
1721
|
+
Utf16Le: "UTF_16_LE"
|
|
1722
|
+
};
|
|
2591
1723
|
var UPSEntryMode = {
|
|
2592
1724
|
Master: "MASTER",
|
|
2593
1725
|
Slave: "SLAVE"
|
|
@@ -2596,6 +1728,24 @@ var UPSEntryModeInput = {
|
|
|
2596
1728
|
Master: "MASTER",
|
|
2597
1729
|
Slave: "SLAVE"
|
|
2598
1730
|
};
|
|
1731
|
+
var Username = {
|
|
1732
|
+
Root: "root",
|
|
1733
|
+
TruenasAdmin: "truenas_admin"
|
|
1734
|
+
};
|
|
1735
|
+
var Vendor = {
|
|
1736
|
+
Nextcloud: "NEXTCLOUD",
|
|
1737
|
+
Owncloud: "OWNCLOUD",
|
|
1738
|
+
Sharepoint: "SHAREPOINT",
|
|
1739
|
+
Other: "OTHER"
|
|
1740
|
+
};
|
|
1741
|
+
var VMDiskDeviceType = {
|
|
1742
|
+
Ahci: "AHCI",
|
|
1743
|
+
Virtio: "VIRTIO"
|
|
1744
|
+
};
|
|
1745
|
+
var VMDiskDeviceTypeInput = {
|
|
1746
|
+
Ahci: "AHCI",
|
|
1747
|
+
Virtio: "VIRTIO"
|
|
1748
|
+
};
|
|
2599
1749
|
var VMWareEntryStateStateInput = {
|
|
2600
1750
|
Pending: "PENDING",
|
|
2601
1751
|
Success: "SUCCESS",
|
|
@@ -2618,6 +1768,19 @@ var Volblocksize = {
|
|
|
2618
1768
|
"64K": "64K",
|
|
2619
1769
|
"128K": "128K"
|
|
2620
1770
|
};
|
|
1771
|
+
var When = {
|
|
1772
|
+
Preinit: "PREINIT",
|
|
1773
|
+
Postinit: "POSTINIT",
|
|
1774
|
+
Shutdown: "SHUTDOWN"
|
|
1775
|
+
};
|
|
1776
|
+
var ZfsTierRewriteJobEntryStatusInput = {
|
|
1777
|
+
Complete: "COMPLETE",
|
|
1778
|
+
Running: "RUNNING",
|
|
1779
|
+
Queued: "QUEUED",
|
|
1780
|
+
Cancelled: "CANCELLED",
|
|
1781
|
+
Stopped: "STOPPED",
|
|
1782
|
+
Error: "ERROR"
|
|
1783
|
+
};
|
|
2621
1784
|
|
|
2622
1785
|
// src/generated/v25_10_1/index.ts
|
|
2623
1786
|
var v25_10_1_exports = {};
|
|
@@ -2650,7 +1813,7 @@ __export(v25_10_1_exports, {
|
|
|
2650
1813
|
DiskWipeModeInput: () => DiskWipeModeInput,
|
|
2651
1814
|
DockerStatusInfoStatus: () => DockerStatusInfoStatus,
|
|
2652
1815
|
DockerStatusInfoStatusInput: () => DockerStatusInfoStatusInput,
|
|
2653
|
-
Enclosure2SetSlotStatusStatusInput: () =>
|
|
1816
|
+
Enclosure2SetSlotStatusStatusInput: () => Enclosure2SetSlotStatusStatusInput,
|
|
2654
1817
|
Encryption: () => Encryption,
|
|
2655
1818
|
Endpoint: () => Endpoint,
|
|
2656
1819
|
Exec: () => Exec,
|
|
@@ -2760,9 +1923,132 @@ var Purpose2 = {
|
|
|
2760
1923
|
FcpShare: "FCP_SHARE"
|
|
2761
1924
|
};
|
|
2762
1925
|
|
|
2763
|
-
// src/generated/v25_10_2/index.ts
|
|
2764
|
-
var v25_10_2_exports = {};
|
|
2765
|
-
__export(v25_10_2_exports, {
|
|
1926
|
+
// src/generated/v25_10_2/index.ts
|
|
1927
|
+
var v25_10_2_exports = {};
|
|
1928
|
+
__export(v25_10_2_exports, {
|
|
1929
|
+
ACLTemplateEntryAcltypeInput: () => ACLTemplateEntryAcltypeInput,
|
|
1930
|
+
Aclmode: () => Aclmode,
|
|
1931
|
+
Acltype: () => Acltype,
|
|
1932
|
+
Action: () => Action,
|
|
1933
|
+
Advpowermgmt: () => Advpowermgmt,
|
|
1934
|
+
Algorithm: () => Algorithm,
|
|
1935
|
+
AppContainerDetailsStateInput: () => AppContainerDetailsStateInput,
|
|
1936
|
+
Atime: () => Atime,
|
|
1937
|
+
Authenticator: () => Authenticator,
|
|
1938
|
+
Authmethod: () => Authmethod,
|
|
1939
|
+
Autotrim: () => Autotrim,
|
|
1940
|
+
Basic: () => Basic,
|
|
1941
|
+
Blocksize: () => Blocksize,
|
|
1942
|
+
Bootloader: () => Bootloader,
|
|
1943
|
+
Casesensitivity: () => Casesensitivity,
|
|
1944
|
+
CloudBackupSnapshotItemType: () => CloudBackupSnapshotItemType,
|
|
1945
|
+
CloudSyncCreateDirection: () => CloudSyncCreateDirection,
|
|
1946
|
+
CloudSyncCreateDirectionInput: () => CloudSyncCreateDirectionInput,
|
|
1947
|
+
CloudTaskAttributesEncryptionInput: () => CloudTaskAttributesEncryptionInput,
|
|
1948
|
+
Code: () => Code,
|
|
1949
|
+
Compression: () => Compression,
|
|
1950
|
+
CorePingRemoteTypeInput: () => CorePingRemoteTypeInput,
|
|
1951
|
+
Credentials: () => Credentials,
|
|
1952
|
+
DeviceGetInfoOtherTypeInput: () => DeviceGetInfoOtherTypeInput,
|
|
1953
|
+
DiskDetailsTypeInput: () => DiskDetailsTypeInput,
|
|
1954
|
+
DiskWipeModeInput: () => DiskWipeModeInput,
|
|
1955
|
+
DockerStatusInfoStatus: () => DockerStatusInfoStatus,
|
|
1956
|
+
DockerStatusInfoStatusInput: () => DockerStatusInfoStatusInput,
|
|
1957
|
+
Enclosure2SetSlotStatusStatusInput: () => Enclosure2SetSlotStatusStatusInput,
|
|
1958
|
+
Encryption: () => Encryption,
|
|
1959
|
+
Endpoint: () => Endpoint,
|
|
1960
|
+
Exec: () => Exec,
|
|
1961
|
+
Feature: () => Feature,
|
|
1962
|
+
FilesystemDirEntryType: () => FilesystemDirEntryType,
|
|
1963
|
+
Function: () => Function,
|
|
1964
|
+
GetDisplayDeviceType: () => GetDisplayDeviceType,
|
|
1965
|
+
Hddstandby: () => Hddstandby,
|
|
1966
|
+
InitShutdownScriptCreateType: () => InitShutdownScriptCreateType,
|
|
1967
|
+
InitShutdownScriptCreateTypeInput: () => InitShutdownScriptCreateTypeInput,
|
|
1968
|
+
InterfaceCreateAliasTypeInput: () => InterfaceCreateAliasTypeInput,
|
|
1969
|
+
InterfaceCreateTypeInput: () => InterfaceCreateTypeInput,
|
|
1970
|
+
Iotype: () => Iotype,
|
|
1971
|
+
IpmiChassisIdentifyRequestVerb: () => IpmiChassisIdentifyRequestVerb,
|
|
1972
|
+
IscsiExtentCreateType: () => IscsiExtentCreateType,
|
|
1973
|
+
IscsiExtentCreateTypeInput: () => IscsiExtentCreateTypeInput,
|
|
1974
|
+
IscsiTargetCreateMode: () => IscsiTargetCreateMode,
|
|
1975
|
+
IscsiTargetCreateModeInput: () => IscsiTargetCreateModeInput,
|
|
1976
|
+
KeychainCredentialEntryType: () => KeychainCredentialEntryType,
|
|
1977
|
+
KeychainCredentialEntryTypeInput: () => KeychainCredentialEntryTypeInput,
|
|
1978
|
+
Level: () => Level,
|
|
1979
|
+
NFS4ACEType: () => NFS4ACEType,
|
|
1980
|
+
NFS4ACETypeInput: () => NFS4ACETypeInput,
|
|
1981
|
+
Name: () => Name,
|
|
1982
|
+
Policy: () => Policy,
|
|
1983
|
+
PoolCreateChecksum: () => PoolCreateChecksum,
|
|
1984
|
+
PoolCreateDeduplication: () => PoolCreateDeduplication,
|
|
1985
|
+
PoolCreateTopologyDataVdevDRAIDTypeInput: () => PoolCreateTopologyDataVdevDRAIDTypeInput,
|
|
1986
|
+
PoolDatasetCreateFilesystemAcltypeInput: () => PoolDatasetCreateFilesystemAcltypeInput,
|
|
1987
|
+
PoolDatasetCreateFilesystemChecksum: () => PoolDatasetCreateFilesystemChecksum,
|
|
1988
|
+
PoolDatasetCreateFilesystemDeduplication: () => PoolDatasetCreateFilesystemDeduplication,
|
|
1989
|
+
PoolDatasetCreateFilesystemReadonlyInput: () => PoolDatasetCreateFilesystemReadonlyInput,
|
|
1990
|
+
PoolDatasetDeleteResult: () => PoolDatasetDeleteResult,
|
|
1991
|
+
PoolScanStateInput: () => PoolScanStateInput,
|
|
1992
|
+
Protocol: () => Protocol,
|
|
1993
|
+
Purpose: () => Purpose2,
|
|
1994
|
+
Readonly: () => Readonly,
|
|
1995
|
+
ReplicationCountEligibleManualSnapshotsTransportInput: () => ReplicationCountEligibleManualSnapshotsTransportInput,
|
|
1996
|
+
ReplicationCreateReadonlyInput: () => ReplicationCreateReadonlyInput,
|
|
1997
|
+
Resolution: () => Resolution,
|
|
1998
|
+
Rpm: () => Rpm,
|
|
1999
|
+
RsyncTaskCreateDirection: () => RsyncTaskCreateDirection,
|
|
2000
|
+
RsyncTaskCreateDirectionInput: () => RsyncTaskCreateDirectionInput,
|
|
2001
|
+
RsyncTaskCreateMode: () => RsyncTaskCreateMode,
|
|
2002
|
+
RsyncTaskCreateModeInput: () => RsyncTaskCreateModeInput,
|
|
2003
|
+
SMBEntryEncryptionInput: () => SMBEntryEncryptionInput,
|
|
2004
|
+
STIGType: () => STIGType,
|
|
2005
|
+
Schema: () => Schema,
|
|
2006
|
+
Security: () => Security,
|
|
2007
|
+
Serialspeed: () => Serialspeed,
|
|
2008
|
+
ServiceControlVerb: () => ServiceControlVerb,
|
|
2009
|
+
Shutdown: () => Shutdown,
|
|
2010
|
+
Snapdev: () => Snapdev,
|
|
2011
|
+
Snapdir: () => Snapdir,
|
|
2012
|
+
Source: () => Source,
|
|
2013
|
+
SourceInput: () => SourceInput,
|
|
2014
|
+
State: () => State,
|
|
2015
|
+
SupportNewTicketCommunityTypeInput: () => SupportNewTicketCommunityTypeInput,
|
|
2016
|
+
Sync: () => Sync,
|
|
2017
|
+
SyslogServerTransportInput: () => SyslogServerTransportInput,
|
|
2018
|
+
Sysloglevel: () => Sysloglevel,
|
|
2019
|
+
SystemProductTypeResult: () => SystemProductTypeResult,
|
|
2020
|
+
SystemStateResult: () => SystemStateResult,
|
|
2021
|
+
Tag: () => Tag,
|
|
2022
|
+
Target: () => Target,
|
|
2023
|
+
Time: () => Time,
|
|
2024
|
+
Transport: () => Transport,
|
|
2025
|
+
TruecommandConfigChangedEventFieldsStatus: () => TruecommandConfigChangedEventFieldsStatus,
|
|
2026
|
+
TruecommandConfigChangedEventFieldsStatusInput: () => TruecommandConfigChangedEventFieldsStatusInput,
|
|
2027
|
+
TunableCreateType: () => TunableCreateType,
|
|
2028
|
+
TunableCreateTypeInput: () => TunableCreateTypeInput,
|
|
2029
|
+
UPSEntryMode: () => UPSEntryMode,
|
|
2030
|
+
UPSEntryModeInput: () => UPSEntryModeInput,
|
|
2031
|
+
Unixcharset: () => Unixcharset,
|
|
2032
|
+
Username: () => Username,
|
|
2033
|
+
VMDiskDeviceType: () => VMDiskDeviceType,
|
|
2034
|
+
VMDiskDeviceTypeInput: () => VMDiskDeviceTypeInput,
|
|
2035
|
+
VMWareEntryStateStateInput: () => VMWareEntryStateStateInput,
|
|
2036
|
+
VMWareMatchDatastoresWithDatasetsResultFilesystemType: () => VMWareMatchDatastoresWithDatasetsResultFilesystemType,
|
|
2037
|
+
Vendor: () => Vendor,
|
|
2038
|
+
Volblocksize: () => Volblocksize,
|
|
2039
|
+
When: () => When,
|
|
2040
|
+
ZfsTierRewriteJobEntryStatusInput: () => ZfsTierRewriteJobEntryStatusInput
|
|
2041
|
+
});
|
|
2042
|
+
|
|
2043
|
+
// src/generated/v25_10_2/api-types.ts
|
|
2044
|
+
var IpmiChassisIdentifyRequestVerb = {
|
|
2045
|
+
On: "ON",
|
|
2046
|
+
Off: "OFF"
|
|
2047
|
+
};
|
|
2048
|
+
|
|
2049
|
+
// src/generated/v25_10_3/index.ts
|
|
2050
|
+
var v25_10_3_exports = {};
|
|
2051
|
+
__export(v25_10_3_exports, {
|
|
2766
2052
|
ACLTemplateEntryAcltypeInput: () => ACLTemplateEntryAcltypeInput,
|
|
2767
2053
|
Aclmode: () => Aclmode,
|
|
2768
2054
|
Acltype: () => Acltype,
|
|
@@ -2791,7 +2077,7 @@ __export(v25_10_2_exports, {
|
|
|
2791
2077
|
DiskWipeModeInput: () => DiskWipeModeInput,
|
|
2792
2078
|
DockerStatusInfoStatus: () => DockerStatusInfoStatus,
|
|
2793
2079
|
DockerStatusInfoStatusInput: () => DockerStatusInfoStatusInput,
|
|
2794
|
-
Enclosure2SetSlotStatusStatusInput: () =>
|
|
2080
|
+
Enclosure2SetSlotStatusStatusInput: () => Enclosure2SetSlotStatusStatusInput,
|
|
2795
2081
|
Encryption: () => Encryption,
|
|
2796
2082
|
Endpoint: () => Endpoint,
|
|
2797
2083
|
Exec: () => Exec,
|
|
@@ -2877,15 +2163,9 @@ __export(v25_10_2_exports, {
|
|
|
2877
2163
|
ZfsTierRewriteJobEntryStatusInput: () => ZfsTierRewriteJobEntryStatusInput
|
|
2878
2164
|
});
|
|
2879
2165
|
|
|
2880
|
-
// src/generated/
|
|
2881
|
-
var
|
|
2882
|
-
|
|
2883
|
-
Off: "OFF"
|
|
2884
|
-
};
|
|
2885
|
-
|
|
2886
|
-
// src/generated/v25_10_3/index.ts
|
|
2887
|
-
var v25_10_3_exports = {};
|
|
2888
|
-
__export(v25_10_3_exports, {
|
|
2166
|
+
// src/generated/v25_10_4/index.ts
|
|
2167
|
+
var v25_10_4_exports = {};
|
|
2168
|
+
__export(v25_10_4_exports, {
|
|
2889
2169
|
ACLTemplateEntryAcltypeInput: () => ACLTemplateEntryAcltypeInput,
|
|
2890
2170
|
Aclmode: () => Aclmode,
|
|
2891
2171
|
Acltype: () => Acltype,
|
|
@@ -2914,7 +2194,7 @@ __export(v25_10_3_exports, {
|
|
|
2914
2194
|
DiskWipeModeInput: () => DiskWipeModeInput,
|
|
2915
2195
|
DockerStatusInfoStatus: () => DockerStatusInfoStatus,
|
|
2916
2196
|
DockerStatusInfoStatusInput: () => DockerStatusInfoStatusInput,
|
|
2917
|
-
Enclosure2SetSlotStatusStatusInput: () =>
|
|
2197
|
+
Enclosure2SetSlotStatusStatusInput: () => Enclosure2SetSlotStatusStatusInput,
|
|
2918
2198
|
Encryption: () => Encryption,
|
|
2919
2199
|
Endpoint: () => Endpoint,
|
|
2920
2200
|
Exec: () => Exec,
|
|
@@ -3000,9 +2280,9 @@ __export(v25_10_3_exports, {
|
|
|
3000
2280
|
ZfsTierRewriteJobEntryStatusInput: () => ZfsTierRewriteJobEntryStatusInput
|
|
3001
2281
|
});
|
|
3002
2282
|
|
|
3003
|
-
// src/generated/
|
|
3004
|
-
var
|
|
3005
|
-
__export(
|
|
2283
|
+
// src/generated/v25_10_5/index.ts
|
|
2284
|
+
var v25_10_5_exports = {};
|
|
2285
|
+
__export(v25_10_5_exports, {
|
|
3006
2286
|
ACLTemplateEntryAcltypeInput: () => ACLTemplateEntryAcltypeInput,
|
|
3007
2287
|
Aclmode: () => Aclmode,
|
|
3008
2288
|
Acltype: () => Acltype,
|
|
@@ -3031,7 +2311,7 @@ __export(v25_10_4_exports, {
|
|
|
3031
2311
|
DiskWipeModeInput: () => DiskWipeModeInput,
|
|
3032
2312
|
DockerStatusInfoStatus: () => DockerStatusInfoStatus,
|
|
3033
2313
|
DockerStatusInfoStatusInput: () => DockerStatusInfoStatusInput,
|
|
3034
|
-
Enclosure2SetSlotStatusStatusInput: () =>
|
|
2314
|
+
Enclosure2SetSlotStatusStatusInput: () => Enclosure2SetSlotStatusStatusInput,
|
|
3035
2315
|
Encryption: () => Encryption,
|
|
3036
2316
|
Endpoint: () => Endpoint,
|
|
3037
2317
|
Exec: () => Exec,
|
|
@@ -3117,15 +2397,15 @@ __export(v25_10_4_exports, {
|
|
|
3117
2397
|
ZfsTierRewriteJobEntryStatusInput: () => ZfsTierRewriteJobEntryStatusInput
|
|
3118
2398
|
});
|
|
3119
2399
|
|
|
3120
|
-
// src/generated/
|
|
3121
|
-
var
|
|
3122
|
-
__export(
|
|
2400
|
+
// src/generated/v26_0_0/index.ts
|
|
2401
|
+
var v26_0_0_exports = {};
|
|
2402
|
+
__export(v26_0_0_exports, {
|
|
3123
2403
|
ACLTemplateEntryAcltypeInput: () => ACLTemplateEntryAcltypeInput,
|
|
3124
2404
|
Aclmode: () => Aclmode,
|
|
3125
2405
|
Acltype: () => Acltype,
|
|
3126
|
-
Action: () => Action,
|
|
3127
2406
|
Advpowermgmt: () => Advpowermgmt,
|
|
3128
2407
|
Algorithm: () => Algorithm,
|
|
2408
|
+
AppContainerDetailsState: () => AppContainerDetailsState,
|
|
3129
2409
|
AppContainerDetailsStateInput: () => AppContainerDetailsStateInput,
|
|
3130
2410
|
Atime: () => Atime,
|
|
3131
2411
|
Authenticator: () => Authenticator,
|
|
@@ -3141,6 +2421,10 @@ __export(v25_10_5_exports, {
|
|
|
3141
2421
|
CloudTaskAttributesEncryptionInput: () => CloudTaskAttributesEncryptionInput,
|
|
3142
2422
|
Code: () => Code,
|
|
3143
2423
|
Compression: () => Compression,
|
|
2424
|
+
ContainerNICDeviceType: () => ContainerNICDeviceType,
|
|
2425
|
+
ContainerNICDeviceTypeInput: () => ContainerNICDeviceTypeInput,
|
|
2426
|
+
ContainerStatusState: () => ContainerStatusState,
|
|
2427
|
+
ContainerStatusStateInput: () => ContainerStatusStateInput,
|
|
3144
2428
|
CorePingRemoteTypeInput: () => CorePingRemoteTypeInput,
|
|
3145
2429
|
Credentials: () => Credentials,
|
|
3146
2430
|
DeviceGetInfoOtherTypeInput: () => DeviceGetInfoOtherTypeInput,
|
|
@@ -3148,11 +2432,11 @@ __export(v25_10_5_exports, {
|
|
|
3148
2432
|
DiskWipeModeInput: () => DiskWipeModeInput,
|
|
3149
2433
|
DockerStatusInfoStatus: () => DockerStatusInfoStatus,
|
|
3150
2434
|
DockerStatusInfoStatusInput: () => DockerStatusInfoStatusInput,
|
|
3151
|
-
Enclosure2SetSlotStatusStatusInput: () =>
|
|
2435
|
+
Enclosure2SetSlotStatusStatusInput: () => Enclosure2SetSlotStatusStatusInput,
|
|
3152
2436
|
Encryption: () => Encryption,
|
|
3153
2437
|
Endpoint: () => Endpoint,
|
|
3154
2438
|
Exec: () => Exec,
|
|
3155
|
-
Feature: () =>
|
|
2439
|
+
Feature: () => Feature2,
|
|
3156
2440
|
FilesystemDirEntryType: () => FilesystemDirEntryType,
|
|
3157
2441
|
Function: () => Function,
|
|
3158
2442
|
GetDisplayDeviceType: () => GetDisplayDeviceType,
|
|
@@ -3161,6 +2445,7 @@ __export(v25_10_5_exports, {
|
|
|
3161
2445
|
InitShutdownScriptCreateTypeInput: () => InitShutdownScriptCreateTypeInput,
|
|
3162
2446
|
InterfaceCreateAliasTypeInput: () => InterfaceCreateAliasTypeInput,
|
|
3163
2447
|
InterfaceCreateTypeInput: () => InterfaceCreateTypeInput,
|
|
2448
|
+
Interval: () => Interval,
|
|
3164
2449
|
Iotype: () => Iotype,
|
|
3165
2450
|
IpmiChassisIdentifyRequestVerb: () => IpmiChassisIdentifyRequestVerb,
|
|
3166
2451
|
IscsiExtentCreateType: () => IscsiExtentCreateType,
|
|
@@ -3172,17 +2457,20 @@ __export(v25_10_5_exports, {
|
|
|
3172
2457
|
Level: () => Level,
|
|
3173
2458
|
NFS4ACEType: () => NFS4ACEType,
|
|
3174
2459
|
NFS4ACETypeInput: () => NFS4ACETypeInput,
|
|
3175
|
-
Name: () =>
|
|
2460
|
+
Name: () => Name2,
|
|
2461
|
+
Passkey: () => Passkey,
|
|
3176
2462
|
Policy: () => Policy,
|
|
3177
2463
|
PoolCreateChecksum: () => PoolCreateChecksum,
|
|
3178
2464
|
PoolCreateDeduplication: () => PoolCreateDeduplication,
|
|
3179
|
-
|
|
2465
|
+
PoolCreateTopologyDedupVdevTypeInput: () => PoolCreateTopologyDedupVdevTypeInput,
|
|
3180
2466
|
PoolDatasetCreateFilesystemAcltypeInput: () => PoolDatasetCreateFilesystemAcltypeInput,
|
|
3181
2467
|
PoolDatasetCreateFilesystemChecksum: () => PoolDatasetCreateFilesystemChecksum,
|
|
3182
2468
|
PoolDatasetCreateFilesystemDeduplication: () => PoolDatasetCreateFilesystemDeduplication,
|
|
3183
2469
|
PoolDatasetCreateFilesystemReadonlyInput: () => PoolDatasetCreateFilesystemReadonlyInput,
|
|
3184
2470
|
PoolDatasetDeleteResult: () => PoolDatasetDeleteResult,
|
|
2471
|
+
PoolScanState: () => PoolScanState,
|
|
3185
2472
|
PoolScanStateInput: () => PoolScanStateInput,
|
|
2473
|
+
PoolScrubAction: () => PoolScrubAction,
|
|
3186
2474
|
Protocol: () => Protocol,
|
|
3187
2475
|
Purpose: () => Purpose2,
|
|
3188
2476
|
Readonly: () => Readonly,
|
|
@@ -3199,13 +2487,13 @@ __export(v25_10_5_exports, {
|
|
|
3199
2487
|
Schema: () => Schema,
|
|
3200
2488
|
Security: () => Security,
|
|
3201
2489
|
Serialspeed: () => Serialspeed,
|
|
2490
|
+
Service: () => Service,
|
|
3202
2491
|
ServiceControlVerb: () => ServiceControlVerb,
|
|
3203
2492
|
Shutdown: () => Shutdown,
|
|
3204
2493
|
Snapdev: () => Snapdev,
|
|
3205
2494
|
Snapdir: () => Snapdir,
|
|
3206
2495
|
Source: () => Source,
|
|
3207
2496
|
SourceInput: () => SourceInput,
|
|
3208
|
-
State: () => State,
|
|
3209
2497
|
SupportNewTicketCommunityTypeInput: () => SupportNewTicketCommunityTypeInput,
|
|
3210
2498
|
Sync: () => Sync,
|
|
3211
2499
|
SyslogServerTransportInput: () => SyslogServerTransportInput,
|
|
@@ -3231,12 +2519,109 @@ __export(v25_10_5_exports, {
|
|
|
3231
2519
|
Vendor: () => Vendor,
|
|
3232
2520
|
Volblocksize: () => Volblocksize,
|
|
3233
2521
|
When: () => When,
|
|
3234
|
-
|
|
2522
|
+
ZfsTierRewriteJobEntryStatus: () => ZfsTierRewriteJobEntryStatus,
|
|
2523
|
+
ZfsTierRewriteJobEntryStatusInput: () => ZfsTierRewriteJobEntryStatusInput,
|
|
2524
|
+
ZpoolScrubRunAction: () => ZpoolScrubRunAction
|
|
3235
2525
|
});
|
|
3236
2526
|
|
|
3237
|
-
// src/generated/v26_0_0/
|
|
3238
|
-
var
|
|
3239
|
-
|
|
2527
|
+
// src/generated/v26_0_0/api-types.ts
|
|
2528
|
+
var AppContainerDetailsState = {
|
|
2529
|
+
Crashed: "crashed",
|
|
2530
|
+
Created: "created",
|
|
2531
|
+
Exited: "exited",
|
|
2532
|
+
Running: "running",
|
|
2533
|
+
Starting: "starting"
|
|
2534
|
+
};
|
|
2535
|
+
var ContainerNICDeviceType = {
|
|
2536
|
+
E1000: "E1000",
|
|
2537
|
+
Virtio: "VIRTIO"
|
|
2538
|
+
};
|
|
2539
|
+
var ContainerNICDeviceTypeInput = {
|
|
2540
|
+
E1000: "E1000",
|
|
2541
|
+
Virtio: "VIRTIO"
|
|
2542
|
+
};
|
|
2543
|
+
var ContainerStatusState = {
|
|
2544
|
+
Running: "RUNNING",
|
|
2545
|
+
Stopped: "STOPPED"
|
|
2546
|
+
};
|
|
2547
|
+
var ContainerStatusStateInput = {
|
|
2548
|
+
Running: "RUNNING",
|
|
2549
|
+
Stopped: "STOPPED"
|
|
2550
|
+
};
|
|
2551
|
+
var Feature2 = {
|
|
2552
|
+
Apps: "APPS",
|
|
2553
|
+
Dedup: "DEDUP",
|
|
2554
|
+
Fibrechannel: "FIBRECHANNEL",
|
|
2555
|
+
Sed: "SED",
|
|
2556
|
+
Support: "SUPPORT",
|
|
2557
|
+
Vms: "VMS",
|
|
2558
|
+
Zfstier: "ZFSTIER"
|
|
2559
|
+
};
|
|
2560
|
+
var Interval = {
|
|
2561
|
+
"30": 30,
|
|
2562
|
+
"60": 60
|
|
2563
|
+
};
|
|
2564
|
+
var Name2 = {
|
|
2565
|
+
Cpu: "cpu",
|
|
2566
|
+
Cputemp: "cputemp",
|
|
2567
|
+
Disk: "disk",
|
|
2568
|
+
Interface: "interface",
|
|
2569
|
+
Load: "load",
|
|
2570
|
+
Processes: "processes",
|
|
2571
|
+
Memory: "memory",
|
|
2572
|
+
Uptime: "uptime",
|
|
2573
|
+
Arcsize: "arcsize",
|
|
2574
|
+
Disktemp: "disktemp",
|
|
2575
|
+
Upscharge: "upscharge",
|
|
2576
|
+
Upsruntime: "upsruntime",
|
|
2577
|
+
Upsvoltage: "upsvoltage",
|
|
2578
|
+
Upscurrent: "upscurrent",
|
|
2579
|
+
Upsfrequency: "upsfrequency",
|
|
2580
|
+
Upsload: "upsload",
|
|
2581
|
+
Upstemperature: "upstemperature"
|
|
2582
|
+
};
|
|
2583
|
+
var Passkey = {
|
|
2584
|
+
Enabled: "ENABLED",
|
|
2585
|
+
Disabled: "DISABLED",
|
|
2586
|
+
Required: "REQUIRED"
|
|
2587
|
+
};
|
|
2588
|
+
var PoolCreateTopologyDedupVdevTypeInput = {
|
|
2589
|
+
Mirror: "MIRROR",
|
|
2590
|
+
Stripe: "STRIPE"
|
|
2591
|
+
};
|
|
2592
|
+
var PoolScanState = {
|
|
2593
|
+
Scanning: "SCANNING",
|
|
2594
|
+
Finished: "FINISHED",
|
|
2595
|
+
Canceled: "CANCELED"
|
|
2596
|
+
};
|
|
2597
|
+
var PoolScrubAction = {
|
|
2598
|
+
Start: "START",
|
|
2599
|
+
Stop: "STOP",
|
|
2600
|
+
Pause: "PAUSE"
|
|
2601
|
+
};
|
|
2602
|
+
var Service = {
|
|
2603
|
+
Middleware: "MIDDLEWARE",
|
|
2604
|
+
Smb: "SMB",
|
|
2605
|
+
Sudo: "SUDO",
|
|
2606
|
+
System: "SYSTEM"
|
|
2607
|
+
};
|
|
2608
|
+
var ZfsTierRewriteJobEntryStatus = {
|
|
2609
|
+
Complete: "COMPLETE",
|
|
2610
|
+
Running: "RUNNING",
|
|
2611
|
+
Queued: "QUEUED",
|
|
2612
|
+
Cancelled: "CANCELLED",
|
|
2613
|
+
Stopped: "STOPPED",
|
|
2614
|
+
Error: "ERROR"
|
|
2615
|
+
};
|
|
2616
|
+
var ZpoolScrubRunAction = {
|
|
2617
|
+
Start: "START",
|
|
2618
|
+
Pause: "PAUSE",
|
|
2619
|
+
Cancel: "CANCEL"
|
|
2620
|
+
};
|
|
2621
|
+
|
|
2622
|
+
// src/generated/v27_0_0/index.ts
|
|
2623
|
+
var v27_0_0_exports = {};
|
|
2624
|
+
__export(v27_0_0_exports, {
|
|
3240
2625
|
ACLTemplateEntryAcltypeInput: () => ACLTemplateEntryAcltypeInput,
|
|
3241
2626
|
Aclmode: () => Aclmode,
|
|
3242
2627
|
Acltype: () => Acltype,
|
|
@@ -3269,7 +2654,7 @@ __export(v26_0_0_exports, {
|
|
|
3269
2654
|
DiskWipeModeInput: () => DiskWipeModeInput,
|
|
3270
2655
|
DockerStatusInfoStatus: () => DockerStatusInfoStatus,
|
|
3271
2656
|
DockerStatusInfoStatusInput: () => DockerStatusInfoStatusInput,
|
|
3272
|
-
Enclosure2SetSlotStatusStatusInput: () =>
|
|
2657
|
+
Enclosure2SetSlotStatusStatusInput: () => Enclosure2SetSlotStatusStatusInput,
|
|
3273
2658
|
Encryption: () => Encryption,
|
|
3274
2659
|
Endpoint: () => Endpoint,
|
|
3275
2660
|
Exec: () => Exec,
|
|
@@ -3361,243 +2746,699 @@ __export(v26_0_0_exports, {
|
|
|
3361
2746
|
ZpoolScrubRunAction: () => ZpoolScrubRunAction
|
|
3362
2747
|
});
|
|
3363
2748
|
|
|
3364
|
-
// src/generated/
|
|
3365
|
-
var
|
|
3366
|
-
|
|
3367
|
-
|
|
3368
|
-
|
|
3369
|
-
|
|
3370
|
-
|
|
3371
|
-
|
|
3372
|
-
|
|
3373
|
-
|
|
3374
|
-
|
|
3375
|
-
|
|
3376
|
-
|
|
3377
|
-
|
|
3378
|
-
|
|
3379
|
-
|
|
3380
|
-
|
|
3381
|
-
|
|
3382
|
-
|
|
2749
|
+
// src/generated/index.ts
|
|
2750
|
+
var SUPPORTED_API_VERSIONS = [
|
|
2751
|
+
"v25.10.0",
|
|
2752
|
+
"v25.10.1",
|
|
2753
|
+
"v25.10.2",
|
|
2754
|
+
"v25.10.3",
|
|
2755
|
+
"v25.10.4",
|
|
2756
|
+
"v25.10.5",
|
|
2757
|
+
"v26.0.0",
|
|
2758
|
+
"v27.0.0"
|
|
2759
|
+
];
|
|
2760
|
+
|
|
2761
|
+
// src/config/api-version.config.ts
|
|
2762
|
+
var apiVersionConfig = {
|
|
2763
|
+
/**
|
|
2764
|
+
* Minimum supported API version. Systems below it are rejected.
|
|
2765
|
+
*
|
|
2766
|
+
* DERIVED, not declared. The client supports exactly the versions it ships
|
|
2767
|
+
* types for, so the oldest generated version *is* the minimum — there is no
|
|
2768
|
+
* second decision to make, and therefore nothing to keep in sync.
|
|
2769
|
+
*
|
|
2770
|
+
* To move the floor, change `--min-version` in the `generate:api` script in
|
|
2771
|
+
* package.json and regenerate; this follows on its own. Written as a literal
|
|
2772
|
+
* it would duplicate that value with nothing enforcing agreement, so raising
|
|
2773
|
+
* one and forgetting the other would silently keep generating types for
|
|
2774
|
+
* versions the client rejects.
|
|
2775
|
+
*/
|
|
2776
|
+
MIN_SUPPORTED_VERSION: SUPPORTED_API_VERSIONS[0],
|
|
2777
|
+
/**
|
|
2778
|
+
* Maximum supported API version. Systems above it are rejected.
|
|
2779
|
+
*
|
|
2780
|
+
* NOT derived, deliberately. This should be the newest generated version by
|
|
2781
|
+
* the same argument as MIN, but `instantiateClientForVersion` only maps
|
|
2782
|
+
* `25.10` and `26` — a v27 system would pass the range check and then throw
|
|
2783
|
+
* on client selection. It moves to the newest generated version once a v27
|
|
2784
|
+
* client exists. Until then it lags on purpose, and the `satisfies` clause
|
|
2785
|
+
* below still pins it to a version that was actually generated.
|
|
2786
|
+
*/
|
|
2787
|
+
MAX_SUPPORTED_VERSION: "v26.0.0",
|
|
2788
|
+
/**
|
|
2789
|
+
* Fallback version to use when version discovery fails due to CORS/network errors.
|
|
2790
|
+
* When /api/versions returns HTTP status 0 (CORS block, network down, etc.),
|
|
2791
|
+
* the system will attempt to connect using this version as a best-effort fallback.
|
|
2792
|
+
*
|
|
2793
|
+
* WARNING: Status 0 errors have multiple causes:
|
|
2794
|
+
* - CORS policy blocking the request
|
|
2795
|
+
* - Network disconnected
|
|
2796
|
+
* - DNS lookup failure
|
|
2797
|
+
* - Server unreachable
|
|
2798
|
+
*
|
|
2799
|
+
* Using this fallback means systems with genuine network issues will still
|
|
2800
|
+
* attempt connection (and fail during WebSocket handshake instead of immediately).
|
|
2801
|
+
*/
|
|
2802
|
+
FALLBACK_VERSION: "v25.10.0"
|
|
2803
|
+
};
|
|
2804
|
+
|
|
2805
|
+
// src/types/api-version.type.ts
|
|
2806
|
+
var VersionCompatibility = /* @__PURE__ */ ((VersionCompatibility2) => {
|
|
2807
|
+
VersionCompatibility2["Compatible"] = "compatible";
|
|
2808
|
+
VersionCompatibility2["TooOld"] = "too-old";
|
|
2809
|
+
VersionCompatibility2["TooNew"] = "too-new";
|
|
2810
|
+
VersionCompatibility2["Invalid"] = "invalid";
|
|
2811
|
+
return VersionCompatibility2;
|
|
2812
|
+
})(VersionCompatibility || {});
|
|
2813
|
+
|
|
2814
|
+
// src/utils/api-version.utils.ts
|
|
2815
|
+
var legacyCutoffYear = 25;
|
|
2816
|
+
function parseApiVersion(versionString) {
|
|
2817
|
+
const regex = /^v(\d{2})\.(\d+)\.(\d+)$/;
|
|
2818
|
+
const match = versionString.match(regex);
|
|
2819
|
+
if (!match) {
|
|
2820
|
+
return null;
|
|
2821
|
+
}
|
|
2822
|
+
const [, yearStr, minorStr, patchStr] = match;
|
|
2823
|
+
const year = parseInt(yearStr, 10);
|
|
2824
|
+
const minor = parseInt(minorStr, 10);
|
|
2825
|
+
const patch = parseInt(patchStr, 10);
|
|
2826
|
+
if (year <= legacyCutoffYear) {
|
|
2827
|
+
if (minor < 1 || minor > 12) {
|
|
2828
|
+
return null;
|
|
2829
|
+
}
|
|
2830
|
+
} else if (year >= 26) {
|
|
2831
|
+
if (minor < 0 || minor > 99) {
|
|
2832
|
+
return null;
|
|
2833
|
+
}
|
|
2834
|
+
}
|
|
2835
|
+
return {
|
|
2836
|
+
version: versionString,
|
|
2837
|
+
year,
|
|
2838
|
+
minor,
|
|
2839
|
+
patch,
|
|
2840
|
+
websocketPath: `/api/${versionString}`
|
|
2841
|
+
};
|
|
2842
|
+
}
|
|
2843
|
+
function compareVersions(a, b) {
|
|
2844
|
+
if (a.year !== b.year) {
|
|
2845
|
+
return a.year - b.year;
|
|
2846
|
+
}
|
|
2847
|
+
if (a.minor !== b.minor) {
|
|
2848
|
+
return a.minor - b.minor;
|
|
2849
|
+
}
|
|
2850
|
+
return a.patch - b.patch;
|
|
2851
|
+
}
|
|
2852
|
+
function checkVersionCompatibility(version) {
|
|
2853
|
+
const minVersion = parseApiVersion(apiVersionConfig.MIN_SUPPORTED_VERSION);
|
|
2854
|
+
const maxVersion = parseApiVersion(apiVersionConfig.MAX_SUPPORTED_VERSION);
|
|
2855
|
+
if (!minVersion || !maxVersion) {
|
|
2856
|
+
return "invalid" /* Invalid */;
|
|
2857
|
+
}
|
|
2858
|
+
if (compareVersions(version, minVersion) < 0) {
|
|
2859
|
+
return "too-old" /* TooOld */;
|
|
2860
|
+
}
|
|
2861
|
+
if (compareVersions(version, maxVersion) > 0) {
|
|
2862
|
+
return "too-new" /* TooNew */;
|
|
2863
|
+
}
|
|
2864
|
+
return "compatible" /* Compatible */;
|
|
2865
|
+
}
|
|
2866
|
+
function isVersionSupported(version) {
|
|
2867
|
+
return checkVersionCompatibility(version) === "compatible" /* Compatible */;
|
|
2868
|
+
}
|
|
2869
|
+
function filterCompatibleVersions(versions) {
|
|
2870
|
+
return versions.filter(isVersionSupported);
|
|
2871
|
+
}
|
|
2872
|
+
function getWebSocketPath(version) {
|
|
2873
|
+
return version.websocketPath;
|
|
2874
|
+
}
|
|
2875
|
+
|
|
2876
|
+
// src/client/truenas-api-client.ts
|
|
2877
|
+
var TrueNasApiClient = class {
|
|
2878
|
+
constructor(uuid, hostnames, version, enabled, systemName, logger = noopLogger) {
|
|
2879
|
+
this.uuid = uuid;
|
|
2880
|
+
this.hostnames = hostnames;
|
|
2881
|
+
this.version = version;
|
|
2882
|
+
this.enabled = enabled;
|
|
2883
|
+
this.systemName = systemName;
|
|
2884
|
+
this.logger = logger;
|
|
2885
|
+
this.connection = this.createConnection();
|
|
2886
|
+
this.authenticator = this.createAuthenticator();
|
|
2887
|
+
this.api = this.createApi();
|
|
2888
|
+
this.ops = this.createOperations();
|
|
2889
|
+
}
|
|
2890
|
+
/**
|
|
2891
|
+
* Get current connection status.
|
|
2892
|
+
* @returns true if WebSocket is connected
|
|
2893
|
+
*/
|
|
2894
|
+
get connected() {
|
|
2895
|
+
return this.connection.opened.getValue();
|
|
2896
|
+
}
|
|
2897
|
+
/**
|
|
2898
|
+
* Get current authentication status.
|
|
2899
|
+
* @returns true if authenticated with the system
|
|
2900
|
+
*/
|
|
2901
|
+
get authenticated() {
|
|
2902
|
+
return this.authenticator.authenticated$.getValue();
|
|
2903
|
+
}
|
|
2904
|
+
/**
|
|
2905
|
+
* Close the WebSocket connection.
|
|
2906
|
+
* Connection will automatically retry if retry is enabled.
|
|
2907
|
+
*/
|
|
2908
|
+
close() {
|
|
2909
|
+
this.connection.close();
|
|
2910
|
+
}
|
|
2911
|
+
/**
|
|
2912
|
+
* Factory method to create the WebSocket connection.
|
|
2913
|
+
* Override in subclasses to provide version-specific connection handling.
|
|
2914
|
+
*/
|
|
2915
|
+
createConnection() {
|
|
2916
|
+
const websocketPath = getWebSocketPath(this.version);
|
|
2917
|
+
return new TrueNasConnection(
|
|
2918
|
+
this.enabled,
|
|
2919
|
+
this.hostnames,
|
|
2920
|
+
this.uuid,
|
|
2921
|
+
websocketPath,
|
|
2922
|
+
this.systemName,
|
|
2923
|
+
void 0,
|
|
2924
|
+
// retryDelay (use default)
|
|
2925
|
+
void 0,
|
|
2926
|
+
// maxRetry (use default)
|
|
2927
|
+
this.logger
|
|
2928
|
+
);
|
|
2929
|
+
}
|
|
2930
|
+
/**
|
|
2931
|
+
* Factory method to create the API handler.
|
|
2932
|
+
* Override in subclasses to provide version-specific API implementations.
|
|
2933
|
+
*/
|
|
2934
|
+
createApi() {
|
|
2935
|
+
return new TrueNasApi(this.authenticator.authenticated$, this.connection);
|
|
2936
|
+
}
|
|
2937
|
+
/**
|
|
2938
|
+
* Factory method to create the authenticator.
|
|
2939
|
+
* Override in subclasses to provide version-specific authentication.
|
|
2940
|
+
*/
|
|
2941
|
+
createAuthenticator() {
|
|
2942
|
+
return new TrueNasAuthenticator(this.connection);
|
|
2943
|
+
}
|
|
3383
2944
|
};
|
|
3384
|
-
|
|
3385
|
-
|
|
3386
|
-
|
|
2945
|
+
|
|
2946
|
+
// src/client/truenas-api-client-v25-10.ts
|
|
2947
|
+
var TrueNasApiClientV2510 = class extends TrueNasApiClient {
|
|
2948
|
+
/**
|
|
2949
|
+
* Create v25.10-specific operation mappings
|
|
2950
|
+
*
|
|
2951
|
+
* virt.instance.* APIs return boolean (true) but emit job events via websocket.
|
|
2952
|
+
* We use callAndGetJobId to capture the job ID, then track the job.
|
|
2953
|
+
* All operations emit Job updates until the operation completes.
|
|
2954
|
+
*/
|
|
2955
|
+
createOperations() {
|
|
2956
|
+
return {
|
|
2957
|
+
containerQuery: () => this.api.call("virt.instance.query" /* VirtualInstanceQuery */, [
|
|
2958
|
+
[["type", "=", "CONTAINER" /* Container */]]
|
|
2959
|
+
]).pipe(map((instances) => instances.map(this.toContainer))),
|
|
2960
|
+
containerStart: (id) => this.api.callAndGetJobId("virt.instance.start" /* VirtualInstanceStart */, [id]).pipe(switchMap((jobId) => this.api.trackJob(jobId))),
|
|
2961
|
+
containerStop: (id, options) => this.api.callAndGetJobId("virt.instance.stop" /* VirtualInstanceStop */, [id, options]).pipe(switchMap((jobId) => this.api.trackJob(jobId))),
|
|
2962
|
+
containerRestart: (id, options) => this.api.callAndGetJobId("virt.instance.restart" /* VirtualInstanceRestart */, [
|
|
2963
|
+
id,
|
|
2964
|
+
options
|
|
2965
|
+
]).pipe(switchMap((jobId) => this.api.trackJob(jobId)))
|
|
2966
|
+
};
|
|
2967
|
+
}
|
|
2968
|
+
/**
|
|
2969
|
+
* Transform VirtualInstanceQuery to unified Container type
|
|
2970
|
+
*/
|
|
2971
|
+
toContainer(instance) {
|
|
2972
|
+
return {
|
|
2973
|
+
id: instance.id,
|
|
2974
|
+
name: instance.name,
|
|
2975
|
+
status: instance.status,
|
|
2976
|
+
autostart: instance.autostart,
|
|
2977
|
+
cpu: instance.cpu,
|
|
2978
|
+
memory: instance.memory,
|
|
2979
|
+
image: instance.image
|
|
2980
|
+
};
|
|
2981
|
+
}
|
|
3387
2982
|
};
|
|
3388
|
-
var
|
|
3389
|
-
|
|
3390
|
-
|
|
3391
|
-
|
|
3392
|
-
|
|
3393
|
-
|
|
3394
|
-
|
|
3395
|
-
|
|
2983
|
+
var TrueNasApiClientV26 = class _TrueNasApiClientV26 extends TrueNasApiClient {
|
|
2984
|
+
/**
|
|
2985
|
+
* Map v26 status state string to AppState enum
|
|
2986
|
+
*/
|
|
2987
|
+
static mapStatus(state) {
|
|
2988
|
+
switch (state.toUpperCase()) {
|
|
2989
|
+
case "RUNNING":
|
|
2990
|
+
return "RUNNING" /* Running */;
|
|
2991
|
+
case "STOPPED":
|
|
2992
|
+
return "STOPPED" /* Stopped */;
|
|
2993
|
+
case "STOPPING":
|
|
2994
|
+
return "STOPPING" /* Stopping */;
|
|
2995
|
+
default:
|
|
2996
|
+
return "STOPPED" /* Stopped */;
|
|
2997
|
+
}
|
|
2998
|
+
}
|
|
2999
|
+
/**
|
|
3000
|
+
* Create v26-specific operation mappings
|
|
3001
|
+
*
|
|
3002
|
+
* Operations return Observable<Job | null>:
|
|
3003
|
+
* - Async operations emit Job updates until complete
|
|
3004
|
+
* - Sync operations emit null once
|
|
3005
|
+
*/
|
|
3006
|
+
createOperations() {
|
|
3007
|
+
return {
|
|
3008
|
+
containerQuery: () => this.api.call("container.query" /* ContainerQuery */, [[]]).pipe(map((containers) => containers.map(this.toContainer))),
|
|
3009
|
+
// container.start is synchronous in v26.0.0 - emit null
|
|
3010
|
+
containerStart: (id) => this.api.call("container.start" /* ContainerStart */, [parseInt(id, 10)]).pipe(map(() => null)),
|
|
3011
|
+
// container.stop emits job updates
|
|
3012
|
+
containerStop: (id, options) => this.api.callAndGetJobId("container.stop" /* ContainerStop */, [
|
|
3013
|
+
parseInt(id, 10),
|
|
3014
|
+
{
|
|
3015
|
+
force: options.force,
|
|
3016
|
+
force_after_timeout: options.force
|
|
3017
|
+
}
|
|
3018
|
+
]).pipe(switchMap((jobId) => this.api.trackJob(jobId))),
|
|
3019
|
+
// v26.0.0 doesn't have container.restart - chain stop + start
|
|
3020
|
+
// Emits Job updates during stop, then null when start completes
|
|
3021
|
+
containerRestart: (id, options) => {
|
|
3022
|
+
const numericId = parseInt(id, 10);
|
|
3023
|
+
return this.api.callAndGetJobId("container.stop" /* ContainerStop */, [
|
|
3024
|
+
numericId,
|
|
3025
|
+
{
|
|
3026
|
+
force: options.force,
|
|
3027
|
+
force_after_timeout: options.force
|
|
3028
|
+
}
|
|
3029
|
+
]).pipe(
|
|
3030
|
+
// Track stop job until it completes
|
|
3031
|
+
switchMap((stopJobId) => this.api.trackJob(stopJobId)),
|
|
3032
|
+
// Collect all job updates to ensure stop fully completes
|
|
3033
|
+
toArray(),
|
|
3034
|
+
// Re-emit job updates, then call start after stop is done
|
|
3035
|
+
switchMap(
|
|
3036
|
+
(jobUpdates) => concat(
|
|
3037
|
+
from(jobUpdates),
|
|
3038
|
+
this.api.call("container.start" /* ContainerStart */, [numericId]).pipe(map(() => null))
|
|
3039
|
+
)
|
|
3040
|
+
)
|
|
3041
|
+
);
|
|
3042
|
+
}
|
|
3043
|
+
};
|
|
3044
|
+
}
|
|
3045
|
+
/**
|
|
3046
|
+
* Transform v26 ContainerQueryV26 to unified Container type
|
|
3047
|
+
*/
|
|
3048
|
+
toContainer(container) {
|
|
3049
|
+
return {
|
|
3050
|
+
id: container.id.toString(),
|
|
3051
|
+
name: container.name,
|
|
3052
|
+
status: _TrueNasApiClientV26.mapStatus(container.status.state),
|
|
3053
|
+
autostart: container.autostart,
|
|
3054
|
+
description: container.description
|
|
3055
|
+
// cpu and memory are not available in v26 container.query
|
|
3056
|
+
// image is not available in v26 container.query
|
|
3057
|
+
};
|
|
3058
|
+
}
|
|
3396
3059
|
};
|
|
3397
|
-
|
|
3398
|
-
|
|
3399
|
-
|
|
3060
|
+
|
|
3061
|
+
// src/errors/version-discovery.errors.ts
|
|
3062
|
+
var VersionDiscoveryError = class extends Error {
|
|
3063
|
+
constructor(message, hostname) {
|
|
3064
|
+
super(message);
|
|
3065
|
+
this.hostname = hostname;
|
|
3066
|
+
this.name = this.constructor.name;
|
|
3067
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
3068
|
+
}
|
|
3400
3069
|
};
|
|
3401
|
-
var
|
|
3402
|
-
|
|
3403
|
-
|
|
3404
|
-
|
|
3405
|
-
|
|
3406
|
-
|
|
3407
|
-
|
|
3408
|
-
|
|
3409
|
-
|
|
3410
|
-
|
|
3411
|
-
|
|
3412
|
-
Upscharge: "upscharge",
|
|
3413
|
-
Upsruntime: "upsruntime",
|
|
3414
|
-
Upsvoltage: "upsvoltage",
|
|
3415
|
-
Upscurrent: "upscurrent",
|
|
3416
|
-
Upsfrequency: "upsfrequency",
|
|
3417
|
-
Upsload: "upsload",
|
|
3418
|
-
Upstemperature: "upstemperature"
|
|
3070
|
+
var VersionTooOldError = class extends VersionDiscoveryError {
|
|
3071
|
+
constructor(hostname, availableVersions, minRequired = apiVersionConfig.MIN_SUPPORTED_VERSION) {
|
|
3072
|
+
super(
|
|
3073
|
+
`System API version is too old. Minimum supported: ${minRequired}. Available versions: ${availableVersions.join(
|
|
3074
|
+
", "
|
|
3075
|
+
)}`,
|
|
3076
|
+
hostname
|
|
3077
|
+
);
|
|
3078
|
+
this.availableVersions = availableVersions;
|
|
3079
|
+
this.minRequired = minRequired;
|
|
3080
|
+
}
|
|
3419
3081
|
};
|
|
3420
|
-
var
|
|
3421
|
-
|
|
3422
|
-
|
|
3423
|
-
|
|
3082
|
+
var VersionTooNewError = class extends VersionDiscoveryError {
|
|
3083
|
+
constructor(hostname, availableVersions, maxSupported = apiVersionConfig.MAX_SUPPORTED_VERSION) {
|
|
3084
|
+
super(
|
|
3085
|
+
`System API version is too new. Maximum supported: ${maxSupported}. Available versions: ${availableVersions.join(
|
|
3086
|
+
", "
|
|
3087
|
+
)}`,
|
|
3088
|
+
hostname
|
|
3089
|
+
);
|
|
3090
|
+
this.availableVersions = availableVersions;
|
|
3091
|
+
this.maxSupported = maxSupported;
|
|
3092
|
+
}
|
|
3424
3093
|
};
|
|
3425
|
-
var
|
|
3426
|
-
|
|
3427
|
-
|
|
3094
|
+
var VersionEndpointNotFoundError = class extends VersionDiscoveryError {
|
|
3095
|
+
constructor(hostname, statusCode = 404) {
|
|
3096
|
+
super(
|
|
3097
|
+
`Version discovery endpoint not found: ${hostname} (HTTP ${String(
|
|
3098
|
+
statusCode
|
|
3099
|
+
)})`,
|
|
3100
|
+
hostname
|
|
3101
|
+
);
|
|
3102
|
+
this.statusCode = statusCode;
|
|
3103
|
+
}
|
|
3428
3104
|
};
|
|
3429
|
-
var
|
|
3430
|
-
|
|
3431
|
-
|
|
3432
|
-
|
|
3105
|
+
var VersionDiscoveryTimeoutError = class extends VersionDiscoveryError {
|
|
3106
|
+
constructor(hostname, timeoutMs = 5e3) {
|
|
3107
|
+
super(
|
|
3108
|
+
`Cannot connect to system (timeout after ${String(
|
|
3109
|
+
timeoutMs
|
|
3110
|
+
)}ms): ${hostname}`,
|
|
3111
|
+
hostname
|
|
3112
|
+
);
|
|
3113
|
+
this.timeoutMs = timeoutMs;
|
|
3114
|
+
}
|
|
3433
3115
|
};
|
|
3434
|
-
var
|
|
3435
|
-
|
|
3436
|
-
|
|
3437
|
-
|
|
3116
|
+
var VersionDiscoveryNetworkError = class extends VersionDiscoveryError {
|
|
3117
|
+
constructor(hostname, originalError) {
|
|
3118
|
+
super(
|
|
3119
|
+
`Network error connecting to ${hostname}: ${originalError.message}`,
|
|
3120
|
+
hostname
|
|
3121
|
+
);
|
|
3122
|
+
this.originalError = originalError;
|
|
3123
|
+
}
|
|
3438
3124
|
};
|
|
3439
|
-
var
|
|
3440
|
-
|
|
3441
|
-
|
|
3442
|
-
|
|
3443
|
-
|
|
3125
|
+
var NoCompatibleVersionsError = class extends VersionDiscoveryError {
|
|
3126
|
+
constructor(hostname, availableVersions, supportedRange = {
|
|
3127
|
+
min: apiVersionConfig.MIN_SUPPORTED_VERSION,
|
|
3128
|
+
max: apiVersionConfig.MAX_SUPPORTED_VERSION
|
|
3129
|
+
}) {
|
|
3130
|
+
super(
|
|
3131
|
+
`No compatible API versions available. Supported: ${supportedRange.min} to ${supportedRange.max}. Available: ${availableVersions.join(", ")}`,
|
|
3132
|
+
hostname
|
|
3133
|
+
);
|
|
3134
|
+
this.availableVersions = availableVersions;
|
|
3135
|
+
this.supportedRange = supportedRange;
|
|
3136
|
+
}
|
|
3444
3137
|
};
|
|
3445
|
-
var
|
|
3446
|
-
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3450
|
-
Stopped: "STOPPED",
|
|
3451
|
-
Error: "ERROR"
|
|
3138
|
+
var InvalidVersionResponseError = class extends VersionDiscoveryError {
|
|
3139
|
+
constructor(hostname, reason) {
|
|
3140
|
+
super(`Invalid API response format from ${hostname}: ${reason}`, hostname);
|
|
3141
|
+
this.reason = reason;
|
|
3142
|
+
}
|
|
3452
3143
|
};
|
|
3453
|
-
var
|
|
3454
|
-
|
|
3455
|
-
|
|
3456
|
-
|
|
3144
|
+
var discoveryTimeoutMs = 5e3;
|
|
3145
|
+
function hasErrorName(error, expected) {
|
|
3146
|
+
return typeof error === "object" && error !== null && "name" in error && error.name === expected;
|
|
3147
|
+
}
|
|
3148
|
+
var VersionDiscovery = class {
|
|
3149
|
+
constructor(logger = noopLogger) {
|
|
3150
|
+
this.logger = logger;
|
|
3151
|
+
this.versionCache = /* @__PURE__ */ new Map();
|
|
3152
|
+
}
|
|
3153
|
+
/**
|
|
3154
|
+
* Discovers the API version for a given hostname.
|
|
3155
|
+
*
|
|
3156
|
+
* Makes a GET request to `https://{hostname}/api/versions` and returns the latest
|
|
3157
|
+
* compatible version. Results are cached per hostname; the cache entry is removed
|
|
3158
|
+
* on failure so the next call retries.
|
|
3159
|
+
*
|
|
3160
|
+
* @param hostname - The TrueNAS system hostname (e.g., "truenas.local")
|
|
3161
|
+
* @returns Observable that emits the selected ApiVersion
|
|
3162
|
+
* @throws VersionDiscoveryError subclasses for specific failure scenarios
|
|
3163
|
+
*/
|
|
3164
|
+
discoverVersion(hostname) {
|
|
3165
|
+
const cached = this.versionCache.get(hostname);
|
|
3166
|
+
if (cached) {
|
|
3167
|
+
this.logger.info("Version discovery cache hit", { hostname });
|
|
3168
|
+
return cached;
|
|
3169
|
+
}
|
|
3170
|
+
const url = `https://${hostname}/api/versions`;
|
|
3171
|
+
this.logger.info("Starting version discovery", { hostname, url });
|
|
3172
|
+
const discovery$ = defer(() => from(this.fetchVersions(hostname))).pipe(
|
|
3173
|
+
map$1((versionStrings) => this.selectVersion(hostname, versionStrings)),
|
|
3174
|
+
catchError((error) => {
|
|
3175
|
+
this.versionCache.delete(hostname);
|
|
3176
|
+
this.logger.error("Version discovery failed", { hostname, error });
|
|
3177
|
+
return throwError(() => this.classify(error, hostname));
|
|
3178
|
+
}),
|
|
3179
|
+
shareReplay(1)
|
|
3180
|
+
);
|
|
3181
|
+
this.versionCache.set(hostname, discovery$);
|
|
3182
|
+
return discovery$;
|
|
3183
|
+
}
|
|
3184
|
+
/**
|
|
3185
|
+
* Clears the version cache for a specific hostname or all hostnames.
|
|
3186
|
+
*
|
|
3187
|
+
* @param hostname - Optional hostname to clear. If omitted, clears all cached versions.
|
|
3188
|
+
*/
|
|
3189
|
+
clearCache(hostname) {
|
|
3190
|
+
if (hostname) {
|
|
3191
|
+
this.versionCache.delete(hostname);
|
|
3192
|
+
} else {
|
|
3193
|
+
this.versionCache.clear();
|
|
3194
|
+
}
|
|
3195
|
+
}
|
|
3196
|
+
/**
|
|
3197
|
+
* Performs the `fetch` with a 5-second `AbortController` timeout and inspects the
|
|
3198
|
+
* *resolved* Response (fetch does not reject on non-2xx). Throws
|
|
3199
|
+
* `VersionEndpointNotFoundError` on 404 and `InvalidVersionResponseError` on any
|
|
3200
|
+
* other non-2xx or a body that is not an array of strings; lets `TypeError`
|
|
3201
|
+
* (network) and `AbortError` (timeout) bubble to `classify`.
|
|
3202
|
+
*
|
|
3203
|
+
* The element-type check matters: a reachable server returning an array of
|
|
3204
|
+
* non-strings (e.g. `[1, 2, 3]`) would otherwise reach `parseApiVersion`, whose
|
|
3205
|
+
* `.match()` throws a `TypeError` on a non-string — which `classify` would then
|
|
3206
|
+
* misfile as a network error. Validating here keeps it an `InvalidVersionResponseError`.
|
|
3207
|
+
*/
|
|
3208
|
+
async fetchVersions(hostname) {
|
|
3209
|
+
const url = `https://${hostname}/api/versions`;
|
|
3210
|
+
const controller = new AbortController();
|
|
3211
|
+
const timer2 = setTimeout(() => controller.abort(), discoveryTimeoutMs);
|
|
3212
|
+
try {
|
|
3213
|
+
const response = await fetch(url, { signal: controller.signal });
|
|
3214
|
+
if (response.status === 404) {
|
|
3215
|
+
throw new VersionEndpointNotFoundError(hostname);
|
|
3216
|
+
}
|
|
3217
|
+
if (!response.ok) {
|
|
3218
|
+
throw new InvalidVersionResponseError(
|
|
3219
|
+
hostname,
|
|
3220
|
+
`HTTP ${String(response.status)}`
|
|
3221
|
+
);
|
|
3222
|
+
}
|
|
3223
|
+
const body = await response.json();
|
|
3224
|
+
if (!Array.isArray(body) || !body.every((v) => typeof v === "string")) {
|
|
3225
|
+
throw new InvalidVersionResponseError(
|
|
3226
|
+
hostname,
|
|
3227
|
+
"Response was not an array of version strings"
|
|
3228
|
+
);
|
|
3229
|
+
}
|
|
3230
|
+
return body;
|
|
3231
|
+
} finally {
|
|
3232
|
+
clearTimeout(timer2);
|
|
3233
|
+
}
|
|
3234
|
+
}
|
|
3235
|
+
/**
|
|
3236
|
+
* Parses, filters, and selects the latest compatible version from the raw response
|
|
3237
|
+
* array. Throws the appropriate typed error when no valid/compatible version exists.
|
|
3238
|
+
*/
|
|
3239
|
+
selectVersion(hostname, versionStrings) {
|
|
3240
|
+
this.logger.info("Version discovery response received", {
|
|
3241
|
+
hostname,
|
|
3242
|
+
versionCount: versionStrings.length,
|
|
3243
|
+
versions: versionStrings
|
|
3244
|
+
});
|
|
3245
|
+
const parsedVersions = versionStrings.map(parseApiVersion).filter((v) => v !== null);
|
|
3246
|
+
if (parsedVersions.length === 0) {
|
|
3247
|
+
this.logger.error("No valid versions in response", {
|
|
3248
|
+
hostname,
|
|
3249
|
+
versionStrings
|
|
3250
|
+
});
|
|
3251
|
+
throw new InvalidVersionResponseError(
|
|
3252
|
+
hostname,
|
|
3253
|
+
"No valid API versions found in response"
|
|
3254
|
+
);
|
|
3255
|
+
}
|
|
3256
|
+
const compatibleVersions = filterCompatibleVersions(parsedVersions);
|
|
3257
|
+
this.logger.info("Version compatibility check", {
|
|
3258
|
+
hostname,
|
|
3259
|
+
total: parsedVersions.length,
|
|
3260
|
+
compatible: compatibleVersions.length,
|
|
3261
|
+
supportedRange: {
|
|
3262
|
+
min: apiVersionConfig.MIN_SUPPORTED_VERSION,
|
|
3263
|
+
max: apiVersionConfig.MAX_SUPPORTED_VERSION
|
|
3264
|
+
}
|
|
3265
|
+
});
|
|
3266
|
+
if (compatibleVersions.length === 0) {
|
|
3267
|
+
const allTooOld = parsedVersions.every(
|
|
3268
|
+
(v) => checkVersionCompatibility(v) === "too-old" /* TooOld */
|
|
3269
|
+
);
|
|
3270
|
+
const allTooNew = parsedVersions.every(
|
|
3271
|
+
(v) => checkVersionCompatibility(v) === "too-new" /* TooNew */
|
|
3272
|
+
);
|
|
3273
|
+
const availableVersions = parsedVersions.map((v) => v.version);
|
|
3274
|
+
if (allTooOld) {
|
|
3275
|
+
this.logger.warn("All available versions too old", {
|
|
3276
|
+
hostname,
|
|
3277
|
+
availableVersions
|
|
3278
|
+
});
|
|
3279
|
+
throw new VersionTooOldError(hostname, availableVersions);
|
|
3280
|
+
} else if (allTooNew) {
|
|
3281
|
+
this.logger.warn("All available versions too new", {
|
|
3282
|
+
hostname,
|
|
3283
|
+
availableVersions
|
|
3284
|
+
});
|
|
3285
|
+
throw new VersionTooNewError(hostname, availableVersions);
|
|
3286
|
+
} else {
|
|
3287
|
+
this.logger.warn("No compatible versions found", {
|
|
3288
|
+
hostname,
|
|
3289
|
+
availableVersions
|
|
3290
|
+
});
|
|
3291
|
+
throw new NoCompatibleVersionsError(hostname, availableVersions);
|
|
3292
|
+
}
|
|
3293
|
+
}
|
|
3294
|
+
const sortedVersions = compatibleVersions.sort(
|
|
3295
|
+
(a, b) => compareVersions(b, a)
|
|
3296
|
+
);
|
|
3297
|
+
const selectedVersion = sortedVersions[0];
|
|
3298
|
+
this.logger.info("Version selected", {
|
|
3299
|
+
hostname,
|
|
3300
|
+
selected: selectedVersion.version,
|
|
3301
|
+
websocketPath: selectedVersion.websocketPath
|
|
3302
|
+
});
|
|
3303
|
+
return selectedVersion;
|
|
3304
|
+
}
|
|
3305
|
+
/**
|
|
3306
|
+
* Maps a raw failure to a typed {@link VersionDiscoveryError}. Errors thrown by
|
|
3307
|
+
* `fetchVersions`/`selectVersion` are already typed and pass through unchanged; a
|
|
3308
|
+
* `fetch` `TypeError` becomes {@link VersionDiscoveryNetworkError} (the CORS/network
|
|
3309
|
+
* sentinel), an `AbortError` becomes {@link VersionDiscoveryTimeoutError}, and any
|
|
3310
|
+
* other failure (e.g. an unparseable body's `SyntaxError`) becomes
|
|
3311
|
+
* {@link InvalidVersionResponseError}.
|
|
3312
|
+
*/
|
|
3313
|
+
classify(error, hostname) {
|
|
3314
|
+
if (error instanceof VersionDiscoveryError) {
|
|
3315
|
+
return error;
|
|
3316
|
+
}
|
|
3317
|
+
if (hasErrorName(error, "AbortError")) {
|
|
3318
|
+
this.logger.warn("Version discovery timeout", { hostname });
|
|
3319
|
+
return new VersionDiscoveryTimeoutError(hostname);
|
|
3320
|
+
}
|
|
3321
|
+
if (error instanceof TypeError) {
|
|
3322
|
+
this.logger.warn("Version discovery network error", {
|
|
3323
|
+
hostname,
|
|
3324
|
+
message: error.message
|
|
3325
|
+
});
|
|
3326
|
+
return new VersionDiscoveryNetworkError(hostname, error);
|
|
3327
|
+
}
|
|
3328
|
+
const reason = error instanceof Error ? error.message : "Unknown error";
|
|
3329
|
+
this.logger.warn("Version discovery failed with unknown error", {
|
|
3330
|
+
hostname,
|
|
3331
|
+
reason
|
|
3332
|
+
});
|
|
3333
|
+
return new InvalidVersionResponseError(
|
|
3334
|
+
hostname,
|
|
3335
|
+
`Versioned API not available. This system may be running an older TrueNAS version (requires v25.10.0+). ${reason}`
|
|
3336
|
+
);
|
|
3337
|
+
}
|
|
3457
3338
|
};
|
|
3458
3339
|
|
|
3459
|
-
// src/
|
|
3460
|
-
|
|
3461
|
-
|
|
3462
|
-
|
|
3463
|
-
|
|
3464
|
-
|
|
3465
|
-
|
|
3466
|
-
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
|
|
3474
|
-
|
|
3475
|
-
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
|
|
3479
|
-
|
|
3480
|
-
|
|
3481
|
-
|
|
3482
|
-
|
|
3483
|
-
|
|
3484
|
-
|
|
3485
|
-
|
|
3486
|
-
|
|
3487
|
-
|
|
3488
|
-
|
|
3489
|
-
|
|
3490
|
-
|
|
3491
|
-
|
|
3492
|
-
|
|
3493
|
-
|
|
3494
|
-
|
|
3495
|
-
|
|
3496
|
-
|
|
3497
|
-
|
|
3498
|
-
|
|
3499
|
-
|
|
3500
|
-
|
|
3501
|
-
|
|
3502
|
-
|
|
3503
|
-
|
|
3504
|
-
|
|
3505
|
-
|
|
3506
|
-
|
|
3507
|
-
|
|
3508
|
-
|
|
3509
|
-
|
|
3510
|
-
|
|
3511
|
-
|
|
3512
|
-
|
|
3513
|
-
|
|
3514
|
-
|
|
3515
|
-
|
|
3516
|
-
|
|
3517
|
-
|
|
3518
|
-
|
|
3519
|
-
|
|
3520
|
-
|
|
3521
|
-
|
|
3522
|
-
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
|
|
3526
|
-
|
|
3527
|
-
|
|
3528
|
-
|
|
3529
|
-
|
|
3530
|
-
|
|
3531
|
-
|
|
3532
|
-
|
|
3533
|
-
|
|
3534
|
-
|
|
3535
|
-
|
|
3536
|
-
|
|
3537
|
-
|
|
3538
|
-
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
|
|
3549
|
-
|
|
3550
|
-
|
|
3551
|
-
|
|
3552
|
-
|
|
3553
|
-
|
|
3554
|
-
|
|
3555
|
-
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
|
|
3559
|
-
|
|
3560
|
-
SystemProductTypeResult: () => SystemProductTypeResult,
|
|
3561
|
-
SystemStateResult: () => SystemStateResult,
|
|
3562
|
-
Tag: () => Tag,
|
|
3563
|
-
Target: () => Target,
|
|
3564
|
-
Time: () => Time,
|
|
3565
|
-
Transport: () => Transport,
|
|
3566
|
-
TruecommandConfigChangedEventFieldsStatus: () => TruecommandConfigChangedEventFieldsStatus,
|
|
3567
|
-
TruecommandConfigChangedEventFieldsStatusInput: () => TruecommandConfigChangedEventFieldsStatusInput,
|
|
3568
|
-
TunableCreateType: () => TunableCreateType,
|
|
3569
|
-
TunableCreateTypeInput: () => TunableCreateTypeInput,
|
|
3570
|
-
UPSEntryMode: () => UPSEntryMode,
|
|
3571
|
-
UPSEntryModeInput: () => UPSEntryModeInput,
|
|
3572
|
-
Unixcharset: () => Unixcharset,
|
|
3573
|
-
Username: () => Username,
|
|
3574
|
-
VMDiskDeviceType: () => VMDiskDeviceType,
|
|
3575
|
-
VMDiskDeviceTypeInput: () => VMDiskDeviceTypeInput,
|
|
3576
|
-
VMWareEntryStateStateInput: () => VMWareEntryStateStateInput,
|
|
3577
|
-
VMWareMatchDatastoresWithDatasetsResultFilesystemType: () => VMWareMatchDatastoresWithDatasetsResultFilesystemType,
|
|
3578
|
-
Vendor: () => Vendor,
|
|
3579
|
-
Volblocksize: () => Volblocksize,
|
|
3580
|
-
When: () => When,
|
|
3581
|
-
ZfsTierRewriteJobEntryStatus: () => ZfsTierRewriteJobEntryStatus,
|
|
3582
|
-
ZfsTierRewriteJobEntryStatusInput: () => ZfsTierRewriteJobEntryStatusInput,
|
|
3583
|
-
ZpoolScrubRunAction: () => ZpoolScrubRunAction
|
|
3584
|
-
});
|
|
3585
|
-
|
|
3586
|
-
// src/generated/index.ts
|
|
3587
|
-
var SUPPORTED_API_VERSIONS = [
|
|
3588
|
-
"v25.04.0",
|
|
3589
|
-
"v25.04.1",
|
|
3590
|
-
"v25.04.2",
|
|
3591
|
-
"v25.10.0",
|
|
3592
|
-
"v25.10.1",
|
|
3593
|
-
"v25.10.2",
|
|
3594
|
-
"v25.10.3",
|
|
3595
|
-
"v25.10.4",
|
|
3596
|
-
"v25.10.5",
|
|
3597
|
-
"v26.0.0",
|
|
3598
|
-
"v27.0.0"
|
|
3599
|
-
];
|
|
3340
|
+
// src/factory.ts
|
|
3341
|
+
async function createTrueNasClient(opts) {
|
|
3342
|
+
const { uuid, hostnames, systemName } = opts;
|
|
3343
|
+
const logger = opts.logger ?? noopLogger;
|
|
3344
|
+
if (!hostnames || hostnames.length === 0) {
|
|
3345
|
+
throw new Error(
|
|
3346
|
+
`Cannot create client for system ${uuid}: hostnames array is empty`
|
|
3347
|
+
);
|
|
3348
|
+
}
|
|
3349
|
+
const primaryHostname = hostnames[0];
|
|
3350
|
+
const versionDiscovery = new VersionDiscovery(logger);
|
|
3351
|
+
logger.info("Creating versioned API client", {
|
|
3352
|
+
uuid: uuid.slice(0, 8),
|
|
3353
|
+
hostname: primaryHostname,
|
|
3354
|
+
systemName
|
|
3355
|
+
});
|
|
3356
|
+
let version;
|
|
3357
|
+
try {
|
|
3358
|
+
version = await firstValueFrom(
|
|
3359
|
+
versionDiscovery.discoverVersion(primaryHostname)
|
|
3360
|
+
);
|
|
3361
|
+
logger.info("API version discovered, instantiating client", {
|
|
3362
|
+
uuid: uuid.slice(0, 8),
|
|
3363
|
+
version: version.version,
|
|
3364
|
+
websocketPath: version.websocketPath
|
|
3365
|
+
});
|
|
3366
|
+
} catch (error) {
|
|
3367
|
+
const errorMessage = errorMessageOrDefault(error, "Unknown error");
|
|
3368
|
+
if (!(error instanceof VersionDiscoveryNetworkError)) {
|
|
3369
|
+
logger.error("Version discovery failed", {
|
|
3370
|
+
uuid: uuid.slice(0, 8),
|
|
3371
|
+
hostname: primaryHostname,
|
|
3372
|
+
error: errorMessage,
|
|
3373
|
+
errorType: error instanceof Error ? error.constructor.name : typeof error
|
|
3374
|
+
});
|
|
3375
|
+
throw error;
|
|
3376
|
+
}
|
|
3377
|
+
const fallbackVersionString = apiVersionConfig.FALLBACK_VERSION;
|
|
3378
|
+
const fallbackVersion = parseApiVersion(fallbackVersionString);
|
|
3379
|
+
if (!fallbackVersion) {
|
|
3380
|
+
logger.error("Invalid fallback version configuration", {
|
|
3381
|
+
uuid: uuid.slice(0, 8),
|
|
3382
|
+
hostname: primaryHostname,
|
|
3383
|
+
fallbackVersion: fallbackVersionString
|
|
3384
|
+
});
|
|
3385
|
+
throw error;
|
|
3386
|
+
}
|
|
3387
|
+
logger.warn(
|
|
3388
|
+
"Version discovery failed with a network error (possible CORS or network issue), falling back to assumed version",
|
|
3389
|
+
{
|
|
3390
|
+
uuid: uuid.slice(0, 8),
|
|
3391
|
+
hostname: primaryHostname,
|
|
3392
|
+
fallbackVersion: fallbackVersionString,
|
|
3393
|
+
originalError: errorMessage,
|
|
3394
|
+
warning: "A network error has multiple causes (CORS, network down, DNS failure). The connection may still fail during the WebSocket handshake."
|
|
3395
|
+
}
|
|
3396
|
+
);
|
|
3397
|
+
version = fallbackVersion;
|
|
3398
|
+
}
|
|
3399
|
+
return instantiateClientForVersion(version, opts, logger);
|
|
3400
|
+
}
|
|
3401
|
+
var CLIENT_BY_VERSION_KEY = {
|
|
3402
|
+
"25.10": TrueNasApiClientV2510,
|
|
3403
|
+
"26": TrueNasApiClientV26
|
|
3404
|
+
};
|
|
3405
|
+
function clientVersionKey(version) {
|
|
3406
|
+
if (version.year <= legacyCutoffYear) {
|
|
3407
|
+
return `${version.year.toString()}.${version.minor.toString().padStart(2, "0")}`;
|
|
3408
|
+
}
|
|
3409
|
+
return version.year.toString();
|
|
3410
|
+
}
|
|
3411
|
+
function instantiateClientForVersion(version, opts, logger) {
|
|
3412
|
+
const { uuid, hostnames, enabled, systemName } = opts;
|
|
3413
|
+
const versionKey = clientVersionKey(version);
|
|
3414
|
+
const Client = CLIENT_BY_VERSION_KEY[versionKey];
|
|
3415
|
+
if (!Client) {
|
|
3416
|
+
logger.error("No client implementation for version", {
|
|
3417
|
+
uuid: uuid.slice(0, 8),
|
|
3418
|
+
version: version.version,
|
|
3419
|
+
versionKey
|
|
3420
|
+
});
|
|
3421
|
+
throw new Error(
|
|
3422
|
+
`No client implementation for API version ${version.version}. Version keys with a client: ${Object.keys(CLIENT_BY_VERSION_KEY).join(", ")}. Version key: ${versionKey}`
|
|
3423
|
+
);
|
|
3424
|
+
}
|
|
3425
|
+
logger.info(`Instantiating ${Client.name}`, {
|
|
3426
|
+
uuid: uuid.slice(0, 8),
|
|
3427
|
+
version: version.version,
|
|
3428
|
+
versionKey
|
|
3429
|
+
});
|
|
3430
|
+
return new Client(uuid, hostnames, version, enabled, systemName, logger);
|
|
3431
|
+
}
|
|
3432
|
+
function errorMessageOrDefault(error, fallback) {
|
|
3433
|
+
if (error instanceof Error) {
|
|
3434
|
+
return error.message;
|
|
3435
|
+
}
|
|
3436
|
+
if (typeof error === "object" && error !== null && "message" in error && typeof error.message === "string") {
|
|
3437
|
+
return error.message;
|
|
3438
|
+
}
|
|
3439
|
+
return fallback;
|
|
3440
|
+
}
|
|
3600
3441
|
|
|
3601
|
-
export { AuthError, AuthErrorCode, InvalidVersionResponseError, JobState, NoCompatibleVersionsError, SUPPORTED_API_VERSIONS, TrueNasApiClient, TrueNasApiClientV2510, TrueNasApiClientV26, TrueNasAuthMechanism, TrueNasEndpoint, VersionCompatibility, VersionDiscovery, VersionDiscoveryError, VersionDiscoveryNetworkError, VersionDiscoveryTimeoutError, VersionEndpointNotFoundError, VersionTooNewError, VersionTooOldError, consoleLogger, createTrueNasClient, getApiErrorMessage, noopLogger,
|
|
3442
|
+
export { AuthError, AuthErrorCode, InvalidVersionResponseError, JobState, NoCompatibleVersionsError, SUPPORTED_API_VERSIONS, TrueNasApiClient, TrueNasApiClientV2510, TrueNasApiClientV26, TrueNasAuthMechanism, TrueNasEndpoint, VersionCompatibility, VersionDiscovery, VersionDiscoveryError, VersionDiscoveryNetworkError, VersionDiscoveryTimeoutError, VersionEndpointNotFoundError, VersionTooNewError, VersionTooOldError, consoleLogger, createTrueNasClient, getApiErrorMessage, noopLogger, v25_10_0_exports as v25_10_0, v25_10_1_exports as v25_10_1, v25_10_2_exports as v25_10_2, v25_10_3_exports as v25_10_3, v25_10_4_exports as v25_10_4, v25_10_5_exports as v25_10_5, v26_0_0_exports as v26_0_0, v27_0_0_exports as v27_0_0 };
|
|
3602
3443
|
//# sourceMappingURL=index.js.map
|
|
3603
3444
|
//# sourceMappingURL=index.js.map
|