@opensoha/contracts 0.1.5 → 0.1.6
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/COMPATIBILITY.md +13 -0
- package/README.md +6 -0
- package/auth/catalog_generated.go +17 -0
- package/auth/catalog_test.go +53 -0
- package/auth/permission-catalog.json +10991 -0
- package/auth/permission-catalog.schema.json +74 -0
- package/compat/json-schema-ecosystem-0.1.0.json +1 -1
- package/compat/openapi-loose-boundaries-0.1.0.json +1 -1
- package/fixtures/json-schema/permission-catalog/invalid/missing-action.json +18 -0
- package/fixtures/json-schema/permission-catalog/valid/minimal.json +19 -0
- package/fixtures/openapi/AccessRoleInput/invalid/missing-permissions.json +4 -0
- package/fixtures/openapi/AccessRoleInput/valid/granular-vm-operator.json +10 -0
- package/fixtures/openapi/AuthorizationDecision/invalid/missing-reason.json +7 -0
- package/fixtures/openapi/AuthorizationDecision/valid/deny-vm-delete.json +16 -0
- package/fixtures/openapi/PermissionCatalogEnvelope/invalid/invalid-hash.json +8 -0
- package/fixtures/openapi/PermissionCatalogEnvelope/valid/minimal.json +22 -0
- package/gen/go/sohaapi/client.go +1 -1
- package/gen/go/sohaapi/types.go +187 -0
- package/gen/ts/sohaapi/index.ts +320 -0
- package/openapi/soha-api.json +670 -1
- package/openapi/soha-api.yaml +253 -1
- package/openapi/spec_generated.go +3 -3
- package/package.json +7 -3
package/gen/ts/sohaapi/index.ts
CHANGED
|
@@ -4273,6 +4273,56 @@ export interface paths {
|
|
|
4273
4273
|
patch?: never;
|
|
4274
4274
|
trace?: never;
|
|
4275
4275
|
};
|
|
4276
|
+
"/access/permissions": {
|
|
4277
|
+
parameters: {
|
|
4278
|
+
query?: never;
|
|
4279
|
+
header?: never;
|
|
4280
|
+
path?: never;
|
|
4281
|
+
cookie?: never;
|
|
4282
|
+
};
|
|
4283
|
+
get: operations["getPermissionCatalog"];
|
|
4284
|
+
put?: never;
|
|
4285
|
+
post?: never;
|
|
4286
|
+
delete?: never;
|
|
4287
|
+
options?: never;
|
|
4288
|
+
head?: never;
|
|
4289
|
+
patch?: never;
|
|
4290
|
+
trace?: never;
|
|
4291
|
+
};
|
|
4292
|
+
"/access/roles": {
|
|
4293
|
+
parameters: {
|
|
4294
|
+
query?: never;
|
|
4295
|
+
header?: never;
|
|
4296
|
+
path?: never;
|
|
4297
|
+
cookie?: never;
|
|
4298
|
+
};
|
|
4299
|
+
get: operations["listAccessRoles"];
|
|
4300
|
+
put?: never;
|
|
4301
|
+
post: operations["createAccessRole"];
|
|
4302
|
+
delete?: never;
|
|
4303
|
+
options?: never;
|
|
4304
|
+
head?: never;
|
|
4305
|
+
patch?: never;
|
|
4306
|
+
trace?: never;
|
|
4307
|
+
};
|
|
4308
|
+
"/access/roles/{accessRoleID}": {
|
|
4309
|
+
parameters: {
|
|
4310
|
+
query?: never;
|
|
4311
|
+
header?: never;
|
|
4312
|
+
path: {
|
|
4313
|
+
accessRoleID: components["parameters"]["AccessRoleID"];
|
|
4314
|
+
};
|
|
4315
|
+
cookie?: never;
|
|
4316
|
+
};
|
|
4317
|
+
get: operations["getAccessRole"];
|
|
4318
|
+
put: operations["updateAccessRole"];
|
|
4319
|
+
post?: never;
|
|
4320
|
+
delete: operations["deleteAccessRole"];
|
|
4321
|
+
options?: never;
|
|
4322
|
+
head?: never;
|
|
4323
|
+
patch?: never;
|
|
4324
|
+
trace?: never;
|
|
4325
|
+
};
|
|
4276
4326
|
"/identity/capabilities": {
|
|
4277
4327
|
parameters: {
|
|
4278
4328
|
query?: never;
|
|
@@ -5786,6 +5836,107 @@ export interface components {
|
|
|
5786
5836
|
items: components["schemas"]["AnyValue"][];
|
|
5787
5837
|
};
|
|
5788
5838
|
/** @enum {string} */
|
|
5839
|
+
PermissionRiskLevel: "read" | "mutate" | "execute" | "high";
|
|
5840
|
+
/** @enum {string} */
|
|
5841
|
+
PermissionApprovalPolicy: "never" | "eligible" | "required";
|
|
5842
|
+
/** @enum {string} */
|
|
5843
|
+
PermissionStatus: "active" | "legacy";
|
|
5844
|
+
/** @enum {string} */
|
|
5845
|
+
PermissionScopeKind: "tenant" | "workspace" | "cluster" | "namespace" | "project" | "resource" | "owner";
|
|
5846
|
+
PermissionDefinition: {
|
|
5847
|
+
key: string;
|
|
5848
|
+
domain: string;
|
|
5849
|
+
resource: string;
|
|
5850
|
+
action: string;
|
|
5851
|
+
displayName: string;
|
|
5852
|
+
riskLevel: components["schemas"]["PermissionRiskLevel"];
|
|
5853
|
+
scopeKinds: components["schemas"]["PermissionScopeKind"][];
|
|
5854
|
+
approvalPolicy: components["schemas"]["PermissionApprovalPolicy"];
|
|
5855
|
+
status: components["schemas"]["PermissionStatus"];
|
|
5856
|
+
assignable: boolean;
|
|
5857
|
+
legacyAliases?: string[];
|
|
5858
|
+
/** @description Migration-only role-global action aliases accepted by this exact permission. */
|
|
5859
|
+
legacyCapabilities?: string[];
|
|
5860
|
+
replacedBy?: string[];
|
|
5861
|
+
};
|
|
5862
|
+
PermissionCatalog: {
|
|
5863
|
+
/** @constant */
|
|
5864
|
+
schemaVersion: "authorization.opensoha.io/v1";
|
|
5865
|
+
catalogVersion: string;
|
|
5866
|
+
contentHash: string;
|
|
5867
|
+
permissions: components["schemas"]["PermissionDefinition"][];
|
|
5868
|
+
};
|
|
5869
|
+
PermissionCatalogEnvelope: {
|
|
5870
|
+
data: components["schemas"]["PermissionCatalog"];
|
|
5871
|
+
};
|
|
5872
|
+
AccessRole: {
|
|
5873
|
+
id: string;
|
|
5874
|
+
name: string;
|
|
5875
|
+
scope: string;
|
|
5876
|
+
/**
|
|
5877
|
+
* @deprecated
|
|
5878
|
+
* @description Legacy role-global action aliases retained only for migration.
|
|
5879
|
+
*/
|
|
5880
|
+
capabilities: string[];
|
|
5881
|
+
permissionKeys: string[];
|
|
5882
|
+
userCount: number;
|
|
5883
|
+
};
|
|
5884
|
+
AccessRoleInput: {
|
|
5885
|
+
id?: string;
|
|
5886
|
+
name: string;
|
|
5887
|
+
scope: string;
|
|
5888
|
+
/**
|
|
5889
|
+
* @deprecated
|
|
5890
|
+
* @description Legacy role-global action aliases; new role editors must send an empty array.
|
|
5891
|
+
*/
|
|
5892
|
+
capabilities?: string[];
|
|
5893
|
+
permissionKeys: string[];
|
|
5894
|
+
};
|
|
5895
|
+
AccessRoleEnvelope: {
|
|
5896
|
+
data: components["schemas"]["AccessRole"];
|
|
5897
|
+
};
|
|
5898
|
+
AccessRoleListEnvelope: {
|
|
5899
|
+
items: components["schemas"]["AccessRole"][];
|
|
5900
|
+
};
|
|
5901
|
+
AccessRoleDeleteResult: {
|
|
5902
|
+
/** @constant */
|
|
5903
|
+
status: "ok";
|
|
5904
|
+
};
|
|
5905
|
+
/** @enum {string} */
|
|
5906
|
+
AuthorizationDecisionStatus: "allow" | "deny" | "approval_required";
|
|
5907
|
+
AuthorizationResource: {
|
|
5908
|
+
type: string;
|
|
5909
|
+
id?: string;
|
|
5910
|
+
tenantId?: string;
|
|
5911
|
+
workspaceId?: string;
|
|
5912
|
+
clusterId?: string;
|
|
5913
|
+
namespace?: string;
|
|
5914
|
+
projectId?: string;
|
|
5915
|
+
owner?: string;
|
|
5916
|
+
labels?: {
|
|
5917
|
+
[key: string]: string;
|
|
5918
|
+
};
|
|
5919
|
+
};
|
|
5920
|
+
AuthorizationEffectiveScope: {
|
|
5921
|
+
tenantIds?: string[];
|
|
5922
|
+
workspaceIds?: string[];
|
|
5923
|
+
clusterIds?: string[];
|
|
5924
|
+
namespaces?: string[];
|
|
5925
|
+
projectIds?: string[];
|
|
5926
|
+
resourceKinds?: string[];
|
|
5927
|
+
labelSelector?: string;
|
|
5928
|
+
};
|
|
5929
|
+
AuthorizationDecision: {
|
|
5930
|
+
status: components["schemas"]["AuthorizationDecisionStatus"];
|
|
5931
|
+
permissionKey: string;
|
|
5932
|
+
action: string;
|
|
5933
|
+
resource: components["schemas"]["AuthorizationResource"];
|
|
5934
|
+
effectiveScope?: components["schemas"]["AuthorizationEffectiveScope"];
|
|
5935
|
+
reasonCode: string;
|
|
5936
|
+
policyVersion: string;
|
|
5937
|
+
allowedActions?: string[];
|
|
5938
|
+
};
|
|
5939
|
+
/** @enum {string} */
|
|
5789
5940
|
ComputeDomain: "virtualization" | "container_runtime" | "agent";
|
|
5790
5941
|
/** @enum {string} */
|
|
5791
5942
|
ComputeProviderDomain: "virtualization" | "container_runtime";
|
|
@@ -11737,6 +11888,7 @@ export interface components {
|
|
|
11737
11888
|
};
|
|
11738
11889
|
};
|
|
11739
11890
|
parameters: {
|
|
11891
|
+
AccessRoleID: string;
|
|
11740
11892
|
IdentityApplicationID: string;
|
|
11741
11893
|
IdentityProviderID: string;
|
|
11742
11894
|
IdentityPolicyID: string;
|
|
@@ -12000,6 +12152,22 @@ export type RuntimeConfigRollbackRequest = components['schemas']['RuntimeConfigR
|
|
|
12000
12152
|
export type GenericObject = components['schemas']['GenericObject'];
|
|
12001
12153
|
export type GenericDataEnvelope = components['schemas']['GenericDataEnvelope'];
|
|
12002
12154
|
export type GenericItemsEnvelope = components['schemas']['GenericItemsEnvelope'];
|
|
12155
|
+
export type PermissionRiskLevel = components['schemas']['PermissionRiskLevel'];
|
|
12156
|
+
export type PermissionApprovalPolicy = components['schemas']['PermissionApprovalPolicy'];
|
|
12157
|
+
export type PermissionStatus = components['schemas']['PermissionStatus'];
|
|
12158
|
+
export type PermissionScopeKind = components['schemas']['PermissionScopeKind'];
|
|
12159
|
+
export type PermissionDefinition = components['schemas']['PermissionDefinition'];
|
|
12160
|
+
export type PermissionCatalog = components['schemas']['PermissionCatalog'];
|
|
12161
|
+
export type PermissionCatalogEnvelope = components['schemas']['PermissionCatalogEnvelope'];
|
|
12162
|
+
export type AccessRole = components['schemas']['AccessRole'];
|
|
12163
|
+
export type AccessRoleInput = components['schemas']['AccessRoleInput'];
|
|
12164
|
+
export type AccessRoleEnvelope = components['schemas']['AccessRoleEnvelope'];
|
|
12165
|
+
export type AccessRoleListEnvelope = components['schemas']['AccessRoleListEnvelope'];
|
|
12166
|
+
export type AccessRoleDeleteResult = components['schemas']['AccessRoleDeleteResult'];
|
|
12167
|
+
export type AuthorizationDecisionStatus = components['schemas']['AuthorizationDecisionStatus'];
|
|
12168
|
+
export type AuthorizationResource = components['schemas']['AuthorizationResource'];
|
|
12169
|
+
export type AuthorizationEffectiveScope = components['schemas']['AuthorizationEffectiveScope'];
|
|
12170
|
+
export type AuthorizationDecision = components['schemas']['AuthorizationDecision'];
|
|
12003
12171
|
export type ComputeDomain = components['schemas']['ComputeDomain'];
|
|
12004
12172
|
export type ComputeProviderDomain = components['schemas']['ComputeProviderDomain'];
|
|
12005
12173
|
export type ComputeTaskDomain = components['schemas']['ComputeTaskDomain'];
|
|
@@ -12720,6 +12888,7 @@ export type DirectoryEmploymentStatus = components['schemas']['DirectoryEmployme
|
|
|
12720
12888
|
export type ResponseIdentityError = components['responses']['IdentityError'];
|
|
12721
12889
|
export type ResponseError = components['responses']['Error'];
|
|
12722
12890
|
export type ResponseComputeError = components['responses']['ComputeError'];
|
|
12891
|
+
export type ParameterAccessRoleId = components['parameters']['AccessRoleID'];
|
|
12723
12892
|
export type ParameterIdentityApplicationId = components['parameters']['IdentityApplicationID'];
|
|
12724
12893
|
export type ParameterIdentityProviderId = components['parameters']['IdentityProviderID'];
|
|
12725
12894
|
export type ParameterIdentityPolicyId = components['parameters']['IdentityPolicyID'];
|
|
@@ -21504,6 +21673,157 @@ export interface operations {
|
|
|
21504
21673
|
403: components["responses"]["Error"];
|
|
21505
21674
|
};
|
|
21506
21675
|
};
|
|
21676
|
+
getPermissionCatalog: {
|
|
21677
|
+
parameters: {
|
|
21678
|
+
query?: never;
|
|
21679
|
+
header?: never;
|
|
21680
|
+
path?: never;
|
|
21681
|
+
cookie?: never;
|
|
21682
|
+
};
|
|
21683
|
+
requestBody?: never;
|
|
21684
|
+
responses: {
|
|
21685
|
+
/** @description Canonical permission definitions and compatibility metadata. */
|
|
21686
|
+
200: {
|
|
21687
|
+
headers: {
|
|
21688
|
+
[name: string]: unknown;
|
|
21689
|
+
};
|
|
21690
|
+
content: {
|
|
21691
|
+
"application/json": components["schemas"]["PermissionCatalogEnvelope"];
|
|
21692
|
+
};
|
|
21693
|
+
};
|
|
21694
|
+
401: components["responses"]["Error"];
|
|
21695
|
+
403: components["responses"]["Error"];
|
|
21696
|
+
};
|
|
21697
|
+
};
|
|
21698
|
+
listAccessRoles: {
|
|
21699
|
+
parameters: {
|
|
21700
|
+
query?: never;
|
|
21701
|
+
header?: never;
|
|
21702
|
+
path?: never;
|
|
21703
|
+
cookie?: never;
|
|
21704
|
+
};
|
|
21705
|
+
requestBody?: never;
|
|
21706
|
+
responses: {
|
|
21707
|
+
/** @description Access roles. */
|
|
21708
|
+
200: {
|
|
21709
|
+
headers: {
|
|
21710
|
+
[name: string]: unknown;
|
|
21711
|
+
};
|
|
21712
|
+
content: {
|
|
21713
|
+
"application/json": components["schemas"]["AccessRoleListEnvelope"];
|
|
21714
|
+
};
|
|
21715
|
+
};
|
|
21716
|
+
401: components["responses"]["Error"];
|
|
21717
|
+
403: components["responses"]["Error"];
|
|
21718
|
+
};
|
|
21719
|
+
};
|
|
21720
|
+
createAccessRole: {
|
|
21721
|
+
parameters: {
|
|
21722
|
+
query?: never;
|
|
21723
|
+
header?: never;
|
|
21724
|
+
path?: never;
|
|
21725
|
+
cookie?: never;
|
|
21726
|
+
};
|
|
21727
|
+
requestBody: {
|
|
21728
|
+
content: {
|
|
21729
|
+
"application/json": components["schemas"]["AccessRoleInput"];
|
|
21730
|
+
};
|
|
21731
|
+
};
|
|
21732
|
+
responses: {
|
|
21733
|
+
/** @description Created access role. */
|
|
21734
|
+
201: {
|
|
21735
|
+
headers: {
|
|
21736
|
+
[name: string]: unknown;
|
|
21737
|
+
};
|
|
21738
|
+
content: {
|
|
21739
|
+
"application/json": components["schemas"]["AccessRoleEnvelope"];
|
|
21740
|
+
};
|
|
21741
|
+
};
|
|
21742
|
+
400: components["responses"]["Error"];
|
|
21743
|
+
401: components["responses"]["Error"];
|
|
21744
|
+
403: components["responses"]["Error"];
|
|
21745
|
+
};
|
|
21746
|
+
};
|
|
21747
|
+
getAccessRole: {
|
|
21748
|
+
parameters: {
|
|
21749
|
+
query?: never;
|
|
21750
|
+
header?: never;
|
|
21751
|
+
path: {
|
|
21752
|
+
accessRoleID: components["parameters"]["AccessRoleID"];
|
|
21753
|
+
};
|
|
21754
|
+
cookie?: never;
|
|
21755
|
+
};
|
|
21756
|
+
requestBody?: never;
|
|
21757
|
+
responses: {
|
|
21758
|
+
/** @description Access role detail. */
|
|
21759
|
+
200: {
|
|
21760
|
+
headers: {
|
|
21761
|
+
[name: string]: unknown;
|
|
21762
|
+
};
|
|
21763
|
+
content: {
|
|
21764
|
+
"application/json": components["schemas"]["AccessRoleEnvelope"];
|
|
21765
|
+
};
|
|
21766
|
+
};
|
|
21767
|
+
401: components["responses"]["Error"];
|
|
21768
|
+
403: components["responses"]["Error"];
|
|
21769
|
+
404: components["responses"]["Error"];
|
|
21770
|
+
};
|
|
21771
|
+
};
|
|
21772
|
+
updateAccessRole: {
|
|
21773
|
+
parameters: {
|
|
21774
|
+
query?: never;
|
|
21775
|
+
header?: never;
|
|
21776
|
+
path: {
|
|
21777
|
+
accessRoleID: components["parameters"]["AccessRoleID"];
|
|
21778
|
+
};
|
|
21779
|
+
cookie?: never;
|
|
21780
|
+
};
|
|
21781
|
+
requestBody: {
|
|
21782
|
+
content: {
|
|
21783
|
+
"application/json": components["schemas"]["AccessRoleInput"];
|
|
21784
|
+
};
|
|
21785
|
+
};
|
|
21786
|
+
responses: {
|
|
21787
|
+
/** @description Updated access role. */
|
|
21788
|
+
200: {
|
|
21789
|
+
headers: {
|
|
21790
|
+
[name: string]: unknown;
|
|
21791
|
+
};
|
|
21792
|
+
content: {
|
|
21793
|
+
"application/json": components["schemas"]["AccessRoleEnvelope"];
|
|
21794
|
+
};
|
|
21795
|
+
};
|
|
21796
|
+
400: components["responses"]["Error"];
|
|
21797
|
+
401: components["responses"]["Error"];
|
|
21798
|
+
403: components["responses"]["Error"];
|
|
21799
|
+
404: components["responses"]["Error"];
|
|
21800
|
+
};
|
|
21801
|
+
};
|
|
21802
|
+
deleteAccessRole: {
|
|
21803
|
+
parameters: {
|
|
21804
|
+
query?: never;
|
|
21805
|
+
header?: never;
|
|
21806
|
+
path: {
|
|
21807
|
+
accessRoleID: components["parameters"]["AccessRoleID"];
|
|
21808
|
+
};
|
|
21809
|
+
cookie?: never;
|
|
21810
|
+
};
|
|
21811
|
+
requestBody?: never;
|
|
21812
|
+
responses: {
|
|
21813
|
+
/** @description Access role deleted. */
|
|
21814
|
+
200: {
|
|
21815
|
+
headers: {
|
|
21816
|
+
[name: string]: unknown;
|
|
21817
|
+
};
|
|
21818
|
+
content: {
|
|
21819
|
+
"application/json": components["schemas"]["AccessRoleDeleteResult"];
|
|
21820
|
+
};
|
|
21821
|
+
};
|
|
21822
|
+
401: components["responses"]["Error"];
|
|
21823
|
+
403: components["responses"]["Error"];
|
|
21824
|
+
404: components["responses"]["Error"];
|
|
21825
|
+
};
|
|
21826
|
+
};
|
|
21507
21827
|
getIdentityRuntimeCapabilities: {
|
|
21508
21828
|
parameters: {
|
|
21509
21829
|
query?: never;
|