@loomcore/common 0.0.19 → 0.0.20

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.
@@ -7,10 +7,10 @@ export interface IAuditable {
7
7
  _deletedBy?: string;
8
8
  }
9
9
  export declare const AuditableSchema: import("@sinclair/typebox").TObject<{
10
- _created: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>, import("@sinclair/typebox").TUndefined]>;
10
+ _created: import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>;
11
11
  _createdBy: import("@sinclair/typebox").TString;
12
- _updated: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>, import("@sinclair/typebox").TUndefined]>;
12
+ _updated: import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>;
13
13
  _updatedBy: import("@sinclair/typebox").TString;
14
- _deleted: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>, import("@sinclair/typebox").TUndefined]>>;
14
+ _deleted: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>>;
15
15
  _deletedBy: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
16
16
  }>;
@@ -0,0 +1,10 @@
1
+ import { IAuditable, IEntity } from "./index.js";
2
+ export interface IAuthorization extends IEntity, IAuditable {
3
+ feature: string;
4
+ config?: object;
5
+ }
6
+ export declare const authorizationSchema: import("@sinclair/typebox").TObject<{
7
+ feature: import("@sinclair/typebox").TString;
8
+ config: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{}>>;
9
+ }>;
10
+ export declare const authorizationModelSpec: import("./model-spec.interface.js").IModelSpec<import("@sinclair/typebox").TSchema>;
@@ -0,0 +1,7 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ import { entityUtils } from "../utils/index.js";
3
+ export const authorizationSchema = Type.Object({
4
+ feature: Type.String({ minLength: 1 }),
5
+ config: Type.Optional(Type.Object({}))
6
+ });
7
+ export const authorizationModelSpec = entityUtils.getModelSpec(authorizationSchema, { isAuditable: true });
@@ -8,7 +8,6 @@ export interface IModelSpec<T extends TSchema = TSchema> {
8
8
  partialValidator: ReturnType<typeof TypeCompiler.Compile>;
9
9
  fullValidator: ReturnType<typeof TypeCompiler.Compile>;
10
10
  isAuditable?: boolean;
11
- isMultiTenant?: boolean;
12
11
  encode: <E>(entity: E, overrideSchema?: TSchema) => any;
13
12
  decode: <E>(entity: any) => E;
14
13
  clean: <E>(entity: E) => E;
@@ -17,6 +17,14 @@ export function initializeSystemUserContext(systemEmail, metaOrgId) {
17
17
  _id: 'system',
18
18
  email: systemEmail,
19
19
  password: '',
20
+ authorizations: [{
21
+ _id: 'system',
22
+ feature: 'system',
23
+ _created: new Date(),
24
+ _createdBy: 'system',
25
+ _updated: new Date(),
26
+ _updatedBy: 'system',
27
+ }],
20
28
  _created: new Date(),
21
29
  _createdBy: 'system',
22
30
  _updated: new Date(),
@@ -1,12 +1,13 @@
1
1
  import { IAuditable } from './auditable.model.js';
2
2
  import { IEntity } from './entity.model.js';
3
+ import { IAuthorization } from './authorization.model.js';
3
4
  export interface IUser extends IAuditable, IEntity {
4
5
  email: string;
5
6
  firstName?: string;
6
7
  lastName?: string;
7
8
  displayName?: string;
8
9
  password: string;
9
- roles?: string[];
10
+ authorizations: IAuthorization[];
10
11
  _lastLoggedIn?: Date;
11
12
  _lastPasswordChange?: Date;
12
13
  }
@@ -23,8 +24,8 @@ export declare const UserSchema: import("@sinclair/typebox").TObject<{
23
24
  displayName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
24
25
  password: import("@sinclair/typebox").TString;
25
26
  roles: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
26
- _lastLoggedIn: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>, import("@sinclair/typebox").TUndefined]>>;
27
- _lastPasswordChange: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>, import("@sinclair/typebox").TUndefined]>>;
27
+ _lastLoggedIn: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>>;
28
+ _lastPasswordChange: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>>;
28
29
  }>;
29
30
  export declare const UserSpec: import("./model-spec.interface.js").IModelSpec<import("@sinclair/typebox").TSchema>;
30
31
  export declare const PublicUserSchema: import("@sinclair/typebox").TObject<{}>;
@@ -6,7 +6,6 @@ import { IModelSpec } from '../models/model-spec.interface.js';
6
6
  declare function getValidator(schema: TSchema): ReturnType<typeof TypeCompiler.Compile>;
7
7
  declare function getModelSpec<T extends TSchema>(schema: T, options?: {
8
8
  isAuditable?: boolean;
9
- isMultiTenant?: boolean;
10
9
  }): IModelSpec;
11
10
  declare function validate(validator: ReturnType<typeof TypeCompiler.Compile>, data: unknown): ValueError[] | null;
12
11
  declare function handleValidationResult(validationErrors: ValueError[] | null, methodName: string): void;
@@ -46,7 +46,6 @@ function getModelSpec(schema, options = {}) {
46
46
  partialValidator,
47
47
  fullValidator,
48
48
  isAuditable: !!options.isAuditable,
49
- isMultiTenant: !!options.isMultiTenant,
50
49
  encode,
51
50
  decode,
52
51
  clean
@@ -70,11 +69,6 @@ function isValidObjectId(id) {
70
69
  if (typeof id === 'string' || id instanceof String) {
71
70
  result = id.match(/^[0-9a-fA-F]{24}$/) ? true : false;
72
71
  }
73
- else {
74
- console.log(`entityUtils.isValidObjectId called with something other than a string. id = ${id}`);
75
- console.log(`typeof id = ${typeof id}`);
76
- console.log('id = ', id);
77
- }
78
72
  return result;
79
73
  }
80
74
  function isAuditable(entity) {
@@ -1,6 +1,6 @@
1
1
  import { Kind, TSchema, NumberOptions } from '@sinclair/typebox';
2
- export declare function TypeboxIsoDate(options?: object): import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>, import("@sinclair/typebox").TUndefined]>;
3
- export declare function TypeboxDate(options?: object): import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>, import("@sinclair/typebox").TUndefined]>;
2
+ export declare function TypeboxIsoDate(options?: object): import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>;
3
+ export declare function TypeboxDate(options?: object): import("@sinclair/typebox").TTransform<import("@sinclair/typebox").TString, Date>;
4
4
  export declare function TypeboxObjectId(options?: object): import("@sinclair/typebox").TString;
5
5
  export interface TDecimal extends TSchema, NumberOptions {
6
6
  [Kind]: 'Decimal';
@@ -6,7 +6,7 @@ export function TypeboxIsoDate(options = {}) {
6
6
  const dateTransform = Type.Transform(Type.String({ format: 'date-time', ...options }))
7
7
  .Decode(value => new Date(value))
8
8
  .Encode(value => value.toISOString());
9
- return Type.Union([dateTransform, Type.Undefined()]);
9
+ return dateTransform;
10
10
  }
11
11
  export function TypeboxDate(options = {}) {
12
12
  const dateTransform = Type.Transform(Type.String({ format: 'date', ...options }))
@@ -18,7 +18,7 @@ export function TypeboxDate(options = {}) {
18
18
  .Encode(value => {
19
19
  return value.toISOString().split('T')[0];
20
20
  });
21
- return Type.Union([dateTransform, Type.Undefined()]);
21
+ return dateTransform;
22
22
  }
23
23
  export function TypeboxObjectId(options = {}) {
24
24
  return Type.String({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loomcore/common",
3
- "version": "0.0.19",
3
+ "version": "0.0.20",
4
4
  "private": false,
5
5
  "description": "Loom Core Models- common models, interfaces, types, and utils for Loom Core. All things common to both api and client apps.",
6
6
  "scripts": {
@@ -39,6 +39,7 @@
39
39
  "decimal.js": "^10.5.0"
40
40
  },
41
41
  "peerDependencies": {
42
+ "@types/node": "^24.10.2",
42
43
  "@sinclair/typebox": "0.34.33"
43
44
  },
44
45
  "devDependencies": {