alepha 0.13.5 → 0.13.7

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.
Files changed (136) hide show
  1. package/dist/api-audits/index.browser.js +116 -0
  2. package/dist/api-audits/index.browser.js.map +1 -0
  3. package/dist/api-audits/index.d.ts +1194 -0
  4. package/dist/api-audits/index.js +674 -0
  5. package/dist/api-audits/index.js.map +1 -0
  6. package/dist/api-notifications/index.d.ts +147 -147
  7. package/dist/api-parameters/index.browser.js +36 -5
  8. package/dist/api-parameters/index.browser.js.map +1 -1
  9. package/dist/api-parameters/index.d.ts +711 -33
  10. package/dist/api-parameters/index.js +831 -17
  11. package/dist/api-parameters/index.js.map +1 -1
  12. package/dist/api-users/index.d.ts +16 -3
  13. package/dist/api-users/index.js +699 -19
  14. package/dist/api-users/index.js.map +1 -1
  15. package/dist/api-verifications/index.js +2 -1
  16. package/dist/api-verifications/index.js.map +1 -1
  17. package/dist/bin/index.js +1 -0
  18. package/dist/bin/index.js.map +1 -1
  19. package/dist/cli/index.d.ts +85 -31
  20. package/dist/cli/index.js +205 -33
  21. package/dist/cli/index.js.map +1 -1
  22. package/dist/command/index.d.ts +67 -6
  23. package/dist/command/index.js +30 -3
  24. package/dist/command/index.js.map +1 -1
  25. package/dist/core/index.browser.js +241 -61
  26. package/dist/core/index.browser.js.map +1 -1
  27. package/dist/core/index.d.ts +170 -90
  28. package/dist/core/index.js +264 -67
  29. package/dist/core/index.js.map +1 -1
  30. package/dist/core/index.native.js +248 -65
  31. package/dist/core/index.native.js.map +1 -1
  32. package/dist/email/index.js +15 -10554
  33. package/dist/email/index.js.map +1 -1
  34. package/dist/logger/index.d.ts +4 -4
  35. package/dist/logger/index.js +77 -72
  36. package/dist/logger/index.js.map +1 -1
  37. package/dist/orm/index.d.ts +5 -1
  38. package/dist/orm/index.js +24 -7
  39. package/dist/orm/index.js.map +1 -1
  40. package/dist/queue/index.d.ts +4 -4
  41. package/dist/redis/index.d.ts +10 -10
  42. package/dist/security/index.d.ts +28 -28
  43. package/dist/server/index.d.ts +10 -1
  44. package/dist/server/index.js +20 -6
  45. package/dist/server/index.js.map +1 -1
  46. package/dist/server-auth/index.d.ts +163 -152
  47. package/dist/server-auth/index.js +40 -10
  48. package/dist/server-auth/index.js.map +1 -1
  49. package/dist/server-cookies/index.js +5 -1
  50. package/dist/server-cookies/index.js.map +1 -1
  51. package/dist/server-links/index.d.ts +33 -33
  52. package/dist/server-security/index.d.ts +9 -9
  53. package/dist/thread/index.js +2 -2
  54. package/dist/thread/index.js.map +1 -1
  55. package/dist/vite/index.d.ts +2 -2
  56. package/dist/vite/index.js +102 -45
  57. package/dist/vite/index.js.map +1 -1
  58. package/dist/websocket/index.browser.js +3 -3
  59. package/dist/websocket/index.browser.js.map +1 -1
  60. package/dist/websocket/index.d.ts +7 -7
  61. package/dist/websocket/index.js +4 -4
  62. package/dist/websocket/index.js.map +1 -1
  63. package/package.json +14 -9
  64. package/src/api-audits/controllers/AuditController.ts +186 -0
  65. package/src/api-audits/entities/audits.ts +132 -0
  66. package/src/api-audits/index.browser.ts +18 -0
  67. package/src/api-audits/index.ts +58 -0
  68. package/src/api-audits/primitives/$audit.ts +159 -0
  69. package/src/api-audits/schemas/auditQuerySchema.ts +23 -0
  70. package/src/api-audits/schemas/auditResourceSchema.ts +9 -0
  71. package/src/api-audits/schemas/createAuditSchema.ts +27 -0
  72. package/src/api-audits/services/AuditService.ts +412 -0
  73. package/src/api-parameters/controllers/ConfigController.ts +324 -0
  74. package/src/api-parameters/entities/parameters.ts +93 -10
  75. package/src/api-parameters/index.ts +43 -4
  76. package/src/api-parameters/primitives/$config.ts +291 -19
  77. package/src/api-parameters/schedulers/ConfigActivationScheduler.ts +30 -0
  78. package/src/api-parameters/services/ConfigStore.ts +491 -0
  79. package/src/api-users/atoms/realmAuthSettingsAtom.ts +19 -0
  80. package/src/api-users/controllers/UserRealmController.ts +0 -2
  81. package/src/api-users/index.ts +2 -0
  82. package/src/api-users/primitives/$userRealm.ts +18 -3
  83. package/src/api-users/providers/UserRealmProvider.ts +6 -3
  84. package/src/api-users/services/RegistrationService.ts +2 -1
  85. package/src/api-users/services/SessionService.ts +4 -0
  86. package/src/api-users/services/UserService.ts +3 -0
  87. package/src/api-verifications/index.ts +7 -1
  88. package/src/bin/index.ts +1 -0
  89. package/src/cli/assets/biomeJson.ts +1 -1
  90. package/src/cli/assets/dummySpecTs.ts +7 -0
  91. package/src/cli/assets/editorconfig.ts +13 -0
  92. package/src/cli/assets/mainTs.ts +14 -0
  93. package/src/cli/commands/BiomeCommands.ts +2 -0
  94. package/src/cli/commands/CoreCommands.ts +28 -9
  95. package/src/cli/commands/VerifyCommands.ts +2 -1
  96. package/src/cli/commands/ViteCommands.ts +8 -9
  97. package/src/cli/services/AlephaCliUtils.ts +214 -23
  98. package/src/command/helpers/Asker.ts +0 -1
  99. package/src/command/primitives/$command.ts +67 -0
  100. package/src/command/providers/CliProvider.ts +39 -8
  101. package/src/core/Alepha.ts +40 -30
  102. package/src/core/helpers/jsonSchemaToTypeBox.ts +307 -0
  103. package/src/core/index.shared.ts +1 -0
  104. package/src/core/index.ts +30 -3
  105. package/src/core/providers/EventManager.ts +1 -1
  106. package/src/core/providers/StateManager.ts +23 -12
  107. package/src/core/providers/TypeProvider.ts +26 -34
  108. package/src/logger/index.ts +8 -6
  109. package/src/logger/primitives/$logger.ts +1 -1
  110. package/src/logger/providers/{SimpleFormatterProvider.ts → PrettyFormatterProvider.ts} +10 -1
  111. package/src/orm/index.ts +6 -0
  112. package/src/orm/services/PgRelationManager.ts +2 -2
  113. package/src/orm/services/PostgresModelBuilder.ts +11 -7
  114. package/src/orm/services/Repository.ts +16 -7
  115. package/src/orm/services/SqliteModelBuilder.ts +10 -0
  116. package/src/server/index.ts +6 -0
  117. package/src/server/primitives/$action.ts +10 -1
  118. package/src/server/providers/ServerBodyParserProvider.ts +11 -5
  119. package/src/server/providers/ServerRouterProvider.ts +13 -7
  120. package/src/server-auth/primitives/$auth.ts +7 -0
  121. package/src/server-auth/providers/ServerAuthProvider.ts +51 -8
  122. package/src/server-cookies/index.ts +2 -1
  123. package/src/thread/primitives/$thread.ts +2 -2
  124. package/src/vite/index.ts +0 -2
  125. package/src/vite/tasks/buildServer.ts +3 -4
  126. package/src/vite/tasks/generateCloudflare.ts +35 -19
  127. package/src/vite/tasks/generateDocker.ts +18 -4
  128. package/src/vite/tasks/generateSitemap.ts +5 -7
  129. package/src/vite/tasks/generateVercel.ts +76 -41
  130. package/src/vite/tasks/runAlepha.ts +16 -1
  131. package/src/websocket/providers/NodeWebSocketServerProvider.ts +3 -11
  132. package/src/websocket/services/WebSocketClient.ts +3 -3
  133. package/dist/cli/dist-BlfFtOk2.js +0 -2770
  134. package/dist/cli/dist-BlfFtOk2.js.map +0 -1
  135. package/src/api-parameters/controllers/ParameterController.ts +0 -45
  136. package/src/api-parameters/services/ParameterStore.ts +0 -23
@@ -1,6 +1,6 @@
1
1
  import * as alepha1 from "alepha";
2
2
  import { Alepha, KIND, Primitive, Service, Static, TSchema } from "alepha";
3
- import * as alepha_logger1 from "alepha/logger";
3
+ import * as alepha_logger0 from "alepha/logger";
4
4
  import { DateTimeProvider } from "alepha/datetime";
5
5
 
6
6
  //#region ../../src/queue/interfaces/QueueJob.d.ts
@@ -600,7 +600,7 @@ interface JobWaiter {
600
600
  * - Scenarios where job persistence across restarts is not required
601
601
  */
602
602
  declare class MemoryQueueProvider extends QueueProvider {
603
- protected readonly log: alepha_logger1.Logger;
603
+ protected readonly log: alepha_logger0.Logger;
604
604
  protected messageQueues: Record<string, string[]>;
605
605
  protected messageWaiters: Set<MessageWaiter>;
606
606
  protected jobs: Map<string, Map<string, QueueJob>>;
@@ -947,7 +947,7 @@ interface QueuePrimitiveOptions<T extends TSchema> {
947
947
  removeOnFail?: boolean | number;
948
948
  }
949
949
  declare class QueuePrimitive<T extends TSchema> extends Primitive<QueuePrimitiveOptions<T>> {
950
- protected readonly log: alepha_logger1.Logger;
950
+ protected readonly log: alepha_logger0.Logger;
951
951
  readonly provider: QueueProvider | MemoryQueueProvider;
952
952
  /**
953
953
  * Push one or more payloads to the queue for background processing.
@@ -1180,7 +1180,7 @@ declare module "alepha" {
1180
1180
  interface Env extends Partial<Static<typeof envSchema>> {}
1181
1181
  }
1182
1182
  declare class WorkerProvider {
1183
- protected readonly log: alepha_logger1.Logger;
1183
+ protected readonly log: alepha_logger0.Logger;
1184
1184
  protected readonly env: {
1185
1185
  QUEUE_WORKER_BLOCKING_TIMEOUT: number;
1186
1186
  QUEUE_WORKER_CONCURRENCY: number;
@@ -1,13 +1,13 @@
1
- import * as alepha1 from "alepha";
1
+ import * as alepha3 from "alepha";
2
2
  import { Alepha, Static } from "alepha";
3
3
  import { RedisClientType, SetOptions, createClient } from "@redis/client";
4
4
  import * as alepha_logger0 from "alepha/logger";
5
5
 
6
6
  //#region ../../src/redis/providers/RedisProvider.d.ts
7
- declare const envSchema: alepha1.TObject<{
8
- REDIS_PORT: alepha1.TInteger;
9
- REDIS_HOST: alepha1.TString;
10
- REDIS_PASSWORD: alepha1.TOptional<alepha1.TString>;
7
+ declare const envSchema: alepha3.TObject<{
8
+ REDIS_PORT: alepha3.TInteger;
9
+ REDIS_HOST: alepha3.TString;
10
+ REDIS_PASSWORD: alepha3.TOptional<alepha3.TString>;
11
11
  }>;
12
12
  declare module "alepha" {
13
13
  interface Env extends Partial<Static<typeof envSchema>> {}
@@ -30,8 +30,8 @@ declare class RedisProvider {
30
30
  };
31
31
  protected readonly client: RedisClient;
32
32
  get publisher(): RedisClient;
33
- protected readonly start: alepha1.HookPrimitive<"start">;
34
- protected readonly stop: alepha1.HookPrimitive<"stop">;
33
+ protected readonly start: alepha3.HookPrimitive<"start">;
34
+ protected readonly stop: alepha3.HookPrimitive<"stop">;
35
35
  /**
36
36
  * Connect to the Redis server.
37
37
  */
@@ -59,8 +59,8 @@ declare class RedisSubscriberProvider {
59
59
  protected readonly redisProvider: RedisProvider;
60
60
  protected readonly client: RedisClient;
61
61
  get subscriber(): RedisClient;
62
- protected readonly start: alepha1.HookPrimitive<"start">;
63
- protected readonly stop: alepha1.HookPrimitive<"stop">;
62
+ protected readonly start: alepha3.HookPrimitive<"start">;
63
+ protected readonly stop: alepha3.HookPrimitive<"stop">;
64
64
  connect(): Promise<void>;
65
65
  close(): Promise<void>;
66
66
  /**
@@ -76,7 +76,7 @@ declare class RedisSubscriberProvider {
76
76
  * @see {@link RedisProvider}
77
77
  * @module alepha.redis
78
78
  */
79
- declare const AlephaRedis: alepha1.Service<alepha1.Module>;
79
+ declare const AlephaRedis: alepha3.Service<alepha3.Module>;
80
80
  //#endregion
81
81
  export { AlephaRedis, RedisClient, RedisClientOptions, RedisProvider, RedisSetOptions, RedisSubscriberProvider };
82
82
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
- import * as alepha15 from "alepha";
1
+ import * as alepha1 from "alepha";
2
2
  import { Alepha, KIND, Primitive, Static } from "alepha";
3
3
  import * as alepha_logger0 from "alepha/logger";
4
4
  import { DateTimeProvider, Duration, DurationLike } from "alepha/datetime";
@@ -7,15 +7,15 @@ import { CryptoKey, FlattenedJWSInput, JSONWebKeySet, JWSHeaderParameters, JWTHe
7
7
  import { JWTVerifyOptions } from "jose/jwt/verify";
8
8
 
9
9
  //#region ../../src/security/schemas/userAccountInfoSchema.d.ts
10
- declare const userAccountInfoSchema: alepha15.TObject<{
11
- id: alepha15.TString;
12
- name: alepha15.TOptional<alepha15.TString>;
13
- email: alepha15.TOptional<alepha15.TString>;
14
- username: alepha15.TOptional<alepha15.TString>;
15
- picture: alepha15.TOptional<alepha15.TString>;
16
- sessionId: alepha15.TOptional<alepha15.TString>;
17
- organizations: alepha15.TOptional<alepha15.TArray<alepha15.TString>>;
18
- roles: alepha15.TOptional<alepha15.TArray<alepha15.TString>>;
10
+ declare const userAccountInfoSchema: alepha1.TObject<{
11
+ id: alepha1.TString;
12
+ name: alepha1.TOptional<alepha1.TString>;
13
+ email: alepha1.TOptional<alepha1.TString>;
14
+ username: alepha1.TOptional<alepha1.TString>;
15
+ picture: alepha1.TOptional<alepha1.TString>;
16
+ sessionId: alepha1.TOptional<alepha1.TString>;
17
+ organizations: alepha1.TOptional<alepha1.TArray<alepha1.TString>>;
18
+ roles: alepha1.TOptional<alepha1.TArray<alepha1.TString>>;
19
19
  }>;
20
20
  type UserAccount = Static<typeof userAccountInfoSchema>;
21
21
  //#endregion
@@ -64,24 +64,24 @@ interface UserAccountToken extends UserAccount {
64
64
  }
65
65
  //#endregion
66
66
  //#region ../../src/security/schemas/permissionSchema.d.ts
67
- declare const permissionSchema: alepha15.TObject<{
68
- name: alepha15.TString;
69
- group: alepha15.TOptional<alepha15.TString>;
70
- description: alepha15.TOptional<alepha15.TString>;
71
- method: alepha15.TOptional<alepha15.TString>;
72
- path: alepha15.TOptional<alepha15.TString>;
67
+ declare const permissionSchema: alepha1.TObject<{
68
+ name: alepha1.TString;
69
+ group: alepha1.TOptional<alepha1.TString>;
70
+ description: alepha1.TOptional<alepha1.TString>;
71
+ method: alepha1.TOptional<alepha1.TString>;
72
+ path: alepha1.TOptional<alepha1.TString>;
73
73
  }>;
74
74
  type Permission = Static<typeof permissionSchema>;
75
75
  //#endregion
76
76
  //#region ../../src/security/schemas/roleSchema.d.ts
77
- declare const roleSchema: alepha15.TObject<{
78
- name: alepha15.TString;
79
- description: alepha15.TOptional<alepha15.TString>;
80
- default: alepha15.TOptional<alepha15.TBoolean>;
81
- permissions: alepha15.TArray<alepha15.TObject<{
82
- name: alepha15.TString;
83
- ownership: alepha15.TOptional<alepha15.TBoolean>;
84
- exclude: alepha15.TOptional<alepha15.TArray<alepha15.TString>>;
77
+ declare const roleSchema: alepha1.TObject<{
78
+ name: alepha1.TString;
79
+ description: alepha1.TOptional<alepha1.TString>;
80
+ default: alepha1.TOptional<alepha1.TBoolean>;
81
+ permissions: alepha1.TArray<alepha1.TObject<{
82
+ name: alepha1.TString;
83
+ ownership: alepha1.TOptional<alepha1.TBoolean>;
84
+ exclude: alepha1.TOptional<alepha1.TArray<alepha1.TString>>;
85
85
  }>>;
86
86
  }>;
87
87
  type Role = Static<typeof roleSchema>;
@@ -154,8 +154,8 @@ interface JwtParseResult {
154
154
  //#endregion
155
155
  //#region ../../src/security/providers/SecurityProvider.d.ts
156
156
  declare const DEFAULT_APP_SECRET = "05759934015388327323179852515731";
157
- declare const envSchema: alepha15.TObject<{
158
- APP_SECRET: alepha15.TString;
157
+ declare const envSchema: alepha1.TObject<{
158
+ APP_SECRET: alepha1.TString;
159
159
  }>;
160
160
  declare module "alepha" {
161
161
  interface Env extends Partial<Static<typeof envSchema>> {}
@@ -179,7 +179,7 @@ declare class SecurityProvider {
179
179
  * The realms configured for the security provider.
180
180
  */
181
181
  protected readonly realms: Realm[];
182
- protected start: alepha15.HookPrimitive<"start">;
182
+ protected start: alepha1.HookPrimitive<"start">;
183
183
  /**
184
184
  * Adds a role to one or more realms.
185
185
  *
@@ -592,7 +592,7 @@ declare module "alepha" {
592
592
  * @see {@link $permission}
593
593
  * @module alepha.security
594
594
  */
595
- declare const AlephaSecurity: alepha15.Service<alepha15.Module>;
595
+ declare const AlephaSecurity: alepha1.Service<alepha1.Module>;
596
596
  //#endregion
597
597
  export { $permission, $realm, $role, $serviceAccount, AccessTokenResponse, AlephaSecurity, CreateTokenOptions, CryptoProvider, DEFAULT_APP_SECRET, ExtendedJWTPayload, InvalidCredentialsError, InvalidPermissionError, JwtParseResult, JwtProvider, JwtSignOptions, KeyLoader, KeyLoaderHolder, Oauth2ServiceAccountPrimitiveOptions, Permission, PermissionPrimitive, PermissionPrimitiveOptions, Realm, RealmExternal, RealmInternal, RealmPrimitive, RealmPrimitiveOptions, RealmSettings, Role, RolePrimitive, RolePrimitiveOptions, SecurityCheckResult, SecurityError, SecurityProvider, ServiceAccountPrimitive, ServiceAccountPrimitiveOptions, ServiceAccountStore, UserAccount, UserAccountToken, permissionSchema, roleSchema, userAccountInfoSchema };
598
598
  //# sourceMappingURL=index.d.ts.map
@@ -406,7 +406,16 @@ interface HttpAction {
406
406
  * - Automatic content-type handling (JSON, form-data, plain text)
407
407
  *
408
408
  * **URL Generation**
409
- * Actions are prefixed with `/api` by default (configurable via `SERVER_API_PREFIX`).
409
+ *
410
+ * **Important:** All `$action` paths are automatically prefixed with `/api`.
411
+ *
412
+ * ```ts
413
+ * $action({ path: "/users" }) // → GET /api/users
414
+ * $action({ path: "/users/:id" }) // → GET /api/users/:id
415
+ * $action({ path: "/hello" }) // → GET /api/hello
416
+ * ```
417
+ *
418
+ * This prefix is configurable via the `SERVER_API_PREFIX` environment variable.
410
419
  * HTTP method defaults to GET, or POST if body schema is provided.
411
420
  *
412
421
  * **Common Use Cases**
@@ -510,7 +510,9 @@ var ServerRouterProvider = class extends RouterProvider {
510
510
  } catch (error) {
511
511
  throw new ValidationError("Invalid request header", error);
512
512
  }
513
- if (route.schema?.body) try {
513
+ if (route.schema?.body) if (t.schema.isString(route.schema.body)) {
514
+ if (typeof request.body !== "string") throw new ValidationError("Request body is not a string");
515
+ } else try {
514
516
  request.body = this.alepha.codec.decode(route.schema.body, request.body);
515
517
  } catch (error) {
516
518
  throw new ValidationError("Invalid request body", error);
@@ -957,7 +959,16 @@ var HttpClient = class {
957
959
  * - Automatic content-type handling (JSON, form-data, plain text)
958
960
  *
959
961
  * **URL Generation**
960
- * Actions are prefixed with `/api` by default (configurable via `SERVER_API_PREFIX`).
962
+ *
963
+ * **Important:** All `$action` paths are automatically prefixed with `/api`.
964
+ *
965
+ * ```ts
966
+ * $action({ path: "/users" }) // → GET /api/users
967
+ * $action({ path: "/users/:id" }) // → GET /api/users/:id
968
+ * $action({ path: "/hello" }) // → GET /api/hello
969
+ * ```
970
+ *
971
+ * This prefix is configurable via the `SERVER_API_PREFIX` environment variable.
961
972
  * HTTP method defaults to GET, or POST if body schema is provided.
962
973
  *
963
974
  * **Common Use Cases**
@@ -1363,7 +1374,7 @@ var ServerBodyParserProvider = class {
1363
1374
  else if (request.raw.node?.req) stream = ReadableStream$1.from(request.raw.node.req);
1364
1375
  if (!stream) return;
1365
1376
  if (route.schema?.body) try {
1366
- const body = await this.parse(stream, request.headers);
1377
+ const body = await this.parse(stream, request.headers, route.schema.body);
1367
1378
  if (body) request.body = body;
1368
1379
  } catch (error) {
1369
1380
  if (error instanceof HttpError) throw error;
@@ -1374,12 +1385,12 @@ var ServerBodyParserProvider = class {
1374
1385
  }
1375
1386
  }
1376
1387
  });
1377
- async parse(stream, headers) {
1388
+ async parse(stream, headers, schema) {
1378
1389
  const contentType = headers["content-type"];
1379
1390
  const contentEncoding = headers["content-encoding"];
1380
1391
  if (!contentType) return void 0;
1392
+ if (contentType.startsWith("text/plain") || t.schema.isString(schema)) return this.parseText(stream, contentEncoding);
1381
1393
  if (contentType.startsWith("application/json")) return this.parseJson(stream, contentEncoding);
1382
- if (contentType.startsWith("text/plain")) return this.parseText(stream, contentEncoding);
1383
1394
  if (contentType.startsWith("application/x-www-form-urlencoded")) return this.parseUrlEncoded(stream, contentEncoding);
1384
1395
  }
1385
1396
  async parseText(stream, contentEncoding) {
@@ -1628,7 +1639,10 @@ const AlephaServer = $module({
1628
1639
  ServerLoggerProvider,
1629
1640
  ServerNotReadyProvider,
1630
1641
  ServerTimingProvider,
1631
- HttpClient
1642
+ HttpClient,
1643
+ UserAgentParser,
1644
+ ServerRequestParser,
1645
+ ServerRouterProvider
1632
1646
  ],
1633
1647
  register: (alepha) => {
1634
1648
  if (!alepha.isServerless() && !alepha.isViteDev()) if (alepha.isBun()) alepha.with({