@rixl/sdk 0.1.0 → 0.2.2

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 (71) hide show
  1. package/README.md +163 -88
  2. package/dist/index.d.ts +1665 -5
  3. package/dist/index.js +1021 -5
  4. package/dist/index.js.map +1 -0
  5. package/package.json +34 -30
  6. package/dist/feeds/index.d.ts +0 -21
  7. package/dist/feeds/index.js +0 -21
  8. package/dist/feeds/item/creators/index.d.ts +0 -21
  9. package/dist/feeds/item/creators/index.js +0 -20
  10. package/dist/feeds/item/creators/item/index.d.ts +0 -42
  11. package/dist/feeds/item/creators/item/index.js +0 -28
  12. package/dist/feeds/item/index.d.ts +0 -58
  13. package/dist/feeds/item/index.js +0 -44
  14. package/dist/feeds/item/item/index.d.ts +0 -29
  15. package/dist/feeds/item/item/index.js +0 -28
  16. package/dist/images/index.d.ts +0 -68
  17. package/dist/images/index.js +0 -46
  18. package/dist/images/item/index.d.ts +0 -48
  19. package/dist/images/item/index.js +0 -43
  20. package/dist/images/upload/complete/index.d.ts +0 -35
  21. package/dist/images/upload/complete/index.js +0 -36
  22. package/dist/images/upload/index.d.ts +0 -24
  23. package/dist/images/upload/index.js +0 -24
  24. package/dist/images/upload/init/index.d.ts +0 -33
  25. package/dist/images/upload/init/index.js +0 -33
  26. package/dist/models/github_com_rixlhq_api_db_sqlc/index.d.ts +0 -13
  27. package/dist/models/github_com_rixlhq_api_db_sqlc/index.js +0 -16
  28. package/dist/models/github_com_rixlhq_api_internal_errors/index.d.ts +0 -37
  29. package/dist/models/github_com_rixlhq_api_internal_errors/index.js +0 -40
  30. package/dist/models/github_com_rixlhq_api_internal_videos/index.d.ts +0 -72
  31. package/dist/models/github_com_rixlhq_api_internal_videos/index.js +0 -65
  32. package/dist/models/github_com_rixlhq_api_internal_videos_handler_upload/index.d.ts +0 -70
  33. package/dist/models/github_com_rixlhq_api_internal_videos_handler_upload/index.js +0 -78
  34. package/dist/models/github_com_rixlhq_api_internal_videos_types/index.d.ts +0 -30
  35. package/dist/models/github_com_rixlhq_api_internal_videos_types/index.js +0 -38
  36. package/dist/models/index.d.ts +0 -548
  37. package/dist/models/index.js +0 -543
  38. package/dist/models/internal_images_handler/index.d.ts +0 -98
  39. package/dist/models/internal_images_handler/index.js +0 -112
  40. package/dist/models/internal_videos_handler_subtitles/index.d.ts +0 -30
  41. package/dist/models/internal_videos_handler_subtitles/index.js +0 -38
  42. package/dist/models/pagination/index.d.ts +0 -125
  43. package/dist/models/pagination/index.js +0 -153
  44. package/dist/rixlClient.d.ts +0 -34
  45. package/dist/rixlClient.js +0 -69
  46. package/dist/videos/index.d.ts +0 -73
  47. package/dist/videos/index.js +0 -52
  48. package/dist/videos/item/audioTracks/index.d.ts +0 -38
  49. package/dist/videos/item/audioTracks/index.js +0 -33
  50. package/dist/videos/item/audioTracks/item/index.d.ts +0 -70
  51. package/dist/videos/item/audioTracks/item/index.js +0 -67
  52. package/dist/videos/item/chapters/index.d.ts +0 -50
  53. package/dist/videos/item/chapters/index.js +0 -46
  54. package/dist/videos/item/delete/index.d.ts +0 -30
  55. package/dist/videos/item/delete/index.js +0 -28
  56. package/dist/videos/item/index.d.ts +0 -61
  57. package/dist/videos/item/index.js +0 -63
  58. package/dist/videos/item/subtitles/index.d.ts +0 -38
  59. package/dist/videos/item/subtitles/index.js +0 -33
  60. package/dist/videos/item/subtitles/item/index.d.ts +0 -70
  61. package/dist/videos/item/subtitles/item/index.js +0 -67
  62. package/dist/videos/item/thumbnail/index.d.ts +0 -59
  63. package/dist/videos/item/thumbnail/index.js +0 -68
  64. package/dist/videos/languages/index.d.ts +0 -27
  65. package/dist/videos/languages/index.js +0 -22
  66. package/dist/videos/upload/complete/index.d.ts +0 -35
  67. package/dist/videos/upload/complete/index.js +0 -36
  68. package/dist/videos/upload/index.d.ts +0 -24
  69. package/dist/videos/upload/index.js +0 -24
  70. package/dist/videos/upload/init/index.d.ts +0 -34
  71. package/dist/videos/upload/init/index.js +0 -35
package/README.md CHANGED
@@ -2,150 +2,225 @@
2
2
 
3
3
  Official TypeScript / JavaScript SDK for the [Rixl](https://rixl.com) REST API.
4
4
 
5
+ Published on npm as [`@rixl/sdk`](https://www.npmjs.com/package/@rixl/sdk).
6
+
5
7
  [![npm](https://img.shields.io/npm/v/@rixl/sdk.svg)](https://www.npmjs.com/package/@rixl/sdk)
6
8
 
7
9
  ## Install
8
10
 
9
- ```bash
10
- npm install @rixl/sdk @microsoft/kiota-http-fetchlibrary
11
- ```
11
+ | npm | pnpm | bun | vite plus |
12
+ | ----------------- | ------------------ | ----------------- | ---------------- |
13
+ | `npm i @rixl/sdk` | `pnpm i @rixl/sdk` | `bun i @rixl/sdk` | `vp i @rixl/sdk` |
12
14
 
13
- Requires Node.js 18+. ESM only — use `import`, not `require`.
15
+ Requires Node.js 18+. ESM only.
14
16
 
15
- ## Quick start
17
+ ## Quick Start
16
18
 
17
19
  ```ts
18
- import { createRixlClient } from "@rixl/sdk";
19
- import { FetchRequestAdapter } from "@microsoft/kiota-http-fetchlibrary";
20
- import { ApiKeyAuthenticationProvider } from "@microsoft/kiota-abstractions";
21
-
22
- const auth = new ApiKeyAuthenticationProvider(
23
- "YOUR_RIXL_API_KEY", "X-API-Key", "header",
24
- );
25
- const adapter = new FetchRequestAdapter(auth);
26
- const client = createRixlClient(adapter);
27
-
28
- const image = await client.images.byImageId("PS5IMKoFLm").get();
29
- console.log(image?.id, image?.width, image?.height);
20
+ import {createClient, getImages} from "@rixl/sdk";
21
+
22
+ const client = createClient({
23
+ baseUrl: "https://api.rixl.com",
24
+ auth: process.env.RIXL_API_KEY,
25
+ responseStyle: "data",
26
+ });
27
+
28
+ const page = await getImages({
29
+ client,
30
+ query: {limit: 10},
31
+ });
32
+
33
+ console.log(page.data?.map((image) => image.id));
30
34
  ```
31
35
 
32
- Default base URL: `https://api.rixl.com`. Override with `adapter.baseUrl = "..."`.
36
+ `auth` can be either a string or a function, so you can plug in API keys, bearer tokens, or runtime token refresh logic.
33
37
 
34
- ## Authentication
38
+ ## Feed API
35
39
 
36
- API key:
40
+ Fetch a feed and read posts:
37
41
 
38
42
  ```ts
39
- import { ApiKeyAuthenticationProvider } from "@microsoft/kiota-abstractions";
40
-
41
- const auth = new ApiKeyAuthenticationProvider(
42
- "YOUR_RIXL_API_KEY", "X-API-Key", "header",
43
- );
44
- ```
43
+ import {createClient, getFeedsByFeedId} from "@rixl/sdk";
45
44
 
46
- Bearer token: implement `AccessTokenProvider`, pass to `new BaseBearerTokenAuthenticationProvider(tokenProvider)`.
45
+ const client = createClient({
46
+ baseUrl: "https://api.rixl.com",
47
+ auth: process.env.RIXL_API_KEY,
48
+ responseStyle: "data",
49
+ });
47
50
 
48
- ## Feeds
51
+ const feed = await getFeedsByFeedId({
52
+ client,
53
+ path: {feedId: "FD4y3QB38S"},
54
+ query: {limit: 20, offset: 0},
55
+ });
49
56
 
50
- ```ts
51
- const posts = await client.feeds.byFeedId("FD4y3QB38S").get();
52
- for (const post of posts?.data ?? []) {
53
- console.log(post.id);
57
+ for (const post of feed.data ?? []) {
58
+ console.log(post.id, post.type);
54
59
  }
55
60
  ```
56
61
 
57
- ## Images
62
+ ## Image API
63
+
64
+ List images and fetch one by ID:
58
65
 
59
66
  ```ts
60
- const page = await client.images.get();
61
- const image = await client.images.byImageId("PS5IMKoFLm").get();
62
- await client.images.byImageId("PS5IMKoFLm").delete();
67
+ import {createClient, getImages, getImagesByImageId} from "@rixl/sdk";
68
+
69
+ const client = createClient({
70
+ baseUrl: "https://api.rixl.com",
71
+ auth: process.env.RIXL_API_KEY,
72
+ responseStyle: "data",
73
+ });
74
+
75
+ const page = await getImages({
76
+ client,
77
+ query: {limit: 25, offset: 0},
78
+ });
79
+
80
+ const image = await getImagesByImageId({
81
+ client,
82
+ path: {imageId: "PS5IMKoFLm"},
83
+ });
84
+
85
+ console.log(page.data?.length, image.id, image.width, image.height);
63
86
  ```
64
87
 
65
- Upload (init PUT bytes complete):
88
+ Initialize an upload, PUT the bytes to storage, then complete the upload:
66
89
 
67
90
  ```ts
68
- const initRes = await client.images.upload.init.post({
91
+ import {createClient, postImagesUploadComplete, postImagesUploadInit} from "@rixl/sdk";
92
+
93
+ const client = createClient({
94
+ baseUrl: "https://api.rixl.com",
95
+ auth: process.env.RIXL_API_KEY,
96
+ responseStyle: "data",
97
+ });
98
+
99
+ const init = await postImagesUploadInit({
100
+ client,
101
+ body: {
69
102
  name: "photo.jpg",
70
103
  format: "jpeg",
104
+ },
71
105
  });
72
106
 
73
- await fetch(initRes.presignedUrl, {
74
- method: "PUT",
75
- body: imageBytes,
76
- headers: { "Content-Type": "image/jpeg" },
107
+ await fetch(init.presigned_url!, {
108
+ method: "PUT",
109
+ body: imageBytes,
110
+ headers: {"Content-Type": "image/jpeg"},
77
111
  });
78
112
 
79
- const image = await client.images.upload.complete.post({
80
- imageId: initRes.imageId,
81
- attachedToVideo: false,
113
+ const image = await postImagesUploadComplete({
114
+ client,
115
+ body: {
116
+ image_id: init.image_id,
117
+ attached_to_video: false,
118
+ },
82
119
  });
120
+
121
+ console.log(image.id);
83
122
  ```
84
123
 
85
- ## Videos
124
+ ## Video API
125
+
126
+ List videos and fetch one by ID:
86
127
 
87
128
  ```ts
88
- const videos = await client.videos.get();
89
- const video = await client.videos.byVideoId("VI9VXQxWXQ").get();
90
- const tracks = await client.videos.byVideoId("VI9VXQxWXQ").subtitles.get();
129
+ import {createClient, getVideos, getVideosByVideoId} from "@rixl/sdk";
130
+
131
+ const client = createClient({
132
+ baseUrl: "https://api.rixl.com",
133
+ auth: process.env.RIXL_API_KEY,
134
+ responseStyle: "data",
135
+ });
136
+
137
+ const page = await getVideos({
138
+ client,
139
+ query: {limit: 25, offset: 0},
140
+ });
141
+
142
+ const video = await getVideosByVideoId({
143
+ client,
144
+ path: {videoId: "VI9VXQxWXQ"},
145
+ });
146
+
147
+ console.log(page.data?.length, video.id, video.duration);
91
148
  ```
92
149
 
93
- Upload returns presigned URLs for both the video and a poster image:
150
+ Video uploads follow the same pattern, but `init` returns both video and poster upload URLs:
94
151
 
95
152
  ```ts
96
- const initRes = await client.videos.upload.init.post({
97
- fileName: "clip.mp4",
98
- imageFormat: "jpeg",
153
+ import {createClient, postVideosUploadComplete, postVideosUploadInit} from "@rixl/sdk";
154
+
155
+ const client = createClient({
156
+ baseUrl: "https://api.rixl.com",
157
+ auth: process.env.RIXL_API_KEY,
158
+ responseStyle: "data",
99
159
  });
100
- // PUT bytes to initRes.videoPresignedUrl and initRes.posterPresignedUrl
101
160
 
102
- const video = await client.videos.upload.complete.post({
103
- videoId: initRes.videoId,
161
+ const init = await postVideosUploadInit({
162
+ client,
163
+ body: {
164
+ file_name: "clip.mp4",
165
+ image_format: "jpeg",
166
+ },
104
167
  });
168
+
169
+ await Promise.all([
170
+ fetch(init.video_presigned_url!, {
171
+ method: "PUT",
172
+ body: videoBytes,
173
+ headers: {"Content-Type": "video/mp4"},
174
+ }),
175
+ fetch(init.poster_presigned_url!, {
176
+ method: "PUT",
177
+ body: posterBytes,
178
+ headers: {"Content-Type": "image/jpeg"},
179
+ }),
180
+ ]);
181
+
182
+ const video = await postVideosUploadComplete({
183
+ client,
184
+ body: {
185
+ video_id: init.video_id,
186
+ },
187
+ });
188
+
189
+ console.log(video.id);
105
190
  ```
106
191
 
107
- ## Pagination
192
+ ## Development
108
193
 
109
- List endpoints take `limit`, `offset`, `sort`, `order`:
194
+ This repository uses [Vite+](https://viteplus.dev/guide/) as the unified toolchain and package manager wrapper, with Bun underneath.
110
195
 
111
- ```ts
112
- let offset = 0;
113
- const limit = 50;
114
-
115
- while (true) {
116
- const page = await client.images.get({
117
- queryParameters: { limit, offset, sort: "created_at", order: "desc" },
118
- });
119
- const total = page?.pagination?.total ?? 0;
120
- offset += limit;
121
- if (offset >= total) break;
122
- }
196
+ Install dependencies:
197
+
198
+ ```bash
199
+ vp install
123
200
  ```
124
201
 
125
- ## Errors
202
+ Regenerate config after dependency or config changes:
126
203
 
127
- ```ts
128
- import { ErrorResponse } from "@rixl/sdk";
129
-
130
- try {
131
- const image = await client.images.byImageId("PS5IMKoFLm").get();
132
- } catch (err) {
133
- if (err instanceof ErrorResponse) {
134
- console.error(`HTTP ${err.code}: ${err.errorEscaped}`);
135
- }
136
- throw err;
137
- }
204
+ ```bash
205
+ vp config
138
206
  ```
139
207
 
140
- ## Examples
208
+ Build the library:
209
+
210
+ ```bash
211
+ vp pack
212
+ ```
213
+
214
+ Run formatting, linting, and type checks:
215
+
216
+ ```bash
217
+ vp check
218
+ ```
141
219
 
142
- Runnable demos in [examples/](./examples):
220
+ Run tests:
143
221
 
144
222
  ```bash
145
- cd examples && npm install
146
- export RIXL_API_KEY=<key>
147
- npm run basic:images
148
- npm run advanced:videos
223
+ vp test
149
224
  ```
150
225
 
151
226
  ## Issues