@xylex-group/athena 2.10.0 → 2.12.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.
Files changed (62) hide show
  1. package/README.md +112 -28
  2. package/dist/browser.cjs +333 -240
  3. package/dist/browser.cjs.map +1 -1
  4. package/dist/browser.d.cts +9 -8
  5. package/dist/browser.d.ts +9 -8
  6. package/dist/browser.js +333 -240
  7. package/dist/browser.js.map +1 -1
  8. package/dist/cli/index.cjs +306 -240
  9. package/dist/cli/index.cjs.map +1 -1
  10. package/dist/cli/index.d.cts +4 -3
  11. package/dist/cli/index.d.ts +4 -3
  12. package/dist/cli/index.js +306 -240
  13. package/dist/cli/index.js.map +1 -1
  14. package/dist/{client-BYii6dU9.d.ts → client-C3x75Zgn.d.cts} +22 -9
  15. package/dist/{client-B7EQ_hPV.d.cts → client-QUbAs7E8.d.ts} +22 -9
  16. package/dist/index.cjs +333 -240
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +9 -8
  19. package/dist/index.d.ts +9 -8
  20. package/dist/index.js +333 -240
  21. package/dist/index.js.map +1 -1
  22. package/dist/{model-form-DACdBLYG.d.cts → model-form-CD1uhWSh.d.cts} +2 -1
  23. package/dist/{model-form-ByvyyvxB.d.ts → model-form-Dm69I-oO.d.ts} +2 -1
  24. package/dist/{module-DbHlxpeR.d.ts → module-CW3tWJ10.d.ts} +5 -4
  25. package/dist/{module-DC96HJa3.d.cts → module-Cxcurfes.d.cts} +5 -4
  26. package/dist/next/client.cjs +333 -240
  27. package/dist/next/client.cjs.map +1 -1
  28. package/dist/next/client.d.cts +4 -3
  29. package/dist/next/client.d.ts +4 -3
  30. package/dist/next/client.js +333 -240
  31. package/dist/next/client.js.map +1 -1
  32. package/dist/next/server.cjs +333 -240
  33. package/dist/next/server.cjs.map +1 -1
  34. package/dist/next/server.d.cts +4 -3
  35. package/dist/next/server.d.ts +4 -3
  36. package/dist/next/server.js +333 -240
  37. package/dist/next/server.js.map +1 -1
  38. package/dist/{pipeline-CmUZsXsi.d.cts → pipeline-B14jVK7J.d.cts} +1 -1
  39. package/dist/{pipeline-DZMsPxUg.d.ts → pipeline-BAwb6Vzm.d.ts} +1 -1
  40. package/dist/react.cjs +234 -98
  41. package/dist/react.cjs.map +1 -1
  42. package/dist/react.d.cts +5 -4
  43. package/dist/react.d.ts +5 -4
  44. package/dist/react.js +234 -98
  45. package/dist/react.js.map +1 -1
  46. package/dist/{shared-DRptGBWP.d.ts → shared-0Kdc74lu.d.ts} +2 -2
  47. package/dist/{shared-BMVGMnti.d.cts → shared-C0wVICRv.d.cts} +2 -2
  48. package/dist/{types-C-YvfgYh.d.cts → types-BcVmPBP-.d.ts} +2 -1
  49. package/dist/types-Cq4-NoB4.d.ts +204 -0
  50. package/dist/types-CwJCPpLD.d.cts +236 -0
  51. package/dist/types-CwJCPpLD.d.ts +236 -0
  52. package/dist/{types-CRjDwmtJ.d.ts → types-DMOoYnPS.d.cts} +2 -1
  53. package/dist/types-Dr849HD6.d.cts +204 -0
  54. package/dist/utils.cjs +276 -0
  55. package/dist/utils.cjs.map +1 -1
  56. package/dist/utils.d.cts +58 -1
  57. package/dist/utils.d.ts +58 -1
  58. package/dist/utils.js +269 -1
  59. package/dist/utils.js.map +1 -1
  60. package/package.json +2 -2
  61. package/dist/types-BeZIHduP.d.cts +0 -428
  62. package/dist/types-BeZIHduP.d.ts +0 -428
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # athena-js
2
2
 
3
- current version: `2.10.0`
3
+ current version: `2.12.0`
4
4
  `@xylex-group/athena` is a database driver and API gateway SDK that lets you interact with SQL backends over HTTP through a fluent builder API. It ships a typed query builder for Node.js / server environments plus Athena-native React hooks for client-side use.
5
5
 
6
6
  ## Install
@@ -51,30 +51,38 @@ if (error) {
51
51
  }
52
52
  ```
53
53
 
54
- `createClient(url, key)` is the canonical SDK shape. The SDK treats `url` as the public unified Athena base URL and derives:
55
-
56
- - DB: `${url}/db`
57
- - Auth: `${url}/auth`
58
- - Storage: `${url}/storage`
54
+ `createClient(url, key)` is the canonical SDK shape. The SDK treats `url` as the public unified Athena base URL and derives:
55
+
56
+ - DB: `${url}/db`
57
+ - Auth: `${url}/auth`
58
+ - Chat: `${url}/chat`
59
+ - Chat realtime: `${url}` converted to `ws:` / `wss:` plus `/chat/ws`
60
+ - Storage: `${url}/storage`
59
61
 
60
62
  You can still override individual services when needed:
61
63
 
62
64
  ```ts
63
- const athena = createClient({
64
- key: ATHENA_API_KEY,
65
- db: { url: process.env.ATHENA_DB_URL },
66
- auth: { url: process.env.ATHENA_AUTH_URL },
67
- storage: { url: process.env.ATHENA_STORAGE_URL },
68
- });
69
- ```
65
+ const athena = createClient({
66
+ key: ATHENA_API_KEY,
67
+ db: { url: process.env.ATHENA_DB_URL },
68
+ auth: { url: process.env.ATHENA_AUTH_URL },
69
+ chat: {
70
+ url: process.env.ATHENA_CHAT_URL,
71
+ wsUrl: process.env.ATHENA_CHAT_WS_URL,
72
+ },
73
+ storage: { url: process.env.ATHENA_STORAGE_URL },
74
+ });
75
+ ```
70
76
 
71
77
  Legacy top-level aliases are also supported:
72
78
 
73
79
  ```ts
74
80
  const athena = createClient({
75
- key: ATHENA_API_KEY,
76
- gatewayUrl: process.env.ATHENA_DB_URL,
77
- authUrl: process.env.ATHENA_AUTH_URL,
81
+ key: ATHENA_API_KEY,
82
+ gatewayUrl: process.env.ATHENA_DB_URL,
83
+ authUrl: process.env.ATHENA_AUTH_URL,
84
+ chatUrl: process.env.ATHENA_CHAT_URL,
85
+ chatWsUrl: process.env.ATHENA_CHAT_WS_URL,
78
86
  storageUrl: process.env.ATHENA_STORAGE_URL,
79
87
  });
80
88
  ```
@@ -115,6 +123,42 @@ Use `withOptions(...)` only when you intentionally need to re-target the client
115
123
 
116
124
  If you already pass `client: "web-dashboard"`, the SDK sends `X-Athena-Client` for you. You do not need to duplicate that header manually.
117
125
 
126
+ ### Low-level request hatch
127
+
128
+ If you need to hit a route the fluent SDK has not wrapped yet, use `client.request(...)`:
129
+
130
+ ```ts
131
+ const athena = createClient(ATHENA_URL, ATHENA_API_KEY, {
132
+ auth: {
133
+ baseUrl: AUTH_BASE_URL,
134
+ credentials: "include",
135
+ },
136
+ });
137
+
138
+ const response = await athena.request<{
139
+ ok: boolean;
140
+ }>({
141
+ service: "chat",
142
+ method: "POST",
143
+ path: "/rooms",
144
+ body: {
145
+ slug: "support",
146
+ name: "Support",
147
+ },
148
+ });
149
+
150
+ if (!response.ok) {
151
+ throw new Error(`chat route failed: ${response.status}`);
152
+ }
153
+ ```
154
+
155
+ Rules:
156
+
157
+ - use `service: "db" | "auth" | "chat" | "storage"` plus `path` for configured SDK services
158
+ - use `url` for absolute one-off targets
159
+ - `query`, `headers`, `body`, `signal`, `credentials`, and `responseType` are supported
160
+ - auth/session, API key, org/user context, and client headers are mirrored onto configured service calls automatically
161
+
118
162
  ### Next.js and React shortcuts
119
163
 
120
164
  If you are in a Next.js app, use the higher-level adapters instead of rebuilding request context by hand:
@@ -248,12 +292,12 @@ function WelcomeEmail(props: { name: string }) {
248
292
  );
249
293
  }
250
294
 
251
- await athena.auth.admin.email.template.create({
252
- templateKey: "welcome",
253
- subjectTemplate: "Welcome",
254
- react: {
255
- component: WelcomeEmail,
256
- props: { name: "Ava" },
295
+ await athena.auth.admin.email.template.create({
296
+ template_key: "welcome",
297
+ subject_template: "Welcome",
298
+ react: {
299
+ component: WelcomeEmail,
300
+ props: { name: "Ava" },
257
301
  },
258
302
  });
259
303
  ```
@@ -263,11 +307,11 @@ For reusable templates, use `defineAuthEmailTemplate(...)`:
263
307
  ```ts
264
308
  import { defineAuthEmailTemplate } from "@xylex-group/athena";
265
309
 
266
- const welcomeTemplate = defineAuthEmailTemplate({
267
- component: WelcomeEmail,
268
- templateKey: "welcome",
269
- subjectTemplate: "Welcome",
270
- });
310
+ const welcomeTemplate = defineAuthEmailTemplate({
311
+ component: WelcomeEmail,
312
+ templateKey: "welcome",
313
+ subjectTemplate: "Welcome",
314
+ });
271
315
 
272
316
  await athena.auth.admin.email.template.create(
273
317
  welcomeTemplate.toTemplateCreate({
@@ -297,7 +341,47 @@ Install support packages in your app:
297
341
  pnpm add @react-email/components @react-email/render
298
342
  ```
299
343
 
300
- Auth responses follow the same envelope style: `{ ok, status, data, error, errorDetails, raw }`.
344
+ Auth responses follow the same envelope style: `{ ok, status, data, error, errorDetails, raw }`.
345
+
346
+ #### Chat module
347
+
348
+ The root client now exposes `client.chat` for room, message, search, and realtime flows:
349
+
350
+ ```ts
351
+ const athena = createClient(ATHENA_URL, ATHENA_API_KEY, {
352
+ chatWsUrl: process.env.ATHENA_CHAT_WS_URL,
353
+ });
354
+
355
+ const rooms = await athena.chat.room.list({ limit: 20 });
356
+ const created = await athena.chat.room.create({
357
+ slug: "engineering",
358
+ name: "Engineering",
359
+ });
360
+
361
+ await athena.chat.room.message.send(created.data?.id ?? "room_1", {
362
+ body: "Hello team",
363
+ });
364
+
365
+ const socket = athena.chat.realtime.connect({
366
+ token: "chat_token",
367
+ onMessage(event) {
368
+ console.log(event);
369
+ },
370
+ });
371
+
372
+ socket.ping();
373
+ socket.close();
374
+ ```
375
+
376
+ Available chat surfaces:
377
+
378
+ - `chat.room.list/create/get/update/archive`
379
+ - `chat.room.readCursor.upTo`
380
+ - `chat.room.member.list/add/remove`
381
+ - `chat.room.message.list/send/update/delete`
382
+ - `chat.message.reaction.add/remove`
383
+ - `chat.message.search`
384
+ - `chat.realtime.info/connect`
301
385
 
302
386
  #### Native auth bootstrap helpers
303
387