change folder structure
This commit is contained in:
parent
4f1fa62c83
commit
60f9cc8b2c
25 changed files with 285 additions and 316 deletions
76
RcHttp.ts
76
RcHttp.ts
|
@ -1,76 +0,0 @@
|
|||
import {
|
||||
IHttp,
|
||||
IHttpRequest,
|
||||
IHttpResponse,
|
||||
IRead,
|
||||
} from "@rocket.chat/apps-engine/definition/accessors";
|
||||
|
||||
export class RcHttp implements IHttp {
|
||||
private readonly baseUrl = "http://localhost:3000/api/v1";
|
||||
private readonly http: IHttp;
|
||||
private readonly read: IRead;
|
||||
|
||||
constructor(http: IHttp, read: IRead) {
|
||||
this.http = http;
|
||||
this.read = read;
|
||||
}
|
||||
|
||||
public async get(url: string, content?: any): Promise<IHttpResponse> {
|
||||
return this.http.get(
|
||||
this.buildUrl(url),
|
||||
await this.buildOptions(content),
|
||||
);
|
||||
}
|
||||
|
||||
public async post(url: string, content?: any): Promise<IHttpResponse> {
|
||||
return this.http.post(
|
||||
this.buildUrl(url),
|
||||
await this.buildOptions(content),
|
||||
);
|
||||
}
|
||||
|
||||
public async put(url: string, content?: any): Promise<IHttpResponse> {
|
||||
return this.http.put(
|
||||
this.buildUrl(url),
|
||||
await this.buildOptions(content),
|
||||
);
|
||||
}
|
||||
|
||||
public async del(url: string, content?: any): Promise<IHttpResponse> {
|
||||
return this.http.del(
|
||||
this.buildUrl(url),
|
||||
await this.buildOptions(content),
|
||||
);
|
||||
}
|
||||
|
||||
public async patch(url: string, content?: any): Promise<IHttpResponse> {
|
||||
return this.http.patch(
|
||||
this.buildUrl(url),
|
||||
await this.buildOptions(content),
|
||||
);
|
||||
}
|
||||
|
||||
private buildUrl(url: string): string {
|
||||
return `${this.baseUrl}/${url}`;
|
||||
}
|
||||
|
||||
private async buildOptions(content?: any): Promise<IHttpRequest> {
|
||||
const options: IHttpRequest = {
|
||||
headers: {
|
||||
"X-User-Id": await this.read
|
||||
.getEnvironmentReader()
|
||||
.getSettings()
|
||||
.getValueById("rc-user-id"),
|
||||
"X-Auth-Token": await this.read
|
||||
.getEnvironmentReader()
|
||||
.getSettings()
|
||||
.getValueById("rc-token"),
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
};
|
||||
if (content !== undefined) {
|
||||
options.content = JSON.stringify(content);
|
||||
}
|
||||
return options;
|
||||
}
|
||||
}
|
|
@ -10,11 +10,11 @@ import {
|
|||
import { App } from "@rocket.chat/apps-engine/definition/App";
|
||||
import { IAppInfo } from "@rocket.chat/apps-engine/definition/metadata";
|
||||
import { SettingType } from "@rocket.chat/apps-engine/definition/settings";
|
||||
import { GroupEndpoint } from "./GroupEndpoint";
|
||||
import { GroupsEndpoint } from "./GroupsEndpoint";
|
||||
import { GroupEndpoint } from "./src/endpoints/GroupEndpoint";
|
||||
import { GroupsEndpoint } from "./src/endpoints/GroupsEndpoint";
|
||||
|
||||
import { UserEndpoint } from "./UserEndpoint";
|
||||
import { UsersEndpoint } from "./UsersEndpoint";
|
||||
import { UserEndpoint } from "./src/endpoints/UserEndpoint";
|
||||
import { UsersEndpoint } from "./src/endpoints/UsersEndpoint";
|
||||
|
||||
export class ScimApp extends App {
|
||||
constructor(info: IAppInfo, logger: ILogger, accessors: IAppAccessors) {
|
||||
|
|
|
@ -1,70 +0,0 @@
|
|||
import { RcSdk } from "./RcSdk";
|
||||
|
||||
interface ITeamRemoveMemberBody {
|
||||
teamId: string;
|
||||
userId: string;
|
||||
}
|
||||
|
||||
interface ITeamAddMemberBody {
|
||||
teamId: string;
|
||||
members: Array<{
|
||||
userId: string;
|
||||
roles: Array<string>;
|
||||
}>;
|
||||
}
|
||||
|
||||
interface ITeamDeleteBody {
|
||||
teamId: string;
|
||||
roomsToRemove?: Array<string>;
|
||||
}
|
||||
|
||||
interface ITeamCreateBody {
|
||||
name: string;
|
||||
type: 0 | 1;
|
||||
members?: Array<string>;
|
||||
room?: {
|
||||
readOnly: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
export class RcSdkTeam {
|
||||
private sdk: RcSdk;
|
||||
constructor(sdk: RcSdk) {
|
||||
this.sdk = sdk;
|
||||
}
|
||||
|
||||
public async listAll(): Promise<any> {
|
||||
const response = await this.sdk.get(`teams.listAll`);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async members(teamId: string): Promise<any> {
|
||||
const response = await this.sdk.get(`teams.members?teamId=${teamId}`);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async info(teamId: string): Promise<any> {
|
||||
const response = await this.sdk.get(`teams.info?teamId=${teamId}`);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async delete(body: ITeamDeleteBody): Promise<any> {
|
||||
const response = await this.sdk.post(`teams.delete`, body);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async create(body: ITeamCreateBody): Promise<any> {
|
||||
const response = await this.sdk.post(`teams.create`, body);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async removeMember(body: ITeamRemoveMemberBody): Promise<any> {
|
||||
const response = await this.sdk.post(`teams.removeMember`, body);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async addMembers(body: ITeamAddMemberBody): Promise<any> {
|
||||
const response = await this.sdk.post(`teams.addMembers`, body);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
import { RcSdk } from "./RcSdk";
|
||||
|
||||
export class RcSdkUser {
|
||||
private sdk: RcSdk;
|
||||
constructor(sdk: RcSdk) {
|
||||
this.sdk = sdk;
|
||||
}
|
||||
|
||||
public async list(): Promise<any> {
|
||||
const response = await this.sdk.get(
|
||||
`users.list?query={"type":{"$eq":"user"}}&fields={"createdAt":1}`,
|
||||
);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async info(userId: string): Promise<any> {
|
||||
const response = await this.sdk.get(`users.info?userId=${userId}`);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async update(body: IUserUpdate): Promise<any> {
|
||||
const response = await this.sdk.post(`users.update`, body);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async delete(body: IUserDelete): Promise<any> {
|
||||
const response = await this.sdk.post(`users.delete`);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async create(body: IUserCreate): Promise<any> {
|
||||
const response = await this.sdk.post(`users.create`, body);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
}
|
62
rest.ts
62
rest.ts
|
@ -1,62 +0,0 @@
|
|||
interface IUserCreate {
|
||||
email: string;
|
||||
name: string;
|
||||
password: string;
|
||||
username: string;
|
||||
active?: boolean;
|
||||
roles?: Array<string>;
|
||||
joinDefaultChannels?: boolean;
|
||||
requirePasswordChange?: boolean;
|
||||
sendWelcomeEmail?: boolean;
|
||||
verified?: boolean;
|
||||
customFields?: any;
|
||||
}
|
||||
|
||||
interface IUserUpdate {
|
||||
userId: string;
|
||||
data: {
|
||||
email?: string;
|
||||
name?: string;
|
||||
password?: string;
|
||||
username?: string;
|
||||
active?: boolean;
|
||||
roles?: Array<string>;
|
||||
joinDefaultChannels?: boolean;
|
||||
requirePasswordChange?: boolean;
|
||||
sendWelcomeEmail?: boolean;
|
||||
verified?: boolean;
|
||||
customFields?: any;
|
||||
};
|
||||
}
|
||||
|
||||
interface IUserDelete {
|
||||
userId: string;
|
||||
confirmRelinquish?: boolean;
|
||||
}
|
||||
|
||||
interface IUser {
|
||||
_id: string;
|
||||
emails: Array<{ address: string; verified: boolean }>;
|
||||
name: string;
|
||||
username: string;
|
||||
active?: boolean;
|
||||
createdAt: string;
|
||||
_updatedAt?: string;
|
||||
}
|
||||
|
||||
interface ITeam {
|
||||
_id: string;
|
||||
name: string;
|
||||
active?: boolean;
|
||||
createdAt: string;
|
||||
_updatedAt?: string;
|
||||
}
|
||||
|
||||
interface ITeamMember {
|
||||
user: {
|
||||
_id: string;
|
||||
name: string;
|
||||
username: string;
|
||||
};
|
||||
createdAt: string;
|
||||
}
|
|
@ -8,8 +8,8 @@ import {
|
|||
IApiEndpointInfo,
|
||||
IApiRequest,
|
||||
} from "@rocket.chat/apps-engine/definition/api";
|
||||
import { EmptyRequestError } from "./errors/EmptyRequestError";
|
||||
import { RcSdk } from "./rc-sdk/RcSdk";
|
||||
import { EmptyRequestError } from "../errors/EmptyRequestError";
|
||||
import { RcSdk } from "../rc-sdk/RcSdk";
|
||||
|
||||
export class Context {
|
||||
public readonly rc: RcSdk;
|
|
@ -1,8 +1,7 @@
|
|||
import { HttpStatusCode } from "@rocket.chat/apps-engine/definition/accessors";
|
||||
import { IApiResponse } from "@rocket.chat/apps-engine/definition/api";
|
||||
import { SCIMGroup } from "../scim/Group";
|
||||
import { Context } from "./Context";
|
||||
import { SCIMGroup } from "./scim/Group";
|
||||
import { SCIMUser } from "./scim/User";
|
||||
import { IScimEndpoint, ScimEndpoint } from "./ScimEndpoint";
|
||||
|
||||
export class GroupEndpoint extends ScimEndpoint implements IScimEndpoint {
|
||||
|
@ -33,7 +32,7 @@ export class GroupEndpoint extends ScimEndpoint implements IScimEndpoint {
|
|||
SCIMGroup.fromPlain(ctx.content()).members.map((x) => x.value),
|
||||
);
|
||||
const currentIds = new Set<string>(
|
||||
membersRaw.members.map((x: ITeamMember) => x.user._id),
|
||||
membersRaw.members.map((x) => x.user._id),
|
||||
);
|
||||
const removeMember = async (userId: string) => {
|
||||
const removeMembersRaw = await ctx.rc.team.removeMember({
|
|
@ -1,21 +1,8 @@
|
|||
import {
|
||||
HttpStatusCode,
|
||||
IHttp,
|
||||
IModify,
|
||||
IPersistence,
|
||||
IRead,
|
||||
} from "@rocket.chat/apps-engine/definition/accessors";
|
||||
import {
|
||||
IApiEndpointInfo,
|
||||
IApiRequest,
|
||||
IApiResponse,
|
||||
} from "@rocket.chat/apps-engine/definition/api";
|
||||
import crypto = require("crypto");
|
||||
import { HttpStatusCode } from "@rocket.chat/apps-engine/definition/accessors";
|
||||
import { IApiResponse } from "@rocket.chat/apps-engine/definition/api";
|
||||
import { SCIMGroup } from "../scim/Group";
|
||||
import { SCIMListResponse } from "../scim/ListResponse";
|
||||
import { Context } from "./Context";
|
||||
import { RcHttp } from "./RcHttp";
|
||||
import { SCIMGroup } from "./scim/Group";
|
||||
import { SCIMListResponse } from "./scim/ListResponse";
|
||||
import { SCIMUser } from "./scim/User";
|
||||
import { IScimEndpoint, ScimEndpoint } from "./ScimEndpoint";
|
||||
|
||||
export class GroupsEndpoint extends ScimEndpoint implements IScimEndpoint {
|
||||
|
@ -24,7 +11,7 @@ export class GroupsEndpoint extends ScimEndpoint implements IScimEndpoint {
|
|||
public async _get(ctx: Context): Promise<IApiResponse> {
|
||||
const teamsRaw = await ctx.rc.team.listAll();
|
||||
this.handleError(teamsRaw);
|
||||
const groups = teamsRaw.teams.map(async (team: ITeam) => {
|
||||
const groups = teamsRaw.teams.map(async (team) => {
|
||||
const membersRaw = await ctx.rc.team.members(team._id);
|
||||
this.handleError(membersRaw);
|
||||
return SCIMGroup.fromRC(team, membersRaw.members);
|
|
@ -13,12 +13,12 @@ import {
|
|||
IApiResponse,
|
||||
} from "@rocket.chat/apps-engine/definition/api";
|
||||
import { IApp } from "@rocket.chat/apps-engine/definition/IApp";
|
||||
import { ConflictError } from "../errors/ConflictError";
|
||||
import { EmptyRequestError } from "../errors/EmptyRequestError";
|
||||
import { EmptyResponseError } from "../errors/EmptyResponseError";
|
||||
import { JsonParseError } from "../errors/JsonParseError";
|
||||
import { SCIMError, SCIMErrorType } from "../scim/Error";
|
||||
import { Context } from "./Context";
|
||||
import { ConflictError } from "./errors/ConflictError";
|
||||
import { EmptyRequestError } from "./errors/EmptyRequestError";
|
||||
import { EmptyResponseError } from "./errors/EmptyResponseError";
|
||||
import { JsonParseError } from "./errors/JsonParseError";
|
||||
import { SCIMError, SCIMErrorType } from "./scim/Error";
|
||||
|
||||
type ApiEndpointMethod = (
|
||||
request: IApiRequest,
|
|
@ -1,7 +1,7 @@
|
|||
import { HttpStatusCode } from "@rocket.chat/apps-engine/definition/accessors";
|
||||
import { IApiResponse } from "@rocket.chat/apps-engine/definition/api";
|
||||
import { SCIMUser } from "../scim/User";
|
||||
import { Context } from "./Context";
|
||||
import { SCIMUser } from "./scim/User";
|
||||
import { IScimEndpoint, ScimEndpoint } from "./ScimEndpoint";
|
||||
|
||||
export class UserEndpoint extends ScimEndpoint implements IScimEndpoint {
|
||||
|
@ -15,9 +15,21 @@ export class UserEndpoint extends ScimEndpoint implements IScimEndpoint {
|
|||
}
|
||||
|
||||
public async _put(ctx: Context): Promise<IApiResponse> {
|
||||
const o = await ctx.rc.user.update(
|
||||
this.scimToUserUpdate(ctx.id(), SCIMUser.fromPlain(ctx.content())),
|
||||
);
|
||||
const u = SCIMUser.fromPlain(ctx.content());
|
||||
const o = await ctx.rc.user.update({
|
||||
userId: ctx.id(),
|
||||
data: {
|
||||
email: u.getEmail(),
|
||||
name: u.displayName,
|
||||
username: u.userName,
|
||||
active: u.active,
|
||||
verified: true,
|
||||
customFields: {
|
||||
scimExternalId: u.externalId,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
this.handleError(o);
|
||||
const user = SCIMUser.fromRC(o.user);
|
||||
return this.success(user);
|
||||
|
@ -33,20 +45,4 @@ export class UserEndpoint extends ScimEndpoint implements IScimEndpoint {
|
|||
status: HttpStatusCode.NO_CONTENT,
|
||||
});
|
||||
}
|
||||
|
||||
private scimToUserUpdate(userId: string, user: SCIMUser): IUserUpdate {
|
||||
return {
|
||||
userId,
|
||||
data: {
|
||||
email: user.getEmail(),
|
||||
name: user.displayName,
|
||||
username: user.userName,
|
||||
active: user.active,
|
||||
verified: true,
|
||||
customFields: {
|
||||
scimExternalId: user.externalId,
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,9 +1,9 @@
|
|||
import { HttpStatusCode } from "@rocket.chat/apps-engine/definition/accessors";
|
||||
import { IApiResponse } from "@rocket.chat/apps-engine/definition/api";
|
||||
import crypto = require("crypto");
|
||||
import { SCIMListResponse } from "../scim/ListResponse";
|
||||
import { SCIMUser } from "../scim/User";
|
||||
import { Context } from "./Context";
|
||||
import { SCIMListResponse } from "./scim/ListResponse";
|
||||
import { SCIMUser } from "./scim/User";
|
||||
import { IScimEndpoint, ScimEndpoint } from "./ScimEndpoint";
|
||||
|
||||
export class UsersEndpoint extends ScimEndpoint implements IScimEndpoint {
|
||||
|
@ -19,9 +19,20 @@ export class UsersEndpoint extends ScimEndpoint implements IScimEndpoint {
|
|||
}
|
||||
|
||||
public async _post(ctx: Context): Promise<IApiResponse> {
|
||||
const o = await ctx.rc.user.create(
|
||||
this.scimToUserCreate(SCIMUser.fromPlain(ctx.content())),
|
||||
);
|
||||
const u = SCIMUser.fromPlain(ctx.content());
|
||||
const o = await ctx.rc.user.create({
|
||||
email: u.getEmail(),
|
||||
name:
|
||||
u.displayName ||
|
||||
`${u.name.givenName} ${u.name.familyName}` ||
|
||||
u.userName,
|
||||
username: u.userName,
|
||||
password: crypto.randomBytes(64).toString("base64").slice(0, 64),
|
||||
verified: true,
|
||||
customFields: {
|
||||
scimExternalId: u.externalId,
|
||||
},
|
||||
});
|
||||
this.handleError(o);
|
||||
const user = SCIMUser.fromRC(o.user);
|
||||
return this.response({
|
||||
|
@ -29,20 +40,4 @@ export class UsersEndpoint extends ScimEndpoint implements IScimEndpoint {
|
|||
content: user,
|
||||
});
|
||||
}
|
||||
|
||||
private scimToUserCreate(user: SCIMUser): IUserCreate {
|
||||
return {
|
||||
email: user.getEmail(),
|
||||
name:
|
||||
user.displayName ||
|
||||
`${user.name.givenName} ${user.name.familyName}` ||
|
||||
user.userName,
|
||||
username: user.userName,
|
||||
password: crypto.randomBytes(64).toString("base64").slice(0, 64),
|
||||
verified: true,
|
||||
customFields: {
|
||||
scimExternalId: user.externalId,
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
132
src/rc-sdk/RcSdkTeam.ts
Normal file
132
src/rc-sdk/RcSdkTeam.ts
Normal file
|
@ -0,0 +1,132 @@
|
|||
import { RcSdk } from "./RcSdk";
|
||||
|
||||
interface ITeamRemoveMemberBody {
|
||||
teamId: string;
|
||||
userId: string;
|
||||
}
|
||||
|
||||
interface ITeamAddMemberBody {
|
||||
teamId: string;
|
||||
members: Array<{
|
||||
userId: string;
|
||||
roles: Array<string>;
|
||||
}>;
|
||||
}
|
||||
|
||||
interface ITeamDeleteBody {
|
||||
teamId: string;
|
||||
roomsToRemove?: Array<string>;
|
||||
}
|
||||
|
||||
interface ITeamCreateBody {
|
||||
name: string;
|
||||
type: 0 | 1;
|
||||
members?: Array<string>;
|
||||
room?: {
|
||||
readOnly: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
export interface ITeam {
|
||||
_id: string;
|
||||
name: string;
|
||||
active?: boolean;
|
||||
createdAt: string;
|
||||
_updatedAt?: string;
|
||||
}
|
||||
|
||||
export interface ITeamMember {
|
||||
user: {
|
||||
_id: string;
|
||||
name: string;
|
||||
username: string;
|
||||
};
|
||||
createdAt: string;
|
||||
}
|
||||
|
||||
interface ITeamListAllResponse {
|
||||
teams: Array<ITeam>;
|
||||
count: number;
|
||||
offset: number;
|
||||
total: number;
|
||||
success: boolean;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
interface ITeamMembersResponse {
|
||||
members: Array<ITeamMember>;
|
||||
count: number;
|
||||
offset: number;
|
||||
total: number;
|
||||
success: boolean;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
interface ITeamInfoResponse {
|
||||
teamInfo: ITeam;
|
||||
success: boolean;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
interface ITeamDeleteResponse {
|
||||
teamInfo: ITeam;
|
||||
success: boolean;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
interface ITeamCreateResponse {
|
||||
team: ITeam;
|
||||
success: boolean;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
interface ITeamMemberResponse {
|
||||
success: boolean;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export class RcSdkTeam {
|
||||
private sdk: RcSdk;
|
||||
constructor(sdk: RcSdk) {
|
||||
this.sdk = sdk;
|
||||
}
|
||||
|
||||
public async listAll(): Promise<ITeamListAllResponse> {
|
||||
const response = await this.sdk.get(`teams.listAll`);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async members(teamId: string): Promise<ITeamMembersResponse> {
|
||||
const response = await this.sdk.get(`teams.members?teamId=${teamId}`);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async info(teamId: string): Promise<ITeamInfoResponse> {
|
||||
const response = await this.sdk.get(`teams.info?teamId=${teamId}`);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async delete(body: ITeamDeleteBody): Promise<ITeamDeleteResponse> {
|
||||
const response = await this.sdk.post(`teams.delete`, body);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async create(body: ITeamCreateBody): Promise<ITeamCreateResponse> {
|
||||
const response = await this.sdk.post(`teams.create`, body);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async removeMember(
|
||||
body: ITeamRemoveMemberBody,
|
||||
): Promise<ITeamMemberResponse> {
|
||||
const response = await this.sdk.post(`teams.removeMember`, body);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async addMembers(
|
||||
body: ITeamAddMemberBody,
|
||||
): Promise<ITeamMemberResponse> {
|
||||
const response = await this.sdk.post(`teams.addMembers`, body);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
}
|
101
src/rc-sdk/RcSdkUser.ts
Normal file
101
src/rc-sdk/RcSdkUser.ts
Normal file
|
@ -0,0 +1,101 @@
|
|||
import { RcSdk } from "./RcSdk";
|
||||
|
||||
interface IUserCreate {
|
||||
email: string;
|
||||
name: string;
|
||||
password: string;
|
||||
username: string;
|
||||
active?: boolean;
|
||||
roles?: Array<string>;
|
||||
joinDefaultChannels?: boolean;
|
||||
requirePasswordChange?: boolean;
|
||||
sendWelcomeEmail?: boolean;
|
||||
verified?: boolean;
|
||||
customFields?: any;
|
||||
}
|
||||
|
||||
interface IUserUpdate {
|
||||
userId: string;
|
||||
data: {
|
||||
email?: string;
|
||||
name?: string;
|
||||
password?: string;
|
||||
username?: string;
|
||||
active?: boolean;
|
||||
roles?: Array<string>;
|
||||
joinDefaultChannels?: boolean;
|
||||
requirePasswordChange?: boolean;
|
||||
sendWelcomeEmail?: boolean;
|
||||
verified?: boolean;
|
||||
customFields?: any;
|
||||
};
|
||||
}
|
||||
|
||||
interface IUserDelete {
|
||||
userId: string;
|
||||
confirmRelinquish?: boolean;
|
||||
}
|
||||
|
||||
export interface IUser {
|
||||
_id: string;
|
||||
emails: Array<{ address: string; verified: boolean }>;
|
||||
name: string;
|
||||
username: string;
|
||||
active?: boolean;
|
||||
createdAt: string;
|
||||
_updatedAt?: string;
|
||||
}
|
||||
|
||||
interface IUserListResponse {
|
||||
users: Array<IUser>;
|
||||
count: number;
|
||||
offset: number;
|
||||
total: number;
|
||||
success: boolean;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
interface IUserResponse {
|
||||
user: IUser;
|
||||
success: boolean;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
interface IUserDeleteResponse {
|
||||
success: boolean;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export class RcSdkUser {
|
||||
private sdk: RcSdk;
|
||||
constructor(sdk: RcSdk) {
|
||||
this.sdk = sdk;
|
||||
}
|
||||
|
||||
public async list(): Promise<IUserListResponse> {
|
||||
const response = await this.sdk.get(
|
||||
`users.list?query={"type":{"$eq":"user"}}&fields={"createdAt":1}`,
|
||||
);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async info(userId: string): Promise<IUserResponse> {
|
||||
const response = await this.sdk.get(`users.info?userId=${userId}`);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async update(body: IUserUpdate): Promise<IUserResponse> {
|
||||
const response = await this.sdk.post(`users.update`, body);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async delete(body: IUserDelete): Promise<IUserDeleteResponse> {
|
||||
const response = await this.sdk.post(`users.delete`);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
|
||||
public async create(body: IUserCreate): Promise<IUserResponse> {
|
||||
const response = await this.sdk.post(`users.create`, body);
|
||||
return this.sdk.parseResponse(response);
|
||||
}
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
import { ITeam, ITeamMember } from "../rc-sdk/RcSdkTeam";
|
||||
import { ISCIMGroupMember, ISCIMResource } from "./Interfaces";
|
||||
import { SCIMMeta } from "./Meta";
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
import { IUser } from "../rc-sdk/RcSdkUser";
|
||||
import { ISCIMResource, ISCIMUserEmail, ISCIMUserName } from "./Interfaces";
|
||||
import { SCIMMeta } from "./Meta";
|
||||
|
Reference in a new issue