@scalekit-sdk/node 1.0.7 → 1.0.8
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/buf.gen.yaml +2 -1
- package/lib/core.js +1 -1
- package/lib/directory.d.ts +78 -0
- package/lib/directory.js +126 -0
- package/lib/directory.js.map +1 -0
- package/lib/organization.d.ts +8 -0
- package/lib/organization.js +20 -0
- package/lib/organization.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/directories/directories_connect.d.ts +118 -0
- package/lib/pkg/grpc/scalekit/v1/directories/directories_connect.js +126 -0
- package/lib/pkg/grpc/scalekit/v1/directories/directories_connect.js.map +1 -0
- package/lib/pkg/grpc/scalekit/v1/directories/directories_pb.d.ts +960 -0
- package/lib/pkg/grpc/scalekit/v1/directories/directories_pb.js +1429 -0
- package/lib/pkg/grpc/scalekit/v1/directories/directories_pb.js.map +1 -0
- package/lib/pkg/grpc/scalekit/v1/organizations/organizations_connect.d.ts +10 -1
- package/lib/pkg/grpc/scalekit/v1/organizations/organizations_connect.js +9 -0
- package/lib/pkg/grpc/scalekit/v1/organizations/organizations_connect.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/organizations/organizations_pb.d.ts +81 -0
- package/lib/pkg/grpc/scalekit/v1/organizations/organizations_pb.js +113 -1
- package/lib/pkg/grpc/scalekit/v1/organizations/organizations_pb.js.map +1 -1
- package/lib/scalekit.d.ts +27 -1
- package/lib/scalekit.js +67 -1
- package/lib/scalekit.js.map +1 -1
- package/lib/types/organization.d.ts +7 -0
- package/lib/types/organization.js +3 -0
- package/lib/types/organization.js.map +1 -0
- package/package.json +1 -1
- package/src/core.ts +1 -1
- package/src/directory.ts +173 -0
- package/src/organization.ts +24 -1
- package/src/pkg/grpc/scalekit/v1/directories/directories_connect.ts +125 -0
- package/src/pkg/grpc/scalekit/v1/directories/directories_pb.ts +1838 -0
- package/src/pkg/grpc/scalekit/v1/organizations/organizations_connect.ts +10 -1
- package/src/pkg/grpc/scalekit/v1/organizations/organizations_pb.ts +155 -0
- package/src/scalekit.ts +78 -3
- package/src/types/organization.ts +8 -0
package/lib/scalekit.js
CHANGED
|
@@ -35,16 +35,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
35
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
36
|
};
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
38
39
|
const jose = __importStar(require("jose"));
|
|
39
40
|
const qs_1 = __importDefault(require("qs"));
|
|
40
41
|
const connect_1 = __importDefault(require("./connect"));
|
|
41
42
|
const connection_1 = __importDefault(require("./connection"));
|
|
42
43
|
const user_1 = require("./constants/user");
|
|
43
44
|
const core_1 = __importDefault(require("./core"));
|
|
45
|
+
const directory_1 = __importDefault(require("./directory"));
|
|
44
46
|
const domain_1 = __importDefault(require("./domain"));
|
|
45
47
|
const organization_1 = __importDefault(require("./organization"));
|
|
46
48
|
const scalekit_1 = require("./types/scalekit");
|
|
47
49
|
const authorizeEndpoint = "oauth/authorize";
|
|
50
|
+
const WEBHOOK_TOLERANCE_IN_SECONDS = 5 * 60; // 5 minutes
|
|
51
|
+
const WEBHOOK_SIGNATURE_VERSION = "v1";
|
|
48
52
|
/**
|
|
49
53
|
* To initiate scalekit
|
|
50
54
|
* @param {string} envUrl The environment url
|
|
@@ -61,6 +65,7 @@ class ScalekitClient {
|
|
|
61
65
|
this.organization = new organization_1.default(this.grpcConnect, this.coreClient);
|
|
62
66
|
this.connection = new connection_1.default(this.grpcConnect, this.coreClient);
|
|
63
67
|
this.domain = new domain_1.default(this.grpcConnect, this.coreClient);
|
|
68
|
+
this.directory = new directory_1.default(this.grpcConnect, this.coreClient);
|
|
64
69
|
}
|
|
65
70
|
/**
|
|
66
71
|
* Returns the authorization url to initiate the authentication request.
|
|
@@ -126,7 +131,7 @@ class ScalekitClient {
|
|
|
126
131
|
*/
|
|
127
132
|
getIdpInitiatedLoginClaims(idpInitiatedLoginToken) {
|
|
128
133
|
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
-
return
|
|
134
|
+
return this.validateToken(idpInitiatedLoginToken);
|
|
130
135
|
});
|
|
131
136
|
}
|
|
132
137
|
/**
|
|
@@ -146,6 +151,37 @@ class ScalekitClient {
|
|
|
146
151
|
}
|
|
147
152
|
});
|
|
148
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Verifies the payload of the webhook
|
|
156
|
+
*
|
|
157
|
+
* @param {string} secret The secret
|
|
158
|
+
* @param {Record<string, string>} headers The headers
|
|
159
|
+
* @param {string} payload The payload
|
|
160
|
+
* @return {boolean} Returns true if the payload is valid.
|
|
161
|
+
*/
|
|
162
|
+
verifyWebhookPayload(secret, headers, payload) {
|
|
163
|
+
const webhookId = headers['webhook-id'];
|
|
164
|
+
const webhookTimestamp = headers['webhook-timestamp'];
|
|
165
|
+
const webhookSignature = headers['webhook-signature'];
|
|
166
|
+
if (!webhookId || !webhookTimestamp || !webhookSignature) {
|
|
167
|
+
throw new Error("Missing required headers");
|
|
168
|
+
}
|
|
169
|
+
const timestamp = this.verifyTimestamp(webhookTimestamp);
|
|
170
|
+
const data = `${webhookId}.${Math.floor(timestamp.getTime() / 1000)}.${payload}`;
|
|
171
|
+
const secretBytes = Buffer.from(secret.split("_")[1], 'base64');
|
|
172
|
+
const computedSignature = this.computeSignature(secretBytes, data);
|
|
173
|
+
const receivedSignatures = webhookSignature.split(" ");
|
|
174
|
+
for (const versionedSignature of receivedSignatures) {
|
|
175
|
+
const [version, signature] = versionedSignature.split(",");
|
|
176
|
+
if (version !== WEBHOOK_SIGNATURE_VERSION) {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (crypto_1.default.timingSafeEqual(Buffer.from(signature, 'base64'), Buffer.from(computedSignature, 'base64'))) {
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
throw new Error("Invalid Signature");
|
|
184
|
+
}
|
|
149
185
|
/**
|
|
150
186
|
* Validate token
|
|
151
187
|
*
|
|
@@ -167,6 +203,36 @@ class ScalekitClient {
|
|
|
167
203
|
}
|
|
168
204
|
});
|
|
169
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Verify the timestamp
|
|
208
|
+
*
|
|
209
|
+
* @param {string} timestampStr The timestamp string
|
|
210
|
+
* @return {Date} Returns the timestamp
|
|
211
|
+
*/
|
|
212
|
+
verifyTimestamp(timestampStr) {
|
|
213
|
+
const now = Math.floor(Date.now() / 1000);
|
|
214
|
+
const timestamp = parseInt(timestampStr, 10);
|
|
215
|
+
if (isNaN(timestamp)) {
|
|
216
|
+
throw new Error("Invalid timestamp");
|
|
217
|
+
}
|
|
218
|
+
if (now - timestamp > WEBHOOK_TOLERANCE_IN_SECONDS) {
|
|
219
|
+
throw new Error("Message timestamp too old");
|
|
220
|
+
}
|
|
221
|
+
if (timestamp > now + WEBHOOK_TOLERANCE_IN_SECONDS) {
|
|
222
|
+
throw new Error("Message timestamp too new");
|
|
223
|
+
}
|
|
224
|
+
return new Date(timestamp * 1000);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Compute the signature
|
|
228
|
+
*
|
|
229
|
+
* @param {Buffer} secretBytes The secret bytes
|
|
230
|
+
* @param {string} data The data to be signed
|
|
231
|
+
* @return {string} Returns the signature
|
|
232
|
+
*/
|
|
233
|
+
computeSignature(secretBytes, data) {
|
|
234
|
+
return crypto_1.default.createHmac('sha256', secretBytes).update(data).digest('base64');
|
|
235
|
+
}
|
|
170
236
|
}
|
|
171
237
|
exports.default = ScalekitClient;
|
|
172
238
|
//# sourceMappingURL=scalekit.js.map
|
package/lib/scalekit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scalekit.js","sourceRoot":"","sources":["../src/scalekit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,4CAA6B;AAC7B,wDAAoC;AACpC,8DAA4C;AAC5C,2CAAyD;AACzD,kDAAgC;AAChC,sDAAoC;AACpC,kEAAgD;
|
|
1
|
+
{"version":3,"file":"scalekit.js","sourceRoot":"","sources":["../src/scalekit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization.js","sourceRoot":"","sources":["../../src/types/organization.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
package/src/core.ts
CHANGED
|
@@ -20,7 +20,7 @@ export default class CoreClient {
|
|
|
20
20
|
public keys: JWK[] = [];
|
|
21
21
|
public accessToken: string | null = null;
|
|
22
22
|
public axios: Axios;
|
|
23
|
-
public sdkVersion = `Scalekit-Node/1.0.
|
|
23
|
+
public sdkVersion = `Scalekit-Node/1.0.8`;
|
|
24
24
|
public apiVersion = "20240430";
|
|
25
25
|
public userAgent = `${this.sdkVersion} Node/${process.version} (${process.platform}; ${os.arch()})`;
|
|
26
26
|
constructor(
|
package/src/directory.ts
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { Timestamp } from '@bufbuild/protobuf';
|
|
2
|
+
import { PromiseClient } from '@connectrpc/connect';
|
|
3
|
+
import GrpcConnect from './connect';
|
|
4
|
+
import CoreClient from './core';
|
|
5
|
+
import { DirectoryService } from './pkg/grpc/scalekit/v1/directories/directories_connect';
|
|
6
|
+
import {
|
|
7
|
+
GetDirectoryResponse,
|
|
8
|
+
Directory,
|
|
9
|
+
ListDirectoriesResponse,
|
|
10
|
+
ListDirectoryGroupsResponse,
|
|
11
|
+
ListDirectoryUsersResponse,
|
|
12
|
+
ToggleDirectoryResponse
|
|
13
|
+
} from './pkg/grpc/scalekit/v1/directories/directories_pb';
|
|
14
|
+
|
|
15
|
+
export default class DirectoryClient {
|
|
16
|
+
private client: PromiseClient<typeof DirectoryService>;
|
|
17
|
+
constructor(
|
|
18
|
+
private readonly grpcConncet: GrpcConnect,
|
|
19
|
+
private readonly coreClient: CoreClient
|
|
20
|
+
) {
|
|
21
|
+
this.client = this.grpcConncet.createClient(DirectoryService);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* List directories for an organization
|
|
26
|
+
* @param {string} organizationId The organization id
|
|
27
|
+
* @returns {Promise<ListDirectoriesResponse>} Returns the list of directories
|
|
28
|
+
*/
|
|
29
|
+
async listDirectories(organizationId: string): Promise<ListDirectoriesResponse> {
|
|
30
|
+
return this.coreClient.connectExec(
|
|
31
|
+
this.client.listDirectories,
|
|
32
|
+
{ organizationId }
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get a directory for an organization
|
|
38
|
+
* @param {string} organizationId The organization id
|
|
39
|
+
* @param {string} directoryId The directory id
|
|
40
|
+
* @returns {Promise<GetDirectoryResponse>} Returns the directory
|
|
41
|
+
*/
|
|
42
|
+
async getDirectory(organizationId: string, directoryId: string): Promise<GetDirectoryResponse> {
|
|
43
|
+
return this.coreClient.connectExec(
|
|
44
|
+
this.client.getDirectory,
|
|
45
|
+
{ organizationId, id: directoryId }
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Get a directory for an organization
|
|
51
|
+
* @param {string} organizationId The organization id
|
|
52
|
+
* @returns {Promise<Directory>} Returns the directory
|
|
53
|
+
*/
|
|
54
|
+
async getPrimaryDirectoryByOrganizationId(organizationId: string): Promise<Directory> {
|
|
55
|
+
const directories = await this.listDirectories(organizationId);
|
|
56
|
+
if (!directories || directories.directories.length === 0) {
|
|
57
|
+
return Promise.reject('directory does not exist for organization');
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return directories.directories[0];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* List users in a directory for an organization
|
|
65
|
+
* @param {string} organizationId The organization id
|
|
66
|
+
* @param {string} directoryId The directory id
|
|
67
|
+
* @param {object} options The options to list directory users
|
|
68
|
+
* @param {number} options.pageSize The page size
|
|
69
|
+
* @param {string} options.pageToken The page token
|
|
70
|
+
* @param {boolean} options.includeDetail Include detail
|
|
71
|
+
* @param {string} options.directoryGroupId The directory group id
|
|
72
|
+
* @param {string} options.updatedAfter The updated after
|
|
73
|
+
* @returns {Promise<ListDirectoryUsersResponse>} Returns the list of directory users
|
|
74
|
+
*/
|
|
75
|
+
async listDirectoryUsers(
|
|
76
|
+
organizationId: string,
|
|
77
|
+
directoryId: string,
|
|
78
|
+
options?: {
|
|
79
|
+
pageSize?: number,
|
|
80
|
+
pageToken?: string,
|
|
81
|
+
includeDetail?: boolean,
|
|
82
|
+
directoryGroupId?: string,
|
|
83
|
+
updatedAfter?: string,
|
|
84
|
+
}
|
|
85
|
+
): Promise<ListDirectoryUsersResponse> {
|
|
86
|
+
let requestOptions = {};
|
|
87
|
+
if (options) {
|
|
88
|
+
requestOptions = {
|
|
89
|
+
...options,
|
|
90
|
+
...(options.updatedAfter && {
|
|
91
|
+
updatedAfter: Timestamp.fromDate(new Date(options.updatedAfter))
|
|
92
|
+
})
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return this.coreClient.connectExec(
|
|
97
|
+
this.client.listDirectoryUsers,
|
|
98
|
+
{
|
|
99
|
+
organizationId,
|
|
100
|
+
directoryId,
|
|
101
|
+
...requestOptions,
|
|
102
|
+
}
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* List groups in a directory for an organization
|
|
108
|
+
* @param {string} organizationId The organization id
|
|
109
|
+
* @param {string} directoryId The directory id
|
|
110
|
+
* @param {object} options The options to list directory groups
|
|
111
|
+
* @param {number} options.pageSize The page size
|
|
112
|
+
* @param {string} options.pageToken The page token
|
|
113
|
+
* @param {boolean} options.includeDetail Include detail
|
|
114
|
+
* @param {string} options.updatedAfter The updated after
|
|
115
|
+
* @returns {Promise<ListDirectoryGroupsResponse>} Returns the list of directory groups
|
|
116
|
+
*/
|
|
117
|
+
async listDirectoryGroups(
|
|
118
|
+
organizationId: string,
|
|
119
|
+
directoryId: string,
|
|
120
|
+
options?: {
|
|
121
|
+
pageSize?: number,
|
|
122
|
+
pageToken?: string,
|
|
123
|
+
includeDetail?: boolean,
|
|
124
|
+
updatedAfter?: string,
|
|
125
|
+
}
|
|
126
|
+
): Promise<ListDirectoryGroupsResponse> {
|
|
127
|
+
let requestOptions = {};
|
|
128
|
+
if (options) {
|
|
129
|
+
requestOptions = {
|
|
130
|
+
...options,
|
|
131
|
+
...(options.updatedAfter && {
|
|
132
|
+
updatedAfter: Timestamp.fromDate(new Date(options.updatedAfter))
|
|
133
|
+
})
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return this.coreClient.connectExec(
|
|
138
|
+
this.client.listDirectoryGroups,
|
|
139
|
+
{
|
|
140
|
+
organizationId,
|
|
141
|
+
directoryId,
|
|
142
|
+
...requestOptions,
|
|
143
|
+
}
|
|
144
|
+
)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Enable a directory for an organization
|
|
149
|
+
* @param {string} organizationId The organization id
|
|
150
|
+
* @param {string} directoryId The directory id
|
|
151
|
+
* @returns {Promise<ToggleDirectoryResponse>} Returns the directory enable response
|
|
152
|
+
*/
|
|
153
|
+
async enableDirectory(organizationId: string, directoryId: string): Promise<ToggleDirectoryResponse> {
|
|
154
|
+
return this.coreClient.connectExec(
|
|
155
|
+
this.client.enableDirectory,
|
|
156
|
+
{ organizationId, id: directoryId }
|
|
157
|
+
)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Disable a directory for an organization
|
|
162
|
+
* @param {string} organizationId The organization id
|
|
163
|
+
* @param {string} directoryId The directory id
|
|
164
|
+
* @returns {Promise<ToggleDirectoryResponse>} Returns the directory disable response
|
|
165
|
+
*/
|
|
166
|
+
async disableDirectory(organizationId: string, directoryId: string): Promise<ToggleDirectoryResponse> {
|
|
167
|
+
return this.coreClient.connectExec(
|
|
168
|
+
this.client.disableDirectory,
|
|
169
|
+
{ organizationId, id: directoryId }
|
|
170
|
+
)
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
package/src/organization.ts
CHANGED
|
@@ -4,7 +4,7 @@ import GrpcConnect from './connect';
|
|
|
4
4
|
import CoreClient from './core';
|
|
5
5
|
import { OrganizationService } from './pkg/grpc/scalekit/v1/organizations/organizations_connect';
|
|
6
6
|
import { CreateOrganizationResponse, GetOrganizationResponse, Link, ListOrganizationsResponse, UpdateOrganization, UpdateOrganizationResponse } from './pkg/grpc/scalekit/v1/organizations/organizations_pb';
|
|
7
|
-
|
|
7
|
+
import { OrganizationSettings } from './types/organization';
|
|
8
8
|
export default class OrganizationClient {
|
|
9
9
|
private client: PromiseClient<typeof OrganizationService>;
|
|
10
10
|
constructor(
|
|
@@ -172,5 +172,28 @@ export default class OrganizationClient {
|
|
|
172
172
|
},
|
|
173
173
|
)
|
|
174
174
|
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Update organization settings for an organization
|
|
178
|
+
* @param organizationId The organization id
|
|
179
|
+
* @param settings The organization settings
|
|
180
|
+
* @returns {Promise<GetOrganizationResponse>} The updated organization
|
|
181
|
+
*/
|
|
182
|
+
async updateOrganizationSettings(organizationId: string, settings: OrganizationSettings): Promise<GetOrganizationResponse> {
|
|
183
|
+
const request = {
|
|
184
|
+
id: organizationId,
|
|
185
|
+
settings: {
|
|
186
|
+
features: settings.features.map(feature => ({
|
|
187
|
+
name: feature.name,
|
|
188
|
+
enabled: feature.enabled
|
|
189
|
+
}))
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return this.coreClient.connectExec(
|
|
194
|
+
this.client.updateOrganizationSettings,
|
|
195
|
+
request,
|
|
196
|
+
)
|
|
197
|
+
}
|
|
175
198
|
}
|
|
176
199
|
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// @generated by protoc-gen-connect-es v1.4.0 with parameter "target=ts"
|
|
2
|
+
// @generated from file scalekit/v1/directories/directories.proto (package scalekit.v1.directories, syntax proto3)
|
|
3
|
+
/* eslint-disable */
|
|
4
|
+
// @ts-nocheck
|
|
5
|
+
|
|
6
|
+
import { AssignRolesRequest, AssignRolesResponse, CreateDirectoryRequest, CreateDirectoryResponse, CreateDirectorySecretRequest, CreateDirectorySecretResponse, GetDirectoryRequest, GetDirectoryResponse, ListDirectoriesRequest, ListDirectoriesResponse, ListDirectoryGroupsRequest, ListDirectoryGroupsResponse, ListDirectoryUsersRequest, ListDirectoryUsersResponse, RegenerateDirectorySecretRequest, RegenerateDirectorySecretResponse, ToggleDirectoryRequest, ToggleDirectoryResponse, UpdateAttributesRequest, UpdateAttributesResponse, UpdateDirectoryRequest, UpdateDirectoryResponse } from "./directories_pb.js";
|
|
7
|
+
import { MethodKind } from "@bufbuild/protobuf";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @generated from service scalekit.v1.directories.DirectoryService
|
|
11
|
+
*/
|
|
12
|
+
export const DirectoryService = {
|
|
13
|
+
typeName: "scalekit.v1.directories.DirectoryService",
|
|
14
|
+
methods: {
|
|
15
|
+
/**
|
|
16
|
+
* @generated from rpc scalekit.v1.directories.DirectoryService.CreateDirectory
|
|
17
|
+
*/
|
|
18
|
+
createDirectory: {
|
|
19
|
+
name: "CreateDirectory",
|
|
20
|
+
I: CreateDirectoryRequest,
|
|
21
|
+
O: CreateDirectoryResponse,
|
|
22
|
+
kind: MethodKind.Unary,
|
|
23
|
+
},
|
|
24
|
+
/**
|
|
25
|
+
* @generated from rpc scalekit.v1.directories.DirectoryService.UpdateDirectory
|
|
26
|
+
*/
|
|
27
|
+
updateDirectory: {
|
|
28
|
+
name: "UpdateDirectory",
|
|
29
|
+
I: UpdateDirectoryRequest,
|
|
30
|
+
O: UpdateDirectoryResponse,
|
|
31
|
+
kind: MethodKind.Unary,
|
|
32
|
+
},
|
|
33
|
+
/**
|
|
34
|
+
* @generated from rpc scalekit.v1.directories.DirectoryService.AssignRoles
|
|
35
|
+
*/
|
|
36
|
+
assignRoles: {
|
|
37
|
+
name: "AssignRoles",
|
|
38
|
+
I: AssignRolesRequest,
|
|
39
|
+
O: AssignRolesResponse,
|
|
40
|
+
kind: MethodKind.Unary,
|
|
41
|
+
},
|
|
42
|
+
/**
|
|
43
|
+
* @generated from rpc scalekit.v1.directories.DirectoryService.UpdateAttributes
|
|
44
|
+
*/
|
|
45
|
+
updateAttributes: {
|
|
46
|
+
name: "UpdateAttributes",
|
|
47
|
+
I: UpdateAttributesRequest,
|
|
48
|
+
O: UpdateAttributesResponse,
|
|
49
|
+
kind: MethodKind.Unary,
|
|
50
|
+
},
|
|
51
|
+
/**
|
|
52
|
+
* @generated from rpc scalekit.v1.directories.DirectoryService.GetDirectory
|
|
53
|
+
*/
|
|
54
|
+
getDirectory: {
|
|
55
|
+
name: "GetDirectory",
|
|
56
|
+
I: GetDirectoryRequest,
|
|
57
|
+
O: GetDirectoryResponse,
|
|
58
|
+
kind: MethodKind.Unary,
|
|
59
|
+
},
|
|
60
|
+
/**
|
|
61
|
+
* @generated from rpc scalekit.v1.directories.DirectoryService.ListDirectories
|
|
62
|
+
*/
|
|
63
|
+
listDirectories: {
|
|
64
|
+
name: "ListDirectories",
|
|
65
|
+
I: ListDirectoriesRequest,
|
|
66
|
+
O: ListDirectoriesResponse,
|
|
67
|
+
kind: MethodKind.Unary,
|
|
68
|
+
},
|
|
69
|
+
/**
|
|
70
|
+
* @generated from rpc scalekit.v1.directories.DirectoryService.EnableDirectory
|
|
71
|
+
*/
|
|
72
|
+
enableDirectory: {
|
|
73
|
+
name: "EnableDirectory",
|
|
74
|
+
I: ToggleDirectoryRequest,
|
|
75
|
+
O: ToggleDirectoryResponse,
|
|
76
|
+
kind: MethodKind.Unary,
|
|
77
|
+
},
|
|
78
|
+
/**
|
|
79
|
+
* @generated from rpc scalekit.v1.directories.DirectoryService.DisableDirectory
|
|
80
|
+
*/
|
|
81
|
+
disableDirectory: {
|
|
82
|
+
name: "DisableDirectory",
|
|
83
|
+
I: ToggleDirectoryRequest,
|
|
84
|
+
O: ToggleDirectoryResponse,
|
|
85
|
+
kind: MethodKind.Unary,
|
|
86
|
+
},
|
|
87
|
+
/**
|
|
88
|
+
* @generated from rpc scalekit.v1.directories.DirectoryService.ListDirectoryUsers
|
|
89
|
+
*/
|
|
90
|
+
listDirectoryUsers: {
|
|
91
|
+
name: "ListDirectoryUsers",
|
|
92
|
+
I: ListDirectoryUsersRequest,
|
|
93
|
+
O: ListDirectoryUsersResponse,
|
|
94
|
+
kind: MethodKind.Unary,
|
|
95
|
+
},
|
|
96
|
+
/**
|
|
97
|
+
* @generated from rpc scalekit.v1.directories.DirectoryService.ListDirectoryGroups
|
|
98
|
+
*/
|
|
99
|
+
listDirectoryGroups: {
|
|
100
|
+
name: "ListDirectoryGroups",
|
|
101
|
+
I: ListDirectoryGroupsRequest,
|
|
102
|
+
O: ListDirectoryGroupsResponse,
|
|
103
|
+
kind: MethodKind.Unary,
|
|
104
|
+
},
|
|
105
|
+
/**
|
|
106
|
+
* @generated from rpc scalekit.v1.directories.DirectoryService.CreateDirectorySecret
|
|
107
|
+
*/
|
|
108
|
+
createDirectorySecret: {
|
|
109
|
+
name: "CreateDirectorySecret",
|
|
110
|
+
I: CreateDirectorySecretRequest,
|
|
111
|
+
O: CreateDirectorySecretResponse,
|
|
112
|
+
kind: MethodKind.Unary,
|
|
113
|
+
},
|
|
114
|
+
/**
|
|
115
|
+
* @generated from rpc scalekit.v1.directories.DirectoryService.RegenerateDirectorySecret
|
|
116
|
+
*/
|
|
117
|
+
regenerateDirectorySecret: {
|
|
118
|
+
name: "RegenerateDirectorySecret",
|
|
119
|
+
I: RegenerateDirectorySecretRequest,
|
|
120
|
+
O: RegenerateDirectorySecretResponse,
|
|
121
|
+
kind: MethodKind.Unary,
|
|
122
|
+
},
|
|
123
|
+
}
|
|
124
|
+
} as const;
|
|
125
|
+
|