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