@pawabase/client 0.0.0-stage → 0.1.3
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/README.md +313 -2
- package/dist/cjs/admin.d.ts +187 -0
- package/dist/cjs/admin.d.ts.map +1 -0
- package/dist/cjs/admin.js +235 -0
- package/dist/cjs/admin.js.map +1 -0
- package/dist/cjs/auth.d.ts +448 -0
- package/dist/cjs/auth.d.ts.map +1 -0
- package/dist/cjs/auth.js +1016 -0
- package/dist/cjs/auth.js.map +1 -0
- package/dist/cjs/client.d.ts +103 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +144 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/data.d.ts +220 -0
- package/dist/cjs/data.d.ts.map +1 -0
- package/dist/cjs/data.js +490 -0
- package/dist/cjs/data.js.map +1 -0
- package/dist/cjs/errors.d.ts +167 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +316 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/files.d.ts +80 -0
- package/dist/cjs/files.d.ts.map +1 -0
- package/dist/cjs/files.js +167 -0
- package/dist/cjs/files.js.map +1 -0
- package/dist/cjs/functions.d.ts +66 -0
- package/dist/cjs/functions.d.ts.map +1 -0
- package/dist/cjs/functions.js +109 -0
- package/dist/cjs/functions.js.map +1 -0
- package/dist/cjs/http.d.ts +101 -0
- package/dist/cjs/http.d.ts.map +1 -0
- package/dist/cjs/http.js +249 -0
- package/dist/cjs/http.js.map +1 -0
- package/dist/cjs/index.d.ts +22 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +45 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/manage/access.d.ts +136 -0
- package/dist/cjs/manage/access.d.ts.map +1 -0
- package/dist/cjs/manage/access.js +162 -0
- package/dist/cjs/manage/access.js.map +1 -0
- package/dist/cjs/manage/automation.d.ts +106 -0
- package/dist/cjs/manage/automation.d.ts.map +1 -0
- package/dist/cjs/manage/automation.js +144 -0
- package/dist/cjs/manage/automation.js.map +1 -0
- package/dist/cjs/manage/base.d.ts +52 -0
- package/dist/cjs/manage/base.d.ts.map +1 -0
- package/dist/cjs/manage/base.js +69 -0
- package/dist/cjs/manage/base.js.map +1 -0
- package/dist/cjs/manage/data.d.ts +100 -0
- package/dist/cjs/manage/data.d.ts.map +1 -0
- package/dist/cjs/manage/data.js +141 -0
- package/dist/cjs/manage/data.js.map +1 -0
- package/dist/cjs/manage/files.d.ts +45 -0
- package/dist/cjs/manage/files.d.ts.map +1 -0
- package/dist/cjs/manage/files.js +73 -0
- package/dist/cjs/manage/files.js.map +1 -0
- package/dist/cjs/manage/functions.d.ts +48 -0
- package/dist/cjs/manage/functions.d.ts.map +1 -0
- package/dist/cjs/manage/functions.js +61 -0
- package/dist/cjs/manage/functions.js.map +1 -0
- package/dist/cjs/manage/index.d.ts +76 -0
- package/dist/cjs/manage/index.d.ts.map +1 -0
- package/dist/cjs/manage/index.js +134 -0
- package/dist/cjs/manage/index.js.map +1 -0
- package/dist/cjs/manage/lifecycle.d.ts +128 -0
- package/dist/cjs/manage/lifecycle.d.ts.map +1 -0
- package/dist/cjs/manage/lifecycle.js +167 -0
- package/dist/cjs/manage/lifecycle.js.map +1 -0
- package/dist/cjs/manage/mail.d.ts +16 -0
- package/dist/cjs/manage/mail.d.ts.map +1 -0
- package/dist/cjs/manage/mail.js +24 -0
- package/dist/cjs/manage/mail.js.map +1 -0
- package/dist/cjs/manage/observe.d.ts +149 -0
- package/dist/cjs/manage/observe.d.ts.map +1 -0
- package/dist/cjs/manage/observe.js +168 -0
- package/dist/cjs/manage/observe.js.map +1 -0
- package/dist/cjs/manage/realtime.d.ts +52 -0
- package/dist/cjs/manage/realtime.d.ts.map +1 -0
- package/dist/cjs/manage/realtime.js +71 -0
- package/dist/cjs/manage/realtime.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/realtime.d.ts +207 -0
- package/dist/cjs/realtime.d.ts.map +1 -0
- package/dist/cjs/realtime.js +704 -0
- package/dist/cjs/realtime.js.map +1 -0
- package/dist/cjs/session-store.d.ts +16 -0
- package/dist/cjs/session-store.d.ts.map +1 -0
- package/dist/cjs/session-store.js +37 -0
- package/dist/cjs/session-store.js.map +1 -0
- package/dist/cjs/typegen.d.ts +26 -0
- package/dist/cjs/typegen.d.ts.map +1 -0
- package/dist/cjs/typegen.js +167 -0
- package/dist/cjs/typegen.js.map +1 -0
- package/dist/cjs/types.d.ts +178 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +4 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/util.d.ts +27 -0
- package/dist/cjs/util.d.ts.map +1 -0
- package/dist/cjs/util.js +115 -0
- package/dist/cjs/util.js.map +1 -0
- package/dist/cjs/version.d.ts +2 -0
- package/dist/cjs/version.d.ts.map +1 -0
- package/dist/cjs/version.js +5 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/esm/admin.d.ts +187 -0
- package/dist/esm/admin.d.ts.map +1 -0
- package/dist/esm/admin.js +222 -0
- package/dist/esm/admin.js.map +1 -0
- package/dist/esm/auth.d.ts +448 -0
- package/dist/esm/auth.d.ts.map +1 -0
- package/dist/esm/auth.js +1012 -0
- package/dist/esm/auth.js.map +1 -0
- package/dist/esm/cli/gen-types.d.ts +2 -0
- package/dist/esm/cli/gen-types.d.ts.map +1 -0
- package/dist/esm/cli/gen-types.js +100 -0
- package/dist/esm/cli/gen-types.js.map +1 -0
- package/dist/esm/client.d.ts +103 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +139 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/data.d.ts +220 -0
- package/dist/esm/data.d.ts.map +1 -0
- package/dist/esm/data.js +485 -0
- package/dist/esm/data.js.map +1 -0
- package/dist/esm/errors.d.ts +167 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +293 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/files.d.ts +80 -0
- package/dist/esm/files.d.ts.map +1 -0
- package/dist/esm/files.js +162 -0
- package/dist/esm/files.js.map +1 -0
- package/dist/esm/functions.d.ts +66 -0
- package/dist/esm/functions.d.ts.map +1 -0
- package/dist/esm/functions.js +103 -0
- package/dist/esm/functions.js.map +1 -0
- package/dist/esm/http.d.ts +101 -0
- package/dist/esm/http.d.ts.map +1 -0
- package/dist/esm/http.js +245 -0
- package/dist/esm/http.js.map +1 -0
- package/dist/esm/index.d.ts +22 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/manage/access.d.ts +136 -0
- package/dist/esm/manage/access.d.ts.map +1 -0
- package/dist/esm/manage/access.js +155 -0
- package/dist/esm/manage/access.js.map +1 -0
- package/dist/esm/manage/automation.d.ts +106 -0
- package/dist/esm/manage/automation.d.ts.map +1 -0
- package/dist/esm/manage/automation.js +134 -0
- package/dist/esm/manage/automation.js.map +1 -0
- package/dist/esm/manage/base.d.ts +52 -0
- package/dist/esm/manage/base.d.ts.map +1 -0
- package/dist/esm/manage/base.js +63 -0
- package/dist/esm/manage/base.js.map +1 -0
- package/dist/esm/manage/data.d.ts +100 -0
- package/dist/esm/manage/data.d.ts.map +1 -0
- package/dist/esm/manage/data.js +130 -0
- package/dist/esm/manage/data.js.map +1 -0
- package/dist/esm/manage/files.d.ts +45 -0
- package/dist/esm/manage/files.d.ts.map +1 -0
- package/dist/esm/manage/files.js +68 -0
- package/dist/esm/manage/files.js.map +1 -0
- package/dist/esm/manage/functions.d.ts +48 -0
- package/dist/esm/manage/functions.d.ts.map +1 -0
- package/dist/esm/manage/functions.js +57 -0
- package/dist/esm/manage/functions.js.map +1 -0
- package/dist/esm/manage/index.d.ts +76 -0
- package/dist/esm/manage/index.d.ts.map +1 -0
- package/dist/esm/manage/index.js +115 -0
- package/dist/esm/manage/index.js.map +1 -0
- package/dist/esm/manage/lifecycle.d.ts +128 -0
- package/dist/esm/manage/lifecycle.d.ts.map +1 -0
- package/dist/esm/manage/lifecycle.js +161 -0
- package/dist/esm/manage/lifecycle.js.map +1 -0
- package/dist/esm/manage/mail.d.ts +16 -0
- package/dist/esm/manage/mail.d.ts.map +1 -0
- package/dist/esm/manage/mail.js +19 -0
- package/dist/esm/manage/mail.js.map +1 -0
- package/dist/esm/manage/observe.d.ts +149 -0
- package/dist/esm/manage/observe.d.ts.map +1 -0
- package/dist/esm/manage/observe.js +161 -0
- package/dist/esm/manage/observe.js.map +1 -0
- package/dist/esm/manage/realtime.d.ts +52 -0
- package/dist/esm/manage/realtime.d.ts.map +1 -0
- package/dist/esm/manage/realtime.js +66 -0
- package/dist/esm/manage/realtime.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/realtime.d.ts +207 -0
- package/dist/esm/realtime.d.ts.map +1 -0
- package/dist/esm/realtime.js +699 -0
- package/dist/esm/realtime.js.map +1 -0
- package/dist/esm/session-store.d.ts +16 -0
- package/dist/esm/session-store.d.ts.map +1 -0
- package/dist/esm/session-store.js +32 -0
- package/dist/esm/session-store.js.map +1 -0
- package/dist/esm/typegen.d.ts +26 -0
- package/dist/esm/typegen.d.ts.map +1 -0
- package/dist/esm/typegen.js +163 -0
- package/dist/esm/typegen.js.map +1 -0
- package/dist/esm/types.d.ts +178 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +3 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/util.d.ts +27 -0
- package/dist/esm/util.d.ts.map +1 -0
- package/dist/esm/util.js +102 -0
- package/dist/esm/util.js.map +1 -0
- package/dist/esm/version.d.ts +2 -0
- package/dist/esm/version.d.ts.map +1 -0
- package/dist/esm/version.js +2 -0
- package/dist/esm/version.js.map +1 -0
- package/package.json +92 -4
- package/src/admin.ts +311 -0
- package/src/auth.ts +1180 -0
- package/src/cli/gen-types.ts +105 -0
- package/src/client.ts +189 -0
- package/src/data.ts +576 -0
- package/src/errors.ts +330 -0
- package/src/files.ts +208 -0
- package/src/functions.ts +131 -0
- package/src/http.ts +354 -0
- package/src/index.ts +56 -0
- package/src/manage/access.ts +206 -0
- package/src/manage/automation.ts +162 -0
- package/src/manage/base.ts +83 -0
- package/src/manage/data.ts +159 -0
- package/src/manage/files.ts +79 -0
- package/src/manage/functions.ts +69 -0
- package/src/manage/index.ts +132 -0
- package/src/manage/lifecycle.ts +208 -0
- package/src/manage/mail.ts +22 -0
- package/src/manage/observe.ts +226 -0
- package/src/manage/realtime.ts +95 -0
- package/src/realtime.ts +765 -0
- package/src/session-store.ts +36 -0
- package/src/typegen.ts +192 -0
- package/src/types.ts +195 -0
- package/src/util.ts +114 -0
- package/src/version.ts +1 -0
package/dist/cjs/util.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isRecord = isRecord;
|
|
4
|
+
exports.sleep = sleep;
|
|
5
|
+
exports.backoff = backoff;
|
|
6
|
+
exports.anySignal = anySignal;
|
|
7
|
+
exports.encodePath = encodePath;
|
|
8
|
+
exports.queryString = queryString;
|
|
9
|
+
exports.trimSlash = trimSlash;
|
|
10
|
+
exports.randomId = randomId;
|
|
11
|
+
exports.nowSeconds = nowSeconds;
|
|
12
|
+
exports.decodeJwt = decodeJwt;
|
|
13
|
+
exports.isSecretKey = isSecretKey;
|
|
14
|
+
const errors_js_1 = require("./errors.js");
|
|
15
|
+
function isRecord(value) {
|
|
16
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
/** Sleep for `ms`, rejecting early with {@link AbortError} when `signal` fires. */
|
|
19
|
+
function sleep(ms, signal) {
|
|
20
|
+
return new Promise((resolve, reject) => {
|
|
21
|
+
if (signal?.aborted)
|
|
22
|
+
return reject(new errors_js_1.AbortError(undefined, { cause: signal.reason }));
|
|
23
|
+
const timer = setTimeout(() => {
|
|
24
|
+
signal?.removeEventListener("abort", onAbort);
|
|
25
|
+
resolve();
|
|
26
|
+
}, ms);
|
|
27
|
+
const onAbort = () => {
|
|
28
|
+
clearTimeout(timer);
|
|
29
|
+
reject(new errors_js_1.AbortError(undefined, { cause: signal?.reason }));
|
|
30
|
+
};
|
|
31
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/** Exponential backoff with full jitter: a random delay in `[0, min(max, base * factor^attempt)]`. */
|
|
35
|
+
function backoff(attempt, options, random = Math.random) {
|
|
36
|
+
const ceiling = Math.min(options.maxDelayMs, options.baseDelayMs * (options.factor ?? 2) ** attempt);
|
|
37
|
+
return Math.floor(random() * ceiling);
|
|
38
|
+
}
|
|
39
|
+
/** One signal that fires when any of `signals` fires. Uses the platform's `AbortSignal.any` when present. */
|
|
40
|
+
function anySignal(signals) {
|
|
41
|
+
const real = signals.filter((s) => !!s);
|
|
42
|
+
if (real.length === 0)
|
|
43
|
+
return undefined;
|
|
44
|
+
if (real.length === 1)
|
|
45
|
+
return real[0];
|
|
46
|
+
const native = AbortSignal.any;
|
|
47
|
+
if (native)
|
|
48
|
+
return native(real);
|
|
49
|
+
const controller = new AbortController();
|
|
50
|
+
for (const signal of real) {
|
|
51
|
+
if (signal.aborted) {
|
|
52
|
+
controller.abort(signal.reason);
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
signal.addEventListener("abort", () => controller.abort(signal.reason), { once: true });
|
|
56
|
+
}
|
|
57
|
+
return controller.signal;
|
|
58
|
+
}
|
|
59
|
+
/** `a/b c/d` to `a/b%20c/d`: encode each path segment, keep the slashes. */
|
|
60
|
+
function encodePath(path) {
|
|
61
|
+
return path
|
|
62
|
+
.split("/")
|
|
63
|
+
.map((segment) => encodeURIComponent(segment))
|
|
64
|
+
.join("/");
|
|
65
|
+
}
|
|
66
|
+
/** A query string from a flat record. Drops `undefined`/`null`; arrays repeat the key. */
|
|
67
|
+
function queryString(params) {
|
|
68
|
+
if (!params)
|
|
69
|
+
return "";
|
|
70
|
+
const search = new URLSearchParams();
|
|
71
|
+
for (const [key, value] of Object.entries(params)) {
|
|
72
|
+
const items = Array.isArray(value) ? value : [value];
|
|
73
|
+
for (const item of items) {
|
|
74
|
+
if (item === undefined || item === null)
|
|
75
|
+
continue;
|
|
76
|
+
search.append(key, item instanceof Date ? item.toISOString() : String(item));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const text = search.toString();
|
|
80
|
+
return text ? `?${text}` : "";
|
|
81
|
+
}
|
|
82
|
+
function trimSlash(url) {
|
|
83
|
+
return url.replace(/\/+$/, "");
|
|
84
|
+
}
|
|
85
|
+
function randomId() {
|
|
86
|
+
const c = globalThis.crypto;
|
|
87
|
+
if (c?.randomUUID)
|
|
88
|
+
return c.randomUUID();
|
|
89
|
+
return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
90
|
+
}
|
|
91
|
+
function nowSeconds() {
|
|
92
|
+
return Math.floor(Date.now() / 1000);
|
|
93
|
+
}
|
|
94
|
+
/** Decode a JWT payload without verifying it (the server verifies). Returns `null` for malformed tokens. */
|
|
95
|
+
function decodeJwt(token) {
|
|
96
|
+
const part = token.split(".")[1];
|
|
97
|
+
if (!part)
|
|
98
|
+
return null;
|
|
99
|
+
try {
|
|
100
|
+
const base64 = part.replace(/-/g, "+").replace(/_/g, "/").padEnd(Math.ceil(part.length / 4) * 4, "=");
|
|
101
|
+
const text = typeof atob === "function"
|
|
102
|
+
? decodeURIComponent(Array.from(atob(base64), (ch) => "%" + ch.charCodeAt(0).toString(16).padStart(2, "0")).join(""))
|
|
103
|
+
: globalThis.Buffer.from(base64, "base64").toString("utf8");
|
|
104
|
+
const value = JSON.parse(text);
|
|
105
|
+
return isRecord(value) ? value : null;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** Whether a key is a secret key (`pb_sk_…`, or `sk_…` in older docs). */
|
|
112
|
+
function isSecretKey(apiKey) {
|
|
113
|
+
return /^(pb_)?sk_/.test(apiKey);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Administer the environment's users, organizations and roles, with the environment's secret key (`pb_sk_…`).
|
|
3
|
+
*
|
|
4
|
+
* These are the people who sign in to *your* application, not the project's own team. Every call is scoped to one environment;
|
|
5
|
+
* a user of one environment is never visible in another.
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { createClient } from "@pawabase/client";
|
|
9
|
+
* import { admin } from "@pawabase/client/admin";
|
|
10
|
+
*
|
|
11
|
+
* const a = admin(createClient({ url, apiKey: "pb_sk_…", environment: "production" }));
|
|
12
|
+
* await a.users.create({ email: "ada@example.com", password: "…", roles: ["editor"] });
|
|
13
|
+
* await a.users.update(userId, { disabled: true });
|
|
14
|
+
* await a.orgs.addMember("acme", { email: "ada@example.com", role: "admin" });
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import type { PawabaseClient } from "./client.js";
|
|
18
|
+
import type { HttpClient } from "./http.js";
|
|
19
|
+
import { Service, type Api, type Body } from "./manage/base.js";
|
|
20
|
+
declare class AdminService extends Service {
|
|
21
|
+
protected path(suffix?: string): string;
|
|
22
|
+
}
|
|
23
|
+
export interface NewUser {
|
|
24
|
+
email: string;
|
|
25
|
+
password?: string;
|
|
26
|
+
username?: string;
|
|
27
|
+
name?: string;
|
|
28
|
+
/** Default `true`: an operator vouches for the address. */
|
|
29
|
+
emailVerified?: boolean;
|
|
30
|
+
/** Visible to the user and editable by them. */
|
|
31
|
+
userMetadata?: Body;
|
|
32
|
+
/** Visible to your server only. */
|
|
33
|
+
appMetadata?: Body;
|
|
34
|
+
roles?: string[];
|
|
35
|
+
}
|
|
36
|
+
export interface UserChanges {
|
|
37
|
+
name?: string;
|
|
38
|
+
emailVerified?: boolean;
|
|
39
|
+
/** Blocks sign-in and ends the user's sessions. */
|
|
40
|
+
disabled?: boolean;
|
|
41
|
+
password?: string;
|
|
42
|
+
userMetadata?: Body;
|
|
43
|
+
appMetadata?: Body;
|
|
44
|
+
/** Replaces the user's roles. */
|
|
45
|
+
roles?: string[];
|
|
46
|
+
/** Clears a lockout after failed sign-ins. */
|
|
47
|
+
unlock?: boolean;
|
|
48
|
+
}
|
|
49
|
+
export declare class Users extends AdminService {
|
|
50
|
+
/** `search` matches email, username and name. `status`: `disabled`, `unverified`, `locked`, `mfa`, `no_mfa`. */
|
|
51
|
+
search(options?: {
|
|
52
|
+
search?: string;
|
|
53
|
+
status?: string;
|
|
54
|
+
limit?: number;
|
|
55
|
+
offset?: number;
|
|
56
|
+
}): Promise<Api>;
|
|
57
|
+
getUser(userId: string): Promise<Api>;
|
|
58
|
+
/** Create an account without the sign-up restrictions (allow-lists; the password policy still applies). */
|
|
59
|
+
create(user: NewUser): Promise<Api>;
|
|
60
|
+
update(userId: string, changes: UserChanges): Promise<Api>;
|
|
61
|
+
deleteUser(userId: string): Promise<Api>;
|
|
62
|
+
/** The user's recent sign-ins and security events. */
|
|
63
|
+
history(userId: string): Promise<Api>;
|
|
64
|
+
/** Remove the user's second factors, so they can sign in with a password alone and enrol again. */
|
|
65
|
+
resetMfa(userId: string): Promise<Api>;
|
|
66
|
+
/** Give the user permissions directly, beyond their roles' (`posts:write`, `billing:*`). */
|
|
67
|
+
grant(userId: string, permissions: string[]): Promise<Api>;
|
|
68
|
+
revoke(userId: string, permissions: string[]): Promise<Api>;
|
|
69
|
+
/** Sign the user out everywhere. */
|
|
70
|
+
revokeSessions(userId: string): Promise<Api>;
|
|
71
|
+
revokeSession(userId: string, sessionId: string): Promise<Api>;
|
|
72
|
+
devices(userId: string): Promise<Api>;
|
|
73
|
+
forgetDevice(userId: string, deviceId: string): Promise<Api>;
|
|
74
|
+
/** The user's own API keys (never the secrets). */
|
|
75
|
+
apiKeys(userId: string): Promise<Api>;
|
|
76
|
+
}
|
|
77
|
+
export declare class Roles extends AdminService {
|
|
78
|
+
/** Roles with their permissions. */
|
|
79
|
+
list(): Promise<Api>;
|
|
80
|
+
/** Create or replace a role. Names are lowercase (`editor`, `org:billing`); permissions are `resource:action` patterns with `*` wildcards. */
|
|
81
|
+
define(name: string, permissions: string[], options?: {
|
|
82
|
+
description?: string;
|
|
83
|
+
}): Promise<Api>;
|
|
84
|
+
remove(name: string): Promise<Api>;
|
|
85
|
+
}
|
|
86
|
+
/** Organizations (tenants) and their members. A member's role is `owner`, `admin` or `member`. */
|
|
87
|
+
export declare class Orgs extends AdminService {
|
|
88
|
+
list(): Promise<Api>;
|
|
89
|
+
getOrg(slug: string): Promise<Api>;
|
|
90
|
+
create(slug: string, name: string, options?: {
|
|
91
|
+
ownerEmail?: string;
|
|
92
|
+
metadata?: Body;
|
|
93
|
+
}): Promise<Api>;
|
|
94
|
+
update(slug: string, changes: {
|
|
95
|
+
name?: string;
|
|
96
|
+
metadata?: Body;
|
|
97
|
+
}): Promise<Api>;
|
|
98
|
+
remove(slug: string): Promise<Api>;
|
|
99
|
+
/** Add an existing user straight in. */
|
|
100
|
+
addMember(slug: string, member: {
|
|
101
|
+
email: string;
|
|
102
|
+
role?: string;
|
|
103
|
+
}): Promise<Api>;
|
|
104
|
+
setMemberRole(slug: string, userId: string, role: string): Promise<Api>;
|
|
105
|
+
removeMember(slug: string, userId: string): Promise<Api>;
|
|
106
|
+
/** Mail an invitation; `redirectTo` must be one of the environment's allowed redirect URLs. */
|
|
107
|
+
invite(slug: string, invitation: {
|
|
108
|
+
email: string;
|
|
109
|
+
role?: string;
|
|
110
|
+
redirectTo?: string;
|
|
111
|
+
}): Promise<Api>;
|
|
112
|
+
}
|
|
113
|
+
export declare class Invitations extends AdminService {
|
|
114
|
+
/** Pending and past invitations across organizations. */
|
|
115
|
+
list(): Promise<Api>;
|
|
116
|
+
resend(invitationId: string, options?: {
|
|
117
|
+
redirectTo?: string;
|
|
118
|
+
}): Promise<Api>;
|
|
119
|
+
revoke(invitationId: string): Promise<Api>;
|
|
120
|
+
}
|
|
121
|
+
export declare class Sessions extends AdminService {
|
|
122
|
+
/** Active sessions across users. */
|
|
123
|
+
list(options?: {
|
|
124
|
+
limit?: number;
|
|
125
|
+
}): Promise<Api>;
|
|
126
|
+
/** End one session (all its refresh tokens). */
|
|
127
|
+
revoke(family: string): Promise<Api>;
|
|
128
|
+
}
|
|
129
|
+
/** API keys users made for themselves. */
|
|
130
|
+
export declare class ApiKeys extends AdminService {
|
|
131
|
+
list(options?: {
|
|
132
|
+
limit?: number;
|
|
133
|
+
}): Promise<Api>;
|
|
134
|
+
revoke(keyId: string): Promise<Api>;
|
|
135
|
+
}
|
|
136
|
+
export declare class Devices extends AdminService {
|
|
137
|
+
/** Recent devices people signed in from. */
|
|
138
|
+
list(options?: {
|
|
139
|
+
limit?: number;
|
|
140
|
+
}): Promise<Api>;
|
|
141
|
+
}
|
|
142
|
+
/** Events, statistics, identity backup and the hosted pages. */
|
|
143
|
+
export declare class Insight extends AdminService {
|
|
144
|
+
/** Authentication events (sign-ins, sign-ups, resets, MFA…). `failed` for failures only. */
|
|
145
|
+
events(options?: {
|
|
146
|
+
kind?: string;
|
|
147
|
+
failed?: boolean;
|
|
148
|
+
limit?: number;
|
|
149
|
+
}): Promise<Api>;
|
|
150
|
+
/** Counts of users, sign-ins, MFA use and failures. */
|
|
151
|
+
stats(): Promise<Api>;
|
|
152
|
+
/** Every identity (users, organizations, roles, factors) as a document. */
|
|
153
|
+
backup(): Promise<Api>;
|
|
154
|
+
/** Apply the `identities` of a backup. `dryRun` reports what would change. */
|
|
155
|
+
restore(identities: Body, options?: {
|
|
156
|
+
replace?: boolean;
|
|
157
|
+
dryRun?: boolean;
|
|
158
|
+
}): Promise<Api>;
|
|
159
|
+
/** The HTML a hosted sign-in page is served as for the branding being edited (the saved branding when omitted). */
|
|
160
|
+
/** The claims a token profile would put in a token for this user (and organization), without issuing one. */
|
|
161
|
+
previewTokenProfile(profile: Body, userId: string, options?: {
|
|
162
|
+
org?: string;
|
|
163
|
+
}): Promise<Api>;
|
|
164
|
+
hostedSource(page: string, options?: {
|
|
165
|
+
branding?: Body;
|
|
166
|
+
form?: Body;
|
|
167
|
+
}): Promise<Api>;
|
|
168
|
+
}
|
|
169
|
+
export declare class Admin {
|
|
170
|
+
private readonly http;
|
|
171
|
+
readonly environment: string;
|
|
172
|
+
readonly users: Users;
|
|
173
|
+
readonly roles: Roles;
|
|
174
|
+
readonly orgs: Orgs;
|
|
175
|
+
readonly invitations: Invitations;
|
|
176
|
+
readonly sessions: Sessions;
|
|
177
|
+
readonly apiKeys: ApiKeys;
|
|
178
|
+
readonly devices: Devices;
|
|
179
|
+
readonly insight: Insight;
|
|
180
|
+
constructor(http: HttpClient, environment: string);
|
|
181
|
+
/** The same services for another environment the key may manage. */
|
|
182
|
+
withEnvironment(name: string): Admin;
|
|
183
|
+
}
|
|
184
|
+
/** User administration for the client's environment (or `environment`). Needs a secret key. */
|
|
185
|
+
export declare function admin(client: PawabaseClient<any>, environment?: string): Admin;
|
|
186
|
+
export {};
|
|
187
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/admin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { ConfigError } from "./errors.js";
|
|
2
|
+
import { Service, seg } from "./manage/base.js";
|
|
3
|
+
import { isSecretKey } from "./util.js";
|
|
4
|
+
class AdminService extends Service {
|
|
5
|
+
path(suffix = "") {
|
|
6
|
+
return `/platform/v1/envs/${encodeURIComponent(this.environment)}/auth${suffix}`;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class Users extends AdminService {
|
|
10
|
+
/** `search` matches email, username and name. `status`: `disabled`, `unverified`, `locked`, `mfa`, `no_mfa`. */
|
|
11
|
+
search(options = {}) {
|
|
12
|
+
return this.get("/users", { limit: 50, offset: 0, ...options });
|
|
13
|
+
}
|
|
14
|
+
getUser(userId) {
|
|
15
|
+
return this.get(seg("users", userId));
|
|
16
|
+
}
|
|
17
|
+
/** Create an account without the sign-up restrictions (allow-lists; the password policy still applies). */
|
|
18
|
+
create(user) {
|
|
19
|
+
return this.post("/users", {
|
|
20
|
+
email: user.email,
|
|
21
|
+
password: user.password,
|
|
22
|
+
username: user.username,
|
|
23
|
+
name: user.name ?? "",
|
|
24
|
+
email_verified: user.emailVerified ?? true,
|
|
25
|
+
user_metadata: user.userMetadata ?? {},
|
|
26
|
+
app_metadata: user.appMetadata ?? {},
|
|
27
|
+
roles: user.roles ?? [],
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
update(userId, changes) {
|
|
31
|
+
return this.patch(seg("users", userId), {
|
|
32
|
+
name: changes.name,
|
|
33
|
+
email_verified: changes.emailVerified,
|
|
34
|
+
disabled: changes.disabled,
|
|
35
|
+
password: changes.password,
|
|
36
|
+
user_metadata: changes.userMetadata,
|
|
37
|
+
app_metadata: changes.appMetadata,
|
|
38
|
+
roles: changes.roles,
|
|
39
|
+
unlock: changes.unlock,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
deleteUser(userId) {
|
|
43
|
+
return this.del(seg("users", userId));
|
|
44
|
+
}
|
|
45
|
+
/** The user's recent sign-ins and security events. */
|
|
46
|
+
history(userId) {
|
|
47
|
+
return this.get(seg("users", userId, "history"));
|
|
48
|
+
}
|
|
49
|
+
/** Remove the user's second factors, so they can sign in with a password alone and enrol again. */
|
|
50
|
+
resetMfa(userId) {
|
|
51
|
+
return this.post(seg("users", userId, "mfa", "reset"));
|
|
52
|
+
}
|
|
53
|
+
/** Give the user permissions directly, beyond their roles' (`posts:write`, `billing:*`). */
|
|
54
|
+
grant(userId, permissions) {
|
|
55
|
+
return this.post(seg("users", userId, "permissions"), { permissions });
|
|
56
|
+
}
|
|
57
|
+
revoke(userId, permissions) {
|
|
58
|
+
return this.del(seg("users", userId, "permissions"), undefined, { permissions });
|
|
59
|
+
}
|
|
60
|
+
/** Sign the user out everywhere. */
|
|
61
|
+
revokeSessions(userId) {
|
|
62
|
+
return this.post(seg("users", userId, "sessions", "revoke"));
|
|
63
|
+
}
|
|
64
|
+
revokeSession(userId, sessionId) {
|
|
65
|
+
return this.del(seg("users", userId, "sessions", sessionId));
|
|
66
|
+
}
|
|
67
|
+
devices(userId) {
|
|
68
|
+
return this.get(seg("users", userId, "devices"));
|
|
69
|
+
}
|
|
70
|
+
forgetDevice(userId, deviceId) {
|
|
71
|
+
return this.del(seg("users", userId, "devices", deviceId));
|
|
72
|
+
}
|
|
73
|
+
/** The user's own API keys (never the secrets). */
|
|
74
|
+
apiKeys(userId) {
|
|
75
|
+
return this.get(seg("users", userId, "api-keys"));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export class Roles extends AdminService {
|
|
79
|
+
/** Roles with their permissions. */
|
|
80
|
+
list() {
|
|
81
|
+
return this.get("/roles");
|
|
82
|
+
}
|
|
83
|
+
/** Create or replace a role. Names are lowercase (`editor`, `org:billing`); permissions are `resource:action` patterns with `*` wildcards. */
|
|
84
|
+
define(name, permissions, options = {}) {
|
|
85
|
+
return this.put("/roles", { name, description: options.description ?? "", permissions });
|
|
86
|
+
}
|
|
87
|
+
remove(name) {
|
|
88
|
+
return this.del(seg("roles", name));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/** Organizations (tenants) and their members. A member's role is `owner`, `admin` or `member`. */
|
|
92
|
+
export class Orgs extends AdminService {
|
|
93
|
+
list() {
|
|
94
|
+
return this.get("/orgs");
|
|
95
|
+
}
|
|
96
|
+
getOrg(slug) {
|
|
97
|
+
return this.get(seg("orgs", slug));
|
|
98
|
+
}
|
|
99
|
+
create(slug, name, options = {}) {
|
|
100
|
+
return this.post("/orgs", { slug, name, owner_email: options.ownerEmail, metadata: options.metadata ?? {} });
|
|
101
|
+
}
|
|
102
|
+
update(slug, changes) {
|
|
103
|
+
return this.patch(seg("orgs", slug), changes);
|
|
104
|
+
}
|
|
105
|
+
remove(slug) {
|
|
106
|
+
return this.del(seg("orgs", slug));
|
|
107
|
+
}
|
|
108
|
+
/** Add an existing user straight in. */
|
|
109
|
+
addMember(slug, member) {
|
|
110
|
+
return this.post(seg("orgs", slug, "members"), { email: member.email, role: member.role ?? "member" });
|
|
111
|
+
}
|
|
112
|
+
setMemberRole(slug, userId, role) {
|
|
113
|
+
return this.patch(seg("orgs", slug, "members", userId), { role });
|
|
114
|
+
}
|
|
115
|
+
removeMember(slug, userId) {
|
|
116
|
+
return this.del(seg("orgs", slug, "members", userId));
|
|
117
|
+
}
|
|
118
|
+
/** Mail an invitation; `redirectTo` must be one of the environment's allowed redirect URLs. */
|
|
119
|
+
invite(slug, invitation) {
|
|
120
|
+
return this.post(seg("orgs", slug, "invitations"), { email: invitation.email, role: invitation.role ?? "member", redirect_to: invitation.redirectTo });
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
export class Invitations extends AdminService {
|
|
124
|
+
/** Pending and past invitations across organizations. */
|
|
125
|
+
list() {
|
|
126
|
+
return this.get("/invitations");
|
|
127
|
+
}
|
|
128
|
+
resend(invitationId, options = {}) {
|
|
129
|
+
return this.post(seg("invitations", invitationId, "resend"), options.redirectTo ? { redirect_to: options.redirectTo } : {});
|
|
130
|
+
}
|
|
131
|
+
revoke(invitationId) {
|
|
132
|
+
return this.del(seg("invitations", invitationId));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export class Sessions extends AdminService {
|
|
136
|
+
/** Active sessions across users. */
|
|
137
|
+
list(options = {}) {
|
|
138
|
+
return this.get("/sessions", options);
|
|
139
|
+
}
|
|
140
|
+
/** End one session (all its refresh tokens). */
|
|
141
|
+
revoke(family) {
|
|
142
|
+
return this.del(seg("sessions", family));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/** API keys users made for themselves. */
|
|
146
|
+
export class ApiKeys extends AdminService {
|
|
147
|
+
list(options = {}) {
|
|
148
|
+
return this.get("/api-keys", options);
|
|
149
|
+
}
|
|
150
|
+
revoke(keyId) {
|
|
151
|
+
return this.del(seg("api-keys", keyId));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export class Devices extends AdminService {
|
|
155
|
+
/** Recent devices people signed in from. */
|
|
156
|
+
list(options = {}) {
|
|
157
|
+
return this.get("/devices", options);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/** Events, statistics, identity backup and the hosted pages. */
|
|
161
|
+
export class Insight extends AdminService {
|
|
162
|
+
/** Authentication events (sign-ins, sign-ups, resets, MFA…). `failed` for failures only. */
|
|
163
|
+
events(options = {}) {
|
|
164
|
+
return this.get("/events", { kind: options.kind, failed: options.failed ? "true" : undefined, limit: options.limit ?? 100 });
|
|
165
|
+
}
|
|
166
|
+
/** Counts of users, sign-ins, MFA use and failures. */
|
|
167
|
+
stats() {
|
|
168
|
+
return this.get("/stats");
|
|
169
|
+
}
|
|
170
|
+
/** Every identity (users, organizations, roles, factors) as a document. */
|
|
171
|
+
backup() {
|
|
172
|
+
return this.get("/backup");
|
|
173
|
+
}
|
|
174
|
+
/** Apply the `identities` of a backup. `dryRun` reports what would change. */
|
|
175
|
+
restore(identities, options = {}) {
|
|
176
|
+
return this.post("/restore", { identities, replace: options.replace ?? false, dry_run: options.dryRun ?? false });
|
|
177
|
+
}
|
|
178
|
+
/** The HTML a hosted sign-in page is served as for the branding being edited (the saved branding when omitted). */
|
|
179
|
+
/** The claims a token profile would put in a token for this user (and organization), without issuing one. */
|
|
180
|
+
previewTokenProfile(profile, userId, options = {}) {
|
|
181
|
+
return this.post("/token-profiles/preview", { profile, user_id: userId, ...(options.org ? { org: options.org } : {}) });
|
|
182
|
+
}
|
|
183
|
+
hostedSource(page, options = {}) {
|
|
184
|
+
return this.post("/hosted-source", { page, branding: options.branding, form: options.form });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
export class Admin {
|
|
188
|
+
http;
|
|
189
|
+
environment;
|
|
190
|
+
users;
|
|
191
|
+
roles;
|
|
192
|
+
orgs;
|
|
193
|
+
invitations;
|
|
194
|
+
sessions;
|
|
195
|
+
apiKeys;
|
|
196
|
+
devices;
|
|
197
|
+
insight;
|
|
198
|
+
constructor(http, environment) {
|
|
199
|
+
this.http = http;
|
|
200
|
+
this.environment = environment;
|
|
201
|
+
this.users = new Users(http, environment);
|
|
202
|
+
this.roles = new Roles(http, environment);
|
|
203
|
+
this.orgs = new Orgs(http, environment);
|
|
204
|
+
this.invitations = new Invitations(http, environment);
|
|
205
|
+
this.sessions = new Sessions(http, environment);
|
|
206
|
+
this.apiKeys = new ApiKeys(http, environment);
|
|
207
|
+
this.devices = new Devices(http, environment);
|
|
208
|
+
this.insight = new Insight(http, environment);
|
|
209
|
+
}
|
|
210
|
+
/** The same services for another environment the key may manage. */
|
|
211
|
+
withEnvironment(name) {
|
|
212
|
+
return new Admin(this.http, name);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/** User administration for the client's environment (or `environment`). Needs a secret key. */
|
|
216
|
+
export function admin(client, environment) {
|
|
217
|
+
if (!isSecretKey(client.options.apiKey)) {
|
|
218
|
+
throw new ConfigError("User administration needs a secret key (pb_sk_…).");
|
|
219
|
+
}
|
|
220
|
+
return new Admin(client.http, environment ?? client.options.environment ?? "development");
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/admin.ts"],"names":[],"mappings":"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"}
|