quantum-component-library 1.4.68 → 1.4.70

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 (43) hide show
  1. package/dist/components.cjs +1 -1
  2. package/dist/components.js +450 -443
  3. package/dist/{dnd-core-vendor-Dpm8Ha_h.cjs → dnd-core-vendor-BQo1WiA6.cjs} +1 -1
  4. package/dist/{dnd-core-vendor-BvkN08kD.js → dnd-core-vendor-NmXYCL5j.js} +2 -2
  5. package/dist/generated/graphql.d.ts +584 -3
  6. package/dist/generated-graphql.cjs +1 -1
  7. package/dist/generated-graphql.js +82 -75
  8. package/dist/{graphql-vendor-ipMKtdBu.js → graphql-vendor-BOwWQmc4.js} +1 -1
  9. package/dist/{graphql-vendor-CSrUjvOC.cjs → graphql-vendor-CMjSICJP.cjs} +1 -1
  10. package/dist/hooks.cjs +8 -8
  11. package/dist/hooks.js +136 -118
  12. package/dist/index.cjs +1 -1
  13. package/dist/index.js +121 -119
  14. package/dist/lib/hooks/use-graphql-client.d.ts +20 -0
  15. package/dist/lib/hooks/use-graphql-client.test.d.ts +1 -0
  16. package/dist/lib/types/sensor-info.test.d.ts +1 -0
  17. package/dist/lib/utils/parameters.d.ts +14 -1
  18. package/dist/lib/utils/parameters.test.d.ts +1 -0
  19. package/dist/{lodash-vendor-CfNg9qwP.cjs → lodash-vendor-CGEP7jch.cjs} +1 -1
  20. package/dist/{lodash-vendor-CY4G3-79.js → lodash-vendor-Deq42ySR.js} +1 -1
  21. package/dist/{other-CPHWCRXi.js → other-Bp68Uzz1.js} +3 -3
  22. package/dist/{other-B_xypnnb.cjs → other-Bsl3n3tj.cjs} +1 -1
  23. package/dist/{react-dnd-vendor-DvbjNa5U.cjs → react-dnd-vendor-CPQdLxxA.cjs} +1 -1
  24. package/dist/{react-dnd-vendor-DYesaYGm.js → react-dnd-vendor-D7ujbWN2.js} +2 -2
  25. package/dist/{react-select-vendor-B0QF8gkj.js → react-select-vendor-B-vWCyYj.js} +1 -1
  26. package/dist/{react-select-vendor-BLLqfZvd.cjs → react-select-vendor-Dletsq31.cjs} +1 -1
  27. package/dist/services-human-Cl36G8mV.cjs +1 -0
  28. package/dist/{services-human-D5IllQkM.js → services-human-mjbBM3xQ.js} +2 -2
  29. package/dist/services.cjs +1 -1
  30. package/dist/services.js +1 -1
  31. package/dist/types.cjs +1 -1
  32. package/dist/types.js +13 -13
  33. package/dist/{utils-conversion-DFO1UVSN.cjs → utils-conversion-CBAxJ_Vx.cjs} +1 -1
  34. package/dist/{utils-conversion-BQfLNP0g.js → utils-conversion-Dmt0JwSC.js} +1 -1
  35. package/dist/{utils-parameters-DkefNhWo.js → utils-parameters-BiyUnm5t.js} +17 -7
  36. package/dist/utils-parameters-Bx16_6xw.cjs +1 -0
  37. package/dist/utils.cjs +1 -1
  38. package/dist/utils.js +19 -18
  39. package/dist/{vendor-DeYnrakH.cjs → vendor-CNEuzHxC.cjs} +1 -1
  40. package/dist/{vendor-BSFJsa1P.js → vendor-D_9BWGCW.js} +1 -1
  41. package/package.json +6 -3
  42. package/dist/services-human-DFPelsei.cjs +0 -1
  43. package/dist/utils-parameters-dwKmz1VU.cjs +0 -1
@@ -60,6 +60,7 @@ export type Scalars = {
60
60
  };
61
61
  };
62
62
  export type AcceptInvitationInput = {
63
+ dateOfBirth?: InputMaybe<Scalars['Date']['input']>;
63
64
  firstName: Scalars['String']['input'];
64
65
  lastName: Scalars['String']['input'];
65
66
  password: Scalars['String']['input'];
@@ -68,9 +69,25 @@ export type AcceptInvitationInput = {
68
69
  };
69
70
  export type AcceptInvitationResult = {
70
71
  __typename?: 'AcceptInvitationResult';
71
- session: AuthSession;
72
+ /**
73
+ * AC-5.2.9 — null for an admin invitation: acceptance carries no session, no
74
+ * cookie, no token, and nothing in the response that can call the API as the
75
+ * new account. The invitee is sent to sign in and proves the password reached
76
+ * the system as they typed it. Every other invitation type still gets one.
77
+ */
78
+ session?: Maybe<AuthSession>;
72
79
  user: CurrentUser;
73
80
  };
81
+ /**
82
+ * The same three states, for any account rather than only a Quantum staff one.
83
+ * Declared separately from AdminLifecycle so the admin screen's contract is not
84
+ * widened by a change made for the clinic staff list.
85
+ */
86
+ export declare enum AccountLifecycle {
87
+ Active = "ACTIVE",
88
+ Removed = "REMOVED",
89
+ Suspended = "SUSPENDED"
90
+ }
74
91
  export type Action = {
75
92
  __typename?: 'Action';
76
93
  activityKind: ActionActivityKind;
@@ -123,6 +140,36 @@ export declare enum ActivityType {
123
140
  IsolatedAction = "IsolatedAction",
124
141
  IsolatedMovement = "IsolatedMovement"
125
142
  }
143
+ export type AdminHolder = {
144
+ __typename?: 'AdminHolder';
145
+ createdAt: Scalars['String']['output'];
146
+ /** MOB-554 — when a suspension began, so the screen can say for how long. */
147
+ deletedAt?: Maybe<Scalars['String']['output']>;
148
+ email: Scalars['String']['output'];
149
+ firstName?: Maybe<Scalars['String']['output']>;
150
+ id: Scalars['ID']['output'];
151
+ lastName?: Maybe<Scalars['String']['output']>;
152
+ lifecycle: AdminLifecycle;
153
+ /**
154
+ * US-4.7 — the profile carrying this person's name, which is what
155
+ * updateUserProfile acts on. Nullable: an account can exist before a profile
156
+ * does, and the screen has to say so rather than send a null id to the server.
157
+ */
158
+ profileId?: Maybe<Scalars['ID']['output']>;
159
+ username: Scalars['String']['output'];
160
+ };
161
+ /**
162
+ * US-5.1 — one Quantum staff account and where it sits in its lifecycle.
163
+ *
164
+ * ACTIVE, SUSPENDED and REMOVED are distinguishable because they mean different
165
+ * things: a suspended person can come back, a removed one cannot, and the record
166
+ * of who held Quantum-level access is never lost either way.
167
+ */
168
+ export declare enum AdminLifecycle {
169
+ Active = "ACTIVE",
170
+ Removed = "REMOVED",
171
+ Suspended = "SUSPENDED"
172
+ }
126
173
  export type AnalysisAction = {
127
174
  __typename?: 'AnalysisAction';
128
175
  id: Scalars['ID']['output'];
@@ -194,6 +241,36 @@ export type AnalysisSubClassification = {
194
241
  id: Scalars['ID']['output'];
195
242
  name: Scalars['String']['output'];
196
243
  };
244
+ export type AssignCatalog = {
245
+ __typename?: 'AssignCatalog';
246
+ activities: Array<AssignCatalogActivity>;
247
+ programs: Array<AssignCatalogProgram>;
248
+ };
249
+ export type AssignCatalogActivity = {
250
+ __typename?: 'AssignCatalogActivity';
251
+ id: Scalars['ID']['output'];
252
+ name: Scalars['String']['output'];
253
+ };
254
+ export type AssignCatalogProgram = {
255
+ __typename?: 'AssignCatalogProgram';
256
+ activityIds: Array<Scalars['ID']['output']>;
257
+ id: Scalars['ID']['output'];
258
+ name: Scalars['String']['output'];
259
+ };
260
+ /** How one activity in a client's plan got there (AC-14.2.4): picked individually, supplied by an assigned program, or both. */
261
+ export type AssignedActionProvenance = {
262
+ __typename?: 'AssignedActionProvenance';
263
+ actionId: Scalars['ID']['output'];
264
+ /** The practitioner ticked this activity itself (a direct assignment). */
265
+ pickedIndividually: Scalars['Boolean']['output'];
266
+ /** The assigned programs that supply it. Empty when it is individually picked only. */
267
+ suppliedByModuleIds: Array<Scalars['ID']['output']>;
268
+ };
269
+ export type AssignedActionReport = {
270
+ __typename?: 'AssignedActionReport';
271
+ actionId: Scalars['ID']['output'];
272
+ reportId: Scalars['ID']['output'];
273
+ };
197
274
  export type AssignedReport = {
198
275
  __typename?: 'AssignedReport';
199
276
  autoGenerate: Scalars['Boolean']['output'];
@@ -205,15 +282,93 @@ export type AssignedReport = {
205
282
  testReport?: Maybe<TestReportUnion>;
206
283
  testReportId?: Maybe<Scalars['ID']['output']>;
207
284
  };
285
+ /**
286
+ * One staged change, as the practitioner made it. A change LIST rather than a
287
+ * desired full set, so a save touches only the items this practitioner staged
288
+ * and a colleague's concurrent change is never reverted (AC-4.4.24).
289
+ */
290
+ export type AssignmentChangeInput = {
291
+ /** true = in the client's plan afterwards, false = not. */
292
+ assigned: Scalars['Boolean']['input'];
293
+ itemId: Scalars['ID']['input'];
294
+ kind: AssignmentItemKind;
295
+ /** ACTION + assigned:true only. null detaches; omitted leaves it untouched. */
296
+ reportId?: InputMaybe<Scalars['ID']['input']>;
297
+ };
298
+ /** Whether this item ended in the state that was chosen (AC-4.6.1). */
299
+ export type AssignmentChangeResult = {
300
+ __typename?: 'AssignmentChangeResult';
301
+ applied: Scalars['Boolean']['output'];
302
+ itemId: Scalars['ID']['output'];
303
+ kind: AssignmentItemKind;
304
+ /** Machine-readable code when applied is false. Never a client-facing string. */
305
+ reason?: Maybe<Scalars['String']['output']>;
306
+ };
307
+ export declare enum AssignmentItemKind {
308
+ Action = "ACTION",
309
+ Module = "MODULE"
310
+ }
311
+ export type AttachTestFilesInput = {
312
+ dataUploadId?: InputMaybe<Scalars['ID']['input']>;
313
+ isHorizontalFlip?: InputMaybe<Scalars['Boolean']['input']>;
314
+ metaData?: InputMaybe<Scalars['String']['input']>;
315
+ requestPose?: InputMaybe<Scalars['Boolean']['input']>;
316
+ trimEndMs?: InputMaybe<Scalars['Int']['input']>;
317
+ trimStartMs?: InputMaybe<Scalars['Int']['input']>;
318
+ videoUploadId?: InputMaybe<Scalars['ID']['input']>;
319
+ };
320
+ export type AuditLogEntry = {
321
+ __typename?: 'AuditLogEntry';
322
+ action: Scalars['String']['output'];
323
+ actorEmail?: Maybe<Scalars['String']['output']>;
324
+ actorUserId?: Maybe<Scalars['ID']['output']>;
325
+ createdAt: Scalars['String']['output'];
326
+ groupId?: Maybe<Scalars['ID']['output']>;
327
+ id: Scalars['ID']['output'];
328
+ metadata?: Maybe<Scalars['String']['output']>;
329
+ profileId?: Maybe<Scalars['ID']['output']>;
330
+ targetUserId?: Maybe<Scalars['ID']['output']>;
331
+ };
332
+ export type AuditLogFilter = {
333
+ action?: InputMaybe<Scalars['String']['input']>;
334
+ actorUserId?: InputMaybe<Scalars['ID']['input']>;
335
+ limit?: InputMaybe<Scalars['Int']['input']>;
336
+ offset?: InputMaybe<Scalars['Int']['input']>;
337
+ profileId?: InputMaybe<Scalars['ID']['input']>;
338
+ };
208
339
  export type AuthSession = {
209
340
  __typename?: 'AuthSession';
210
341
  accessToken: Scalars['String']['output'];
342
+ /** Seconds until accessToken expires — refresh before it does, without decoding the JWT. */
343
+ expiresIn: Scalars['Int']['output'];
211
344
  refreshToken?: Maybe<Scalars['String']['output']>;
212
345
  };
213
346
  export type ChangePasswordInput = {
214
- newPassword: Scalars['String']['input'];
347
+ /**
348
+ * Required when changing YOUR OWN password (AC-6.2.1). The mutation asked for
349
+ * no current password at all, so whoever held an open session could change it —
350
+ * holding a session is not by itself enough. Ignored when an authorised
351
+ * operator resets somebody else's, which is a different act governed by rows
352
+ * B.9 and C.7.
353
+ */
354
+ currentPassword?: InputMaybe<Scalars['String']['input']>;
355
+ /**
356
+ * Required on every path that SETS a password: changing your own, and an
357
+ * operator resetting a colleague inside their own organisation.
358
+ *
359
+ * Omitted on the path that sends a LINK — a client, or anybody outside the
360
+ * caller's organisation (AC-4.9.2, AC-4.9.5). Nullable for exactly that reason:
361
+ * the Console must not offer a field whose value is discarded (AC-4.9.9), and a
362
+ * required field forced it to send one. The server refuses an omission on a path
363
+ * that needs it rather than inventing a password.
364
+ */
365
+ newPassword?: InputMaybe<Scalars['String']['input']>;
215
366
  userId: Scalars['ID']['input'];
216
367
  };
368
+ export type ChangePasswordResult = {
369
+ __typename?: 'ChangePasswordResult';
370
+ outcome: PasswordChangeOutcome;
371
+ };
217
372
  export type ComparativeMetric = {
218
373
  __typename?: 'ComparativeMetric';
219
374
  labelA: Scalars['String']['output'];
@@ -247,6 +402,11 @@ export type CreateAccountInput = {
247
402
  groupId?: InputMaybe<Scalars['ID']['input']>;
248
403
  lastName: Scalars['String']['input'];
249
404
  password: Scalars['String']['input'];
405
+ /**
406
+ * Required. This path never called assignRole at all, so every account it
407
+ * created held no role (AC-1.3.2).
408
+ */
409
+ role: InvitationRole;
250
410
  username: Scalars['String']['input'];
251
411
  };
252
412
  export type CreateAccountResult = {
@@ -288,8 +448,20 @@ export type CreateInvitationInput = {
288
448
  email: Scalars['String']['input'];
289
449
  firstName?: InputMaybe<Scalars['String']['input']>;
290
450
  groupId: Scalars['ID']['input'];
451
+ /**
452
+ * Superseded by `role` and retained only so existing callers still parse. When
453
+ * `role` is given this is ignored; the pair disagreeing is refused.
454
+ */
291
455
  isAdmin?: InputMaybe<Scalars['Boolean']['input']>;
292
456
  lastName?: InputMaybe<Scalars['String']['input']>;
457
+ /** Required. The one role this invitation grants (AC-1.3.1). */
458
+ role: InvitationRole;
459
+ /**
460
+ * Required. It carried a server-side default of ADMIN_PORTAL, which minted the
461
+ * highest privilege in the system for any request that simply omitted it
462
+ * (AC-1.3.8).
463
+ */
464
+ type: InvitationType;
293
465
  };
294
466
  export type CreateKeypointGroupInput = {
295
467
  activity?: InputMaybe<Scalars['String']['input']>;
@@ -343,13 +515,21 @@ export type CreateTestInput = {
343
515
  actionId?: InputMaybe<Scalars['ID']['input']>;
344
516
  assignedReportIds?: InputMaybe<Array<Scalars['ID']['input']>>;
345
517
  comment?: InputMaybe<Scalars['String']['input']>;
518
+ dataUploadId?: InputMaybe<Scalars['ID']['input']>;
346
519
  endedAt?: InputMaybe<Scalars['Date']['input']>;
347
520
  info: CreateTestInfoInput;
521
+ isHorizontalFlip?: InputMaybe<Scalars['Boolean']['input']>;
348
522
  kind: Scalars['ID']['input'];
523
+ metaData?: InputMaybe<Scalars['String']['input']>;
349
524
  name: Scalars['String']['input'];
525
+ requestPose?: InputMaybe<Scalars['Boolean']['input']>;
526
+ routineId?: InputMaybe<Scalars['ID']['input']>;
350
527
  sessionId: Scalars['ID']['input'];
351
528
  startedAt: Scalars['Date']['input'];
352
529
  timezone?: InputMaybe<Scalars['String']['input']>;
530
+ trimEndMs?: InputMaybe<Scalars['Int']['input']>;
531
+ trimStartMs?: InputMaybe<Scalars['Int']['input']>;
532
+ videoUploadId?: InputMaybe<Scalars['ID']['input']>;
353
533
  };
354
534
  export type CreateTrialInput = {
355
535
  endFrame: Scalars['Int']['input'];
@@ -389,6 +569,25 @@ export type CurrentUser = {
389
569
  updatedAt: Scalars['String']['output'];
390
570
  username: Scalars['String']['output'];
391
571
  };
572
+ /**
573
+ * Display-only labels for the session list. Never used in an authorization
574
+ * decision, so treat them as untrusted client input when rendering.
575
+ */
576
+ export type DeviceInput = {
577
+ name?: InputMaybe<Scalars['String']['input']>;
578
+ platform?: InputMaybe<Scalars['String']['input']>;
579
+ };
580
+ /** One signed-in device. */
581
+ export type DeviceSession = {
582
+ __typename?: 'DeviceSession';
583
+ createdAt: Scalars['String']['output'];
584
+ /** True for the session making this request. */
585
+ current: Scalars['Boolean']['output'];
586
+ deviceName?: Maybe<Scalars['String']['output']>;
587
+ devicePlatform?: Maybe<Scalars['String']['output']>;
588
+ id: Scalars['ID']['output'];
589
+ lastUsedAt?: Maybe<Scalars['String']['output']>;
590
+ };
392
591
  export type DiscreteMetric = {
393
592
  __typename?: 'DiscreteMetric';
394
593
  unit: Scalars['Unit']['output'];
@@ -411,15 +610,37 @@ export type Group = {
411
610
  id: Scalars['ID']['output'];
412
611
  imageUrl?: Maybe<Scalars['String']['output']>;
413
612
  name: Scalars['String']['output'];
613
+ /**
614
+ * One page of the organisation's people, filtered by role and searchable by
615
+ * name, username or email. The split is decided ONCE, on the server.
616
+ */
617
+ people: PersonPage;
414
618
  profiles: Array<UserProfile>;
415
619
  updatedAt: Scalars['String']['output'];
620
+ /**
621
+ * Superseded by `people`. Unfiltered and unpaged; kept so existing callers
622
+ * still work while they move over.
623
+ */
416
624
  users: Array<User>;
417
625
  };
626
+ export type GroupPeopleArgs = {
627
+ cursor?: InputMaybe<Scalars['String']['input']>;
628
+ includeArchived?: InputMaybe<Scalars['Boolean']['input']>;
629
+ kind: PersonKind;
630
+ limit?: InputMaybe<Scalars['Int']['input']>;
631
+ search?: InputMaybe<Scalars['String']['input']>;
632
+ };
418
633
  export type GroupInfo = {
419
634
  __typename?: 'GroupInfo';
420
635
  id: Scalars['ID']['output'];
421
636
  name: Scalars['String']['output'];
422
637
  };
638
+ export type IdentityVerificationResult = {
639
+ __typename?: 'IdentityVerificationResult';
640
+ errorMessage?: Maybe<Scalars['String']['output']>;
641
+ locked: Scalars['Boolean']['output'];
642
+ verified: Scalars['Boolean']['output'];
643
+ };
423
644
  export type ImageMetric = {
424
645
  __typename?: 'ImageMetric';
425
646
  path: Scalars['String']['output'];
@@ -436,6 +657,9 @@ export type Invitation = {
436
657
  invitedBy?: Maybe<InvitationInviter>;
437
658
  isAdmin: Scalars['Boolean']['output'];
438
659
  lastName?: Maybe<Scalars['String']['output']>;
660
+ requiresIdentityVerification: Scalars['Boolean']['output'];
661
+ /** The role this invitation grants. Null only on rows predating US-1.3. */
662
+ role?: Maybe<InvitationRole>;
439
663
  status: InvitationStatus;
440
664
  type: InvitationType;
441
665
  };
@@ -445,6 +669,22 @@ export type InvitationInviter = {
445
669
  id: Scalars['ID']['output'];
446
670
  username: Scalars['String']['output'];
447
671
  };
672
+ /**
673
+ * The role an invitation grants. Every invitation carries exactly one, chosen at
674
+ * creation: an account that comes into existence holding no role can sign in and
675
+ * do nothing, and nobody can diagnose that from the outside (US-1.3).
676
+ *
677
+ * `admin` and `mobile_client` are absent from the Console's selector but present
678
+ * here, because the server decides both — an admin invitation is US-5.1's, and a
679
+ * client invitation is the customer web app's.
680
+ */
681
+ export declare enum InvitationRole {
682
+ AccountAdmin = "account_admin",
683
+ AccountManager = "account_manager",
684
+ AccountUser = "account_user",
685
+ Admin = "admin",
686
+ MobileClient = "mobile_client"
687
+ }
448
688
  export declare enum InvitationStatus {
449
689
  Accepted = "ACCEPTED",
450
690
  Cancelled = "CANCELLED",
@@ -458,6 +698,12 @@ export declare enum InvitationType {
458
698
  }
459
699
  export type InvitationValidation = {
460
700
  __typename?: 'InvitationValidation';
701
+ /**
702
+ * MOB-552 — why the token is not valid: INVITATION_NOT_FOUND, INVITATION_EXPIRED,
703
+ * INVITATION_ALREADY_USED or INVITATION_CANCELLED. errorMessage is left as the
704
+ * text existing clients display.
705
+ */
706
+ errorCode?: Maybe<Scalars['String']['output']>;
461
707
  errorMessage?: Maybe<Scalars['String']['output']>;
462
708
  invitation?: Maybe<Invitation>;
463
709
  valid: Scalars['Boolean']['output'];
@@ -549,6 +795,12 @@ export type MetricInput = {
549
795
  poiMetrics?: InputMaybe<Array<PoiMetricInput>>;
550
796
  table?: InputMaybe<TableMetricInput>;
551
797
  };
798
+ export declare enum MobileAccessStatus {
799
+ Accepted = "ACCEPTED",
800
+ Expired = "EXPIRED",
801
+ None = "NONE",
802
+ Pending = "PENDING"
803
+ }
552
804
  export type ModuleAction = {
553
805
  __typename?: 'ModuleAction';
554
806
  action: Action;
@@ -589,10 +841,57 @@ export type Mutation = {
589
841
  addActionToModule: ActionModule;
590
842
  archiveUser: Scalars['Boolean']['output'];
591
843
  assignActionToProfile: Scalars['Boolean']['output'];
844
+ assignModuleToProfile: Scalars['Boolean']['output'];
592
845
  assignRoutineToProfile: Scalars['Boolean']['output'];
593
846
  assignTestToRoutine: Scalars['Boolean']['output'];
847
+ attachReportToAssignedAction: Scalars['Boolean']['output'];
848
+ attachTestFiles: TestFile;
849
+ /**
850
+ * AC-4.6.12 — stop a pending change of email address, from the single-use link
851
+ * sent to the address currently on the account. Public for the same reason
852
+ * confirmation is, and a stronger one: the person objecting may be objecting
853
+ * because somebody else holds a session on their account.
854
+ *
855
+ * It can only ever STOP a change. There is no address it can set.
856
+ */
857
+ cancelEmailChange: Scalars['Boolean']['output'];
594
858
  cancelInvitation: Scalars['Boolean']['output'];
595
- changePassword: Scalars['Boolean']['output'];
859
+ /**
860
+ * AC-4.7.3 — cancel a pending change from the Console, which kills the
861
+ * verification link with it. Omit `userId` to cancel your own.
862
+ *
863
+ * The pair to the link in the warning email: the same discard, reached by
864
+ * somebody signed in with authority over the account rather than by somebody
865
+ * holding a token. Succeeds when nothing is pending — no pending change is the
866
+ * outcome the caller wanted.
867
+ */
868
+ cancelPendingEmailChange: Scalars['Boolean']['output'];
869
+ /**
870
+ * Change a password: your own (row D.3, and then `currentPassword` is required)
871
+ * or somebody else's (rows B.9 and C.7). The result says WHICH of the two
872
+ * outcomes happened rather than only that something did — see
873
+ * PasswordChangeOutcome.
874
+ */
875
+ changePassword: ChangePasswordResult;
876
+ /**
877
+ * US-4.4 — move a person between the three clinic roles.
878
+ *
879
+ * A role could only be assigned at invitation time; there was no way to change
880
+ * it afterwards from any interface, so a promotion meant deleting the person and
881
+ * inviting them again.
882
+ *
883
+ * Granting is always a REPLACEMENT, because an account holds exactly one role:
884
+ * there is no state in which it holds two, and none in which it holds none.
885
+ * `account_user` is the floor, so no clinic role change can produce a roleless
886
+ * account.
887
+ */
888
+ changeRole: User;
889
+ /**
890
+ * Confirm a change of email address. Public: the person opening the link is
891
+ * proving they hold the new mailbox, which is the whole point, and they may not
892
+ * be signed in when they do it.
893
+ */
894
+ confirmEmailChange: Scalars['Boolean']['output'];
596
895
  convertActionToQuantumOwned: Action;
597
896
  copyActions: Scalars['Boolean']['output'];
598
897
  copyModules: Scalars['Boolean']['output'];
@@ -630,18 +929,75 @@ export type Mutation = {
630
929
  deleteTrial: Scalars['Boolean']['output'];
631
930
  deleteTrialParameter: Scalars['Boolean']['output'];
632
931
  deleteUserProfile: Scalars['Boolean']['output'];
932
+ detachReportFromAssignedAction: Scalars['Boolean']['output'];
633
933
  duplicateAction: Scalars['Boolean']['output'];
634
934
  inviteMobileAppUser: Scalars['Boolean']['output'];
635
935
  inviteTeamMember: Invitation;
636
936
  login?: Maybe<LoginResult>;
937
+ /**
938
+ * Closes one session. Pass refreshToken to log out with an expired access
939
+ * token; otherwise the bearer token identifies the session. Always succeeds —
940
+ * a session that is already closed is the outcome the caller wanted.
941
+ */
942
+ logout: Scalars['Boolean']['output'];
943
+ /** Closes every session except the one making this request. */
944
+ logoutOtherDevices: Scalars['Boolean']['output'];
945
+ mobileInviteLink: Scalars['String']['output'];
637
946
  refresh: LoginResult;
947
+ removeAccountAdminRole: Scalars['Boolean']['output'];
638
948
  removeActionFromModule: ActionModule;
949
+ /**
950
+ * US-5.1 — REMOVE a Quantum staff account. NOT reversible: the same effects as
951
+ * suspending, and the role comes off so the person can never be restored.
952
+ * Bringing them back means a fresh invitation.
953
+ *
954
+ * Until now there was only suspend, used for both — so a departed employee
955
+ * still held an account with the highest privilege in the system, one click
956
+ * away from being live again, with nothing marking that they should not return.
957
+ */
958
+ removeAdmin: Scalars['Boolean']['output'];
639
959
  removeMobileAppAccess: Scalars['Boolean']['output'];
960
+ /**
961
+ * US-2.3 / row B.3 — REMOVE a staff member from a clinic. NOT reversible: the
962
+ * same effects as suspending (sessions end, the account is hidden), and the
963
+ * clinic role comes off so the person can never be restored.
964
+ *
965
+ * The pair to `archiveUser`, which suspends and is reversible. Removal is what
966
+ * a clinic needs when somebody has left rather than gone on leave — and until
967
+ * now only suspend existed, used for both.
968
+ *
969
+ * The row stays on the clinic's staff list, marked removed, with no action
970
+ * offered: with no audit-log viewer in this delivery, that row is the only
971
+ * thing that can answer who used to work here while the clinical records they
972
+ * created remain (AC-2.3.12).
973
+ */
974
+ removeStaff: Scalars['Boolean']['output'];
640
975
  replaceTrialParameters: Array<TrialParameter>;
976
+ /**
977
+ * US-4.6 — request a change of email address. Nothing on the account changes:
978
+ * a verification link goes to the NEW address, and the old one keeps working
979
+ * until it is confirmed. Omit `userId` to change your own (row D.4).
980
+ */
981
+ requestEmailChange: Scalars['Boolean']['output'];
641
982
  requestPoseProcessing: Scalars['Boolean']['output'];
642
983
  resendInvitation: Invitation;
984
+ resetMobileClientPassword: Scalars['Boolean']['output'];
985
+ resetPasswordWithToken: Scalars['Boolean']['output'];
986
+ /** Reverse a suspension. */
987
+ restoreAdmin: Scalars['Boolean']['output'];
988
+ /** Closes another of the caller's own devices. False if it was already gone. */
989
+ revokeSession: Scalars['Boolean']['output'];
990
+ revokeUserAccess: Scalars['Boolean']['output'];
991
+ setProfileAssignments: SetProfileAssignmentsResult;
992
+ /**
993
+ * US-5.1 — SUSPEND a Quantum staff account. Reversible: sessions end and the
994
+ * account is hidden, the role stays attached, and the person can come back.
995
+ * For somebody on leave, under investigation, or with a lost laptop.
996
+ */
997
+ suspendAdmin: Scalars['Boolean']['output'];
643
998
  unarchiveUserProfile: UserProfile;
644
999
  unassignActionFromProfile: Scalars['Boolean']['output'];
1000
+ unassignModuleFromProfile: Scalars['Boolean']['output'];
645
1001
  unassignRoutineFromProfile: Scalars['Boolean']['output'];
646
1002
  updateAction: Action;
647
1003
  updateGroup: Group;
@@ -653,8 +1009,10 @@ export type Mutation = {
653
1009
  updateTrialData: Trial;
654
1010
  updateUserProfile: UserProfile;
655
1011
  updateVideoDataOffset: TestFile;
1012
+ verifyInvitationIdentity: IdentityVerificationResult;
656
1013
  };
657
1014
  export type MutationAcceptInvitationArgs = {
1015
+ device?: InputMaybe<DeviceInput>;
658
1016
  input: AcceptInvitationInput;
659
1017
  };
660
1018
  export type MutationAddActionToModuleArgs = {
@@ -669,6 +1027,10 @@ export type MutationAssignActionToProfileArgs = {
669
1027
  actionId: Scalars['ID']['input'];
670
1028
  profileId: Scalars['ID']['input'];
671
1029
  };
1030
+ export type MutationAssignModuleToProfileArgs = {
1031
+ moduleId: Scalars['ID']['input'];
1032
+ profileId: Scalars['ID']['input'];
1033
+ };
672
1034
  export type MutationAssignRoutineToProfileArgs = {
673
1035
  profileId: Scalars['ID']['input'];
674
1036
  routineId: Scalars['ID']['input'];
@@ -677,12 +1039,34 @@ export type MutationAssignTestToRoutineArgs = {
677
1039
  routineId?: InputMaybe<Scalars['ID']['input']>;
678
1040
  testId: Scalars['ID']['input'];
679
1041
  };
1042
+ export type MutationAttachReportToAssignedActionArgs = {
1043
+ actionId: Scalars['ID']['input'];
1044
+ profileId: Scalars['ID']['input'];
1045
+ reportId: Scalars['ID']['input'];
1046
+ };
1047
+ export type MutationAttachTestFilesArgs = {
1048
+ input: AttachTestFilesInput;
1049
+ testId: Scalars['ID']['input'];
1050
+ };
1051
+ export type MutationCancelEmailChangeArgs = {
1052
+ token: Scalars['String']['input'];
1053
+ };
680
1054
  export type MutationCancelInvitationArgs = {
681
1055
  invitationId: Scalars['ID']['input'];
682
1056
  };
1057
+ export type MutationCancelPendingEmailChangeArgs = {
1058
+ userId?: InputMaybe<Scalars['ID']['input']>;
1059
+ };
683
1060
  export type MutationChangePasswordArgs = {
684
1061
  input: ChangePasswordInput;
685
1062
  };
1063
+ export type MutationChangeRoleArgs = {
1064
+ role: InvitationRole;
1065
+ userId: Scalars['ID']['input'];
1066
+ };
1067
+ export type MutationConfirmEmailChangeArgs = {
1068
+ token: Scalars['String']['input'];
1069
+ };
686
1070
  export type MutationConvertActionToQuantumOwnedArgs = {
687
1071
  id: Scalars['ID']['input'];
688
1072
  };
@@ -807,6 +1191,10 @@ export type MutationDeleteTrialParameterArgs = {
807
1191
  export type MutationDeleteUserProfileArgs = {
808
1192
  id: Scalars['ID']['input'];
809
1193
  };
1194
+ export type MutationDetachReportFromAssignedActionArgs = {
1195
+ actionId: Scalars['ID']['input'];
1196
+ profileId: Scalars['ID']['input'];
1197
+ };
810
1198
  export type MutationDuplicateActionArgs = {
811
1199
  id: Scalars['ID']['input'];
812
1200
  };
@@ -818,28 +1206,70 @@ export type MutationInviteTeamMemberArgs = {
818
1206
  input: CreateTeamInvitationInput;
819
1207
  };
820
1208
  export type MutationLoginArgs = {
1209
+ device?: InputMaybe<DeviceInput>;
821
1210
  input: LoginInput;
822
1211
  };
1212
+ export type MutationLogoutArgs = {
1213
+ refreshToken?: InputMaybe<Scalars['String']['input']>;
1214
+ };
1215
+ export type MutationMobileInviteLinkArgs = {
1216
+ profileId: Scalars['ID']['input'];
1217
+ };
823
1218
  export type MutationRefreshArgs = {
824
1219
  refreshToken: Scalars['String']['input'];
825
1220
  };
1221
+ export type MutationRemoveAccountAdminRoleArgs = {
1222
+ userId: Scalars['ID']['input'];
1223
+ };
826
1224
  export type MutationRemoveActionFromModuleArgs = {
827
1225
  moduleActionId: Scalars['ID']['input'];
828
1226
  moduleId: Scalars['ID']['input'];
829
1227
  };
1228
+ export type MutationRemoveAdminArgs = {
1229
+ userId: Scalars['ID']['input'];
1230
+ };
830
1231
  export type MutationRemoveMobileAppAccessArgs = {
831
1232
  profileId: Scalars['ID']['input'];
832
1233
  };
1234
+ export type MutationRemoveStaffArgs = {
1235
+ userId: Scalars['ID']['input'];
1236
+ };
833
1237
  export type MutationReplaceTrialParametersArgs = {
834
1238
  input: Array<ReplaceTrialParameterInput>;
835
1239
  trialId: Scalars['ID']['input'];
836
1240
  };
1241
+ export type MutationRequestEmailChangeArgs = {
1242
+ newEmail: Scalars['String']['input'];
1243
+ userId?: InputMaybe<Scalars['ID']['input']>;
1244
+ };
837
1245
  export type MutationRequestPoseProcessingArgs = {
838
1246
  testFileId: Scalars['ID']['input'];
839
1247
  };
840
1248
  export type MutationResendInvitationArgs = {
841
1249
  invitationId: Scalars['ID']['input'];
842
1250
  };
1251
+ export type MutationResetMobileClientPasswordArgs = {
1252
+ profileId: Scalars['ID']['input'];
1253
+ };
1254
+ export type MutationResetPasswordWithTokenArgs = {
1255
+ newPassword: Scalars['String']['input'];
1256
+ token: Scalars['String']['input'];
1257
+ };
1258
+ export type MutationRestoreAdminArgs = {
1259
+ userId: Scalars['ID']['input'];
1260
+ };
1261
+ export type MutationRevokeSessionArgs = {
1262
+ sessionId: Scalars['ID']['input'];
1263
+ };
1264
+ export type MutationRevokeUserAccessArgs = {
1265
+ userId: Scalars['ID']['input'];
1266
+ };
1267
+ export type MutationSetProfileAssignmentsArgs = {
1268
+ input: SetProfileAssignmentsInput;
1269
+ };
1270
+ export type MutationSuspendAdminArgs = {
1271
+ userId: Scalars['ID']['input'];
1272
+ };
843
1273
  export type MutationUnarchiveUserProfileArgs = {
844
1274
  id: Scalars['ID']['input'];
845
1275
  };
@@ -847,6 +1277,10 @@ export type MutationUnassignActionFromProfileArgs = {
847
1277
  actionId: Scalars['ID']['input'];
848
1278
  profileId: Scalars['ID']['input'];
849
1279
  };
1280
+ export type MutationUnassignModuleFromProfileArgs = {
1281
+ moduleId: Scalars['ID']['input'];
1282
+ profileId: Scalars['ID']['input'];
1283
+ };
850
1284
  export type MutationUnassignRoutineFromProfileArgs = {
851
1285
  profileId: Scalars['ID']['input'];
852
1286
  routineId: Scalars['ID']['input'];
@@ -890,6 +1324,12 @@ export type MutationUpdateVideoDataOffsetArgs = {
890
1324
  offset: Scalars['Int']['input'];
891
1325
  testFileId: Scalars['ID']['input'];
892
1326
  };
1327
+ export type MutationVerifyInvitationIdentityArgs = {
1328
+ dateOfBirth: Scalars['Date']['input'];
1329
+ firstName: Scalars['String']['input'];
1330
+ lastName: Scalars['String']['input'];
1331
+ token: Scalars['String']['input'];
1332
+ };
893
1333
  export type Parameter = {
894
1334
  __typename?: 'Parameter';
895
1335
  id: Scalars['ID']['output'];
@@ -902,6 +1342,66 @@ export declare enum ParameterKind {
902
1342
  Limit = "Limit",
903
1343
  Target = "Target"
904
1344
  }
1345
+ /**
1346
+ * AC-4.9.9 — WHICH of the two things a reset did.
1347
+ *
1348
+ * The mutation returned `Boolean!`, and a reset has two outcomes: the password is
1349
+ * set directly, or a single-use link is sent and the password the operator typed
1350
+ * is discarded. One bit cannot carry that, so the Console reported "Password for X
1351
+ * has been changed successfully" on a path where no password was changed and
1352
+ * support read out a credential that never existed.
1353
+ */
1354
+ export declare enum PasswordChangeOutcome {
1355
+ /**
1356
+ * A single-use, time-limited link was sent to the person instead, and no
1357
+ * password was chosen on their behalf. Any password the caller supplied was
1358
+ * discarded. This is the outcome for every client (AC-4.9.2) and for anybody
1359
+ * outside the caller's own organisation (AC-4.9.5).
1360
+ */
1361
+ LinkSent = "LINK_SENT",
1362
+ /**
1363
+ * Nothing was written. The row the update aimed at was not there — AC-3.3.1's
1364
+ * case, where reporting success from the absence of an error is the defect.
1365
+ */
1366
+ NotChanged = "NOT_CHANGED",
1367
+ /** A password was set on the account. It is the one the caller supplied. */
1368
+ PasswordSet = "PASSWORD_SET"
1369
+ }
1370
+ /**
1371
+ * A change of email address that has been requested and not yet confirmed. It
1372
+ * carries no token: this is what a screen may show, and a token is not.
1373
+ */
1374
+ export type PendingEmailChange = {
1375
+ __typename?: 'PendingEmailChange';
1376
+ /** When the verification link stops working. */
1377
+ expiresAt: Scalars['String']['output'];
1378
+ /** The address the account will move to once the link is opened. */
1379
+ newEmail: Scalars['String']['output'];
1380
+ };
1381
+ /**
1382
+ * Which of an organisation's people to return. One account holds one role, so
1383
+ * these two sets never overlap.
1384
+ */
1385
+ export declare enum PersonKind {
1386
+ Client = "CLIENT",
1387
+ Staff = "STAFF"
1388
+ }
1389
+ /**
1390
+ * US-4.2 — one page of an organisation's people.
1391
+ *
1392
+ * `Group.users` returns EVERY user in the organisation including archived ones,
1393
+ * with no role filter, and the Console renders all of them in one pass. That does
1394
+ * not survive an organisation with two thousand people, and it left the split
1395
+ * between staff and clients to be decided in the client.
1396
+ */
1397
+ export type PersonPage = {
1398
+ __typename?: 'PersonPage';
1399
+ /** Cursor for the next page, or null when this is the last one. */
1400
+ nextCursor?: Maybe<Scalars['String']['output']>;
1401
+ people: Array<User>;
1402
+ /** Total matching the filter, before paging. */
1403
+ totalCount: Scalars['Int']['output'];
1404
+ };
905
1405
  export type PoiMetric = {
906
1406
  __typename?: 'PoiMetric';
907
1407
  frame: Scalars['Int']['output'];
@@ -932,8 +1432,17 @@ export type QuantumOwnedData = {
932
1432
  export type Query = {
933
1433
  __typename?: 'Query';
934
1434
  actions: Array<Action>;
1435
+ /**
1436
+ * US-5.1 — every account holding admin, at every point in its lifecycle.
1437
+ * There is no consolidated list of admin holders anywhere in the product
1438
+ * today, and no way to grant the role or end it from any interface.
1439
+ */
1440
+ adminHolders: Array<AdminHolder>;
935
1441
  analysisClassifications: Array<AnalysisClassification>;
1442
+ appEnv: Scalars['String']['output'];
1443
+ assignCatalog: AssignCatalog;
936
1444
  assignedReport?: Maybe<AssignedReport>;
1445
+ auditLogs: Array<AuditLogEntry>;
937
1446
  currentGroup?: Maybe<Group>;
938
1447
  generalActivityReport?: Maybe<GeneralActivityReport>;
939
1448
  getActionById?: Maybe<Action>;
@@ -947,6 +1456,17 @@ export type Query = {
947
1456
  group?: Maybe<Group>;
948
1457
  groups: Array<Group>;
949
1458
  historicalMetrics: Array<AnalysisMetric>;
1459
+ /**
1460
+ * US-5.3 / UF-3.1 — Quantum's own organisation, which is where a Quantum staff
1461
+ * invitation must be written (AC-5.3.7) and the one organisation the customer
1462
+ * list deliberately excludes (US-5.4). The Quantum Staff screen cannot ask for
1463
+ * it through `groups`, which filters it out by design.
1464
+ *
1465
+ * Null when no organisation carries the flag — a real state where migration
1466
+ * 000078 has run and nobody has set it yet. The screen says so rather than
1467
+ * offering to invite somebody into nowhere.
1468
+ */
1469
+ internalOrganisation?: Maybe<Group>;
950
1470
  invitations: Array<Invitation>;
951
1471
  keypoints: Array<Keypoint>;
952
1472
  me?: Maybe<CurrentUser>;
@@ -954,6 +1474,12 @@ export type Query = {
954
1474
  moduleCategories: Array<ModuleCategory>;
955
1475
  modules: Array<ActionModule>;
956
1476
  movementCoordinationReport?: Maybe<MovementCoordinationReport>;
1477
+ /**
1478
+ * AC-6.4.3 — your own pending change of address, so the person whose account it
1479
+ * is can see that one is in flight rather than only the operator who asked for
1480
+ * it.
1481
+ */
1482
+ myPendingEmailChange?: Maybe<PendingEmailChange>;
957
1483
  profileSessionForToday: Session;
958
1484
  quantumOwnedActions: Array<Action>;
959
1485
  quantumOwnedModules: Array<ActionModule>;
@@ -961,6 +1487,8 @@ export type Query = {
961
1487
  rangeReport?: Maybe<RangeReport>;
962
1488
  routine?: Maybe<Routine>;
963
1489
  routines: Array<Routine>;
1490
+ /** The caller's signed-in devices, newest first. */
1491
+ sessions: Array<DeviceSession>;
964
1492
  sessionsCreatedByProfile: Array<Session>;
965
1493
  sessionsForProfile: Array<Session>;
966
1494
  stabilityBalanceReport?: Maybe<StabilityBalanceReport>;
@@ -976,9 +1504,15 @@ export type Query = {
976
1504
  export type QueryActionsArgs = {
977
1505
  groupId?: InputMaybe<Scalars['ID']['input']>;
978
1506
  };
1507
+ export type QueryAdminHoldersArgs = {
1508
+ search?: InputMaybe<Scalars['String']['input']>;
1509
+ };
979
1510
  export type QueryAssignedReportArgs = {
980
1511
  id: Scalars['ID']['input'];
981
1512
  };
1513
+ export type QueryAuditLogsArgs = {
1514
+ filter?: InputMaybe<AuditLogFilter>;
1515
+ };
982
1516
  export type QueryGeneralActivityReportArgs = {
983
1517
  id: Scalars['ID']['input'];
984
1518
  };
@@ -1166,6 +1700,23 @@ export declare enum SessionType {
1166
1700
  BiofeedbackTraining = "BiofeedbackTraining",
1167
1701
  RecordedTesting = "RecordedTesting"
1168
1702
  }
1703
+ export type SetProfileAssignmentsInput = {
1704
+ changes: Array<AssignmentChangeInput>;
1705
+ profileId: Scalars['ID']['input'];
1706
+ };
1707
+ /**
1708
+ * Per-item outcomes plus the plan as the server now holds it, so the panel
1709
+ * reconciles against the server in the same round trip (AC-4.4.32).
1710
+ */
1711
+ export type SetProfileAssignmentsResult = {
1712
+ __typename?: 'SetProfileAssignmentsResult';
1713
+ /** The practitioner's individually-picked activities ONLY — not the client's full library. A program's activities are supplied by the program, not listed here; see UserProfile.assignedActions for the full union. */
1714
+ assignedActionIds: Array<Scalars['ID']['output']>;
1715
+ assignedActionReports: Array<AssignedActionReport>;
1716
+ /** The programs assigned directly to this profile. Does not include a program's own activities, which are derived at read time from the module, not stored here. */
1717
+ assignedModuleIds: Array<Scalars['ID']['output']>;
1718
+ results: Array<AssignmentChangeResult>;
1719
+ };
1169
1720
  export type StabilityBalanceReport = {
1170
1721
  __typename?: 'StabilityBalanceReport';
1171
1722
  averageParameterScores: Array<TestAverageParameterScore>;
@@ -1537,6 +2088,28 @@ export type User = {
1537
2088
  deletedAt?: Maybe<Scalars['Date']['output']>;
1538
2089
  email: Scalars['String']['output'];
1539
2090
  id: Scalars['ID']['output'];
2091
+ /**
2092
+ * Where this account sits in its lifecycle. deletedAt says only that the account
2093
+ * is inactive; it cannot tell a SUSPENDED person, who can be restored, from a
2094
+ * REMOVED one, who never can.
2095
+ *
2096
+ * Reading the label from deletedAt alone made the Console offer Restore on a
2097
+ * removed account — an action the server refuses and always will, because the
2098
+ * person gave up their sign-in identity and somebody else may now hold it
2099
+ * (AC-2.3.12: a removed person stays listed, marked removed, with no action
2100
+ * offered on their row).
2101
+ */
2102
+ lifecycle: AccountLifecycle;
2103
+ /**
2104
+ * AC-4.7.2 — a change of email address awaiting confirmation, and the address
2105
+ * it is going to. Null when none is in flight.
2106
+ *
2107
+ * The row has to be able to say this. Requesting a change alters nothing on the
2108
+ * account, so without it the screen shows the old address and looks identical
2109
+ * whether or not somebody asked for a change an hour ago — and an operator who
2110
+ * cannot see a pending change cannot cancel one either.
2111
+ */
2112
+ pendingEmailChange?: Maybe<PendingEmailChange>;
1540
2113
  profile?: Maybe<UserProfile>;
1541
2114
  roles: Array<Scalars['String']['output']>;
1542
2115
  unitSystem: UnitSystem;
@@ -1546,11 +2119,17 @@ export type User = {
1546
2119
  export type UserProfile = {
1547
2120
  __typename?: 'UserProfile';
1548
2121
  age?: Maybe<Scalars['Int']['output']>;
2122
+ /** AC-14.2.4: one entry per activity in the client's plan, saying how it got there. Deliberately NOT filtered by any practitioner's catalogue — items outside the reader's reach are reported too. Scoped like every other assignment read: a client reaches only their own profile. */
2123
+ assignedActionProvenance: Array<AssignedActionProvenance>;
2124
+ assignedActionReports: Array<AssignedActionReport>;
1549
2125
  assignedActions: Array<Action>;
2126
+ assignedModules: Array<ActionModule>;
1550
2127
  assignedRoutines: Array<Routine>;
1551
2128
  createdAt: Scalars['Date']['output'];
1552
2129
  date_of_birth?: Maybe<Scalars['Date']['output']>;
1553
2130
  deletedAt?: Maybe<Scalars['Date']['output']>;
2131
+ /** The practitioner's individually-picked activities ONLY — the same set SetProfileAssignmentsResult.assignedActionIds returns. assignedActions, by contrast, is the client's whole visible library: these direct picks plus every activity supplied by an assigned program. */
2132
+ directAssignedActionIds: Array<Scalars['ID']['output']>;
1554
2133
  firstName: Scalars['String']['output'];
1555
2134
  gender?: Maybe<Scalars['String']['output']>;
1556
2135
  group?: Maybe<GroupInfo>;
@@ -1559,6 +2138,8 @@ export type UserProfile = {
1559
2138
  id: Scalars['ID']['output'];
1560
2139
  lastName: Scalars['String']['output'];
1561
2140
  mobileAccessEmail?: Maybe<Scalars['String']['output']>;
2141
+ mobileAccessStatus: MobileAccessStatus;
2142
+ mobileInvitation?: Maybe<Invitation>;
1562
2143
  updatedAt: Scalars['Date']['output'];
1563
2144
  weight?: Maybe<Scalars['Float']['output']>;
1564
2145
  };