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.
- package/README.md +243 -25
- package/dist/api/apps.d.ts +12 -0
- package/dist/api/apps.d.ts.map +1 -0
- package/dist/api/apps.js +57 -0
- package/dist/api/apps.js.map +1 -0
- package/dist/api/assets.d.ts +12 -0
- package/dist/api/assets.d.ts.map +1 -0
- package/dist/api/assets.js +53 -0
- package/dist/api/assets.js.map +1 -0
- package/dist/api/designs.d.ts +17 -0
- package/dist/api/designs.d.ts.map +1 -0
- package/dist/api/designs.js +45 -0
- package/dist/api/designs.js.map +1 -0
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +5 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/users.d.ts +10 -0
- package/dist/api/users.d.ts.map +1 -0
- package/dist/api/users.js +19 -0
- package/dist/api/users.js.map +1 -0
- package/dist/auth/authenticator.d.ts +17 -0
- package/dist/auth/authenticator.d.ts.map +1 -0
- package/dist/auth/authenticator.js +81 -0
- package/dist/auth/authenticator.js.map +1 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +5 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth.d.ts +22 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +58 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/token-cache.d.ts +7 -0
- package/dist/auth/token-cache.d.ts.map +1 -0
- package/dist/auth/token-cache.js +20 -0
- package/dist/auth/token-cache.js.map +1 -0
- package/dist/auth/token-store.d.ts +3 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/auth/token-store.js +20 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/client.d.ts +20 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +38 -0
- package/dist/client.js.map +1 -0
- package/dist/http/errors.d.ts +12 -0
- package/dist/http/errors.d.ts.map +1 -0
- package/dist/http/errors.js +23 -0
- package/dist/http/errors.js.map +1 -0
- package/dist/http/fetch-client.d.ts +14 -0
- package/dist/http/fetch-client.d.ts.map +1 -0
- package/dist/http/fetch-client.js +40 -0
- package/dist/http/fetch-client.js.map +1 -0
- package/dist/http/index.d.ts +4 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +4 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/proxy.d.ts +4 -0
- package/dist/http/proxy.d.ts.map +1 -0
- package/dist/http/proxy.js +21 -0
- package/dist/http/proxy.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/{lib/models/interfaces → dist/types}/asset.d.ts +1 -0
- package/dist/types/asset.d.ts.map +1 -0
- package/dist/types/asset.js +2 -0
- package/{lib/models/interfaces → dist/types}/asset.js.map +1 -1
- package/{lib/models/interfaces/login-data.d.ts → dist/types/auth.d.ts} +8 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +2 -0
- package/dist/types/auth.js.map +1 -0
- package/{lib/models/interfaces → dist/types}/card.d.ts +3 -2
- package/dist/types/card.d.ts.map +1 -0
- package/dist/types/card.js +2 -0
- package/{lib/models/interfaces → dist/types}/card.js.map +1 -1
- package/dist/types/collection.d.ts +28 -0
- package/dist/types/collection.d.ts.map +1 -0
- package/{lib/models/enums → dist/types}/collection.js +2 -5
- package/dist/types/collection.js.map +1 -0
- package/dist/types/config.d.ts +14 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/{lib/models/interfaces → dist/types}/context.d.ts +1 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +2 -0
- package/dist/types/context.js.map +1 -0
- package/{lib/models/interfaces → dist/types}/dataset.d.ts +3 -3
- package/dist/types/dataset.d.ts.map +1 -0
- package/dist/types/dataset.js +2 -0
- package/dist/types/dataset.js.map +1 -0
- package/{lib/models/interfaces → dist/types}/design.d.ts +18 -10
- package/dist/types/design.d.ts.map +1 -0
- package/dist/types/design.js +9 -0
- package/dist/types/design.js.map +1 -0
- package/{lib/models/interfaces → dist/types}/environment.d.ts +3 -2
- package/dist/types/environment.d.ts.map +1 -0
- package/dist/types/environment.js +2 -0
- package/dist/types/environment.js.map +1 -0
- package/dist/types/errors.d.ts +8 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +2 -0
- package/dist/types/errors.js.map +1 -0
- package/{lib/models/interfaces → dist/types}/filter.d.ts +11 -1
- package/dist/types/filter.d.ts.map +1 -0
- package/{lib/models/enums → dist/types}/filter.js +4 -7
- package/dist/types/filter.js.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/{lib/models/interfaces → dist/types}/instance.d.ts +4 -3
- package/dist/types/instance.d.ts.map +1 -0
- package/dist/types/instance.js +2 -0
- package/dist/types/instance.js.map +1 -0
- package/{lib/models/interfaces → dist/types}/manifest.d.ts +8 -5
- package/dist/types/manifest.d.ts.map +1 -0
- package/dist/types/manifest.js +2 -0
- package/dist/types/manifest.js.map +1 -0
- package/{lib/models/enums → dist/types}/package.d.ts +18 -0
- package/dist/types/package.d.ts.map +1 -0
- package/{lib/models/enums → dist/types}/package.js +2 -5
- package/dist/types/package.js.map +1 -0
- package/{lib/models/interfaces → dist/types}/user.d.ts +1 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +2 -0
- package/{lib/models/interfaces → dist/types}/user.js.map +1 -1
- package/{lib/models/interfaces → dist/types}/workflow.d.ts +3 -2
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +2 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/util/content-types.d.ts +4 -0
- package/dist/util/content-types.d.ts.map +1 -0
- package/{lib/models/constants/content.js → dist/util/content-types.js} +21 -5
- package/dist/util/content-types.js.map +1 -0
- package/dist/util/endpoints.d.ts +8 -0
- package/dist/util/endpoints.d.ts.map +1 -0
- package/dist/util/endpoints.js +8 -0
- package/dist/util/endpoints.js.map +1 -0
- package/dist/util/home-dir.d.ts +4 -0
- package/dist/util/home-dir.d.ts.map +1 -0
- package/dist/util/home-dir.js +19 -0
- package/dist/util/home-dir.js.map +1 -0
- package/package.json +31 -32
- package/lib/domoapps-client.d.ts +0 -67
- package/lib/domoapps-client.js +0 -711
- package/lib/domoapps-client.js.map +0 -1
- package/lib/models/constants/content.d.ts +0 -33
- package/lib/models/constants/content.js.map +0 -1
- package/lib/models/constants/endpoints.d.ts +0 -1
- package/lib/models/constants/endpoints.js +0 -5
- package/lib/models/constants/endpoints.js.map +0 -1
- package/lib/models/enums/collection.d.ts +0 -10
- package/lib/models/enums/collection.js.map +0 -1
- package/lib/models/enums/design.d.ts +0 -7
- package/lib/models/enums/design.js +0 -12
- package/lib/models/enums/design.js.map +0 -1
- package/lib/models/enums/filter.d.ts +0 -10
- package/lib/models/enums/filter.js.map +0 -1
- package/lib/models/enums/package.js.map +0 -1
- package/lib/models/index.d.ts +0 -20
- package/lib/models/index.js +0 -37
- package/lib/models/index.js.map +0 -1
- package/lib/models/interfaces/asset.js +0 -3
- package/lib/models/interfaces/card.js +0 -3
- package/lib/models/interfaces/collection.d.ts +0 -18
- package/lib/models/interfaces/collection.js +0 -3
- package/lib/models/interfaces/collection.js.map +0 -1
- package/lib/models/interfaces/context.js +0 -3
- package/lib/models/interfaces/context.js.map +0 -1
- package/lib/models/interfaces/dataset.js +0 -3
- package/lib/models/interfaces/dataset.js.map +0 -1
- package/lib/models/interfaces/design.js +0 -3
- package/lib/models/interfaces/design.js.map +0 -1
- package/lib/models/interfaces/domo-response.d.ts +0 -24
- package/lib/models/interfaces/domo-response.js +0 -3
- package/lib/models/interfaces/domo-response.js.map +0 -1
- package/lib/models/interfaces/environment.js +0 -3
- package/lib/models/interfaces/environment.js.map +0 -1
- package/lib/models/interfaces/filter.js +0 -3
- package/lib/models/interfaces/filter.js.map +0 -1
- package/lib/models/interfaces/instance.js +0 -3
- package/lib/models/interfaces/instance.js.map +0 -1
- package/lib/models/interfaces/login-data.js +0 -3
- package/lib/models/interfaces/login-data.js.map +0 -1
- package/lib/models/interfaces/manifest.js +0 -3
- package/lib/models/interfaces/manifest.js.map +0 -1
- package/lib/models/interfaces/package.d.ts +0 -18
- package/lib/models/interfaces/package.js +0 -3
- package/lib/models/interfaces/package.js.map +0 -1
- package/lib/models/interfaces/user.js +0 -3
- package/lib/models/interfaces/workflow.js +0 -3
- package/lib/models/interfaces/workflow.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,46 +1,264 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ryuu-client
|
|
2
2
|
|
|
3
|
-
|
|
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
|
[](https://www.npmjs.org/package/ryuu-client)
|
|
6
6
|
[](https://packagephobia.com/result?p=ryuu-client)
|
|
7
7
|
[](https://npm-stat.com/charts.html?package=ryuu-client)
|
|
8
|
-
[](https://snyk.io/test/npm/ryuu-client)
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
## Requirements
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
- **Node.js >= 22.0.0**
|
|
12
|
+
- **pnpm** (package manager)
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
## Install
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
|
-
|
|
17
|
+
pnpm add ryuu-client
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
## Usage
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
```typescript
|
|
23
|
+
import { createClient, getHomeDir, getMostRecentLogin } from 'ryuu-client';
|
|
23
24
|
|
|
24
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
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
|
-
|
|
146
|
+
### Key design decisions
|
|
36
147
|
|
|
37
|
-
-
|
|
38
|
-
-
|
|
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
|
-
###
|
|
154
|
+
### Dependencies
|
|
41
155
|
|
|
42
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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"}
|
package/dist/api/apps.js
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|