@kinotic-ai/os-api 1.7.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
@@ -40,6 +40,9 @@ var __export = (target, all) => {
40
40
  // packages/os-api/src/index.ts
41
41
  var exports_src = {};
42
42
  __export(exports_src, {
43
+ isSystemParticipant: () => isSystemParticipant,
44
+ isOrganizationParticipant: () => isOrganizationParticipant,
45
+ isApplicationParticipant: () => isApplicationParticipant,
43
46
  WorkloadStatus: () => WorkloadStatus,
44
47
  WorkloadServiceProxy: () => WorkloadServiceProxy,
45
48
  Workload: () => Workload,
@@ -59,6 +62,8 @@ __export(exports_src, {
59
62
  ProjectService: () => ProjectService,
60
63
  Project: () => Project,
61
64
  ProgressType: () => ProgressType,
65
+ PendingInviteSummary: () => PendingInviteSummary,
66
+ ParticipantType: () => ParticipantType,
62
67
  PageableC3Type: () => PageableC3Type,
63
68
  PageC3Type: () => PageC3Type,
64
69
  OsApiPlugin: () => OsApiPlugin,
@@ -69,13 +74,13 @@ __export(exports_src, {
69
74
  NamedQueriesDefinitionService: () => NamedQueriesDefinitionService,
70
75
  NamedQueriesDefinition: () => NamedQueriesDefinition,
71
76
  MigrationService: () => MigrationService,
77
+ MemberService: () => MemberService,
72
78
  LoggersDescriptor: () => LoggersDescriptor,
73
79
  LoggerLevelsDescriptor: () => LoggerLevelsDescriptor,
74
80
  LogManager: () => LogManager,
75
81
  LogLevel: () => LogLevel,
76
82
  KinoticProjectConfig: () => KinoticProjectConfig,
77
83
  IdDecorator: () => IdDecorator,
78
- IamUserService: () => IamUserService,
79
84
  IamUser: () => IamUser,
80
85
  GroupLoggerLevelsDescriptor: () => GroupLoggerLevelsDescriptor,
81
86
  GitHubToken: () => GitHubToken,
@@ -278,6 +283,7 @@ class Application {
278
283
  id;
279
284
  organizationId;
280
285
  description;
286
+ tenantPerUser = false;
281
287
  updated = null;
282
288
  constructor(id, description) {
283
289
  this.id = id;
@@ -456,6 +462,16 @@ class IamUser {
456
462
  created = null;
457
463
  updated = null;
458
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
+ }
459
475
  // packages/os-api/src/api/model/github/GitHubAppInstallation.ts
460
476
  class GitHubAppInstallation {
461
477
  id = null;
@@ -493,6 +509,26 @@ class KinoticProjectConfig {
493
509
  fileExtensionForImports = ".js";
494
510
  validate;
495
511
  }
512
+ // packages/os-api/src/api/security/ParticipantType.ts
513
+ var ParticipantType;
514
+ ((ParticipantType2) => {
515
+ ParticipantType2["SYSTEM"] = "system";
516
+ ParticipantType2["ORGANIZATION"] = "organization";
517
+ ParticipantType2["APPLICATION"] = "application";
518
+ })(ParticipantType ||= {});
519
+ // packages/os-api/src/api/security/ParticipantGuards.ts
520
+ function scopeType(participant) {
521
+ return participant.type;
522
+ }
523
+ function isSystemParticipant(participant) {
524
+ return scopeType(participant) === "system" /* SYSTEM */;
525
+ }
526
+ function isOrganizationParticipant(participant) {
527
+ return scopeType(participant) === "organization" /* ORGANIZATION */;
528
+ }
529
+ function isApplicationParticipant(participant) {
530
+ return scopeType(participant) === "application" /* APPLICATION */;
531
+ }
496
532
  // packages/os-api/src/api/services/IApplicationService.ts
497
533
  var import_core = require("@kinotic-ai/core");
498
534
 
@@ -709,27 +745,43 @@ class WorkloadServiceProxy extends import_core7.CrudServiceProxy {
709
745
  return this.serviceProxy.invoke("syncIndex", []);
710
746
  }
711
747
  }
712
- // packages/os-api/src/api/services/IIamUserService.ts
748
+ // packages/os-api/src/api/services/IMemberService.ts
713
749
  var import_core8 = require("@kinotic-ai/core");
714
750
 
715
- class IamUserService extends import_core8.CrudServiceProxy {
751
+ class MemberService {
752
+ serviceProxy;
716
753
  constructor(kinotic) {
717
- 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]));
718
759
  }
719
- findByEmail(email, organizationId, applicationId) {
720
- return arguments.length >= 3 ? this.serviceProxy.invoke("findByEmail", [email, organizationId, applicationId]) : this.serviceProxy.invoke("findByEmail", [email]);
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]));
721
763
  }
722
- findFirstOrgUserByEmail(email) {
723
- return this.serviceProxy.invoke("findFirstOrgUserByEmail", [email]);
764
+ inviteMember(email, displayName, applicationId) {
765
+ return this.serviceProxy.invoke("inviteMember", [email, displayName, applicationId]);
724
766
  }
725
- findByOidcIdentity(oidcSubject, oidcConfigId, organizationId, applicationId) {
726
- return this.serviceProxy.invoke("findByOidcIdentity", [oidcSubject, oidcConfigId, organizationId, applicationId]);
767
+ setMemberEnabled(userId, enabled) {
768
+ return this.serviceProxy.invoke("setMemberEnabled", [userId, enabled]);
727
769
  }
728
- findAllByOidcIdentity(oidcSubject, oidcConfigId) {
729
- return this.serviceProxy.invoke("findAllByOidcIdentity", [oidcSubject, oidcConfigId]);
770
+ removeMember(userId) {
771
+ return this.serviceProxy.invoke("removeMember", [userId]);
730
772
  }
731
- createUser(user, password) {
732
- return this.serviceProxy.invoke("createUser", [user, password]);
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]));
776
+ }
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
+ };
733
785
  }
734
786
  }
735
787
  // packages/os-api/src/api/services/IDeviceApprovalService.ts
@@ -773,7 +825,7 @@ var OsApiPlugin = {
773
825
  dataInsights: new DataInsightsService(kinotic),
774
826
  vmNodes: new VmNodeServiceProxy(kinotic),
775
827
  workloads: new WorkloadServiceProxy(kinotic),
776
- iamUsers: new IamUserService(kinotic),
828
+ members: new MemberService(kinotic),
777
829
  deviceApproval: new DeviceApprovalService(kinotic),
778
830
  githubAppInstallations: new GitHubAppInstallationService(kinotic)
779
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;
@@ -696,6 +721,78 @@ declare class KinoticProjectConfig {
696
721
  */
697
722
  validate?: boolean;
698
723
  }
724
+ /**
725
+ * Identifies which scope layer a participant authenticated against. The server serializes this as
726
+ * the {@code type} discriminator on a participant, and it is used to narrow a base
727
+ * {@code IParticipant} to one of the scope-typed participant interfaces.
728
+ */
729
+ declare enum ParticipantType {
730
+ SYSTEM = "system",
731
+ ORGANIZATION = "organization",
732
+ APPLICATION = "application"
733
+ }
734
+ import { IParticipant } from "@kinotic-ai/core";
735
+ /**
736
+ * A participant authenticated against the platform SYSTEM scope — a platform operator with no
737
+ * organization or application context. Mirrors the server {@code SystemParticipant}.
738
+ */
739
+ interface ISystemParticipant extends IParticipant {
740
+ type: ParticipantType.SYSTEM;
741
+ }
742
+ import { IParticipant as IParticipant2 } from "@kinotic-ai/core";
743
+ /**
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}.
747
+ */
748
+ interface IOrganizationParticipant extends IParticipant2 {
749
+ type: ParticipantType.ORGANIZATION;
750
+ /**
751
+ * The id of the Organization this participant is authenticated under; never null.
752
+ */
753
+ organizationId: string;
754
+ }
755
+ import { IParticipant as IParticipant3 } from "@kinotic-ai/core";
756
+ /**
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}.
762
+ */
763
+ interface IApplicationParticipant extends IParticipant3 {
764
+ type: ParticipantType.APPLICATION;
765
+ /**
766
+ * The id of the Organization that owns the Application this participant is authenticated
767
+ * under; never null.
768
+ */
769
+ organizationId: string;
770
+ /**
771
+ * The id of the Application this participant is authenticated under; never null.
772
+ */
773
+ applicationId: string;
774
+ /**
775
+ * The tenant slice of the Application's end-user data this participant belongs to, or null
776
+ * when the Application is not multi-tenant.
777
+ */
778
+ tenantId?: string | null;
779
+ }
780
+ import { IParticipant as IParticipant4 } from "@kinotic-ai/core";
781
+ /**
782
+ * @return true if the participant authenticated against the platform SYSTEM scope
783
+ */
784
+ declare function isSystemParticipant(participant: IParticipant4): participant is ISystemParticipant;
785
+ /**
786
+ * Narrows to an {@link IOrganizationParticipant}, which carries an {@code organizationId} and
787
+ * ORGANIZATION-scope authority.
788
+ *
789
+ * @return true if the participant authenticated against an Organization
790
+ */
791
+ declare function isOrganizationParticipant(participant: IParticipant4): participant is IOrganizationParticipant;
792
+ /**
793
+ * @return true if the participant authenticated against an Application
794
+ */
795
+ declare function isApplicationParticipant(participant: IParticipant4): participant is IApplicationParticipant;
699
796
  import { IKinotic } from "@kinotic-ai/core";
700
797
  import { CrudServiceProxy, ICrudServiceProxy } from "@kinotic-ai/core";
701
798
  interface IApplicationService extends ICrudServiceProxy<Application> {
@@ -1015,46 +1112,55 @@ declare class WorkloadServiceProxy extends CrudServiceProxy7<Workload> implement
1015
1112
  countForNode(nodeId: string): Promise<number>;
1016
1113
  syncIndex(): Promise<void>;
1017
1114
  }
1018
- 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";
1019
1116
  /**
1020
- * Client proxy for the server's {@code IamUserService}; method shapes mirror the Java interface.
1021
- *
1022
- * NOTE: the server interface now lives in {@code kinotic-domain} and is not currently
1023
- * {@code @Publish}-annotated, so this proxy is not callable over RPC until the backend publishes
1024
- * the service. The shape here is kept in sync so it is ready once that happens; confirm the
1025
- * 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.
1026
1121
  */
1027
- interface IIamUserService extends ICrudServiceProxy8<IamUser> {
1028
- /** Finds the first user with the given email across all scopes, or null. */
1029
- 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>>;
1030
1125
  /**
1031
- * Finds the user with the given email within a scope identified structurally by
1032
- * (organizationId, applicationId): both null SYSTEM, organizationId only → ORGANIZATION,
1033
- * both set → APPLICATION.
1126
+ * Searches the scope's members by free text over email and display name. Blank
1127
+ * searchText is equivalent to {@link findMembers}.
1034
1128
  */
1035
- findByEmail(email: string, organizationId: string | null, applicationId: string | null): Promise<IamUser | null>;
1129
+ searchMembers(searchText: string, applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<IamUser>>;
1036
1130
  /**
1037
- * Finds the first ORGANIZATION-scope user with the given email across all organizations.
1038
- * Used by sign-up to enforce one user per email before the new org's id exists.
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.
1039
1134
  */
1040
- findFirstOrgUserByEmail(email: string): Promise<IamUser | null>;
1135
+ inviteMember(email: string, displayName: string | null, applicationId: string | null): Promise<PendingInviteSummary>;
1041
1136
  /**
1042
- * Finds the user (if any) with the given OIDC identity within a specific scope, using the
1043
- * same (organizationId, applicationId) null conventions as {@link findByEmail}.
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.
1044
1139
  */
1045
- findByOidcIdentity(oidcSubject: string, oidcConfigId: string, organizationId: string | null, applicationId: string | null): Promise<IamUser | null>;
1046
- /** Finds every user across scopes for a given OIDC identity — e.g. the orgs it can access. */
1047
- findAllByOidcIdentity(oidcSubject: string, oidcConfigId: string): Promise<IamUser[]>;
1048
- /** Creates a user and, if a password is provided, the matching credential. */
1049
- createUser(user: IamUser, password: string | null): Promise<IamUser>;
1140
+ setMemberEnabled(userId: string, enabled: boolean): Promise<void>;
1141
+ /**
1142
+ * Permanently removes a member of the caller's organization, including any stored
1143
+ * credential. Callers cannot remove themselves.
1144
+ */
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>;
1050
1152
  }
1051
- declare class IamUserService extends CrudServiceProxy8<IamUser> implements IIamUserService {
1153
+ declare class MemberService implements IMemberService {
1154
+ private readonly serviceProxy;
1052
1155
  constructor(kinotic: IKinotic11);
1053
- findByEmail(email: string, organizationId?: string | null, applicationId?: string | null): Promise<IamUser | null>;
1054
- findFirstOrgUserByEmail(email: string): Promise<IamUser | null>;
1055
- findByOidcIdentity(oidcSubject: string, oidcConfigId: string, organizationId: string | null, applicationId: string | null): Promise<IamUser | null>;
1056
- findAllByOidcIdentity(oidcSubject: string, oidcConfigId: string): Promise<IamUser[]>;
1057
- 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>;
1058
1164
  }
1059
1165
  import { IKinotic as IKinotic12 } from "@kinotic-ai/core";
1060
1166
  /**
@@ -1074,8 +1180,8 @@ declare class DeviceApprovalService implements IDeviceApprovalService {
1074
1180
  constructor(kinotic: IKinotic12);
1075
1181
  approve(userCode: string): Promise<void>;
1076
1182
  }
1077
- import { CrudServiceProxy as CrudServiceProxy9, IKinotic as IKinotic13, ICrudServiceProxy as ICrudServiceProxy9 } from "@kinotic-ai/core";
1078
- 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> {
1079
1185
  /**
1080
1186
  * Stages a single-use state token bound to the caller's organization plus the
1081
1187
  * supplied returnTo, then returns the GitHub install URL with that state
@@ -1100,7 +1206,7 @@ interface IGitHubAppInstallationService extends ICrudServiceProxy9<GitHubAppInst
1100
1206
  */
1101
1207
  findForCurrentOrg(): Promise<GitHubAppInstallation | null>;
1102
1208
  }
1103
- declare class GitHubAppInstallationService extends CrudServiceProxy9<GitHubAppInstallation> implements IGitHubAppInstallationService {
1209
+ declare class GitHubAppInstallationService extends CrudServiceProxy8<GitHubAppInstallation> implements IGitHubAppInstallationService {
1104
1210
  constructor(kinotic: IKinotic13);
1105
1211
  startInstall(returnTo: string | null): Promise<string>;
1106
1212
  completeInstall(installationId: number, state: string): Promise<GitHubInstallCompletion>;
@@ -1118,7 +1224,7 @@ interface IOsApiExtension {
1118
1224
  dataInsights: IDataInsightsService;
1119
1225
  vmNodes: IVmNodeService;
1120
1226
  workloads: IWorkloadService;
1121
- iamUsers: IIamUserService;
1227
+ members: IMemberService;
1122
1228
  deviceApproval: IDeviceApprovalService;
1123
1229
  githubAppInstallations: IGitHubAppInstallationService;
1124
1230
  }
@@ -1126,4 +1232,4 @@ declare const OsApiPlugin: KinoticPlugin<IOsApiExtension>;
1126
1232
  declare module "@kinotic-ai/core" {
1127
1233
  interface KinoticSingleton extends IOsApiExtension {}
1128
1234
  }
1129
- export { WorkloadStatus, WorkloadServiceProxy, Workload, VmProviderType, VmNodeStatus, VmNodeServiceProxy, VmNode, VersionDecorator, TimeReferenceDecorator, TextDecorator, TenantSelectionC3Type, TenantIdDecorator, SingleLoggerLevelsDescriptor, SignUpRequest, SignUpCompleteRequest, QueryOptionsC3Type, QueryDecorator, ProjectType, ProjectService, Project, ProgressType, 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, IProjectService, IOsApiExtension, IOrganizationService, INamedQueriesDefinitionService, IMigrationService, ILogManager, IIamUserService, IGitHubAppInstallationService, IEntityDefinitionService, IDeviceApprovalService, IDataInsightsService, IApplicationService, 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;
@@ -696,6 +721,78 @@ declare class KinoticProjectConfig {
696
721
  */
697
722
  validate?: boolean;
698
723
  }
724
+ /**
725
+ * Identifies which scope layer a participant authenticated against. The server serializes this as
726
+ * the {@code type} discriminator on a participant, and it is used to narrow a base
727
+ * {@code IParticipant} to one of the scope-typed participant interfaces.
728
+ */
729
+ declare enum ParticipantType {
730
+ SYSTEM = "system",
731
+ ORGANIZATION = "organization",
732
+ APPLICATION = "application"
733
+ }
734
+ import { IParticipant } from "@kinotic-ai/core";
735
+ /**
736
+ * A participant authenticated against the platform SYSTEM scope — a platform operator with no
737
+ * organization or application context. Mirrors the server {@code SystemParticipant}.
738
+ */
739
+ interface ISystemParticipant extends IParticipant {
740
+ type: ParticipantType.SYSTEM;
741
+ }
742
+ import { IParticipant as IParticipant2 } from "@kinotic-ai/core";
743
+ /**
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}.
747
+ */
748
+ interface IOrganizationParticipant extends IParticipant2 {
749
+ type: ParticipantType.ORGANIZATION;
750
+ /**
751
+ * The id of the Organization this participant is authenticated under; never null.
752
+ */
753
+ organizationId: string;
754
+ }
755
+ import { IParticipant as IParticipant3 } from "@kinotic-ai/core";
756
+ /**
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}.
762
+ */
763
+ interface IApplicationParticipant extends IParticipant3 {
764
+ type: ParticipantType.APPLICATION;
765
+ /**
766
+ * The id of the Organization that owns the Application this participant is authenticated
767
+ * under; never null.
768
+ */
769
+ organizationId: string;
770
+ /**
771
+ * The id of the Application this participant is authenticated under; never null.
772
+ */
773
+ applicationId: string;
774
+ /**
775
+ * The tenant slice of the Application's end-user data this participant belongs to, or null
776
+ * when the Application is not multi-tenant.
777
+ */
778
+ tenantId?: string | null;
779
+ }
780
+ import { IParticipant as IParticipant4 } from "@kinotic-ai/core";
781
+ /**
782
+ * @return true if the participant authenticated against the platform SYSTEM scope
783
+ */
784
+ declare function isSystemParticipant(participant: IParticipant4): participant is ISystemParticipant;
785
+ /**
786
+ * Narrows to an {@link IOrganizationParticipant}, which carries an {@code organizationId} and
787
+ * ORGANIZATION-scope authority.
788
+ *
789
+ * @return true if the participant authenticated against an Organization
790
+ */
791
+ declare function isOrganizationParticipant(participant: IParticipant4): participant is IOrganizationParticipant;
792
+ /**
793
+ * @return true if the participant authenticated against an Application
794
+ */
795
+ declare function isApplicationParticipant(participant: IParticipant4): participant is IApplicationParticipant;
699
796
  import { IKinotic } from "@kinotic-ai/core";
700
797
  import { CrudServiceProxy, ICrudServiceProxy } from "@kinotic-ai/core";
701
798
  interface IApplicationService extends ICrudServiceProxy<Application> {
@@ -1015,46 +1112,55 @@ declare class WorkloadServiceProxy extends CrudServiceProxy7<Workload> implement
1015
1112
  countForNode(nodeId: string): Promise<number>;
1016
1113
  syncIndex(): Promise<void>;
1017
1114
  }
1018
- 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";
1019
1116
  /**
1020
- * Client proxy for the server's {@code IamUserService}; method shapes mirror the Java interface.
1021
- *
1022
- * NOTE: the server interface now lives in {@code kinotic-domain} and is not currently
1023
- * {@code @Publish}-annotated, so this proxy is not callable over RPC until the backend publishes
1024
- * the service. The shape here is kept in sync so it is ready once that happens; confirm the
1025
- * 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.
1026
1121
  */
1027
- interface IIamUserService extends ICrudServiceProxy8<IamUser> {
1028
- /** Finds the first user with the given email across all scopes, or null. */
1029
- 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>>;
1030
1125
  /**
1031
- * Finds the user with the given email within a scope identified structurally by
1032
- * (organizationId, applicationId): both null SYSTEM, organizationId only → ORGANIZATION,
1033
- * both set → APPLICATION.
1126
+ * Searches the scope's members by free text over email and display name. Blank
1127
+ * searchText is equivalent to {@link findMembers}.
1034
1128
  */
1035
- findByEmail(email: string, organizationId: string | null, applicationId: string | null): Promise<IamUser | null>;
1129
+ searchMembers(searchText: string, applicationId: string | null, pageable: Pageable4): Promise<IterablePage4<IamUser>>;
1036
1130
  /**
1037
- * Finds the first ORGANIZATION-scope user with the given email across all organizations.
1038
- * Used by sign-up to enforce one user per email before the new org's id exists.
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.
1039
1134
  */
1040
- findFirstOrgUserByEmail(email: string): Promise<IamUser | null>;
1135
+ inviteMember(email: string, displayName: string | null, applicationId: string | null): Promise<PendingInviteSummary>;
1041
1136
  /**
1042
- * Finds the user (if any) with the given OIDC identity within a specific scope, using the
1043
- * same (organizationId, applicationId) null conventions as {@link findByEmail}.
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.
1044
1139
  */
1045
- findByOidcIdentity(oidcSubject: string, oidcConfigId: string, organizationId: string | null, applicationId: string | null): Promise<IamUser | null>;
1046
- /** Finds every user across scopes for a given OIDC identity — e.g. the orgs it can access. */
1047
- findAllByOidcIdentity(oidcSubject: string, oidcConfigId: string): Promise<IamUser[]>;
1048
- /** Creates a user and, if a password is provided, the matching credential. */
1049
- createUser(user: IamUser, password: string | null): Promise<IamUser>;
1140
+ setMemberEnabled(userId: string, enabled: boolean): Promise<void>;
1141
+ /**
1142
+ * Permanently removes a member of the caller's organization, including any stored
1143
+ * credential. Callers cannot remove themselves.
1144
+ */
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>;
1050
1152
  }
1051
- declare class IamUserService extends CrudServiceProxy8<IamUser> implements IIamUserService {
1153
+ declare class MemberService implements IMemberService {
1154
+ private readonly serviceProxy;
1052
1155
  constructor(kinotic: IKinotic11);
1053
- findByEmail(email: string, organizationId?: string | null, applicationId?: string | null): Promise<IamUser | null>;
1054
- findFirstOrgUserByEmail(email: string): Promise<IamUser | null>;
1055
- findByOidcIdentity(oidcSubject: string, oidcConfigId: string, organizationId: string | null, applicationId: string | null): Promise<IamUser | null>;
1056
- findAllByOidcIdentity(oidcSubject: string, oidcConfigId: string): Promise<IamUser[]>;
1057
- 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>;
1058
1164
  }
1059
1165
  import { IKinotic as IKinotic12 } from "@kinotic-ai/core";
1060
1166
  /**
@@ -1074,8 +1180,8 @@ declare class DeviceApprovalService implements IDeviceApprovalService {
1074
1180
  constructor(kinotic: IKinotic12);
1075
1181
  approve(userCode: string): Promise<void>;
1076
1182
  }
1077
- import { CrudServiceProxy as CrudServiceProxy9, IKinotic as IKinotic13, ICrudServiceProxy as ICrudServiceProxy9 } from "@kinotic-ai/core";
1078
- 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> {
1079
1185
  /**
1080
1186
  * Stages a single-use state token bound to the caller's organization plus the
1081
1187
  * supplied returnTo, then returns the GitHub install URL with that state
@@ -1100,7 +1206,7 @@ interface IGitHubAppInstallationService extends ICrudServiceProxy9<GitHubAppInst
1100
1206
  */
1101
1207
  findForCurrentOrg(): Promise<GitHubAppInstallation | null>;
1102
1208
  }
1103
- declare class GitHubAppInstallationService extends CrudServiceProxy9<GitHubAppInstallation> implements IGitHubAppInstallationService {
1209
+ declare class GitHubAppInstallationService extends CrudServiceProxy8<GitHubAppInstallation> implements IGitHubAppInstallationService {
1104
1210
  constructor(kinotic: IKinotic13);
1105
1211
  startInstall(returnTo: string | null): Promise<string>;
1106
1212
  completeInstall(installationId: number, state: string): Promise<GitHubInstallCompletion>;
@@ -1118,7 +1224,7 @@ interface IOsApiExtension {
1118
1224
  dataInsights: IDataInsightsService;
1119
1225
  vmNodes: IVmNodeService;
1120
1226
  workloads: IWorkloadService;
1121
- iamUsers: IIamUserService;
1227
+ members: IMemberService;
1122
1228
  deviceApproval: IDeviceApprovalService;
1123
1229
  githubAppInstallations: IGitHubAppInstallationService;
1124
1230
  }
@@ -1126,4 +1232,4 @@ declare const OsApiPlugin: KinoticPlugin<IOsApiExtension>;
1126
1232
  declare module "@kinotic-ai/core" {
1127
1233
  interface KinoticSingleton extends IOsApiExtension {}
1128
1234
  }
1129
- export { WorkloadStatus, WorkloadServiceProxy, Workload, VmProviderType, VmNodeStatus, VmNodeServiceProxy, VmNode, VersionDecorator, TimeReferenceDecorator, TextDecorator, TenantSelectionC3Type, TenantIdDecorator, SingleLoggerLevelsDescriptor, SignUpRequest, SignUpCompleteRequest, QueryOptionsC3Type, QueryDecorator, ProjectType, ProjectService, Project, ProgressType, 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, IProjectService, IOsApiExtension, IOrganizationService, INamedQueriesDefinitionService, IMigrationService, ILogManager, IIamUserService, IGitHubAppInstallationService, IEntityDefinitionService, IDeviceApprovalService, IDataInsightsService, IApplicationService, 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;
@@ -393,6 +404,26 @@ class KinoticProjectConfig {
393
404
  fileExtensionForImports = ".js";
394
405
  validate;
395
406
  }
407
+ // packages/os-api/src/api/security/ParticipantType.ts
408
+ var ParticipantType;
409
+ ((ParticipantType2) => {
410
+ ParticipantType2["SYSTEM"] = "system";
411
+ ParticipantType2["ORGANIZATION"] = "organization";
412
+ ParticipantType2["APPLICATION"] = "application";
413
+ })(ParticipantType ||= {});
414
+ // packages/os-api/src/api/security/ParticipantGuards.ts
415
+ function scopeType(participant) {
416
+ return participant.type;
417
+ }
418
+ function isSystemParticipant(participant) {
419
+ return scopeType(participant) === "system" /* SYSTEM */;
420
+ }
421
+ function isOrganizationParticipant(participant) {
422
+ return scopeType(participant) === "organization" /* ORGANIZATION */;
423
+ }
424
+ function isApplicationParticipant(participant) {
425
+ return scopeType(participant) === "application" /* APPLICATION */;
426
+ }
396
427
  // packages/os-api/src/api/services/IApplicationService.ts
397
428
  import { CrudServiceProxy } from "@kinotic-ai/core";
398
429
 
@@ -609,27 +640,45 @@ class WorkloadServiceProxy extends CrudServiceProxy7 {
609
640
  return this.serviceProxy.invoke("syncIndex", []);
610
641
  }
611
642
  }
612
- // packages/os-api/src/api/services/IIamUserService.ts
613
- 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";
614
647
 
615
- class IamUserService extends CrudServiceProxy8 {
648
+ class MemberService {
649
+ serviceProxy;
616
650
  constructor(kinotic) {
617
- 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]));
656
+ }
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]));
618
660
  }
619
- findByEmail(email, organizationId, applicationId) {
620
- return arguments.length >= 3 ? this.serviceProxy.invoke("findByEmail", [email, organizationId, applicationId]) : this.serviceProxy.invoke("findByEmail", [email]);
661
+ inviteMember(email, displayName, applicationId) {
662
+ return this.serviceProxy.invoke("inviteMember", [email, displayName, applicationId]);
621
663
  }
622
- findFirstOrgUserByEmail(email) {
623
- return this.serviceProxy.invoke("findFirstOrgUserByEmail", [email]);
664
+ setMemberEnabled(userId, enabled) {
665
+ return this.serviceProxy.invoke("setMemberEnabled", [userId, enabled]);
624
666
  }
625
- findByOidcIdentity(oidcSubject, oidcConfigId, organizationId, applicationId) {
626
- return this.serviceProxy.invoke("findByOidcIdentity", [oidcSubject, oidcConfigId, organizationId, applicationId]);
667
+ removeMember(userId) {
668
+ return this.serviceProxy.invoke("removeMember", [userId]);
627
669
  }
628
- findAllByOidcIdentity(oidcSubject, oidcConfigId) {
629
- return this.serviceProxy.invoke("findAllByOidcIdentity", [oidcSubject, oidcConfigId]);
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]));
630
673
  }
631
- createUser(user, password) {
632
- return this.serviceProxy.invoke("createUser", [user, password]);
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
+ };
633
682
  }
634
683
  }
635
684
  // packages/os-api/src/api/services/IDeviceApprovalService.ts
@@ -643,9 +692,9 @@ class DeviceApprovalService {
643
692
  }
644
693
  }
645
694
  // packages/os-api/src/api/services/IGitHubAppInstallationService.ts
646
- import { CrudServiceProxy as CrudServiceProxy9 } from "@kinotic-ai/core";
695
+ import { CrudServiceProxy as CrudServiceProxy8 } from "@kinotic-ai/core";
647
696
 
648
- class GitHubAppInstallationService extends CrudServiceProxy9 {
697
+ class GitHubAppInstallationService extends CrudServiceProxy8 {
649
698
  constructor(kinotic) {
650
699
  super(kinotic.serviceProxy("org.kinotic.github.api.services.GitHubAppInstallationService"));
651
700
  }
@@ -673,13 +722,16 @@ var OsApiPlugin = {
673
722
  dataInsights: new DataInsightsService(kinotic),
674
723
  vmNodes: new VmNodeServiceProxy(kinotic),
675
724
  workloads: new WorkloadServiceProxy(kinotic),
676
- iamUsers: new IamUserService(kinotic),
725
+ members: new MemberService(kinotic),
677
726
  deviceApproval: new DeviceApprovalService(kinotic),
678
727
  githubAppInstallations: new GitHubAppInstallationService(kinotic)
679
728
  };
680
729
  }
681
730
  };
682
731
  export {
732
+ isSystemParticipant,
733
+ isOrganizationParticipant,
734
+ isApplicationParticipant,
683
735
  WorkloadStatus,
684
736
  WorkloadServiceProxy,
685
737
  Workload,
@@ -699,6 +751,8 @@ export {
699
751
  ProjectService,
700
752
  Project,
701
753
  ProgressType,
754
+ PendingInviteSummary,
755
+ ParticipantType,
702
756
  PageableC3Type,
703
757
  PageC3Type,
704
758
  OsApiPlugin,
@@ -709,13 +763,13 @@ export {
709
763
  NamedQueriesDefinitionService,
710
764
  NamedQueriesDefinition,
711
765
  MigrationService,
766
+ MemberService,
712
767
  LoggersDescriptor,
713
768
  LoggerLevelsDescriptor,
714
769
  LogManager,
715
770
  LogLevel,
716
771
  KinoticProjectConfig,
717
772
  IdDecorator,
718
- IamUserService,
719
773
  IamUser,
720
774
  GroupLoggerLevelsDescriptor,
721
775
  GitHubToken,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kinotic-ai/os-api",
3
- "version": "1.7.0",
3
+ "version": "1.9.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -33,15 +33,15 @@
33
33
  "ui-test": "vitest --ui --coverage.enabled=true --mode development"
34
34
  },
35
35
  "peerDependencies": {
36
- "@kinotic-ai/core": ">=1.4.0"
36
+ "@kinotic-ai/core": ">=1.6.0"
37
37
  },
38
38
  "dependencies": {
39
39
  "@kinotic-ai/idl": "1.0.9",
40
- "@kinotic-ai/persistence": "1.3.0",
40
+ "@kinotic-ai/persistence": "1.3.1",
41
41
  "rxjs": "^7.8.2"
42
42
  },
43
43
  "devDependencies": {
44
- "@kinotic-ai/core": "1.4.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",