@vates/types 1.23.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,8 +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
- getField<T extends XenApiRecord, K extends keyof T>(type: Extract<WrappedXenApiRecord, T>['$type'], ref: T['$ref'], field: K): Promise<T[K]>;
40
39
  connectVif(vifId: XoVif['id']): Promise<void>;
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;
41
44
  createNetwork(params: {
42
45
  name: string;
43
46
  description?: string;
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'];
@@ -299,6 +300,7 @@ export type XoNetwork = BaseXapiXo & {
299
300
  defaultIsLocked: boolean;
300
301
  id: Branded<'network'>;
301
302
  insecureNbd?: boolean;
303
+ isBonded: boolean;
302
304
  name_description: string;
303
305
  name_label: string;
304
306
  nbd?: boolean;
@@ -612,7 +614,7 @@ export type XoTask = {
612
614
  method?: string;
613
615
  name?: string;
614
616
  objectId?: string;
615
- 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';
616
618
  params?: Record<string, unknown>;
617
619
  progress?: number;
618
620
  type?: string;
@@ -771,8 +773,8 @@ export type XoVtpm = BaseXapiXo & {
771
773
  type: 'VTPM';
772
774
  };
773
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;
774
- export type NonXapiXoRecord = AnyXoBackupArchive | AnyXoJob | AnyXoLog | XoGroup | XoProxy | XoGroup | XoProxy | XoJob | XoBackupRepository | XoSchedule | XoServer | XoTask | XoUser;
775
- 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>;
776
778
  export type AnyXoVm = XoVm | XoVmSnapshot | XoVmTemplate | XoVmController;
777
779
  export type AnyXoVdi = XoVdi | XoVdiSnapshot | XoVdiUnmanaged;
778
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.23.0",
4
+ "version": "1.24.0",
5
5
  "main": "./dist/index.mjs",
6
6
  "exports": {
7
7
  ".": {