@kinotic-ai/os-api 1.0.16 → 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;
@@ -308,7 +322,8 @@ class EntityDefinition {
308
322
  updated;
309
323
  published;
310
324
  publishedTimestamp;
311
- constructor(applicationId, projectId, name, schema, description) {
325
+ constructor(organizationId, applicationId, projectId, name, schema, description) {
326
+ this.organizationId = organizationId;
312
327
  this.applicationId = applicationId;
313
328
  this.projectId = projectId;
314
329
  this.name = name;
@@ -455,6 +470,17 @@ class ApplicationService extends import_core.CrudServiceProxy {
455
470
  return this.serviceProxy.invoke("syncIndex", []);
456
471
  }
457
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
+ }
458
484
  // packages/os-api/src/api/services/ILogManager.ts
459
485
  var LogLevel;
460
486
  ((LogLevel2) => {
@@ -485,9 +511,9 @@ class LoggersDescriptor {
485
511
  groups = new Map;
486
512
  }
487
513
  // packages/os-api/src/api/services/IProjectService.ts
488
- var import_core2 = require("@kinotic-ai/core");
514
+ var import_core3 = require("@kinotic-ai/core");
489
515
 
490
- class ProjectService extends import_core2.CrudServiceProxy {
516
+ class ProjectService extends import_core3.CrudServiceProxy {
491
517
  constructor(kinotic) {
492
518
  super(kinotic.serviceProxy("org.kinotic.os.api.services.ProjectService"));
493
519
  }
@@ -499,7 +525,7 @@ class ProjectService extends import_core2.CrudServiceProxy {
499
525
  }
500
526
  async findAllForApplication(applicationId, pageable) {
501
527
  const page = await this.findAllForApplicationSinglePage(applicationId, pageable);
502
- 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));
503
529
  }
504
530
  findAllForApplicationSinglePage(applicationId, pageable) {
505
531
  return this.serviceProxy.invoke("findAllForApplication", [applicationId, pageable]);
@@ -535,9 +561,9 @@ class LogManager {
535
561
  }
536
562
  }
537
563
  // packages/os-api/src/api/services/IEntityDefinitionService.ts
538
- var import_core3 = require("@kinotic-ai/core");
564
+ var import_core4 = require("@kinotic-ai/core");
539
565
 
540
- class EntityDefinitionService extends import_core3.CrudServiceProxy {
566
+ class EntityDefinitionService extends import_core4.CrudServiceProxy {
541
567
  constructor(kinotic) {
542
568
  super(kinotic.serviceProxy("org.kinotic.persistence.api.services.EntityDefinitionService"));
543
569
  }
@@ -552,14 +578,14 @@ class EntityDefinitionService extends import_core3.CrudServiceProxy {
552
578
  }
553
579
  async findAllForApplication(applicationId, pageable) {
554
580
  const page = await this.findAllForApplicationSinglePage(applicationId, pageable);
555
- 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));
556
582
  }
557
583
  findAllPublishedForApplication(applicationId, pageable) {
558
584
  return this.serviceProxy.invoke("findAllPublishedForApplication", [applicationId, pageable]);
559
585
  }
560
586
  async findAllForProject(projectId, pageable) {
561
587
  const page = await this.findAllForProjectSinglePage(projectId, pageable);
562
- 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));
563
589
  }
564
590
  findAllForProjectSinglePage(projectId, pageable) {
565
591
  return this.serviceProxy.invoke("findAllForProject", [projectId, pageable]);
@@ -575,9 +601,9 @@ class EntityDefinitionService extends import_core3.CrudServiceProxy {
575
601
  }
576
602
  }
577
603
  // packages/os-api/src/api/services/INamedQueriesDefinitionService.ts
578
- var import_core4 = require("@kinotic-ai/core");
604
+ var import_core5 = require("@kinotic-ai/core");
579
605
 
580
- class NamedQueriesDefinitionService extends import_core4.CrudServiceProxy {
606
+ class NamedQueriesDefinitionService extends import_core5.CrudServiceProxy {
581
607
  constructor(kinotic) {
582
608
  super(kinotic.serviceProxy("org.kinotic.persistence.api.services.NamedQueriesDefinitionService"));
583
609
  }
@@ -612,9 +638,9 @@ class DataInsightsService {
612
638
  }
613
639
  }
614
640
  // packages/os-api/src/api/services/IVmNodeService.ts
615
- var import_core5 = require("@kinotic-ai/core");
641
+ var import_core6 = require("@kinotic-ai/core");
616
642
 
617
- class VmNodeServiceProxy extends import_core5.CrudServiceProxy {
643
+ class VmNodeServiceProxy extends import_core6.CrudServiceProxy {
618
644
  constructor(kinotic) {
619
645
  super(kinotic.serviceProxy("org.kinotic.os.api.services.VmNodeService"));
620
646
  }
@@ -626,15 +652,15 @@ class VmNodeServiceProxy extends import_core5.CrudServiceProxy {
626
652
  }
627
653
  }
628
654
  // packages/os-api/src/api/services/IWorkloadService.ts
629
- var import_core6 = require("@kinotic-ai/core");
655
+ var import_core7 = require("@kinotic-ai/core");
630
656
 
631
- class WorkloadServiceProxy extends import_core6.CrudServiceProxy {
657
+ class WorkloadServiceProxy extends import_core7.CrudServiceProxy {
632
658
  constructor(kinotic) {
633
659
  super(kinotic.serviceProxy("org.kinotic.os.api.services.WorkloadService"));
634
660
  }
635
661
  async findAllForNode(nodeId, pageable) {
636
662
  const page = await this.findAllForNodeSinglePage(nodeId, pageable);
637
- 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));
638
664
  }
639
665
  findAllForNodeSinglePage(nodeId, pageable) {
640
666
  return this.serviceProxy.invoke("findAllForNode", [nodeId, pageable]);
@@ -647,9 +673,9 @@ class WorkloadServiceProxy extends import_core6.CrudServiceProxy {
647
673
  }
648
674
  }
649
675
  // packages/os-api/src/api/services/iam/IIamUserService.ts
650
- var import_core7 = require("@kinotic-ai/core");
676
+ var import_core8 = require("@kinotic-ai/core");
651
677
 
652
- class IamUserService extends import_core7.CrudServiceProxy {
678
+ class IamUserService extends import_core8.CrudServiceProxy {
653
679
  constructor(kinotic) {
654
680
  super(kinotic.serviceProxy("org.kinotic.os.api.services.iam.IamUserService"));
655
681
  }
@@ -668,12 +694,16 @@ class IamUserService extends import_core7.CrudServiceProxy {
668
694
  resetPassword(userId, newPassword) {
669
695
  return this.serviceProxy.invoke("resetPassword", [userId, newPassword]);
670
696
  }
697
+ findFirstByEmailInScopeType(email, authScopeType) {
698
+ return this.serviceProxy.invoke("findFirstByEmailInScopeType", [email, authScopeType]);
699
+ }
671
700
  }
672
701
  // packages/os-api/src/api/OsApiPlugin.ts
673
702
  var OsApiPlugin = {
674
703
  install(kinotic) {
675
704
  return {
676
705
  applications: new ApplicationService(kinotic),
706
+ organizations: new OrganizationService(kinotic),
677
707
  projects: new ProjectService(kinotic),
678
708
  logManager: new LogManager(kinotic),
679
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.
@@ -201,14 +229,14 @@ declare class EntityDefinition implements Identifiable3<string> {
201
229
  updated: number;
202
230
  published: boolean;
203
231
  publishedTimestamp: number;
204
- constructor(applicationId: string, projectId: string, name: string, schema: ObjectC3Type3, description?: string | null);
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.
@@ -201,14 +229,14 @@ declare class EntityDefinition implements Identifiable3<string> {
201
229
  updated: number;
202
230
  published: boolean;
203
231
  publishedTimestamp: number;
204
- constructor(applicationId: string, projectId: string, name: string, schema: ObjectC3Type3, description?: string | null);
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;
@@ -216,7 +228,8 @@ class EntityDefinition {
216
228
  updated;
217
229
  published;
218
230
  publishedTimestamp;
219
- constructor(applicationId, projectId, name, schema, description) {
231
+ constructor(organizationId, applicationId, projectId, name, schema, description) {
232
+ this.organizationId = organizationId;
220
233
  this.applicationId = applicationId;
221
234
  this.projectId = projectId;
222
235
  this.name = name;
@@ -363,6 +376,17 @@ class ApplicationService extends CrudServiceProxy {
363
376
  return this.serviceProxy.invoke("syncIndex", []);
364
377
  }
365
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
+ }
366
390
  // packages/os-api/src/api/services/ILogManager.ts
367
391
  var LogLevel;
368
392
  ((LogLevel2) => {
@@ -393,9 +417,9 @@ class LoggersDescriptor {
393
417
  groups = new Map;
394
418
  }
395
419
  // packages/os-api/src/api/services/IProjectService.ts
396
- import { CrudServiceProxy as CrudServiceProxy2, FunctionalIterablePage } from "@kinotic-ai/core";
420
+ import { CrudServiceProxy as CrudServiceProxy3, FunctionalIterablePage } from "@kinotic-ai/core";
397
421
 
398
- class ProjectService extends CrudServiceProxy2 {
422
+ class ProjectService extends CrudServiceProxy3 {
399
423
  constructor(kinotic) {
400
424
  super(kinotic.serviceProxy("org.kinotic.os.api.services.ProjectService"));
401
425
  }
@@ -443,9 +467,9 @@ class LogManager {
443
467
  }
444
468
  }
445
469
  // packages/os-api/src/api/services/IEntityDefinitionService.ts
446
- import { CrudServiceProxy as CrudServiceProxy3, FunctionalIterablePage as FunctionalIterablePage2 } from "@kinotic-ai/core";
470
+ import { CrudServiceProxy as CrudServiceProxy4, FunctionalIterablePage as FunctionalIterablePage2 } from "@kinotic-ai/core";
447
471
 
448
- class EntityDefinitionService extends CrudServiceProxy3 {
472
+ class EntityDefinitionService extends CrudServiceProxy4 {
449
473
  constructor(kinotic) {
450
474
  super(kinotic.serviceProxy("org.kinotic.persistence.api.services.EntityDefinitionService"));
451
475
  }
@@ -483,9 +507,9 @@ class EntityDefinitionService extends CrudServiceProxy3 {
483
507
  }
484
508
  }
485
509
  // packages/os-api/src/api/services/INamedQueriesDefinitionService.ts
486
- import { CrudServiceProxy as CrudServiceProxy4 } from "@kinotic-ai/core";
510
+ import { CrudServiceProxy as CrudServiceProxy5 } from "@kinotic-ai/core";
487
511
 
488
- class NamedQueriesDefinitionService extends CrudServiceProxy4 {
512
+ class NamedQueriesDefinitionService extends CrudServiceProxy5 {
489
513
  constructor(kinotic) {
490
514
  super(kinotic.serviceProxy("org.kinotic.persistence.api.services.NamedQueriesDefinitionService"));
491
515
  }
@@ -520,9 +544,9 @@ class DataInsightsService {
520
544
  }
521
545
  }
522
546
  // packages/os-api/src/api/services/IVmNodeService.ts
523
- import { CrudServiceProxy as CrudServiceProxy5 } from "@kinotic-ai/core";
547
+ import { CrudServiceProxy as CrudServiceProxy6 } from "@kinotic-ai/core";
524
548
 
525
- class VmNodeServiceProxy extends CrudServiceProxy5 {
549
+ class VmNodeServiceProxy extends CrudServiceProxy6 {
526
550
  constructor(kinotic) {
527
551
  super(kinotic.serviceProxy("org.kinotic.os.api.services.VmNodeService"));
528
552
  }
@@ -534,9 +558,9 @@ class VmNodeServiceProxy extends CrudServiceProxy5 {
534
558
  }
535
559
  }
536
560
  // packages/os-api/src/api/services/IWorkloadService.ts
537
- import { CrudServiceProxy as CrudServiceProxy6, FunctionalIterablePage as FunctionalIterablePage3 } from "@kinotic-ai/core";
561
+ import { CrudServiceProxy as CrudServiceProxy7, FunctionalIterablePage as FunctionalIterablePage3 } from "@kinotic-ai/core";
538
562
 
539
- class WorkloadServiceProxy extends CrudServiceProxy6 {
563
+ class WorkloadServiceProxy extends CrudServiceProxy7 {
540
564
  constructor(kinotic) {
541
565
  super(kinotic.serviceProxy("org.kinotic.os.api.services.WorkloadService"));
542
566
  }
@@ -555,9 +579,9 @@ class WorkloadServiceProxy extends CrudServiceProxy6 {
555
579
  }
556
580
  }
557
581
  // packages/os-api/src/api/services/iam/IIamUserService.ts
558
- import { CrudServiceProxy as CrudServiceProxy7 } from "@kinotic-ai/core";
582
+ import { CrudServiceProxy as CrudServiceProxy8 } from "@kinotic-ai/core";
559
583
 
560
- class IamUserService extends CrudServiceProxy7 {
584
+ class IamUserService extends CrudServiceProxy8 {
561
585
  constructor(kinotic) {
562
586
  super(kinotic.serviceProxy("org.kinotic.os.api.services.iam.IamUserService"));
563
587
  }
@@ -576,12 +600,16 @@ class IamUserService extends CrudServiceProxy7 {
576
600
  resetPassword(userId, newPassword) {
577
601
  return this.serviceProxy.invoke("resetPassword", [userId, newPassword]);
578
602
  }
603
+ findFirstByEmailInScopeType(email, authScopeType) {
604
+ return this.serviceProxy.invoke("findFirstByEmailInScopeType", [email, authScopeType]);
605
+ }
579
606
  }
580
607
  // packages/os-api/src/api/OsApiPlugin.ts
581
608
  var OsApiPlugin = {
582
609
  install(kinotic) {
583
610
  return {
584
611
  applications: new ApplicationService(kinotic),
612
+ organizations: new OrganizationService(kinotic),
585
613
  projects: new ProjectService(kinotic),
586
614
  logManager: new LogManager(kinotic),
587
615
  entityDefinitions: new EntityDefinitionService(kinotic),
@@ -617,6 +645,8 @@ export {
617
645
  PageableC3Type,
618
646
  PageC3Type,
619
647
  OsApiPlugin,
648
+ OrganizationService,
649
+ Organization,
620
650
  NotIndexedDecorator,
621
651
  NestedDecorator,
622
652
  NamedQueriesDefinitionService,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kinotic-ai/os-api",
3
- "version": "1.0.16",
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.1.1",
40
+ "@kinotic-ai/persistence": "1.2.1",
41
41
  "rxjs": "^7.8.2"
42
42
  },
43
43
  "devDependencies": {