@kinotic-ai/os-api 1.1.0 → 1.2.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,8 @@ __export(exports_src, {
62
62
  PageableC3Type: () => PageableC3Type,
63
63
  PageC3Type: () => PageC3Type,
64
64
  OsApiPlugin: () => OsApiPlugin,
65
+ OrganizationService: () => OrganizationService,
66
+ Organization: () => Organization,
65
67
  NotIndexedDecorator: () => NotIndexedDecorator,
66
68
  NestedDecorator: () => NestedDecorator,
67
69
  NamedQueriesDefinitionService: () => NamedQueriesDefinitionService,
@@ -268,6 +270,7 @@ class TenantSelectionC3Type extends import_idl17.ArrayC3Type {
268
270
  // packages/os-api/src/api/model/Application.ts
269
271
  class Application {
270
272
  id;
273
+ organizationId;
271
274
  description;
272
275
  updated = null;
273
276
  constructor(id, description) {
@@ -275,9 +278,20 @@ class Application {
275
278
  this.description = description;
276
279
  }
277
280
  }
281
+ // packages/os-api/src/api/model/Organization.ts
282
+ class Organization {
283
+ id = null;
284
+ name = "";
285
+ description = null;
286
+ oidcConfigurationIds = null;
287
+ createdBy = null;
288
+ created = null;
289
+ updated = null;
290
+ }
278
291
  // packages/os-api/src/api/model/Project.ts
279
292
  class Project {
280
293
  id = null;
294
+ organizationId;
281
295
  applicationId;
282
296
  name;
283
297
  description;
@@ -456,6 +470,17 @@ class ApplicationService extends import_core.CrudServiceProxy {
456
470
  return this.serviceProxy.invoke("syncIndex", []);
457
471
  }
458
472
  }
473
+ // packages/os-api/src/api/services/IOrganizationService.ts
474
+ var import_core2 = require("@kinotic-ai/core");
475
+
476
+ class OrganizationService extends import_core2.CrudServiceProxy {
477
+ constructor(kinotic) {
478
+ super(kinotic.serviceProxy("org.kinotic.os.api.services.OrganizationService"));
479
+ }
480
+ getOidcConfigurations(organizationId) {
481
+ return this.serviceProxy.invoke("getOidcConfigurations", [organizationId]);
482
+ }
483
+ }
459
484
  // packages/os-api/src/api/services/ILogManager.ts
460
485
  var LogLevel;
461
486
  ((LogLevel2) => {
@@ -486,9 +511,9 @@ class LoggersDescriptor {
486
511
  groups = new Map;
487
512
  }
488
513
  // packages/os-api/src/api/services/IProjectService.ts
489
- var import_core2 = require("@kinotic-ai/core");
514
+ var import_core3 = require("@kinotic-ai/core");
490
515
 
491
- class ProjectService extends import_core2.CrudServiceProxy {
516
+ class ProjectService extends import_core3.CrudServiceProxy {
492
517
  constructor(kinotic) {
493
518
  super(kinotic.serviceProxy("org.kinotic.os.api.services.ProjectService"));
494
519
  }
@@ -500,7 +525,7 @@ class ProjectService extends import_core2.CrudServiceProxy {
500
525
  }
501
526
  async findAllForApplication(applicationId, pageable) {
502
527
  const page = await this.findAllForApplicationSinglePage(applicationId, pageable);
503
- return new import_core2.FunctionalIterablePage(pageable, page, (pageable2) => this.findAllForApplicationSinglePage(applicationId, pageable2));
528
+ return new import_core3.FunctionalIterablePage(pageable, page, (pageable2) => this.findAllForApplicationSinglePage(applicationId, pageable2));
504
529
  }
505
530
  findAllForApplicationSinglePage(applicationId, pageable) {
506
531
  return this.serviceProxy.invoke("findAllForApplication", [applicationId, pageable]);
@@ -536,9 +561,9 @@ class LogManager {
536
561
  }
537
562
  }
538
563
  // packages/os-api/src/api/services/IEntityDefinitionService.ts
539
- var import_core3 = require("@kinotic-ai/core");
564
+ var import_core4 = require("@kinotic-ai/core");
540
565
 
541
- class EntityDefinitionService extends import_core3.CrudServiceProxy {
566
+ class EntityDefinitionService extends import_core4.CrudServiceProxy {
542
567
  constructor(kinotic) {
543
568
  super(kinotic.serviceProxy("org.kinotic.persistence.api.services.EntityDefinitionService"));
544
569
  }
@@ -553,14 +578,14 @@ class EntityDefinitionService extends import_core3.CrudServiceProxy {
553
578
  }
554
579
  async findAllForApplication(applicationId, pageable) {
555
580
  const page = await this.findAllForApplicationSinglePage(applicationId, pageable);
556
- return new import_core3.FunctionalIterablePage(pageable, page, (pageable2) => this.findAllForApplicationSinglePage(applicationId, pageable2));
581
+ return new import_core4.FunctionalIterablePage(pageable, page, (pageable2) => this.findAllForApplicationSinglePage(applicationId, pageable2));
557
582
  }
558
583
  findAllPublishedForApplication(applicationId, pageable) {
559
584
  return this.serviceProxy.invoke("findAllPublishedForApplication", [applicationId, pageable]);
560
585
  }
561
586
  async findAllForProject(projectId, pageable) {
562
587
  const page = await this.findAllForProjectSinglePage(projectId, pageable);
563
- return new import_core3.FunctionalIterablePage(pageable, page, (pageable2) => this.findAllForProjectSinglePage(projectId, pageable2));
588
+ return new import_core4.FunctionalIterablePage(pageable, page, (pageable2) => this.findAllForProjectSinglePage(projectId, pageable2));
564
589
  }
565
590
  findAllForProjectSinglePage(projectId, pageable) {
566
591
  return this.serviceProxy.invoke("findAllForProject", [projectId, pageable]);
@@ -576,9 +601,9 @@ class EntityDefinitionService extends import_core3.CrudServiceProxy {
576
601
  }
577
602
  }
578
603
  // packages/os-api/src/api/services/INamedQueriesDefinitionService.ts
579
- var import_core4 = require("@kinotic-ai/core");
604
+ var import_core5 = require("@kinotic-ai/core");
580
605
 
581
- class NamedQueriesDefinitionService extends import_core4.CrudServiceProxy {
606
+ class NamedQueriesDefinitionService extends import_core5.CrudServiceProxy {
582
607
  constructor(kinotic) {
583
608
  super(kinotic.serviceProxy("org.kinotic.persistence.api.services.NamedQueriesDefinitionService"));
584
609
  }
@@ -613,9 +638,9 @@ class DataInsightsService {
613
638
  }
614
639
  }
615
640
  // packages/os-api/src/api/services/IVmNodeService.ts
616
- var import_core5 = require("@kinotic-ai/core");
641
+ var import_core6 = require("@kinotic-ai/core");
617
642
 
618
- class VmNodeServiceProxy extends import_core5.CrudServiceProxy {
643
+ class VmNodeServiceProxy extends import_core6.CrudServiceProxy {
619
644
  constructor(kinotic) {
620
645
  super(kinotic.serviceProxy("org.kinotic.os.api.services.VmNodeService"));
621
646
  }
@@ -627,15 +652,15 @@ class VmNodeServiceProxy extends import_core5.CrudServiceProxy {
627
652
  }
628
653
  }
629
654
  // packages/os-api/src/api/services/IWorkloadService.ts
630
- var import_core6 = require("@kinotic-ai/core");
655
+ var import_core7 = require("@kinotic-ai/core");
631
656
 
632
- class WorkloadServiceProxy extends import_core6.CrudServiceProxy {
657
+ class WorkloadServiceProxy extends import_core7.CrudServiceProxy {
633
658
  constructor(kinotic) {
634
659
  super(kinotic.serviceProxy("org.kinotic.os.api.services.WorkloadService"));
635
660
  }
636
661
  async findAllForNode(nodeId, pageable) {
637
662
  const page = await this.findAllForNodeSinglePage(nodeId, pageable);
638
- return new import_core6.FunctionalIterablePage(pageable, page, (pageable2) => this.findAllForNodeSinglePage(nodeId, pageable2));
663
+ return new import_core7.FunctionalIterablePage(pageable, page, (pageable2) => this.findAllForNodeSinglePage(nodeId, pageable2));
639
664
  }
640
665
  findAllForNodeSinglePage(nodeId, pageable) {
641
666
  return this.serviceProxy.invoke("findAllForNode", [nodeId, pageable]);
@@ -648,9 +673,9 @@ class WorkloadServiceProxy extends import_core6.CrudServiceProxy {
648
673
  }
649
674
  }
650
675
  // packages/os-api/src/api/services/iam/IIamUserService.ts
651
- var import_core7 = require("@kinotic-ai/core");
676
+ var import_core8 = require("@kinotic-ai/core");
652
677
 
653
- class IamUserService extends import_core7.CrudServiceProxy {
678
+ class IamUserService extends import_core8.CrudServiceProxy {
654
679
  constructor(kinotic) {
655
680
  super(kinotic.serviceProxy("org.kinotic.os.api.services.iam.IamUserService"));
656
681
  }
@@ -669,12 +694,16 @@ class IamUserService extends import_core7.CrudServiceProxy {
669
694
  resetPassword(userId, newPassword) {
670
695
  return this.serviceProxy.invoke("resetPassword", [userId, newPassword]);
671
696
  }
697
+ findFirstByEmailInScopeType(email, authScopeType) {
698
+ return this.serviceProxy.invoke("findFirstByEmailInScopeType", [email, authScopeType]);
699
+ }
672
700
  }
673
701
  // packages/os-api/src/api/OsApiPlugin.ts
674
702
  var OsApiPlugin = {
675
703
  install(kinotic) {
676
704
  return {
677
705
  applications: new ApplicationService(kinotic),
706
+ organizations: new OrganizationService(kinotic),
678
707
  projects: new ProjectService(kinotic),
679
708
  logManager: new LogManager(kinotic),
680
709
  entityDefinitions: new EntityDefinitionService(kinotic),
package/dist/index.d.cts CHANGED
@@ -138,21 +138,49 @@ declare class TenantSelectionC3Type extends ArrayC3Type {
138
138
  import { Identifiable } from "@kinotic-ai/core";
139
139
  declare class Application implements Identifiable<string> {
140
140
  id: string;
141
+ /**
142
+ * The id of the organization that owns this application.
143
+ * Must be set by the caller before save — backend org enforcement rejects entities
144
+ * with a missing or mismatched organizationId.
145
+ */
146
+ organizationId: string;
141
147
  description: string;
142
148
  updated: number | null;
143
149
  constructor(id: string, description: string);
144
150
  }
145
151
  import { Identifiable as Identifiable2 } from "@kinotic-ai/core";
152
+ /**
153
+ * Represents an organization developing applications on the Kinotic OS platform.
154
+ * Organizations provide the boundary for teams, applications, users, and shared OIDC configuration.
155
+ *
156
+ * The {@link id} is auto-generated from the {@link name} on save (slugified) and serves as the URL-safe identifier.
157
+ */
158
+ declare class Organization implements Identifiable2<string> {
159
+ id: string | null;
160
+ name: string;
161
+ description: string | null;
162
+ oidcConfigurationIds: string[] | null;
163
+ createdBy: string | null;
164
+ created: number | null;
165
+ updated: number | null;
166
+ }
167
+ import { Identifiable as Identifiable3 } from "@kinotic-ai/core";
146
168
  declare enum ProjectType {
147
169
  TYPESCRIPT = "TYPESCRIPT"
148
170
  }
149
- declare class Project implements Identifiable2<string> {
171
+ declare class Project implements Identifiable3<string> {
150
172
  /**
151
173
  * The id of the project.
152
174
  * All project ids are unique throughout the entire system.
153
175
  */
154
176
  id: string | null;
155
177
  /**
178
+ * The id of the organization that owns this project.
179
+ * Must be set by the caller before save — backend org enforcement rejects entities
180
+ * with a missing or mismatched organizationId.
181
+ */
182
+ organizationId: string;
183
+ /**
156
184
  * The id of the application that this project belongs to.
157
185
  * All application ids are unique throughout the entire system.
158
186
  */
@@ -176,8 +204,8 @@ declare class Project implements Identifiable2<string> {
176
204
  constructor(id: string | null, applicationId: string, name: string, description?: string);
177
205
  }
178
206
  import { ObjectC3Type as ObjectC3Type3 } from "@kinotic-ai/idl";
179
- import { Identifiable as Identifiable3 } from "@kinotic-ai/core";
180
- declare class EntityDefinition implements Identifiable3<string> {
207
+ import { Identifiable as Identifiable4 } from "@kinotic-ai/core";
208
+ declare class EntityDefinition implements Identifiable4<string> {
181
209
  id: string | null;
182
210
  /**
183
211
  * The id of the organization that owns this entity definition.
@@ -203,12 +231,12 @@ declare class EntityDefinition implements Identifiable3<string> {
203
231
  publishedTimestamp: number;
204
232
  constructor(organizationId: string, applicationId: string, projectId: string, name: string, schema: ObjectC3Type3, description?: string | null);
205
233
  }
206
- import { Identifiable as Identifiable4 } from "@kinotic-ai/core";
234
+ import { Identifiable as Identifiable5 } from "@kinotic-ai/core";
207
235
  import { FunctionDefinition } from "@kinotic-ai/idl";
208
236
  /**
209
237
  * Provides Metadata that represents Named Queries for an Application
210
238
  */
211
- declare class NamedQueriesDefinition implements Identifiable4<string> {
239
+ declare class NamedQueriesDefinition implements Identifiable5<string> {
212
240
  id: string;
213
241
  organizationId?: string | null;
214
242
  applicationId: string;
@@ -348,7 +376,7 @@ interface InsightRequest {
348
376
  */
349
377
  additionalContext?: string;
350
378
  }
351
- import { Identifiable as Identifiable5 } from "@kinotic-ai/core";
379
+ import { Identifiable as Identifiable6 } from "@kinotic-ai/core";
352
380
  declare enum WorkloadStatus {
353
381
  PENDING = "PENDING",
354
382
  STARTING = "STARTING",
@@ -366,7 +394,7 @@ declare enum VmProviderType {
366
394
  * Represents a workload to be managed by the VM manager.
367
395
  * A workload defines the configuration for a micro VM instance.
368
396
  */
369
- declare class Workload implements Identifiable5<string> {
397
+ declare class Workload implements Identifiable6<string> {
370
398
  /**
371
399
  * Unique identifier for this workload.
372
400
  */
@@ -421,7 +449,7 @@ declare class Workload implements Identifiable5<string> {
421
449
  updated: number | null;
422
450
  constructor(name: string, image: string);
423
451
  }
424
- import { Identifiable as Identifiable6 } from "@kinotic-ai/core";
452
+ import { Identifiable as Identifiable7 } from "@kinotic-ai/core";
425
453
  declare enum VmNodeStatus {
426
454
  ONLINE = "ONLINE",
427
455
  OFFLINE = "OFFLINE",
@@ -431,7 +459,7 @@ declare enum VmNodeStatus {
431
459
  * Represents a node in the cluster that is running a VmManager process
432
460
  * and is capable of hosting workloads.
433
461
  */
434
- declare class VmNode implements Identifiable6<string> {
462
+ declare class VmNode implements Identifiable7<string> {
435
463
  /**
436
464
  * Unique identifier for this node.
437
465
  */
@@ -485,7 +513,7 @@ declare enum AuthType {
485
513
  LOCAL = "LOCAL",
486
514
  OIDC = "OIDC"
487
515
  }
488
- import { Identifiable as Identifiable7 } from "@kinotic-ai/core";
516
+ import { Identifiable as Identifiable8 } from "@kinotic-ai/core";
489
517
  /**
490
518
  * Represents an authenticated identity at any scope layer in the IAM system.
491
519
  * Each user is scoped to exactly one layer and is unique by email within that scope.
@@ -494,7 +522,7 @@ import { Identifiable as Identifiable7 } from "@kinotic-ai/core";
494
522
  * - For APPLICATION scopes, {@link tenantId} is required and identifies the
495
523
  * client tenant the user belongs to within the application's data.
496
524
  */
497
- declare class IamUser implements Identifiable7<string> {
525
+ declare class IamUser implements Identifiable8<string> {
498
526
  id: string | null;
499
527
  email: string;
500
528
  displayName: string | null;
@@ -619,6 +647,22 @@ declare class ApplicationService extends CrudServiceProxy<Application> implement
619
647
  createApplicationIfNotExist(id: string, description: string): Promise<Application>;
620
648
  syncIndex(): Promise<void>;
621
649
  }
650
+ import { IKinotic as IKinotic2 } from "@kinotic-ai/core";
651
+ import { CrudServiceProxy as CrudServiceProxy2, ICrudServiceProxy as ICrudServiceProxy2 } from "@kinotic-ai/core";
652
+ interface IOrganizationService extends ICrudServiceProxy2<Organization> {
653
+ /**
654
+ * Returns the enabled OIDC configurations registered on the given organization.
655
+ *
656
+ * @param organizationId the id of the organization
657
+ * @return the enabled configurations, or an empty list if the organization is not
658
+ * found or has no configurations attached
659
+ */
660
+ getOidcConfigurations(organizationId: string): Promise<any[]>;
661
+ }
662
+ declare class OrganizationService extends CrudServiceProxy2<Organization> implements IOrganizationService {
663
+ constructor(kinotic: IKinotic2);
664
+ getOidcConfigurations(organizationId: string): Promise<any[]>;
665
+ }
622
666
  declare enum LogLevel {
623
667
  TRACE = "TRACE",
624
668
  DEBUG = "DEBUG",
@@ -668,8 +712,8 @@ interface ILogManager {
668
712
  */
669
713
  configureLogLevel(nodeId: string, name: string, level: LogLevel): Promise<void>;
670
714
  }
671
- import { CrudServiceProxy as CrudServiceProxy2, IKinotic as IKinotic2, ICrudServiceProxy as ICrudServiceProxy2, IterablePage, Pageable } from "@kinotic-ai/core";
672
- interface IProjectService extends ICrudServiceProxy2<Project> {
715
+ import { CrudServiceProxy as CrudServiceProxy3, IKinotic as IKinotic3, ICrudServiceProxy as ICrudServiceProxy3, IterablePage, Pageable } from "@kinotic-ai/core";
716
+ interface IProjectService extends ICrudServiceProxy3<Project> {
673
717
  /**
674
718
  * Counts all projects for the given application.
675
719
  * @param applicationId the application to find projects for
@@ -695,24 +739,24 @@ interface IProjectService extends ICrudServiceProxy2<Project> {
695
739
  */
696
740
  syncIndex(): Promise<void>;
697
741
  }
698
- declare class ProjectService extends CrudServiceProxy2<Project> implements IProjectService {
699
- constructor(kinotic: IKinotic2);
742
+ declare class ProjectService extends CrudServiceProxy3<Project> implements IProjectService {
743
+ constructor(kinotic: IKinotic3);
700
744
  countForApplication(applicationId: string): Promise<number>;
701
745
  createProjectIfNotExist(project: Project): Promise<Project>;
702
746
  findAllForApplication(applicationId: string, pageable: Pageable): Promise<IterablePage<Project>>;
703
747
  findAllForApplicationSinglePage(applicationId: string, pageable: Pageable): Promise<IterablePage<Project>>;
704
748
  syncIndex(): Promise<void>;
705
749
  }
706
- import { IKinotic as IKinotic3 } from "@kinotic-ai/core";
750
+ import { IKinotic as IKinotic4 } from "@kinotic-ai/core";
707
751
  declare class LogManager implements ILogManager {
708
752
  private readonly serviceProxy;
709
- constructor(kinotic: IKinotic3);
753
+ constructor(kinotic: IKinotic4);
710
754
  loggers(nodeId: string): Promise<LoggersDescriptor>;
711
755
  loggerLevels(nodeId: string, name: string): Promise<LoggerLevelsDescriptor>;
712
756
  configureLogLevel(nodeId: string, name: string, level: LogLevel): Promise<void>;
713
757
  }
714
- import { CrudServiceProxy as CrudServiceProxy3, IKinotic as IKinotic4, ICrudServiceProxy as ICrudServiceProxy3, IterablePage as IterablePage2, Page, Pageable as Pageable2 } from "@kinotic-ai/core";
715
- interface IEntityDefinitionService extends ICrudServiceProxy3<EntityDefinition> {
758
+ import { CrudServiceProxy as CrudServiceProxy4, IKinotic as IKinotic5, ICrudServiceProxy as ICrudServiceProxy4, IterablePage as IterablePage2, Page, Pageable as Pageable2 } from "@kinotic-ai/core";
759
+ interface IEntityDefinitionService extends ICrudServiceProxy4<EntityDefinition> {
716
760
  /**
717
761
  * Counts all entity definitions for the given application.
718
762
  * @param applicationId the application to find entity definitions for
@@ -765,8 +809,8 @@ interface IEntityDefinitionService extends ICrudServiceProxy3<EntityDefinition>
765
809
  */
766
810
  unPublish(entityDefinitionId: string): Promise<void>;
767
811
  }
768
- declare class EntityDefinitionService extends CrudServiceProxy3<EntityDefinition> implements IEntityDefinitionService {
769
- constructor(kinotic: IKinotic4);
812
+ declare class EntityDefinitionService extends CrudServiceProxy4<EntityDefinition> implements IEntityDefinitionService {
813
+ constructor(kinotic: IKinotic5);
770
814
  countForApplication(applicationId: string): Promise<number>;
771
815
  countForProject(projectId: string): Promise<number>;
772
816
  findAllForApplicationSinglePage(applicationId: string, pageable: Pageable2): Promise<Page<EntityDefinition>>;
@@ -778,20 +822,20 @@ declare class EntityDefinitionService extends CrudServiceProxy3<EntityDefinition
778
822
  unPublish(entityDefinitionId: string): Promise<void>;
779
823
  syncIndex(): Promise<void>;
780
824
  }
781
- import { IKinotic as IKinotic5 } from "@kinotic-ai/core";
782
- import { CrudServiceProxy as CrudServiceProxy4, ICrudServiceProxy as ICrudServiceProxy4 } from "@kinotic-ai/core";
783
- interface INamedQueriesDefinitionService extends ICrudServiceProxy4<NamedQueriesDefinition> {
825
+ import { IKinotic as IKinotic6 } from "@kinotic-ai/core";
826
+ import { CrudServiceProxy as CrudServiceProxy5, ICrudServiceProxy as ICrudServiceProxy5 } from "@kinotic-ai/core";
827
+ interface INamedQueriesDefinitionService extends ICrudServiceProxy5<NamedQueriesDefinition> {
784
828
  /**
785
829
  * This operation makes all the recent writes immediately available for search.
786
830
  * @return a Promise that resolves when the operation is complete
787
831
  */
788
832
  syncIndex(): Promise<void>;
789
833
  }
790
- declare class NamedQueriesDefinitionService extends CrudServiceProxy4<NamedQueriesDefinition> implements INamedQueriesDefinitionService {
791
- constructor(kinotic: IKinotic5);
834
+ declare class NamedQueriesDefinitionService extends CrudServiceProxy5<NamedQueriesDefinition> implements INamedQueriesDefinitionService {
835
+ constructor(kinotic: IKinotic6);
792
836
  syncIndex(): Promise<void>;
793
837
  }
794
- import { IKinotic as IKinotic6 } from "@kinotic-ai/core";
838
+ import { IKinotic as IKinotic7 } from "@kinotic-ai/core";
795
839
  /**
796
840
  * Service for executing project-specific migrations through the Persistence API.
797
841
  * This service allows external clients to apply their own migrations to projects.
@@ -823,12 +867,12 @@ interface IMigrationService {
823
867
  }
824
868
  declare class MigrationService implements IMigrationService {
825
869
  private readonly serviceProxy;
826
- constructor(kinotic: IKinotic6);
870
+ constructor(kinotic: IKinotic7);
827
871
  executeMigrations(migrationRequest: MigrationRequest): Promise<MigrationResult>;
828
872
  getLastAppliedMigrationVersion(projectId: string): Promise<number | null>;
829
873
  isMigrationApplied(projectId: string, version: string): Promise<boolean>;
830
874
  }
831
- import { IKinotic as IKinotic7 } from "@kinotic-ai/core";
875
+ import { IKinotic as IKinotic8 } from "@kinotic-ai/core";
832
876
  import { Observable } from "rxjs";
833
877
  /**
834
878
  * Provides AI-powered data analysis and visualization code generation capabilities.
@@ -847,12 +891,12 @@ interface IDataInsightsService {
847
891
  }
848
892
  declare class DataInsightsService implements IDataInsightsService {
849
893
  private readonly serviceProxy;
850
- constructor(kinotic: IKinotic7);
894
+ constructor(kinotic: IKinotic8);
851
895
  processRequest(request: InsightRequest): Observable<InsightProgress>;
852
896
  }
853
- import { IKinotic as IKinotic8 } from "@kinotic-ai/core";
854
- import { CrudServiceProxy as CrudServiceProxy5, ICrudServiceProxy as ICrudServiceProxy5 } from "@kinotic-ai/core";
855
- interface IVmNodeService extends ICrudServiceProxy5<VmNode> {
897
+ import { IKinotic as IKinotic9 } from "@kinotic-ai/core";
898
+ import { CrudServiceProxy as CrudServiceProxy6, ICrudServiceProxy as ICrudServiceProxy6 } from "@kinotic-ai/core";
899
+ interface IVmNodeService extends ICrudServiceProxy6<VmNode> {
856
900
  /**
857
901
  * Finds a node with sufficient resources to host a workload with the given requirements.
858
902
  * @param requiredCpus the number of vCPUs required
@@ -867,13 +911,13 @@ interface IVmNodeService extends ICrudServiceProxy5<VmNode> {
867
911
  */
868
912
  syncIndex(): Promise<void>;
869
913
  }
870
- declare class VmNodeServiceProxy extends CrudServiceProxy5<VmNode> implements IVmNodeService {
871
- constructor(kinotic: IKinotic8);
914
+ declare class VmNodeServiceProxy extends CrudServiceProxy6<VmNode> implements IVmNodeService {
915
+ constructor(kinotic: IKinotic9);
872
916
  findAvailableNode(requiredCpus: number, requiredMemoryMb: number, requiredDiskMb: number): Promise<VmNode | null>;
873
917
  syncIndex(): Promise<void>;
874
918
  }
875
- import { CrudServiceProxy as CrudServiceProxy6, IKinotic as IKinotic9, ICrudServiceProxy as ICrudServiceProxy6, IterablePage as IterablePage3, Page as Page2, Pageable as Pageable3 } from "@kinotic-ai/core";
876
- interface IWorkloadService extends ICrudServiceProxy6<Workload> {
919
+ import { CrudServiceProxy as CrudServiceProxy7, IKinotic as IKinotic10, ICrudServiceProxy as ICrudServiceProxy7, IterablePage as IterablePage3, Page as Page2, Pageable as Pageable3 } from "@kinotic-ai/core";
920
+ interface IWorkloadService extends ICrudServiceProxy7<Workload> {
877
921
  /**
878
922
  * Finds all workloads deployed on the given node.
879
923
  * @param nodeId the id of the node to find workloads for
@@ -893,49 +937,77 @@ interface IWorkloadService extends ICrudServiceProxy6<Workload> {
893
937
  */
894
938
  syncIndex(): Promise<void>;
895
939
  }
896
- declare class WorkloadServiceProxy extends CrudServiceProxy6<Workload> implements IWorkloadService {
897
- constructor(kinotic: IKinotic9);
940
+ declare class WorkloadServiceProxy extends CrudServiceProxy7<Workload> implements IWorkloadService {
941
+ constructor(kinotic: IKinotic10);
898
942
  findAllForNode(nodeId: string, pageable: Pageable3): Promise<IterablePage3<Workload>>;
899
943
  findAllForNodeSinglePage(nodeId: string, pageable: Pageable3): Promise<Page2<Workload>>;
900
944
  countForNode(nodeId: string): Promise<number>;
901
945
  syncIndex(): Promise<void>;
902
946
  }
903
- import { CrudServiceProxy as CrudServiceProxy7, IKinotic as IKinotic10, ICrudServiceProxy as ICrudServiceProxy7, Page as Page3, Pageable as Pageable4 } from "@kinotic-ai/core";
904
- interface IIamUserService extends ICrudServiceProxy7<IamUser> {
947
+ import { CrudServiceProxy as CrudServiceProxy8, IKinotic as IKinotic11, ICrudServiceProxy as ICrudServiceProxy8, Page as Page3, Pageable as Pageable4 } from "@kinotic-ai/core";
948
+ interface IIamUserService extends ICrudServiceProxy8<IamUser> {
905
949
  /**
906
950
  * Finds the user with the given email within the given auth scope.
907
- * @return Promise emitting the user or null if no user matches
951
+ * @param email the email address to look up
952
+ * @param authScopeType the scope type the user is registered against (e.g. {@code SYSTEM}, {@code ORGANIZATION}, {@code APPLICATION})
953
+ * @param authScopeId the id of the scope the user is registered against
954
+ * @return {@link Promise} emitting the matching user, or {@code null} if no user matches
908
955
  */
909
956
  findByEmailAndScope(email: string, authScopeType: string, authScopeId: string): Promise<IamUser | null>;
910
957
  /**
911
958
  * Finds all users registered against the given auth scope.
959
+ * @param authScopeType the scope type to filter by (e.g. {@code SYSTEM}, {@code ORGANIZATION}, {@code APPLICATION})
960
+ * @param authScopeId the id of the scope to filter by
961
+ * @param pageable the paging and sort options
962
+ * @return {@link Promise} emitting a page of users registered against the scope
912
963
  */
913
964
  findByScope(authScopeType: string, authScopeId: string, pageable: Pageable4): Promise<Page3<IamUser>>;
914
965
  /**
915
966
  * Creates a user and, if a password is provided, the matching credential.
916
- * APPLICATION-scoped users must carry a {@code tenantId}; SYSTEM and ORGANIZATION users must not.
967
+ * {@code APPLICATION}-scoped users must carry a {@code tenantId}; {@code SYSTEM} and {@code ORGANIZATION} users must not.
968
+ * @param user the user to create
969
+ * @param password the password to set, or {@code null} to create the user without a credential
970
+ * @return {@link Promise} emitting the persisted user
917
971
  */
918
972
  createUser(user: IamUser, password: string | null): Promise<IamUser>;
919
973
  /**
920
974
  * Verifies the current password and updates it. Used when the user knows their current password.
975
+ * @param userId the id of the user whose password should be changed
976
+ * @param currentPassword the user's current password
977
+ * @param newPassword the new password to set
978
+ * @return {@link Promise} that resolves when the password has been updated
921
979
  */
922
980
  changePassword(userId: string, currentPassword: string, newPassword: string): Promise<void>;
923
981
  /**
924
982
  * Replaces the user's password without verifying the current one. Administrative reset.
983
+ * @param userId the id of the user whose password should be reset
984
+ * @param newPassword the new password to set
985
+ * @return {@link Promise} that resolves when the password has been reset
925
986
  */
926
987
  resetPassword(userId: string, newPassword: string): Promise<void>;
988
+ /**
989
+ * Finds the first user with the given email across all scope ids of the given scope type.
990
+ * Used by the sign-up flow to enforce one user per email at organization-creation time,
991
+ * before the new organization's scope id exists.
992
+ * @param email the email address to look up
993
+ * @param authScopeType the scope type to search within (e.g. {@code ORGANIZATION})
994
+ * @return {@link Promise} emitting the first matching user, or {@code null} if no user matches
995
+ */
996
+ findFirstByEmailInScopeType(email: string, authScopeType: string): Promise<IamUser | null>;
927
997
  }
928
- declare class IamUserService extends CrudServiceProxy7<IamUser> implements IIamUserService {
929
- constructor(kinotic: IKinotic10);
998
+ declare class IamUserService extends CrudServiceProxy8<IamUser> implements IIamUserService {
999
+ constructor(kinotic: IKinotic11);
930
1000
  findByEmailAndScope(email: string, authScopeType: string, authScopeId: string): Promise<IamUser | null>;
931
1001
  findByScope(authScopeType: string, authScopeId: string, pageable: Pageable4): Promise<Page3<IamUser>>;
932
1002
  createUser(user: IamUser, password: string | null): Promise<IamUser>;
933
1003
  changePassword(userId: string, currentPassword: string, newPassword: string): Promise<void>;
934
1004
  resetPassword(userId: string, newPassword: string): Promise<void>;
1005
+ findFirstByEmailInScopeType(email: string, authScopeType: string): Promise<IamUser | null>;
935
1006
  }
936
1007
  import { KinoticPlugin } from "@kinotic-ai/core";
937
1008
  interface IOsApiExtension {
938
1009
  applications: IApplicationService;
1010
+ organizations: IOrganizationService;
939
1011
  projects: IProjectService;
940
1012
  logManager: ILogManager;
941
1013
  entityDefinitions: IEntityDefinitionService;
@@ -950,4 +1022,4 @@ declare const OsApiPlugin: KinoticPlugin<IOsApiExtension>;
950
1022
  declare module "@kinotic-ai/core" {
951
1023
  interface KinoticSingleton extends IOsApiExtension {}
952
1024
  }
953
- 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, NotIndexedDecorator, NestedDecorator, NamedQueriesDefinitionService, NamedQueriesDefinition, MigrationService, MigrationResult, MigrationRequest, MigrationDefinition, LoggersDescriptor, LoggerLevelsDescriptor, LogManager, LogLevel, KinoticProjectConfig, InsightRequest, InsightProgress, IdDecorator, IamUserService, IamUser, IWorkloadService, IVmNodeService, IProjectService, IOsApiExtension, INamedQueriesDefinitionService, IMigrationService, ILogManager, IIamUserService, IEntityDefinitionService, IDataInsightsService, IApplicationService, GroupLoggerLevelsDescriptor, FlattenedDecorator, EsIndexConfigurationDecorator, EntityDefinitionService, EntityDefinition, EntityDecorator, EntitiesPathConfig, DiscriminatorDecorator, DataInsightsService, DataInsightsComponent, AutoGeneratedIdDecorator, AuthType, ApplicationService, Application };
1025
+ 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, IEntityDefinitionService, IDataInsightsService, IApplicationService, GroupLoggerLevelsDescriptor, FlattenedDecorator, EsIndexConfigurationDecorator, EntityDefinitionService, EntityDefinition, EntityDecorator, EntitiesPathConfig, DiscriminatorDecorator, DataInsightsService, DataInsightsComponent, AutoGeneratedIdDecorator, AuthType, ApplicationService, Application };
package/dist/index.d.ts CHANGED
@@ -138,21 +138,49 @@ declare class TenantSelectionC3Type extends ArrayC3Type {
138
138
  import { Identifiable } from "@kinotic-ai/core";
139
139
  declare class Application implements Identifiable<string> {
140
140
  id: string;
141
+ /**
142
+ * The id of the organization that owns this application.
143
+ * Must be set by the caller before save — backend org enforcement rejects entities
144
+ * with a missing or mismatched organizationId.
145
+ */
146
+ organizationId: string;
141
147
  description: string;
142
148
  updated: number | null;
143
149
  constructor(id: string, description: string);
144
150
  }
145
151
  import { Identifiable as Identifiable2 } from "@kinotic-ai/core";
152
+ /**
153
+ * Represents an organization developing applications on the Kinotic OS platform.
154
+ * Organizations provide the boundary for teams, applications, users, and shared OIDC configuration.
155
+ *
156
+ * The {@link id} is auto-generated from the {@link name} on save (slugified) and serves as the URL-safe identifier.
157
+ */
158
+ declare class Organization implements Identifiable2<string> {
159
+ id: string | null;
160
+ name: string;
161
+ description: string | null;
162
+ oidcConfigurationIds: string[] | null;
163
+ createdBy: string | null;
164
+ created: number | null;
165
+ updated: number | null;
166
+ }
167
+ import { Identifiable as Identifiable3 } from "@kinotic-ai/core";
146
168
  declare enum ProjectType {
147
169
  TYPESCRIPT = "TYPESCRIPT"
148
170
  }
149
- declare class Project implements Identifiable2<string> {
171
+ declare class Project implements Identifiable3<string> {
150
172
  /**
151
173
  * The id of the project.
152
174
  * All project ids are unique throughout the entire system.
153
175
  */
154
176
  id: string | null;
155
177
  /**
178
+ * The id of the organization that owns this project.
179
+ * Must be set by the caller before save — backend org enforcement rejects entities
180
+ * with a missing or mismatched organizationId.
181
+ */
182
+ organizationId: string;
183
+ /**
156
184
  * The id of the application that this project belongs to.
157
185
  * All application ids are unique throughout the entire system.
158
186
  */
@@ -176,8 +204,8 @@ declare class Project implements Identifiable2<string> {
176
204
  constructor(id: string | null, applicationId: string, name: string, description?: string);
177
205
  }
178
206
  import { ObjectC3Type as ObjectC3Type3 } from "@kinotic-ai/idl";
179
- import { Identifiable as Identifiable3 } from "@kinotic-ai/core";
180
- declare class EntityDefinition implements Identifiable3<string> {
207
+ import { Identifiable as Identifiable4 } from "@kinotic-ai/core";
208
+ declare class EntityDefinition implements Identifiable4<string> {
181
209
  id: string | null;
182
210
  /**
183
211
  * The id of the organization that owns this entity definition.
@@ -203,12 +231,12 @@ declare class EntityDefinition implements Identifiable3<string> {
203
231
  publishedTimestamp: number;
204
232
  constructor(organizationId: string, applicationId: string, projectId: string, name: string, schema: ObjectC3Type3, description?: string | null);
205
233
  }
206
- import { Identifiable as Identifiable4 } from "@kinotic-ai/core";
234
+ import { Identifiable as Identifiable5 } from "@kinotic-ai/core";
207
235
  import { FunctionDefinition } from "@kinotic-ai/idl";
208
236
  /**
209
237
  * Provides Metadata that represents Named Queries for an Application
210
238
  */
211
- declare class NamedQueriesDefinition implements Identifiable4<string> {
239
+ declare class NamedQueriesDefinition implements Identifiable5<string> {
212
240
  id: string;
213
241
  organizationId?: string | null;
214
242
  applicationId: string;
@@ -348,7 +376,7 @@ interface InsightRequest {
348
376
  */
349
377
  additionalContext?: string;
350
378
  }
351
- import { Identifiable as Identifiable5 } from "@kinotic-ai/core";
379
+ import { Identifiable as Identifiable6 } from "@kinotic-ai/core";
352
380
  declare enum WorkloadStatus {
353
381
  PENDING = "PENDING",
354
382
  STARTING = "STARTING",
@@ -366,7 +394,7 @@ declare enum VmProviderType {
366
394
  * Represents a workload to be managed by the VM manager.
367
395
  * A workload defines the configuration for a micro VM instance.
368
396
  */
369
- declare class Workload implements Identifiable5<string> {
397
+ declare class Workload implements Identifiable6<string> {
370
398
  /**
371
399
  * Unique identifier for this workload.
372
400
  */
@@ -421,7 +449,7 @@ declare class Workload implements Identifiable5<string> {
421
449
  updated: number | null;
422
450
  constructor(name: string, image: string);
423
451
  }
424
- import { Identifiable as Identifiable6 } from "@kinotic-ai/core";
452
+ import { Identifiable as Identifiable7 } from "@kinotic-ai/core";
425
453
  declare enum VmNodeStatus {
426
454
  ONLINE = "ONLINE",
427
455
  OFFLINE = "OFFLINE",
@@ -431,7 +459,7 @@ declare enum VmNodeStatus {
431
459
  * Represents a node in the cluster that is running a VmManager process
432
460
  * and is capable of hosting workloads.
433
461
  */
434
- declare class VmNode implements Identifiable6<string> {
462
+ declare class VmNode implements Identifiable7<string> {
435
463
  /**
436
464
  * Unique identifier for this node.
437
465
  */
@@ -485,7 +513,7 @@ declare enum AuthType {
485
513
  LOCAL = "LOCAL",
486
514
  OIDC = "OIDC"
487
515
  }
488
- import { Identifiable as Identifiable7 } from "@kinotic-ai/core";
516
+ import { Identifiable as Identifiable8 } from "@kinotic-ai/core";
489
517
  /**
490
518
  * Represents an authenticated identity at any scope layer in the IAM system.
491
519
  * Each user is scoped to exactly one layer and is unique by email within that scope.
@@ -494,7 +522,7 @@ import { Identifiable as Identifiable7 } from "@kinotic-ai/core";
494
522
  * - For APPLICATION scopes, {@link tenantId} is required and identifies the
495
523
  * client tenant the user belongs to within the application's data.
496
524
  */
497
- declare class IamUser implements Identifiable7<string> {
525
+ declare class IamUser implements Identifiable8<string> {
498
526
  id: string | null;
499
527
  email: string;
500
528
  displayName: string | null;
@@ -619,6 +647,22 @@ declare class ApplicationService extends CrudServiceProxy<Application> implement
619
647
  createApplicationIfNotExist(id: string, description: string): Promise<Application>;
620
648
  syncIndex(): Promise<void>;
621
649
  }
650
+ import { IKinotic as IKinotic2 } from "@kinotic-ai/core";
651
+ import { CrudServiceProxy as CrudServiceProxy2, ICrudServiceProxy as ICrudServiceProxy2 } from "@kinotic-ai/core";
652
+ interface IOrganizationService extends ICrudServiceProxy2<Organization> {
653
+ /**
654
+ * Returns the enabled OIDC configurations registered on the given organization.
655
+ *
656
+ * @param organizationId the id of the organization
657
+ * @return the enabled configurations, or an empty list if the organization is not
658
+ * found or has no configurations attached
659
+ */
660
+ getOidcConfigurations(organizationId: string): Promise<any[]>;
661
+ }
662
+ declare class OrganizationService extends CrudServiceProxy2<Organization> implements IOrganizationService {
663
+ constructor(kinotic: IKinotic2);
664
+ getOidcConfigurations(organizationId: string): Promise<any[]>;
665
+ }
622
666
  declare enum LogLevel {
623
667
  TRACE = "TRACE",
624
668
  DEBUG = "DEBUG",
@@ -668,8 +712,8 @@ interface ILogManager {
668
712
  */
669
713
  configureLogLevel(nodeId: string, name: string, level: LogLevel): Promise<void>;
670
714
  }
671
- import { CrudServiceProxy as CrudServiceProxy2, IKinotic as IKinotic2, ICrudServiceProxy as ICrudServiceProxy2, IterablePage, Pageable } from "@kinotic-ai/core";
672
- interface IProjectService extends ICrudServiceProxy2<Project> {
715
+ import { CrudServiceProxy as CrudServiceProxy3, IKinotic as IKinotic3, ICrudServiceProxy as ICrudServiceProxy3, IterablePage, Pageable } from "@kinotic-ai/core";
716
+ interface IProjectService extends ICrudServiceProxy3<Project> {
673
717
  /**
674
718
  * Counts all projects for the given application.
675
719
  * @param applicationId the application to find projects for
@@ -695,24 +739,24 @@ interface IProjectService extends ICrudServiceProxy2<Project> {
695
739
  */
696
740
  syncIndex(): Promise<void>;
697
741
  }
698
- declare class ProjectService extends CrudServiceProxy2<Project> implements IProjectService {
699
- constructor(kinotic: IKinotic2);
742
+ declare class ProjectService extends CrudServiceProxy3<Project> implements IProjectService {
743
+ constructor(kinotic: IKinotic3);
700
744
  countForApplication(applicationId: string): Promise<number>;
701
745
  createProjectIfNotExist(project: Project): Promise<Project>;
702
746
  findAllForApplication(applicationId: string, pageable: Pageable): Promise<IterablePage<Project>>;
703
747
  findAllForApplicationSinglePage(applicationId: string, pageable: Pageable): Promise<IterablePage<Project>>;
704
748
  syncIndex(): Promise<void>;
705
749
  }
706
- import { IKinotic as IKinotic3 } from "@kinotic-ai/core";
750
+ import { IKinotic as IKinotic4 } from "@kinotic-ai/core";
707
751
  declare class LogManager implements ILogManager {
708
752
  private readonly serviceProxy;
709
- constructor(kinotic: IKinotic3);
753
+ constructor(kinotic: IKinotic4);
710
754
  loggers(nodeId: string): Promise<LoggersDescriptor>;
711
755
  loggerLevels(nodeId: string, name: string): Promise<LoggerLevelsDescriptor>;
712
756
  configureLogLevel(nodeId: string, name: string, level: LogLevel): Promise<void>;
713
757
  }
714
- import { CrudServiceProxy as CrudServiceProxy3, IKinotic as IKinotic4, ICrudServiceProxy as ICrudServiceProxy3, IterablePage as IterablePage2, Page, Pageable as Pageable2 } from "@kinotic-ai/core";
715
- interface IEntityDefinitionService extends ICrudServiceProxy3<EntityDefinition> {
758
+ import { CrudServiceProxy as CrudServiceProxy4, IKinotic as IKinotic5, ICrudServiceProxy as ICrudServiceProxy4, IterablePage as IterablePage2, Page, Pageable as Pageable2 } from "@kinotic-ai/core";
759
+ interface IEntityDefinitionService extends ICrudServiceProxy4<EntityDefinition> {
716
760
  /**
717
761
  * Counts all entity definitions for the given application.
718
762
  * @param applicationId the application to find entity definitions for
@@ -765,8 +809,8 @@ interface IEntityDefinitionService extends ICrudServiceProxy3<EntityDefinition>
765
809
  */
766
810
  unPublish(entityDefinitionId: string): Promise<void>;
767
811
  }
768
- declare class EntityDefinitionService extends CrudServiceProxy3<EntityDefinition> implements IEntityDefinitionService {
769
- constructor(kinotic: IKinotic4);
812
+ declare class EntityDefinitionService extends CrudServiceProxy4<EntityDefinition> implements IEntityDefinitionService {
813
+ constructor(kinotic: IKinotic5);
770
814
  countForApplication(applicationId: string): Promise<number>;
771
815
  countForProject(projectId: string): Promise<number>;
772
816
  findAllForApplicationSinglePage(applicationId: string, pageable: Pageable2): Promise<Page<EntityDefinition>>;
@@ -778,20 +822,20 @@ declare class EntityDefinitionService extends CrudServiceProxy3<EntityDefinition
778
822
  unPublish(entityDefinitionId: string): Promise<void>;
779
823
  syncIndex(): Promise<void>;
780
824
  }
781
- import { IKinotic as IKinotic5 } from "@kinotic-ai/core";
782
- import { CrudServiceProxy as CrudServiceProxy4, ICrudServiceProxy as ICrudServiceProxy4 } from "@kinotic-ai/core";
783
- interface INamedQueriesDefinitionService extends ICrudServiceProxy4<NamedQueriesDefinition> {
825
+ import { IKinotic as IKinotic6 } from "@kinotic-ai/core";
826
+ import { CrudServiceProxy as CrudServiceProxy5, ICrudServiceProxy as ICrudServiceProxy5 } from "@kinotic-ai/core";
827
+ interface INamedQueriesDefinitionService extends ICrudServiceProxy5<NamedQueriesDefinition> {
784
828
  /**
785
829
  * This operation makes all the recent writes immediately available for search.
786
830
  * @return a Promise that resolves when the operation is complete
787
831
  */
788
832
  syncIndex(): Promise<void>;
789
833
  }
790
- declare class NamedQueriesDefinitionService extends CrudServiceProxy4<NamedQueriesDefinition> implements INamedQueriesDefinitionService {
791
- constructor(kinotic: IKinotic5);
834
+ declare class NamedQueriesDefinitionService extends CrudServiceProxy5<NamedQueriesDefinition> implements INamedQueriesDefinitionService {
835
+ constructor(kinotic: IKinotic6);
792
836
  syncIndex(): Promise<void>;
793
837
  }
794
- import { IKinotic as IKinotic6 } from "@kinotic-ai/core";
838
+ import { IKinotic as IKinotic7 } from "@kinotic-ai/core";
795
839
  /**
796
840
  * Service for executing project-specific migrations through the Persistence API.
797
841
  * This service allows external clients to apply their own migrations to projects.
@@ -823,12 +867,12 @@ interface IMigrationService {
823
867
  }
824
868
  declare class MigrationService implements IMigrationService {
825
869
  private readonly serviceProxy;
826
- constructor(kinotic: IKinotic6);
870
+ constructor(kinotic: IKinotic7);
827
871
  executeMigrations(migrationRequest: MigrationRequest): Promise<MigrationResult>;
828
872
  getLastAppliedMigrationVersion(projectId: string): Promise<number | null>;
829
873
  isMigrationApplied(projectId: string, version: string): Promise<boolean>;
830
874
  }
831
- import { IKinotic as IKinotic7 } from "@kinotic-ai/core";
875
+ import { IKinotic as IKinotic8 } from "@kinotic-ai/core";
832
876
  import { Observable } from "rxjs";
833
877
  /**
834
878
  * Provides AI-powered data analysis and visualization code generation capabilities.
@@ -847,12 +891,12 @@ interface IDataInsightsService {
847
891
  }
848
892
  declare class DataInsightsService implements IDataInsightsService {
849
893
  private readonly serviceProxy;
850
- constructor(kinotic: IKinotic7);
894
+ constructor(kinotic: IKinotic8);
851
895
  processRequest(request: InsightRequest): Observable<InsightProgress>;
852
896
  }
853
- import { IKinotic as IKinotic8 } from "@kinotic-ai/core";
854
- import { CrudServiceProxy as CrudServiceProxy5, ICrudServiceProxy as ICrudServiceProxy5 } from "@kinotic-ai/core";
855
- interface IVmNodeService extends ICrudServiceProxy5<VmNode> {
897
+ import { IKinotic as IKinotic9 } from "@kinotic-ai/core";
898
+ import { CrudServiceProxy as CrudServiceProxy6, ICrudServiceProxy as ICrudServiceProxy6 } from "@kinotic-ai/core";
899
+ interface IVmNodeService extends ICrudServiceProxy6<VmNode> {
856
900
  /**
857
901
  * Finds a node with sufficient resources to host a workload with the given requirements.
858
902
  * @param requiredCpus the number of vCPUs required
@@ -867,13 +911,13 @@ interface IVmNodeService extends ICrudServiceProxy5<VmNode> {
867
911
  */
868
912
  syncIndex(): Promise<void>;
869
913
  }
870
- declare class VmNodeServiceProxy extends CrudServiceProxy5<VmNode> implements IVmNodeService {
871
- constructor(kinotic: IKinotic8);
914
+ declare class VmNodeServiceProxy extends CrudServiceProxy6<VmNode> implements IVmNodeService {
915
+ constructor(kinotic: IKinotic9);
872
916
  findAvailableNode(requiredCpus: number, requiredMemoryMb: number, requiredDiskMb: number): Promise<VmNode | null>;
873
917
  syncIndex(): Promise<void>;
874
918
  }
875
- import { CrudServiceProxy as CrudServiceProxy6, IKinotic as IKinotic9, ICrudServiceProxy as ICrudServiceProxy6, IterablePage as IterablePage3, Page as Page2, Pageable as Pageable3 } from "@kinotic-ai/core";
876
- interface IWorkloadService extends ICrudServiceProxy6<Workload> {
919
+ import { CrudServiceProxy as CrudServiceProxy7, IKinotic as IKinotic10, ICrudServiceProxy as ICrudServiceProxy7, IterablePage as IterablePage3, Page as Page2, Pageable as Pageable3 } from "@kinotic-ai/core";
920
+ interface IWorkloadService extends ICrudServiceProxy7<Workload> {
877
921
  /**
878
922
  * Finds all workloads deployed on the given node.
879
923
  * @param nodeId the id of the node to find workloads for
@@ -893,49 +937,77 @@ interface IWorkloadService extends ICrudServiceProxy6<Workload> {
893
937
  */
894
938
  syncIndex(): Promise<void>;
895
939
  }
896
- declare class WorkloadServiceProxy extends CrudServiceProxy6<Workload> implements IWorkloadService {
897
- constructor(kinotic: IKinotic9);
940
+ declare class WorkloadServiceProxy extends CrudServiceProxy7<Workload> implements IWorkloadService {
941
+ constructor(kinotic: IKinotic10);
898
942
  findAllForNode(nodeId: string, pageable: Pageable3): Promise<IterablePage3<Workload>>;
899
943
  findAllForNodeSinglePage(nodeId: string, pageable: Pageable3): Promise<Page2<Workload>>;
900
944
  countForNode(nodeId: string): Promise<number>;
901
945
  syncIndex(): Promise<void>;
902
946
  }
903
- import { CrudServiceProxy as CrudServiceProxy7, IKinotic as IKinotic10, ICrudServiceProxy as ICrudServiceProxy7, Page as Page3, Pageable as Pageable4 } from "@kinotic-ai/core";
904
- interface IIamUserService extends ICrudServiceProxy7<IamUser> {
947
+ import { CrudServiceProxy as CrudServiceProxy8, IKinotic as IKinotic11, ICrudServiceProxy as ICrudServiceProxy8, Page as Page3, Pageable as Pageable4 } from "@kinotic-ai/core";
948
+ interface IIamUserService extends ICrudServiceProxy8<IamUser> {
905
949
  /**
906
950
  * Finds the user with the given email within the given auth scope.
907
- * @return Promise emitting the user or null if no user matches
951
+ * @param email the email address to look up
952
+ * @param authScopeType the scope type the user is registered against (e.g. {@code SYSTEM}, {@code ORGANIZATION}, {@code APPLICATION})
953
+ * @param authScopeId the id of the scope the user is registered against
954
+ * @return {@link Promise} emitting the matching user, or {@code null} if no user matches
908
955
  */
909
956
  findByEmailAndScope(email: string, authScopeType: string, authScopeId: string): Promise<IamUser | null>;
910
957
  /**
911
958
  * Finds all users registered against the given auth scope.
959
+ * @param authScopeType the scope type to filter by (e.g. {@code SYSTEM}, {@code ORGANIZATION}, {@code APPLICATION})
960
+ * @param authScopeId the id of the scope to filter by
961
+ * @param pageable the paging and sort options
962
+ * @return {@link Promise} emitting a page of users registered against the scope
912
963
  */
913
964
  findByScope(authScopeType: string, authScopeId: string, pageable: Pageable4): Promise<Page3<IamUser>>;
914
965
  /**
915
966
  * Creates a user and, if a password is provided, the matching credential.
916
- * APPLICATION-scoped users must carry a {@code tenantId}; SYSTEM and ORGANIZATION users must not.
967
+ * {@code APPLICATION}-scoped users must carry a {@code tenantId}; {@code SYSTEM} and {@code ORGANIZATION} users must not.
968
+ * @param user the user to create
969
+ * @param password the password to set, or {@code null} to create the user without a credential
970
+ * @return {@link Promise} emitting the persisted user
917
971
  */
918
972
  createUser(user: IamUser, password: string | null): Promise<IamUser>;
919
973
  /**
920
974
  * Verifies the current password and updates it. Used when the user knows their current password.
975
+ * @param userId the id of the user whose password should be changed
976
+ * @param currentPassword the user's current password
977
+ * @param newPassword the new password to set
978
+ * @return {@link Promise} that resolves when the password has been updated
921
979
  */
922
980
  changePassword(userId: string, currentPassword: string, newPassword: string): Promise<void>;
923
981
  /**
924
982
  * Replaces the user's password without verifying the current one. Administrative reset.
983
+ * @param userId the id of the user whose password should be reset
984
+ * @param newPassword the new password to set
985
+ * @return {@link Promise} that resolves when the password has been reset
925
986
  */
926
987
  resetPassword(userId: string, newPassword: string): Promise<void>;
988
+ /**
989
+ * Finds the first user with the given email across all scope ids of the given scope type.
990
+ * Used by the sign-up flow to enforce one user per email at organization-creation time,
991
+ * before the new organization's scope id exists.
992
+ * @param email the email address to look up
993
+ * @param authScopeType the scope type to search within (e.g. {@code ORGANIZATION})
994
+ * @return {@link Promise} emitting the first matching user, or {@code null} if no user matches
995
+ */
996
+ findFirstByEmailInScopeType(email: string, authScopeType: string): Promise<IamUser | null>;
927
997
  }
928
- declare class IamUserService extends CrudServiceProxy7<IamUser> implements IIamUserService {
929
- constructor(kinotic: IKinotic10);
998
+ declare class IamUserService extends CrudServiceProxy8<IamUser> implements IIamUserService {
999
+ constructor(kinotic: IKinotic11);
930
1000
  findByEmailAndScope(email: string, authScopeType: string, authScopeId: string): Promise<IamUser | null>;
931
1001
  findByScope(authScopeType: string, authScopeId: string, pageable: Pageable4): Promise<Page3<IamUser>>;
932
1002
  createUser(user: IamUser, password: string | null): Promise<IamUser>;
933
1003
  changePassword(userId: string, currentPassword: string, newPassword: string): Promise<void>;
934
1004
  resetPassword(userId: string, newPassword: string): Promise<void>;
1005
+ findFirstByEmailInScopeType(email: string, authScopeType: string): Promise<IamUser | null>;
935
1006
  }
936
1007
  import { KinoticPlugin } from "@kinotic-ai/core";
937
1008
  interface IOsApiExtension {
938
1009
  applications: IApplicationService;
1010
+ organizations: IOrganizationService;
939
1011
  projects: IProjectService;
940
1012
  logManager: ILogManager;
941
1013
  entityDefinitions: IEntityDefinitionService;
@@ -950,4 +1022,4 @@ declare const OsApiPlugin: KinoticPlugin<IOsApiExtension>;
950
1022
  declare module "@kinotic-ai/core" {
951
1023
  interface KinoticSingleton extends IOsApiExtension {}
952
1024
  }
953
- 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, NotIndexedDecorator, NestedDecorator, NamedQueriesDefinitionService, NamedQueriesDefinition, MigrationService, MigrationResult, MigrationRequest, MigrationDefinition, LoggersDescriptor, LoggerLevelsDescriptor, LogManager, LogLevel, KinoticProjectConfig, InsightRequest, InsightProgress, IdDecorator, IamUserService, IamUser, IWorkloadService, IVmNodeService, IProjectService, IOsApiExtension, INamedQueriesDefinitionService, IMigrationService, ILogManager, IIamUserService, IEntityDefinitionService, IDataInsightsService, IApplicationService, GroupLoggerLevelsDescriptor, FlattenedDecorator, EsIndexConfigurationDecorator, EntityDefinitionService, EntityDefinition, EntityDecorator, EntitiesPathConfig, DiscriminatorDecorator, DataInsightsService, DataInsightsComponent, AutoGeneratedIdDecorator, AuthType, ApplicationService, Application };
1025
+ 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, IEntityDefinitionService, IDataInsightsService, IApplicationService, GroupLoggerLevelsDescriptor, FlattenedDecorator, EsIndexConfigurationDecorator, EntityDefinitionService, EntityDefinition, EntityDecorator, EntitiesPathConfig, DiscriminatorDecorator, DataInsightsService, DataInsightsComponent, AutoGeneratedIdDecorator, AuthType, ApplicationService, Application };
package/dist/index.js CHANGED
@@ -176,6 +176,7 @@ class TenantSelectionC3Type extends ArrayC3Type {
176
176
  // packages/os-api/src/api/model/Application.ts
177
177
  class Application {
178
178
  id;
179
+ organizationId;
179
180
  description;
180
181
  updated = null;
181
182
  constructor(id, description) {
@@ -183,9 +184,20 @@ class Application {
183
184
  this.description = description;
184
185
  }
185
186
  }
187
+ // packages/os-api/src/api/model/Organization.ts
188
+ class Organization {
189
+ id = null;
190
+ name = "";
191
+ description = null;
192
+ oidcConfigurationIds = null;
193
+ createdBy = null;
194
+ created = null;
195
+ updated = null;
196
+ }
186
197
  // packages/os-api/src/api/model/Project.ts
187
198
  class Project {
188
199
  id = null;
200
+ organizationId;
189
201
  applicationId;
190
202
  name;
191
203
  description;
@@ -364,6 +376,17 @@ class ApplicationService extends CrudServiceProxy {
364
376
  return this.serviceProxy.invoke("syncIndex", []);
365
377
  }
366
378
  }
379
+ // packages/os-api/src/api/services/IOrganizationService.ts
380
+ import { CrudServiceProxy as CrudServiceProxy2 } from "@kinotic-ai/core";
381
+
382
+ class OrganizationService extends CrudServiceProxy2 {
383
+ constructor(kinotic) {
384
+ super(kinotic.serviceProxy("org.kinotic.os.api.services.OrganizationService"));
385
+ }
386
+ getOidcConfigurations(organizationId) {
387
+ return this.serviceProxy.invoke("getOidcConfigurations", [organizationId]);
388
+ }
389
+ }
367
390
  // packages/os-api/src/api/services/ILogManager.ts
368
391
  var LogLevel;
369
392
  ((LogLevel2) => {
@@ -394,9 +417,9 @@ class LoggersDescriptor {
394
417
  groups = new Map;
395
418
  }
396
419
  // packages/os-api/src/api/services/IProjectService.ts
397
- import { CrudServiceProxy as CrudServiceProxy2, FunctionalIterablePage } from "@kinotic-ai/core";
420
+ import { CrudServiceProxy as CrudServiceProxy3, FunctionalIterablePage } from "@kinotic-ai/core";
398
421
 
399
- class ProjectService extends CrudServiceProxy2 {
422
+ class ProjectService extends CrudServiceProxy3 {
400
423
  constructor(kinotic) {
401
424
  super(kinotic.serviceProxy("org.kinotic.os.api.services.ProjectService"));
402
425
  }
@@ -444,9 +467,9 @@ class LogManager {
444
467
  }
445
468
  }
446
469
  // packages/os-api/src/api/services/IEntityDefinitionService.ts
447
- import { CrudServiceProxy as CrudServiceProxy3, FunctionalIterablePage as FunctionalIterablePage2 } from "@kinotic-ai/core";
470
+ import { CrudServiceProxy as CrudServiceProxy4, FunctionalIterablePage as FunctionalIterablePage2 } from "@kinotic-ai/core";
448
471
 
449
- class EntityDefinitionService extends CrudServiceProxy3 {
472
+ class EntityDefinitionService extends CrudServiceProxy4 {
450
473
  constructor(kinotic) {
451
474
  super(kinotic.serviceProxy("org.kinotic.persistence.api.services.EntityDefinitionService"));
452
475
  }
@@ -484,9 +507,9 @@ class EntityDefinitionService extends CrudServiceProxy3 {
484
507
  }
485
508
  }
486
509
  // packages/os-api/src/api/services/INamedQueriesDefinitionService.ts
487
- import { CrudServiceProxy as CrudServiceProxy4 } from "@kinotic-ai/core";
510
+ import { CrudServiceProxy as CrudServiceProxy5 } from "@kinotic-ai/core";
488
511
 
489
- class NamedQueriesDefinitionService extends CrudServiceProxy4 {
512
+ class NamedQueriesDefinitionService extends CrudServiceProxy5 {
490
513
  constructor(kinotic) {
491
514
  super(kinotic.serviceProxy("org.kinotic.persistence.api.services.NamedQueriesDefinitionService"));
492
515
  }
@@ -521,9 +544,9 @@ class DataInsightsService {
521
544
  }
522
545
  }
523
546
  // packages/os-api/src/api/services/IVmNodeService.ts
524
- import { CrudServiceProxy as CrudServiceProxy5 } from "@kinotic-ai/core";
547
+ import { CrudServiceProxy as CrudServiceProxy6 } from "@kinotic-ai/core";
525
548
 
526
- class VmNodeServiceProxy extends CrudServiceProxy5 {
549
+ class VmNodeServiceProxy extends CrudServiceProxy6 {
527
550
  constructor(kinotic) {
528
551
  super(kinotic.serviceProxy("org.kinotic.os.api.services.VmNodeService"));
529
552
  }
@@ -535,9 +558,9 @@ class VmNodeServiceProxy extends CrudServiceProxy5 {
535
558
  }
536
559
  }
537
560
  // packages/os-api/src/api/services/IWorkloadService.ts
538
- import { CrudServiceProxy as CrudServiceProxy6, FunctionalIterablePage as FunctionalIterablePage3 } from "@kinotic-ai/core";
561
+ import { CrudServiceProxy as CrudServiceProxy7, FunctionalIterablePage as FunctionalIterablePage3 } from "@kinotic-ai/core";
539
562
 
540
- class WorkloadServiceProxy extends CrudServiceProxy6 {
563
+ class WorkloadServiceProxy extends CrudServiceProxy7 {
541
564
  constructor(kinotic) {
542
565
  super(kinotic.serviceProxy("org.kinotic.os.api.services.WorkloadService"));
543
566
  }
@@ -556,9 +579,9 @@ class WorkloadServiceProxy extends CrudServiceProxy6 {
556
579
  }
557
580
  }
558
581
  // packages/os-api/src/api/services/iam/IIamUserService.ts
559
- import { CrudServiceProxy as CrudServiceProxy7 } from "@kinotic-ai/core";
582
+ import { CrudServiceProxy as CrudServiceProxy8 } from "@kinotic-ai/core";
560
583
 
561
- class IamUserService extends CrudServiceProxy7 {
584
+ class IamUserService extends CrudServiceProxy8 {
562
585
  constructor(kinotic) {
563
586
  super(kinotic.serviceProxy("org.kinotic.os.api.services.iam.IamUserService"));
564
587
  }
@@ -577,12 +600,16 @@ class IamUserService extends CrudServiceProxy7 {
577
600
  resetPassword(userId, newPassword) {
578
601
  return this.serviceProxy.invoke("resetPassword", [userId, newPassword]);
579
602
  }
603
+ findFirstByEmailInScopeType(email, authScopeType) {
604
+ return this.serviceProxy.invoke("findFirstByEmailInScopeType", [email, authScopeType]);
605
+ }
580
606
  }
581
607
  // packages/os-api/src/api/OsApiPlugin.ts
582
608
  var OsApiPlugin = {
583
609
  install(kinotic) {
584
610
  return {
585
611
  applications: new ApplicationService(kinotic),
612
+ organizations: new OrganizationService(kinotic),
586
613
  projects: new ProjectService(kinotic),
587
614
  logManager: new LogManager(kinotic),
588
615
  entityDefinitions: new EntityDefinitionService(kinotic),
@@ -618,6 +645,8 @@ export {
618
645
  PageableC3Type,
619
646
  PageC3Type,
620
647
  OsApiPlugin,
648
+ OrganizationService,
649
+ Organization,
621
650
  NotIndexedDecorator,
622
651
  NestedDecorator,
623
652
  NamedQueriesDefinitionService,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kinotic-ai/os-api",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "@kinotic-ai/idl": "1.0.9",
40
- "@kinotic-ai/persistence": "1.2.0",
40
+ "@kinotic-ai/persistence": "1.2.1",
41
41
  "rxjs": "^7.8.2"
42
42
  },
43
43
  "devDependencies": {