ryuu-client 4.4.5 → 5.0.0-beta.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.
Files changed (195) hide show
  1. package/README.md +243 -25
  2. package/dist/api/apps.d.ts +12 -0
  3. package/dist/api/apps.d.ts.map +1 -0
  4. package/dist/api/apps.js +57 -0
  5. package/dist/api/apps.js.map +1 -0
  6. package/dist/api/assets.d.ts +12 -0
  7. package/dist/api/assets.d.ts.map +1 -0
  8. package/dist/api/assets.js +53 -0
  9. package/dist/api/assets.js.map +1 -0
  10. package/dist/api/designs.d.ts +17 -0
  11. package/dist/api/designs.d.ts.map +1 -0
  12. package/dist/api/designs.js +45 -0
  13. package/dist/api/designs.js.map +1 -0
  14. package/dist/api/index.d.ts +5 -0
  15. package/dist/api/index.d.ts.map +1 -0
  16. package/dist/api/index.js +5 -0
  17. package/dist/api/index.js.map +1 -0
  18. package/dist/api/users.d.ts +10 -0
  19. package/dist/api/users.d.ts.map +1 -0
  20. package/dist/api/users.js +19 -0
  21. package/dist/api/users.js.map +1 -0
  22. package/dist/auth/authenticator.d.ts +17 -0
  23. package/dist/auth/authenticator.d.ts.map +1 -0
  24. package/dist/auth/authenticator.js +81 -0
  25. package/dist/auth/authenticator.js.map +1 -0
  26. package/dist/auth/index.d.ts +5 -0
  27. package/dist/auth/index.d.ts.map +1 -0
  28. package/dist/auth/index.js +5 -0
  29. package/dist/auth/index.js.map +1 -0
  30. package/dist/auth/oauth.d.ts +22 -0
  31. package/dist/auth/oauth.d.ts.map +1 -0
  32. package/dist/auth/oauth.js +58 -0
  33. package/dist/auth/oauth.js.map +1 -0
  34. package/dist/auth/token-cache.d.ts +7 -0
  35. package/dist/auth/token-cache.d.ts.map +1 -0
  36. package/dist/auth/token-cache.js +20 -0
  37. package/dist/auth/token-cache.js.map +1 -0
  38. package/dist/auth/token-store.d.ts +3 -0
  39. package/dist/auth/token-store.d.ts.map +1 -0
  40. package/dist/auth/token-store.js +20 -0
  41. package/dist/auth/token-store.js.map +1 -0
  42. package/dist/client.d.ts +20 -0
  43. package/dist/client.d.ts.map +1 -0
  44. package/dist/client.js +38 -0
  45. package/dist/client.js.map +1 -0
  46. package/dist/http/errors.d.ts +12 -0
  47. package/dist/http/errors.d.ts.map +1 -0
  48. package/dist/http/errors.js +23 -0
  49. package/dist/http/errors.js.map +1 -0
  50. package/dist/http/fetch-client.d.ts +14 -0
  51. package/dist/http/fetch-client.d.ts.map +1 -0
  52. package/dist/http/fetch-client.js +40 -0
  53. package/dist/http/fetch-client.js.map +1 -0
  54. package/dist/http/index.d.ts +4 -0
  55. package/dist/http/index.d.ts.map +1 -0
  56. package/dist/http/index.js +4 -0
  57. package/dist/http/index.js.map +1 -0
  58. package/dist/http/proxy.d.ts +4 -0
  59. package/dist/http/proxy.d.ts.map +1 -0
  60. package/dist/http/proxy.js +21 -0
  61. package/dist/http/proxy.js.map +1 -0
  62. package/dist/index.d.ts +7 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +10 -0
  65. package/dist/index.js.map +1 -0
  66. package/{lib/models/interfaces → dist/types}/asset.d.ts +1 -0
  67. package/dist/types/asset.d.ts.map +1 -0
  68. package/dist/types/asset.js +2 -0
  69. package/{lib/models/interfaces → dist/types}/asset.js.map +1 -1
  70. package/{lib/models/interfaces/login-data.d.ts → dist/types/auth.d.ts} +8 -0
  71. package/dist/types/auth.d.ts.map +1 -0
  72. package/dist/types/auth.js +2 -0
  73. package/dist/types/auth.js.map +1 -0
  74. package/{lib/models/interfaces → dist/types}/card.d.ts +3 -2
  75. package/dist/types/card.d.ts.map +1 -0
  76. package/dist/types/card.js +2 -0
  77. package/{lib/models/interfaces → dist/types}/card.js.map +1 -1
  78. package/dist/types/collection.d.ts +28 -0
  79. package/dist/types/collection.d.ts.map +1 -0
  80. package/{lib/models/enums → dist/types}/collection.js +2 -5
  81. package/dist/types/collection.js.map +1 -0
  82. package/dist/types/config.d.ts +14 -0
  83. package/dist/types/config.d.ts.map +1 -0
  84. package/dist/types/config.js +2 -0
  85. package/dist/types/config.js.map +1 -0
  86. package/{lib/models/interfaces → dist/types}/context.d.ts +1 -0
  87. package/dist/types/context.d.ts.map +1 -0
  88. package/dist/types/context.js +2 -0
  89. package/dist/types/context.js.map +1 -0
  90. package/{lib/models/interfaces → dist/types}/dataset.d.ts +3 -3
  91. package/dist/types/dataset.d.ts.map +1 -0
  92. package/dist/types/dataset.js +2 -0
  93. package/dist/types/dataset.js.map +1 -0
  94. package/{lib/models/interfaces → dist/types}/design.d.ts +18 -10
  95. package/dist/types/design.d.ts.map +1 -0
  96. package/dist/types/design.js +9 -0
  97. package/dist/types/design.js.map +1 -0
  98. package/{lib/models/interfaces → dist/types}/environment.d.ts +3 -2
  99. package/dist/types/environment.d.ts.map +1 -0
  100. package/dist/types/environment.js +2 -0
  101. package/dist/types/environment.js.map +1 -0
  102. package/dist/types/errors.d.ts +8 -0
  103. package/dist/types/errors.d.ts.map +1 -0
  104. package/dist/types/errors.js +2 -0
  105. package/dist/types/errors.js.map +1 -0
  106. package/{lib/models/interfaces → dist/types}/filter.d.ts +11 -1
  107. package/dist/types/filter.d.ts.map +1 -0
  108. package/{lib/models/enums → dist/types}/filter.js +4 -7
  109. package/dist/types/filter.js.map +1 -0
  110. package/dist/types/index.d.ts +17 -0
  111. package/dist/types/index.d.ts.map +1 -0
  112. package/dist/types/index.js +5 -0
  113. package/dist/types/index.js.map +1 -0
  114. package/{lib/models/interfaces → dist/types}/instance.d.ts +4 -3
  115. package/dist/types/instance.d.ts.map +1 -0
  116. package/dist/types/instance.js +2 -0
  117. package/dist/types/instance.js.map +1 -0
  118. package/{lib/models/interfaces → dist/types}/manifest.d.ts +8 -5
  119. package/dist/types/manifest.d.ts.map +1 -0
  120. package/dist/types/manifest.js +2 -0
  121. package/dist/types/manifest.js.map +1 -0
  122. package/{lib/models/enums → dist/types}/package.d.ts +18 -0
  123. package/dist/types/package.d.ts.map +1 -0
  124. package/{lib/models/enums → dist/types}/package.js +2 -5
  125. package/dist/types/package.js.map +1 -0
  126. package/{lib/models/interfaces → dist/types}/user.d.ts +1 -0
  127. package/dist/types/user.d.ts.map +1 -0
  128. package/dist/types/user.js +2 -0
  129. package/{lib/models/interfaces → dist/types}/user.js.map +1 -1
  130. package/{lib/models/interfaces → dist/types}/workflow.d.ts +3 -2
  131. package/dist/types/workflow.d.ts.map +1 -0
  132. package/dist/types/workflow.js +2 -0
  133. package/dist/types/workflow.js.map +1 -0
  134. package/dist/util/content-types.d.ts +4 -0
  135. package/dist/util/content-types.d.ts.map +1 -0
  136. package/{lib/models/constants/content.js → dist/util/content-types.js} +21 -5
  137. package/dist/util/content-types.js.map +1 -0
  138. package/dist/util/endpoints.d.ts +8 -0
  139. package/dist/util/endpoints.d.ts.map +1 -0
  140. package/dist/util/endpoints.js +8 -0
  141. package/dist/util/endpoints.js.map +1 -0
  142. package/dist/util/home-dir.d.ts +4 -0
  143. package/dist/util/home-dir.d.ts.map +1 -0
  144. package/dist/util/home-dir.js +19 -0
  145. package/dist/util/home-dir.js.map +1 -0
  146. package/package.json +31 -32
  147. package/lib/domoapps-client.d.ts +0 -67
  148. package/lib/domoapps-client.js +0 -711
  149. package/lib/domoapps-client.js.map +0 -1
  150. package/lib/models/constants/content.d.ts +0 -33
  151. package/lib/models/constants/content.js.map +0 -1
  152. package/lib/models/constants/endpoints.d.ts +0 -1
  153. package/lib/models/constants/endpoints.js +0 -5
  154. package/lib/models/constants/endpoints.js.map +0 -1
  155. package/lib/models/enums/collection.d.ts +0 -10
  156. package/lib/models/enums/collection.js.map +0 -1
  157. package/lib/models/enums/design.d.ts +0 -7
  158. package/lib/models/enums/design.js +0 -12
  159. package/lib/models/enums/design.js.map +0 -1
  160. package/lib/models/enums/filter.d.ts +0 -10
  161. package/lib/models/enums/filter.js.map +0 -1
  162. package/lib/models/enums/package.js.map +0 -1
  163. package/lib/models/index.d.ts +0 -20
  164. package/lib/models/index.js +0 -37
  165. package/lib/models/index.js.map +0 -1
  166. package/lib/models/interfaces/asset.js +0 -3
  167. package/lib/models/interfaces/card.js +0 -3
  168. package/lib/models/interfaces/collection.d.ts +0 -18
  169. package/lib/models/interfaces/collection.js +0 -3
  170. package/lib/models/interfaces/collection.js.map +0 -1
  171. package/lib/models/interfaces/context.js +0 -3
  172. package/lib/models/interfaces/context.js.map +0 -1
  173. package/lib/models/interfaces/dataset.js +0 -3
  174. package/lib/models/interfaces/dataset.js.map +0 -1
  175. package/lib/models/interfaces/design.js +0 -3
  176. package/lib/models/interfaces/design.js.map +0 -1
  177. package/lib/models/interfaces/domo-response.d.ts +0 -24
  178. package/lib/models/interfaces/domo-response.js +0 -3
  179. package/lib/models/interfaces/domo-response.js.map +0 -1
  180. package/lib/models/interfaces/environment.js +0 -3
  181. package/lib/models/interfaces/environment.js.map +0 -1
  182. package/lib/models/interfaces/filter.js +0 -3
  183. package/lib/models/interfaces/filter.js.map +0 -1
  184. package/lib/models/interfaces/instance.js +0 -3
  185. package/lib/models/interfaces/instance.js.map +0 -1
  186. package/lib/models/interfaces/login-data.js +0 -3
  187. package/lib/models/interfaces/login-data.js.map +0 -1
  188. package/lib/models/interfaces/manifest.js +0 -3
  189. package/lib/models/interfaces/manifest.js.map +0 -1
  190. package/lib/models/interfaces/package.d.ts +0 -18
  191. package/lib/models/interfaces/package.js +0 -3
  192. package/lib/models/interfaces/package.js.map +0 -1
  193. package/lib/models/interfaces/user.js +0 -3
  194. package/lib/models/interfaces/workflow.js +0 -3
  195. package/lib/models/interfaces/workflow.js.map +0 -1
package/README.md CHANGED
@@ -1,46 +1,264 @@
1
- # Ryuu Client
1
+ # ryuu-client
2
2
 
3
- The client (endpoint) repository used by Ryuu/Domo App Platform
3
+ Node.js client for the Domo Apps platform. Used by [ryuu](https://www.npmjs.com/package/ryuu) (the Domo Apps CLI) and [ryuu-proxy](https://www.npmjs.com/package/@domoinc/ryuu-proxy) to authenticate with Domo, manage app designs, upload assets, and proxy local development sessions.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/ryuu-client.svg?style=flat-square)](https://www.npmjs.org/package/ryuu-client)
6
6
  [![install size](https://img.shields.io/badge/dynamic/json?url=https://packagephobia.com/v2/api.json?p=ryuu-client&query=$.install.pretty&label=install%20size&style=flat-square)](https://packagephobia.com/result?p=ryuu-client)
7
7
  [![npm downloads](https://img.shields.io/npm/dm/ryuu-client.svg?style=flat-square)](https://npm-stat.com/charts.html?package=ryuu-client)
8
- [![Known Vulnerabilities](https://snyk.io/test/npm/ryuu-client/badge.svg)](https://snyk.io/test/npm/ryuu-client)
9
8
 
10
- See the [developer docs](https://developer.domo.com/docs/dev-studio/dev-studio-overview) for instructions on how to install and use this library (almost solely as a dependancy of Ryuu/Ryuu-Proxy), as well as more information about the complete Domo App Platform.
9
+ ## Requirements
11
10
 
12
- ## Building
11
+ - **Node.js >= 22.0.0**
12
+ - **pnpm** (package manager)
13
13
 
14
- To build ryuu-client, run
14
+ ## Install
15
15
 
16
16
  ```bash
17
- npm run build
17
+ pnpm add ryuu-client
18
18
  ```
19
19
 
20
- All necessary files will be built/copied into the `lib` folder.
20
+ ## Usage
21
21
 
22
- ## Contributing
22
+ ```typescript
23
+ import { createClient, getHomeDir, getMostRecentLogin } from 'ryuu-client';
23
24
 
24
- Recommended Workflow:
25
+ const client = createClient({
26
+ instance: 'mycompany.domo.com',
27
+ refreshToken: '...',
28
+ clientId: '...',
29
+ devToken: false,
30
+ proxy: { host: 'proxy.corp.com', port: 8080 }, // optional
31
+ });
32
+ ```
33
+
34
+ ### Authentication
35
+
36
+ ```typescript
37
+ // OAuth device-code flow (opens browser for authorization)
38
+ const loginData = await client.login();
39
+ console.log(`Welcome, ${loginData.displayName}`);
40
+
41
+ // Tokens are cached automatically — subsequent API calls
42
+ // skip redundant token exchanges until the cache expires.
43
+ ```
44
+
45
+ ### Designs
46
+
47
+ ```typescript
48
+ // Create a new design
49
+ const design = await client.designs.create(manifest);
50
+
51
+ // Get a design by ID
52
+ const design = await client.designs.get(designId, { parts: 'versions' });
53
+
54
+ // List all designs
55
+ const designs = await client.designs.list();
56
+
57
+ // Delete / undelete
58
+ await client.designs.delete(designId, true); // force=true
59
+ await client.designs.undelete(designId);
60
+
61
+ // Versions and releases
62
+ const versions = await client.designs.getVersions(designId);
63
+ await client.designs.release(designId, '2.0.0');
64
+ ```
65
+
66
+ ### Assets
67
+
68
+ ```typescript
69
+ // Upload a single asset
70
+ await client.assets.upload(designId, version, 'dist/app.js');
71
+
72
+ // Upload all assets (reads files from cwd, respects manifest.ignore)
73
+ const uploaded = await client.assets.uploadAll(manifest);
74
+
75
+ // Download assets as a zip stream
76
+ const response = await client.assets.download(designId, version);
77
+ ```
78
+
79
+ ### Apps
80
+
81
+ ```typescript
82
+ // Create a temporary app instance (for local dev proxying)
83
+ const { instance } = await client.apps.createInstance(designId);
25
84
 
26
- 1. Create new branch (named "DOMO-XXXXXX")
27
- 2. Make Changes
28
- 3. Commit Changes
29
- 4. Test changes (if necessary, version a alpha/beta/tagged version, then release it)
30
- 5. Make pull request
31
- 6. After pull request is merged to master, bump version, then release it to npm
85
+ // Get the full dev environment (domoapps domain, user info, etc.)
86
+ const env = await client.apps.getEnvironment(manifest, proxyId);
87
+ ```
88
+
89
+ ### Escape hatch
90
+
91
+ For endpoints not covered by the namespaced API, use `client.request()` directly. Auth headers are injected automatically.
92
+
93
+ ```typescript
94
+ const result = await client.request('/api/some/endpoint', {
95
+ method: 'POST',
96
+ headers: { 'Content-Type': 'application/json' },
97
+ body: JSON.stringify(payload),
98
+ });
99
+ ```
32
100
 
33
- ## Versioning
101
+ ### Utilities
102
+
103
+ ```typescript
104
+ import { getHomeDir, getMostRecentLogin, getContentType } from 'ryuu-client';
105
+
106
+ // ~/.config/configstore path
107
+ const configDir = getHomeDir();
108
+
109
+ // Most recently modified login JSON
110
+ const login = getMostRecentLogin();
111
+
112
+ // Content-type lookup with octet-stream fallback
113
+ getContentType('font.ttf'); // 'font/ttf'
114
+ getContentType('data.bin'); // 'application/octet-stream'
115
+ ```
116
+
117
+ ### Error handling
118
+
119
+ All errors are typed with `cause` chaining support:
120
+
121
+ ```typescript
122
+ import { RyuuHttpError, RyuuAuthError, RyuuValidationError } from 'ryuu-client';
123
+
124
+ try {
125
+ await client.designs.get('bad-id');
126
+ } catch (err) {
127
+ if (err instanceof RyuuHttpError) {
128
+ console.error(err.statusCode, err.message, err.url);
129
+ }
130
+ }
131
+ ```
132
+
133
+ ## Architecture
134
+
135
+ ```
136
+ src/
137
+ ├── index.ts # Public barrel export
138
+ ├── client.ts # createClient() factory
139
+ ├── auth/ # OAuth device-code flow, token caching
140
+ ├── http/ # Native fetch wrapper, undici proxy, error classes
141
+ ├── api/ # Namespaced API modules (designs, assets, apps, users)
142
+ ├── types/ # TypeScript interfaces and enums
143
+ └── util/ # Content-type map, endpoints, home-dir helpers
144
+ ```
34
145
 
35
- This project utilizes [standard-version](https://github.com/conventional-changelog/standard-version).
146
+ ### Key design decisions
36
147
 
37
- - `npm run bump` - Version bumps determined automatically via commits
38
- - `npm run bumpBeta` or `npm run bump -- --prerelease beta` - 4.0.x-beta.0 (if no current beta) or 4.0.0-beta.x (if current beta exists)
148
+ - **Native `fetch`** no axios. Proxy support via undici `ProxyAgent`.
149
+ - **Token caching** access tokens and SIDs are cached with TTL, reducing most requests from 2 extra roundtrips to 0.
150
+ - **Scoped TLS bypass** — `domorig.io` instances use an undici `Agent` with `rejectUnauthorized: false` instead of the global `NODE_TLS_REJECT_UNAUTHORIZED=0`.
151
+ - **Typed errors** — `RyuuHttpError`, `RyuuAuthError`, `RyuuValidationError` with `cause` chaining. No more `Promise<unknown>`.
152
+ - **ESM only** — `"type": "module"`, targeting ES2023 with `NodeNext` module resolution.
39
153
 
40
- ### Releasing
154
+ ### Dependencies
41
155
 
42
- Versions should be released on NPM and then updated in the ryuu-cli package.json
156
+ | Runtime | Purpose |
157
+ |---------|---------|
158
+ | `open` | Launch browser for OAuth device-code flow |
159
+ | `tinyglobby` | Lightweight glob for asset uploads |
160
+ | `undici` | `ProxyAgent` for proxy support with native fetch |
43
161
 
44
- - `npm run release`
45
- - `npm run releaseAlpha`
46
- - `npm run releaseBeta`
162
+ ## Development
163
+
164
+ ```bash
165
+ pnpm install
166
+ pnpm build # TypeScript compile to dist/
167
+ pnpm test # Run unit tests (vitest)
168
+ pnpm test:watch # Watch mode
169
+ pnpm test:coverage # Coverage report
170
+ pnpm format # Prettier
171
+ ```
172
+
173
+ ## v5 migration guide
174
+
175
+ v5 is a ground-up rewrite. The default export class is replaced by a `createClient()` factory returning a namespaced API object.
176
+
177
+ ### Import changes
178
+
179
+ ```diff
180
+ - import Domo from 'ryuu-client';
181
+ + import { createClient, getHomeDir, type RyuuClient } from 'ryuu-client';
182
+ ```
183
+
184
+ ### Constructor
185
+
186
+ ```diff
187
+ - const client = new Domo(instance, refreshToken, clientId, { host, port }, devToken);
188
+ + const client = createClient({ instance, refreshToken, clientId, devToken, proxy: { host, port } });
189
+ ```
190
+
191
+ ### Getters
192
+
193
+ ```diff
194
+ - client.getInstance()
195
+ + client.instance
196
+
197
+ - client.getRefreshToken()
198
+ + client.refreshToken
199
+ ```
200
+
201
+ ### Static methods
202
+
203
+ ```diff
204
+ - Domo.getHomeDir()
205
+ + getHomeDir()
206
+
207
+ - Domo.getMostRecentLogin()
208
+ + getMostRecentLogin()
209
+ ```
210
+
211
+ ### API methods
212
+
213
+ ```diff
214
+ - client.createDesign(manifest)
215
+ + client.designs.create(manifest)
216
+
217
+ - client.getDesign(id, params)
218
+ + client.designs.get(id, params)
219
+
220
+ - client.getDesigns(params)
221
+ + client.designs.list(params)
222
+
223
+ - client.deleteDesign(id, force)
224
+ + client.designs.delete(id, force)
225
+
226
+ - client.unDeleteDesign(id)
227
+ + client.designs.undelete(id)
228
+
229
+ - client.getVersions(id)
230
+ + client.designs.getVersions(id)
231
+
232
+ - client.release(id, version)
233
+ + client.designs.release(id, version)
234
+
235
+ - client.uploadAsset(designId, version, path, contents)
236
+ + client.assets.upload(designId, version, path, contents)
237
+
238
+ - client.uploadAllAssets(manifest)
239
+ + client.assets.uploadAll(manifest)
240
+
241
+ - client.download(designId, version)
242
+ + client.assets.download(designId, version)
243
+
244
+ - client.createApp(designId, proxyId)
245
+ + client.apps.createInstance(designId, proxyId)
246
+
247
+ - client.getDomoappsData(manifest, proxyId)
248
+ + client.apps.getEnvironment(manifest, proxyId)
249
+
250
+ - client.processRequest(options)
251
+ + client.request(url, init)
252
+ ```
253
+
254
+ ### Error handling
255
+
256
+ ```diff
257
+ - .catch(err => console.log(err.statusCode, err.message))
258
+ + import { RyuuHttpError } from 'ryuu-client';
259
+ + .catch(err => {
260
+ + if (err instanceof RyuuHttpError) {
261
+ + console.log(err.statusCode, err.message);
262
+ + }
263
+ + })
264
+ ```
@@ -0,0 +1,12 @@
1
+ import type { FetchClient } from '../http/fetch-client.js';
2
+ import type { Authenticator } from '../auth/authenticator.js';
3
+ import type { Environment, InstanceAndCards, Manifest } from '../types/index.js';
4
+ export declare class AppsApi {
5
+ private readonly http;
6
+ private readonly auth;
7
+ private readonly instance;
8
+ constructor(http: FetchClient, auth: Authenticator, instance: string);
9
+ createInstance(designId: string, proxyId?: string): Promise<InstanceAndCards>;
10
+ getEnvironment(manifest: Manifest, proxyId?: string): Promise<Environment>;
11
+ }
12
+ //# sourceMappingURL=apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/api/apps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAOjF,qBAAa,OAAO;IAEhB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAFR,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,MAAM;IAG7B,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC;IAoBtB,cAAc,CAClB,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC;CA6BxB"}
@@ -0,0 +1,57 @@
1
+ import { INSTANCES_URL, ENVIRONMENT_URL, } from '../util/endpoints.js';
2
+ import { getEnv } from '../util/home-dir.js';
3
+ export class AppsApi {
4
+ http;
5
+ auth;
6
+ instance;
7
+ constructor(http, auth, instance) {
8
+ this.http = http;
9
+ this.auth = auth;
10
+ this.instance = instance;
11
+ }
12
+ async createInstance(designId, proxyId) {
13
+ const headers = {
14
+ 'Content-Type': 'application/json',
15
+ Accept: 'application/json',
16
+ ...(await this.auth.getAuthHeader()),
17
+ };
18
+ return this.http.request(`${INSTANCES_URL}?temporary=true`, {
19
+ method: 'POST',
20
+ headers,
21
+ body: JSON.stringify({
22
+ designId,
23
+ id: proxyId ?? null,
24
+ }),
25
+ });
26
+ }
27
+ async getEnvironment(manifest, proxyId) {
28
+ let uuid;
29
+ if (proxyId) {
30
+ uuid = proxyId;
31
+ }
32
+ else {
33
+ const result = await this.createInstance(manifest.id);
34
+ uuid = result.instance.id;
35
+ }
36
+ const headers = {
37
+ ...(await this.auth.getAuthHeader()),
38
+ };
39
+ try {
40
+ const env = await this.http.request(ENVIRONMENT_URL, {
41
+ method: 'GET',
42
+ headers,
43
+ });
44
+ return {
45
+ ...env,
46
+ url: `https://${uuid}.${env.domoappsDomain}`,
47
+ };
48
+ }
49
+ catch {
50
+ // Fallback for rigs where domoappsDomain isn't accessible
51
+ return {
52
+ url: `https://${uuid}.domoapps.${getEnv(this.instance)}`,
53
+ };
54
+ }
55
+ }
56
+ }
57
+ //# sourceMappingURL=apps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.js","sourceRoot":"","sources":["../../src/api/apps.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,aAAa,EACb,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,OAAO,OAAO;IAEC;IACA;IACA;IAHnB,YACmB,IAAiB,EACjB,IAAmB,EACnB,QAAgB;QAFhB,SAAI,GAAJ,IAAI,CAAa;QACjB,SAAI,GAAJ,IAAI,CAAe;QACnB,aAAQ,GAAR,QAAQ,CAAQ;IAChC,CAAC;IAEJ,KAAK,CAAC,cAAc,CAClB,QAAgB,EAChB,OAAgB;QAEhB,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;YAC1B,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;SACrC,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CACtB,GAAG,aAAa,iBAAiB,EACjC;YACE,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,QAAQ;gBACR,EAAE,EAAE,OAAO,IAAI,IAAI;aACpB,CAAC;SACH,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,QAAkB,EAClB,OAAgB;QAEhB,IAAI,IAAY,CAAC;QACjB,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,GAAG,OAAO,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAG,CAAC,CAAC;YACvD,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,CAAC;QAED,MAAM,OAAO,GAA2B;YACtC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;SACrC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAc,eAAe,EAAE;gBAChE,MAAM,EAAE,KAAK;gBACb,OAAO;aACR,CAAC,CAAC;YACH,OAAO;gBACL,GAAG,GAAG;gBACN,GAAG,EAAE,WAAW,IAAI,IAAI,GAAG,CAAC,cAAc,EAAE;aAC7C,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;YAC1D,OAAO;gBACL,GAAG,EAAE,WAAW,IAAI,aAAa,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;aAC1C,CAAC;QACnB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { FetchClient } from '../http/fetch-client.js';
2
+ import type { Authenticator } from '../auth/authenticator.js';
3
+ import type { Asset, Manifest } from '../types/index.js';
4
+ export declare class AssetsApi {
5
+ private readonly http;
6
+ private readonly auth;
7
+ constructor(http: FetchClient, auth: Authenticator);
8
+ upload(designId: string, version: string, path: string, contents?: string | Buffer): Promise<Asset>;
9
+ uploadAll(manifest: Manifest): Promise<Asset[]>;
10
+ download(designId: string, version: string): Promise<Response>;
11
+ }
12
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/api/assets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAMzD,qBAAa,SAAS;IAElB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,aAAa;IAGhC,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GACzB,OAAO,CAAC,KAAK,CAAC;IAoBX,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAmC/C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;CAUrE"}
@@ -0,0 +1,53 @@
1
+ import fs from 'node:fs';
2
+ import { globSync } from 'tinyglobby';
3
+ import { RyuuValidationError } from '../http/errors.js';
4
+ import { DESIGNS_BASE_URL } from '../util/endpoints.js';
5
+ import { getContentType } from '../util/content-types.js';
6
+ const CHUNK_SIZE = 25;
7
+ export class AssetsApi {
8
+ http;
9
+ auth;
10
+ constructor(http, auth) {
11
+ this.http = http;
12
+ this.auth = auth;
13
+ }
14
+ async upload(designId, version, path, contents) {
15
+ if (path.includes(' ')) {
16
+ throw new RyuuValidationError(`Spaces in file names not allowed. Please rename ${path}`);
17
+ }
18
+ const body = contents ?? fs.readFileSync(path);
19
+ const contentType = getContentType(path);
20
+ const headers = {
21
+ 'Content-Type': contentType,
22
+ ...(await this.auth.getAuthHeader()),
23
+ };
24
+ return this.http.request(`${DESIGNS_BASE_URL}/${designId}/versions/${version}/assets?path=${path}`, { method: 'POST', headers, body: body });
25
+ }
26
+ async uploadAll(manifest) {
27
+ const designId = manifest.id;
28
+ const version = manifest.version;
29
+ // Upload manifest first
30
+ await this.upload(designId, version, 'manifest.json', JSON.stringify(manifest));
31
+ // Glob all files, respecting ignore patterns
32
+ const defaultIgnore = ['**/*/node_modules/**/*', 'node_modules/**/*'];
33
+ const combinedIgnore = manifest.ignore
34
+ ? defaultIgnore.concat(manifest.ignore)
35
+ : defaultIgnore;
36
+ const files = globSync('**/*', { ignore: combinedIgnore }).filter(file => !fs.statSync(file).isDirectory() && file !== 'manifest.json');
37
+ // Upload in chunks of 25
38
+ const results = [];
39
+ for (let i = 0; i < files.length; i += CHUNK_SIZE) {
40
+ const chunk = files.slice(i, i + CHUNK_SIZE);
41
+ const chunkResults = await Promise.all(chunk.map(file => this.upload(designId, version, file)));
42
+ results.push(...chunkResults);
43
+ }
44
+ return results;
45
+ }
46
+ async download(designId, version) {
47
+ const headers = {
48
+ ...(await this.auth.getAuthHeader()),
49
+ };
50
+ return this.http.request(`${DESIGNS_BASE_URL}/${designId}/versions/${version}/assets`, { method: 'GET', headers, rawResponse: true });
51
+ }
52
+ }
53
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/api/assets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { FetchClient } from '../http/fetch-client.js';
2
+ import type { Authenticator } from '../auth/authenticator.js';
3
+ import type { Design, Manifest } from '../types/index.js';
4
+ export declare class DesignsApi {
5
+ private readonly http;
6
+ private readonly auth;
7
+ constructor(http: FetchClient, auth: Authenticator);
8
+ create(manifest: Manifest): Promise<Design>;
9
+ get(id: string, params?: Record<string, string>): Promise<Design>;
10
+ list(params?: Record<string, string>): Promise<Design[]>;
11
+ delete(id: string, force?: boolean): Promise<unknown>;
12
+ undelete(id: string): Promise<unknown>;
13
+ getVersions(id: string): Promise<string[]>;
14
+ release(id: string, version: string): Promise<unknown>;
15
+ private request;
16
+ }
17
+ //# sourceMappingURL=designs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designs.d.ts","sourceRoot":"","sources":["../../src/api/designs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG1D,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,aAAa;IAGhC,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ3C,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAKjE,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKxD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAOnD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO1C,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAO9C,OAAO;CAgBtB"}
@@ -0,0 +1,45 @@
1
+ import { DESIGNS_BASE_URL } from '../util/endpoints.js';
2
+ export class DesignsApi {
3
+ http;
4
+ auth;
5
+ constructor(http, auth) {
6
+ this.http = http;
7
+ this.auth = auth;
8
+ }
9
+ async create(manifest) {
10
+ return this.request(`${DESIGNS_BASE_URL}?path=manifest.json`, 'POST', manifest);
11
+ }
12
+ async get(id, params) {
13
+ const query = params ? '?' + new URLSearchParams(params).toString() : '';
14
+ return this.request(`${DESIGNS_BASE_URL}/${id}${query}`, 'GET');
15
+ }
16
+ async list(params) {
17
+ const query = params ? '?' + new URLSearchParams(params).toString() : '';
18
+ return this.request(`${DESIGNS_BASE_URL}/${query}`, 'GET');
19
+ }
20
+ async delete(id, force = false) {
21
+ return this.request(`${DESIGNS_BASE_URL}/${id}?force=${force}`, 'DELETE');
22
+ }
23
+ async undelete(id) {
24
+ return this.request(`${DESIGNS_BASE_URL}/${id}/undelete`, 'PUT');
25
+ }
26
+ async getVersions(id) {
27
+ return this.request(`${DESIGNS_BASE_URL}/${id}/versions`, 'GET');
28
+ }
29
+ async release(id, version) {
30
+ return this.request(`${DESIGNS_BASE_URL}/${id}/versions/${version}/release`, 'PUT');
31
+ }
32
+ async request(path, method, body) {
33
+ const headers = {
34
+ Accept: 'application/json',
35
+ ...(await this.auth.getAuthHeader()),
36
+ };
37
+ const init = { method, headers };
38
+ if (body !== undefined) {
39
+ headers['Content-Type'] = 'application/json';
40
+ init.body = JSON.stringify(body);
41
+ }
42
+ return this.http.request(path, init);
43
+ }
44
+ }
45
+ //# sourceMappingURL=designs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"designs.js","sourceRoot":"","sources":["../../src/api/designs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,OAAO,UAAU;IAEF;IACA;IAFnB,YACmB,IAAiB,EACjB,IAAmB;QADnB,SAAI,GAAJ,IAAI,CAAa;QACjB,SAAI,GAAJ,IAAI,CAAe;IACnC,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,QAAkB;QAC7B,OAAO,IAAI,CAAC,OAAO,CACjB,GAAG,gBAAgB,qBAAqB,EACxC,MAAM,EACN,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,MAA+B;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC,OAAO,CAAS,GAAG,gBAAgB,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAA+B;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC,OAAO,CAAW,GAAG,gBAAgB,IAAI,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,KAAK,GAAG,KAAK;QACpC,OAAO,IAAI,CAAC,OAAO,CACjB,GAAG,gBAAgB,IAAI,EAAE,UAAU,KAAK,EAAE,EAC1C,QAAQ,CACT,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,gBAAgB,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,OAAO,CACjB,GAAG,gBAAgB,IAAI,EAAE,WAAW,EACpC,KAAK,CACN,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,OAAe;QACvC,OAAO,IAAI,CAAC,OAAO,CACjB,GAAG,gBAAgB,IAAI,EAAE,aAAa,OAAO,UAAU,EACvD,KAAK,CACN,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,IAAY,EACZ,MAAc,EACd,IAAc;QAEd,MAAM,OAAO,GAA2B;YACtC,MAAM,EAAE,kBAAkB;YAC1B,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;SACrC,CAAC;QACF,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC9C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;YAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAI,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { DesignsApi } from './designs.js';
2
+ export { AssetsApi } from './assets.js';
3
+ export { AppsApi } from './apps.js';
4
+ export { UsersApi } from './users.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { DesignsApi } from './designs.js';
2
+ export { AssetsApi } from './assets.js';
3
+ export { AppsApi } from './apps.js';
4
+ export { UsersApi } from './users.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { FetchClient } from '../http/fetch-client.js';
2
+ import type { Authenticator } from '../auth/authenticator.js';
3
+ import type { LoginData } from '../types/auth.js';
4
+ export declare class UsersApi {
5
+ private readonly http;
6
+ private readonly auth;
7
+ constructor(http: FetchClient, auth: Authenticator);
8
+ getUserInfo(): Promise<LoginData>;
9
+ }
10
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/api/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,qBAAa,QAAQ;IAEjB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,aAAa;IAGhC,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;CAUxC"}
@@ -0,0 +1,19 @@
1
+ import { USERS_ME_URL } from '../util/endpoints.js';
2
+ export class UsersApi {
3
+ http;
4
+ auth;
5
+ constructor(http, auth) {
6
+ this.http = http;
7
+ this.auth = auth;
8
+ }
9
+ async getUserInfo() {
10
+ const headers = {
11
+ ...(await this.auth.getAuthHeader()),
12
+ };
13
+ return this.http.request(USERS_ME_URL, {
14
+ method: 'GET',
15
+ headers,
16
+ });
17
+ }
18
+ }
19
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/api/users.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,OAAO,QAAQ;IAEA;IACA;IAFnB,YACmB,IAAiB,EACjB,IAAmB;QADnB,SAAI,GAAJ,IAAI,CAAa;QACjB,SAAI,GAAJ,IAAI,CAAe;IACnC,CAAC;IAEJ,KAAK,CAAC,WAAW;QACf,MAAM,OAAO,GAA2B;YACtC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;SACrC,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAY,YAAY,EAAE;YAChD,MAAM,EAAE,KAAK;YACb,OAAO;SACR,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import type { FetchClient } from '../http/fetch-client.js';
2
+ import type { AuthHeader, LoginData } from '../types/auth.js';
3
+ export declare class Authenticator {
4
+ private readonly http;
5
+ private readonly clientId;
6
+ private refreshToken;
7
+ private readonly devToken;
8
+ private readonly cache;
9
+ constructor(http: FetchClient, clientId: string, refreshToken: string, devToken: boolean);
10
+ getRefreshToken(): string;
11
+ setRefreshToken(token: string): void;
12
+ getAuthHeader(): Promise<AuthHeader>;
13
+ login(): Promise<LoginData>;
14
+ private getLoginUser;
15
+ private getNewAuthorization;
16
+ }
17
+ //# sourceMappingURL=authenticator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticator.d.ts","sourceRoot":"","sources":["../../src/auth/authenticator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAe9D,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;gBAGxC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,OAAO;IAQnB,eAAe,IAAI,MAAM;IAIzB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9B,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IA4BpC,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC;YAanB,YAAY;YAUZ,mBAAmB;CAwBlC"}