@vates/types 1.22.0 → 1.24.0

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.d.mts CHANGED
@@ -3,4 +3,5 @@ export * from './xen-api.mjs';
3
3
  export * from './xo.mjs';
4
4
  export * from './xo-app.mjs';
5
5
  export * from './lib/xen-orchestra-xapi.mjs';
6
+ export * from './lib/xen-orchestra-acl.mjs';
6
7
  export * from './lib/complex-matcher.mjs';
package/dist/index.mjs CHANGED
@@ -3,4 +3,5 @@ export * from './xen-api.mjs';
3
3
  export * from './xo.mjs';
4
4
  export * from './xo-app.mjs';
5
5
  export * from './lib/xen-orchestra-xapi.mjs';
6
+ export * from './lib/xen-orchestra-acl.mjs';
6
7
  export * from './lib/complex-matcher.mjs';
@@ -0,0 +1,54 @@
1
+ import { Branded } from '../common.mjs';
2
+ import type { XoGroup, XoUser } from '../xo.mjs';
3
+ export type XoAclRole = {
4
+ id: Branded<'acl-v2-role'>;
5
+ name: string;
6
+ description?: string;
7
+ } | {
8
+ id: Branded<'acl-v2-role'>;
9
+ name: string;
10
+ description?: string;
11
+ isTemplate: true;
12
+ roleTemplateId: number;
13
+ };
14
+ export type XoAclSupportedActionsByResource = {
15
+ [resource: string]: Record<string, unknown>;
16
+ };
17
+ /**
18
+ * E.g
19
+ * vms {
20
+ * shutdown: {
21
+ * clean: true,
22
+ * hard: true,
23
+ * }
24
+ * }
25
+ *
26
+ * `shutdown | shutdown:clean | shutdown:hard`
27
+ */
28
+ export type GetKeysRecursively<T, Prefix extends string = ''> = {
29
+ [K in keyof T]: T[K] extends object ? K extends string ? `${Prefix}${K}` | GetKeysRecursively<T[K], `${Prefix}${K}:`> : never : K extends string ? `${Prefix}${K}` : never;
30
+ }[keyof T];
31
+ export type XoAclSupportedResource<TActionsByResource extends XoAclSupportedActionsByResource> = keyof TActionsByResource;
32
+ export type XoAclSupportedActions<TActionsByResource extends XoAclSupportedActionsByResource, TResource extends XoAclSupportedResource<TActionsByResource>> = (GetKeysRecursively<TActionsByResource[TResource]> & string) | '*';
33
+ export type XoAclBasePrivilege = {
34
+ id: Branded<'acl-v2-privilege'>;
35
+ resource: string;
36
+ action: string;
37
+ selector?: string;
38
+ effect: 'allow' | 'deny';
39
+ roleId: XoAclRole['id'];
40
+ };
41
+ export type XoAclPrivilege<TActionsByResource extends XoAclSupportedActionsByResource, TResource extends XoAclSupportedResource<TActionsByResource>> = XoAclBasePrivilege & {
42
+ resource: TResource;
43
+ action: XoAclSupportedActions<TActionsByResource, TResource>;
44
+ };
45
+ export type XoUserRole = {
46
+ id: string;
47
+ roleId: XoAclRole['id'];
48
+ userId: XoUser['id'];
49
+ };
50
+ export type XoGroupRole = {
51
+ id: string;
52
+ roleId: XoAclRole['id'];
53
+ groupId: XoGroup['id'];
54
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,7 +1,7 @@
1
1
  import { WrappedXenApiRecord, XenApiHost, XenApiHostWrapped, XenApiNetwork, XenApiNetworkWrapped, XenApiRecord, XenApiSr, XenApiTask, XenApiVbd, XenApiVdi, XenApiVif, XenApiVm, XenApiVmWrapped, XenApiVtpm } from '../xen-api.mjs';
2
2
  import type { BOND_MODE, OPAQUE_REF_NULL, SUPPORTED_VDI_FORMAT, VBD_MODE, VBD_TYPE, VDI_TYPE, VIF_LOCKING_MODE } from '../common.mjs';
3
3
  import type { PassThrough, Readable } from 'node:stream';
4
- import type { XoGpuGroup, XoHost, XoNetwork, XoPif, XoSr, XoUser, XoVdi, XoVgpuType, XoVm, XoVmTemplate, XoVif } from '../xo.mjs';
4
+ import type { XapiXoRecord, XoGpuGroup, XoHost, XoNetwork, XoPif, XoSr, XoUser, XoVdi, XoVgpuType, XoVm, XoVmTemplate, XoVif } from '../xo.mjs';
5
5
  export type XcpPatches = {
6
6
  changelog?: {
7
7
  author: string;
@@ -36,7 +36,11 @@ export interface Xapi {
36
36
  barrier<T extends XenApiRecord>(ref: T['$ref']): Promise<Extract<WrappedXenApiRecord, {
37
37
  $ref: T['$ref'];
38
38
  }>>;
39
+ connectVif(vifId: XoVif['id']): Promise<void>;
39
40
  getField<T extends XenApiRecord, K extends keyof T>(type: Extract<WrappedXenApiRecord, T>['$type'], ref: T['$ref'], field: K): Promise<T[K]>;
41
+ getObject: <XoRecord extends XapiXoRecord, WrappedRecord extends WrappedXenApiRecord = Extract<WrappedXenApiRecord, {
42
+ $type: XoRecord['type'];
43
+ }>>(idOrUuidOrRef: XoRecord['id'] | WrappedRecord['$ref'] | WrappedRecord['uuid'], defaultValue?: WrappedRecord) => WrappedRecord;
40
44
  createNetwork(params: {
41
45
  name: string;
42
46
  description?: string;
@@ -57,6 +61,7 @@ export interface Xapi {
57
61
  }): Promise<XenApiNetworkWrapped>;
58
62
  deleteNetwork(id: XoNetwork['id']): Promise<void>;
59
63
  deleteVif(vifId: XoVif['id']): Promise<void>;
64
+ disconnectVif(vifId: XoVif['id']): Promise<void>;
60
65
  exportVmOva(vmRef: XenApiVm['$ref']): Promise<PassThrough>;
61
66
  migrateVm(vmId: XoVm['id'], hostXapi: Xapi, hostId: XoHost['id'], opts?: {
62
67
  force?: boolean;
package/dist/xo-app.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { EventEmitter } from 'node:stream';
2
2
  import type { AnyXoBackupJob, AnyXoJob, AnyXoLog, XapiXoRecord, XoAuthenticationToken, XoBackupRepository, XoConfigBackupArchive, XoGroup, XoHost, XoPool, XoPoolBackupArchive, XoProxy, XoSchedule, XoServer, XoTask, XoUser, XoVm, XoVmBackupArchive } from './xo.mjs';
3
3
  import { VatesTask } from './lib/vates-task.mjs';
4
- import { Xapi, XapiHostStats, XapiPoolStats, XapiStatsGranularity, XapiVmStats, XenApiGpuGroupWrapped, XenApiHostWrapped, XenApiMessageWrapped, XenApiNetworkWrapped, XenApiPbdWrapped, XenApiPciWrapped, XenApiPgpuWrapped, XenApiPifWrapped, XenApiPoolWrapped, XenApiSmWrapped, XenApiSrWrapped, XenApiVbdWrapped, XenApiVdiWrapped, XenApiVgpuTypeWrapped, XenApiVgpuWrapped, XenApiVifWrapped, XenApiVmWrapped, XenApiVtpmWrapped } from './index.mjs';
4
+ import { Xapi, XapiHostStats, XapiPoolStats, XapiStatsGranularity, XapiVmStats, XenApiGpuGroupWrapped, XenApiHostWrapped, XenApiMessageWrapped, XenApiNetworkWrapped, XenApiPbdWrapped, XenApiPciWrapped, XenApiPgpuWrapped, XenApiPifWrapped, XenApiPoolWrapped, XenApiSmWrapped, XenApiSrWrapped, XenApiVbdWrapped, XenApiVdiWrapped, XenApiVgpuTypeWrapped, XenApiVgpuWrapped, XenApiVifWrapped, XenApiVmWrapped, XenApiVtpmWrapped, XoAclBasePrivilege, XoAclRole, XoGroupRole, XoUserRole } from './index.mjs';
5
5
  export type XapiConnection = Xapi & {
6
6
  status: string;
7
7
  pool?: {
@@ -90,6 +90,8 @@ export type XoApp = {
90
90
  user?: XoUser;
91
91
  permission?: XoUser['permission'] | 'none' | null;
92
92
  };
93
+ addAclV2GroupRole(groupId: XoGroup['id'], roleId: XoAclRole['id']): Promise<XoGroupRole>;
94
+ addAclV2UserRole(userId: XoUser['id'], roleId: XoAclRole['id']): Promise<XoUserRole>;
93
95
  addUserToGroup: (userId: XoUser['id'], groupId: XoGroup['id']) => Promise<void>;
94
96
  authenticateUser: (credentials: {
95
97
  token?: string;
@@ -107,6 +109,17 @@ export type XoApp = {
107
109
  }>;
108
110
  checkFeatureAuthorization(featureCode: string): Promise<void>;
109
111
  connectXenServer(id: XoServer['id']): Promise<void>;
112
+ createAclV2Privilege(privilege: Omit<XoAclBasePrivilege, 'id'>, options?: {
113
+ force?: boolean;
114
+ }): Promise<XoAclBasePrivilege>;
115
+ copyAclV2Role(id: XoAclRole['id'], params?: {
116
+ name?: XoAclRole['name'];
117
+ description?: XoAclRole['description'];
118
+ }): Promise<XoAclRole['id']>;
119
+ createAclV2Role(role: {
120
+ name: XoAclRole['name'];
121
+ description?: XoAclRole['description'];
122
+ }): Promise<XoAclRole>;
110
123
  createAuthenticationToken(opts: {
111
124
  client?: {
112
125
  id?: string;
@@ -121,6 +134,13 @@ export type XoApp = {
121
134
  password?: string;
122
135
  [key: string]: unknown;
123
136
  }): Promise<XoUser>;
137
+ deleteAclV2GroupRole(groupId: XoGroup['id'], roleId: XoAclRole['id']): Promise<boolean>;
138
+ deleteAclV2Privilege(privilegeId: XoAclBasePrivilege['id'], options?: {
139
+ force?: boolean;
140
+ }): Promise<boolean>;
141
+ deleteAclV2Role(roleId: XoAclRole['id'], options?: {
142
+ force?: boolean;
143
+ }): Promise<boolean>;
124
144
  deleteGroup(id: XoGroup['id']): Promise<void>;
125
145
  deleteUser(id: XoUser['id']): Promise<void>;
126
146
  createGroup(params: {
@@ -129,6 +149,13 @@ export type XoApp = {
129
149
  providerGroup?: string;
130
150
  }): Promise<XoGroup>;
131
151
  disconnectXenServer(id: XoServer['id']): Promise<void>;
152
+ getAclV2Privilege(id: XoAclBasePrivilege['id']): Promise<XoAclBasePrivilege>;
153
+ getAclV2Privileges(): Promise<XoAclBasePrivilege[]>;
154
+ getAclV2RolePrivileges(roleId: XoAclRole['id']): Promise<XoAclBasePrivilege[]>;
155
+ getAclV2Role(id: XoAclRole['id']): Promise<XoAclRole>;
156
+ deleteAclV2UserRole(userId: XoUser['id'], roleId: XoAclRole['id']): Promise<boolean>;
157
+ getAclV2Roles(): Promise<XoAclRole[]>;
158
+ getAclV2UserPrivileges(userId: XoUser['id']): Promise<XoAclBasePrivilege[]>;
132
159
  getAllGroups(): Promise<XoGroup[]>;
133
160
  getAllProxies(): Promise<XoProxy[]>;
134
161
  getAllJobs<T extends AnyXoBackupJob['type']>(type: T): Promise<Extract<AnyXoBackupJob, {
@@ -220,6 +247,13 @@ export type XoApp = {
220
247
  permission?: string;
221
248
  preferences?: Record<string, string>;
222
249
  }): Promise<void>;
250
+ updateAclV2Privilege(privilegeId: XoAclBasePrivilege['id'], privilege: XoAclBasePrivilege): Promise<XoAclBasePrivilege>;
251
+ updateAclV2Role(roleId: XoAclRole['id'], role: {
252
+ name?: XoAclRole['name'];
253
+ description?: XoAclRole['description'] | null;
254
+ }, options?: {
255
+ force?: boolean;
256
+ }): Promise<XoAclRole>;
223
257
  updateGroup(id: XoGroup['id'], updates: {
224
258
  name?: string;
225
259
  }): void;
package/dist/xo.d.mts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { Branded, DOMAIN_TYPE, HOST_ALLOWED_OPERATIONS, HOST_POWER_STATE, IP_CONFIGURATION_MODE, IPV6_CONFIGURATION_MODE, NETWORK_OPERATIONS, PGPU_DOM0_ACCESS, POOL_ALLOWED_OPERATIONS, PRIMARY_ADDRESS_TYPE, STORAGE_OPERATIONS, VDI_OPERATIONS, VDI_TYPE, VIF_LOCKING_MODE, VM_OPERATIONS, VM_POWER_STATE } from './common.mjs';
2
2
  import type * as CMType from './lib/complex-matcher.mjs';
3
+ import { XoAclPrivilege, XoAclRole, XoAclSupportedActionsByResource } from './lib/xen-orchestra-acl.mjs';
3
4
  import type { XenApiHost, XenApiPool } from './xen-api.mjs';
4
5
  type BaseXapiXo = {
5
6
  $pool: XoPool['id'];
@@ -80,6 +81,10 @@ type BaseXoVm = BaseXapiXo & {
80
81
  suspendSr?: XoSr['id'];
81
82
  tags: string[];
82
83
  vga?: string;
84
+ /**
85
+ * Value in MiB.
86
+ * See: https://wiki.xenproject.org/wiki/XCP_PV_templates_start
87
+ */
83
88
  videoram?: number;
84
89
  viridian: boolean;
85
90
  virtualizationMode: DOMAIN_TYPE;
@@ -295,6 +300,7 @@ export type XoNetwork = BaseXapiXo & {
295
300
  defaultIsLocked: boolean;
296
301
  id: Branded<'network'>;
297
302
  insecureNbd?: boolean;
303
+ isBonded: boolean;
298
304
  name_description: string;
299
305
  name_label: string;
300
306
  nbd?: boolean;
@@ -608,7 +614,7 @@ export type XoTask = {
608
614
  method?: string;
609
615
  name?: string;
610
616
  objectId?: string;
611
- objectType?: XapiXoRecord['type'] | 'backup' | 'backup-archive' | 'backup-job' | 'backup-log' | 'backup-repository' | 'group' | 'proxy' | 'restore' | 'restore-log' | 'schedule' | 'server' | 'task' | 'user';
617
+ objectType?: XapiXoRecord['type'] | 'backup' | 'backup-archive' | 'backup-job' | 'backup-log' | 'backup-repository' | 'group' | 'proxy' | 'restore' | 'restore-log' | 'schedule' | 'server' | 'task' | 'user' | 'acl-privilege' | 'acl-role';
612
618
  params?: Record<string, unknown>;
613
619
  progress?: number;
614
620
  type?: string;
@@ -680,6 +686,7 @@ type BaseXoVdi = BaseXapiXo & {
680
686
  };
681
687
  export type XoVdi = BaseXoVdi & {
682
688
  id: Branded<'VDI'>;
689
+ chainPhysicalUsage: number;
683
690
  type: 'VDI';
684
691
  };
685
692
  export type XoVdiSnapshot = BaseXoVdi & {
@@ -766,8 +773,8 @@ export type XoVtpm = BaseXapiXo & {
766
773
  type: 'VTPM';
767
774
  };
768
775
  export type XapiXoRecord = XoAlarm | XoGpuGroup | XoHost | XoMessage | XoNetwork | XoPbd | XoPci | XoPgpu | XoPif | XoPool | XoSr | XoVbd | XoVdi | XoVdiSnapshot | XoVdiUnmanaged | XoVgpu | XoVgpuType | XoVif | XoVm | XoVmController | XoVmSnapshot | XoVmTemplate | XoVtpm | XoSm;
769
- export type NonXapiXoRecord = AnyXoBackupArchive | AnyXoJob | AnyXoLog | XoGroup | XoProxy | XoGroup | XoProxy | XoJob | XoBackupRepository | XoSchedule | XoServer | XoTask | XoUser;
770
- export type XoRecord = XapiXoRecord | NonXapiXoRecord;
776
+ export type NonXapiXoRecord<TActionsByResource extends XoAclSupportedActionsByResource = never, TResource extends string = never> = AnyXoBackupArchive | AnyXoJob | AnyXoLog | XoGroup | XoProxy | XoGroup | XoProxy | XoJob | XoBackupRepository | XoSchedule | XoServer | XoTask | XoUser | XoAclRole | XoAclPrivilege<TActionsByResource, TResource>;
777
+ export type XoRecord<TActionsByResource extends XoAclSupportedActionsByResource = never, TResource extends string = never> = XapiXoRecord | NonXapiXoRecord<TActionsByResource, TResource>;
771
778
  export type AnyXoVm = XoVm | XoVmSnapshot | XoVmTemplate | XoVmController;
772
779
  export type AnyXoVdi = XoVdi | XoVdiSnapshot | XoVdiUnmanaged;
773
780
  export type AnyXoJob = XoJob | AnyXoBackupJob;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vates/types",
3
3
  "private": false,
4
- "version": "1.22.0",
4
+ "version": "1.24.0",
5
5
  "main": "./dist/index.mjs",
6
6
  "exports": {
7
7
  ".": {