@lagapp/sdk 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 +17 -0
- package/LICENSE +21 -0
- package/README.md +207 -0
- package/dist/client.d.ts +36 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +45 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +67 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +103 -0
- package/dist/errors.js.map +1 -0
- package/dist/http.d.ts +61 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +187 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/pagination.d.ts +39 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +26 -0
- package/dist/pagination.js.map +1 -0
- package/dist/resources/dms.d.ts +39 -0
- package/dist/resources/dms.d.ts.map +1 -0
- package/dist/resources/dms.js +76 -0
- package/dist/resources/dms.js.map +1 -0
- package/dist/resources/event-guests.d.ts +30 -0
- package/dist/resources/event-guests.d.ts.map +1 -0
- package/dist/resources/event-guests.js +39 -0
- package/dist/resources/event-guests.js.map +1 -0
- package/dist/resources/event-templates.d.ts +24 -0
- package/dist/resources/event-templates.d.ts.map +1 -0
- package/dist/resources/event-templates.js +42 -0
- package/dist/resources/event-templates.js.map +1 -0
- package/dist/resources/events.d.ts +38 -0
- package/dist/resources/events.d.ts.map +1 -0
- package/dist/resources/events.js +73 -0
- package/dist/resources/events.js.map +1 -0
- package/dist/resources/friends.d.ts +32 -0
- package/dist/resources/friends.d.ts.map +1 -0
- package/dist/resources/friends.js +65 -0
- package/dist/resources/friends.js.map +1 -0
- package/dist/resources/images.d.ts +41 -0
- package/dist/resources/images.d.ts.map +1 -0
- package/dist/resources/images.js +106 -0
- package/dist/resources/images.js.map +1 -0
- package/dist/resources/room-messages.d.ts +24 -0
- package/dist/resources/room-messages.d.ts.map +1 -0
- package/dist/resources/room-messages.js +49 -0
- package/dist/resources/room-messages.js.map +1 -0
- package/dist/resources/rooms.d.ts +24 -0
- package/dist/resources/rooms.d.ts.map +1 -0
- package/dist/resources/rooms.js +42 -0
- package/dist/resources/rooms.js.map +1 -0
- package/dist/resources/server-invites.d.ts +29 -0
- package/dist/resources/server-invites.d.ts.map +1 -0
- package/dist/resources/server-invites.js +59 -0
- package/dist/resources/server-invites.js.map +1 -0
- package/dist/resources/server-members.d.ts +27 -0
- package/dist/resources/server-members.d.ts.map +1 -0
- package/dist/resources/server-members.js +64 -0
- package/dist/resources/server-members.js.map +1 -0
- package/dist/resources/server-roles.d.ts +23 -0
- package/dist/resources/server-roles.d.ts.map +1 -0
- package/dist/resources/server-roles.js +51 -0
- package/dist/resources/server-roles.js.map +1 -0
- package/dist/resources/servers.d.ts +37 -0
- package/dist/resources/servers.d.ts.map +1 -0
- package/dist/resources/servers.js +72 -0
- package/dist/resources/servers.js.map +1 -0
- package/dist/resources/system.d.ts +20 -0
- package/dist/resources/system.d.ts.map +1 -0
- package/dist/resources/system.js +27 -0
- package/dist/resources/system.js.map +1 -0
- package/dist/resources/users.d.ts +48 -0
- package/dist/resources/users.d.ts.map +1 -0
- package/dist/resources/users.js +103 -0
- package/dist/resources/users.js.map +1 -0
- package/dist/types/common.d.ts +27 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +23 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/dm.d.ts +33 -0
- package/dist/types/dm.d.ts.map +1 -0
- package/dist/types/dm.js +2 -0
- package/dist/types/dm.js.map +1 -0
- package/dist/types/event.d.ts +101 -0
- package/dist/types/event.d.ts.map +1 -0
- package/dist/types/event.js +2 -0
- package/dist/types/event.js.map +1 -0
- package/dist/types/friend.d.ts +51 -0
- package/dist/types/friend.d.ts.map +1 -0
- package/dist/types/friend.js +2 -0
- package/dist/types/friend.js.map +1 -0
- package/dist/types/image.d.ts +33 -0
- package/dist/types/image.d.ts.map +1 -0
- package/dist/types/image.js +3 -0
- package/dist/types/image.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/room.d.ts +98 -0
- package/dist/types/room.d.ts.map +1 -0
- package/dist/types/room.js +2 -0
- package/dist/types/room.js.map +1 -0
- package/dist/types/server.d.ts +134 -0
- package/dist/types/server.d.ts.map +1 -0
- package/dist/types/server.js +2 -0
- package/dist/types/server.js.map +1 -0
- package/dist/types/system.d.ts +14 -0
- package/dist/types/system.d.ts.map +1 -0
- package/dist/types/system.js +2 -0
- package/dist/types/system.js.map +1 -0
- package/dist/types/user.d.ts +61 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +2 -0
- package/dist/types/user.js.map +1 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/package.json +54 -0
package/dist/http.js
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { errorFromResponse, LagApiError, LagConnectionError, LagRateLimitError, } from './errors.js';
|
|
2
|
+
import { USER_AGENT } from './version.js';
|
|
3
|
+
const DEFAULT_BASE_URL = 'https://api.trylag.com';
|
|
4
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
5
|
+
const DEFAULT_MAX_RETRIES = 2;
|
|
6
|
+
/**
|
|
7
|
+
* Low-level HTTP transport shared by every resource.
|
|
8
|
+
*
|
|
9
|
+
* Responsibilities:
|
|
10
|
+
* - Inject Authorization, User-Agent, Accept headers.
|
|
11
|
+
* - Build query strings, JSON-encode bodies, parse JSON responses.
|
|
12
|
+
* - Map non-2xx responses to typed errors.
|
|
13
|
+
* - Retry transient failures (5xx, 429, network) with exponential backoff.
|
|
14
|
+
* - Honor the server's `Retry-After` header on 429.
|
|
15
|
+
* - Enforce per-request timeouts via AbortController.
|
|
16
|
+
*/
|
|
17
|
+
export class HttpClient {
|
|
18
|
+
token;
|
|
19
|
+
baseUrl;
|
|
20
|
+
timeoutMs;
|
|
21
|
+
maxRetries;
|
|
22
|
+
userAgent;
|
|
23
|
+
fetchImpl;
|
|
24
|
+
constructor(opts) {
|
|
25
|
+
if (!opts.token || typeof opts.token !== 'string') {
|
|
26
|
+
throw new TypeError('LagClient: `token` is required');
|
|
27
|
+
}
|
|
28
|
+
this.token = opts.token;
|
|
29
|
+
this.baseUrl = (opts.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, '');
|
|
30
|
+
this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
31
|
+
this.maxRetries = opts.maxRetries ?? DEFAULT_MAX_RETRIES;
|
|
32
|
+
this.userAgent = opts.userAgent ?? USER_AGENT;
|
|
33
|
+
this.fetchImpl = opts.fetch ?? globalThis.fetch;
|
|
34
|
+
if (!this.fetchImpl) {
|
|
35
|
+
throw new Error('LagClient: global fetch not available; pass `fetch` in options');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async request(opts) {
|
|
39
|
+
const url = this.buildUrl(opts.path, opts.query);
|
|
40
|
+
const headers = this.buildHeaders(opts);
|
|
41
|
+
const body = this.buildBody(opts);
|
|
42
|
+
const maxRetries = opts.maxRetries ?? this.maxRetries;
|
|
43
|
+
const timeoutMs = opts.timeoutMs ?? this.timeoutMs;
|
|
44
|
+
let attempt = 0;
|
|
45
|
+
// The retry loop. We retry on 5xx, 429, and connection errors. We never
|
|
46
|
+
// retry 4xx (except 429), since the request is invalid as-is.
|
|
47
|
+
for (;;) {
|
|
48
|
+
const controller = new AbortController();
|
|
49
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
50
|
+
let response;
|
|
51
|
+
try {
|
|
52
|
+
response = await this.fetchImpl(url, {
|
|
53
|
+
method: opts.method,
|
|
54
|
+
headers,
|
|
55
|
+
body,
|
|
56
|
+
signal: controller.signal,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
clearTimeout(timer);
|
|
61
|
+
if (attempt < maxRetries) {
|
|
62
|
+
attempt += 1;
|
|
63
|
+
await sleep(backoffDelay(attempt));
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
throw new LagConnectionError(err instanceof Error ? err.message : 'Network request failed', err);
|
|
67
|
+
}
|
|
68
|
+
clearTimeout(timer);
|
|
69
|
+
if (response.ok) {
|
|
70
|
+
return (await this.decodeBody(response));
|
|
71
|
+
}
|
|
72
|
+
const requestId = response.headers.get('x-request-id');
|
|
73
|
+
const errorBody = await this.parseErrorBody(response);
|
|
74
|
+
const retryAfter = parseRetryAfter(response.headers.get('retry-after'));
|
|
75
|
+
const error = errorFromResponse(response.status, errorBody, requestId, retryAfter);
|
|
76
|
+
const retryable = (response.status >= 500 && response.status < 600) || response.status === 429;
|
|
77
|
+
if (retryable && attempt < maxRetries) {
|
|
78
|
+
attempt += 1;
|
|
79
|
+
const wait = error instanceof LagRateLimitError && error.retryAfterSeconds != null
|
|
80
|
+
? error.retryAfterSeconds * 1000
|
|
81
|
+
: backoffDelay(attempt);
|
|
82
|
+
await sleep(wait);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
buildUrl(path, query) {
|
|
89
|
+
const normalized = path.startsWith('/') ? path : `/${path}`;
|
|
90
|
+
const url = new URL(this.baseUrl + normalized);
|
|
91
|
+
if (query) {
|
|
92
|
+
for (const [key, value] of Object.entries(query)) {
|
|
93
|
+
if (value === undefined || value === null)
|
|
94
|
+
continue;
|
|
95
|
+
url.searchParams.set(key, String(value));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return url.toString();
|
|
99
|
+
}
|
|
100
|
+
buildHeaders(opts) {
|
|
101
|
+
const headers = new Headers({
|
|
102
|
+
Authorization: `Bearer ${this.token}`,
|
|
103
|
+
Accept: 'application/json',
|
|
104
|
+
'User-Agent': this.userAgent,
|
|
105
|
+
});
|
|
106
|
+
if (opts.body !== undefined && !opts.rawBody) {
|
|
107
|
+
headers.set('Content-Type', 'application/json');
|
|
108
|
+
}
|
|
109
|
+
if (opts.headers) {
|
|
110
|
+
for (const [k, v] of Object.entries(opts.headers))
|
|
111
|
+
headers.set(k, v);
|
|
112
|
+
}
|
|
113
|
+
return headers;
|
|
114
|
+
}
|
|
115
|
+
buildBody(opts) {
|
|
116
|
+
if (opts.rawBody !== undefined)
|
|
117
|
+
return opts.rawBody;
|
|
118
|
+
if (opts.body === undefined)
|
|
119
|
+
return undefined;
|
|
120
|
+
return JSON.stringify(opts.body);
|
|
121
|
+
}
|
|
122
|
+
async decodeBody(response) {
|
|
123
|
+
if (response.status === 204)
|
|
124
|
+
return undefined;
|
|
125
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
126
|
+
if (!contentType.includes('application/json')) {
|
|
127
|
+
const text = await response.text();
|
|
128
|
+
return text.length === 0 ? undefined : text;
|
|
129
|
+
}
|
|
130
|
+
const text = await response.text();
|
|
131
|
+
if (text.length === 0)
|
|
132
|
+
return undefined;
|
|
133
|
+
try {
|
|
134
|
+
return JSON.parse(text);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return text;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async parseErrorBody(response) {
|
|
141
|
+
try {
|
|
142
|
+
const text = await response.text();
|
|
143
|
+
if (!text)
|
|
144
|
+
return null;
|
|
145
|
+
const parsed = JSON.parse(text);
|
|
146
|
+
if (typeof parsed === 'object' && parsed !== null && typeof parsed.message === 'string') {
|
|
147
|
+
return {
|
|
148
|
+
error: typeof parsed.error === 'string' ? parsed.error : `HTTP ${response.status}`,
|
|
149
|
+
message: parsed.message,
|
|
150
|
+
statusCode: typeof parsed.statusCode === 'number' ? parsed.statusCode : response.status,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/** Exponential backoff with jitter. Capped at ~8s. */
|
|
161
|
+
function backoffDelay(attempt) {
|
|
162
|
+
const base = Math.min(8000, 250 * 2 ** (attempt - 1));
|
|
163
|
+
const jitter = Math.random() * 250;
|
|
164
|
+
return base + jitter;
|
|
165
|
+
}
|
|
166
|
+
function sleep(ms) {
|
|
167
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
168
|
+
}
|
|
169
|
+
function parseRetryAfter(value) {
|
|
170
|
+
if (!value)
|
|
171
|
+
return null;
|
|
172
|
+
const seconds = Number(value);
|
|
173
|
+
if (Number.isFinite(seconds))
|
|
174
|
+
return seconds;
|
|
175
|
+
// HTTP-date form. Parse and convert to seconds-from-now.
|
|
176
|
+
const date = Date.parse(value);
|
|
177
|
+
if (Number.isFinite(date)) {
|
|
178
|
+
return Math.max(0, Math.ceil((date - Date.now()) / 1000));
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Re-export so consumers can `instanceof`-check transport-layer errors
|
|
184
|
+
* without importing from a deeper path.
|
|
185
|
+
*/
|
|
186
|
+
export { LagApiError };
|
|
187
|
+
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export { LagClient } from './client.js';
|
|
2
|
+
export type { LagClientOptions, RequestOptions } from './http.js';
|
|
3
|
+
export { LagApiError, LagAuthError, LagPermissionError, LagNotFoundError, LagConflictError, LagRateLimitError, LagServerError, LagConnectionError, } from './errors.js';
|
|
4
|
+
export type { LagApiErrorBody } from './errors.js';
|
|
5
|
+
export { paginate } from './pagination.js';
|
|
6
|
+
export type { CursorParams, Page, PaginatedResponse } from './pagination.js';
|
|
7
|
+
export { SDK_VERSION, USER_AGENT } from './version.js';
|
|
8
|
+
export { SystemResource } from './resources/system.js';
|
|
9
|
+
export { UsersResource } from './resources/users.js';
|
|
10
|
+
export { FriendsResource } from './resources/friends.js';
|
|
11
|
+
export { DmsResource } from './resources/dms.js';
|
|
12
|
+
export { ServersResource } from './resources/servers.js';
|
|
13
|
+
export { ServerInvitesResource } from './resources/server-invites.js';
|
|
14
|
+
export { ServerMembersResource } from './resources/server-members.js';
|
|
15
|
+
export { ServerRolesResource } from './resources/server-roles.js';
|
|
16
|
+
export { RoomsResource } from './resources/rooms.js';
|
|
17
|
+
export { RoomMessagesResource } from './resources/room-messages.js';
|
|
18
|
+
export { EventsResource } from './resources/events.js';
|
|
19
|
+
export { EventGuestsResource } from './resources/event-guests.js';
|
|
20
|
+
export { EventTemplatesResource } from './resources/event-templates.js';
|
|
21
|
+
export { ImagesResource, type ImageInput, type UploadImageOptions } from './resources/images.js';
|
|
22
|
+
export * from './types/index.js';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAElE,OAAO,EACL,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAKvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAGjG,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export { LagClient } from './client.js';
|
|
2
|
+
export { LagApiError, LagAuthError, LagPermissionError, LagNotFoundError, LagConflictError, LagRateLimitError, LagServerError, LagConnectionError, } from './errors.js';
|
|
3
|
+
export { paginate } from './pagination.js';
|
|
4
|
+
export { SDK_VERSION, USER_AGENT } from './version.js';
|
|
5
|
+
// Resources are not constructed directly by users, but exporting them lets
|
|
6
|
+
// people who want strict typing for handlers (e.g. dependency injection) get
|
|
7
|
+
// at the resource classes themselves.
|
|
8
|
+
export { SystemResource } from './resources/system.js';
|
|
9
|
+
export { UsersResource } from './resources/users.js';
|
|
10
|
+
export { FriendsResource } from './resources/friends.js';
|
|
11
|
+
export { DmsResource } from './resources/dms.js';
|
|
12
|
+
export { ServersResource } from './resources/servers.js';
|
|
13
|
+
export { ServerInvitesResource } from './resources/server-invites.js';
|
|
14
|
+
export { ServerMembersResource } from './resources/server-members.js';
|
|
15
|
+
export { ServerRolesResource } from './resources/server-roles.js';
|
|
16
|
+
export { RoomsResource } from './resources/rooms.js';
|
|
17
|
+
export { RoomMessagesResource } from './resources/room-messages.js';
|
|
18
|
+
export { EventsResource } from './resources/events.js';
|
|
19
|
+
export { EventGuestsResource } from './resources/event-guests.js';
|
|
20
|
+
export { EventTemplatesResource } from './resources/event-templates.js';
|
|
21
|
+
export { ImagesResource } from './resources/images.js';
|
|
22
|
+
// All the data types from the API surface.
|
|
23
|
+
export * from './types/index.js';
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EACL,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEvD,2EAA2E;AAC3E,6EAA6E;AAC7E,sCAAsC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,cAAc,EAA4C,MAAM,uBAAuB,CAAC;AAEjG,2CAA2C;AAC3C,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { HttpClient } from './http.js';
|
|
2
|
+
/**
|
|
3
|
+
* Standard cursor-paginated response from the Lag API.
|
|
4
|
+
*
|
|
5
|
+
* Lag uses a single shape across DM and room message endpoints:
|
|
6
|
+
* `{ messages, hasMore, nextCursor }`. The cursor is an ISO timestamp the
|
|
7
|
+
* server uses with `lt(createdAt)` to fetch the next page (older messages).
|
|
8
|
+
*/
|
|
9
|
+
export interface PaginatedResponse<T> {
|
|
10
|
+
messages: T[];
|
|
11
|
+
hasMore: boolean;
|
|
12
|
+
nextCursor: string | null;
|
|
13
|
+
}
|
|
14
|
+
export interface CursorParams {
|
|
15
|
+
/** Page size. Server caps at 100. Defaults to 50 if omitted. */
|
|
16
|
+
limit?: number;
|
|
17
|
+
/** Opaque cursor returned from the previous page's `nextCursor`. */
|
|
18
|
+
cursor?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* An async-iterable page walker for cursor-paginated endpoints.
|
|
22
|
+
*
|
|
23
|
+
* Usage:
|
|
24
|
+
* ```ts
|
|
25
|
+
* for await (const page of client.dms.iterMessages(convId)) {
|
|
26
|
+
* for (const msg of page.items) console.log(msg.content);
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* Each yielded page also includes the underlying `nextCursor`, so callers can
|
|
31
|
+
* stop iterating early without losing their place.
|
|
32
|
+
*/
|
|
33
|
+
export interface Page<T> {
|
|
34
|
+
items: T[];
|
|
35
|
+
hasMore: boolean;
|
|
36
|
+
nextCursor: string | null;
|
|
37
|
+
}
|
|
38
|
+
export declare function paginate<T>(http: HttpClient, path: string, initialParams: CursorParams, itemsKey: string): AsyncGenerator<Page<T>, void, void>;
|
|
39
|
+
//# sourceMappingURL=pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAuB,QAAQ,CAAC,CAAC,EAC/B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,YAAY,EAE3B,QAAQ,EAAE,MAAM,GACf,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAwBrC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export async function* paginate(http, path, initialParams,
|
|
2
|
+
// The "items" field name varies (e.g. "messages", "events"). Pass a getter.
|
|
3
|
+
itemsKey) {
|
|
4
|
+
let cursor = initialParams.cursor;
|
|
5
|
+
const limit = initialParams.limit;
|
|
6
|
+
for (;;) {
|
|
7
|
+
const query = {};
|
|
8
|
+
if (limit !== undefined)
|
|
9
|
+
query.limit = limit;
|
|
10
|
+
if (cursor !== undefined)
|
|
11
|
+
query.cursor = cursor;
|
|
12
|
+
const response = await http.request({
|
|
13
|
+
method: 'GET',
|
|
14
|
+
path,
|
|
15
|
+
query,
|
|
16
|
+
});
|
|
17
|
+
const items = response[itemsKey] ?? [];
|
|
18
|
+
const hasMore = response.hasMore === true;
|
|
19
|
+
const nextCursor = response.nextCursor ?? null;
|
|
20
|
+
yield { items, hasMore, nextCursor };
|
|
21
|
+
if (!hasMore || !nextCursor)
|
|
22
|
+
return;
|
|
23
|
+
cursor = nextCursor;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAyCA,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,QAAQ,CAC7B,IAAgB,EAChB,IAAY,EACZ,aAA2B;AAC3B,4EAA4E;AAC5E,QAAgB;IAEhB,IAAI,MAAM,GAAuB,aAAa,CAAC,MAAM,CAAC;IACtD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;IAElC,SAAS,CAAC;QACR,MAAM,KAAK,GAAgD,EAAE,CAAC;QAC9D,IAAI,KAAK,KAAK,SAAS;YAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QAC7C,IAAI,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAEhD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAA0B;YAC3D,MAAM,EAAE,KAAK;YACb,IAAI;YACJ,KAAK;SACN,CAAC,CAAC;QAEH,MAAM,KAAK,GAAI,QAAQ,CAAC,QAAQ,CAAS,IAAI,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC;QAC1C,MAAM,UAAU,GAAI,QAAQ,CAAC,UAA4B,IAAI,IAAI,CAAC;QAElE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QAErC,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU;YAAE,OAAO;QACpC,MAAM,GAAG,UAAU,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { HttpClient } from '../http.js';
|
|
2
|
+
import { type CursorParams, type Page } from '../pagination.js';
|
|
3
|
+
import type { DmConversation, DmMessage, EditDmMessageBody, SendDmMessageBody } from '../types/dm.js';
|
|
4
|
+
import type { PaginatedResponse } from '../pagination.js';
|
|
5
|
+
/**
|
|
6
|
+
* Direct messages resource.
|
|
7
|
+
*
|
|
8
|
+
* Conversations are auto-created the first time you `create({ userId })` for
|
|
9
|
+
* a friend. The other side must be in your friends list (with status
|
|
10
|
+
* `accepted`); the API returns 403 otherwise. Messages are paginated by an
|
|
11
|
+
* ISO timestamp cursor (older-than).
|
|
12
|
+
*/
|
|
13
|
+
export declare class DmsResource {
|
|
14
|
+
private readonly http;
|
|
15
|
+
constructor(http: HttpClient);
|
|
16
|
+
/** GET /dms - list all DM conversations the caller participates in. */
|
|
17
|
+
list(): Promise<DmConversation[]>;
|
|
18
|
+
/** POST /dms - create or fetch the conversation with another user. */
|
|
19
|
+
create(userId: string): Promise<DmConversation>;
|
|
20
|
+
/** GET /dms/:id - fetch a single conversation by its ID. */
|
|
21
|
+
get(conversationId: string): Promise<DmConversation>;
|
|
22
|
+
/** GET /dms/:id/messages - one page of messages, oldest-first within the page. */
|
|
23
|
+
listMessages(conversationId: string, params?: CursorParams): Promise<PaginatedResponse<DmMessage>>;
|
|
24
|
+
/**
|
|
25
|
+
* Async-iterate every page of messages, walking the cursor automatically.
|
|
26
|
+
*
|
|
27
|
+
* for await (const page of client.dms.iterMessages(convId)) {
|
|
28
|
+
* for (const m of page.items) console.log(m.content);
|
|
29
|
+
* }
|
|
30
|
+
*/
|
|
31
|
+
iterMessages(conversationId: string, params?: CursorParams): AsyncGenerator<Page<DmMessage>, void, void>;
|
|
32
|
+
/** POST /dms/:id/messages - send a message (text and/or image). */
|
|
33
|
+
sendMessage(conversationId: string, body: SendDmMessageBody): Promise<DmMessage>;
|
|
34
|
+
/** PATCH /dms/:id/messages/:messageId - edit a message you authored. */
|
|
35
|
+
editMessage(conversationId: string, messageId: string, body: EditDmMessageBody): Promise<DmMessage>;
|
|
36
|
+
/** DELETE /dms/:id/messages/:messageId - delete a message you authored. */
|
|
37
|
+
deleteMessage(conversationId: string, messageId: string): Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=dms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dms.d.ts","sourceRoot":"","sources":["../../src/resources/dms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAY,KAAK,YAAY,EAAE,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;;;;;GAOG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,uEAAuE;IACvE,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIjC,sEAAsE;IACtE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAQ/C,4DAA4D;IAC5D,GAAG,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAOpD,kFAAkF;IAClF,YAAY,CACV,cAAc,EAAE,MAAM,EACtB,MAAM,GAAE,YAAiB,GACxB,OAAO,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAQxC;;;;;;OAMG;IACH,YAAY,CACV,cAAc,EAAE,MAAM,EACtB,MAAM,GAAE,YAAiB,GACxB,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;IAS9C,mEAAmE;IACnE,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC;IAQhF,wEAAwE;IACxE,WAAW,CACT,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,SAAS,CAAC;IAQrB,2EAA2E;IAC3E,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMxE"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { paginate } from '../pagination.js';
|
|
2
|
+
/**
|
|
3
|
+
* Direct messages resource.
|
|
4
|
+
*
|
|
5
|
+
* Conversations are auto-created the first time you `create({ userId })` for
|
|
6
|
+
* a friend. The other side must be in your friends list (with status
|
|
7
|
+
* `accepted`); the API returns 403 otherwise. Messages are paginated by an
|
|
8
|
+
* ISO timestamp cursor (older-than).
|
|
9
|
+
*/
|
|
10
|
+
export class DmsResource {
|
|
11
|
+
http;
|
|
12
|
+
constructor(http) {
|
|
13
|
+
this.http = http;
|
|
14
|
+
}
|
|
15
|
+
/** GET /dms - list all DM conversations the caller participates in. */
|
|
16
|
+
list() {
|
|
17
|
+
return this.http.request({ method: 'GET', path: '/dms' });
|
|
18
|
+
}
|
|
19
|
+
/** POST /dms - create or fetch the conversation with another user. */
|
|
20
|
+
create(userId) {
|
|
21
|
+
return this.http.request({
|
|
22
|
+
method: 'POST',
|
|
23
|
+
path: '/dms',
|
|
24
|
+
body: { userId },
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/** GET /dms/:id - fetch a single conversation by its ID. */
|
|
28
|
+
get(conversationId) {
|
|
29
|
+
return this.http.request({
|
|
30
|
+
method: 'GET',
|
|
31
|
+
path: `/dms/${encodeURIComponent(conversationId)}`,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/** GET /dms/:id/messages - one page of messages, oldest-first within the page. */
|
|
35
|
+
listMessages(conversationId, params = {}) {
|
|
36
|
+
return this.http.request({
|
|
37
|
+
method: 'GET',
|
|
38
|
+
path: `/dms/${encodeURIComponent(conversationId)}/messages`,
|
|
39
|
+
query: { limit: params.limit, cursor: params.cursor },
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Async-iterate every page of messages, walking the cursor automatically.
|
|
44
|
+
*
|
|
45
|
+
* for await (const page of client.dms.iterMessages(convId)) {
|
|
46
|
+
* for (const m of page.items) console.log(m.content);
|
|
47
|
+
* }
|
|
48
|
+
*/
|
|
49
|
+
iterMessages(conversationId, params = {}) {
|
|
50
|
+
return paginate(this.http, `/dms/${encodeURIComponent(conversationId)}/messages`, params, 'messages');
|
|
51
|
+
}
|
|
52
|
+
/** POST /dms/:id/messages - send a message (text and/or image). */
|
|
53
|
+
sendMessage(conversationId, body) {
|
|
54
|
+
return this.http.request({
|
|
55
|
+
method: 'POST',
|
|
56
|
+
path: `/dms/${encodeURIComponent(conversationId)}/messages`,
|
|
57
|
+
body,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/** PATCH /dms/:id/messages/:messageId - edit a message you authored. */
|
|
61
|
+
editMessage(conversationId, messageId, body) {
|
|
62
|
+
return this.http.request({
|
|
63
|
+
method: 'PATCH',
|
|
64
|
+
path: `/dms/${encodeURIComponent(conversationId)}/messages/${encodeURIComponent(messageId)}`,
|
|
65
|
+
body,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/** DELETE /dms/:id/messages/:messageId - delete a message you authored. */
|
|
69
|
+
deleteMessage(conversationId, messageId) {
|
|
70
|
+
return this.http.request({
|
|
71
|
+
method: 'DELETE',
|
|
72
|
+
path: `/dms/${encodeURIComponent(conversationId)}/messages/${encodeURIComponent(messageId)}`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=dms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dms.js","sourceRoot":"","sources":["../../src/resources/dms.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAgC,MAAM,kBAAkB,CAAC;AAS1E;;;;;;;GAOG;AACH,MAAM,OAAO,WAAW;IACO;IAA7B,YAA6B,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,uEAAuE;IACvE,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,sEAAsE;IACtE,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAiB;YACvC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,EAAE,MAAM,EAAE;SACjB,CAAC,CAAC;IACL,CAAC;IAED,4DAA4D;IAC5D,GAAG,CAAC,cAAsB;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAiB;YACvC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,QAAQ,kBAAkB,CAAC,cAAc,CAAC,EAAE;SACnD,CAAC,CAAC;IACL,CAAC;IAED,kFAAkF;IAClF,YAAY,CACV,cAAsB,EACtB,SAAuB,EAAE;QAEzB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAA+B;YACrD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,QAAQ,kBAAkB,CAAC,cAAc,CAAC,WAAW;YAC3D,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;SACtD,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CACV,cAAsB,EACtB,SAAuB,EAAE;QAEzB,OAAO,QAAQ,CACb,IAAI,CAAC,IAAI,EACT,QAAQ,kBAAkB,CAAC,cAAc,CAAC,WAAW,EACrD,MAAM,EACN,UAAU,CACX,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,WAAW,CAAC,cAAsB,EAAE,IAAuB;QACzD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAY;YAClC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,QAAQ,kBAAkB,CAAC,cAAc,CAAC,WAAW;YAC3D,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,WAAW,CACT,cAAsB,EACtB,SAAiB,EACjB,IAAuB;QAEvB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAY;YAClC,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,QAAQ,kBAAkB,CAAC,cAAc,CAAC,aAAa,kBAAkB,CAAC,SAAS,CAAC,EAAE;YAC5F,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,aAAa,CAAC,cAAsB,EAAE,SAAiB;QACrD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAO;YAC7B,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,QAAQ,kBAAkB,CAAC,cAAc,CAAC,aAAa,kBAAkB,CAAC,SAAS,CAAC,EAAE;SAC7F,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { HttpClient } from '../http.js';
|
|
2
|
+
import type { EventGuest } from '../types/event.js';
|
|
3
|
+
/**
|
|
4
|
+
* Event guests sub-resource. Reachable via `client.events.guests`.
|
|
5
|
+
*
|
|
6
|
+
* "Guest" here means an external (unauthenticated) joiner who requested
|
|
7
|
+
* access via an event share link. Listing/admitting/rejecting are host
|
|
8
|
+
* actions and require server membership plus event-creator-or-MANAGE_EVENTS.
|
|
9
|
+
*
|
|
10
|
+
* The guest-side flow (joining as a guest, fetching a voice token without
|
|
11
|
+
* auth) is intentionally not exposed - it lives outside the public REST
|
|
12
|
+
* surface a token-bearing client cares about.
|
|
13
|
+
*/
|
|
14
|
+
export declare class EventGuestsResource {
|
|
15
|
+
private readonly http;
|
|
16
|
+
constructor(http: HttpClient);
|
|
17
|
+
/** GET /servers/:id/events/:eventId/guests - list pending and resolved guests. */
|
|
18
|
+
list(serverId: string, eventId: string): Promise<{
|
|
19
|
+
guests: EventGuest[];
|
|
20
|
+
}>;
|
|
21
|
+
/** POST /servers/:id/events/:eventId/guests/:guestId/admit - approve a waiting guest. */
|
|
22
|
+
admit(serverId: string, eventId: string, guestId: string): Promise<{
|
|
23
|
+
status: 'admitted';
|
|
24
|
+
}>;
|
|
25
|
+
/** POST /servers/:id/events/:eventId/guests/:guestId/reject - reject a waiting guest. */
|
|
26
|
+
reject(serverId: string, eventId: string, guestId: string): Promise<{
|
|
27
|
+
status: 'rejected';
|
|
28
|
+
}>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=event-guests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-guests.d.ts","sourceRoot":"","sources":["../../src/resources/event-guests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;;;;;;GAUG;AACH,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,kFAAkF;IAClF,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IAO1E,yFAAyF;IACzF,KAAK,CACH,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;IAOlC,yFAAyF;IACzF,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;CAMnC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event guests sub-resource. Reachable via `client.events.guests`.
|
|
3
|
+
*
|
|
4
|
+
* "Guest" here means an external (unauthenticated) joiner who requested
|
|
5
|
+
* access via an event share link. Listing/admitting/rejecting are host
|
|
6
|
+
* actions and require server membership plus event-creator-or-MANAGE_EVENTS.
|
|
7
|
+
*
|
|
8
|
+
* The guest-side flow (joining as a guest, fetching a voice token without
|
|
9
|
+
* auth) is intentionally not exposed - it lives outside the public REST
|
|
10
|
+
* surface a token-bearing client cares about.
|
|
11
|
+
*/
|
|
12
|
+
export class EventGuestsResource {
|
|
13
|
+
http;
|
|
14
|
+
constructor(http) {
|
|
15
|
+
this.http = http;
|
|
16
|
+
}
|
|
17
|
+
/** GET /servers/:id/events/:eventId/guests - list pending and resolved guests. */
|
|
18
|
+
list(serverId, eventId) {
|
|
19
|
+
return this.http.request({
|
|
20
|
+
method: 'GET',
|
|
21
|
+
path: `/servers/${encodeURIComponent(serverId)}/events/${encodeURIComponent(eventId)}/guests`,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/** POST /servers/:id/events/:eventId/guests/:guestId/admit - approve a waiting guest. */
|
|
25
|
+
admit(serverId, eventId, guestId) {
|
|
26
|
+
return this.http.request({
|
|
27
|
+
method: 'POST',
|
|
28
|
+
path: `/servers/${encodeURIComponent(serverId)}/events/${encodeURIComponent(eventId)}/guests/${encodeURIComponent(guestId)}/admit`,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/** POST /servers/:id/events/:eventId/guests/:guestId/reject - reject a waiting guest. */
|
|
32
|
+
reject(serverId, eventId, guestId) {
|
|
33
|
+
return this.http.request({
|
|
34
|
+
method: 'POST',
|
|
35
|
+
path: `/servers/${encodeURIComponent(serverId)}/events/${encodeURIComponent(eventId)}/guests/${encodeURIComponent(guestId)}/reject`,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=event-guests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-guests.js","sourceRoot":"","sources":["../../src/resources/event-guests.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,MAAM,OAAO,mBAAmB;IACD;IAA7B,YAA6B,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,kFAAkF;IAClF,IAAI,CAAC,QAAgB,EAAE,OAAe;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAA2B;YACjD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,YAAY,kBAAkB,CAAC,QAAQ,CAAC,WAAW,kBAAkB,CAAC,OAAO,CAAC,SAAS;SAC9F,CAAC,CAAC;IACL,CAAC;IAED,yFAAyF;IACzF,KAAK,CACH,QAAgB,EAChB,OAAe,EACf,OAAe;QAEf,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAyB;YAC/C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,YAAY,kBAAkB,CAAC,QAAQ,CAAC,WAAW,kBAAkB,CAAC,OAAO,CAAC,WAAW,kBAAkB,CAAC,OAAO,CAAC,QAAQ;SACnI,CAAC,CAAC;IACL,CAAC;IAED,yFAAyF;IACzF,MAAM,CACJ,QAAgB,EAChB,OAAe,EACf,OAAe;QAEf,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAyB;YAC/C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,YAAY,kBAAkB,CAAC,QAAQ,CAAC,WAAW,kBAAkB,CAAC,OAAO,CAAC,WAAW,kBAAkB,CAAC,OAAO,CAAC,SAAS;SACpI,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { HttpClient } from '../http.js';
|
|
2
|
+
import type { CreateEventTemplateBody, EventTemplate, UpdateEventTemplateBody } from '../types/event.js';
|
|
3
|
+
/**
|
|
4
|
+
* Event templates sub-resource. Templates encode a recurring event using
|
|
5
|
+
* an iCalendar `RRULE` plus a timezone and a HH:MM start-of-day time. The
|
|
6
|
+
* server materializes individual events 48h ahead via a background job.
|
|
7
|
+
*/
|
|
8
|
+
export declare class EventTemplatesResource {
|
|
9
|
+
private readonly http;
|
|
10
|
+
constructor(http: HttpClient);
|
|
11
|
+
/** GET /servers/:id/event-templates - list all recurring templates in a server. */
|
|
12
|
+
list(serverId: string): Promise<{
|
|
13
|
+
templates: EventTemplate[];
|
|
14
|
+
}>;
|
|
15
|
+
/** POST /servers/:id/event-templates - create a new recurring template. */
|
|
16
|
+
create(serverId: string, body: CreateEventTemplateBody): Promise<EventTemplate>;
|
|
17
|
+
/** PATCH /servers/:id/event-templates/:templateId - update an existing template. */
|
|
18
|
+
update(serverId: string, templateId: string, body: UpdateEventTemplateBody): Promise<EventTemplate>;
|
|
19
|
+
/** DELETE /servers/:id/event-templates/:templateId - delete a template and its scheduled events. */
|
|
20
|
+
delete(serverId: string, templateId: string): Promise<{
|
|
21
|
+
ok: true;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=event-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-templates.d.ts","sourceRoot":"","sources":["../../src/resources/event-templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,uBAAuB,EACvB,aAAa,EACb,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAE3B;;;;GAIG;AACH,qBAAa,sBAAsB;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,mFAAmF;IACnF,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC;IAO/D,2EAA2E;IAC3E,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,aAAa,CAAC;IAQ/E,oFAAoF;IACpF,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,aAAa,CAAC;IAQzB,oGAAoG;IACpG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC;CAMpE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event templates sub-resource. Templates encode a recurring event using
|
|
3
|
+
* an iCalendar `RRULE` plus a timezone and a HH:MM start-of-day time. The
|
|
4
|
+
* server materializes individual events 48h ahead via a background job.
|
|
5
|
+
*/
|
|
6
|
+
export class EventTemplatesResource {
|
|
7
|
+
http;
|
|
8
|
+
constructor(http) {
|
|
9
|
+
this.http = http;
|
|
10
|
+
}
|
|
11
|
+
/** GET /servers/:id/event-templates - list all recurring templates in a server. */
|
|
12
|
+
list(serverId) {
|
|
13
|
+
return this.http.request({
|
|
14
|
+
method: 'GET',
|
|
15
|
+
path: `/servers/${encodeURIComponent(serverId)}/event-templates`,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/** POST /servers/:id/event-templates - create a new recurring template. */
|
|
19
|
+
create(serverId, body) {
|
|
20
|
+
return this.http.request({
|
|
21
|
+
method: 'POST',
|
|
22
|
+
path: `/servers/${encodeURIComponent(serverId)}/event-templates`,
|
|
23
|
+
body,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/** PATCH /servers/:id/event-templates/:templateId - update an existing template. */
|
|
27
|
+
update(serverId, templateId, body) {
|
|
28
|
+
return this.http.request({
|
|
29
|
+
method: 'PATCH',
|
|
30
|
+
path: `/servers/${encodeURIComponent(serverId)}/event-templates/${encodeURIComponent(templateId)}`,
|
|
31
|
+
body,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/** DELETE /servers/:id/event-templates/:templateId - delete a template and its scheduled events. */
|
|
35
|
+
delete(serverId, templateId) {
|
|
36
|
+
return this.http.request({
|
|
37
|
+
method: 'DELETE',
|
|
38
|
+
path: `/servers/${encodeURIComponent(serverId)}/event-templates/${encodeURIComponent(templateId)}`,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=event-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-templates.js","sourceRoot":"","sources":["../../src/resources/event-templates.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IACJ;IAA7B,YAA6B,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,mFAAmF;IACnF,IAAI,CAAC,QAAgB;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAiC;YACvD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,YAAY,kBAAkB,CAAC,QAAQ,CAAC,kBAAkB;SACjE,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,MAAM,CAAC,QAAgB,EAAE,IAA6B;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAgB;YACtC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,YAAY,kBAAkB,CAAC,QAAQ,CAAC,kBAAkB;YAChE,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IACpF,MAAM,CACJ,QAAgB,EAChB,UAAkB,EAClB,IAA6B;QAE7B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAgB;YACtC,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,YAAY,kBAAkB,CAAC,QAAQ,CAAC,oBAAoB,kBAAkB,CAAC,UAAU,CAAC,EAAE;YAClG,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAED,oGAAoG;IACpG,MAAM,CAAC,QAAgB,EAAE,UAAkB;QACzC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAe;YACrC,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,YAAY,kBAAkB,CAAC,QAAQ,CAAC,oBAAoB,kBAAkB,CAAC,UAAU,CAAC,EAAE;SACnG,CAAC,CAAC;IACL,CAAC;CACF"}
|