@kinotic-ai/os-api 1.8.0 → 1.9.0

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/dist/index.cjs CHANGED
@@ -62,6 +62,7 @@ __export(exports_src, {
62
62
  ProjectService: () => ProjectService,
63
63
  Project: () => Project,
64
64
  ProgressType: () => ProgressType,
65
+ PendingInviteSummary: () => PendingInviteSummary,
65
66
  ParticipantType: () => ParticipantType,
66
67
  PageableC3Type: () => PageableC3Type,
67
68
  PageC3Type: () => PageC3Type,
@@ -73,13 +74,13 @@ __export(exports_src, {
73
74
  NamedQueriesDefinitionService: () => NamedQueriesDefinitionService,
74
75
  NamedQueriesDefinition: () => NamedQueriesDefinition,
75
76
  MigrationService: () => MigrationService,
77
+ MemberService: () => MemberService,
76
78
  LoggersDescriptor: () => LoggersDescriptor,
77
79
  LoggerLevelsDescriptor: () => LoggerLevelsDescriptor,
78
80
  LogManager: () => LogManager,
79
81
  LogLevel: () => LogLevel,
80
82
  KinoticProjectConfig: () => KinoticProjectConfig,
81
83
  IdDecorator: () => IdDecorator,
82
- IamUserService: () => IamUserService,
83
84
  IamUser: () => IamUser,
84
85
  GroupLoggerLevelsDescriptor: () => GroupLoggerLevelsDescriptor,
85
86
  GitHubToken: () => GitHubToken,
@@ -282,6 +283,7 @@ class Application {
282
283
  id;
283
284
  organizationId;
284
285
  description;
286
+ tenantPerUser = false;
285
287
  updated = null;
286
288
  constructor(id, description) {
287
289
  this.id = id;
@@ -460,6 +462,16 @@ class IamUser {
460
462
  created = null;
461
463
  updated = null;
462
464
  }
465
+ // packages/os-api/src/api/model/iam/PendingInviteSummary.ts
466
+ class PendingInviteSummary {
467
+ id = null;
468
+ email = "";
469
+ displayName = null;
470
+ applicationId = null;
471
+ invitedByName = null;
472
+ created = null;
473
+ expiresAt = null;
474
+ }
463
475
  // packages/os-api/src/api/model/github/GitHubAppInstallation.ts
464
476
  class GitHubAppInstallation {
465
477
  id = null;
@@ -512,8 +524,7 @@ function isSystemParticipant(participant) {
512
524
  return scopeType(participant) === "system" /* SYSTEM */;
513
525
  }
514
526
  function isOrganizationParticipant(participant) {
515
- const type = scopeType(participant);
516
- return type === "organization" /* ORGANIZATION */ || type === "application" /* APPLICATION */;
527
+ return scopeType(participant) === "organization" /* ORGANIZATION */;
517
528
  }
518
529
  function isApplicationParticipant(participant) {
519
530
  return scopeType(participant) === "application" /* APPLICATION */;
@@ -734,27 +745,43 @@ class WorkloadServiceProxy extends import_core7.CrudServiceProxy {
734
745
  return this.serviceProxy.invoke("syncIndex", []);
735
746
  }
736
747
  }
737
- // packages/os-api/src/api/services/IIamUserService.ts
748
+ // packages/os-api/src/api/services/IMemberService.ts
738
749
  var import_core8 = require("@kinotic-ai/core");
739
750
 
740
- class IamUserService extends import_core8.CrudServiceProxy {
751
+ class MemberService {
752
+ serviceProxy;
741
753
  constructor(kinotic) {
742
- super(kinotic.serviceProxy("org.kinotic.domain.api.services.iam.IamUserService"));
754
+ this.serviceProxy = kinotic.serviceProxy("org.kinotic.os.api.services.iam.MemberService");
755
+ }
756
+ async findMembers(applicationId, pageable) {
757
+ const page = await this.serviceProxy.invoke("findMembers", [applicationId, pageable]);
758
+ return new import_core8.FunctionalIterablePage(pageable, page, (next) => this.serviceProxy.invoke("findMembers", [applicationId, next]));
759
+ }
760
+ async searchMembers(searchText, applicationId, pageable) {
761
+ const page = await this.serviceProxy.invoke("searchMembers", [searchText, applicationId, pageable]);
762
+ return new import_core8.FunctionalIterablePage(pageable, page, (next) => this.serviceProxy.invoke("searchMembers", [searchText, applicationId, next]));
743
763
  }
744
- findByEmail(email, organizationId, applicationId) {
745
- return arguments.length >= 3 ? this.serviceProxy.invoke("findByEmail", [email, organizationId, applicationId]) : this.serviceProxy.invoke("findByEmail", [email]);
764
+ inviteMember(email, displayName, applicationId) {
765
+ return this.serviceProxy.invoke("inviteMember", [email, displayName, applicationId]);
746
766
  }
747
- findFirstOrgUserByEmail(email) {
748
- return this.serviceProxy.invoke("findFirstOrgUserByEmail", [email]);
767
+ setMemberEnabled(userId, enabled) {
768
+ return this.serviceProxy.invoke("setMemberEnabled", [userId, enabled]);
749
769
  }
750
- findByOidcIdentity(oidcSubject, oidcConfigId, organizationId, applicationId) {
751
- return this.serviceProxy.invoke("findByOidcIdentity", [oidcSubject, oidcConfigId, organizationId, applicationId]);
770
+ removeMember(userId) {
771
+ return this.serviceProxy.invoke("removeMember", [userId]);
752
772
  }
753
- findAllByOidcIdentity(oidcSubject, oidcConfigId) {
754
- return this.serviceProxy.invoke("findAllByOidcIdentity", [oidcSubject, oidcConfigId]);
773
+ async findPendingInvites(applicationId, pageable) {
774
+ const page = await this.serviceProxy.invoke("findPendingInvites", [applicationId, pageable]);
775
+ return new import_core8.FunctionalIterablePage(pageable, page, (next) => this.serviceProxy.invoke("findPendingInvites", [applicationId, next]));
755
776
  }
756
- createUser(user, password) {
757
- return this.serviceProxy.invoke("createUser", [user, password]);
777
+ cancelInvite(inviteId) {
778
+ return this.serviceProxy.invoke("cancelInvite", [inviteId]);
779
+ }
780
+ memberDataSource(applicationId) {
781
+ return {
782
+ findAll: (pageable) => this.findMembers(applicationId, pageable),
783
+ search: (searchText, pageable) => this.searchMembers(searchText, applicationId, pageable)
784
+ };
758
785
  }
759
786
  }
760
787
  // packages/os-api/src/api/services/IDeviceApprovalService.ts
@@ -798,7 +825,7 @@ var OsApiPlugin = {
798
825
  dataInsights: new DataInsightsService(kinotic),
799
826
  vmNodes: new VmNodeServiceProxy(kinotic),
800
827
  workloads: new WorkloadServiceProxy(kinotic),
801
- iamUsers: new IamUserService(kinotic),
828
+ members: new MemberService(kinotic),
802
829
  deviceApproval: new DeviceApprovalService(kinotic),
803
830
  githubAppInstallations: new GitHubAppInstallationService(kinotic)
804
831
  };
package/dist/index.d.cts CHANGED
@@ -145,6 +145,12 @@ declare class Application implements Identifiable<string> {
145
145
  */
146
146
  organizationId: string;
147
147
  description: string;
148
+ /**
149
+ * When true, every APPLICATION-scope user created for this application receives an
150
+ * auto-generated unique tenantId, isolating each user's SHARED entity data in its own
151
+ * tenant. Applies only to users created after it is enabled.
152
+ */
153
+ tenantPerUser: boolean;
148
154
  updated: number | null;
149
155
  constructor(id: string, description: string);
150
156
  }
@@ -585,12 +591,31 @@ interface CompleteOrgRequest {
585
591
  }
586
592
  import { Identifiable as Identifiable9 } from "@kinotic-ai/core";
587
593
  /**
594
+ * Console view of a pending invitation. Deliberately excludes the accept token — anyone who
595
+ * can list invitations must not be able to redeem them.
596
+ */
597
+ declare class PendingInviteSummary implements Identifiable9<string> {
598
+ id: string | null;
599
+ /** Email the invitation was sent to. */
600
+ email: string;
601
+ /** Display name the inviter entered, if any. */
602
+ displayName: string | null;
603
+ /** The application the invitee would join; null for an organization-member invite. */
604
+ applicationId: string | null;
605
+ /** Display name of the member who sent the invitation. */
606
+ invitedByName: string | null;
607
+ created: number | null;
608
+ /** When the invitation stops being acceptable. */
609
+ expiresAt: number | null;
610
+ }
611
+ import { Identifiable as Identifiable10 } from "@kinotic-ai/core";
612
+ /**
588
613
  * Persisted record of one GitHub App installation that a Kinotic Org has authorised.
589
614
  * The durable binding that says "Org X has access to GitHub install Y" — without it,
590
615
  * no installation token can be minted on behalf of the org and webhook deliveries
591
616
  * can't be matched to a project.
592
617
  */
593
- declare class GitHubAppInstallation implements Identifiable9<string> {
618
+ declare class GitHubAppInstallation implements Identifiable10<string> {
594
619
  id: string | null;
595
620
  organizationId: string;
596
621
  githubInstallationId: number;
@@ -716,27 +741,33 @@ interface ISystemParticipant extends IParticipant {
716
741
  }
717
742
  import { IParticipant as IParticipant2 } from "@kinotic-ai/core";
718
743
  /**
719
- * A participant authenticated against an Organization. {@link organizationId} is the id of the
720
- * owning Organization and is never null. {@link IApplicationParticipant} extends this type, so an
721
- * application-scoped participant also satisfies it. Mirrors the server
722
- * {@code OrganizationParticipant}.
744
+ * A participant authenticated against an Organization, carrying ORGANIZATION-scope authority over
745
+ * that Organization's resources. {@link organizationId} is the id of the owning Organization and
746
+ * is never null. Mirrors the server {@code OrganizationParticipant}.
723
747
  */
724
748
  interface IOrganizationParticipant extends IParticipant2 {
725
- type: ParticipantType.ORGANIZATION | ParticipantType.APPLICATION;
749
+ type: ParticipantType.ORGANIZATION;
726
750
  /**
727
751
  * The id of the Organization this participant is authenticated under; never null.
728
752
  */
729
753
  organizationId: string;
730
754
  }
755
+ import { IParticipant as IParticipant3 } from "@kinotic-ai/core";
731
756
  /**
732
- * A participant authenticated against an Application. Extends {@link IOrganizationParticipant}
733
- * because every Application belongs to an Organization, so an application-scoped session
734
- * intrinsically carries the owning Organization's id as well. Mirrors the server
735
- * {@code ApplicationParticipant}.
757
+ * A participant authenticated against an Application, carrying APPLICATION-scope authority over
758
+ * that Application's own resources and end-user data. {@link organizationId} is the id of the
759
+ * Organization that owns the Application; it identifies the owning org for data ownership and
760
+ * routing of the Application's entity definitions and end-user data, and is never null.
761
+ * Mirrors the server {@code ApplicationParticipant}.
736
762
  */
737
- interface IApplicationParticipant extends IOrganizationParticipant {
763
+ interface IApplicationParticipant extends IParticipant3 {
738
764
  type: ParticipantType.APPLICATION;
739
765
  /**
766
+ * The id of the Organization that owns the Application this participant is authenticated
767
+ * under; never null.
768
+ */
769
+ organizationId: string;
770
+ /**
740
771
  * The id of the Application this participant is authenticated under; never null.
741
772
  */
742
773
  applicationId: string;
@@ -746,23 +777,22 @@ interface IApplicationParticipant extends IOrganizationParticipant {
746
777
  */
747
778
  tenantId?: string | null;
748
779
  }
749
- import { IParticipant as IParticipant3 } from "@kinotic-ai/core";
780
+ import { IParticipant as IParticipant4 } from "@kinotic-ai/core";
750
781
  /**
751
782
  * @return true if the participant authenticated against the platform SYSTEM scope
752
783
  */
753
- declare function isSystemParticipant(participant: IParticipant3): participant is ISystemParticipant;
784
+ declare function isSystemParticipant(participant: IParticipant4): participant is ISystemParticipant;
754
785
  /**
755
- * Narrows to an {@link IOrganizationParticipant}, which carries an {@code organizationId}. An
756
- * application-scoped participant satisfies this too, since every Application is owned by an
757
- * Organization.
786
+ * Narrows to an {@link IOrganizationParticipant}, which carries an {@code organizationId} and
787
+ * ORGANIZATION-scope authority.
758
788
  *
759
- * @return true if the participant authenticated against an Organization or an Application
789
+ * @return true if the participant authenticated against an Organization
760
790
  */
761
- declare function isOrganizationParticipant(participant: IParticipant3): participant is IOrganizationParticipant;
791
+ declare function isOrganizationParticipant(participant: IParticipant4): participant is IOrganizationParticipant;
762
792
  /**
763
793
  * @return true if the participant authenticated against an Application
764
794
  */
765
- declare function isApplicationParticipant(participant: IParticipant3): participant is IApplicationParticipant;
795
+ declare function isApplicationParticipant(participant: IParticipant4): participant is IApplicationParticipant;
766
796
  import { IKinotic } from "@kinotic-ai/core";
767
797
  import { CrudServiceProxy, ICrudServiceProxy } from "@kinotic-ai/core";
768
798
  interface IApplicationService extends ICrudServiceProxy<Application> {
@@ -1082,46 +1112,55 @@ declare class WorkloadServiceProxy extends CrudServiceProxy7<Workload> implement
1082
1112
  countForNode(nodeId: string): Promise<number>;
1083
1113
  syncIndex(): Promise<void>;
1084
1114
  }
1085
- import { CrudServiceProxy as CrudServiceProxy8, IKinotic as IKinotic11, ICrudServiceProxy as ICrudServiceProxy8 } from "@kinotic-ai/core";
1115
+ import { IDataSource, IKinotic as IKinotic11, IterablePage as IterablePage4, Pageable as Pageable4 } from "@kinotic-ai/core";
1086
1116
  /**
1087
- * Client proxy for the server's {@code IamUserService}; method shapes mirror the Java interface.
1088
- *
1089
- * NOTE: the server interface now lives in {@code kinotic-domain} and is not currently
1090
- * {@code @Publish}-annotated, so this proxy is not callable over RPC until the backend publishes
1091
- * the service. The shape here is kept in sync so it is ready once that happens; confirm the
1092
- * published namespace before relying on it.
1117
+ * Member management for the caller's organization and its applications. Scope is selected
1118
+ * with applicationId — null addresses org members, set addresses that application's
1119
+ * members and the backend derives the organization from the authenticated participant,
1120
+ * so it is never a parameter.
1093
1121
  */
1094
- interface IIamUserService extends ICrudServiceProxy8<IamUser> {
1095
- /** Finds the first user with the given email across all scopes, or null. */
1096
- findByEmail(email: string): Promise<IamUser | null>;
1122
+ interface IMemberService {
1123
+ /** Lists the members of the scope. */
1124
+ findMembers(applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<IamUser>>;
1125
+ /**
1126
+ * Searches the scope's members by free text over email and display name. Blank
1127
+ * searchText is equivalent to {@link findMembers}.
1128
+ */
1129
+ searchMembers(searchText: string, applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<IamUser>>;
1097
1130
  /**
1098
- * Finds the user with the given email within a scope identified structurally by
1099
- * (organizationId, applicationId): both null SYSTEM, organizationId only ORGANIZATION,
1100
- * both set APPLICATION.
1131
+ * Invites someone into the scope by email. Sends the invitation email and returns the
1132
+ * pending invitation. Rejects when the email already has an account in the scope or an
1133
+ * invitation is already pending for it.
1101
1134
  */
1102
- findByEmail(email: string, organizationId: string | null, applicationId: string | null): Promise<IamUser | null>;
1135
+ inviteMember(email: string, displayName: string | null, applicationId: string | null): Promise<PendingInviteSummary>;
1103
1136
  /**
1104
- * Finds the first ORGANIZATION-scope user with the given email across all organizations.
1105
- * Used by sign-up to enforce one user per email before the new org's id exists.
1137
+ * Enables or disables a member of the caller's organization. Disabling gates future
1138
+ * logins; established sessions last until they expire. Callers cannot disable themselves.
1106
1139
  */
1107
- findFirstOrgUserByEmail(email: string): Promise<IamUser | null>;
1140
+ setMemberEnabled(userId: string, enabled: boolean): Promise<void>;
1108
1141
  /**
1109
- * Finds the user (if any) with the given OIDC identity within a specific scope, using the
1110
- * same (organizationId, applicationId) null conventions as {@link findByEmail}.
1142
+ * Permanently removes a member of the caller's organization, including any stored
1143
+ * credential. Callers cannot remove themselves.
1111
1144
  */
1112
- findByOidcIdentity(oidcSubject: string, oidcConfigId: string, organizationId: string | null, applicationId: string | null): Promise<IamUser | null>;
1113
- /** Finds every user across scopes for a given OIDC identity — e.g. the orgs it can access. */
1114
- findAllByOidcIdentity(oidcSubject: string, oidcConfigId: string): Promise<IamUser[]>;
1115
- /** Creates a user and, if a password is provided, the matching credential. */
1116
- createUser(user: IamUser, password: string | null): Promise<IamUser>;
1145
+ removeMember(userId: string): Promise<void>;
1146
+ /** Lists the scope's live (unexpired) pending invitations. */
1147
+ findPendingInvites(applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<PendingInviteSummary>>;
1148
+ /** Cancels a pending invitation belonging to the caller's organization. */
1149
+ cancelInvite(inviteId: string): Promise<void>;
1150
+ /** An {@link IDataSource} over the scope's members, for table components. */
1151
+ memberDataSource(applicationId: string | null): IDataSource<IamUser>;
1117
1152
  }
1118
- declare class IamUserService extends CrudServiceProxy8<IamUser> implements IIamUserService {
1153
+ declare class MemberService implements IMemberService {
1154
+ private readonly serviceProxy;
1119
1155
  constructor(kinotic: IKinotic11);
1120
- findByEmail(email: string, organizationId?: string | null, applicationId?: string | null): Promise<IamUser | null>;
1121
- findFirstOrgUserByEmail(email: string): Promise<IamUser | null>;
1122
- findByOidcIdentity(oidcSubject: string, oidcConfigId: string, organizationId: string | null, applicationId: string | null): Promise<IamUser | null>;
1123
- findAllByOidcIdentity(oidcSubject: string, oidcConfigId: string): Promise<IamUser[]>;
1124
- createUser(user: IamUser, password: string | null): Promise<IamUser>;
1156
+ findMembers(applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<IamUser>>;
1157
+ searchMembers(searchText: string, applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<IamUser>>;
1158
+ inviteMember(email: string, displayName: string | null, applicationId: string | null): Promise<PendingInviteSummary>;
1159
+ setMemberEnabled(userId: string, enabled: boolean): Promise<void>;
1160
+ removeMember(userId: string): Promise<void>;
1161
+ findPendingInvites(applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<PendingInviteSummary>>;
1162
+ cancelInvite(inviteId: string): Promise<void>;
1163
+ memberDataSource(applicationId: string | null): IDataSource<IamUser>;
1125
1164
  }
1126
1165
  import { IKinotic as IKinotic12 } from "@kinotic-ai/core";
1127
1166
  /**
@@ -1141,8 +1180,8 @@ declare class DeviceApprovalService implements IDeviceApprovalService {
1141
1180
  constructor(kinotic: IKinotic12);
1142
1181
  approve(userCode: string): Promise<void>;
1143
1182
  }
1144
- import { CrudServiceProxy as CrudServiceProxy9, IKinotic as IKinotic13, ICrudServiceProxy as ICrudServiceProxy9 } from "@kinotic-ai/core";
1145
- interface IGitHubAppInstallationService extends ICrudServiceProxy9<GitHubAppInstallation> {
1183
+ import { CrudServiceProxy as CrudServiceProxy8, IKinotic as IKinotic13, ICrudServiceProxy as ICrudServiceProxy8 } from "@kinotic-ai/core";
1184
+ interface IGitHubAppInstallationService extends ICrudServiceProxy8<GitHubAppInstallation> {
1146
1185
  /**
1147
1186
  * Stages a single-use state token bound to the caller's organization plus the
1148
1187
  * supplied returnTo, then returns the GitHub install URL with that state
@@ -1167,7 +1206,7 @@ interface IGitHubAppInstallationService extends ICrudServiceProxy9<GitHubAppInst
1167
1206
  */
1168
1207
  findForCurrentOrg(): Promise<GitHubAppInstallation | null>;
1169
1208
  }
1170
- declare class GitHubAppInstallationService extends CrudServiceProxy9<GitHubAppInstallation> implements IGitHubAppInstallationService {
1209
+ declare class GitHubAppInstallationService extends CrudServiceProxy8<GitHubAppInstallation> implements IGitHubAppInstallationService {
1171
1210
  constructor(kinotic: IKinotic13);
1172
1211
  startInstall(returnTo: string | null): Promise<string>;
1173
1212
  completeInstall(installationId: number, state: string): Promise<GitHubInstallCompletion>;
@@ -1185,7 +1224,7 @@ interface IOsApiExtension {
1185
1224
  dataInsights: IDataInsightsService;
1186
1225
  vmNodes: IVmNodeService;
1187
1226
  workloads: IWorkloadService;
1188
- iamUsers: IIamUserService;
1227
+ members: IMemberService;
1189
1228
  deviceApproval: IDeviceApprovalService;
1190
1229
  githubAppInstallations: IGitHubAppInstallationService;
1191
1230
  }
@@ -1193,4 +1232,4 @@ declare const OsApiPlugin: KinoticPlugin<IOsApiExtension>;
1193
1232
  declare module "@kinotic-ai/core" {
1194
1233
  interface KinoticSingleton extends IOsApiExtension {}
1195
1234
  }
1196
- export { isSystemParticipant, isOrganizationParticipant, isApplicationParticipant, WorkloadStatus, WorkloadServiceProxy, Workload, VmProviderType, VmNodeStatus, VmNodeServiceProxy, VmNode, VersionDecorator, TimeReferenceDecorator, TextDecorator, TenantSelectionC3Type, TenantIdDecorator, SingleLoggerLevelsDescriptor, SignUpRequest, SignUpCompleteRequest, QueryOptionsC3Type, QueryDecorator, ProjectType, ProjectService, Project, ProgressType, ParticipantType, PageableC3Type, PageC3Type, OsApiPlugin, OrganizationService, Organization, NotIndexedDecorator, NestedDecorator, NamedQueriesDefinitionService, NamedQueriesDefinition, MigrationService, MigrationResult, MigrationRequest, MigrationDefinition, LoggersDescriptor, LoggerLevelsDescriptor, LogManager, LogLevel, KinoticProjectConfig, InsightRequest, InsightProgress, IdDecorator, IamUserService, IamUser, IWorkloadService, IVmNodeService, ISystemParticipant, IProjectService, IOsApiExtension, IOrganizationService, IOrganizationParticipant, INamedQueriesDefinitionService, IMigrationService, ILogManager, IIamUserService, IGitHubAppInstallationService, IEntityDefinitionService, IDeviceApprovalService, IDataInsightsService, IApplicationService, IApplicationParticipant, GroupLoggerLevelsDescriptor, GitHubToken, GitHubRepoToken, GitHubInstallCompletion, GitHubAppInstallationService, GitHubAppInstallation, FlattenedDecorator, EsIndexConfigurationDecorator, EntityDefinitionService, EntityDefinition, EntityDecorator, EntitiesPathConfig, DiscriminatorDecorator, DeviceApprovalService, DataInsightsService, DataInsightsComponent, CompleteOrgRequest, AutoGeneratedIdDecorator, AuthType, ApplicationService, Application };
1235
+ export { isSystemParticipant, isOrganizationParticipant, isApplicationParticipant, WorkloadStatus, WorkloadServiceProxy, Workload, VmProviderType, VmNodeStatus, VmNodeServiceProxy, VmNode, VersionDecorator, TimeReferenceDecorator, TextDecorator, TenantSelectionC3Type, TenantIdDecorator, SingleLoggerLevelsDescriptor, SignUpRequest, SignUpCompleteRequest, QueryOptionsC3Type, QueryDecorator, ProjectType, ProjectService, Project, ProgressType, PendingInviteSummary, ParticipantType, PageableC3Type, PageC3Type, OsApiPlugin, OrganizationService, Organization, NotIndexedDecorator, NestedDecorator, NamedQueriesDefinitionService, NamedQueriesDefinition, MigrationService, MigrationResult, MigrationRequest, MigrationDefinition, MemberService, LoggersDescriptor, LoggerLevelsDescriptor, LogManager, LogLevel, KinoticProjectConfig, InsightRequest, InsightProgress, IdDecorator, IamUser, IWorkloadService, IVmNodeService, ISystemParticipant, IProjectService, IOsApiExtension, IOrganizationService, IOrganizationParticipant, INamedQueriesDefinitionService, IMigrationService, IMemberService, ILogManager, IGitHubAppInstallationService, IEntityDefinitionService, IDeviceApprovalService, IDataInsightsService, IApplicationService, IApplicationParticipant, GroupLoggerLevelsDescriptor, GitHubToken, GitHubRepoToken, GitHubInstallCompletion, GitHubAppInstallationService, GitHubAppInstallation, FlattenedDecorator, EsIndexConfigurationDecorator, EntityDefinitionService, EntityDefinition, EntityDecorator, EntitiesPathConfig, DiscriminatorDecorator, DeviceApprovalService, DataInsightsService, DataInsightsComponent, CompleteOrgRequest, AutoGeneratedIdDecorator, AuthType, ApplicationService, Application };
package/dist/index.d.ts CHANGED
@@ -145,6 +145,12 @@ declare class Application implements Identifiable<string> {
145
145
  */
146
146
  organizationId: string;
147
147
  description: string;
148
+ /**
149
+ * When true, every APPLICATION-scope user created for this application receives an
150
+ * auto-generated unique tenantId, isolating each user's SHARED entity data in its own
151
+ * tenant. Applies only to users created after it is enabled.
152
+ */
153
+ tenantPerUser: boolean;
148
154
  updated: number | null;
149
155
  constructor(id: string, description: string);
150
156
  }
@@ -585,12 +591,31 @@ interface CompleteOrgRequest {
585
591
  }
586
592
  import { Identifiable as Identifiable9 } from "@kinotic-ai/core";
587
593
  /**
594
+ * Console view of a pending invitation. Deliberately excludes the accept token — anyone who
595
+ * can list invitations must not be able to redeem them.
596
+ */
597
+ declare class PendingInviteSummary implements Identifiable9<string> {
598
+ id: string | null;
599
+ /** Email the invitation was sent to. */
600
+ email: string;
601
+ /** Display name the inviter entered, if any. */
602
+ displayName: string | null;
603
+ /** The application the invitee would join; null for an organization-member invite. */
604
+ applicationId: string | null;
605
+ /** Display name of the member who sent the invitation. */
606
+ invitedByName: string | null;
607
+ created: number | null;
608
+ /** When the invitation stops being acceptable. */
609
+ expiresAt: number | null;
610
+ }
611
+ import { Identifiable as Identifiable10 } from "@kinotic-ai/core";
612
+ /**
588
613
  * Persisted record of one GitHub App installation that a Kinotic Org has authorised.
589
614
  * The durable binding that says "Org X has access to GitHub install Y" — without it,
590
615
  * no installation token can be minted on behalf of the org and webhook deliveries
591
616
  * can't be matched to a project.
592
617
  */
593
- declare class GitHubAppInstallation implements Identifiable9<string> {
618
+ declare class GitHubAppInstallation implements Identifiable10<string> {
594
619
  id: string | null;
595
620
  organizationId: string;
596
621
  githubInstallationId: number;
@@ -716,27 +741,33 @@ interface ISystemParticipant extends IParticipant {
716
741
  }
717
742
  import { IParticipant as IParticipant2 } from "@kinotic-ai/core";
718
743
  /**
719
- * A participant authenticated against an Organization. {@link organizationId} is the id of the
720
- * owning Organization and is never null. {@link IApplicationParticipant} extends this type, so an
721
- * application-scoped participant also satisfies it. Mirrors the server
722
- * {@code OrganizationParticipant}.
744
+ * A participant authenticated against an Organization, carrying ORGANIZATION-scope authority over
745
+ * that Organization's resources. {@link organizationId} is the id of the owning Organization and
746
+ * is never null. Mirrors the server {@code OrganizationParticipant}.
723
747
  */
724
748
  interface IOrganizationParticipant extends IParticipant2 {
725
- type: ParticipantType.ORGANIZATION | ParticipantType.APPLICATION;
749
+ type: ParticipantType.ORGANIZATION;
726
750
  /**
727
751
  * The id of the Organization this participant is authenticated under; never null.
728
752
  */
729
753
  organizationId: string;
730
754
  }
755
+ import { IParticipant as IParticipant3 } from "@kinotic-ai/core";
731
756
  /**
732
- * A participant authenticated against an Application. Extends {@link IOrganizationParticipant}
733
- * because every Application belongs to an Organization, so an application-scoped session
734
- * intrinsically carries the owning Organization's id as well. Mirrors the server
735
- * {@code ApplicationParticipant}.
757
+ * A participant authenticated against an Application, carrying APPLICATION-scope authority over
758
+ * that Application's own resources and end-user data. {@link organizationId} is the id of the
759
+ * Organization that owns the Application; it identifies the owning org for data ownership and
760
+ * routing of the Application's entity definitions and end-user data, and is never null.
761
+ * Mirrors the server {@code ApplicationParticipant}.
736
762
  */
737
- interface IApplicationParticipant extends IOrganizationParticipant {
763
+ interface IApplicationParticipant extends IParticipant3 {
738
764
  type: ParticipantType.APPLICATION;
739
765
  /**
766
+ * The id of the Organization that owns the Application this participant is authenticated
767
+ * under; never null.
768
+ */
769
+ organizationId: string;
770
+ /**
740
771
  * The id of the Application this participant is authenticated under; never null.
741
772
  */
742
773
  applicationId: string;
@@ -746,23 +777,22 @@ interface IApplicationParticipant extends IOrganizationParticipant {
746
777
  */
747
778
  tenantId?: string | null;
748
779
  }
749
- import { IParticipant as IParticipant3 } from "@kinotic-ai/core";
780
+ import { IParticipant as IParticipant4 } from "@kinotic-ai/core";
750
781
  /**
751
782
  * @return true if the participant authenticated against the platform SYSTEM scope
752
783
  */
753
- declare function isSystemParticipant(participant: IParticipant3): participant is ISystemParticipant;
784
+ declare function isSystemParticipant(participant: IParticipant4): participant is ISystemParticipant;
754
785
  /**
755
- * Narrows to an {@link IOrganizationParticipant}, which carries an {@code organizationId}. An
756
- * application-scoped participant satisfies this too, since every Application is owned by an
757
- * Organization.
786
+ * Narrows to an {@link IOrganizationParticipant}, which carries an {@code organizationId} and
787
+ * ORGANIZATION-scope authority.
758
788
  *
759
- * @return true if the participant authenticated against an Organization or an Application
789
+ * @return true if the participant authenticated against an Organization
760
790
  */
761
- declare function isOrganizationParticipant(participant: IParticipant3): participant is IOrganizationParticipant;
791
+ declare function isOrganizationParticipant(participant: IParticipant4): participant is IOrganizationParticipant;
762
792
  /**
763
793
  * @return true if the participant authenticated against an Application
764
794
  */
765
- declare function isApplicationParticipant(participant: IParticipant3): participant is IApplicationParticipant;
795
+ declare function isApplicationParticipant(participant: IParticipant4): participant is IApplicationParticipant;
766
796
  import { IKinotic } from "@kinotic-ai/core";
767
797
  import { CrudServiceProxy, ICrudServiceProxy } from "@kinotic-ai/core";
768
798
  interface IApplicationService extends ICrudServiceProxy<Application> {
@@ -1082,46 +1112,55 @@ declare class WorkloadServiceProxy extends CrudServiceProxy7<Workload> implement
1082
1112
  countForNode(nodeId: string): Promise<number>;
1083
1113
  syncIndex(): Promise<void>;
1084
1114
  }
1085
- import { CrudServiceProxy as CrudServiceProxy8, IKinotic as IKinotic11, ICrudServiceProxy as ICrudServiceProxy8 } from "@kinotic-ai/core";
1115
+ import { IDataSource, IKinotic as IKinotic11, IterablePage as IterablePage4, Pageable as Pageable4 } from "@kinotic-ai/core";
1086
1116
  /**
1087
- * Client proxy for the server's {@code IamUserService}; method shapes mirror the Java interface.
1088
- *
1089
- * NOTE: the server interface now lives in {@code kinotic-domain} and is not currently
1090
- * {@code @Publish}-annotated, so this proxy is not callable over RPC until the backend publishes
1091
- * the service. The shape here is kept in sync so it is ready once that happens; confirm the
1092
- * published namespace before relying on it.
1117
+ * Member management for the caller's organization and its applications. Scope is selected
1118
+ * with applicationId — null addresses org members, set addresses that application's
1119
+ * members and the backend derives the organization from the authenticated participant,
1120
+ * so it is never a parameter.
1093
1121
  */
1094
- interface IIamUserService extends ICrudServiceProxy8<IamUser> {
1095
- /** Finds the first user with the given email across all scopes, or null. */
1096
- findByEmail(email: string): Promise<IamUser | null>;
1122
+ interface IMemberService {
1123
+ /** Lists the members of the scope. */
1124
+ findMembers(applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<IamUser>>;
1125
+ /**
1126
+ * Searches the scope's members by free text over email and display name. Blank
1127
+ * searchText is equivalent to {@link findMembers}.
1128
+ */
1129
+ searchMembers(searchText: string, applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<IamUser>>;
1097
1130
  /**
1098
- * Finds the user with the given email within a scope identified structurally by
1099
- * (organizationId, applicationId): both null SYSTEM, organizationId only ORGANIZATION,
1100
- * both set APPLICATION.
1131
+ * Invites someone into the scope by email. Sends the invitation email and returns the
1132
+ * pending invitation. Rejects when the email already has an account in the scope or an
1133
+ * invitation is already pending for it.
1101
1134
  */
1102
- findByEmail(email: string, organizationId: string | null, applicationId: string | null): Promise<IamUser | null>;
1135
+ inviteMember(email: string, displayName: string | null, applicationId: string | null): Promise<PendingInviteSummary>;
1103
1136
  /**
1104
- * Finds the first ORGANIZATION-scope user with the given email across all organizations.
1105
- * Used by sign-up to enforce one user per email before the new org's id exists.
1137
+ * Enables or disables a member of the caller's organization. Disabling gates future
1138
+ * logins; established sessions last until they expire. Callers cannot disable themselves.
1106
1139
  */
1107
- findFirstOrgUserByEmail(email: string): Promise<IamUser | null>;
1140
+ setMemberEnabled(userId: string, enabled: boolean): Promise<void>;
1108
1141
  /**
1109
- * Finds the user (if any) with the given OIDC identity within a specific scope, using the
1110
- * same (organizationId, applicationId) null conventions as {@link findByEmail}.
1142
+ * Permanently removes a member of the caller's organization, including any stored
1143
+ * credential. Callers cannot remove themselves.
1111
1144
  */
1112
- findByOidcIdentity(oidcSubject: string, oidcConfigId: string, organizationId: string | null, applicationId: string | null): Promise<IamUser | null>;
1113
- /** Finds every user across scopes for a given OIDC identity — e.g. the orgs it can access. */
1114
- findAllByOidcIdentity(oidcSubject: string, oidcConfigId: string): Promise<IamUser[]>;
1115
- /** Creates a user and, if a password is provided, the matching credential. */
1116
- createUser(user: IamUser, password: string | null): Promise<IamUser>;
1145
+ removeMember(userId: string): Promise<void>;
1146
+ /** Lists the scope's live (unexpired) pending invitations. */
1147
+ findPendingInvites(applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<PendingInviteSummary>>;
1148
+ /** Cancels a pending invitation belonging to the caller's organization. */
1149
+ cancelInvite(inviteId: string): Promise<void>;
1150
+ /** An {@link IDataSource} over the scope's members, for table components. */
1151
+ memberDataSource(applicationId: string | null): IDataSource<IamUser>;
1117
1152
  }
1118
- declare class IamUserService extends CrudServiceProxy8<IamUser> implements IIamUserService {
1153
+ declare class MemberService implements IMemberService {
1154
+ private readonly serviceProxy;
1119
1155
  constructor(kinotic: IKinotic11);
1120
- findByEmail(email: string, organizationId?: string | null, applicationId?: string | null): Promise<IamUser | null>;
1121
- findFirstOrgUserByEmail(email: string): Promise<IamUser | null>;
1122
- findByOidcIdentity(oidcSubject: string, oidcConfigId: string, organizationId: string | null, applicationId: string | null): Promise<IamUser | null>;
1123
- findAllByOidcIdentity(oidcSubject: string, oidcConfigId: string): Promise<IamUser[]>;
1124
- createUser(user: IamUser, password: string | null): Promise<IamUser>;
1156
+ findMembers(applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<IamUser>>;
1157
+ searchMembers(searchText: string, applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<IamUser>>;
1158
+ inviteMember(email: string, displayName: string | null, applicationId: string | null): Promise<PendingInviteSummary>;
1159
+ setMemberEnabled(userId: string, enabled: boolean): Promise<void>;
1160
+ removeMember(userId: string): Promise<void>;
1161
+ findPendingInvites(applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<PendingInviteSummary>>;
1162
+ cancelInvite(inviteId: string): Promise<void>;
1163
+ memberDataSource(applicationId: string | null): IDataSource<IamUser>;
1125
1164
  }
1126
1165
  import { IKinotic as IKinotic12 } from "@kinotic-ai/core";
1127
1166
  /**
@@ -1141,8 +1180,8 @@ declare class DeviceApprovalService implements IDeviceApprovalService {
1141
1180
  constructor(kinotic: IKinotic12);
1142
1181
  approve(userCode: string): Promise<void>;
1143
1182
  }
1144
- import { CrudServiceProxy as CrudServiceProxy9, IKinotic as IKinotic13, ICrudServiceProxy as ICrudServiceProxy9 } from "@kinotic-ai/core";
1145
- interface IGitHubAppInstallationService extends ICrudServiceProxy9<GitHubAppInstallation> {
1183
+ import { CrudServiceProxy as CrudServiceProxy8, IKinotic as IKinotic13, ICrudServiceProxy as ICrudServiceProxy8 } from "@kinotic-ai/core";
1184
+ interface IGitHubAppInstallationService extends ICrudServiceProxy8<GitHubAppInstallation> {
1146
1185
  /**
1147
1186
  * Stages a single-use state token bound to the caller's organization plus the
1148
1187
  * supplied returnTo, then returns the GitHub install URL with that state
@@ -1167,7 +1206,7 @@ interface IGitHubAppInstallationService extends ICrudServiceProxy9<GitHubAppInst
1167
1206
  */
1168
1207
  findForCurrentOrg(): Promise<GitHubAppInstallation | null>;
1169
1208
  }
1170
- declare class GitHubAppInstallationService extends CrudServiceProxy9<GitHubAppInstallation> implements IGitHubAppInstallationService {
1209
+ declare class GitHubAppInstallationService extends CrudServiceProxy8<GitHubAppInstallation> implements IGitHubAppInstallationService {
1171
1210
  constructor(kinotic: IKinotic13);
1172
1211
  startInstall(returnTo: string | null): Promise<string>;
1173
1212
  completeInstall(installationId: number, state: string): Promise<GitHubInstallCompletion>;
@@ -1185,7 +1224,7 @@ interface IOsApiExtension {
1185
1224
  dataInsights: IDataInsightsService;
1186
1225
  vmNodes: IVmNodeService;
1187
1226
  workloads: IWorkloadService;
1188
- iamUsers: IIamUserService;
1227
+ members: IMemberService;
1189
1228
  deviceApproval: IDeviceApprovalService;
1190
1229
  githubAppInstallations: IGitHubAppInstallationService;
1191
1230
  }
@@ -1193,4 +1232,4 @@ declare const OsApiPlugin: KinoticPlugin<IOsApiExtension>;
1193
1232
  declare module "@kinotic-ai/core" {
1194
1233
  interface KinoticSingleton extends IOsApiExtension {}
1195
1234
  }
1196
- export { isSystemParticipant, isOrganizationParticipant, isApplicationParticipant, WorkloadStatus, WorkloadServiceProxy, Workload, VmProviderType, VmNodeStatus, VmNodeServiceProxy, VmNode, VersionDecorator, TimeReferenceDecorator, TextDecorator, TenantSelectionC3Type, TenantIdDecorator, SingleLoggerLevelsDescriptor, SignUpRequest, SignUpCompleteRequest, QueryOptionsC3Type, QueryDecorator, ProjectType, ProjectService, Project, ProgressType, ParticipantType, PageableC3Type, PageC3Type, OsApiPlugin, OrganizationService, Organization, NotIndexedDecorator, NestedDecorator, NamedQueriesDefinitionService, NamedQueriesDefinition, MigrationService, MigrationResult, MigrationRequest, MigrationDefinition, LoggersDescriptor, LoggerLevelsDescriptor, LogManager, LogLevel, KinoticProjectConfig, InsightRequest, InsightProgress, IdDecorator, IamUserService, IamUser, IWorkloadService, IVmNodeService, ISystemParticipant, IProjectService, IOsApiExtension, IOrganizationService, IOrganizationParticipant, INamedQueriesDefinitionService, IMigrationService, ILogManager, IIamUserService, IGitHubAppInstallationService, IEntityDefinitionService, IDeviceApprovalService, IDataInsightsService, IApplicationService, IApplicationParticipant, GroupLoggerLevelsDescriptor, GitHubToken, GitHubRepoToken, GitHubInstallCompletion, GitHubAppInstallationService, GitHubAppInstallation, FlattenedDecorator, EsIndexConfigurationDecorator, EntityDefinitionService, EntityDefinition, EntityDecorator, EntitiesPathConfig, DiscriminatorDecorator, DeviceApprovalService, DataInsightsService, DataInsightsComponent, CompleteOrgRequest, AutoGeneratedIdDecorator, AuthType, ApplicationService, Application };
1235
+ export { isSystemParticipant, isOrganizationParticipant, isApplicationParticipant, WorkloadStatus, WorkloadServiceProxy, Workload, VmProviderType, VmNodeStatus, VmNodeServiceProxy, VmNode, VersionDecorator, TimeReferenceDecorator, TextDecorator, TenantSelectionC3Type, TenantIdDecorator, SingleLoggerLevelsDescriptor, SignUpRequest, SignUpCompleteRequest, QueryOptionsC3Type, QueryDecorator, ProjectType, ProjectService, Project, ProgressType, PendingInviteSummary, ParticipantType, PageableC3Type, PageC3Type, OsApiPlugin, OrganizationService, Organization, NotIndexedDecorator, NestedDecorator, NamedQueriesDefinitionService, NamedQueriesDefinition, MigrationService, MigrationResult, MigrationRequest, MigrationDefinition, MemberService, LoggersDescriptor, LoggerLevelsDescriptor, LogManager, LogLevel, KinoticProjectConfig, InsightRequest, InsightProgress, IdDecorator, IamUser, IWorkloadService, IVmNodeService, ISystemParticipant, IProjectService, IOsApiExtension, IOrganizationService, IOrganizationParticipant, INamedQueriesDefinitionService, IMigrationService, IMemberService, ILogManager, IGitHubAppInstallationService, IEntityDefinitionService, IDeviceApprovalService, IDataInsightsService, IApplicationService, IApplicationParticipant, GroupLoggerLevelsDescriptor, GitHubToken, GitHubRepoToken, GitHubInstallCompletion, GitHubAppInstallationService, GitHubAppInstallation, FlattenedDecorator, EsIndexConfigurationDecorator, EntityDefinitionService, EntityDefinition, EntityDecorator, EntitiesPathConfig, DiscriminatorDecorator, DeviceApprovalService, DataInsightsService, DataInsightsComponent, CompleteOrgRequest, AutoGeneratedIdDecorator, AuthType, ApplicationService, Application };
package/dist/index.js CHANGED
@@ -178,6 +178,7 @@ class Application {
178
178
  id;
179
179
  organizationId;
180
180
  description;
181
+ tenantPerUser = false;
181
182
  updated = null;
182
183
  constructor(id, description) {
183
184
  this.id = id;
@@ -356,6 +357,16 @@ class IamUser {
356
357
  created = null;
357
358
  updated = null;
358
359
  }
360
+ // packages/os-api/src/api/model/iam/PendingInviteSummary.ts
361
+ class PendingInviteSummary {
362
+ id = null;
363
+ email = "";
364
+ displayName = null;
365
+ applicationId = null;
366
+ invitedByName = null;
367
+ created = null;
368
+ expiresAt = null;
369
+ }
359
370
  // packages/os-api/src/api/model/github/GitHubAppInstallation.ts
360
371
  class GitHubAppInstallation {
361
372
  id = null;
@@ -408,8 +419,7 @@ function isSystemParticipant(participant) {
408
419
  return scopeType(participant) === "system" /* SYSTEM */;
409
420
  }
410
421
  function isOrganizationParticipant(participant) {
411
- const type = scopeType(participant);
412
- return type === "organization" /* ORGANIZATION */ || type === "application" /* APPLICATION */;
422
+ return scopeType(participant) === "organization" /* ORGANIZATION */;
413
423
  }
414
424
  function isApplicationParticipant(participant) {
415
425
  return scopeType(participant) === "application" /* APPLICATION */;
@@ -630,27 +640,45 @@ class WorkloadServiceProxy extends CrudServiceProxy7 {
630
640
  return this.serviceProxy.invoke("syncIndex", []);
631
641
  }
632
642
  }
633
- // packages/os-api/src/api/services/IIamUserService.ts
634
- import { CrudServiceProxy as CrudServiceProxy8 } from "@kinotic-ai/core";
643
+ // packages/os-api/src/api/services/IMemberService.ts
644
+ import {
645
+ FunctionalIterablePage as FunctionalIterablePage4
646
+ } from "@kinotic-ai/core";
635
647
 
636
- class IamUserService extends CrudServiceProxy8 {
648
+ class MemberService {
649
+ serviceProxy;
637
650
  constructor(kinotic) {
638
- super(kinotic.serviceProxy("org.kinotic.domain.api.services.iam.IamUserService"));
651
+ this.serviceProxy = kinotic.serviceProxy("org.kinotic.os.api.services.iam.MemberService");
652
+ }
653
+ async findMembers(applicationId, pageable) {
654
+ const page = await this.serviceProxy.invoke("findMembers", [applicationId, pageable]);
655
+ return new FunctionalIterablePage4(pageable, page, (next) => this.serviceProxy.invoke("findMembers", [applicationId, next]));
639
656
  }
640
- findByEmail(email, organizationId, applicationId) {
641
- return arguments.length >= 3 ? this.serviceProxy.invoke("findByEmail", [email, organizationId, applicationId]) : this.serviceProxy.invoke("findByEmail", [email]);
657
+ async searchMembers(searchText, applicationId, pageable) {
658
+ const page = await this.serviceProxy.invoke("searchMembers", [searchText, applicationId, pageable]);
659
+ return new FunctionalIterablePage4(pageable, page, (next) => this.serviceProxy.invoke("searchMembers", [searchText, applicationId, next]));
642
660
  }
643
- findFirstOrgUserByEmail(email) {
644
- return this.serviceProxy.invoke("findFirstOrgUserByEmail", [email]);
661
+ inviteMember(email, displayName, applicationId) {
662
+ return this.serviceProxy.invoke("inviteMember", [email, displayName, applicationId]);
645
663
  }
646
- findByOidcIdentity(oidcSubject, oidcConfigId, organizationId, applicationId) {
647
- return this.serviceProxy.invoke("findByOidcIdentity", [oidcSubject, oidcConfigId, organizationId, applicationId]);
664
+ setMemberEnabled(userId, enabled) {
665
+ return this.serviceProxy.invoke("setMemberEnabled", [userId, enabled]);
648
666
  }
649
- findAllByOidcIdentity(oidcSubject, oidcConfigId) {
650
- return this.serviceProxy.invoke("findAllByOidcIdentity", [oidcSubject, oidcConfigId]);
667
+ removeMember(userId) {
668
+ return this.serviceProxy.invoke("removeMember", [userId]);
651
669
  }
652
- createUser(user, password) {
653
- return this.serviceProxy.invoke("createUser", [user, password]);
670
+ async findPendingInvites(applicationId, pageable) {
671
+ const page = await this.serviceProxy.invoke("findPendingInvites", [applicationId, pageable]);
672
+ return new FunctionalIterablePage4(pageable, page, (next) => this.serviceProxy.invoke("findPendingInvites", [applicationId, next]));
673
+ }
674
+ cancelInvite(inviteId) {
675
+ return this.serviceProxy.invoke("cancelInvite", [inviteId]);
676
+ }
677
+ memberDataSource(applicationId) {
678
+ return {
679
+ findAll: (pageable) => this.findMembers(applicationId, pageable),
680
+ search: (searchText, pageable) => this.searchMembers(searchText, applicationId, pageable)
681
+ };
654
682
  }
655
683
  }
656
684
  // packages/os-api/src/api/services/IDeviceApprovalService.ts
@@ -664,9 +692,9 @@ class DeviceApprovalService {
664
692
  }
665
693
  }
666
694
  // packages/os-api/src/api/services/IGitHubAppInstallationService.ts
667
- import { CrudServiceProxy as CrudServiceProxy9 } from "@kinotic-ai/core";
695
+ import { CrudServiceProxy as CrudServiceProxy8 } from "@kinotic-ai/core";
668
696
 
669
- class GitHubAppInstallationService extends CrudServiceProxy9 {
697
+ class GitHubAppInstallationService extends CrudServiceProxy8 {
670
698
  constructor(kinotic) {
671
699
  super(kinotic.serviceProxy("org.kinotic.github.api.services.GitHubAppInstallationService"));
672
700
  }
@@ -694,7 +722,7 @@ var OsApiPlugin = {
694
722
  dataInsights: new DataInsightsService(kinotic),
695
723
  vmNodes: new VmNodeServiceProxy(kinotic),
696
724
  workloads: new WorkloadServiceProxy(kinotic),
697
- iamUsers: new IamUserService(kinotic),
725
+ members: new MemberService(kinotic),
698
726
  deviceApproval: new DeviceApprovalService(kinotic),
699
727
  githubAppInstallations: new GitHubAppInstallationService(kinotic)
700
728
  };
@@ -723,6 +751,7 @@ export {
723
751
  ProjectService,
724
752
  Project,
725
753
  ProgressType,
754
+ PendingInviteSummary,
726
755
  ParticipantType,
727
756
  PageableC3Type,
728
757
  PageC3Type,
@@ -734,13 +763,13 @@ export {
734
763
  NamedQueriesDefinitionService,
735
764
  NamedQueriesDefinition,
736
765
  MigrationService,
766
+ MemberService,
737
767
  LoggersDescriptor,
738
768
  LoggerLevelsDescriptor,
739
769
  LogManager,
740
770
  LogLevel,
741
771
  KinoticProjectConfig,
742
772
  IdDecorator,
743
- IamUserService,
744
773
  IamUser,
745
774
  GroupLoggerLevelsDescriptor,
746
775
  GitHubToken,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kinotic-ai/os-api",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -41,7 +41,7 @@
41
41
  "rxjs": "^7.8.2"
42
42
  },
43
43
  "devDependencies": {
44
- "@kinotic-ai/core": "1.6.0",
44
+ "@kinotic-ai/core": "1.6.2",
45
45
  "@types/node": "^25.3.2",
46
46
  "@vitest/coverage-v8": "^4.0.18",
47
47
  "@vitest/runner": "^4.0.18",