@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.
Files changed (48) hide show
  1. package/README.md +51 -3
  2. package/dist/adapters.d.ts +17 -1
  3. package/dist/adapters.d.ts.map +1 -1
  4. package/dist/adapters.js +22 -2
  5. package/dist/adapters.js.map +1 -1
  6. package/dist/auth.d.ts +8 -1
  7. package/dist/auth.d.ts.map +1 -1
  8. package/dist/auth.js +223 -50
  9. package/dist/auth.js.map +1 -1
  10. package/dist/client.d.ts.map +1 -1
  11. package/dist/client.js +86 -28
  12. package/dist/client.js.map +1 -1
  13. package/dist/diagnostics.d.ts +1 -1
  14. package/dist/diagnostics.d.ts.map +1 -1
  15. package/dist/diagnostics.js +23 -2
  16. package/dist/diagnostics.js.map +1 -1
  17. package/dist/errors.d.ts +16 -0
  18. package/dist/errors.d.ts.map +1 -1
  19. package/dist/errors.js +23 -0
  20. package/dist/errors.js.map +1 -1
  21. package/dist/files.d.ts +8 -2
  22. package/dist/files.d.ts.map +1 -1
  23. package/dist/files.js +197 -48
  24. package/dist/files.js.map +1 -1
  25. package/dist/index.d.ts +2 -2
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +1 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/jobs.d.ts +11 -0
  30. package/dist/jobs.d.ts.map +1 -0
  31. package/dist/jobs.js +124 -0
  32. package/dist/jobs.js.map +1 -0
  33. package/dist/miniapp.d.ts.map +1 -1
  34. package/dist/miniapp.js +24 -1
  35. package/dist/miniapp.js.map +1 -1
  36. package/dist/types.d.ts +86 -0
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/web-session-coordination.d.ts +15 -0
  39. package/dist/web-session-coordination.d.ts.map +1 -0
  40. package/dist/web-session-coordination.js +63 -0
  41. package/dist/web-session-coordination.js.map +1 -0
  42. package/dist/web.d.ts.map +1 -1
  43. package/dist/web.js +13 -3
  44. package/dist/web.js.map +1 -1
  45. package/docs/auth.md +8 -1
  46. package/docs/files.md +163 -0
  47. package/docs/jobs.md +66 -0
  48. 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 readCurrent = async () => {
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 (restoreFlight)
157
+ if (authMutationActive)
158
+ throw stateChanged();
159
+ const version = sessionVersion;
160
+ if (restoreFlight && restoreFlightVersion === version)
115
161
  return restoreFlight;
116
- restoreFlight = (async () => {
162
+ const flight = (async () => {
117
163
  try {
118
- return await readCurrent();
164
+ return await readCurrent(version);
119
165
  }
120
166
  catch (error) {
121
- if (!isMissingSession(error))
122
- throw error;
123
- clear();
124
- return null;
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 restoreFlight;
182
+ return await flight;
129
183
  }
130
184
  finally {
131
- restoreFlight = null;
185
+ if (restoreFlight === flight)
186
+ restoreFlight = null;
132
187
  }
133
188
  };
134
189
  const refreshSession = async () => {
135
- if (refreshFlight)
190
+ if (authMutationActive || externalSessionChangePending)
191
+ throw stateChanged();
192
+ const version = sessionVersion;
193
+ if (refreshFlight && refreshFlightVersion === version)
136
194
  return refreshFlight;
137
- refreshFlight = (async () => {
138
- const session = await account.refreshCurrentSession();
139
- expiresAt = expiration(session.expire);
140
- const currentUser = await account.getCurrentUser();
141
- if (!validUser(currentUser)) {
142
- clear();
143
- throw new QmuseCloudError('AppBase returned an invalid current user', 'AUTH_USER_INVALID');
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 refreshFlight;
230
+ return await flight;
151
231
  }
152
232
  finally {
153
- refreshFlight = null;
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
- expiresAt = expiration(session.expire);
251
+ if (version !== sessionVersion)
252
+ throw stateChanged();
167
253
  const currentUser = await account.getCurrentUser();
168
- if (!validUser(currentUser)) {
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 loginWithProvider = async (input) => {
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
- const path = input.provider === 'wechat' ? '/api/auth/wechat/mini/login' : '/api/auth/alipay/mini/login';
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
- return {
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
- if (!initialized)
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
- const result = loginResult(await request({ method: 'POST', path: '/api/auth/login', body: input }));
217
- return establishSession(result);
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 loginWithProvider(await options.acquireMiniappCredential());
347
+ return mutateSession(async (version) => exchangeProvider(await options.acquireMiniappCredential(), version));
225
348
  },
226
349
  refreshSession,
227
350
  restoreSession,
228
351
  async logout() {
229
- try {
230
- await account.deleteCurrentSession();
231
- }
232
- finally {
233
- clear();
234
- }
352
+ return endSession(() => account.deleteCurrentSession());
235
353
  },
236
354
  async logoutAll() {
237
- try {
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 && expiresAt - now() <= refreshBeforeMs)
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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAKV,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AA6GpB,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,CAwD9B"}
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
- return JSON.stringify(request.body);
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 body = serializeBody(request);
114
- const input = {
115
- functionId,
116
- body,
117
- async: false,
118
- path: buildPath(request.path, request.query),
119
- method: request.method,
120
- headers: normalizeRequestHeaders(request.headers, body.length > 0),
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
- const status = execution.responseStatusCode;
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
- reportRequestFailure({ observer: options.onRequestFailure, request, execution, error });
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 execute(request);
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
- return execute(request);
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