265 lines
9.7 KiB
JavaScript
265 lines
9.7 KiB
JavaScript
var __rest = (this && this.__rest) || function (s, e) {
|
|
var t = {};
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
t[p] = s[p];
|
|
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
t[p[i]] = s[p[i]];
|
|
}
|
|
return t;
|
|
};
|
|
import { _generateLinkResponse, _noResolveJsonResponse, _request, _userResponse, } from './lib/fetch';
|
|
import { resolveFetch } from './lib/helpers';
|
|
import { isAuthError } from './lib/errors';
|
|
export default class GoTrueAdminApi {
|
|
constructor({ url = '', headers = {}, fetch, }) {
|
|
this.url = url;
|
|
this.headers = headers;
|
|
this.fetch = resolveFetch(fetch);
|
|
this.mfa = {
|
|
listFactors: this._listFactors.bind(this),
|
|
deleteFactor: this._deleteFactor.bind(this),
|
|
};
|
|
}
|
|
/**
|
|
* Removes a logged-in session.
|
|
* @param jwt A valid, logged-in JWT.
|
|
* @param scope The logout sope.
|
|
*/
|
|
async signOut(jwt, scope = 'global') {
|
|
try {
|
|
await _request(this.fetch, 'POST', `${this.url}/logout?scope=${scope}`, {
|
|
headers: this.headers,
|
|
jwt,
|
|
noResolveJson: true,
|
|
});
|
|
return { data: null, error: null };
|
|
}
|
|
catch (error) {
|
|
if (isAuthError(error)) {
|
|
return { data: null, error };
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
/**
|
|
* Sends an invite link to an email address.
|
|
* @param email The email address of the user.
|
|
* @param options Additional options to be included when inviting.
|
|
*/
|
|
async inviteUserByEmail(email, options = {}) {
|
|
try {
|
|
return await _request(this.fetch, 'POST', `${this.url}/invite`, {
|
|
body: { email, data: options.data },
|
|
headers: this.headers,
|
|
redirectTo: options.redirectTo,
|
|
xform: _userResponse,
|
|
});
|
|
}
|
|
catch (error) {
|
|
if (isAuthError(error)) {
|
|
return { data: { user: null }, error };
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
/**
|
|
* Generates email links and OTPs to be sent via a custom email provider.
|
|
* @param email The user's email.
|
|
* @param options.password User password. For signup only.
|
|
* @param options.data Optional user metadata. For signup only.
|
|
* @param options.redirectTo The redirect url which should be appended to the generated link
|
|
*/
|
|
async generateLink(params) {
|
|
try {
|
|
const { options } = params, rest = __rest(params, ["options"]);
|
|
const body = Object.assign(Object.assign({}, rest), options);
|
|
if ('newEmail' in rest) {
|
|
// replace newEmail with new_email in request body
|
|
body.new_email = rest === null || rest === void 0 ? void 0 : rest.newEmail;
|
|
delete body['newEmail'];
|
|
}
|
|
return await _request(this.fetch, 'POST', `${this.url}/admin/generate_link`, {
|
|
body: body,
|
|
headers: this.headers,
|
|
xform: _generateLinkResponse,
|
|
redirectTo: options === null || options === void 0 ? void 0 : options.redirectTo,
|
|
});
|
|
}
|
|
catch (error) {
|
|
if (isAuthError(error)) {
|
|
return {
|
|
data: {
|
|
properties: null,
|
|
user: null,
|
|
},
|
|
error,
|
|
};
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
// User Admin API
|
|
/**
|
|
* Creates a new user.
|
|
* This function should only be called on a server. Never expose your `service_role` key in the browser.
|
|
*/
|
|
async createUser(attributes) {
|
|
try {
|
|
return await _request(this.fetch, 'POST', `${this.url}/admin/users`, {
|
|
body: attributes,
|
|
headers: this.headers,
|
|
xform: _userResponse,
|
|
});
|
|
}
|
|
catch (error) {
|
|
if (isAuthError(error)) {
|
|
return { data: { user: null }, error };
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
/**
|
|
* Get a list of users.
|
|
*
|
|
* This function should only be called on a server. Never expose your `service_role` key in the browser.
|
|
* @param params An object which supports `page` and `perPage` as numbers, to alter the paginated results.
|
|
*/
|
|
async listUsers(params) {
|
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
try {
|
|
const pagination = { nextPage: null, lastPage: 0, total: 0 };
|
|
const response = await _request(this.fetch, 'GET', `${this.url}/admin/users`, {
|
|
headers: this.headers,
|
|
noResolveJson: true,
|
|
query: {
|
|
page: (_b = (_a = params === null || params === void 0 ? void 0 : params.page) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '',
|
|
per_page: (_d = (_c = params === null || params === void 0 ? void 0 : params.perPage) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : '',
|
|
},
|
|
xform: _noResolveJsonResponse,
|
|
});
|
|
if (response.error)
|
|
throw response.error;
|
|
const users = await response.json();
|
|
const total = (_e = response.headers.get('x-total-count')) !== null && _e !== void 0 ? _e : 0;
|
|
const links = (_g = (_f = response.headers.get('link')) === null || _f === void 0 ? void 0 : _f.split(',')) !== null && _g !== void 0 ? _g : [];
|
|
if (links.length > 0) {
|
|
links.forEach((link) => {
|
|
const page = parseInt(link.split(';')[0].split('=')[1].substring(0, 1));
|
|
const rel = JSON.parse(link.split(';')[1].split('=')[1]);
|
|
pagination[`${rel}Page`] = page;
|
|
});
|
|
pagination.total = parseInt(total);
|
|
}
|
|
return { data: Object.assign(Object.assign({}, users), pagination), error: null };
|
|
}
|
|
catch (error) {
|
|
if (isAuthError(error)) {
|
|
return { data: { users: [] }, error };
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
/**
|
|
* Get user by id.
|
|
*
|
|
* @param uid The user's unique identifier
|
|
*
|
|
* This function should only be called on a server. Never expose your `service_role` key in the browser.
|
|
*/
|
|
async getUserById(uid) {
|
|
try {
|
|
return await _request(this.fetch, 'GET', `${this.url}/admin/users/${uid}`, {
|
|
headers: this.headers,
|
|
xform: _userResponse,
|
|
});
|
|
}
|
|
catch (error) {
|
|
if (isAuthError(error)) {
|
|
return { data: { user: null }, error };
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
/**
|
|
* Updates the user data.
|
|
*
|
|
* @param attributes The data you want to update.
|
|
*
|
|
* This function should only be called on a server. Never expose your `service_role` key in the browser.
|
|
*/
|
|
async updateUserById(uid, attributes) {
|
|
try {
|
|
return await _request(this.fetch, 'PUT', `${this.url}/admin/users/${uid}`, {
|
|
body: attributes,
|
|
headers: this.headers,
|
|
xform: _userResponse,
|
|
});
|
|
}
|
|
catch (error) {
|
|
if (isAuthError(error)) {
|
|
return { data: { user: null }, error };
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
/**
|
|
* Delete a user. Requires a `service_role` key.
|
|
*
|
|
* @param id The user id you want to remove.
|
|
* @param shouldSoftDelete If true, then the user will be soft-deleted from the auth schema. Soft deletion allows user identification from the hashed user ID but is not reversible.
|
|
* Defaults to false for backward compatibility.
|
|
*
|
|
* This function should only be called on a server. Never expose your `service_role` key in the browser.
|
|
*/
|
|
async deleteUser(id, shouldSoftDelete = false) {
|
|
try {
|
|
return await _request(this.fetch, 'DELETE', `${this.url}/admin/users/${id}`, {
|
|
headers: this.headers,
|
|
body: {
|
|
should_soft_delete: shouldSoftDelete,
|
|
},
|
|
xform: _userResponse,
|
|
});
|
|
}
|
|
catch (error) {
|
|
if (isAuthError(error)) {
|
|
return { data: { user: null }, error };
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
async _listFactors(params) {
|
|
try {
|
|
const { data, error } = await _request(this.fetch, 'GET', `${this.url}/admin/users/${params.userId}/factors`, {
|
|
headers: this.headers,
|
|
xform: (factors) => {
|
|
return { data: { factors }, error: null };
|
|
},
|
|
});
|
|
return { data, error };
|
|
}
|
|
catch (error) {
|
|
if (isAuthError(error)) {
|
|
return { data: null, error };
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
async _deleteFactor(params) {
|
|
try {
|
|
const data = await _request(this.fetch, 'DELETE', `${this.url}/admin/users/${params.userId}/factors/${params.id}`, {
|
|
headers: this.headers,
|
|
});
|
|
return { data, error: null };
|
|
}
|
|
catch (error) {
|
|
if (isAuthError(error)) {
|
|
return { data: null, error };
|
|
}
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
//# sourceMappingURL=GoTrueAdminApi.js.map
|