@kinotic-ai/os-api 1.9.0 → 1.11.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
@@ -56,6 +56,7 @@ __export(exports_src, {
56
56
  TenantSelectionC3Type: () => TenantSelectionC3Type,
57
57
  TenantIdDecorator: () => TenantIdDecorator,
58
58
  SingleLoggerLevelsDescriptor: () => SingleLoggerLevelsDescriptor,
59
+ RepositoryConnectionStatus: () => RepositoryConnectionStatus,
59
60
  QueryOptionsC3Type: () => QueryOptionsC3Type,
60
61
  QueryDecorator: () => QueryDecorator,
61
62
  ProjectType: () => ProjectType,
@@ -80,6 +81,8 @@ __export(exports_src, {
80
81
  LogManager: () => LogManager,
81
82
  LogLevel: () => LogLevel,
82
83
  KinoticProjectConfig: () => KinoticProjectConfig,
84
+ InviteEmailTemplateService: () => InviteEmailTemplateService,
85
+ InviteEmailTemplate: () => InviteEmailTemplate,
83
86
  IdDecorator: () => IdDecorator,
84
87
  IamUser: () => IamUser,
85
88
  GroupLoggerLevelsDescriptor: () => GroupLoggerLevelsDescriptor,
@@ -310,8 +313,9 @@ class Project {
310
313
  sourceOfTruth = null;
311
314
  repoFullName;
312
315
  repoId;
313
- defaultBranch;
316
+ repoDefaultBranch;
314
317
  repoPrivate = true;
318
+ repoConnectionStatus = null;
315
319
  updated = null;
316
320
  constructor(id, applicationId, name, description) {
317
321
  this.id = id;
@@ -325,6 +329,13 @@ var ProjectType;
325
329
  ((ProjectType2) => {
326
330
  ProjectType2["TYPESCRIPT"] = "TYPESCRIPT";
327
331
  })(ProjectType ||= {});
332
+ // packages/os-api/src/api/model/RepositoryConnectionStatus.ts
333
+ var RepositoryConnectionStatus;
334
+ ((RepositoryConnectionStatus2) => {
335
+ RepositoryConnectionStatus2["CONNECTED"] = "CONNECTED";
336
+ RepositoryConnectionStatus2["INITIALIZATION_FAILED"] = "INITIALIZATION_FAILED";
337
+ RepositoryConnectionStatus2["DISCONNECTED"] = "DISCONNECTED";
338
+ })(RepositoryConnectionStatus ||= {});
328
339
  // packages/os-api/src/api/model/EntityDefinition.ts
329
340
  class EntityDefinition {
330
341
  id;
@@ -472,6 +483,17 @@ class PendingInviteSummary {
472
483
  created = null;
473
484
  expiresAt = null;
474
485
  }
486
+ // packages/os-api/src/api/model/InviteEmailTemplate.ts
487
+ class InviteEmailTemplate {
488
+ id = null;
489
+ organizationId = null;
490
+ applicationId = "";
491
+ subject = "";
492
+ htmlBody = "";
493
+ textBody = "";
494
+ created = null;
495
+ updated = null;
496
+ }
475
497
  // packages/os-api/src/api/model/github/GitHubAppInstallation.ts
476
498
  class GitHubAppInstallation {
477
499
  id = null;
@@ -603,6 +625,9 @@ class ProjectService extends import_core3.CrudServiceProxy {
603
625
  findAllForApplicationSinglePage(applicationId, pageable) {
604
626
  return this.serviceProxy.invoke("findAllForApplication", [applicationId, pageable]);
605
627
  }
628
+ retryRepoInitialization(projectId) {
629
+ return this.serviceProxy.invoke("retryRepoInitialization", [projectId]);
630
+ }
606
631
  syncIndex() {
607
632
  return this.serviceProxy.invoke("syncIndex", []);
608
633
  }
@@ -784,6 +809,17 @@ class MemberService {
784
809
  };
785
810
  }
786
811
  }
812
+ // packages/os-api/src/api/services/IInviteEmailTemplateService.ts
813
+ var import_core9 = require("@kinotic-ai/core");
814
+
815
+ class InviteEmailTemplateService extends import_core9.CrudServiceProxy {
816
+ constructor(kinotic) {
817
+ super(kinotic.serviceProxy("org.kinotic.os.api.services.InviteEmailTemplateService"));
818
+ }
819
+ findByApplication(applicationId) {
820
+ return this.serviceProxy.invoke("findByApplication", [applicationId]);
821
+ }
822
+ }
787
823
  // packages/os-api/src/api/services/IDeviceApprovalService.ts
788
824
  class DeviceApprovalService {
789
825
  serviceProxy;
@@ -795,9 +831,9 @@ class DeviceApprovalService {
795
831
  }
796
832
  }
797
833
  // packages/os-api/src/api/services/IGitHubAppInstallationService.ts
798
- var import_core9 = require("@kinotic-ai/core");
834
+ var import_core10 = require("@kinotic-ai/core");
799
835
 
800
- class GitHubAppInstallationService extends import_core9.CrudServiceProxy {
836
+ class GitHubAppInstallationService extends import_core10.CrudServiceProxy {
801
837
  constructor(kinotic) {
802
838
  super(kinotic.serviceProxy("org.kinotic.github.api.services.GitHubAppInstallationService"));
803
839
  }
@@ -826,6 +862,7 @@ var OsApiPlugin = {
826
862
  vmNodes: new VmNodeServiceProxy(kinotic),
827
863
  workloads: new WorkloadServiceProxy(kinotic),
828
864
  members: new MemberService(kinotic),
865
+ inviteEmailTemplates: new InviteEmailTemplateService(kinotic),
829
866
  deviceApproval: new DeviceApprovalService(kinotic),
830
867
  githubAppInstallations: new GitHubAppInstallationService(kinotic)
831
868
  };
package/dist/index.d.cts CHANGED
@@ -174,6 +174,25 @@ import { Identifiable as Identifiable3 } from "@kinotic-ai/core";
174
174
  declare enum ProjectType {
175
175
  TYPESCRIPT = "TYPESCRIPT"
176
176
  }
177
+ /**
178
+ * Connection state between a project and its backing GitHub repository.
179
+ * Stamped {@link RepositoryConnectionStatus.CONNECTED} when the repo is provisioned and
180
+ * its baseline rendered; left {@link RepositoryConnectionStatus.INITIALIZATION_FAILED}
181
+ * when the repo was created but rendering the baseline did not complete;
182
+ * {@link RepositoryConnectionStatus.DISCONNECTED} when GitHub revokes the platform's
183
+ * access to the repo.
184
+ */
185
+ declare enum RepositoryConnectionStatus {
186
+ /** Backing repo is reachable through the org's GitHub installation and its baseline is rendered. */
187
+ CONNECTED = "CONNECTED",
188
+ /**
189
+ * Backing repo was created but its rendered baseline was not committed. Initialization
190
+ * can be re-run against the existing repo to reach {@link RepositoryConnectionStatus.CONNECTED}.
191
+ */
192
+ INITIALIZATION_FAILED = "INITIALIZATION_FAILED",
193
+ /** Installation no longer has access to the repo; operator must re-link. */
194
+ DISCONNECTED = "DISCONNECTED"
195
+ }
177
196
  declare class Project implements Identifiable3<string> {
178
197
  /**
179
198
  * The id of the project.
@@ -215,13 +234,19 @@ declare class Project implements Identifiable3<string> {
215
234
  /**
216
235
  * Default branch of the backing repository at the time it was provisioned.
217
236
  */
218
- defaultBranch: string;
237
+ repoDefaultBranch: string;
219
238
  /**
220
239
  * Visibility chosen for the backing repository at create time. The SPA sets
221
240
  * this before save; the platform passes it through to GitHub.
222
241
  */
223
242
  repoPrivate: boolean;
224
243
  /**
244
+ * Connection state of the backing repository. A project left
245
+ * {@link RepositoryConnectionStatus.INITIALIZATION_FAILED} by creation can have its
246
+ * repository initialization retried.
247
+ */
248
+ repoConnectionStatus: RepositoryConnectionStatus | null;
249
+ /**
225
250
  * The date and time the project was updated.
226
251
  */
227
252
  updated: number | null;
@@ -561,7 +586,7 @@ declare class IamUser implements Identifiable8<string> {
561
586
  updated: number | null;
562
587
  }
563
588
  /**
564
- * Sent to {@code POST /api/signup} to start an email/password organization sign-up.
589
+ * Sent to {@code POST /api/auth/org/signup} to start an email/password organization sign-up.
565
590
  * Only the user's identity is collected up front; the organization name and password are
566
591
  * provided after email verification (see {@link SignUpCompleteRequest}).
567
592
  */
@@ -570,7 +595,7 @@ interface SignUpRequest {
570
595
  displayName: string;
571
596
  }
572
597
  /**
573
- * Sent to {@code POST /api/signup/complete} after the user clicks the verification link.
598
+ * Sent to {@code POST /api/auth/org/signup/complete} after the user clicks the verification link.
574
599
  * The {@link token} comes from that link; {@link orgName} (with optional {@link orgDescription})
575
600
  * names the organization to create, and {@link password} is the chosen account password.
576
601
  */
@@ -581,7 +606,7 @@ interface SignUpCompleteRequest {
581
606
  password: string;
582
607
  }
583
608
  /**
584
- * Sent to {@code POST /api/signup/complete-org} to finish an OIDC sign-up by naming the
609
+ * Sent to {@code POST /api/auth/org/signup/social/complete} to finish an OIDC sign-up by naming the
585
610
  * organization to create. The verified identity is held server-side, keyed by {@link token}.
586
611
  */
587
612
  interface CompleteOrgRequest {
@@ -591,7 +616,7 @@ interface CompleteOrgRequest {
591
616
  }
592
617
  import { Identifiable as Identifiable9 } from "@kinotic-ai/core";
593
618
  /**
594
- * Console view of a pending invitation. Deliberately excludes the accept token — anyone who
619
+ * View of a pending invitation for listing in the web app. Deliberately excludes the accept token — anyone who
595
620
  * can list invitations must not be able to redeem them.
596
621
  */
597
622
  declare class PendingInviteSummary implements Identifiable9<string> {
@@ -610,12 +635,33 @@ declare class PendingInviteSummary implements Identifiable9<string> {
610
635
  }
611
636
  import { Identifiable as Identifiable10 } from "@kinotic-ai/core";
612
637
  /**
638
+ * An application's customized invitation email — at most one per application. Subject and
639
+ * bodies are Handlebars sources rendered with the same variables as the built-in
640
+ * invitation template; when an application has no template, the built-in is used.
641
+ */
642
+ declare class InviteEmailTemplate implements Identifiable10<string> {
643
+ id: string | null;
644
+ /** The organization that owns {@link applicationId}; set by the server on save. */
645
+ organizationId: string | null;
646
+ /** The application whose invitation email this template customizes. Always set. */
647
+ applicationId: string;
648
+ /** Handlebars source for the subject line (rendered as plain text). */
649
+ subject: string;
650
+ /** Handlebars source for the HTML body. */
651
+ htmlBody: string;
652
+ /** Handlebars source for the plain-text body. */
653
+ textBody: string;
654
+ created: number | null;
655
+ updated: number | null;
656
+ }
657
+ import { Identifiable as Identifiable11 } from "@kinotic-ai/core";
658
+ /**
613
659
  * Persisted record of one GitHub App installation that a Kinotic Org has authorised.
614
660
  * The durable binding that says "Org X has access to GitHub install Y" — without it,
615
661
  * no installation token can be minted on behalf of the org and webhook deliveries
616
662
  * can't be matched to a project.
617
663
  */
618
- declare class GitHubAppInstallation implements Identifiable10<string> {
664
+ declare class GitHubAppInstallation implements Identifiable11<string> {
619
665
  id: string | null;
620
666
  organizationId: string;
621
667
  githubInstallationId: number;
@@ -902,6 +948,13 @@ interface IProjectService extends ICrudServiceProxy3<Project> {
902
948
  */
903
949
  findAllForApplication(applicationId: string, pageable: Pageable): Promise<IterablePage<Project>>;
904
950
  /**
951
+ * Re-runs repository initialization for a project left
952
+ * {@link RepositoryConnectionStatus.INITIALIZATION_FAILED} by creation.
953
+ * @param projectId the id of the project to retry
954
+ * @return Promise emitting the project, marked {@link RepositoryConnectionStatus.CONNECTED} on success
955
+ */
956
+ retryRepoInitialization(projectId: string): Promise<Project>;
957
+ /**
905
958
  * This operation makes all the recent writes immediately available for search.
906
959
  * @return a Promise that resolves when the operation is complete
907
960
  */
@@ -913,6 +966,7 @@ declare class ProjectService extends CrudServiceProxy3<Project> implements IProj
913
966
  createProjectIfNotExist(project: Project): Promise<Project>;
914
967
  findAllForApplication(applicationId: string, pageable: Pageable): Promise<IterablePage<Project>>;
915
968
  findAllForApplicationSinglePage(applicationId: string, pageable: Pageable): Promise<IterablePage<Project>>;
969
+ retryRepoInitialization(projectId: string): Promise<Project>;
916
970
  syncIndex(): Promise<void>;
917
971
  }
918
972
  import { IKinotic as IKinotic4 } from "@kinotic-ai/core";
@@ -1163,6 +1217,25 @@ declare class MemberService implements IMemberService {
1163
1217
  memberDataSource(applicationId: string | null): IDataSource<IamUser>;
1164
1218
  }
1165
1219
  import { IKinotic as IKinotic12 } from "@kinotic-ai/core";
1220
+ import { CrudServiceProxy as CrudServiceProxy8, ICrudServiceProxy as ICrudServiceProxy8 } from "@kinotic-ai/core";
1221
+ /**
1222
+ * CRUD service for an application's customized invitation email — at most one
1223
+ * {@link InviteEmailTemplate} per application. Saving validates the Handlebars sources, so
1224
+ * a broken template is rejected instead of breaking the next send. Deleting the template
1225
+ * reverts the application to the built-in invitation email.
1226
+ */
1227
+ interface IInviteEmailTemplateService extends ICrudServiceProxy8<InviteEmailTemplate> {
1228
+ /**
1229
+ * Finds the application's invitation template, or null when the application uses the
1230
+ * built-in email.
1231
+ */
1232
+ findByApplication(applicationId: string): Promise<InviteEmailTemplate | null>;
1233
+ }
1234
+ declare class InviteEmailTemplateService extends CrudServiceProxy8<InviteEmailTemplate> implements IInviteEmailTemplateService {
1235
+ constructor(kinotic: IKinotic12);
1236
+ findByApplication(applicationId: string): Promise<InviteEmailTemplate | null>;
1237
+ }
1238
+ import { IKinotic as IKinotic13 } from "@kinotic-ai/core";
1166
1239
  /**
1167
1240
  * Browser-invoked service for the RFC 8628 device-authorization approve step. The signed-in
1168
1241
  * browser user calls {@link approve} with the user_code shown in their CLI; the gateway
@@ -1177,11 +1250,11 @@ interface IDeviceApprovalService {
1177
1250
  }
1178
1251
  declare class DeviceApprovalService implements IDeviceApprovalService {
1179
1252
  private readonly serviceProxy;
1180
- constructor(kinotic: IKinotic12);
1253
+ constructor(kinotic: IKinotic13);
1181
1254
  approve(userCode: string): Promise<void>;
1182
1255
  }
1183
- import { CrudServiceProxy as CrudServiceProxy8, IKinotic as IKinotic13, ICrudServiceProxy as ICrudServiceProxy8 } from "@kinotic-ai/core";
1184
- interface IGitHubAppInstallationService extends ICrudServiceProxy8<GitHubAppInstallation> {
1256
+ import { CrudServiceProxy as CrudServiceProxy9, IKinotic as IKinotic14, ICrudServiceProxy as ICrudServiceProxy9 } from "@kinotic-ai/core";
1257
+ interface IGitHubAppInstallationService extends ICrudServiceProxy9<GitHubAppInstallation> {
1185
1258
  /**
1186
1259
  * Stages a single-use state token bound to the caller's organization plus the
1187
1260
  * supplied returnTo, then returns the GitHub install URL with that state
@@ -1206,8 +1279,8 @@ interface IGitHubAppInstallationService extends ICrudServiceProxy8<GitHubAppInst
1206
1279
  */
1207
1280
  findForCurrentOrg(): Promise<GitHubAppInstallation | null>;
1208
1281
  }
1209
- declare class GitHubAppInstallationService extends CrudServiceProxy8<GitHubAppInstallation> implements IGitHubAppInstallationService {
1210
- constructor(kinotic: IKinotic13);
1282
+ declare class GitHubAppInstallationService extends CrudServiceProxy9<GitHubAppInstallation> implements IGitHubAppInstallationService {
1283
+ constructor(kinotic: IKinotic14);
1211
1284
  startInstall(returnTo: string | null): Promise<string>;
1212
1285
  completeInstall(installationId: number, state: string): Promise<GitHubInstallCompletion>;
1213
1286
  findForCurrentOrg(): Promise<GitHubAppInstallation | null>;
@@ -1225,6 +1298,7 @@ interface IOsApiExtension {
1225
1298
  vmNodes: IVmNodeService;
1226
1299
  workloads: IWorkloadService;
1227
1300
  members: IMemberService;
1301
+ inviteEmailTemplates: IInviteEmailTemplateService;
1228
1302
  deviceApproval: IDeviceApprovalService;
1229
1303
  githubAppInstallations: IGitHubAppInstallationService;
1230
1304
  }
@@ -1232,4 +1306,4 @@ declare const OsApiPlugin: KinoticPlugin<IOsApiExtension>;
1232
1306
  declare module "@kinotic-ai/core" {
1233
1307
  interface KinoticSingleton extends IOsApiExtension {}
1234
1308
  }
1235
- export { isSystemParticipant, isOrganizationParticipant, isApplicationParticipant, WorkloadStatus, WorkloadServiceProxy, Workload, VmProviderType, VmNodeStatus, VmNodeServiceProxy, VmNode, VersionDecorator, TimeReferenceDecorator, TextDecorator, TenantSelectionC3Type, TenantIdDecorator, SingleLoggerLevelsDescriptor, SignUpRequest, SignUpCompleteRequest, QueryOptionsC3Type, QueryDecorator, ProjectType, ProjectService, Project, ProgressType, PendingInviteSummary, ParticipantType, PageableC3Type, PageC3Type, OsApiPlugin, OrganizationService, Organization, NotIndexedDecorator, NestedDecorator, NamedQueriesDefinitionService, NamedQueriesDefinition, MigrationService, MigrationResult, MigrationRequest, MigrationDefinition, MemberService, LoggersDescriptor, LoggerLevelsDescriptor, LogManager, LogLevel, KinoticProjectConfig, InsightRequest, InsightProgress, IdDecorator, IamUser, IWorkloadService, IVmNodeService, ISystemParticipant, IProjectService, IOsApiExtension, IOrganizationService, IOrganizationParticipant, INamedQueriesDefinitionService, IMigrationService, IMemberService, ILogManager, IGitHubAppInstallationService, IEntityDefinitionService, IDeviceApprovalService, IDataInsightsService, IApplicationService, IApplicationParticipant, GroupLoggerLevelsDescriptor, GitHubToken, GitHubRepoToken, GitHubInstallCompletion, GitHubAppInstallationService, GitHubAppInstallation, FlattenedDecorator, EsIndexConfigurationDecorator, EntityDefinitionService, EntityDefinition, EntityDecorator, EntitiesPathConfig, DiscriminatorDecorator, DeviceApprovalService, DataInsightsService, DataInsightsComponent, CompleteOrgRequest, AutoGeneratedIdDecorator, AuthType, ApplicationService, Application };
1309
+ export { isSystemParticipant, isOrganizationParticipant, isApplicationParticipant, WorkloadStatus, WorkloadServiceProxy, Workload, VmProviderType, VmNodeStatus, VmNodeServiceProxy, VmNode, VersionDecorator, TimeReferenceDecorator, TextDecorator, TenantSelectionC3Type, TenantIdDecorator, SingleLoggerLevelsDescriptor, SignUpRequest, SignUpCompleteRequest, RepositoryConnectionStatus, QueryOptionsC3Type, QueryDecorator, ProjectType, ProjectService, Project, ProgressType, PendingInviteSummary, ParticipantType, PageableC3Type, PageC3Type, OsApiPlugin, OrganizationService, Organization, NotIndexedDecorator, NestedDecorator, NamedQueriesDefinitionService, NamedQueriesDefinition, MigrationService, MigrationResult, MigrationRequest, MigrationDefinition, MemberService, LoggersDescriptor, LoggerLevelsDescriptor, LogManager, LogLevel, KinoticProjectConfig, InviteEmailTemplateService, InviteEmailTemplate, InsightRequest, InsightProgress, IdDecorator, IamUser, IWorkloadService, IVmNodeService, ISystemParticipant, IProjectService, IOsApiExtension, IOrganizationService, IOrganizationParticipant, INamedQueriesDefinitionService, IMigrationService, IMemberService, ILogManager, IInviteEmailTemplateService, IGitHubAppInstallationService, IEntityDefinitionService, IDeviceApprovalService, IDataInsightsService, IApplicationService, IApplicationParticipant, GroupLoggerLevelsDescriptor, GitHubToken, GitHubRepoToken, GitHubInstallCompletion, GitHubAppInstallationService, GitHubAppInstallation, FlattenedDecorator, EsIndexConfigurationDecorator, EntityDefinitionService, EntityDefinition, EntityDecorator, EntitiesPathConfig, DiscriminatorDecorator, DeviceApprovalService, DataInsightsService, DataInsightsComponent, CompleteOrgRequest, AutoGeneratedIdDecorator, AuthType, ApplicationService, Application };
package/dist/index.d.ts CHANGED
@@ -174,6 +174,25 @@ import { Identifiable as Identifiable3 } from "@kinotic-ai/core";
174
174
  declare enum ProjectType {
175
175
  TYPESCRIPT = "TYPESCRIPT"
176
176
  }
177
+ /**
178
+ * Connection state between a project and its backing GitHub repository.
179
+ * Stamped {@link RepositoryConnectionStatus.CONNECTED} when the repo is provisioned and
180
+ * its baseline rendered; left {@link RepositoryConnectionStatus.INITIALIZATION_FAILED}
181
+ * when the repo was created but rendering the baseline did not complete;
182
+ * {@link RepositoryConnectionStatus.DISCONNECTED} when GitHub revokes the platform's
183
+ * access to the repo.
184
+ */
185
+ declare enum RepositoryConnectionStatus {
186
+ /** Backing repo is reachable through the org's GitHub installation and its baseline is rendered. */
187
+ CONNECTED = "CONNECTED",
188
+ /**
189
+ * Backing repo was created but its rendered baseline was not committed. Initialization
190
+ * can be re-run against the existing repo to reach {@link RepositoryConnectionStatus.CONNECTED}.
191
+ */
192
+ INITIALIZATION_FAILED = "INITIALIZATION_FAILED",
193
+ /** Installation no longer has access to the repo; operator must re-link. */
194
+ DISCONNECTED = "DISCONNECTED"
195
+ }
177
196
  declare class Project implements Identifiable3<string> {
178
197
  /**
179
198
  * The id of the project.
@@ -215,13 +234,19 @@ declare class Project implements Identifiable3<string> {
215
234
  /**
216
235
  * Default branch of the backing repository at the time it was provisioned.
217
236
  */
218
- defaultBranch: string;
237
+ repoDefaultBranch: string;
219
238
  /**
220
239
  * Visibility chosen for the backing repository at create time. The SPA sets
221
240
  * this before save; the platform passes it through to GitHub.
222
241
  */
223
242
  repoPrivate: boolean;
224
243
  /**
244
+ * Connection state of the backing repository. A project left
245
+ * {@link RepositoryConnectionStatus.INITIALIZATION_FAILED} by creation can have its
246
+ * repository initialization retried.
247
+ */
248
+ repoConnectionStatus: RepositoryConnectionStatus | null;
249
+ /**
225
250
  * The date and time the project was updated.
226
251
  */
227
252
  updated: number | null;
@@ -561,7 +586,7 @@ declare class IamUser implements Identifiable8<string> {
561
586
  updated: number | null;
562
587
  }
563
588
  /**
564
- * Sent to {@code POST /api/signup} to start an email/password organization sign-up.
589
+ * Sent to {@code POST /api/auth/org/signup} to start an email/password organization sign-up.
565
590
  * Only the user's identity is collected up front; the organization name and password are
566
591
  * provided after email verification (see {@link SignUpCompleteRequest}).
567
592
  */
@@ -570,7 +595,7 @@ interface SignUpRequest {
570
595
  displayName: string;
571
596
  }
572
597
  /**
573
- * Sent to {@code POST /api/signup/complete} after the user clicks the verification link.
598
+ * Sent to {@code POST /api/auth/org/signup/complete} after the user clicks the verification link.
574
599
  * The {@link token} comes from that link; {@link orgName} (with optional {@link orgDescription})
575
600
  * names the organization to create, and {@link password} is the chosen account password.
576
601
  */
@@ -581,7 +606,7 @@ interface SignUpCompleteRequest {
581
606
  password: string;
582
607
  }
583
608
  /**
584
- * Sent to {@code POST /api/signup/complete-org} to finish an OIDC sign-up by naming the
609
+ * Sent to {@code POST /api/auth/org/signup/social/complete} to finish an OIDC sign-up by naming the
585
610
  * organization to create. The verified identity is held server-side, keyed by {@link token}.
586
611
  */
587
612
  interface CompleteOrgRequest {
@@ -591,7 +616,7 @@ interface CompleteOrgRequest {
591
616
  }
592
617
  import { Identifiable as Identifiable9 } from "@kinotic-ai/core";
593
618
  /**
594
- * Console view of a pending invitation. Deliberately excludes the accept token — anyone who
619
+ * View of a pending invitation for listing in the web app. Deliberately excludes the accept token — anyone who
595
620
  * can list invitations must not be able to redeem them.
596
621
  */
597
622
  declare class PendingInviteSummary implements Identifiable9<string> {
@@ -610,12 +635,33 @@ declare class PendingInviteSummary implements Identifiable9<string> {
610
635
  }
611
636
  import { Identifiable as Identifiable10 } from "@kinotic-ai/core";
612
637
  /**
638
+ * An application's customized invitation email — at most one per application. Subject and
639
+ * bodies are Handlebars sources rendered with the same variables as the built-in
640
+ * invitation template; when an application has no template, the built-in is used.
641
+ */
642
+ declare class InviteEmailTemplate implements Identifiable10<string> {
643
+ id: string | null;
644
+ /** The organization that owns {@link applicationId}; set by the server on save. */
645
+ organizationId: string | null;
646
+ /** The application whose invitation email this template customizes. Always set. */
647
+ applicationId: string;
648
+ /** Handlebars source for the subject line (rendered as plain text). */
649
+ subject: string;
650
+ /** Handlebars source for the HTML body. */
651
+ htmlBody: string;
652
+ /** Handlebars source for the plain-text body. */
653
+ textBody: string;
654
+ created: number | null;
655
+ updated: number | null;
656
+ }
657
+ import { Identifiable as Identifiable11 } from "@kinotic-ai/core";
658
+ /**
613
659
  * Persisted record of one GitHub App installation that a Kinotic Org has authorised.
614
660
  * The durable binding that says "Org X has access to GitHub install Y" — without it,
615
661
  * no installation token can be minted on behalf of the org and webhook deliveries
616
662
  * can't be matched to a project.
617
663
  */
618
- declare class GitHubAppInstallation implements Identifiable10<string> {
664
+ declare class GitHubAppInstallation implements Identifiable11<string> {
619
665
  id: string | null;
620
666
  organizationId: string;
621
667
  githubInstallationId: number;
@@ -902,6 +948,13 @@ interface IProjectService extends ICrudServiceProxy3<Project> {
902
948
  */
903
949
  findAllForApplication(applicationId: string, pageable: Pageable): Promise<IterablePage<Project>>;
904
950
  /**
951
+ * Re-runs repository initialization for a project left
952
+ * {@link RepositoryConnectionStatus.INITIALIZATION_FAILED} by creation.
953
+ * @param projectId the id of the project to retry
954
+ * @return Promise emitting the project, marked {@link RepositoryConnectionStatus.CONNECTED} on success
955
+ */
956
+ retryRepoInitialization(projectId: string): Promise<Project>;
957
+ /**
905
958
  * This operation makes all the recent writes immediately available for search.
906
959
  * @return a Promise that resolves when the operation is complete
907
960
  */
@@ -913,6 +966,7 @@ declare class ProjectService extends CrudServiceProxy3<Project> implements IProj
913
966
  createProjectIfNotExist(project: Project): Promise<Project>;
914
967
  findAllForApplication(applicationId: string, pageable: Pageable): Promise<IterablePage<Project>>;
915
968
  findAllForApplicationSinglePage(applicationId: string, pageable: Pageable): Promise<IterablePage<Project>>;
969
+ retryRepoInitialization(projectId: string): Promise<Project>;
916
970
  syncIndex(): Promise<void>;
917
971
  }
918
972
  import { IKinotic as IKinotic4 } from "@kinotic-ai/core";
@@ -1163,6 +1217,25 @@ declare class MemberService implements IMemberService {
1163
1217
  memberDataSource(applicationId: string | null): IDataSource<IamUser>;
1164
1218
  }
1165
1219
  import { IKinotic as IKinotic12 } from "@kinotic-ai/core";
1220
+ import { CrudServiceProxy as CrudServiceProxy8, ICrudServiceProxy as ICrudServiceProxy8 } from "@kinotic-ai/core";
1221
+ /**
1222
+ * CRUD service for an application's customized invitation email — at most one
1223
+ * {@link InviteEmailTemplate} per application. Saving validates the Handlebars sources, so
1224
+ * a broken template is rejected instead of breaking the next send. Deleting the template
1225
+ * reverts the application to the built-in invitation email.
1226
+ */
1227
+ interface IInviteEmailTemplateService extends ICrudServiceProxy8<InviteEmailTemplate> {
1228
+ /**
1229
+ * Finds the application's invitation template, or null when the application uses the
1230
+ * built-in email.
1231
+ */
1232
+ findByApplication(applicationId: string): Promise<InviteEmailTemplate | null>;
1233
+ }
1234
+ declare class InviteEmailTemplateService extends CrudServiceProxy8<InviteEmailTemplate> implements IInviteEmailTemplateService {
1235
+ constructor(kinotic: IKinotic12);
1236
+ findByApplication(applicationId: string): Promise<InviteEmailTemplate | null>;
1237
+ }
1238
+ import { IKinotic as IKinotic13 } from "@kinotic-ai/core";
1166
1239
  /**
1167
1240
  * Browser-invoked service for the RFC 8628 device-authorization approve step. The signed-in
1168
1241
  * browser user calls {@link approve} with the user_code shown in their CLI; the gateway
@@ -1177,11 +1250,11 @@ interface IDeviceApprovalService {
1177
1250
  }
1178
1251
  declare class DeviceApprovalService implements IDeviceApprovalService {
1179
1252
  private readonly serviceProxy;
1180
- constructor(kinotic: IKinotic12);
1253
+ constructor(kinotic: IKinotic13);
1181
1254
  approve(userCode: string): Promise<void>;
1182
1255
  }
1183
- import { CrudServiceProxy as CrudServiceProxy8, IKinotic as IKinotic13, ICrudServiceProxy as ICrudServiceProxy8 } from "@kinotic-ai/core";
1184
- interface IGitHubAppInstallationService extends ICrudServiceProxy8<GitHubAppInstallation> {
1256
+ import { CrudServiceProxy as CrudServiceProxy9, IKinotic as IKinotic14, ICrudServiceProxy as ICrudServiceProxy9 } from "@kinotic-ai/core";
1257
+ interface IGitHubAppInstallationService extends ICrudServiceProxy9<GitHubAppInstallation> {
1185
1258
  /**
1186
1259
  * Stages a single-use state token bound to the caller's organization plus the
1187
1260
  * supplied returnTo, then returns the GitHub install URL with that state
@@ -1206,8 +1279,8 @@ interface IGitHubAppInstallationService extends ICrudServiceProxy8<GitHubAppInst
1206
1279
  */
1207
1280
  findForCurrentOrg(): Promise<GitHubAppInstallation | null>;
1208
1281
  }
1209
- declare class GitHubAppInstallationService extends CrudServiceProxy8<GitHubAppInstallation> implements IGitHubAppInstallationService {
1210
- constructor(kinotic: IKinotic13);
1282
+ declare class GitHubAppInstallationService extends CrudServiceProxy9<GitHubAppInstallation> implements IGitHubAppInstallationService {
1283
+ constructor(kinotic: IKinotic14);
1211
1284
  startInstall(returnTo: string | null): Promise<string>;
1212
1285
  completeInstall(installationId: number, state: string): Promise<GitHubInstallCompletion>;
1213
1286
  findForCurrentOrg(): Promise<GitHubAppInstallation | null>;
@@ -1225,6 +1298,7 @@ interface IOsApiExtension {
1225
1298
  vmNodes: IVmNodeService;
1226
1299
  workloads: IWorkloadService;
1227
1300
  members: IMemberService;
1301
+ inviteEmailTemplates: IInviteEmailTemplateService;
1228
1302
  deviceApproval: IDeviceApprovalService;
1229
1303
  githubAppInstallations: IGitHubAppInstallationService;
1230
1304
  }
@@ -1232,4 +1306,4 @@ declare const OsApiPlugin: KinoticPlugin<IOsApiExtension>;
1232
1306
  declare module "@kinotic-ai/core" {
1233
1307
  interface KinoticSingleton extends IOsApiExtension {}
1234
1308
  }
1235
- export { isSystemParticipant, isOrganizationParticipant, isApplicationParticipant, WorkloadStatus, WorkloadServiceProxy, Workload, VmProviderType, VmNodeStatus, VmNodeServiceProxy, VmNode, VersionDecorator, TimeReferenceDecorator, TextDecorator, TenantSelectionC3Type, TenantIdDecorator, SingleLoggerLevelsDescriptor, SignUpRequest, SignUpCompleteRequest, QueryOptionsC3Type, QueryDecorator, ProjectType, ProjectService, Project, ProgressType, PendingInviteSummary, ParticipantType, PageableC3Type, PageC3Type, OsApiPlugin, OrganizationService, Organization, NotIndexedDecorator, NestedDecorator, NamedQueriesDefinitionService, NamedQueriesDefinition, MigrationService, MigrationResult, MigrationRequest, MigrationDefinition, MemberService, LoggersDescriptor, LoggerLevelsDescriptor, LogManager, LogLevel, KinoticProjectConfig, InsightRequest, InsightProgress, IdDecorator, IamUser, IWorkloadService, IVmNodeService, ISystemParticipant, IProjectService, IOsApiExtension, IOrganizationService, IOrganizationParticipant, INamedQueriesDefinitionService, IMigrationService, IMemberService, ILogManager, IGitHubAppInstallationService, IEntityDefinitionService, IDeviceApprovalService, IDataInsightsService, IApplicationService, IApplicationParticipant, GroupLoggerLevelsDescriptor, GitHubToken, GitHubRepoToken, GitHubInstallCompletion, GitHubAppInstallationService, GitHubAppInstallation, FlattenedDecorator, EsIndexConfigurationDecorator, EntityDefinitionService, EntityDefinition, EntityDecorator, EntitiesPathConfig, DiscriminatorDecorator, DeviceApprovalService, DataInsightsService, DataInsightsComponent, CompleteOrgRequest, AutoGeneratedIdDecorator, AuthType, ApplicationService, Application };
1309
+ export { isSystemParticipant, isOrganizationParticipant, isApplicationParticipant, WorkloadStatus, WorkloadServiceProxy, Workload, VmProviderType, VmNodeStatus, VmNodeServiceProxy, VmNode, VersionDecorator, TimeReferenceDecorator, TextDecorator, TenantSelectionC3Type, TenantIdDecorator, SingleLoggerLevelsDescriptor, SignUpRequest, SignUpCompleteRequest, RepositoryConnectionStatus, QueryOptionsC3Type, QueryDecorator, ProjectType, ProjectService, Project, ProgressType, PendingInviteSummary, ParticipantType, PageableC3Type, PageC3Type, OsApiPlugin, OrganizationService, Organization, NotIndexedDecorator, NestedDecorator, NamedQueriesDefinitionService, NamedQueriesDefinition, MigrationService, MigrationResult, MigrationRequest, MigrationDefinition, MemberService, LoggersDescriptor, LoggerLevelsDescriptor, LogManager, LogLevel, KinoticProjectConfig, InviteEmailTemplateService, InviteEmailTemplate, InsightRequest, InsightProgress, IdDecorator, IamUser, IWorkloadService, IVmNodeService, ISystemParticipant, IProjectService, IOsApiExtension, IOrganizationService, IOrganizationParticipant, INamedQueriesDefinitionService, IMigrationService, IMemberService, ILogManager, IInviteEmailTemplateService, IGitHubAppInstallationService, IEntityDefinitionService, IDeviceApprovalService, IDataInsightsService, IApplicationService, IApplicationParticipant, GroupLoggerLevelsDescriptor, GitHubToken, GitHubRepoToken, GitHubInstallCompletion, GitHubAppInstallationService, GitHubAppInstallation, FlattenedDecorator, EsIndexConfigurationDecorator, EntityDefinitionService, EntityDefinition, EntityDecorator, EntitiesPathConfig, DiscriminatorDecorator, DeviceApprovalService, DataInsightsService, DataInsightsComponent, CompleteOrgRequest, AutoGeneratedIdDecorator, AuthType, ApplicationService, Application };
package/dist/index.js CHANGED
@@ -205,8 +205,9 @@ class Project {
205
205
  sourceOfTruth = null;
206
206
  repoFullName;
207
207
  repoId;
208
- defaultBranch;
208
+ repoDefaultBranch;
209
209
  repoPrivate = true;
210
+ repoConnectionStatus = null;
210
211
  updated = null;
211
212
  constructor(id, applicationId, name, description) {
212
213
  this.id = id;
@@ -220,6 +221,13 @@ var ProjectType;
220
221
  ((ProjectType2) => {
221
222
  ProjectType2["TYPESCRIPT"] = "TYPESCRIPT";
222
223
  })(ProjectType ||= {});
224
+ // packages/os-api/src/api/model/RepositoryConnectionStatus.ts
225
+ var RepositoryConnectionStatus;
226
+ ((RepositoryConnectionStatus2) => {
227
+ RepositoryConnectionStatus2["CONNECTED"] = "CONNECTED";
228
+ RepositoryConnectionStatus2["INITIALIZATION_FAILED"] = "INITIALIZATION_FAILED";
229
+ RepositoryConnectionStatus2["DISCONNECTED"] = "DISCONNECTED";
230
+ })(RepositoryConnectionStatus ||= {});
223
231
  // packages/os-api/src/api/model/EntityDefinition.ts
224
232
  class EntityDefinition {
225
233
  id;
@@ -367,6 +375,17 @@ class PendingInviteSummary {
367
375
  created = null;
368
376
  expiresAt = null;
369
377
  }
378
+ // packages/os-api/src/api/model/InviteEmailTemplate.ts
379
+ class InviteEmailTemplate {
380
+ id = null;
381
+ organizationId = null;
382
+ applicationId = "";
383
+ subject = "";
384
+ htmlBody = "";
385
+ textBody = "";
386
+ created = null;
387
+ updated = null;
388
+ }
370
389
  // packages/os-api/src/api/model/github/GitHubAppInstallation.ts
371
390
  class GitHubAppInstallation {
372
391
  id = null;
@@ -498,6 +517,9 @@ class ProjectService extends CrudServiceProxy3 {
498
517
  findAllForApplicationSinglePage(applicationId, pageable) {
499
518
  return this.serviceProxy.invoke("findAllForApplication", [applicationId, pageable]);
500
519
  }
520
+ retryRepoInitialization(projectId) {
521
+ return this.serviceProxy.invoke("retryRepoInitialization", [projectId]);
522
+ }
501
523
  syncIndex() {
502
524
  return this.serviceProxy.invoke("syncIndex", []);
503
525
  }
@@ -681,6 +703,17 @@ class MemberService {
681
703
  };
682
704
  }
683
705
  }
706
+ // packages/os-api/src/api/services/IInviteEmailTemplateService.ts
707
+ import { CrudServiceProxy as CrudServiceProxy8 } from "@kinotic-ai/core";
708
+
709
+ class InviteEmailTemplateService extends CrudServiceProxy8 {
710
+ constructor(kinotic) {
711
+ super(kinotic.serviceProxy("org.kinotic.os.api.services.InviteEmailTemplateService"));
712
+ }
713
+ findByApplication(applicationId) {
714
+ return this.serviceProxy.invoke("findByApplication", [applicationId]);
715
+ }
716
+ }
684
717
  // packages/os-api/src/api/services/IDeviceApprovalService.ts
685
718
  class DeviceApprovalService {
686
719
  serviceProxy;
@@ -692,9 +725,9 @@ class DeviceApprovalService {
692
725
  }
693
726
  }
694
727
  // packages/os-api/src/api/services/IGitHubAppInstallationService.ts
695
- import { CrudServiceProxy as CrudServiceProxy8 } from "@kinotic-ai/core";
728
+ import { CrudServiceProxy as CrudServiceProxy9 } from "@kinotic-ai/core";
696
729
 
697
- class GitHubAppInstallationService extends CrudServiceProxy8 {
730
+ class GitHubAppInstallationService extends CrudServiceProxy9 {
698
731
  constructor(kinotic) {
699
732
  super(kinotic.serviceProxy("org.kinotic.github.api.services.GitHubAppInstallationService"));
700
733
  }
@@ -723,6 +756,7 @@ var OsApiPlugin = {
723
756
  vmNodes: new VmNodeServiceProxy(kinotic),
724
757
  workloads: new WorkloadServiceProxy(kinotic),
725
758
  members: new MemberService(kinotic),
759
+ inviteEmailTemplates: new InviteEmailTemplateService(kinotic),
726
760
  deviceApproval: new DeviceApprovalService(kinotic),
727
761
  githubAppInstallations: new GitHubAppInstallationService(kinotic)
728
762
  };
@@ -745,6 +779,7 @@ export {
745
779
  TenantSelectionC3Type,
746
780
  TenantIdDecorator,
747
781
  SingleLoggerLevelsDescriptor,
782
+ RepositoryConnectionStatus,
748
783
  QueryOptionsC3Type,
749
784
  QueryDecorator,
750
785
  ProjectType,
@@ -769,6 +804,8 @@ export {
769
804
  LogManager,
770
805
  LogLevel,
771
806
  KinoticProjectConfig,
807
+ InviteEmailTemplateService,
808
+ InviteEmailTemplate,
772
809
  IdDecorator,
773
810
  IamUser,
774
811
  GroupLoggerLevelsDescriptor,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kinotic-ai/os-api",
3
- "version": "1.9.0",
3
+ "version": "1.11.0",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -33,15 +33,15 @@
33
33
  "ui-test": "vitest --ui --coverage.enabled=true --mode development"
34
34
  },
35
35
  "peerDependencies": {
36
- "@kinotic-ai/core": ">=1.6.0"
36
+ "@kinotic-ai/core": ">=1.7.0"
37
37
  },
38
38
  "dependencies": {
39
39
  "@kinotic-ai/idl": "1.0.9",
40
- "@kinotic-ai/persistence": "1.3.1",
40
+ "@kinotic-ai/persistence": "1.4.0",
41
41
  "rxjs": "^7.8.2"
42
42
  },
43
43
  "devDependencies": {
44
- "@kinotic-ai/core": "1.6.2",
44
+ "@kinotic-ai/core": "1.7.0",
45
45
  "@types/node": "^25.3.2",
46
46
  "@vitest/coverage-v8": "^4.0.18",
47
47
  "@vitest/runner": "^4.0.18",