@qmuse/cloud-client 1.0.5 → 1.0.6-dev.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 +51 -3
- package/dist/adapters.d.ts +17 -1
- package/dist/adapters.d.ts.map +1 -1
- package/dist/adapters.js +22 -2
- package/dist/adapters.js.map +1 -1
- package/dist/auth.d.ts +8 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +223 -50
- package/dist/auth.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +86 -28
- package/dist/client.js.map +1 -1
- package/dist/diagnostics.d.ts +1 -1
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +23 -2
- package/dist/diagnostics.js.map +1 -1
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +23 -0
- package/dist/errors.js.map +1 -1
- package/dist/files.d.ts +8 -2
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +197 -48
- package/dist/files.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/jobs.d.ts +11 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +124 -0
- package/dist/jobs.js.map +1 -0
- package/dist/miniapp.d.ts.map +1 -1
- package/dist/miniapp.js +24 -1
- package/dist/miniapp.js.map +1 -1
- package/dist/types.d.ts +86 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/web-session-coordination.d.ts +15 -0
- package/dist/web-session-coordination.d.ts.map +1 -0
- package/dist/web-session-coordination.js +63 -0
- package/dist/web-session-coordination.js.map +1 -0
- package/dist/web.d.ts.map +1 -1
- package/dist/web.js +13 -3
- package/dist/web.js.map +1 -1
- package/docs/auth.md +8 -1
- package/docs/files.md +163 -0
- package/docs/jobs.md +66 -0
- package/package.json +1 -1
package/dist/auth.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolveAvatarUrl } from './avatar.js';
|
|
2
|
-
import { QmuseCloudError } from './errors.js';
|
|
2
|
+
import { QmuseCloudError, QmuseCloudHttpError } from './errors.js';
|
|
3
3
|
const DEFAULT_REFRESH_BEFORE_MS = 5 * 60 * 1000;
|
|
4
4
|
function validUser(value) {
|
|
5
5
|
if (!value || typeof value !== 'object')
|
|
@@ -56,6 +56,13 @@ function isMissingSession(error) {
|
|
|
56
56
|
return [value.code, value.status, value.statusCode]
|
|
57
57
|
.some(code => Number(code) === 401 || Number(code) === 404);
|
|
58
58
|
}
|
|
59
|
+
function isUnsupportedRefresh(error) {
|
|
60
|
+
if (!error || typeof error !== 'object')
|
|
61
|
+
return false;
|
|
62
|
+
const value = error;
|
|
63
|
+
return [value.code, value.status, value.statusCode].some(code => Number(code) === 400)
|
|
64
|
+
&& (value.type === 'project_provider_unsupported' || value.code === 'project_provider_unsupported');
|
|
65
|
+
}
|
|
59
66
|
export function createUnavailableCloudAuth() {
|
|
60
67
|
const unavailable = async () => {
|
|
61
68
|
throw new QmuseCloudError('Cloud Auth is not configured', 'AUTH_UNAVAILABLE');
|
|
@@ -72,6 +79,10 @@ export function createUnavailableCloudAuth() {
|
|
|
72
79
|
logoutAll: async () => undefined,
|
|
73
80
|
getCurrentUser: async () => null,
|
|
74
81
|
prepareRequest: async () => undefined,
|
|
82
|
+
getSessionVersion: () => 0,
|
|
83
|
+
getRequestIdentityVersion: () => 0,
|
|
84
|
+
invalidateSession: () => undefined,
|
|
85
|
+
validateSessionOwner: unavailable,
|
|
75
86
|
};
|
|
76
87
|
}
|
|
77
88
|
export function createCloudAuth(options, request) {
|
|
@@ -92,87 +103,171 @@ export function createCloudAuth(options, request) {
|
|
|
92
103
|
let expiresAt = 0;
|
|
93
104
|
let refreshFlight = null;
|
|
94
105
|
let restoreFlight = null;
|
|
106
|
+
let refreshFlightVersion = -1;
|
|
107
|
+
let restoreFlightVersion = -1;
|
|
108
|
+
let automaticRefreshSupported = true;
|
|
109
|
+
let sessionVersion = 0;
|
|
110
|
+
let requestIdentityVersion = 0;
|
|
111
|
+
let externalSessionChangePending = false;
|
|
112
|
+
let authMutationActive = false;
|
|
95
113
|
const clear = () => {
|
|
114
|
+
sessionVersion += 1;
|
|
115
|
+
requestIdentityVersion += 1;
|
|
116
|
+
automaticRefreshSupported = true;
|
|
96
117
|
initialized = true;
|
|
97
118
|
user = null;
|
|
98
119
|
expiresAt = 0;
|
|
99
120
|
};
|
|
100
|
-
const
|
|
121
|
+
const stateChanged = (cause) => new QmuseCloudError('Authentication changed while reading the Session', 'AUTH_STATE_CHANGED', cause === undefined ? undefined : { cause });
|
|
122
|
+
const mutateSession = async (action) => {
|
|
123
|
+
if (authMutationActive)
|
|
124
|
+
throw stateChanged();
|
|
125
|
+
authMutationActive = true;
|
|
126
|
+
// Close the old identity boundary before credentials can change. A failed
|
|
127
|
+
// mutation leaves identity unknown until an explicit readonly restore.
|
|
128
|
+
clear();
|
|
129
|
+
externalSessionChangePending = true;
|
|
130
|
+
const version = sessionVersion;
|
|
131
|
+
try {
|
|
132
|
+
return await action(version);
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
authMutationActive = false;
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
const readCurrent = async (version) => {
|
|
101
139
|
const [currentUser, currentSession] = await Promise.all([
|
|
102
140
|
account.getCurrentUser(),
|
|
103
141
|
account.getCurrentSession(),
|
|
104
142
|
]);
|
|
143
|
+
if (version !== sessionVersion)
|
|
144
|
+
throw stateChanged();
|
|
105
145
|
if (!validUser(currentUser)) {
|
|
106
146
|
throw new QmuseCloudError('AppBase returned an invalid current user', 'AUTH_USER_INVALID');
|
|
107
147
|
}
|
|
108
148
|
expiresAt = expiration(currentSession.expire);
|
|
109
149
|
user = normalizeUser(currentUser);
|
|
110
150
|
initialized = true;
|
|
151
|
+
externalSessionChangePending = false;
|
|
152
|
+
sessionVersion += 1;
|
|
153
|
+
requestIdentityVersion += 1;
|
|
111
154
|
return user;
|
|
112
155
|
};
|
|
113
156
|
const restoreSession = async () => {
|
|
114
|
-
if (
|
|
157
|
+
if (authMutationActive)
|
|
158
|
+
throw stateChanged();
|
|
159
|
+
const version = sessionVersion;
|
|
160
|
+
if (restoreFlight && restoreFlightVersion === version)
|
|
115
161
|
return restoreFlight;
|
|
116
|
-
|
|
162
|
+
const flight = (async () => {
|
|
117
163
|
try {
|
|
118
|
-
return await readCurrent();
|
|
164
|
+
return await readCurrent(version);
|
|
119
165
|
}
|
|
120
166
|
catch (error) {
|
|
121
|
-
if (
|
|
122
|
-
throw error;
|
|
123
|
-
|
|
124
|
-
|
|
167
|
+
if (version !== sessionVersion)
|
|
168
|
+
throw stateChanged(error);
|
|
169
|
+
if (isMissingSession(error)) {
|
|
170
|
+
clear();
|
|
171
|
+
externalSessionChangePending = false;
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
if (error instanceof QmuseCloudError && error.code === 'AUTH_USER_INVALID')
|
|
175
|
+
clear();
|
|
176
|
+
throw error;
|
|
125
177
|
}
|
|
126
178
|
})();
|
|
179
|
+
restoreFlight = flight;
|
|
180
|
+
restoreFlightVersion = version;
|
|
127
181
|
try {
|
|
128
|
-
return await
|
|
182
|
+
return await flight;
|
|
129
183
|
}
|
|
130
184
|
finally {
|
|
131
|
-
restoreFlight
|
|
185
|
+
if (restoreFlight === flight)
|
|
186
|
+
restoreFlight = null;
|
|
132
187
|
}
|
|
133
188
|
};
|
|
134
189
|
const refreshSession = async () => {
|
|
135
|
-
if (
|
|
190
|
+
if (authMutationActive || externalSessionChangePending)
|
|
191
|
+
throw stateChanged();
|
|
192
|
+
const version = sessionVersion;
|
|
193
|
+
if (refreshFlight && refreshFlightVersion === version)
|
|
136
194
|
return refreshFlight;
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
195
|
+
const flight = (async () => {
|
|
196
|
+
try {
|
|
197
|
+
const session = await account.refreshCurrentSession();
|
|
198
|
+
const expiry = expiration(session.expire);
|
|
199
|
+
const currentUser = await account.getCurrentUser();
|
|
200
|
+
if (version !== sessionVersion)
|
|
201
|
+
throw stateChanged();
|
|
202
|
+
if (!validUser(currentUser)) {
|
|
203
|
+
throw new QmuseCloudError('AppBase returned an invalid current user', 'AUTH_USER_INVALID');
|
|
204
|
+
}
|
|
205
|
+
if (!user || user.id !== currentUser.id || user.role !== currentUser.role)
|
|
206
|
+
requestIdentityVersion += 1;
|
|
207
|
+
user = normalizeUser(currentUser);
|
|
208
|
+
expiresAt = expiry;
|
|
209
|
+
initialized = true;
|
|
210
|
+
automaticRefreshSupported = true;
|
|
211
|
+
sessionVersion += 1;
|
|
212
|
+
return user;
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
if (version !== sessionVersion)
|
|
216
|
+
throw stateChanged(error);
|
|
217
|
+
// Once the server confirms the Session is gone, retaining the old
|
|
218
|
+
// identity makes every later request repeat the failed refresh.
|
|
219
|
+
// Rate limits, network failures and 5xx do not prove logout.
|
|
220
|
+
if (isMissingSession(error) || (error instanceof QmuseCloudError && error.code === 'AUTH_USER_INVALID'))
|
|
221
|
+
clear();
|
|
222
|
+
else if (isUnsupportedRefresh(error))
|
|
223
|
+
automaticRefreshSupported = false;
|
|
224
|
+
throw error;
|
|
144
225
|
}
|
|
145
|
-
user = normalizeUser(currentUser);
|
|
146
|
-
initialized = true;
|
|
147
|
-
return user;
|
|
148
226
|
})();
|
|
227
|
+
refreshFlight = flight;
|
|
228
|
+
refreshFlightVersion = version;
|
|
149
229
|
try {
|
|
150
|
-
return await
|
|
230
|
+
return await flight;
|
|
151
231
|
}
|
|
152
232
|
finally {
|
|
153
|
-
refreshFlight
|
|
233
|
+
if (refreshFlight === flight)
|
|
234
|
+
refreshFlight = null;
|
|
154
235
|
}
|
|
155
236
|
};
|
|
156
|
-
const establishSession = async (result) => {
|
|
237
|
+
const establishSession = async (result, version) => {
|
|
157
238
|
try {
|
|
239
|
+
if (version !== sessionVersion)
|
|
240
|
+
throw stateChanged();
|
|
158
241
|
await account.deleteCurrentSession().catch(error => {
|
|
159
242
|
if (!isMissingSession(error))
|
|
160
243
|
throw error;
|
|
161
244
|
});
|
|
245
|
+
if (version !== sessionVersion)
|
|
246
|
+
throw stateChanged();
|
|
162
247
|
const session = await account.createSession({
|
|
163
248
|
userId: result.sessionToken.userId,
|
|
164
249
|
secret: result.sessionToken.secret,
|
|
165
250
|
});
|
|
166
|
-
|
|
251
|
+
if (version !== sessionVersion)
|
|
252
|
+
throw stateChanged();
|
|
167
253
|
const currentUser = await account.getCurrentUser();
|
|
168
|
-
if (
|
|
254
|
+
if (version !== sessionVersion)
|
|
255
|
+
throw stateChanged();
|
|
256
|
+
if (!validUser(currentUser) || currentUser.id !== result.sessionToken.userId) {
|
|
169
257
|
throw new QmuseCloudError('AppBase returned an invalid current user', 'AUTH_USER_INVALID');
|
|
170
258
|
}
|
|
259
|
+
expiresAt = expiration(session.expire);
|
|
171
260
|
user = normalizeUser(currentUser);
|
|
172
261
|
initialized = true;
|
|
262
|
+
externalSessionChangePending = false;
|
|
263
|
+
automaticRefreshSupported = true;
|
|
264
|
+
sessionVersion += 1;
|
|
265
|
+
requestIdentityVersion += 1;
|
|
173
266
|
return user;
|
|
174
267
|
}
|
|
175
268
|
catch {
|
|
269
|
+
if (version !== sessionVersion)
|
|
270
|
+
throw stateChanged();
|
|
176
271
|
clear();
|
|
177
272
|
throw new QmuseCloudError('Could not establish the AppBase Session', 'AUTH_SESSION_EXCHANGE_FAILED');
|
|
178
273
|
}
|
|
@@ -180,32 +275,58 @@ export function createCloudAuth(options, request) {
|
|
|
180
275
|
result.sessionToken.secret = '';
|
|
181
276
|
}
|
|
182
277
|
};
|
|
183
|
-
const
|
|
278
|
+
const providerPath = (input) => {
|
|
184
279
|
if (input.provider !== 'alipay' && input.provider !== 'wechat') {
|
|
185
280
|
throw new QmuseCloudError('Authentication provider is not supported', 'AUTH_PROVIDER_NOT_ENABLED');
|
|
186
281
|
}
|
|
187
|
-
|
|
282
|
+
return input.provider === 'wechat' ? '/api/auth/wechat/mini/login' : '/api/auth/alipay/mini/login';
|
|
283
|
+
};
|
|
284
|
+
const exchangeProvider = async (input, version) => {
|
|
285
|
+
if (version !== sessionVersion)
|
|
286
|
+
throw stateChanged();
|
|
287
|
+
const path = providerPath(input);
|
|
188
288
|
const result = loginResult(await request({
|
|
189
289
|
method: 'POST', path, body: { authCode: input.authCode },
|
|
190
290
|
}));
|
|
191
|
-
return establishSession(result);
|
|
291
|
+
return establishSession(result, version);
|
|
192
292
|
};
|
|
193
|
-
|
|
293
|
+
const loginWithProvider = async (input) => {
|
|
294
|
+
providerPath(input);
|
|
295
|
+
return mutateSession(version => exchangeProvider(input, version));
|
|
296
|
+
};
|
|
297
|
+
const endSession = (action) => mutateSession(async (version) => {
|
|
298
|
+
await action();
|
|
299
|
+
if (version !== sessionVersion)
|
|
300
|
+
throw stateChanged();
|
|
301
|
+
// Successful explicit logout confirms the anonymous state. A failed
|
|
302
|
+
// deletion or a newer external change keeps the recovery barrier closed.
|
|
303
|
+
externalSessionChangePending = false;
|
|
304
|
+
});
|
|
305
|
+
const auth = {
|
|
194
306
|
async setAvatar(input) {
|
|
195
307
|
if (!input || typeof input.fileId !== 'string' || !input.fileId.trim()) {
|
|
196
308
|
throw new QmuseCloudError('A fileId is required', 'AVATAR_INPUT_INVALID');
|
|
197
309
|
}
|
|
198
|
-
|
|
199
|
-
await restoreSession();
|
|
310
|
+
await auth.prepareRequest();
|
|
200
311
|
const currentId = user?.id;
|
|
201
312
|
if (!currentId)
|
|
202
313
|
throw new QmuseCloudError('Authentication required', 'AUTH_REQUIRED');
|
|
314
|
+
const version = sessionVersion;
|
|
315
|
+
await auth.validateSessionOwner(currentId);
|
|
316
|
+
if (version !== sessionVersion)
|
|
317
|
+
throw stateChanged();
|
|
203
318
|
const updated = userResult(await request({
|
|
204
319
|
method: 'PUT', path: '/api/user/avatar', body: { fileId: input.fileId },
|
|
205
|
-
}));
|
|
320
|
+
}, currentId));
|
|
321
|
+
if (version !== sessionVersion)
|
|
322
|
+
throw stateChanged();
|
|
206
323
|
if (updated.id !== currentId || user?.id !== currentId) {
|
|
207
324
|
throw new QmuseCloudError('Current user changed during avatar update', 'AUTH_USER_INVALID');
|
|
208
325
|
}
|
|
326
|
+
if (user?.role !== updated.role) {
|
|
327
|
+
sessionVersion += 1;
|
|
328
|
+
requestIdentityVersion += 1;
|
|
329
|
+
}
|
|
209
330
|
user = updated;
|
|
210
331
|
return updated;
|
|
211
332
|
},
|
|
@@ -213,33 +334,25 @@ export function createCloudAuth(options, request) {
|
|
|
213
334
|
return userResult(await request({ method: 'POST', path: '/api/auth/register', body: input }));
|
|
214
335
|
},
|
|
215
336
|
async login(input) {
|
|
216
|
-
|
|
217
|
-
|
|
337
|
+
return mutateSession(async (version) => {
|
|
338
|
+
const result = loginResult(await request({ method: 'POST', path: '/api/auth/login', body: input }));
|
|
339
|
+
return establishSession(result, version);
|
|
340
|
+
});
|
|
218
341
|
},
|
|
219
342
|
loginWithProvider,
|
|
220
343
|
async loginWithMiniapp() {
|
|
221
344
|
if (!options.acquireMiniappCredential) {
|
|
222
345
|
throw new QmuseCloudError('Mini-program login is unavailable in this environment', 'AUTH_PLATFORM_UNSUPPORTED');
|
|
223
346
|
}
|
|
224
|
-
return
|
|
347
|
+
return mutateSession(async (version) => exchangeProvider(await options.acquireMiniappCredential(), version));
|
|
225
348
|
},
|
|
226
349
|
refreshSession,
|
|
227
350
|
restoreSession,
|
|
228
351
|
async logout() {
|
|
229
|
-
|
|
230
|
-
await account.deleteCurrentSession();
|
|
231
|
-
}
|
|
232
|
-
finally {
|
|
233
|
-
clear();
|
|
234
|
-
}
|
|
352
|
+
return endSession(() => account.deleteCurrentSession());
|
|
235
353
|
},
|
|
236
354
|
async logoutAll() {
|
|
237
|
-
|
|
238
|
-
await account.deleteAllSessions();
|
|
239
|
-
}
|
|
240
|
-
finally {
|
|
241
|
-
clear();
|
|
242
|
-
}
|
|
355
|
+
return endSession(() => account.deleteAllSessions());
|
|
243
356
|
},
|
|
244
357
|
async getCurrentUser() {
|
|
245
358
|
if (!initialized)
|
|
@@ -247,11 +360,71 @@ export function createCloudAuth(options, request) {
|
|
|
247
360
|
return user;
|
|
248
361
|
},
|
|
249
362
|
async prepareRequest() {
|
|
363
|
+
if (authMutationActive || externalSessionChangePending)
|
|
364
|
+
throw stateChanged();
|
|
250
365
|
if (!initialized)
|
|
251
366
|
await restoreSession();
|
|
252
|
-
if (user
|
|
367
|
+
if (!user || expiresAt - now() > refreshBeforeMs)
|
|
368
|
+
return;
|
|
369
|
+
const expired = () => {
|
|
370
|
+
clear();
|
|
371
|
+
throw new QmuseCloudHttpError({ status: 401, code: 'AUTH_SESSION_EXPIRED', message: 'Session expired; sign in again' });
|
|
372
|
+
};
|
|
373
|
+
if (!automaticRefreshSupported) {
|
|
374
|
+
if (expiresAt <= now())
|
|
375
|
+
expired();
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
try {
|
|
253
379
|
await refreshSession();
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
// Some deployed AppBase versions only renew supported providers.
|
|
383
|
+
// A valid native Session remains usable; do not repeat that capability
|
|
384
|
+
// probe or hide a different 400, a rate limit, or a service failure.
|
|
385
|
+
if (!isUnsupportedRefresh(error))
|
|
386
|
+
throw error;
|
|
387
|
+
if (expiresAt <= now())
|
|
388
|
+
expired();
|
|
389
|
+
}
|
|
390
|
+
},
|
|
391
|
+
getSessionVersion: () => sessionVersion,
|
|
392
|
+
getRequestIdentityVersion: () => requestIdentityVersion,
|
|
393
|
+
invalidateSession(version, requireRestore = false) {
|
|
394
|
+
if (version === sessionVersion) {
|
|
395
|
+
clear();
|
|
396
|
+
if (requireRestore)
|
|
397
|
+
externalSessionChangePending = true;
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
async validateSessionOwner(ownerId) {
|
|
401
|
+
const version = sessionVersion;
|
|
402
|
+
let currentUser;
|
|
403
|
+
try {
|
|
404
|
+
currentUser = await account.getCurrentUser();
|
|
405
|
+
}
|
|
406
|
+
catch (error) {
|
|
407
|
+
if (version !== sessionVersion)
|
|
408
|
+
throw stateChanged(error);
|
|
409
|
+
if (ownerId === null && isMissingSession(error))
|
|
410
|
+
return;
|
|
411
|
+
if (isMissingSession(error))
|
|
412
|
+
clear();
|
|
413
|
+
throw error;
|
|
414
|
+
}
|
|
415
|
+
if (version !== sessionVersion)
|
|
416
|
+
throw stateChanged();
|
|
417
|
+
if (!validUser(currentUser)) {
|
|
418
|
+
clear();
|
|
419
|
+
throw new QmuseCloudError('AppBase returned an invalid current user', 'AUTH_USER_INVALID');
|
|
420
|
+
}
|
|
421
|
+
if (currentUser.id !== ownerId) {
|
|
422
|
+
clear();
|
|
423
|
+
externalSessionChangePending = true;
|
|
424
|
+
throw new QmuseCloudError('Native Session belongs to a different user', 'AUTH_OWNER_CHANGED');
|
|
425
|
+
}
|
|
254
426
|
},
|
|
255
427
|
};
|
|
428
|
+
return auth;
|
|
256
429
|
}
|
|
257
430
|
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAKV,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AA+GpB,wBAAgB,sBAAsB,CAAC,UAAU,GAAG,KAAK,EACvD,OAAO,EAAE,IAAI,CAAC,uBAAuB,EAAE,eAAe,CAAC,GAAG;IAAE,aAAa,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAA;CAAE,GAC3G,gBAAgB,CAAC,UAAU,CAAC,CA8F9B"}
|
package/dist/client.js
CHANGED
|
@@ -2,6 +2,7 @@ import { QmuseCloudError, QmuseCloudHttpError } from './errors.js';
|
|
|
2
2
|
import { createCloudAuth, createUnavailableCloudAuth } from './auth.js';
|
|
3
3
|
import { createCloudFiles } from './files.js';
|
|
4
4
|
import { reportRequestFailure } from './diagnostics.js';
|
|
5
|
+
import { createCloudJobs } from './jobs.js';
|
|
5
6
|
const functionId = 'qmuse-cloud-api';
|
|
6
7
|
const allowedHeaders = new Set([
|
|
7
8
|
'accept',
|
|
@@ -99,7 +100,10 @@ function serializeBody(request) {
|
|
|
99
100
|
if (request.body === undefined)
|
|
100
101
|
return '';
|
|
101
102
|
try {
|
|
102
|
-
|
|
103
|
+
const body = JSON.stringify(request.body);
|
|
104
|
+
if (body === undefined)
|
|
105
|
+
throw new TypeError('JSON serialization returned no body');
|
|
106
|
+
return body;
|
|
103
107
|
}
|
|
104
108
|
catch (cause) {
|
|
105
109
|
throw new QmuseCloudError('Cloud API request body is not JSON serializable', 'BODY_NOT_SERIALIZABLE', { cause });
|
|
@@ -109,62 +113,116 @@ export function createQmuseCloudClient(options) {
|
|
|
109
113
|
if (!options || typeof options.execute !== 'function') {
|
|
110
114
|
throw new TypeError('A Cloud API execution capability is required');
|
|
111
115
|
}
|
|
112
|
-
const execute = async (request) => {
|
|
113
|
-
const
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
};
|
|
116
|
+
const execute = async (request, expectedOwnerId, prepared) => {
|
|
117
|
+
const sessionVersion = auth.getSessionVersion();
|
|
118
|
+
const captured = prepared ?? requestInput(request);
|
|
119
|
+
const descriptor = { method: captured.method, path: captured.path };
|
|
120
|
+
const input = { ...captured, headers: { ...captured.headers }, async: false };
|
|
121
|
+
// Empty execution headers can be dropped in transit. This marker cannot be
|
|
122
|
+
// a native user ID, and keeps a deliberate anonymous intent constrained.
|
|
123
|
+
if (expectedOwnerId !== undefined)
|
|
124
|
+
input.headers['x-qmuse-expected-user-id'] = expectedOwnerId || '@anonymous';
|
|
122
125
|
let execution;
|
|
123
126
|
try {
|
|
124
127
|
execution = await options.execute(input);
|
|
125
128
|
if (execution.status !== 'completed') {
|
|
126
129
|
throw new QmuseCloudError('Cloud API Function execution did not complete', 'EXECUTION_NOT_COMPLETED');
|
|
127
130
|
}
|
|
128
|
-
|
|
129
|
-
if (!Number.isInteger(status) || status < 100 || status > 599) {
|
|
130
|
-
throw new QmuseCloudError('Cloud API Function returned an invalid status', 'EXECUTION_STATUS_INVALID');
|
|
131
|
-
}
|
|
132
|
-
const data = parseBody(execution.responseBody);
|
|
133
|
-
if (status < 200 || status >= 300)
|
|
134
|
-
throw readHttpError(status, data);
|
|
135
|
-
return {
|
|
136
|
-
status,
|
|
137
|
-
headers: normalizeResponseHeaders(execution.responseHeaders),
|
|
138
|
-
data: data,
|
|
139
|
-
};
|
|
131
|
+
return executionResponse(execution);
|
|
140
132
|
}
|
|
141
133
|
catch (error) {
|
|
142
|
-
|
|
134
|
+
if (error instanceof QmuseCloudHttpError && error.status === 409 && error.code === 'AUTH_STATE_CHANGED') {
|
|
135
|
+
auth.invalidateSession(sessionVersion, true);
|
|
136
|
+
}
|
|
137
|
+
reportRequestFailure({ observer: options.onRequestFailure, request: descriptor, execution, error });
|
|
143
138
|
throw error;
|
|
144
139
|
}
|
|
145
140
|
};
|
|
146
141
|
const auth = options.auth ? createCloudAuth(options.auth, execute) : createUnavailableCloudAuth();
|
|
147
142
|
const authenticatedExecute = async (request) => {
|
|
143
|
+
// Capture the submitted intent before Session preparation can yield. Reuse
|
|
144
|
+
// the same serialized body if the transport401 policy permits one retry.
|
|
145
|
+
const prepared = requestInput(request);
|
|
146
|
+
const descriptor = { method: prepared.method, path: prepared.path };
|
|
148
147
|
await auth.prepareRequest();
|
|
148
|
+
const identityVersion = auth.getRequestIdentityVersion();
|
|
149
|
+
const unchanged = () => {
|
|
150
|
+
if (identityVersion !== auth.getRequestIdentityVersion()) {
|
|
151
|
+
throw new QmuseCloudError('Authentication changed during the Cloud API request', 'AUTH_STATE_CHANGED');
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
const expectedOwnerId = options.auth ? (await auth.getCurrentUser())?.id ?? '' : undefined;
|
|
155
|
+
unchanged();
|
|
156
|
+
const executeCurrent = async () => {
|
|
157
|
+
unchanged();
|
|
158
|
+
const sessionVersion = auth.getSessionVersion();
|
|
159
|
+
try {
|
|
160
|
+
const response = await execute(descriptor, expectedOwnerId, prepared);
|
|
161
|
+
unchanged();
|
|
162
|
+
return response;
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
if (error instanceof QmuseCloudHttpError && error.status === 401
|
|
166
|
+
&& ['UNAUTHORIZED', 'AUTH_REQUIRED', 'AUTH_SESSION_EXPIRED'].includes(error.code)) {
|
|
167
|
+
auth.invalidateSession(sessionVersion);
|
|
168
|
+
}
|
|
169
|
+
throw error;
|
|
170
|
+
}
|
|
171
|
+
};
|
|
149
172
|
try {
|
|
150
|
-
return await
|
|
173
|
+
return await executeCurrent();
|
|
151
174
|
}
|
|
152
175
|
catch (error) {
|
|
153
176
|
if (!options.auth || !isTransportUnauthorized(error))
|
|
154
177
|
throw error;
|
|
178
|
+
unchanged();
|
|
155
179
|
try {
|
|
156
180
|
await auth.refreshSession();
|
|
157
181
|
}
|
|
158
|
-
catch {
|
|
182
|
+
catch (refreshError) {
|
|
183
|
+
if (refreshError instanceof QmuseCloudError && refreshError.code === 'AUTH_STATE_CHANGED')
|
|
184
|
+
throw refreshError;
|
|
159
185
|
throw error;
|
|
160
186
|
}
|
|
161
|
-
|
|
187
|
+
unchanged();
|
|
188
|
+
return executeCurrent();
|
|
162
189
|
}
|
|
163
190
|
};
|
|
164
191
|
return {
|
|
165
192
|
request: (request) => authenticatedExecute(request),
|
|
193
|
+
jobs: createCloudJobs({ capabilities: options.jobs, auth, input: request => ({ ...requestInput(request), async: true }), response: executionResponse }),
|
|
166
194
|
auth,
|
|
167
|
-
files: createCloudFiles(authenticatedExecute, options.fileTransport
|
|
195
|
+
files: createCloudFiles(authenticatedExecute, options.fileTransport, {
|
|
196
|
+
...(options.fileScope ? { scope: options.fileScope } : {}), ...(options.auth ? { auth } : {}),
|
|
197
|
+
execute: async (request, expectedOwnerId) => {
|
|
198
|
+
const version = auth.getSessionVersion();
|
|
199
|
+
try {
|
|
200
|
+
return await execute(request, expectedOwnerId);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
if (isTransportUnauthorized(error) || (error instanceof QmuseCloudHttpError &&
|
|
204
|
+
((error.status === 401 && ['UNAUTHORIZED', 'AUTH_REQUIRED', 'AUTH_SESSION_EXPIRED'].includes(error.code)) ||
|
|
205
|
+
(error.status === 409 && error.code === 'AUTH_STATE_CHANGED'))))
|
|
206
|
+
auth.invalidateSession(version);
|
|
207
|
+
// A file mutation is attempted once. Recovery reuses its saved intent
|
|
208
|
+
// or reference after reauthentication, rather than an implicit POST.
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
}),
|
|
168
213
|
};
|
|
169
214
|
}
|
|
215
|
+
function requestInput(request) {
|
|
216
|
+
const body = serializeBody(request);
|
|
217
|
+
return { functionId, body, path: buildPath(request.path, request.query), method: request.method, headers: normalizeRequestHeaders(request.headers, body.length > 0) };
|
|
218
|
+
}
|
|
219
|
+
function executionResponse(execution) {
|
|
220
|
+
const status = execution.responseStatusCode;
|
|
221
|
+
if (!Number.isInteger(status) || status < 100 || status > 599)
|
|
222
|
+
throw new QmuseCloudError('Cloud API Function returned an invalid status', 'EXECUTION_STATUS_INVALID');
|
|
223
|
+
const data = parseBody(execution.responseBody);
|
|
224
|
+
if (status < 200 || status >= 300)
|
|
225
|
+
throw readHttpError(status, data);
|
|
226
|
+
return { status, headers: normalizeResponseHeaders(execution.responseHeaders), data: data };
|
|
227
|
+
}
|
|
170
228
|
//# sourceMappingURL=client.js.map
|