@slyxup/core 0.2.4 → 1.0.1

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.
@@ -0,0 +1,4 @@
1
+
2
+ > @slyxup/core@1.0.1 build /home/runner/work/stack/stack/packages/core
3
+ > tsc -p tsconfig.json
4
+
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 SlyxUp
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -20,15 +20,20 @@ const client = new SlyxupClient({
20
20
  });
21
21
 
22
22
  // ── Auth ──
23
- await client.auth.signUp({ email: 'ada@example.com', password: 'password123', firstName: 'Ada' });
23
+ await client.auth.signUp({ email: 'ada@example.com', password: 'password123', firstName: 'Ada', username: 'ada' });
24
+ // Returns { user, sessionToken, expiresAt } on success, or
25
+ // { code: '2FA_REQUIRED', challengeToken } when the account has 2FA enabled.
24
26
  await client.auth.signIn({ email: 'ada@example.com', password: 'password123' });
27
+ // Complete a 2FA challenge:
28
+ await client.auth.completeSignIn({ challengeToken, code: '123456' }); // or { challengeToken, recoveryCode }
25
29
  await client.auth.signOut();
26
30
  await client.auth.resendVerification('ada@example.com'); // resend email verification
31
+ await client.auth.forgotPassword('ada@example.com'); // send reset email
32
+ await client.auth.resetPassword(token, 'newPassword'); // reset with emailed token
33
+ await client.auth.verifyEmail(token); // confirm email with emailed token
27
34
 
28
- // ── Sessions ──
29
- const { session, user } = await client.sessions.get();
30
- // session.expiresAt — ISO date; throws UnauthorizedError (401) when signed out
31
- const { sessions } = await client.sessions.list();
35
+ // ── Sessions ── (list supports pagination)
36
+ const { sessions, total } = await client.sessions.list({ limit: 10, offset: 0 });
32
37
  // SlyxupSessionInfo[]: { id, ipAddress, userAgent, expiresAt, createdAt, isCurrent }
33
38
  await client.sessions.revoke('session-id'); // revoke one device
34
39
  const { revoked } = await client.sessions.revokeOthers(); // sign out everywhere else
@@ -36,9 +41,20 @@ const { revoked } = await client.sessions.revokeOthers(); // sign out everywher
36
41
  // ── Password ──
37
42
  await client.password.change({ currentPassword, newPassword });
38
43
 
44
+ // ── Two-factor (TOTP) ──
45
+ const { secret, provisioningUri, accountName } = await client.twoFactor.setup();
46
+ await client.twoFactor.enable(secret, '123456'); // returns { recoveryCodes: string[] } — save them
47
+ await client.twoFactor.verify('123456'); // { valid: true }
48
+ await client.twoFactor.disable('123456');
49
+ const { enabled } = await client.twoFactor.status();
50
+
51
+ // ── Connected accounts (OAuth) ──
52
+ const { accounts } = await client.accounts.list(); // [{ id, provider, ... }]
53
+ await client.accounts.unlink(accountId, 'google');
54
+
39
55
  // ── Users ──
40
- const me = await client.users.me(); // full profile
41
- await client.users.update({ firstName: 'Ada', lastName: 'Lovelace' });
56
+ const me = await client.users.me(); // full profile (includes username, twoFactorEnabled)
57
+ await client.users.update({ firstName: 'Ada', username: 'ada' });
42
58
  await client.users.delete(); // GDPR delete
43
59
  ```
44
60
 
@@ -72,13 +88,24 @@ try {
72
88
  |---|---|---|
73
89
  | `auth.signUp(input)` | POST | `/v1/auth/sign-up` |
74
90
  | `auth.signIn(input)` | POST | `/v1/auth/sign-in` |
91
+ | `auth.completeSignIn(input)` | POST | `/v1/auth/sign-in/2fa` |
75
92
  | `auth.signOut()` | POST | `/v1/auth/sign-out` |
76
93
  | `auth.resendVerification(email)` | POST | `/v1/verification/resend` |
94
+ | `auth.forgotPassword(email)` | POST | `/v1/verification/password/forgot` |
95
+ | `auth.resetPassword(token, password)` | POST | `/v1/verification/password/reset` |
96
+ | `auth.verifyEmail(token)` | POST | `/v1/verification/verify` |
77
97
  | `sessions.get()` | GET | `/v1/session` |
78
- | `sessions.list()` | GET | `/v1/sessions` |
98
+ | `sessions.list({ limit, offset })` | GET | `/v1/sessions` |
79
99
  | `sessions.revoke(id)` | DELETE | `/v1/sessions/:id` |
80
100
  | `sessions.revokeOthers()` | DELETE | `/v1/sessions` |
81
101
  | `password.change(input)` | POST | `/v1/user/password` |
102
+ | `twoFactor.setup()` | GET | `/v1/user/2fa/setup` |
103
+ | `twoFactor.status()` | GET | `/v1/user/2fa/status` |
104
+ | `twoFactor.enable(secret, code)` | POST | `/v1/user/2fa/enable` |
105
+ | `twoFactor.verify(code)` | POST | `/v1/user/2fa/verify` |
106
+ | `twoFactor.disable(code)` | POST | `/v1/user/2fa/disable` |
107
+ | `accounts.list()` | GET | `/v1/user/accounts` |
108
+ | `accounts.unlink(id, provider)` | DELETE | `/v1/user/accounts/:id` |
82
109
  | `users.me()` | GET | `/v1/user` |
83
110
  | `users.update(patch)` | PATCH | `/v1/user` |
84
111
  | `users.delete()` | DELETE | `/v1/user` |
package/dist/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { AuthResponse, ChangePasswordInput, RevokeSessionsResponse, SessionResponse, SessionsResponse, SignInInput, SignUpInput, SlyxupClientOptions, UpdateUserInput, UserResponse } from './types.js';
1
+ import type { AuthResponse, ChangePasswordInput, CompleteSignInInput, ConnectedAccountsResponse, EnableTOTPResponse, RevokeSessionsResponse, SessionResponse, SessionsResponse, SignInInput, SignInResponse, SignUpInput, SlyxupClientOptions, TOTPSetupResponse, TwoFactorStatusResponse, UpdateUserInput, UserResponse } from './types.js';
2
2
  /**
3
3
  * SlyxUp Core Client.
4
4
  *
@@ -10,22 +10,37 @@ import type { AuthResponse, ChangePasswordInput, RevokeSessionsResponse, Session
10
10
  */
11
11
  export declare class SlyxupClient {
12
12
  readonly publishableKey?: string;
13
+ readonly secretKey?: string;
13
14
  readonly apiUrl: string;
14
15
  private _getToken?;
15
16
  private _request?;
16
17
  readonly auth: {
17
18
  signUp: (input: SignUpInput) => Promise<AuthResponse>;
18
- signIn: (input: SignInInput) => Promise<AuthResponse>;
19
+ signIn: (input: SignInInput) => Promise<SignInResponse>;
19
20
  signOut: () => Promise<{
20
21
  ok: true;
21
22
  }>;
22
23
  resendVerification: (email: string) => Promise<{
23
24
  ok: true;
24
25
  }>;
26
+ forgotPassword: (email: string, projectId?: string) => Promise<{
27
+ ok: true;
28
+ }>;
29
+ resetPassword: (token: string, password: string) => Promise<{
30
+ ok: true;
31
+ }>;
32
+ verifyEmail: (token: string) => Promise<{
33
+ ok: true;
34
+ }>;
35
+ /** Complete a 2FA challenge returned by signIn. */
36
+ completeSignIn: (input: CompleteSignInInput) => Promise<AuthResponse>;
25
37
  };
26
38
  readonly sessions: {
27
39
  get: () => Promise<SessionResponse>;
28
- list: () => Promise<SessionsResponse>;
40
+ list: (opts?: {
41
+ limit?: number;
42
+ offset?: number;
43
+ }) => Promise<SessionsResponse>;
29
44
  revoke: (sessionId: string) => Promise<{
30
45
  ok: true;
31
46
  }>;
@@ -36,6 +51,24 @@ export declare class SlyxupClient {
36
51
  ok: true;
37
52
  }>;
38
53
  };
54
+ readonly twoFactor: {
55
+ setup: () => Promise<TOTPSetupResponse>;
56
+ status: () => Promise<TwoFactorStatusResponse>;
57
+ enable: (secret: string, code: string) => Promise<EnableTOTPResponse>;
58
+ verify: (code: string) => Promise<{
59
+ ok: boolean;
60
+ valid: boolean;
61
+ }>;
62
+ disable: (code: string) => Promise<{
63
+ ok: true;
64
+ }>;
65
+ };
66
+ readonly accounts: {
67
+ list: () => Promise<ConnectedAccountsResponse>;
68
+ unlink: (accountId: string, provider: 'google' | 'github') => Promise<{
69
+ ok: true;
70
+ }>;
71
+ };
39
72
  readonly users: {
40
73
  me: () => Promise<UserResponse>;
41
74
  update: (input: UpdateUserInput) => Promise<UserResponse>;
@@ -43,6 +76,89 @@ export declare class SlyxupClient {
43
76
  ok: true;
44
77
  }>;
45
78
  };
79
+ readonly admin: {
80
+ /** Get current project details */
81
+ getProject: () => Promise<{
82
+ ok: true;
83
+ project: {
84
+ id: string;
85
+ name: string;
86
+ createdAt: string;
87
+ };
88
+ }>;
89
+ /** List users in the project */
90
+ listUsers: (opts?: {
91
+ limit?: number;
92
+ offset?: number;
93
+ }) => Promise<{
94
+ ok: true;
95
+ users: Array<{
96
+ id: string;
97
+ email: string;
98
+ firstName: string | null;
99
+ lastName: string | null;
100
+ emailVerified: boolean;
101
+ blocked: boolean;
102
+ createdAt: string;
103
+ }>;
104
+ total: number;
105
+ }>;
106
+ /** Get a single user by ID */
107
+ getUser: (userId: string) => Promise<{
108
+ ok: true;
109
+ user: {
110
+ id: string;
111
+ email: string;
112
+ firstName: string | null;
113
+ lastName: string | null;
114
+ emailVerified: boolean;
115
+ blocked: boolean;
116
+ createdAt: string;
117
+ updatedAt: string;
118
+ };
119
+ }>;
120
+ /** List active sessions */
121
+ listSessions: () => Promise<{
122
+ ok: true;
123
+ sessions: Array<{
124
+ id: string;
125
+ userId: string;
126
+ ipAddress: string | null;
127
+ userAgent: string | null;
128
+ expiresAt: string;
129
+ isExpired: boolean;
130
+ createdAt: string;
131
+ }>;
132
+ }>;
133
+ /** List API keys */
134
+ listKeys: () => Promise<{
135
+ ok: true;
136
+ keys: Array<{
137
+ id: string;
138
+ name: string;
139
+ prefix: string;
140
+ environment: string;
141
+ type: string;
142
+ lastUsedAt: string | null;
143
+ createdAt: string;
144
+ }>;
145
+ }>;
146
+ /** Create an API key (full key returned only once) */
147
+ createKey: (input: {
148
+ name: string;
149
+ type: 'publishable' | 'secret';
150
+ environment: 'test' | 'live';
151
+ }) => Promise<{
152
+ ok: true;
153
+ id: string;
154
+ key: string;
155
+ prefix: string;
156
+ }>;
157
+ /** Revoke an API key */
158
+ revokeKey: (keyId: string) => Promise<{
159
+ ok: true;
160
+ }>;
161
+ };
46
162
  /** Get current session token (for custom project APIs that need Bearer) */
47
163
  getToken(): string | undefined;
48
164
  /** Raw request for custom endpoints (uses same auth headers + cookies as SDK) */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EAGnB,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,YAAY,EACb,MAAM,YAAY,CAAC;AAqBpB;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACvB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,SAAS,CAAC,CAA2B;IAC7C,OAAO,CAAC,QAAQ,CAAC,CAAsD;IAEvE,QAAQ,CAAC,IAAI,EAAE;QACb,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;QACtD,OAAO,EAAE,MAAM,OAAO,CAAC;YAAE,EAAE,EAAE,IAAI,CAAA;SAAE,CAAC,CAAC;QACrC,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,EAAE,EAAE,IAAI,CAAA;SAAE,CAAC,CAAC;KAC9D,CAAC;IAEF,QAAQ,CAAC,QAAQ,EAAE;QACjB,GAAG,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;QACpC,IAAI,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACtC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,EAAE,EAAE,IAAI,CAAA;SAAE,CAAC,CAAC;QACrD,YAAY,EAAE,MAAM,OAAO,CAAC,sBAAsB,CAAC,CAAC;KACrD,CAAC;IAEF,QAAQ,CAAC,QAAQ,EAAE;QACjB,MAAM,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC;YAAE,EAAE,EAAE,IAAI,CAAA;SAAE,CAAC,CAAC;KAC/D,CAAC;IAEF,QAAQ,CAAC,KAAK,EAAE;QACd,EAAE,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;QAChC,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,EAAE,MAAM,OAAO,CAAC;YAAE,EAAE,EAAE,IAAI,CAAA;SAAE,CAAC,CAAC;KACrC,CAAC;IAEF,2EAA2E;IAC3E,QAAQ,IAAI,MAAM,GAAG,SAAS;IAG9B,iFAAiF;IAC3E,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;gBAKlD,OAAO,GAAE,mBAAwB;CAiK9C;AAGD,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -28,13 +28,17 @@ function createCookieJar() {
28
28
  */
29
29
  export class SlyxupClient {
30
30
  publishableKey;
31
+ secretKey;
31
32
  apiUrl;
32
33
  _getToken;
33
34
  _request;
34
35
  auth;
35
36
  sessions;
36
37
  password;
38
+ twoFactor;
39
+ accounts;
37
40
  users;
41
+ admin;
38
42
  /** Get current session token (for custom project APIs that need Bearer) */
39
43
  getToken() {
40
44
  return this._getToken?.();
@@ -47,12 +51,33 @@ export class SlyxupClient {
47
51
  }
48
52
  constructor(options = {}) {
49
53
  const jar = createCookieJar();
54
+ // Persist token in localStorage so refresh keeps session for cross-origin (auth -> billing) and for dashboard project APIs
55
+ const STORAGE_KEY = 'slyxup_session_token';
50
56
  let storedToken;
57
+ try {
58
+ if (typeof window !== 'undefined' && window.localStorage) {
59
+ storedToken = window.localStorage.getItem(STORAGE_KEY) ?? undefined;
60
+ }
61
+ }
62
+ catch { }
63
+ const persistToken = (t) => {
64
+ storedToken = t;
65
+ try {
66
+ if (typeof window !== 'undefined' && window.localStorage) {
67
+ if (t)
68
+ window.localStorage.setItem(STORAGE_KEY, t);
69
+ else
70
+ window.localStorage.removeItem(STORAGE_KEY);
71
+ }
72
+ }
73
+ catch { }
74
+ };
51
75
  this.publishableKey = options.publishableKey;
76
+ this.secretKey = options.secretKey;
52
77
  this.apiUrl = (options.apiUrl ?? DEFAULT_API_URL).replace(/\/$/, '');
53
78
  this._getToken = () => storedToken;
54
79
  // _request will be assigned after `request` is defined below
55
- const requestInner = async (path, init = {}) => {
80
+ const requestInner = async (path, init = {}, opts) => {
56
81
  let res;
57
82
  try {
58
83
  // Build headers: prefer cookie jar (SSR), fall back to stored Bearer token (browser cross-origin)
@@ -87,6 +112,8 @@ export class SlyxupClient {
87
112
  .json()
88
113
  .catch(() => ({ ok: false, error: 'Invalid response' })));
89
114
  if (!res.ok) {
115
+ if (opts?.captureError)
116
+ return data;
90
117
  if (res.status === 401)
91
118
  throw new UnauthorizedError('error' in data ? String(data.error) : undefined);
92
119
  if (res.status === 429)
@@ -97,30 +124,45 @@ export class SlyxupClient {
97
124
  }
98
125
  return data;
99
126
  };
100
- const post = (path, body) => requestInner(path, {
127
+ const post = (path, body, opts) => requestInner(path, {
101
128
  method: 'POST',
102
129
  body: body === undefined ? undefined : JSON.stringify(body),
103
- });
130
+ }, opts);
104
131
  this.auth = {
105
132
  signUp: async (input) => {
106
133
  const res = await post('/v1/auth/sign-up', input);
107
134
  if (!('user' in res))
108
135
  throw new SlyxupError(res.error, 400, 'api_error');
109
136
  if (res.sessionToken)
110
- storedToken = res.sessionToken;
137
+ persistToken(res.sessionToken);
111
138
  return res;
112
139
  },
113
140
  signIn: async (input) => {
114
- const res = await post('/v1/auth/sign-in', input);
141
+ // The server may answer 403 with code 2FA_REQUIRED — we must surface
142
+ // the challenge back to the caller instead of throwing a generic error.
143
+ const res = await post('/v1/auth/sign-in', input, {
144
+ captureError: true,
145
+ });
146
+ if ('challengeToken' in res) {
147
+ return res;
148
+ }
149
+ if (!('user' in res))
150
+ throw new UnauthorizedError(res.error ?? 'Sign in failed');
151
+ if (res.sessionToken)
152
+ persistToken(res.sessionToken);
153
+ return res;
154
+ },
155
+ completeSignIn: async (input) => {
156
+ const res = await post('/v1/auth/sign-in/2fa', input);
115
157
  if (!('user' in res))
116
- throw new SlyxupError(res.error, 401, 'api_error');
158
+ throw new UnauthorizedError(res.error);
117
159
  if (res.sessionToken)
118
- storedToken = res.sessionToken;
160
+ persistToken(res.sessionToken);
119
161
  return res;
120
162
  },
121
163
  signOut: async () => {
122
164
  const res = await post('/v1/auth/sign-out');
123
- storedToken = undefined;
165
+ persistToken(undefined);
124
166
  jar.clear();
125
167
  return res;
126
168
  },
@@ -132,6 +174,32 @@ export class SlyxupClient {
132
174
  throw new SlyxupError(res.error, 400, 'api_error');
133
175
  return res;
134
176
  },
177
+ forgotPassword: async (email, projectId) => {
178
+ const res = await post('/v1/verification/password/forgot', {
179
+ email,
180
+ projectId,
181
+ });
182
+ if (!res.ok)
183
+ throw new SlyxupError(res.error, 400, 'api_error');
184
+ return res;
185
+ },
186
+ resetPassword: async (token, password) => {
187
+ const res = await post('/v1/verification/password/reset', {
188
+ token,
189
+ password,
190
+ });
191
+ if (!res.ok)
192
+ throw new SlyxupError(res.error, 400, 'api_error');
193
+ return res;
194
+ },
195
+ verifyEmail: async (token) => {
196
+ const res = await post('/v1/verification/verify', {
197
+ token,
198
+ });
199
+ if (!res.ok)
200
+ throw new SlyxupError(res.error, 400, 'api_error');
201
+ return res;
202
+ },
135
203
  };
136
204
  this.sessions = {
137
205
  get: async () => {
@@ -140,8 +208,14 @@ export class SlyxupClient {
140
208
  throw new UnauthorizedError(res.error);
141
209
  return res;
142
210
  },
143
- list: async () => {
144
- const res = await requestInner('/v1/sessions');
211
+ list: async (opts) => {
212
+ const params = new URLSearchParams();
213
+ if (opts?.limit !== undefined)
214
+ params.set('limit', String(opts.limit));
215
+ if (opts?.offset !== undefined)
216
+ params.set('offset', String(opts.offset));
217
+ const qs = params.toString();
218
+ const res = await requestInner(`/v1/sessions${qs ? `?${qs}` : ''}`);
145
219
  if (!('sessions' in res))
146
220
  throw new SlyxupError(res.error, 400, 'api_error');
147
221
  return res;
@@ -169,6 +243,50 @@ export class SlyxupClient {
169
243
  return res;
170
244
  },
171
245
  };
246
+ this.twoFactor = {
247
+ setup: async () => {
248
+ const res = await requestInner('/v1/user/2fa/setup');
249
+ if (!('secret' in res))
250
+ throw new SlyxupError(res.error, 400, 'api_error');
251
+ return res;
252
+ },
253
+ status: async () => {
254
+ const res = await requestInner('/v1/user/2fa/status');
255
+ return res;
256
+ },
257
+ enable: async (secret, code) => {
258
+ const res = await post('/v1/user/2fa/enable', { secret, code }, { captureError: true });
259
+ if (!('recoveryCodes' in res))
260
+ throw new SlyxupError(res.error, 400, 'api_error');
261
+ return res;
262
+ },
263
+ verify: async (code) => {
264
+ const res = await post('/v1/user/2fa/verify', { code }, { captureError: true });
265
+ if (!('valid' in res))
266
+ throw new SlyxupError(res.error, 400, 'api_error');
267
+ return res;
268
+ },
269
+ disable: async (code) => {
270
+ const res = await post('/v1/user/2fa/disable', { code });
271
+ if (!res.ok)
272
+ throw new SlyxupError(res.error, 400, 'api_error');
273
+ return res;
274
+ },
275
+ };
276
+ this.accounts = {
277
+ list: async () => {
278
+ const res = await requestInner('/v1/user/accounts');
279
+ if (!('accounts' in res))
280
+ throw new SlyxupError(res.error, 400, 'api_error');
281
+ return res;
282
+ },
283
+ unlink: async (accountId, provider) => {
284
+ const res = await requestInner(`/v1/user/accounts/${accountId}?provider=${encodeURIComponent(provider)}`, {
285
+ method: 'DELETE',
286
+ });
287
+ return res;
288
+ },
289
+ };
172
290
  this.users = {
173
291
  me: async () => {
174
292
  const res = await requestInner('/v1/user');
@@ -192,6 +310,65 @@ export class SlyxupClient {
192
310
  return res;
193
311
  },
194
312
  };
313
+ // ── Admin API (requires secretKey) ──
314
+ const sk = options.secretKey;
315
+ const adminRequest = async (path, init = {}) => {
316
+ if (!sk)
317
+ throw new SlyxupError('Secret key required for admin API', 400, 'api_error');
318
+ const res = await fetch(`${this.apiUrl}${path}`, {
319
+ ...init,
320
+ headers: {
321
+ 'Content-Type': 'application/json',
322
+ Authorization: `Bearer ${sk}`,
323
+ ...init.headers,
324
+ },
325
+ });
326
+ const data = (await res
327
+ .json()
328
+ .catch(() => ({ ok: false, error: 'Invalid response' })));
329
+ if (!res.ok) {
330
+ throw new SlyxupError('error' in data
331
+ ? String(data.error)
332
+ : `Request failed (${res.status})`, res.status, 'api_error');
333
+ }
334
+ return data;
335
+ };
336
+ this.admin = {
337
+ getProject: async () => {
338
+ const res = await adminRequest('/v1/admin/project');
339
+ return res;
340
+ },
341
+ listUsers: async (opts) => {
342
+ const params = new URLSearchParams();
343
+ if (opts?.limit !== undefined)
344
+ params.set('limit', String(opts.limit));
345
+ if (opts?.offset !== undefined)
346
+ params.set('offset', String(opts.offset));
347
+ const qs = params.toString();
348
+ const res = await adminRequest(`/v1/admin/users${qs ? `?${qs}` : ''}`);
349
+ return res;
350
+ },
351
+ getUser: async (userId) => {
352
+ const res = await adminRequest(`/v1/admin/users/${encodeURIComponent(userId)}`);
353
+ return res;
354
+ },
355
+ listSessions: async () => {
356
+ const res = await adminRequest('/v1/admin/sessions');
357
+ return res;
358
+ },
359
+ listKeys: async () => {
360
+ const res = await adminRequest('/v1/admin/keys');
361
+ return res;
362
+ },
363
+ createKey: async (input) => {
364
+ const res = await adminRequest('/v1/admin/keys', { method: 'POST', body: JSON.stringify(input) });
365
+ return res;
366
+ },
367
+ revokeKey: async (keyId) => {
368
+ const res = await adminRequest(`/v1/admin/keys/${encodeURIComponent(keyId)}`, { method: 'DELETE' });
369
+ return res;
370
+ },
371
+ };
195
372
  this._request = requestInner;
196
373
  }
197
374
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}