@airdraft/client 0.1.0
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/CHANGELOG.md +5 -0
- package/dist/AirdraftClient.d.ts +161 -0
- package/dist/AirdraftClient.d.ts.map +1 -0
- package/dist/AirdraftClient.js +371 -0
- package/dist/AirdraftClient.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/package.json +41 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import type { Entry, ListOptions, GetOptions, CmsSchema, CollectionConfig, MediaItem, MediaLibraryResult } from '@airdraft/core';
|
|
2
|
+
export type CmsRole = 'admin' | 'publisher' | 'editor';
|
|
3
|
+
export interface CmsUser {
|
|
4
|
+
id: string;
|
|
5
|
+
email: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
role: CmsRole;
|
|
8
|
+
createdAt: number;
|
|
9
|
+
}
|
|
10
|
+
export interface CmsInvite {
|
|
11
|
+
token: string;
|
|
12
|
+
email: string;
|
|
13
|
+
role: CmsRole;
|
|
14
|
+
expiresAt: number;
|
|
15
|
+
inviteUrl?: string;
|
|
16
|
+
}
|
|
17
|
+
export type AuthConfig = {
|
|
18
|
+
type: 'bearer';
|
|
19
|
+
token: string;
|
|
20
|
+
} | {
|
|
21
|
+
type: 'apiKey';
|
|
22
|
+
token: string;
|
|
23
|
+
} | {
|
|
24
|
+
type: 'embedToken';
|
|
25
|
+
token: string;
|
|
26
|
+
} | {
|
|
27
|
+
type: 'session';
|
|
28
|
+
};
|
|
29
|
+
export interface AirdraftClientOptions {
|
|
30
|
+
/** Base API URL, e.g. "https://example.com/api/cms" or "https://cms.airdraft.cloud/v1/projects/proj_123" */
|
|
31
|
+
apiUrl: string;
|
|
32
|
+
/** Auth method. Must be declared explicitly — no auto-detection. */
|
|
33
|
+
auth?: AuthConfig;
|
|
34
|
+
/** Admin key sent as `X-Admin-Key` for schema mutation routes. */
|
|
35
|
+
adminKey?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Framework-agnostic HTTP client for the Airdraft CMS API.
|
|
39
|
+
*
|
|
40
|
+
* Works with both self-hosted and cloud deployments.
|
|
41
|
+
*
|
|
42
|
+
* ```ts
|
|
43
|
+
* const client = new AirdraftClient({
|
|
44
|
+
* apiUrl: 'https://example.com/api/cms',
|
|
45
|
+
* auth: { type: 'apiKey', token: process.env.CMS_API_KEY! },
|
|
46
|
+
* })
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare class AirdraftClient {
|
|
50
|
+
private readonly baseUrl;
|
|
51
|
+
private readonly _authConfig?;
|
|
52
|
+
private readonly adminKey?;
|
|
53
|
+
constructor(options: AirdraftClientOptions);
|
|
54
|
+
private authHeaders;
|
|
55
|
+
private request;
|
|
56
|
+
getSchema(): Promise<CmsSchema>;
|
|
57
|
+
private adminHeaders;
|
|
58
|
+
listSchemaCollections(): Promise<Record<string, CollectionConfig>>;
|
|
59
|
+
createSchemaCollection(name: string, config: CollectionConfig): Promise<void>;
|
|
60
|
+
updateSchemaCollection(name: string, config: CollectionConfig): Promise<void>;
|
|
61
|
+
deleteSchemaCollection(name: string): Promise<void>;
|
|
62
|
+
listEntries(collection: string, options?: ListOptions): Promise<{
|
|
63
|
+
entries: Entry[];
|
|
64
|
+
total: number;
|
|
65
|
+
}>;
|
|
66
|
+
getEntry(collection: string, slug: string, options?: GetOptions): Promise<Entry | null>;
|
|
67
|
+
createEntry(collection: string, data: Record<string, unknown>, slug?: string): Promise<Entry>;
|
|
68
|
+
updateEntry(collection: string, slug: string, data: Record<string, unknown>, sha: string): Promise<Entry>;
|
|
69
|
+
deleteEntry(collection: string, slug: string, sha: string): Promise<void>;
|
|
70
|
+
readonly media: {
|
|
71
|
+
/**
|
|
72
|
+
* Upload a file to the media store.
|
|
73
|
+
* Sends multipart/form-data to POST /media/upload.
|
|
74
|
+
*/
|
|
75
|
+
upload: (file: File, _options?: {
|
|
76
|
+
collection?: string;
|
|
77
|
+
}) => Promise<MediaItem>;
|
|
78
|
+
/**
|
|
79
|
+
* List stored media files. Returns full MediaItem[] enriched with sidecar metadata
|
|
80
|
+
* when the server has library mode enabled.
|
|
81
|
+
*/
|
|
82
|
+
list: (options?: {
|
|
83
|
+
prefix?: string;
|
|
84
|
+
limit?: number;
|
|
85
|
+
cursor?: string;
|
|
86
|
+
search?: string;
|
|
87
|
+
mimeType?: string;
|
|
88
|
+
}) => Promise<MediaLibraryResult>;
|
|
89
|
+
/**
|
|
90
|
+
* Get a single media item by storage key [library mode].
|
|
91
|
+
*/
|
|
92
|
+
get: (key: string) => Promise<MediaItem>;
|
|
93
|
+
/**
|
|
94
|
+
* Update editable metadata for a media item [library mode].
|
|
95
|
+
* Pass null for a field to clear it.
|
|
96
|
+
*/
|
|
97
|
+
patch: (key: string, metadata: {
|
|
98
|
+
alt?: string | null;
|
|
99
|
+
caption?: string | null;
|
|
100
|
+
title?: string | null;
|
|
101
|
+
tags?: string[] | null;
|
|
102
|
+
}) => Promise<MediaItem>;
|
|
103
|
+
/**
|
|
104
|
+
* Delete a stored media file by key.
|
|
105
|
+
*/
|
|
106
|
+
delete: (key: string) => Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Get a fresh URL for a stored media key (useful for signed URLs).
|
|
109
|
+
*/
|
|
110
|
+
url: (key: string) => Promise<string>;
|
|
111
|
+
};
|
|
112
|
+
readonly auth: {
|
|
113
|
+
/**
|
|
114
|
+
* Login with email and password. On success the server sets an httpOnly
|
|
115
|
+
* session cookie. Subsequent requests using `{ type: 'session' }` auth
|
|
116
|
+
* will be authenticated automatically by the browser.
|
|
117
|
+
*
|
|
118
|
+
* Requires `CredentialsProvider` to be configured.
|
|
119
|
+
*/
|
|
120
|
+
login: (email: string, password: string) => Promise<CmsUser>;
|
|
121
|
+
/**
|
|
122
|
+
* Logout — clears the session cookie server-side.
|
|
123
|
+
*/
|
|
124
|
+
logout: () => Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Returns the currently authenticated user, or `null` if the session is
|
|
127
|
+
* not valid (unauthenticated / expired).
|
|
128
|
+
*/
|
|
129
|
+
me: () => Promise<CmsUser | null>;
|
|
130
|
+
/**
|
|
131
|
+
* Accept an invite and create an account. Returns the new user's email so
|
|
132
|
+
* the caller can immediately log in. No session cookie is set — call
|
|
133
|
+
* `login()` after this to authenticate.
|
|
134
|
+
*
|
|
135
|
+
* Requires `CredentialsProvider` to be configured.
|
|
136
|
+
*/
|
|
137
|
+
acceptInvite: (token: string, password: string, name?: string) => Promise<{
|
|
138
|
+
email: string;
|
|
139
|
+
}>;
|
|
140
|
+
};
|
|
141
|
+
readonly team: {
|
|
142
|
+
/** List all users. Requires admin role. */
|
|
143
|
+
listUsers: () => Promise<CmsUser[]>;
|
|
144
|
+
/** Change a user's role. Requires admin role. */
|
|
145
|
+
updateRole: (userId: string, role: CmsRole) => Promise<CmsUser>;
|
|
146
|
+
/** Remove a user. Requires admin role. */
|
|
147
|
+
removeUser: (userId: string) => Promise<void>;
|
|
148
|
+
/** List all pending invites. Requires admin role. */
|
|
149
|
+
listInvites: () => Promise<CmsInvite[]>;
|
|
150
|
+
/** Create an invite for an email + role. Requires admin role. */
|
|
151
|
+
createInvite: (email: string, role: CmsRole) => Promise<CmsInvite>;
|
|
152
|
+
/** Revoke a pending invite by token. Requires admin role. */
|
|
153
|
+
revokeInvite: (token: string) => Promise<void>;
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
export declare class AirdraftClientError extends Error {
|
|
157
|
+
readonly code: string;
|
|
158
|
+
readonly statusCode: number;
|
|
159
|
+
constructor(code: string, message: string, statusCode: number);
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=AirdraftClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AirdraftClient.d.ts","sourceRoot":"","sources":["../src/AirdraftClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// AirdraftClient
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
/**
|
|
5
|
+
* Framework-agnostic HTTP client for the Airdraft CMS API.
|
|
6
|
+
*
|
|
7
|
+
* Works with both self-hosted and cloud deployments.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* const client = new AirdraftClient({
|
|
11
|
+
* apiUrl: 'https://example.com/api/cms',
|
|
12
|
+
* auth: { type: 'apiKey', token: process.env.CMS_API_KEY! },
|
|
13
|
+
* })
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export class AirdraftClient {
|
|
17
|
+
baseUrl;
|
|
18
|
+
_authConfig;
|
|
19
|
+
adminKey;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this.baseUrl = options.apiUrl.replace(/\/$/, '');
|
|
22
|
+
this._authConfig = options.auth;
|
|
23
|
+
this.adminKey = options.adminKey;
|
|
24
|
+
}
|
|
25
|
+
// -------------------------------------------------------------------------
|
|
26
|
+
// Auth headers
|
|
27
|
+
// -------------------------------------------------------------------------
|
|
28
|
+
authHeaders() {
|
|
29
|
+
if (!this._authConfig)
|
|
30
|
+
return {};
|
|
31
|
+
switch (this._authConfig.type) {
|
|
32
|
+
case 'bearer':
|
|
33
|
+
return { Authorization: `Bearer ${this._authConfig.token}` };
|
|
34
|
+
case 'apiKey':
|
|
35
|
+
return { 'X-API-Key': this._authConfig.token };
|
|
36
|
+
case 'embedToken':
|
|
37
|
+
return { 'X-Embed-Token': this._authConfig.token };
|
|
38
|
+
case 'session':
|
|
39
|
+
return {}; // cookie sent automatically by browser
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// -------------------------------------------------------------------------
|
|
43
|
+
// Internal fetch
|
|
44
|
+
// -------------------------------------------------------------------------
|
|
45
|
+
async request(path, init) {
|
|
46
|
+
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
47
|
+
...init,
|
|
48
|
+
headers: {
|
|
49
|
+
'Content-Type': 'application/json',
|
|
50
|
+
...this.authHeaders(),
|
|
51
|
+
...init?.headers,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
if (!res.ok) {
|
|
55
|
+
const body = await res.json().catch(() => ({}));
|
|
56
|
+
const code = body.error?.code ?? 'UNKNOWN_ERROR';
|
|
57
|
+
const message = body.error?.message ?? res.statusText;
|
|
58
|
+
const err = new AirdraftClientError(code, message, res.status);
|
|
59
|
+
throw err;
|
|
60
|
+
}
|
|
61
|
+
if (res.status === 204)
|
|
62
|
+
return undefined;
|
|
63
|
+
return res.json();
|
|
64
|
+
}
|
|
65
|
+
// -------------------------------------------------------------------------
|
|
66
|
+
// Schema
|
|
67
|
+
// -------------------------------------------------------------------------
|
|
68
|
+
async getSchema() {
|
|
69
|
+
const res = await this.request('/schema');
|
|
70
|
+
return res.data;
|
|
71
|
+
}
|
|
72
|
+
// -------------------------------------------------------------------------
|
|
73
|
+
// Schema editor
|
|
74
|
+
// -------------------------------------------------------------------------
|
|
75
|
+
adminHeaders() {
|
|
76
|
+
return this.adminKey ? { 'X-Admin-Key': this.adminKey } : {};
|
|
77
|
+
}
|
|
78
|
+
async listSchemaCollections() {
|
|
79
|
+
const res = await this.request('/schema/collections');
|
|
80
|
+
return res.data;
|
|
81
|
+
}
|
|
82
|
+
async createSchemaCollection(name, config) {
|
|
83
|
+
await this.request('/schema/collections', {
|
|
84
|
+
method: 'POST',
|
|
85
|
+
headers: this.adminHeaders(),
|
|
86
|
+
body: JSON.stringify({ name, config }),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
async updateSchemaCollection(name, config) {
|
|
90
|
+
await this.request(`/schema/collections/${encodeURIComponent(name)}`, {
|
|
91
|
+
method: 'PUT',
|
|
92
|
+
headers: this.adminHeaders(),
|
|
93
|
+
body: JSON.stringify(config),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
async deleteSchemaCollection(name) {
|
|
97
|
+
await this.request(`/schema/collections/${encodeURIComponent(name)}?confirm=${encodeURIComponent(name)}`, {
|
|
98
|
+
method: 'DELETE',
|
|
99
|
+
headers: this.adminHeaders(),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// -------------------------------------------------------------------------
|
|
103
|
+
// Collections
|
|
104
|
+
// -------------------------------------------------------------------------
|
|
105
|
+
async listEntries(collection, options = {}) {
|
|
106
|
+
const params = new URLSearchParams();
|
|
107
|
+
if (options.limit !== undefined)
|
|
108
|
+
params.set('limit', String(options.limit));
|
|
109
|
+
if (options.offset !== undefined)
|
|
110
|
+
params.set('offset', String(options.offset));
|
|
111
|
+
if (options.sort) {
|
|
112
|
+
params.set('sort', options.sort.field);
|
|
113
|
+
params.set('order', options.sort.order);
|
|
114
|
+
}
|
|
115
|
+
if (options.status)
|
|
116
|
+
params.set('status', options.status);
|
|
117
|
+
if (options.filter) {
|
|
118
|
+
for (const [k, v] of Object.entries(options.filter)) {
|
|
119
|
+
params.set(`filter[${k}]`, String(v));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (options.expand && options.expand.length > 0) {
|
|
123
|
+
params.set('expand', options.expand.join(','));
|
|
124
|
+
}
|
|
125
|
+
const qs = params.toString() ? `?${params}` : '';
|
|
126
|
+
const res = await this.request(`/${collection}${qs}`);
|
|
127
|
+
const entries = res.data.map((item) => ({
|
|
128
|
+
slug: item.slug,
|
|
129
|
+
meta: { sha: item['_sha'] ?? '' },
|
|
130
|
+
data: Object.fromEntries(Object.entries(item).filter(([k]) => k !== 'slug' && k !== '_sha')),
|
|
131
|
+
}));
|
|
132
|
+
return { entries, total: res.meta.total };
|
|
133
|
+
}
|
|
134
|
+
async getEntry(collection, slug, options = {}) {
|
|
135
|
+
try {
|
|
136
|
+
const params = new URLSearchParams();
|
|
137
|
+
if (options.expand && options.expand.length > 0) {
|
|
138
|
+
params.set('expand', options.expand.join(','));
|
|
139
|
+
}
|
|
140
|
+
const qs = params.toString() ? `?${params}` : '';
|
|
141
|
+
const res = await this.request(`/${collection}/${slug}${qs}`);
|
|
142
|
+
return {
|
|
143
|
+
slug: res.data.slug,
|
|
144
|
+
meta: { sha: res.meta.sha },
|
|
145
|
+
data: Object.fromEntries(Object.entries(res.data).filter(([k]) => k !== 'slug')),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
if (err instanceof AirdraftClientError && err.statusCode === 404)
|
|
150
|
+
return null;
|
|
151
|
+
throw err;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
async createEntry(collection, data, slug) {
|
|
155
|
+
const body = { data };
|
|
156
|
+
if (slug)
|
|
157
|
+
body['slug'] = slug;
|
|
158
|
+
const res = await this.request(`/${collection}`, {
|
|
159
|
+
method: 'POST',
|
|
160
|
+
body: JSON.stringify(body),
|
|
161
|
+
});
|
|
162
|
+
return {
|
|
163
|
+
slug: res.data.slug,
|
|
164
|
+
meta: { sha: res.meta.sha },
|
|
165
|
+
data: Object.fromEntries(Object.entries(res.data).filter(([k]) => k !== 'slug')),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
async updateEntry(collection, slug, data, sha) {
|
|
169
|
+
const res = await this.request(`/${collection}/${slug}`, {
|
|
170
|
+
method: 'PUT',
|
|
171
|
+
body: JSON.stringify({ data, meta: { sha } }),
|
|
172
|
+
});
|
|
173
|
+
return {
|
|
174
|
+
slug: res.data.slug,
|
|
175
|
+
meta: { sha: res.meta.sha },
|
|
176
|
+
data: Object.fromEntries(Object.entries(res.data).filter(([k]) => k !== 'slug')),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
async deleteEntry(collection, slug, sha) {
|
|
180
|
+
await this.request(`/${collection}/${slug}`, {
|
|
181
|
+
method: 'DELETE',
|
|
182
|
+
body: JSON.stringify({ meta: { sha } }),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
// -------------------------------------------------------------------------
|
|
186
|
+
// Media
|
|
187
|
+
// -------------------------------------------------------------------------
|
|
188
|
+
media = {
|
|
189
|
+
/**
|
|
190
|
+
* Upload a file to the media store.
|
|
191
|
+
* Sends multipart/form-data to POST /media/upload.
|
|
192
|
+
*/
|
|
193
|
+
upload: async (file, _options) => {
|
|
194
|
+
const form = new FormData();
|
|
195
|
+
form.append('file', file);
|
|
196
|
+
const res = await fetch(`${this.baseUrl}/media/upload`, {
|
|
197
|
+
method: 'POST',
|
|
198
|
+
headers: { ...this.authHeaders() },
|
|
199
|
+
body: form,
|
|
200
|
+
});
|
|
201
|
+
if (!res.ok) {
|
|
202
|
+
const body = await res.json().catch(() => ({}));
|
|
203
|
+
const code = body.error?.code ?? 'UNKNOWN_ERROR';
|
|
204
|
+
const message = body.error?.message ?? res.statusText;
|
|
205
|
+
throw new AirdraftClientError(code, message, res.status);
|
|
206
|
+
}
|
|
207
|
+
const body = await res.json();
|
|
208
|
+
return body.data;
|
|
209
|
+
},
|
|
210
|
+
/**
|
|
211
|
+
* List stored media files. Returns full MediaItem[] enriched with sidecar metadata
|
|
212
|
+
* when the server has library mode enabled.
|
|
213
|
+
*/
|
|
214
|
+
list: async (options) => {
|
|
215
|
+
const params = new URLSearchParams();
|
|
216
|
+
if (options?.prefix)
|
|
217
|
+
params.set('prefix', options.prefix);
|
|
218
|
+
if (options?.limit !== undefined)
|
|
219
|
+
params.set('limit', String(options.limit));
|
|
220
|
+
if (options?.cursor)
|
|
221
|
+
params.set('cursor', options.cursor);
|
|
222
|
+
if (options?.search)
|
|
223
|
+
params.set('search', options.search);
|
|
224
|
+
if (options?.mimeType)
|
|
225
|
+
params.set('mimeType', options.mimeType);
|
|
226
|
+
const qs = params.toString() ? `?${params}` : '';
|
|
227
|
+
const res = await this.request(`/media${qs}`);
|
|
228
|
+
return { items: res.data, cursor: res.meta?.cursor };
|
|
229
|
+
},
|
|
230
|
+
/**
|
|
231
|
+
* Get a single media item by storage key [library mode].
|
|
232
|
+
*/
|
|
233
|
+
get: async (key) => {
|
|
234
|
+
const res = await this.request(`/media/${encodeURIComponent(key)}`);
|
|
235
|
+
return res.data;
|
|
236
|
+
},
|
|
237
|
+
/**
|
|
238
|
+
* Update editable metadata for a media item [library mode].
|
|
239
|
+
* Pass null for a field to clear it.
|
|
240
|
+
*/
|
|
241
|
+
patch: async (key, metadata) => {
|
|
242
|
+
const res = await this.request(`/media/${encodeURIComponent(key)}`, {
|
|
243
|
+
method: 'PATCH',
|
|
244
|
+
body: JSON.stringify(metadata),
|
|
245
|
+
});
|
|
246
|
+
return res.data;
|
|
247
|
+
},
|
|
248
|
+
/**
|
|
249
|
+
* Delete a stored media file by key.
|
|
250
|
+
*/
|
|
251
|
+
delete: async (key) => {
|
|
252
|
+
await this.request(`/media/${encodeURIComponent(key)}`, { method: 'DELETE' });
|
|
253
|
+
},
|
|
254
|
+
/**
|
|
255
|
+
* Get a fresh URL for a stored media key (useful for signed URLs).
|
|
256
|
+
*/
|
|
257
|
+
url: async (key) => {
|
|
258
|
+
const res = await this.request(`/media/${encodeURIComponent(key)}/url`);
|
|
259
|
+
return res.data.url;
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
// -------------------------------------------------------------------------
|
|
263
|
+
// Auth (CredentialsProvider routes)
|
|
264
|
+
// -------------------------------------------------------------------------
|
|
265
|
+
auth = {
|
|
266
|
+
/**
|
|
267
|
+
* Login with email and password. On success the server sets an httpOnly
|
|
268
|
+
* session cookie. Subsequent requests using `{ type: 'session' }` auth
|
|
269
|
+
* will be authenticated automatically by the browser.
|
|
270
|
+
*
|
|
271
|
+
* Requires `CredentialsProvider` to be configured.
|
|
272
|
+
*/
|
|
273
|
+
login: async (email, password) => {
|
|
274
|
+
const res = await this.request('/auth/login', {
|
|
275
|
+
method: 'POST',
|
|
276
|
+
body: JSON.stringify({ email, password }),
|
|
277
|
+
});
|
|
278
|
+
return res.user;
|
|
279
|
+
},
|
|
280
|
+
/**
|
|
281
|
+
* Logout — clears the session cookie server-side.
|
|
282
|
+
*/
|
|
283
|
+
logout: async () => {
|
|
284
|
+
await this.request('/auth/logout', { method: 'POST' });
|
|
285
|
+
},
|
|
286
|
+
/**
|
|
287
|
+
* Returns the currently authenticated user, or `null` if the session is
|
|
288
|
+
* not valid (unauthenticated / expired).
|
|
289
|
+
*/
|
|
290
|
+
me: async () => {
|
|
291
|
+
try {
|
|
292
|
+
const res = await this.request('/auth/me');
|
|
293
|
+
return res.user;
|
|
294
|
+
}
|
|
295
|
+
catch (err) {
|
|
296
|
+
if (err instanceof AirdraftClientError && (err.statusCode === 401 || err.statusCode === 403)) {
|
|
297
|
+
return null;
|
|
298
|
+
}
|
|
299
|
+
throw err;
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
/**
|
|
303
|
+
* Accept an invite and create an account. Returns the new user's email so
|
|
304
|
+
* the caller can immediately log in. No session cookie is set — call
|
|
305
|
+
* `login()` after this to authenticate.
|
|
306
|
+
*
|
|
307
|
+
* Requires `CredentialsProvider` to be configured.
|
|
308
|
+
*/
|
|
309
|
+
acceptInvite: async (token, password, name) => {
|
|
310
|
+
const body = { password };
|
|
311
|
+
if (name)
|
|
312
|
+
body.name = name;
|
|
313
|
+
const res = await this.request(`/auth/invite/${encodeURIComponent(token)}`, { method: 'POST', body: JSON.stringify(body) });
|
|
314
|
+
return { email: res.user.email };
|
|
315
|
+
},
|
|
316
|
+
};
|
|
317
|
+
// -------------------------------------------------------------------------
|
|
318
|
+
// Team management (CredentialsProvider routes)
|
|
319
|
+
// -------------------------------------------------------------------------
|
|
320
|
+
team = {
|
|
321
|
+
/** List all users. Requires admin role. */
|
|
322
|
+
listUsers: async () => {
|
|
323
|
+
const res = await this.request('/auth/users');
|
|
324
|
+
return res.data;
|
|
325
|
+
},
|
|
326
|
+
/** Change a user's role. Requires admin role. */
|
|
327
|
+
updateRole: async (userId, role) => {
|
|
328
|
+
const res = await this.request(`/auth/users/${encodeURIComponent(userId)}/role`, {
|
|
329
|
+
method: 'PATCH',
|
|
330
|
+
body: JSON.stringify({ role }),
|
|
331
|
+
});
|
|
332
|
+
return res.data;
|
|
333
|
+
},
|
|
334
|
+
/** Remove a user. Requires admin role. */
|
|
335
|
+
removeUser: async (userId) => {
|
|
336
|
+
await this.request(`/auth/users/${encodeURIComponent(userId)}`, { method: 'DELETE' });
|
|
337
|
+
},
|
|
338
|
+
/** List all pending invites. Requires admin role. */
|
|
339
|
+
listInvites: async () => {
|
|
340
|
+
const res = await this.request('/auth/invites');
|
|
341
|
+
return res.data;
|
|
342
|
+
},
|
|
343
|
+
/** Create an invite for an email + role. Requires admin role. */
|
|
344
|
+
createInvite: async (email, role) => {
|
|
345
|
+
const res = await this.request('/auth/invites', {
|
|
346
|
+
method: 'POST',
|
|
347
|
+
body: JSON.stringify({ email, role }),
|
|
348
|
+
});
|
|
349
|
+
return res.data;
|
|
350
|
+
},
|
|
351
|
+
/** Revoke a pending invite by token. Requires admin role. */
|
|
352
|
+
revokeInvite: async (token) => {
|
|
353
|
+
await this.request(`/auth/invites/${encodeURIComponent(token)}`, { method: 'DELETE' });
|
|
354
|
+
},
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
// ---------------------------------------------------------------------------
|
|
358
|
+
// Error class
|
|
359
|
+
// ---------------------------------------------------------------------------
|
|
360
|
+
export class AirdraftClientError extends Error {
|
|
361
|
+
code;
|
|
362
|
+
statusCode;
|
|
363
|
+
constructor(code, message, statusCode) {
|
|
364
|
+
super(message);
|
|
365
|
+
this.code = code;
|
|
366
|
+
this.statusCode = statusCode;
|
|
367
|
+
this.name = 'AirdraftClientError';
|
|
368
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=AirdraftClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AirdraftClient.js","sourceRoot":"","sources":["../src/AirdraftClient.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,cAAc,qBAAqB,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@airdraft/client",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Airdraft typed HTTP client",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": ["dist", "README.md", "CHANGELOG.md"],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"dev": "tsc --watch",
|
|
18
|
+
"clean": "rm -rf dist",
|
|
19
|
+
"test": "vitest run",
|
|
20
|
+
"test:watch": "vitest",
|
|
21
|
+
"typecheck": "tsc --noEmit",
|
|
22
|
+
"prepublishOnly": "npm run build",
|
|
23
|
+
"release": "standard-version",
|
|
24
|
+
"release:patch": "standard-version --release-as patch",
|
|
25
|
+
"release:minor": "standard-version --release-as minor",
|
|
26
|
+
"release:major": "standard-version --release-as major"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": { "access": "public" },
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^20.0.0",
|
|
32
|
+
"standard-version": "^9.5.0",
|
|
33
|
+
"tsx": "^4.7.0",
|
|
34
|
+
"typescript": "^5.4.0",
|
|
35
|
+
"vitest": "^1.5.0"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"@airdraft/core": "*"
|
|
39
|
+
},
|
|
40
|
+
"engines": { "node": ">=18.0.0" }
|
|
41
|
+
}
|