@andrewcaires/api 5.5.0 → 5.7.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.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * @andrewcaires/api v5.5.0
2
+ * @andrewcaires/api v5.7.0
3
3
  * Simple api for small applications using express, jsonwebtoken, sequelize and websocket
4
4
  * (c) 2026 Andrew Caires
5
5
  * @license: MIT
6
6
  */
7
- import { Context, Application as Application$1, ExpressOptions, ResponseError } from '@andrewcaires/express';
7
+ import { Context, Application as Application$1, ExpressOptions, HttpError } from '@andrewcaires/express';
8
8
  import { ModelFindOptions, ModelUpdateOptions, Model as Model$1, Sequelize } from '@andrewcaires/sequelize';
9
9
  import { TypeAnyObject, TypeObjectString, TypeAnyFunction, TypeAnyConstructor, EventEmitter, TypeObject, ValidationBase, ValidationShape } from '@andrewcaires/utils.js';
10
10
  import { WebSocketServer } from 'ws';
@@ -198,16 +198,15 @@ declare enum UserStatus {
198
198
  ARCHIVED = "archived"
199
199
  }
200
200
 
201
- interface WorkerCliRequest {
202
- name: string;
203
- }
204
- interface WorkerDeclaration {
201
+ type WorkerInstance = {
202
+ handler: () => void | Promise<void>;
203
+ };
204
+
205
+ type WorkerConstructor = new () => WorkerInstance;
206
+
207
+ interface WorkerDefinition {
205
208
  name: string;
206
- }
207
- type WorkerHandlerResult = unknown | Promise<unknown>;
208
- type WorkerHandler = () => WorkerHandlerResult;
209
- interface WorkerRegistered extends WorkerDeclaration {
210
- run: WorkerHandler;
209
+ handler: () => void | Promise<void>;
211
210
  }
212
211
 
213
212
  declare class RegisterModel extends Model$1 {
@@ -258,28 +257,53 @@ declare class PageModel extends Model$1 {
258
257
  declare class PermissionModel extends Model$1 {
259
258
  readonly id: string;
260
259
  name: string;
260
+ permission: string;
261
261
  description: string;
262
262
  active: boolean;
263
263
  metadata: TypeAnyObject;
264
264
  readonly created_at: Date;
265
265
  readonly updated_at: Date;
266
266
  readonly deleted_at: Date | null;
267
- groups_permissions: Array<GroupPermissionModel>;
267
+ roles_permissions: Array<RolePermissionModel>;
268
268
  pages: Array<PageModel>;
269
269
  }
270
270
 
271
- declare class GroupPermissionModel extends Model$1 {
271
+ declare class RolePermissionModel extends Model$1 {
272
272
  readonly id: string;
273
273
  readonly created_at: Date;
274
- group_id: string;
275
- group: GroupModel;
276
274
  permission_id: string;
277
275
  permission: PermissionModel;
276
+ role_id: string;
277
+ role: RoleModel;
278
+ }
279
+
280
+ declare class RoleModel extends Model$1 {
281
+ readonly id: string;
282
+ name: string;
283
+ role: string;
284
+ description: string;
285
+ active: boolean;
286
+ metadata: TypeAnyObject;
287
+ readonly created_at: Date;
288
+ readonly updated_at: Date;
289
+ readonly deleted_at: Date | null;
290
+ groups_roles: Array<GroupRoleModel>;
291
+ roles_permissions: Array<RolePermissionModel>;
292
+ }
293
+
294
+ declare class GroupRoleModel extends Model$1 {
295
+ readonly id: string;
296
+ readonly created_at: Date;
297
+ group_id: string;
298
+ group: GroupModel;
299
+ role_id: string;
300
+ role: RoleModel;
278
301
  }
279
302
 
280
303
  declare class GroupModel extends Model$1 {
281
304
  readonly id: string;
282
305
  name: string;
306
+ group: string;
283
307
  description: string;
284
308
  type: GroupTypes;
285
309
  active: boolean;
@@ -288,7 +312,7 @@ declare class GroupModel extends Model$1 {
288
312
  readonly updated_at: Date;
289
313
  readonly deleted_at: Date | null;
290
314
  users_groups: Array<UserGroupModel>;
291
- groups_permissions: Array<GroupPermissionModel>;
315
+ groups_roles: Array<GroupRoleModel>;
292
316
  }
293
317
 
294
318
  declare class UserTenantModel extends Model$1 {
@@ -494,17 +518,21 @@ declare class AuthService extends Service {
494
518
  private readonly options;
495
519
  private readonly userAttributes;
496
520
  private readonly userService;
497
- constructor();
498
- createApiKey(ctx: Context, name: string, expires_at: Date, user: UserModel): Promise<string>;
521
+ apiAuth(ctx: Context): Promise<AuthResult>;
522
+ apiKeyAuth(key: string): Promise<AuthResult>;
523
+ apiTokenAuth(token: string): Promise<AuthResult>;
524
+ createApiKey(ctx: Context, name: string, expires_at: Date, user: UserModel): Promise<{
525
+ id: string;
526
+ key: string;
527
+ }>;
499
528
  createApiToken(ctx: Context, user: UserModel): Promise<{
500
529
  token: string;
501
530
  }>;
531
+ deleteApiKey(ctx: Context, id: string, user: UserModel): Promise<boolean>;
502
532
  renewApiToken(token: string): Promise<{
503
533
  token: string;
504
534
  }>;
505
- apiAuth(ctx: Context): Promise<AuthResult>;
506
- apiKeyAuth(key: string): Promise<AuthResult>;
507
- apiTokenAuth(token: string): Promise<AuthResult>;
535
+ revokeApiKey(ctx: Context, id: string, user: UserModel): Promise<boolean>;
508
536
  private attachAuthContext;
509
537
  private safeEqual;
510
538
  private verifyJwt;
@@ -541,6 +569,7 @@ declare class UserService extends Service {
541
569
  createPassword(user_id: string, value: string, ctx?: Context): Promise<boolean>;
542
570
  getGroups(user_id: string, tenant_id?: string | null): Promise<Array<string>>;
543
571
  getPermissions(user_id: string, tenant_id?: string | null): Promise<Array<string>>;
572
+ getGroupPermissions(group_id: string): Promise<Array<string>>;
544
573
  getTenants(user_id: string): Promise<Array<{
545
574
  id: string;
546
575
  name: string;
@@ -557,11 +586,6 @@ declare class Application<T extends ApplicationEvents = ApplicationEvents> exten
557
586
  log(message: string, source?: string): void;
558
587
  listen(): Promise<void>;
559
588
  prepare(): Promise<void>;
560
- run(argv?: Array<string>): Promise<unknown>;
561
- runWorker(name: string): Promise<unknown>;
562
- workerCliRequest(argv?: Array<string>): WorkerCliRequest | undefined;
563
- private getCliOption;
564
- private writeWorkerResult;
565
589
  migrations(database: Sequelize): Promise<void>;
566
590
  websocket(): WebSocketServer | undefined;
567
591
  }
@@ -595,7 +619,9 @@ declare class AuditsController extends ModelController<AuditModel> {
595
619
  protected readonly model: typeof AuditModel;
596
620
  protected readonly permissions: string[];
597
621
  protected all(ctx: Context): Promise<void>;
622
+ protected record(ctx: Context, id: string): Promise<void>;
598
623
  protected get(ctx: Context): Promise<void>;
624
+ private ensurePermission;
599
625
  }
600
626
 
601
627
  declare class AuthController extends BaseController<AuthEvents> {
@@ -608,8 +634,8 @@ declare class AuthController extends BaseController<AuthEvents> {
608
634
 
609
635
  declare abstract class CrudController<M extends Model<any>, T extends TypeAnyObject = TypeAnyObject> extends ModelController<M, T> {
610
636
  private _crud;
611
- CrudArgumentsCountAll(ctx: Context): ModelArgumentsUpdate<M>;
612
- CrudArgumentsCreate(ctx: Context): ModelArgumentsUpdate<M>;
637
+ CrudArgumentsCountAll(ctx: Context): ModelArgumentsCount<M>;
638
+ CrudArgumentsCreate(ctx: Context): ModelArgumentsCreate<M>;
613
639
  CrudArgumentsFindAll(ctx: Context): ModelArgumentsFindAll<M>;
614
640
  CrudArgumentsFindOne(ctx: Context): ModelArgumentsFindOne<M>;
615
641
  CrudArgumentsDelete(ctx: Context): ModelArgumentsDelete<M>;
@@ -652,19 +678,25 @@ declare class GroupsController extends CrudController<GroupModel> {
652
678
  CrudValidateUpdate(): TypeObject<ValidationBase>;
653
679
  sync(): Promise<void>;
654
680
  protected users(ctx: Context, group_id: string): Promise<void>;
655
- private checkGroup;
681
+ private ensureGroup;
656
682
  }
657
683
 
658
- declare class GroupsPermissionsController extends ModelController<PermissionModel> {
659
- protected readonly model: typeof PermissionModel;
684
+ declare class GroupsPermissionsController extends BaseController {
685
+ private readonly userService;
686
+ protected all(ctx: Context, group_id: string): Promise<void>;
687
+ private ensureGroup;
688
+ }
689
+
690
+ declare class GroupsRolesController extends ModelController<RoleModel> {
691
+ protected readonly model: typeof RoleModel;
660
692
  protected readonly permissions: never[];
661
- protected add(ctx: Context, group_id: string, permissions: Array<string>): Promise<void>;
693
+ protected add(ctx: Context, group_id: string, roles: Array<string>): Promise<void>;
662
694
  protected all(ctx: Context, group_id: string): Promise<void>;
663
- protected del(ctx: Context, group_id: string, permissions: Array<string>): Promise<void>;
664
- protected set(ctx: Context, group_id: string, permissions: Array<string>): Promise<void>;
665
- private addPermissions;
666
- private checkGroup;
667
- private checkPermissions;
695
+ protected del(ctx: Context, group_id: string, roles: Array<string>): Promise<void>;
696
+ protected set(ctx: Context, group_id: string, roles: Array<string>): Promise<void>;
697
+ private addRoles;
698
+ private ensureGroup;
699
+ private ensureRoles;
668
700
  }
669
701
 
670
702
  declare class HealthController {
@@ -701,7 +733,7 @@ declare class PagesController extends CrudController<PageModel> {
701
733
  CrudValidateCreate(): TypeObject<ValidationBase>;
702
734
  CrudValidateUpdate(): TypeObject<ValidationBase>;
703
735
  protected position(ctx: Context, pages: Array<TypeAnyObject>): Promise<void>;
704
- private checkPages;
736
+ private ensurePages;
705
737
  }
706
738
 
707
739
  declare class PermissionsController extends CrudController<PermissionModel> {
@@ -713,7 +745,7 @@ declare class PermissionsController extends CrudController<PermissionModel> {
713
745
  CrudValidateUpdate(): TypeObject<ValidationBase>;
714
746
  sync(): Promise<void>;
715
747
  protected groups(ctx: Context, permission_id: string): Promise<void>;
716
- private checkPermission;
748
+ private ensurePermission;
717
749
  }
718
750
 
719
751
  declare class ProfileController extends ModelController<UserModel> {
@@ -735,6 +767,30 @@ declare class RegisterController extends BaseController<RegisterEvents> {
735
767
  private getId;
736
768
  }
737
769
 
770
+ declare class RolesController extends CrudController<RoleModel> {
771
+ protected readonly model: typeof RoleModel;
772
+ protected groupModelService: ModelService<GroupModel>;
773
+ private schemaCreate;
774
+ private schemaUpdate;
775
+ CrudValidateCreate(): TypeObject<ValidationBase>;
776
+ CrudValidateUpdate(): TypeObject<ValidationBase>;
777
+ sync(): Promise<void>;
778
+ protected groups(ctx: Context, role_id: string): Promise<void>;
779
+ private ensureRole;
780
+ }
781
+
782
+ declare class RolesPermissionsController extends ModelController<PermissionModel> {
783
+ protected readonly model: typeof PermissionModel;
784
+ protected readonly permissions: never[];
785
+ protected add(ctx: Context, role_id: string, permissions: Array<string>): Promise<void>;
786
+ protected all(ctx: Context, role_id: string): Promise<void>;
787
+ protected del(ctx: Context, role_id: string, permissions: Array<string>): Promise<void>;
788
+ protected set(ctx: Context, role_id: string, permissions: Array<string>): Promise<void>;
789
+ private addPermissions;
790
+ private ensurePermissions;
791
+ private ensureRole;
792
+ }
793
+
738
794
  declare class SetupController extends BaseController {
739
795
  protected readonly userService: UserService;
740
796
  protected setup(ctx: Context): Promise<void>;
@@ -749,7 +805,7 @@ declare class TenantsController extends CrudController<TenantModel> {
749
805
  CrudValidateUpdate(): TypeObject<ValidationBase>;
750
806
  sync(): Promise<void>;
751
807
  protected users(ctx: Context, tenant_id: string): Promise<void>;
752
- private checkTenant;
808
+ private ensureTenant;
753
809
  }
754
810
 
755
811
  declare const McpErrorCode: {
@@ -762,7 +818,7 @@ declare const McpErrorCode: {
762
818
  readonly InvalidSession: -32001;
763
819
  };
764
820
  type McpErrorCode = typeof McpErrorCode[keyof typeof McpErrorCode];
765
- declare class McpError extends ResponseError {
821
+ declare class McpError extends HttpError {
766
822
  readonly code: McpErrorCode;
767
823
  readonly data?: unknown;
768
824
  constructor(message: string, code?: McpErrorCode, status?: number, data?: unknown);
@@ -1073,8 +1129,8 @@ declare class UsersGroupsController extends ModelController<GroupModel> {
1073
1129
  protected del(ctx: Context, user_id: string, groups: Array<string>): Promise<void>;
1074
1130
  protected set(ctx: Context, user_id: string, groups: Array<string>): Promise<void>;
1075
1131
  private addGroups;
1076
- private checkGroups;
1077
- private checkUser;
1132
+ private ensureGroups;
1133
+ private ensureUser;
1078
1134
  }
1079
1135
 
1080
1136
  declare class UsersKeysController extends ModelController<UserKeyModel> {
@@ -1082,9 +1138,15 @@ declare class UsersKeysController extends ModelController<UserKeyModel> {
1082
1138
  protected readonly permissions: string[];
1083
1139
  protected add(ctx: Context, user: UserModel, body: TypeAnyObject, app: Application): Promise<void>;
1084
1140
  protected add_admin(ctx: Context, id: string, body: TypeAnyObject, app: Application): Promise<void>;
1141
+ protected revoke(ctx: Context, id: string, user: UserModel, app: Application): Promise<void>;
1142
+ protected revoke_admin(ctx: Context, id: string, key: string, app: Application): Promise<void>;
1143
+ protected del(ctx: Context, id: string, user: UserModel, app: Application): Promise<void>;
1144
+ protected del_admin(ctx: Context, id: string, key: string, app: Application): Promise<void>;
1085
1145
  protected all(ctx: Context, user: UserModel): Promise<void>;
1146
+ protected get(ctx: Context, user: UserModel): Promise<void>;
1086
1147
  protected all_admin(ctx: Context, id: string): Promise<void>;
1087
- private checkUser;
1148
+ protected get_admin(ctx: Context, id: string): Promise<void>;
1149
+ private ensureUser;
1088
1150
  }
1089
1151
 
1090
1152
  declare class UsersTenantsController extends ModelController<TenantModel> {
@@ -1095,8 +1157,8 @@ declare class UsersTenantsController extends ModelController<TenantModel> {
1095
1157
  protected del(ctx: Context, user_id: string, tenants: Array<string>): Promise<void>;
1096
1158
  protected set(ctx: Context, user_id: string, tenants: Array<string>): Promise<void>;
1097
1159
  private addTenants;
1098
- private checkTenants;
1099
- private checkUser;
1160
+ private ensureTenants;
1161
+ private ensureUser;
1100
1162
  }
1101
1163
 
1102
1164
  declare const sequelize: Sequelize;
@@ -1140,14 +1202,7 @@ declare const McpTool: (options: McpToolOptions) => MethodDecorator;
1140
1202
 
1141
1203
  declare const Audit: (active?: boolean) => ClassDecorator;
1142
1204
 
1143
- declare const WORKER_METADATA: unique symbol;
1144
- interface WorkerMetadata extends WorkerDeclaration {
1145
- propertyKey: string | symbol;
1146
- }
1147
- declare const Worker: (name: string) => MethodDecorator;
1148
- declare const getWorkerMetadata: (target: object | TypeAnyConstructor<object>) => Array<WorkerMetadata>;
1149
- declare const discoverWorkers: (controllers: Array<object>) => Array<WorkerRegistered>;
1150
- declare const runWorker: (controllers: Array<object>, name: string) => Promise<unknown>;
1205
+ declare const RegisterWorker: (name: string) => ClassDecorator & MethodDecorator;
1151
1206
 
1152
1207
  declare class Env extends Env$1 {
1153
1208
  static readonly AUDIT_IGNORE: string[];
@@ -1202,5 +1257,20 @@ declare class Env extends Env$1 {
1202
1257
  static readonly API_WEBSOCKET_START: boolean;
1203
1258
  }
1204
1259
 
1205
- export { Application, Audit, AuditModel, AuditTypes, AuditsController, AuthController, AuthService, BaseController, CanCreate, CanDelete, CanRead, CanUpdate, Config, ConfigModel, CrudController, Env, FilesController, ForgotController, ForgotModel, GroupModel, GroupPermissionModel, GroupTypes, GroupsController, GroupsPermissionsController, HasGroups, HasPermissions, HasScope, HealthController, IsAuthenticated, Log, LogLevels, LogModel, Loggable, LogsController, MCP_DEFAULT_PROTOCOL_VERSION, MCP_HTTP_ALLOW, MCP_HTTP_ALLOWED_METHODS, MCP_HTTP_DEFAULT_ALLOWED_HEADERS, MCP_PROTOCOL_VERSION_HEADER, MCP_SESSION_ID_HEADER, MCP_SUPPORTED_PROTOCOL_VERSIONS, MCP_TOOL_METADATA, McpController, McpError, McpErrorCode, McpHttpHandler, McpInternalError, McpInvalidParamsError, McpInvalidRequestError, McpInvalidSessionError, McpMethodNotFoundError, McpParseError, McpServerError, McpSessionStore, McpTool, McpToolNotFoundError, McpToolRegistry, MigrationModel, ModelController, ModelService, PageModel, PageTypes, PagesController, PermissionModel, PermissionsController, ProfileController, RegisterController, RegisterModel, ReqAccess, ReqGroup, ReqGroups, ReqPermission, ReqPermissions, ReqTenant, ReqTenants, ReqUser, Secret, SecretModel, Service, SessionModel, SessionStore, SetupController, TenantModel, TenantStatus, TenantsController, TestController, UserAuthModel, UserGroupModel, UserKeyModel, UserModel, UserPasswordModel, UserService, UserStatus, UserTenantModel, UsersController, UsersGroupsController, UsersKeysController, UsersTenantsController, WORKER_METADATA, Worker, assertValidMcpToolDefinition, canFactory, discoverMcpTools, discoverWorkers, getMcpToolMetadata, getWorkerMetadata, isJsonParseError, isJsonRpcId, jsonParseErrorResponse, jsonRpcError, jsonRpcErrorFromCode, jsonRpcResult, parseJsonRpcRequest, runWorker, sequelize };
1206
- export type { ApplicationEvents, AuthEvents, AuthResult, ForgotEvents, McpCallToolResult, McpDecoratedToolHandler, McpHttpHandlerOptions, McpHttpResponse, McpJsonRpcErrorBody, McpJsonRpcErrorResult, McpJsonRpcId, McpJsonRpcRequest, McpJsonRpcResult, McpLogger, McpNormalizedValidation, McpProtocolVersion, McpRegisteredTool, McpSession, McpToolCallLog, McpToolContext, McpToolDeclaration, McpToolDefinition, McpToolHandlerResult, McpToolInput, McpToolMetadata, McpToolOptions, McpToolOutput, ModelArgumentsBase, ModelArgumentsCount, ModelArgumentsCreate, ModelArgumentsDelete, ModelArgumentsFindAll, ModelArgumentsFindOne, ModelArgumentsInclude, ModelArgumentsUpdate, ModelCallbackFindAll, ModelCallbackFindOne, ModelOptions, ModelResultFindAll, RegisterEvents, WorkerCliRequest, WorkerDeclaration, WorkerHandler, WorkerHandlerResult, WorkerMetadata, WorkerRegistered };
1260
+ declare class WorkerRegistry {
1261
+ private static workers;
1262
+ static register(name: string, handler: () => void | Promise<void>): void;
1263
+ static registerClass(name: string, target: WorkerConstructor): void;
1264
+ static registerMethod(name: string, target: object, propertyKey: string | symbol): void;
1265
+ static start(name: string): Promise<void>;
1266
+ static list(): Array<{
1267
+ name: string;
1268
+ }>;
1269
+ static names(): Array<string>;
1270
+ private static get;
1271
+ private static normalizeStartName;
1272
+ private static normalizeWorkerName;
1273
+ }
1274
+
1275
+ export { Application, Audit, AuditModel, AuditTypes, AuditsController, AuthController, AuthService, BaseController, CanCreate, CanDelete, CanRead, CanUpdate, Config, ConfigModel, CrudController, Env, FilesController, ForgotController, ForgotModel, GroupModel, GroupRoleModel, GroupTypes, GroupsController, GroupsPermissionsController, GroupsRolesController, HasGroups, HasPermissions, HasScope, HealthController, IsAuthenticated, Log, LogLevels, LogModel, Loggable, LogsController, MCP_DEFAULT_PROTOCOL_VERSION, MCP_HTTP_ALLOW, MCP_HTTP_ALLOWED_METHODS, MCP_HTTP_DEFAULT_ALLOWED_HEADERS, MCP_PROTOCOL_VERSION_HEADER, MCP_SESSION_ID_HEADER, MCP_SUPPORTED_PROTOCOL_VERSIONS, MCP_TOOL_METADATA, McpController, McpError, McpErrorCode, McpHttpHandler, McpInternalError, McpInvalidParamsError, McpInvalidRequestError, McpInvalidSessionError, McpMethodNotFoundError, McpParseError, McpServerError, McpSessionStore, McpTool, McpToolNotFoundError, McpToolRegistry, MigrationModel, ModelController, ModelService, PageModel, PageTypes, PagesController, PermissionModel, PermissionsController, ProfileController, RegisterController, RegisterModel, RegisterWorker, ReqAccess, ReqGroup, ReqGroups, ReqPermission, ReqPermissions, ReqTenant, ReqTenants, ReqUser, RoleModel, RolePermissionModel, RolesController, RolesPermissionsController, Secret, SecretModel, Service, SessionModel, SessionStore, SetupController, TenantModel, TenantStatus, TenantsController, TestController, UserAuthModel, UserGroupModel, UserKeyModel, UserModel, UserPasswordModel, UserService, UserStatus, UserTenantModel, UsersController, UsersGroupsController, UsersKeysController, UsersTenantsController, WorkerRegistry, assertValidMcpToolDefinition, canFactory, discoverMcpTools, getMcpToolMetadata, isJsonParseError, isJsonRpcId, jsonParseErrorResponse, jsonRpcError, jsonRpcErrorFromCode, jsonRpcResult, parseJsonRpcRequest, sequelize };
1276
+ export type { ApplicationEvents, AuthEvents, AuthResult, ForgotEvents, McpCallToolResult, McpDecoratedToolHandler, McpHttpHandlerOptions, McpHttpResponse, McpJsonRpcErrorBody, McpJsonRpcErrorResult, McpJsonRpcId, McpJsonRpcRequest, McpJsonRpcResult, McpLogger, McpNormalizedValidation, McpProtocolVersion, McpRegisteredTool, McpSession, McpToolCallLog, McpToolContext, McpToolDeclaration, McpToolDefinition, McpToolHandlerResult, McpToolInput, McpToolMetadata, McpToolOptions, McpToolOutput, ModelArgumentsBase, ModelArgumentsCount, ModelArgumentsCreate, ModelArgumentsDelete, ModelArgumentsFindAll, ModelArgumentsFindOne, ModelArgumentsInclude, ModelArgumentsUpdate, ModelCallbackFindAll, ModelCallbackFindOne, ModelOptions, ModelResultFindAll, RegisterEvents, WorkerConstructor, WorkerDefinition, WorkerInstance };