@fmsim/fmsim 3.0.0-beta.2 → 3.0.0-beta.4

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/schema.graphql CHANGED
@@ -99,6 +99,11 @@ type AccessRequest {
99
99
  """Where the request stands."""
100
100
  state: AccessRequestStatus!
101
101
 
102
+ """
103
+ The task the requester asked for - one that holds the refused privilege (`<module>.<work>`).
104
+ """
105
+ taskId: String
106
+
102
107
  """When it last changed."""
103
108
  updatedAt: DateTimeISO!
104
109
  }
@@ -125,6 +130,11 @@ enum AccessRequestStatus {
125
130
 
126
131
  """A role this domain can assign that grants the asked privilege."""
127
132
  type AccessRoleCandidate {
133
+ """
134
+ Whether the role holds every privilege of the task asked for. False when no task was asked.
135
+ """
136
+ holdsTask: Boolean!
137
+
128
138
  """The role id."""
129
139
  id: String!
130
140
 
@@ -137,6 +147,22 @@ type AccessRoleCandidate {
137
147
  privilegeCount: Int!
138
148
  }
139
149
 
150
+ """
151
+ A task that holds a refused privilege - what a person refused may ask for. Words are task.<id>.name and .description.
152
+ """
153
+ type AccessTaskChoice {
154
+ """The module or application that declares the task."""
155
+ module: String!
156
+
157
+ """
158
+ How many privileges the task holds - fewer is closer to what was refused.
159
+ """
160
+ privilegeCount: Int!
161
+
162
+ """The task id, `<module>.<work>`."""
163
+ taskId: String!
164
+ }
165
+
140
166
  """Represents a pair of access and refresh tokens."""
141
167
  type AccessToken {
142
168
  """The access token for API authentication."""
@@ -647,6 +673,230 @@ input AttributeSetPatch {
647
673
  items: [AttributeSetItemPatch!]
648
674
  }
649
675
 
676
+ """One thing done, as the audit keeps it."""
677
+ type AuditAction {
678
+ """
679
+ Who did it. Empty when nobody is known - a sign-in to an account that does not exist.
680
+ """
681
+ actor: User
682
+
683
+ """
684
+ Why: role, domain-owner, superuser when granted; role, address, license, ownership, unknown when denied.
685
+ """
686
+ basis: String
687
+
688
+ """A fixed code for an error or a refusal. Never a message."""
689
+ code: String
690
+
691
+ """
692
+ How many times this happened in the request - equal checks are kept as one row.
693
+ """
694
+ count: Int!
695
+
696
+ """When it was written."""
697
+ createdAt: DateTimeISO!
698
+
699
+ """granted or denied - for a door check."""
700
+ decision: String
701
+
702
+ """Further facts, only the keys the kind registered."""
703
+ detail: Object
704
+
705
+ """The domain it was done in."""
706
+ domain: Domain
707
+
708
+ """
709
+ The door, as category:privilege, or owner / super for a door that asks ownership only.
710
+ """
711
+ door: String
712
+
713
+ """Unique identifier."""
714
+ id: ID!
715
+
716
+ """
717
+ What kind of action: door.check, door.result, role.grant, auth.signin, ...
718
+ """
719
+ kind: String!
720
+
721
+ """Id or name of the second object."""
722
+ objectId: String
723
+
724
+ """Kind of the second object - the Role granted, the Privilege added."""
725
+ objectKind: String
726
+
727
+ """ok or error - what was done after the door, or how an event ended."""
728
+ outcome: String
729
+ request: AuditRequest
730
+
731
+ """The request this was done in. Empty for work outside any request."""
732
+ requestId: String
733
+
734
+ """How many items a list returned, summed over the request."""
735
+ returned: Int
736
+
737
+ """Target ids, up to 100."""
738
+ targetIds: [String!]
739
+
740
+ """Kind of the target - User, Role, ..."""
741
+ targetKind: String
742
+
743
+ """requested - named by the caller; handled - confirmed by the service."""
744
+ targetRole: String
745
+
746
+ """Whether more targets than were kept."""
747
+ truncated: Boolean!
748
+ }
749
+
750
+ """One door's audit summary over a period."""
751
+ type AuditDoor {
752
+ """The category, when the door names a privilege."""
753
+ category: String
754
+
755
+ """Checks refused in the period."""
756
+ denied: Int!
757
+
758
+ """The door, as category:privilege - or owner / super."""
759
+ door: String!
760
+
761
+ """Checks passed in the period."""
762
+ granted: Int!
763
+
764
+ """People who passed or were refused here in the period."""
765
+ people: Int!
766
+
767
+ """The privilege, when the door names one."""
768
+ privilege: String
769
+ }
770
+
771
+ """
772
+ Audit writes this server process failed, counted apart from the audit store.
773
+ """
774
+ type AuditHealth {
775
+ """Writes that failed since then. Writes never attempted are not counted."""
776
+ failures: Int!
777
+
778
+ """The first failure."""
779
+ firstFailedAt: DateTimeISO
780
+
781
+ """The last failure."""
782
+ lastFailedAt: DateTimeISO
783
+
784
+ """When this process started counting."""
785
+ since: DateTimeISO!
786
+ }
787
+
788
+ """One member's audit summary over a period."""
789
+ type AuditPerson {
790
+ """Check-ins in the period."""
791
+ checkins: Int!
792
+
793
+ """Door checks refused in the period."""
794
+ denied: Int!
795
+
796
+ """Failed sign-ins in the period."""
797
+ failedSignins: Int!
798
+
799
+ """Door checks passed in the period, audit reads left out."""
800
+ granted: Int!
801
+
802
+ """The last check-in to this domain, at any time."""
803
+ lastCheckinAt: DateTimeISO
804
+
805
+ """Names of the roles held in this domain."""
806
+ roles: [String!]!
807
+
808
+ """The member."""
809
+ user: User!
810
+ }
811
+
812
+ """A request with what was done in it."""
813
+ type AuditRecord {
814
+ """Its actions in this domain."""
815
+ actions: [AuditAction!]!
816
+
817
+ """The request."""
818
+ request: AuditRequest!
819
+ }
820
+
821
+ """What to narrow the audit records to."""
822
+ input AuditRecordFilter {
823
+ """Only requests by this user."""
824
+ actorId: String
825
+
826
+ """Only requests that passed through this door (category:privilege)."""
827
+ door: String
828
+
829
+ """From this moment."""
830
+ from: DateTimeISO!
831
+
832
+ """Only requests with an action of this kind."""
833
+ kind: String
834
+
835
+ """Rows per page, up to 200."""
836
+ limit: Int
837
+
838
+ """denied, error or failed - only requests where that happened."""
839
+ outcome: String
840
+
841
+ """Page, from 1."""
842
+ page: Int
843
+
844
+ """Up to this moment."""
845
+ to: DateTimeISO!
846
+ }
847
+
848
+ """A page of audit records."""
849
+ type AuditRecordList {
850
+ """The records on this page."""
851
+ items: [AuditRecord!]!
852
+
853
+ """How many requests match."""
854
+ total: Int!
855
+ }
856
+
857
+ """A request that reached the server, as the audit keeps it."""
858
+ type AuditRequest {
859
+ """Who made the request. Empty when nobody was signed in."""
860
+ actor: User
861
+
862
+ """graphql, or http for any other request."""
863
+ channel: String!
864
+
865
+ """When the server finished the request."""
866
+ createdAt: DateTimeISO!
867
+
868
+ """The domain the request was made in."""
869
+ domain: Domain
870
+
871
+ """Milliseconds the server spent on the request."""
872
+ durationMs: Int
873
+
874
+ """
875
+ The root fields a GraphQL request asked, by their schema names - never an argument.
876
+ """
877
+ fields: String
878
+
879
+ """Request id, shared by the actions of this request."""
880
+ id: ID!
881
+
882
+ """Address the request came from."""
883
+ ip: String
884
+
885
+ """
886
+ The operation name the client gave. For reference only - the client chooses it.
887
+ """
888
+ operationName: String
889
+
890
+ """query, mutation or subscription - for a GraphQL request."""
891
+ operationType: String
892
+
893
+ """The route pattern of a request outside GraphQL. Never the path itself."""
894
+ route: String
895
+
896
+ """User-Agent header, cut at 256 characters."""
897
+ userAgent: String
898
+ }
899
+
650
900
  """
651
901
  Represents a configured instance of an authentication provider for a specific domain.
652
902
  """
@@ -1640,7 +1890,7 @@ type Counterparty {
1640
1890
  aliases: String
1641
1891
 
1642
1892
  """How many accounts it is paid into are registered"""
1643
- bankAccountCount: Int!
1893
+ bankAccountCount: Int
1644
1894
 
1645
1895
  """Address bills are sent to, when not the address"""
1646
1896
  billingAddress: String
@@ -1696,13 +1946,30 @@ type Counterparty {
1696
1946
  updater: User
1697
1947
 
1698
1948
  """Whether its sales to it are zero-rated for VAT"""
1699
- zeroRated: Boolean!
1949
+ zeroRated: Boolean
1950
+ }
1951
+
1952
+ """
1953
+ An account a counterparty is paid into, as one picks it: the bank and the number's last four digits
1954
+ """
1955
+ type CounterpartyAccountChoice {
1956
+ """The account number's last four digits"""
1957
+ accountTail: String
1958
+
1959
+ """The bank"""
1960
+ bankName: String
1961
+ id: ID!
1700
1962
  }
1701
1963
 
1702
1964
  """An account a counterparty is paid into"""
1703
1965
  type CounterpartyBankAccount {
1704
1966
  """The account number, its digits - one counterparty's in the domain"""
1705
- accountNumber: String!
1967
+ accountNumber: String
1968
+
1969
+ """
1970
+ The account number's last four digits - what one sees without the keeper's privilege
1971
+ """
1972
+ accountTail: String
1706
1973
 
1707
1974
  """The bank"""
1708
1975
  bankName: String
@@ -1767,6 +2034,27 @@ input CounterpartyBankAccountPatch {
1767
2034
  notes: String
1768
2035
  }
1769
2036
 
2037
+ """A counterparty as one picks it: which one, and nothing about it"""
2038
+ type CounterpartyChoice {
2039
+ """
2040
+ Business registration number - tells apart two counterparties of one name (ADR-0132)
2041
+ """
2042
+ businessNumber: String
2043
+ id: ID!
2044
+
2045
+ """A company or a person"""
2046
+ kind: CounterpartyKind!
2047
+
2048
+ """The name the business knows it by"""
2049
+ name: String!
2050
+ }
2051
+
2052
+ """A page of counterparties to pick from"""
2053
+ type CounterpartyChoiceList {
2054
+ items: [CounterpartyChoice!]!
2055
+ total: Int!
2056
+ }
2057
+
1770
2058
  """Whether a counterparty is a company or a person"""
1771
2059
  enum CounterpartyKind {
1772
2060
  COMPANY
@@ -2792,6 +3080,17 @@ type FigureTypeMapEntry {
2792
3080
  updater: User
2793
3081
  }
2794
3082
 
3083
+ """
3084
+ The limits the server enforces on an upload, so a file picker can refuse before uploading.
3085
+ """
3086
+ type FileUploadLimits {
3087
+ """Largest file taken, in bytes."""
3088
+ maxFileSize: Float!
3089
+
3090
+ """Most files taken in one request."""
3091
+ maxFiles: Int!
3092
+ }
3093
+
2795
3094
  """Input type for specifying a filter condition in a list query."""
2796
3095
  input Filter {
2797
3096
  """The field name to apply the filter on."""
@@ -2906,62 +3205,6 @@ enum InheritedValueType {
2906
3205
  Only
2907
3206
  }
2908
3207
 
2909
- """
2910
- Represents an invitation for a user to join a system or a specific resource.
2911
- """
2912
- type Invitation {
2913
- """When the invitation was accepted."""
2914
- acceptedAt: DateTimeISO
2915
-
2916
- """The timestamp when the invitation was created."""
2917
- createdAt: DateTimeISO
2918
-
2919
- """The user who created the invitation."""
2920
- creator: User
2921
-
2922
- """The domain the user is invited to join."""
2923
- domain: Domain!
2924
-
2925
- """The email address to which the invitation is sent."""
2926
- email: EmailAddress!
2927
-
2928
- """When this invitation stops being acceptable."""
2929
- expiresAt: DateTimeISO
2930
-
2931
- """Unique identifier for the invitation."""
2932
- id: ID!
2933
-
2934
- """Deprecated. The domain the invitation is to is `domain`."""
2935
- reference: String
2936
-
2937
- """Roles to grant when the invitation is accepted."""
2938
- roles: [Role!]
2939
-
2940
- """pending, accepted, cancelled or expired — read as of now."""
2941
- state: String
2942
-
2943
- """pending, accepted, cancelled or expired."""
2944
- status: String!
2945
-
2946
- """Deprecated. See `reference`."""
2947
- type: String
2948
-
2949
- """The timestamp when the invitation was last updated."""
2950
- updatedAt: DateTimeISO
2951
-
2952
- """The user who last updated the invitation."""
2953
- updater: User
2954
- }
2955
-
2956
- """A paginated list of invitations."""
2957
- type InvitationList {
2958
- """The list of invitation items."""
2959
- items: [Invitation!]
2960
-
2961
- """The total number of invitations."""
2962
- total: Int
2963
- }
2964
-
2965
3208
  """
2966
3209
  The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).
2967
3210
  """
@@ -2989,33 +3232,6 @@ type Log {
2989
3232
  timestamp: String!
2990
3233
  }
2991
3234
 
2992
- """Records user login attempts."""
2993
- type LoginHistory {
2994
- """The domain the user logged into."""
2995
- accessDomain: Domain!
2996
-
2997
- """The user who logged in."""
2998
- accessUser: User!
2999
-
3000
- """The timestamp of the login attempt."""
3001
- accessedAt: DateTimeISO
3002
-
3003
- """The IP address from which the login attempt was made."""
3004
- accessorIp: String
3005
-
3006
- """Unique identifier for the login history record."""
3007
- id: ID!
3008
- }
3009
-
3010
- """A paginated list of login history records."""
3011
- type LoginHistoryList {
3012
- """The list of login history items."""
3013
- items: [LoginHistory!]!
3014
-
3015
- """The total number of login history records."""
3016
- total: Int!
3017
- }
3018
-
3019
3235
  """Entity for Menu"""
3020
3236
  type Menu {
3021
3237
  buttons: [MenuButton!]!
@@ -3425,9 +3641,6 @@ type Mutation {
3425
3641
  """
3426
3642
  backfillAttachmentThumbnails(limit: Int = 20): ThumbnailBackfillResult!
3427
3643
 
3428
- """To withdraw a pending invitation"""
3429
- cancelInvitation(id: String!): Boolean!
3430
-
3431
3644
  """Chooses the imported release a full figure name draws with."""
3432
3645
  chooseFigureRelease(
3433
3646
  """Full figure name {namespace}/{type}."""
@@ -3697,9 +3910,7 @@ type Mutation {
3697
3910
  """To delete multiple Contacts"""
3698
3911
  deleteContacts(ids: [String!]!): Boolean!
3699
3912
 
3700
- """
3701
- To delete counterparties - the rows that name them keep the name and lose the link
3702
- """
3913
+ """To delete counterparties - refused while another row still names one"""
3703
3914
  deleteCounterparties(ids: [String!]!): Boolean!
3704
3915
 
3705
3916
  """To delete Department"""
@@ -3823,6 +4034,9 @@ type Mutation {
3823
4034
  """To delete my preference"""
3824
4035
  deleteMyUserPreference(element: String!, key: String!): Boolean!
3825
4036
 
4037
+ """To remove one of the caller's own passkeys. It can no longer sign in."""
4038
+ deleteMyWebAuthCredential(id: String!): Boolean!
4039
+
3826
4040
  """To delete Notification"""
3827
4041
  deleteNotification(id: String!): Boolean!
3828
4042
 
@@ -4041,6 +4255,17 @@ type Mutation {
4041
4255
  username: String!
4042
4256
  ): Boolean!
4043
4257
 
4258
+ """
4259
+ Puts the user waiting for a password they set themselves and issues the one-time link to it. The current password stops working and open sessions end. Mailed, or returned once for the administrator to hand over.
4260
+ """
4261
+ issuePasswordSetupLink(
4262
+ """True mails the link to the user's address; false returns it once."""
4263
+ mail: Boolean!
4264
+
4265
+ """The username or email of the user."""
4266
+ username: String!
4267
+ ): PasswordSetupLink!
4268
+
4044
4269
  """Assigns one or more boards to a group."""
4045
4270
  joinGroup(boardIds: [String!]!, id: String!): Group!
4046
4271
 
@@ -4100,17 +4325,6 @@ type Mutation {
4100
4325
  """
4101
4326
  requestAccess(request: NewAccessRequest!): AccessRequest!
4102
4327
 
4103
- """To send a pending invitation again"""
4104
- resendInvitation(id: String!): Boolean!
4105
-
4106
- """
4107
- Resets a user's password to the default value. Use this mutation to restore access to a user who has forgotten their password.
4108
- """
4109
- resetPasswordToDefault(
4110
- """The username or email of the user whose password to reset."""
4111
- username: String!
4112
- ): Boolean!
4113
-
4114
4328
  """Reverts a board to a specific historical version."""
4115
4329
  revertBoardVersion(id: String!, version: Float!): Board!
4116
4330
 
@@ -4136,9 +4350,6 @@ type Mutation {
4136
4350
  scenarioName: String!
4137
4351
  variables: Object
4138
4352
  ): ScenarioInstanceRunResult!
4139
-
4140
- """To invite someone into this domain by email"""
4141
- sendInvitation(email: String!, roleIds: [String!]): Invitation!
4142
4353
  singleUpload(file: Upload!): Attachment!
4143
4354
 
4144
4355
  """Starts a new scenario instance, which will run in the background."""
@@ -4250,6 +4461,11 @@ type Mutation {
4250
4461
  """
4251
4462
  updateEmployee(id: String!, patch: EmployeePatch!): Employee!
4252
4463
 
4464
+ """
4465
+ Sets an employee's pay account - the bank and the account number their pay goes to
4466
+ """
4467
+ updateEmployeePayAccount(bankAccount: String, bankName: String, id: String!): Employee!
4468
+
4253
4469
  """To modify Entity' information"""
4254
4470
  updateEntity(id: String!, patch: EntityPatch!): Entity!
4255
4471
 
@@ -4379,14 +4595,6 @@ type Mutation {
4379
4595
  Updates multiple themes at once. Can create or update themes based on the cuFlag.
4380
4596
  """
4381
4597
  updateMultipleTheme(patches: [ThemePatch!]!): [Theme!]!
4382
-
4383
- """
4384
- Updates or creates multiple users in a single operation. Use this mutation for batch processing of user records.
4385
- """
4386
- updateMultipleUser(
4387
- """An array of patch objects for batch update or creation."""
4388
- patches: [UserPatch!]!
4389
- ): [User!]!
4390
4598
  updateMultipleWorker(patches: [WorkerPatch!]!): [Worker!]!
4391
4599
 
4392
4600
  """To modify ApprovalLine information for current user"""
@@ -4398,6 +4606,12 @@ type Mutation {
4398
4606
  """To create or update my preference"""
4399
4607
  updateMyUserPreference(key: String!, preference: Object!): UserPreference!
4400
4608
 
4609
+ """To rename one of the caller's own passkeys."""
4610
+ updateMyWebAuthCredential(id: String!, name: String!): WebAuthCredential!
4611
+
4612
+ """To change the notice channels of this domain."""
4613
+ updateNoticeChannelSetting(patch: NoticeChannelSettingPatch!): NoticeChannelSetting!
4614
+
4401
4615
  """To modify Notification information"""
4402
4616
  updateNotification(id: String!, patch: NotificationPatch!): Notification!
4403
4617
 
@@ -4498,6 +4712,11 @@ input NewAccessRequest {
4498
4712
 
4499
4713
  """The requester's reason."""
4500
4714
  reason: String
4715
+
4716
+ """
4717
+ The task asked for - one of the tasks that hold the refused privilege (tasksGranting).
4718
+ """
4719
+ taskId: String
4501
4720
  }
4502
4721
 
4503
4722
  """Input for creating a new appliance."""
@@ -5289,9 +5508,6 @@ input NewUser {
5289
5508
  """Full name of the user."""
5290
5509
  name: String!
5291
5510
 
5292
- """Password for the user account."""
5293
- password: String
5294
-
5295
5511
  """Roles assigned to the user."""
5296
5512
  roles: [ObjectRef!]
5297
5513
 
@@ -5340,6 +5556,41 @@ input NewWorker {
5340
5556
  type: String!
5341
5557
  }
5342
5558
 
5559
+ """
5560
+ The channels notices take beyond the app and web push in this domain (ADR-0164).
5561
+ """
5562
+ type NoticeChannelSetting {
5563
+ """Whether notices also go by mail."""
5564
+ email: Boolean!
5565
+
5566
+ """
5567
+ The Teams channel webhook - where a notice to everyone in the domain is posted.
5568
+ """
5569
+ teamsChannel: NoticeSecretState!
5570
+ }
5571
+
5572
+ """
5573
+ A change to the notice channels. A field left out stays as it is; an empty webhook clears it.
5574
+ """
5575
+ input NoticeChannelSettingPatch {
5576
+ """Whether notices also go by mail."""
5577
+ email: Boolean
5578
+
5579
+ """The Teams channel webhook address (https), or empty to clear it."""
5580
+ teamsChannelWebhook: String
5581
+ }
5582
+
5583
+ """
5584
+ Whether a secret is set, and the host it points at - never the secret itself.
5585
+ """
5586
+ type NoticeSecretState {
5587
+ """The host of the address, to tell which flow it is."""
5588
+ host: String
5589
+
5590
+ """Whether it is set for this domain."""
5591
+ set: Boolean!
5592
+ }
5593
+
5343
5594
  """Entity for Notification"""
5344
5595
  type Notification {
5345
5596
  body: String
@@ -5727,6 +5978,22 @@ type PasswordRule {
5727
5978
  useTightPattern: Boolean
5728
5979
  }
5729
5980
 
5981
+ """
5982
+ The password setup link just issued: mailed, or returned once to be handed over.
5983
+ """
5984
+ type PasswordSetupLink {
5985
+ """When the link stops working."""
5986
+ expiresAt: DateTimeISO!
5987
+
5988
+ """
5989
+ The link, when it was not mailed. It is not kept and cannot be read again.
5990
+ """
5991
+ link: String
5992
+
5993
+ """The address the link was mailed to, when it was mailed."""
5994
+ mailedTo: String
5995
+ }
5996
+
5730
5997
  """Logs the request and response payloads for API interactions."""
5731
5998
  type PayloadLog {
5732
5999
  """The timestamp when the log entry was created."""
@@ -6209,6 +6476,20 @@ type Query {
6209
6476
  sortings: [Sorting!]
6210
6477
  ): AttributeSetList!
6211
6478
 
6479
+ """
6480
+ Each door over a period, in this domain - every declared privilege, a door with no record in the period too.
6481
+ """
6482
+ auditDoors(from: DateTimeISO!, to: DateTimeISO!): [AuditDoor!]!
6483
+
6484
+ """Audit writes this server process failed to store."""
6485
+ auditHealth: AuditHealth!
6486
+
6487
+ """Each member's audit summary over a period, in this domain."""
6488
+ auditPeople(from: DateTimeISO!, to: DateTimeISO!): [AuditPerson!]!
6489
+
6490
+ """This domain's audit records - requests and what was done in them."""
6491
+ auditRecords(filter: AuditRecordFilter!): AuditRecordList!
6492
+
6212
6493
  """To fetch a AuthProvider"""
6213
6494
  authProvider(id: String!): AuthProvider
6214
6495
 
@@ -6427,16 +6708,6 @@ type Query {
6427
6708
  """Carrier 위치 이력 조회 (목업). 영구추적 fallback 용."""
6428
6709
  carrierLocationHistory(carrierName: String!, endTime: String!, startTime: String!): CarrierLocationHistoryResponse!
6429
6710
 
6430
- """
6431
- Checks if the system is configured to provide a default password for new users.
6432
- """
6433
- checkDefaultPassword: Boolean!
6434
-
6435
- """
6436
- Determines whether the system provides a default password when creating a new user.
6437
- """
6438
- checkResettablePasswordToDefault: Boolean!
6439
-
6440
6711
  """
6441
6712
  Checks if the current authenticated user belongs to the current domain.
6442
6713
  """
@@ -6615,8 +6886,35 @@ type Query {
6615
6886
  """To fetch a counterparty of the domain"""
6616
6887
  counterparty(id: String!): Counterparty
6617
6888
 
6889
+ """
6890
+ The accounts a counterparty is paid into, to pick one - the bank and the number's last four digits
6891
+ """
6892
+ counterpartyAccountChoices(counterpartyId: String!): [CounterpartyAccountChoice!]!
6893
+
6618
6894
  """The accounts a counterparty of the domain is paid into"""
6619
6895
  counterpartyBankAccounts(counterpartyId: String!): [CounterpartyBankAccount!]!
6896
+
6897
+ """
6898
+ Counterparties to pick from - which one, nothing about it; a capped page at a time
6899
+ """
6900
+ counterpartyChoices(
6901
+ """An array of filter conditions to apply to the list query."""
6902
+ filters: [Filter!]
6903
+
6904
+ """Inherited value type for the list query."""
6905
+ inherited: InheritedValueType
6906
+
6907
+ """Pagination options for the list query."""
6908
+ pagination: Pagination
6909
+
6910
+ """
6911
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
6912
+ """
6913
+ search: String
6914
+
6915
+ """Sorting options for the list query."""
6916
+ sortings: [Sorting!]
6917
+ ): CounterpartyChoiceList!
6620
6918
  customerBizplaces: [Bizplace!]!
6621
6919
  customers: [Domain!]!
6622
6920
 
@@ -6750,7 +7048,7 @@ type Query {
6750
7048
  employee(id: String!): Employee
6751
7049
 
6752
7050
  """
6753
- Fetches a list of employees based on provided query parameters. Supports searching by name, control number, and alias.
7051
+ Fetches a list of employees based on provided query parameters. Supports searching by name, control number, alias, position, responsibility and department name.
6754
7052
  """
6755
7053
  employees(
6756
7054
  """An array of filter conditions to apply to the list query."""
@@ -6964,6 +7262,9 @@ type Query {
6964
7262
  """
6965
7263
  figureTypeMap: [FigureTypeMapEntry!]!
6966
7264
 
7265
+ """The upload limits the server enforces."""
7266
+ fileUploadLimits: FileUploadLimits!
7267
+
6967
7268
  """To fetch a Font"""
6968
7269
  font(id: String!): Font!
6969
7270
 
@@ -7018,57 +7319,22 @@ type Query {
7018
7319
  """To fetch integration Analyses"""
7019
7320
  integrationAnalysis: Object!
7020
7321
 
7021
- """To fetch an invitation of this domain"""
7022
- invitation(id: String!): Invitation
7023
-
7024
- """To fetch this domain's invitations"""
7025
- invitations(
7026
- """An array of filter conditions to apply to the list query."""
7027
- filters: [Filter!]
7028
-
7029
- """Inherited value type for the list query."""
7030
- inherited: InheritedValueType
7031
-
7032
- """Pagination options for the list query."""
7033
- pagination: Pagination
7034
-
7035
- """
7036
- A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
7037
- """
7038
- search: String
7039
-
7040
- """Sorting options for the list query."""
7041
- sortings: [Sorting!]
7042
- ): InvitationList!
7043
-
7044
7322
  """Check if a user is an owner of the current domain."""
7045
7323
  isDomainOwner(username: String!): Boolean!
7046
7324
 
7047
- """To fetch multiple LoginHistories"""
7048
- loginHistories(
7049
- """An array of filter conditions to apply to the list query."""
7050
- filters: [Filter!]
7051
-
7052
- """Inherited value type for the list query."""
7053
- inherited: InheritedValueType
7054
-
7055
- """Pagination options for the list query."""
7056
- pagination: Pagination
7057
-
7058
- """
7059
- A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
7060
- """
7061
- search: String
7062
-
7063
- """Sorting options for the list query."""
7064
- sortings: [Sorting!]
7065
- ): LoginHistoryList!
7066
-
7067
7325
  """
7068
7326
  Whether the caller may give or take the parent domain's roles from this domain.
7069
7327
  """
7070
7328
  mayChangeParentRoles: Boolean!
7071
7329
 
7330
+ """
7331
+ Whether this domain may issue the user a password setup link: the user works in no other domain, owns no domain and is not an administrator.
7332
+ """
7333
+ mayIssuePasswordSetupLink(
7334
+ """The id of the user who would be issued the link."""
7335
+ id: String!
7336
+ ): Boolean!
7337
+
7072
7338
  """To fetch a Menu"""
7073
7339
  menu(id: String!): Menu!
7074
7340
 
@@ -7235,6 +7501,9 @@ type Query {
7235
7501
  sortings: [Sorting!]
7236
7502
  ): ApprovalLineList!
7237
7503
 
7504
+ """What I did - in this domain, and my sign-ins."""
7505
+ myAuditActions(kind: String, limit: Int): [AuditAction!]!
7506
+
7238
7507
  """
7239
7508
  Fetches the caller's own employee records in this domain. Empty when the caller is not an employee.
7240
7509
  """
@@ -7242,7 +7511,6 @@ type Query {
7242
7511
 
7243
7512
  """To fetch current user's Favorites"""
7244
7513
  myFavorites: [Favorite!]!
7245
- myLoginHistories(limit: Float!): [LoginHistory!]!
7246
7514
 
7247
7515
  """To fetch my own Menus"""
7248
7516
  myMenus(
@@ -7336,6 +7604,14 @@ type Query {
7336
7604
  sortings: [Sorting!]
7337
7605
  ): UserPreferenceList!
7338
7606
 
7607
+ """To list the caller's own passkeys, newest first."""
7608
+ myWebAuthCredentials: [WebAuthCredential!]!
7609
+
7610
+ """
7611
+ The notice channels of this domain - set or not, never the webhook addresses.
7612
+ """
7613
+ noticeChannelSetting: NoticeChannelSetting!
7614
+
7339
7615
  """To fetch a Notification"""
7340
7616
  notification(id: String!): Notification
7341
7617
 
@@ -7597,7 +7873,13 @@ type Query {
7597
7873
  """
7598
7874
  To list the roles this domain can assign that grant a privilege, fewest privileges first.
7599
7875
  """
7600
- rolesGranting(category: String!, privilege: String!): [AccessRoleCandidate!]!
7876
+ rolesGranting(
7877
+ category: String!
7878
+ privilege: String!
7879
+
7880
+ """The task asked for - roles holding all of it come first."""
7881
+ taskId: String
7882
+ ): [AccessRoleCandidate!]!
7601
7883
 
7602
7884
  """Fetches a single scenario by its ID."""
7603
7885
  scenario(id: String!): Scenario!
@@ -7769,6 +8051,11 @@ type Query {
7769
8051
  """
7770
8052
  taskTypesByConnection(connectionName: String!): TaskTypeList!
7771
8053
 
8054
+ """
8055
+ To list the tasks that hold a privilege, fewest privileges first - what a person refused may ask for.
8056
+ """
8057
+ tasksGranting(category: String!, privilege: String!): [AccessTaskChoice!]!
8058
+
7772
8059
  """To fetch multiple Terminologies"""
7773
8060
  terminologies(
7774
8061
  """An array of filter conditions to apply to the list query."""
@@ -7904,10 +8191,20 @@ type Role {
7904
8191
  privileges: [Privilege!]
7905
8192
 
7906
8193
  """
7907
- What the template of this role's name grants here that the role does not hold. Null when no template carries the name.
8194
+ The role's privileges laid against every registered task, and those no task names.
8195
+ """
8196
+ taskCoverage: RoleTaskCoverageListView!
8197
+
8198
+ """
8199
+ What the role's base template grants here that the role does not hold, and what the role holds beyond it. Null when the role has no base template, or its base is not declared in this installation.
7908
8200
  """
7909
8201
  templateGap: RoleTemplateGapView
7910
8202
 
8203
+ """
8204
+ The id of the role template this role is based on; null when it is based on none.
8205
+ """
8206
+ templateId: String
8207
+
7911
8208
  """The timestamp when the role was last updated."""
7912
8209
  updatedAt: DateTimeISO
7913
8210
 
@@ -7958,6 +8255,11 @@ input RolePatch {
7958
8255
  """Stand this role even though the domain inherits one of the same name."""
7959
8256
  separately: Boolean
7960
8257
 
8258
+ """
8259
+ The id of the role template this role is based on; null to base it on none.
8260
+ """
8261
+ templateId: String
8262
+
7961
8263
  """A new list of users to be assigned to the role."""
7962
8264
  users: [ObjectRef!]
7963
8265
  }
@@ -7985,6 +8287,42 @@ type RolePrivilege {
7985
8287
  name: String
7986
8288
  }
7987
8289
 
8290
+ """A role's privileges laid against every registered task."""
8291
+ type RoleTaskCoverageListView {
8292
+ """Every registered task, with what the role holds of it."""
8293
+ tasks: [RoleTaskCoverageView!]!
8294
+
8295
+ """Declared privileges the role holds that no task names."""
8296
+ unclassified: [RoleTemplateGapGrant!]!
8297
+ }
8298
+
8299
+ """One task laid against a role's privileges."""
8300
+ type RoleTaskCoverageView {
8301
+ """The task's privileges the role holds."""
8302
+ held: [RoleTemplateGapGrant!]!
8303
+
8304
+ """The task's declared privileges the role does not hold."""
8305
+ missing: [RoleTemplateGapGrant!]!
8306
+
8307
+ """
8308
+ The module or application that declares the task - the first part of its id.
8309
+ """
8310
+ module: String!
8311
+
8312
+ """
8313
+ all, some, none or broken. Says which of the task's privileges the role holds - not whether the work can be done. broken: the task names a privilege this installation does not declare.
8314
+ """
8315
+ status: String!
8316
+
8317
+ """
8318
+ The task id, `<module>.<work>`. Its words are the translation keys task.<id>.name and task.<id>.description.
8319
+ """
8320
+ taskId: String!
8321
+
8322
+ """Privileges the task names that this installation does not declare."""
8323
+ undeclared: [RoleTemplateGapGrant!]!
8324
+ }
8325
+
7988
8326
  """Privileges on one category that a role lacks against its template."""
7989
8327
  type RoleTemplateGapGrant {
7990
8328
  """The axes the template grants here and the role does not hold."""
@@ -7998,6 +8336,14 @@ type RoleTemplateGapGrant {
7998
8336
  What the template of a role's name grants in this installation that the role does not hold.
7999
8337
  """
8000
8338
  type RoleTemplateGapView {
8339
+ """
8340
+ Declared privileges the role holds that the template does not grant, by category.
8341
+ """
8342
+ extra: [RoleTemplateGapGrant!]!
8343
+
8344
+ """How many privileges the role holds beyond the template."""
8345
+ extraCount: Int!
8346
+
8001
8347
  """The privileges missing from the role, by category."""
8002
8348
  missing: [RoleTemplateGapGrant!]!
8003
8349
 
@@ -8032,6 +8378,11 @@ type RoleTemplateView {
8032
8378
  """
8033
8379
  defaultNameTaken: Boolean!
8034
8380
 
8381
+ """
8382
+ Definition errors that refuse this template when applied: unregistered tasks, or tasks naming undeclared privileges.
8383
+ """
8384
+ definitionErrors: [String!]!
8385
+
8035
8386
  """A description of the seat this template creates."""
8036
8387
  description: String
8037
8388
 
@@ -8056,6 +8407,11 @@ type RoleTemplateView {
8056
8407
 
8057
8408
  """How many privileges this template would actually grant here."""
8058
8409
  privilegeCount: Int!
8410
+
8411
+ """
8412
+ The tasks this template is built from, by id - each a piece of work a module or application names.
8413
+ """
8414
+ tasks: [String!]!
8059
8415
  }
8060
8416
 
8061
8417
  """Represents a sequence of steps designed to automate a task or process."""
@@ -9002,9 +9358,6 @@ input UserPatch {
9002
9358
  """Full name of the user."""
9003
9359
  name: String
9004
9360
 
9005
- """Password for the user account."""
9006
- password: String
9007
-
9008
9361
  """Roles assigned to the user."""
9009
9362
  roles: [ObjectRef!]
9010
9363
 
@@ -9084,6 +9437,48 @@ type UsersAuthProviders {
9084
9437
  user: User
9085
9438
  }
9086
9439
 
9440
+ """Represents a WebAuthn credential for passwordless authentication."""
9441
+ type WebAuthCredential {
9442
+ """The signature counter, used to prevent replay attacks."""
9443
+ counter: Float
9444
+
9445
+ """The timestamp when the credential was created."""
9446
+ createdAt: DateTimeISO
9447
+
9448
+ """The user who created the credential."""
9449
+ creator: User
9450
+
9451
+ """The unique ID for this credential, provided by the authenticator."""
9452
+ credentialId: String
9453
+
9454
+ """When the credential was removed."""
9455
+ deletedAt: DateTimeISO
9456
+
9457
+ """Unique identifier for the credential."""
9458
+ id: ID!
9459
+
9460
+ """When this passkey was last used to sign in."""
9461
+ lastUsedAt: DateTimeISO
9462
+
9463
+ """The owner's label for this passkey, such as the device it was made on."""
9464
+ name: String
9465
+
9466
+ """The public key of the credential."""
9467
+ publicKey: String
9468
+
9469
+ """How the authenticator can be reached: usb, nfc, ble, hybrid, internal."""
9470
+ transports: [String!]
9471
+
9472
+ """The timestamp when the credential was last updated."""
9473
+ updatedAt: DateTimeISO
9474
+
9475
+ """The user who last updated the credential."""
9476
+ updater: User
9477
+
9478
+ """The user associated with this credential."""
9479
+ user: User
9480
+ }
9481
+
9087
9482
  type Worker {
9088
9483
  bizplace: Bizplace!
9089
9484
  createdAt: DateTimeISO