@hexclave/next 1.0.29 → 1.0.32

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 (67) hide show
  1. package/dist/components-page/oauth-callback.d.ts.map +1 -1
  2. package/dist/components-page/oauth-callback.js +2 -0
  3. package/dist/components-page/oauth-callback.js.map +1 -1
  4. package/dist/components-page/oauth-callback.test.js +3 -1
  5. package/dist/components-page/oauth-callback.test.js.map +1 -1
  6. package/dist/esm/components-page/oauth-callback.d.ts.map +1 -1
  7. package/dist/esm/components-page/oauth-callback.js +2 -0
  8. package/dist/esm/components-page/oauth-callback.js.map +1 -1
  9. package/dist/esm/components-page/oauth-callback.test.js +3 -1
  10. package/dist/esm/components-page/oauth-callback.test.js.map +1 -1
  11. package/dist/esm/generated/quetzal-translations.d.ts +2 -2
  12. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts +1 -0
  13. package/dist/esm/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
  14. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts +1 -1
  15. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -1
  16. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js +4 -8
  17. package/dist/esm/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -1
  18. package/dist/esm/lib/hexclave-app/apps/implementations/common.js +1 -1
  19. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.d.ts +15 -1
  20. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.d.ts.map +1 -1
  21. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.js +30 -15
  22. package/dist/esm/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -1
  23. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.d.ts.map +1 -1
  24. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.js +8 -1
  25. package/dist/esm/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -1
  26. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.d.ts +1 -0
  27. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.d.ts.map +1 -1
  28. package/dist/esm/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -1
  29. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.d.ts +13 -0
  30. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.d.ts.map +1 -1
  31. package/dist/esm/lib/hexclave-app/apps/interfaces/server-app.js.map +1 -1
  32. package/dist/esm/lib/hexclave-app/teams/index.d.ts +4 -0
  33. package/dist/esm/lib/hexclave-app/teams/index.d.ts.map +1 -1
  34. package/dist/esm/lib/hexclave-app/teams/index.js.map +1 -1
  35. package/dist/generated/quetzal-translations.d.ts +2 -2
  36. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts +1 -0
  37. package/dist/lib/hexclave-app/apps/implementations/admin-app-impl.d.ts.map +1 -1
  38. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts +1 -1
  39. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.d.ts.map +1 -1
  40. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js +4 -8
  41. package/dist/lib/hexclave-app/apps/implementations/client-app-impl.js.map +1 -1
  42. package/dist/lib/hexclave-app/apps/implementations/common.js +1 -1
  43. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.d.ts +15 -1
  44. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.d.ts.map +1 -1
  45. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.js +30 -15
  46. package/dist/lib/hexclave-app/apps/implementations/server-app-impl.js.map +1 -1
  47. package/dist/lib/hexclave-app/apps/implementations/session-replay.d.ts.map +1 -1
  48. package/dist/lib/hexclave-app/apps/implementations/session-replay.js +8 -1
  49. package/dist/lib/hexclave-app/apps/implementations/session-replay.js.map +1 -1
  50. package/dist/lib/hexclave-app/apps/interfaces/client-app.d.ts +1 -0
  51. package/dist/lib/hexclave-app/apps/interfaces/client-app.d.ts.map +1 -1
  52. package/dist/lib/hexclave-app/apps/interfaces/client-app.js.map +1 -1
  53. package/dist/lib/hexclave-app/apps/interfaces/server-app.d.ts +13 -0
  54. package/dist/lib/hexclave-app/apps/interfaces/server-app.d.ts.map +1 -1
  55. package/dist/lib/hexclave-app/apps/interfaces/server-app.js.map +1 -1
  56. package/dist/lib/hexclave-app/teams/index.d.ts +4 -0
  57. package/dist/lib/hexclave-app/teams/index.d.ts.map +1 -1
  58. package/dist/lib/hexclave-app/teams/index.js.map +1 -1
  59. package/package.json +4 -4
  60. package/src/components-page/oauth-callback.test.tsx +4 -0
  61. package/src/components-page/oauth-callback.tsx +6 -0
  62. package/src/lib/hexclave-app/apps/implementations/client-app-impl.ts +3 -5
  63. package/src/lib/hexclave-app/apps/implementations/server-app-impl.ts +35 -19
  64. package/src/lib/hexclave-app/apps/implementations/session-replay.ts +16 -1
  65. package/src/lib/hexclave-app/apps/interfaces/client-app.ts +1 -0
  66. package/src/lib/hexclave-app/apps/interfaces/server-app.ts +5 -0
  67. package/src/lib/hexclave-app/teams/index.ts +4 -0
@@ -114,6 +114,9 @@ const MAX_APPROX_BYTES_PER_BATCH = 512_000;
114
114
  // envelope overhead (browser_session_id, timestamps, wrapper keys, etc.).
115
115
  const MAX_FLUSH_PAYLOAD_BYTES = 900_000;
116
116
 
117
+ // Reused across the emit hot path to avoid per-event allocation.
118
+ const textEncoder = new TextEncoder();
119
+
117
120
  export type StoredSession = {
118
121
  session_id: string,
119
122
  created_at_ms: number,
@@ -290,6 +293,17 @@ export class SessionRecorder {
290
293
  // When _flushInProgress blocked earlier flushes, events can accumulate
291
294
  // well past MAX_APPROX_BYTES_PER_BATCH; sending them all at once would
292
295
  // exceed the server's 1MB body limit (413).
296
+ // A single event over the limit can't be sent (rrweb events aren't splittable); drop it and move on.
297
+ const firstSize = allSizes[offset] ?? throwErr("_eventSizes out of sync with _events — this should never happen");
298
+ if (firstSize > MAX_FLUSH_PAYLOAD_BYTES) {
299
+ captureWarning(
300
+ "SessionRecorder.flush",
301
+ new Error(`Dropping oversized session replay event (${firstSize} bytes > ${MAX_FLUSH_PAYLOAD_BYTES} byte limit); it cannot be sent without a 413.`),
302
+ );
303
+ offset += 1;
304
+ continue;
305
+ }
306
+
293
307
  let batchBytes = 0;
294
308
  let batchEnd = offset;
295
309
  for (let i = offset; i < allEvents.length; i++) {
@@ -388,7 +402,8 @@ export class SessionRecorder {
388
402
  }
389
403
  }
390
404
 
391
- const eventSize = JSON.stringify(event).length;
405
+ // Measure UTF-8 byte length to match the server's byte limit (.length counts UTF-16 units, undercounting multibyte content).
406
+ const eventSize = textEncoder.encode(JSON.stringify(event)).byteLength;
392
407
  this._events.push(event);
393
408
  this._eventSizes.push(eventSize);
394
409
  this._approxBytes += eventSize;
@@ -136,6 +136,7 @@ export type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId ex
136
136
  redirectToUrl(url: string | URL, options?: { replace?: boolean }): Promise<void>,
137
137
  redirectToHandler(handlerName: keyof HandlerUrls, options?: RedirectToOptions): Promise<void>,
138
138
  signInWithTokens(tokens: { accessToken: string, refreshToken: string }): Promise<void>,
139
+ awaitPendingAuthResolutions(): Promise<void>,
139
140
  },
140
141
  }
141
142
  & AsyncStoreProperty<"project", [], Project, false>
@@ -35,6 +35,11 @@ export type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId ex
35
35
  ({ productId: string } | { product: InlineProduct }) &
36
36
  { quantity?: number }
37
37
  )): Promise<void>,
38
+ createCheckoutUrl(options: (
39
+ ({ userId: string } | { teamId: string } | { customCustomerId: string }) &
40
+ ({ productId: string } | { product: InlineProduct }) &
41
+ { returnUrl?: string }
42
+ )): Promise<string>,
38
43
 
39
44
  useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: 'redirect' }): ProjectCurrentServerUser<ProjectId>,
40
45
  useUser(options: GetCurrentUserOptions<HasTokenStore> & { or: 'throw' }): ProjectCurrentServerUser<ProjectId>,
@@ -139,6 +139,10 @@ type ServerListUsersOptionsBase = {
139
139
  * Free-text search. Matches user ID (exact UUID), display name, and contact channels (e.g. primary email).
140
140
  */
141
141
  query?: string,
142
+ /**
143
+ * Exclude users whose primary email domain matches one of these exact domains.
144
+ */
145
+ excludedEmailDomains?: string[],
142
146
  /**
143
147
  * Only return users who are members of the given team.
144
148
  */