@qoretechnologies/reqraft 0.10.64 → 0.10.65-pr.148.gc6381e4

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 (64) hide show
  1. package/.claude/CLAUDE.md +1 -0
  2. package/dist/components/supportTicket/InterfaceReferenceTags.d.ts +13 -1
  3. package/dist/components/supportTicket/InterfaceReferenceTags.d.ts.map +1 -1
  4. package/dist/components/supportTicket/InterfaceReferenceTags.js +11 -4
  5. package/dist/components/supportTicket/InterfaceReferenceTags.js.map +1 -1
  6. package/dist/components/supportTicket/ReferencePicker.d.ts.map +1 -1
  7. package/dist/components/supportTicket/ReferencePicker.js +1 -1
  8. package/dist/components/supportTicket/ReferencePicker.js.map +1 -1
  9. package/dist/components/supportTicket/WorkspaceAccessStatus.d.ts +55 -0
  10. package/dist/components/supportTicket/WorkspaceAccessStatus.d.ts.map +1 -0
  11. package/dist/components/supportTicket/WorkspaceAccessStatus.js +79 -0
  12. package/dist/components/supportTicket/WorkspaceAccessStatus.js.map +1 -0
  13. package/dist/components/supportTicket/accessMeta.d.ts +50 -0
  14. package/dist/components/supportTicket/accessMeta.d.ts.map +1 -0
  15. package/dist/components/supportTicket/accessMeta.js +174 -0
  16. package/dist/components/supportTicket/accessMeta.js.map +1 -0
  17. package/dist/components/supportTicket/index.d.ts +2 -0
  18. package/dist/components/supportTicket/index.d.ts.map +1 -1
  19. package/dist/components/supportTicket/index.js +2 -0
  20. package/dist/components/supportTicket/index.js.map +1 -1
  21. package/dist/components/supportTicket/meta.d.ts +62 -2
  22. package/dist/components/supportTicket/meta.d.ts.map +1 -1
  23. package/dist/components/supportTicket/meta.js +116 -3
  24. package/dist/components/supportTicket/meta.js.map +1 -1
  25. package/dist/components/supportTicket/ticketModel.d.ts +10 -0
  26. package/dist/components/supportTicket/ticketModel.d.ts.map +1 -1
  27. package/dist/components/ticketReferences/TicketReferences.d.ts +10 -1
  28. package/dist/components/ticketReferences/TicketReferences.d.ts.map +1 -1
  29. package/dist/components/ticketReferences/TicketReferences.js +12 -8
  30. package/dist/components/ticketReferences/TicketReferences.js.map +1 -1
  31. package/dist/components/ticketThread/TicketThread.d.ts +30 -1
  32. package/dist/components/ticketThread/TicketThread.d.ts.map +1 -1
  33. package/dist/components/ticketThread/TicketThread.js +51 -13
  34. package/dist/components/ticketThread/TicketThread.js.map +1 -1
  35. package/dist/components/ticketThread/index.d.ts +1 -1
  36. package/dist/components/ticketThread/index.d.ts.map +1 -1
  37. package/dist/index.d.ts +1 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/providers/StorageProvider.d.ts +11 -0
  41. package/dist/providers/StorageProvider.d.ts.map +1 -1
  42. package/dist/providers/StorageProvider.js +21 -3
  43. package/dist/providers/StorageProvider.js.map +1 -1
  44. package/dist/stores/currentUser/currentUser.d.ts +42 -0
  45. package/dist/stores/currentUser/currentUser.d.ts.map +1 -1
  46. package/dist/stores/currentUser/currentUser.js.map +1 -1
  47. package/package.json +2 -2
  48. package/src/components/supportTicket/InterfaceReferenceTags.stories.tsx +56 -0
  49. package/src/components/supportTicket/InterfaceReferenceTags.tsx +27 -7
  50. package/src/components/supportTicket/ReferencePicker.tsx +4 -1
  51. package/src/components/supportTicket/WorkspaceAccessStatus.stories.tsx +105 -0
  52. package/src/components/supportTicket/WorkspaceAccessStatus.tsx +176 -0
  53. package/src/components/supportTicket/accessMeta.ts +210 -0
  54. package/src/components/supportTicket/index.ts +2 -0
  55. package/src/components/supportTicket/meta.ts +156 -4
  56. package/src/components/supportTicket/ticketModel.ts +10 -0
  57. package/src/components/ticketReferences/TicketReferences.stories.tsx +40 -0
  58. package/src/components/ticketReferences/TicketReferences.tsx +24 -10
  59. package/src/components/ticketThread/TicketThread.stories.tsx +103 -1
  60. package/src/components/ticketThread/TicketThread.tsx +131 -15
  61. package/src/components/ticketThread/index.ts +1 -0
  62. package/src/index.tsx +1 -0
  63. package/src/providers/StorageProvider.tsx +20 -3
  64. package/src/stores/currentUser/currentUser.tsx +43 -0
@@ -1,5 +1,6 @@
1
1
  export { TicketThread, ticketMessageDomId } from './TicketThread';
2
2
  export type {
3
+ ITicketSystemEventAction,
3
4
  ITicketThreadAttachment,
4
5
  ITicketThreadMessage,
5
6
  ITicketThreadProps,
package/src/index.tsx CHANGED
@@ -36,6 +36,7 @@ export { currentUserStore as ReqraftCurrentUserStore } from './stores/currentUse
36
36
  export type {
37
37
  ICurrentUser,
38
38
  ICurrentUserStore,
39
+ ICurrentUserSupportSession,
39
40
  } from './stores/currentUser/currentUser';
40
41
  export {
41
42
  fetchConfig,
@@ -6,7 +6,7 @@ import { ReqraftStorageContext, TReqraftStorage } from '../contexts/StorageConte
6
6
  import { useFetch } from '../hooks/useFetch/useFetch';
7
7
  import { useReqraftProperty } from '../hooks/useReqraftProperty';
8
8
  import { TReqraftStorageValue } from '../hooks/useStorage/useStorage';
9
- import { currentUserStore } from '../stores/currentUser/currentUser';
9
+ import { currentUserStore, ICurrentUser } from '../stores/currentUser/currentUser';
10
10
  import { isQueryCancelled } from '../utils/fetch';
11
11
  import { IReqraftProviderProps } from './ReqraftProvider';
12
12
 
@@ -27,6 +27,18 @@ export const applyStorageWrite = (
27
27
  value: unknown
28
28
  ): TReqraftStorage => set(cloneDeep(storage) ?? {}, path, value);
29
29
 
30
+ /**
31
+ * Whether the current user's storage may be persisted. The server answers
32
+ * `storage_writable: false` for an identity whose storage is not its own to keep — a
33
+ * staff member in an interactive support session reads a customer's workspace as the
34
+ * workspace's reader principal, and a preference they flip must not land in that
35
+ * principal's storage (qorus#693). A write for such a user is applied in memory only,
36
+ * so the page behaves as it always does, and nothing is sent. A user the flag is
37
+ * absent for is writable: that is every server from before the flag existed.
38
+ */
39
+ export const storageIsWritable = (user?: Pick<ICurrentUser, 'storage_writable'>): boolean =>
40
+ user?.storage_writable !== false;
41
+
30
42
  export interface IReqraftStorageProviderProps
31
43
  extends Pick<IReqraftProviderProps, 'waitForStorage'> {
32
44
  children: ReactNode;
@@ -95,7 +107,10 @@ export const ReqraftUserProvider = ({ children, waitForStorage }: IReqraftStorag
95
107
 
96
108
  updateCurrentUserStorage(updatedStorage);
97
109
 
98
- load({ body: { storage: updatedStorage } });
110
+ // in memory only for a user whose storage is not theirs to keep
111
+ if (storageIsWritable(currentUserStore.getState().currentUser)) {
112
+ load({ body: { storage: updatedStorage } });
113
+ }
99
114
  },
100
115
  [appName, load, updateCurrentUserStorage]
101
116
  );
@@ -111,7 +126,9 @@ export const ReqraftUserProvider = ({ children, waitForStorage }: IReqraftStorag
111
126
 
112
127
  updateCurrentUserStorage(updatedStorage);
113
128
 
114
- load({ body: { storage_path: _path } });
129
+ if (storageIsWritable(currentUserStore.getState().currentUser)) {
130
+ load({ body: { storage_path: _path } });
131
+ }
115
132
  },
116
133
  [appName, load, updateCurrentUserStorage]
117
134
  );
@@ -1,6 +1,39 @@
1
1
  import { create } from 'zustand';
2
2
  import { IReqraftFetchResponse, isQueryCancelled, query } from '../../utils/fetch';
3
3
 
4
+ /**
5
+ * The interactive support session a current user is in, when it is one (qorus#693
6
+ * Layer 3): a staff member reading a customer's workspace in the IDE, read-only, as
7
+ * the workspace's support reader. Exactly what the server puts on the request context
8
+ * for such a session, never a token. Absent for every ordinary user.
9
+ */
10
+ export interface ICurrentUserSupportSession {
11
+ /** the session's id on the control plane */
12
+ session_id: string;
13
+ /** the customer's grant the session runs under */
14
+ grant_id: string;
15
+ /** the ticket the grant belongs to */
16
+ ticket_id: string;
17
+ /** the ticket's number, for display */
18
+ ticket_number?: number;
19
+ /** the control-plane staff identity the session belongs to */
20
+ actor: string;
21
+ /** the staff member's display name, when the control plane has it */
22
+ actor_name?: string;
23
+ /** the workspace's portable namespace */
24
+ group_namespace: number;
25
+ /** the workspace group's name */
26
+ group_name?: string;
27
+ /** the identity profile, `workspace-read` */
28
+ profile: string;
29
+ /** when the session ends at the latest: the grant's expiry (ISO 8601) */
30
+ expires: string;
31
+ /** where the IDE opens — `kind` and `name` or `id` — when the staff member came from a reference */
32
+ target?: Record<string, unknown>;
33
+ /** the control-plane page to return to */
34
+ portal_url?: string;
35
+ }
36
+
4
37
  export interface ICurrentUser {
5
38
  provider: string;
6
39
  username: string;
@@ -19,6 +52,16 @@ export interface ICurrentUser {
19
52
  storage?: Record<string, any>;
20
53
  sandboxed?: boolean;
21
54
  default_group?: string;
55
+ /**
56
+ * Whether the user's storage can be written back to the server. `false` for an
57
+ * identity whose storage is not its own to keep — an interactive support session
58
+ * reads a workspace as its reader principal — and then every storage write stays
59
+ * in memory for the page's lifetime (see `ReqraftUserProvider`). Absent means
60
+ * writable, as on every server from before the flag.
61
+ */
62
+ storage_writable?: boolean;
63
+ /** present only in an interactive support session (qorus#693 Layer 3) */
64
+ support_session?: ICurrentUserSupportSession;
22
65
  }
23
66
 
24
67
  export interface ICurrentUserStore {