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.
- package/dist/api-audits/index.browser.js +116 -0
- package/dist/api-audits/index.browser.js.map +1 -0
- package/dist/api-audits/index.d.ts +1194 -0
- package/dist/api-audits/index.js +674 -0
- package/dist/api-audits/index.js.map +1 -0
- package/dist/api-notifications/index.d.ts +147 -147
- package/dist/api-parameters/index.browser.js +36 -5
- package/dist/api-parameters/index.browser.js.map +1 -1
- package/dist/api-parameters/index.d.ts +711 -33
- package/dist/api-parameters/index.js +831 -17
- package/dist/api-parameters/index.js.map +1 -1
- package/dist/api-users/index.d.ts +16 -3
- package/dist/api-users/index.js +699 -19
- package/dist/api-users/index.js.map +1 -1
- package/dist/api-verifications/index.js +2 -1
- package/dist/api-verifications/index.js.map +1 -1
- package/dist/bin/index.js +1 -0
- package/dist/bin/index.js.map +1 -1
- package/dist/cli/index.d.ts +85 -31
- package/dist/cli/index.js +205 -33
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +67 -6
- package/dist/command/index.js +30 -3
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +241 -61
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +170 -90
- package/dist/core/index.js +264 -67
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +248 -65
- package/dist/core/index.native.js.map +1 -1
- package/dist/email/index.js +15 -10554
- package/dist/email/index.js.map +1 -1
- package/dist/logger/index.d.ts +4 -4
- package/dist/logger/index.js +77 -72
- package/dist/logger/index.js.map +1 -1
- package/dist/orm/index.d.ts +5 -1
- package/dist/orm/index.js +24 -7
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/index.d.ts +4 -4
- package/dist/redis/index.d.ts +10 -10
- package/dist/security/index.d.ts +28 -28
- package/dist/server/index.d.ts +10 -1
- package/dist/server/index.js +20 -6
- package/dist/server/index.js.map +1 -1
- package/dist/server-auth/index.d.ts +163 -152
- package/dist/server-auth/index.js +40 -10
- package/dist/server-auth/index.js.map +1 -1
- package/dist/server-cookies/index.js +5 -1
- package/dist/server-cookies/index.js.map +1 -1
- package/dist/server-links/index.d.ts +33 -33
- package/dist/server-security/index.d.ts +9 -9
- package/dist/thread/index.js +2 -2
- package/dist/thread/index.js.map +1 -1
- package/dist/vite/index.d.ts +2 -2
- package/dist/vite/index.js +102 -45
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js +3 -3
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +7 -7
- package/dist/websocket/index.js +4 -4
- package/dist/websocket/index.js.map +1 -1
- package/package.json +14 -9
- package/src/api-audits/controllers/AuditController.ts +186 -0
- package/src/api-audits/entities/audits.ts +132 -0
- package/src/api-audits/index.browser.ts +18 -0
- package/src/api-audits/index.ts +58 -0
- package/src/api-audits/primitives/$audit.ts +159 -0
- package/src/api-audits/schemas/auditQuerySchema.ts +23 -0
- package/src/api-audits/schemas/auditResourceSchema.ts +9 -0
- package/src/api-audits/schemas/createAuditSchema.ts +27 -0
- package/src/api-audits/services/AuditService.ts +412 -0
- package/src/api-parameters/controllers/ConfigController.ts +324 -0
- package/src/api-parameters/entities/parameters.ts +93 -10
- package/src/api-parameters/index.ts +43 -4
- package/src/api-parameters/primitives/$config.ts +291 -19
- package/src/api-parameters/schedulers/ConfigActivationScheduler.ts +30 -0
- package/src/api-parameters/services/ConfigStore.ts +491 -0
- package/src/api-users/atoms/realmAuthSettingsAtom.ts +19 -0
- package/src/api-users/controllers/UserRealmController.ts +0 -2
- package/src/api-users/index.ts +2 -0
- package/src/api-users/primitives/$userRealm.ts +18 -3
- package/src/api-users/providers/UserRealmProvider.ts +6 -3
- package/src/api-users/services/RegistrationService.ts +2 -1
- package/src/api-users/services/SessionService.ts +4 -0
- package/src/api-users/services/UserService.ts +3 -0
- package/src/api-verifications/index.ts +7 -1
- package/src/bin/index.ts +1 -0
- package/src/cli/assets/biomeJson.ts +1 -1
- package/src/cli/assets/dummySpecTs.ts +7 -0
- package/src/cli/assets/editorconfig.ts +13 -0
- package/src/cli/assets/mainTs.ts +14 -0
- package/src/cli/commands/BiomeCommands.ts +2 -0
- package/src/cli/commands/CoreCommands.ts +28 -9
- package/src/cli/commands/VerifyCommands.ts +2 -1
- package/src/cli/commands/ViteCommands.ts +8 -9
- package/src/cli/services/AlephaCliUtils.ts +214 -23
- package/src/command/helpers/Asker.ts +0 -1
- package/src/command/primitives/$command.ts +67 -0
- package/src/command/providers/CliProvider.ts +39 -8
- package/src/core/Alepha.ts +40 -30
- package/src/core/helpers/jsonSchemaToTypeBox.ts +307 -0
- package/src/core/index.shared.ts +1 -0
- package/src/core/index.ts +30 -3
- package/src/core/providers/EventManager.ts +1 -1
- package/src/core/providers/StateManager.ts +23 -12
- package/src/core/providers/TypeProvider.ts +26 -34
- package/src/logger/index.ts +8 -6
- package/src/logger/primitives/$logger.ts +1 -1
- package/src/logger/providers/{SimpleFormatterProvider.ts → PrettyFormatterProvider.ts} +10 -1
- package/src/orm/index.ts +6 -0
- package/src/orm/services/PgRelationManager.ts +2 -2
- package/src/orm/services/PostgresModelBuilder.ts +11 -7
- package/src/orm/services/Repository.ts +16 -7
- package/src/orm/services/SqliteModelBuilder.ts +10 -0
- package/src/server/index.ts +6 -0
- package/src/server/primitives/$action.ts +10 -1
- package/src/server/providers/ServerBodyParserProvider.ts +11 -5
- package/src/server/providers/ServerRouterProvider.ts +13 -7
- package/src/server-auth/primitives/$auth.ts +7 -0
- package/src/server-auth/providers/ServerAuthProvider.ts +51 -8
- package/src/server-cookies/index.ts +2 -1
- package/src/thread/primitives/$thread.ts +2 -2
- package/src/vite/index.ts +0 -2
- package/src/vite/tasks/buildServer.ts +3 -4
- package/src/vite/tasks/generateCloudflare.ts +35 -19
- package/src/vite/tasks/generateDocker.ts +18 -4
- package/src/vite/tasks/generateSitemap.ts +5 -7
- package/src/vite/tasks/generateVercel.ts +76 -41
- package/src/vite/tasks/runAlepha.ts +16 -1
- package/src/websocket/providers/NodeWebSocketServerProvider.ts +3 -11
- package/src/websocket/services/WebSocketClient.ts +3 -3
- package/dist/cli/dist-BlfFtOk2.js +0 -2770
- package/dist/cli/dist-BlfFtOk2.js.map +0 -1
- package/src/api-parameters/controllers/ParameterController.ts +0 -45
- package/src/api-parameters/services/ParameterStore.ts +0 -23
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { t } from "alepha";
|
|
2
|
+
import { $entity, pageQuerySchema, pg } from "alepha/orm";
|
|
3
|
+
|
|
4
|
+
//#region ../../src/api-audits/entities/audits.ts
|
|
5
|
+
/**
|
|
6
|
+
* Audit severity levels for categorizing events.
|
|
7
|
+
*/
|
|
8
|
+
const auditSeveritySchema = t.enum([
|
|
9
|
+
"info",
|
|
10
|
+
"warning",
|
|
11
|
+
"critical"
|
|
12
|
+
], {
|
|
13
|
+
default: "info",
|
|
14
|
+
description: "Severity level of the audit event"
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* Audit log entity for tracking important system events.
|
|
18
|
+
*
|
|
19
|
+
* Stores comprehensive audit information including:
|
|
20
|
+
* - Who performed the action (userId, userRealm)
|
|
21
|
+
* - What happened (type, action, resource)
|
|
22
|
+
* - When it happened (createdAt)
|
|
23
|
+
* - Context and details (metadata, ipAddress, userAgent)
|
|
24
|
+
*/
|
|
25
|
+
const audits = $entity({
|
|
26
|
+
name: "audits",
|
|
27
|
+
schema: t.object({
|
|
28
|
+
id: pg.primaryKey(t.bigint()),
|
|
29
|
+
createdAt: pg.createdAt(),
|
|
30
|
+
type: t.text({ description: "Audit event type (e.g., auth, user, payment, system)" }),
|
|
31
|
+
action: t.text({ description: "Specific action performed (e.g., login, create, update)" }),
|
|
32
|
+
severity: pg.default(auditSeveritySchema, "info"),
|
|
33
|
+
userId: t.optional(t.uuid()),
|
|
34
|
+
userRealm: t.optional(t.text()),
|
|
35
|
+
userEmail: t.optional(t.email()),
|
|
36
|
+
resourceType: t.optional(t.text()),
|
|
37
|
+
resourceId: t.optional(t.text()),
|
|
38
|
+
description: t.optional(t.text()),
|
|
39
|
+
metadata: t.optional(t.json()),
|
|
40
|
+
ipAddress: t.optional(t.text()),
|
|
41
|
+
userAgent: t.optional(t.text()),
|
|
42
|
+
sessionId: t.optional(t.uuid()),
|
|
43
|
+
requestId: t.optional(t.text()),
|
|
44
|
+
success: pg.default(t.boolean(), true),
|
|
45
|
+
errorMessage: t.optional(t.text())
|
|
46
|
+
}),
|
|
47
|
+
indexes: [
|
|
48
|
+
"createdAt",
|
|
49
|
+
"type",
|
|
50
|
+
"action",
|
|
51
|
+
"userId",
|
|
52
|
+
"userRealm",
|
|
53
|
+
"resourceType",
|
|
54
|
+
"resourceId",
|
|
55
|
+
"severity",
|
|
56
|
+
{ columns: ["type", "action"] },
|
|
57
|
+
{ columns: ["userId", "createdAt"] },
|
|
58
|
+
{ columns: ["userRealm", "createdAt"] }
|
|
59
|
+
]
|
|
60
|
+
});
|
|
61
|
+
const auditEntitySchema = audits.schema;
|
|
62
|
+
const auditEntityInsertSchema = audits.insertSchema;
|
|
63
|
+
|
|
64
|
+
//#endregion
|
|
65
|
+
//#region ../../src/api-audits/schemas/auditQuerySchema.ts
|
|
66
|
+
/**
|
|
67
|
+
* Query schema for searching and filtering audit logs.
|
|
68
|
+
*/
|
|
69
|
+
const auditQuerySchema = t.extend(pageQuerySchema, {
|
|
70
|
+
type: t.optional(t.text({ description: "Filter by audit type" })),
|
|
71
|
+
action: t.optional(t.text({ description: "Filter by action" })),
|
|
72
|
+
severity: t.optional(auditSeveritySchema),
|
|
73
|
+
userId: t.optional(t.uuid({ description: "Filter by user ID" })),
|
|
74
|
+
userRealm: t.optional(t.text({ description: "Filter by user realm" })),
|
|
75
|
+
resourceType: t.optional(t.text({ description: "Filter by resource type" })),
|
|
76
|
+
resourceId: t.optional(t.text({ description: "Filter by resource ID" })),
|
|
77
|
+
success: t.optional(t.boolean({ description: "Filter by success status" })),
|
|
78
|
+
from: t.optional(t.datetime({ description: "Start date filter" })),
|
|
79
|
+
to: t.optional(t.datetime({ description: "End date filter" })),
|
|
80
|
+
search: t.optional(t.text({ description: "Search in description" }))
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
//#endregion
|
|
84
|
+
//#region ../../src/api-audits/schemas/auditResourceSchema.ts
|
|
85
|
+
/**
|
|
86
|
+
* Resource schema for audit log responses.
|
|
87
|
+
*/
|
|
88
|
+
const auditResourceSchema = audits.schema;
|
|
89
|
+
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region ../../src/api-audits/schemas/createAuditSchema.ts
|
|
92
|
+
/**
|
|
93
|
+
* Schema for creating a new audit log entry.
|
|
94
|
+
*/
|
|
95
|
+
const createAuditSchema = t.object({
|
|
96
|
+
type: t.text({ description: "Audit event type" }),
|
|
97
|
+
action: t.text({ description: "Specific action performed" }),
|
|
98
|
+
severity: t.optional(auditSeveritySchema),
|
|
99
|
+
userId: t.optional(t.uuid()),
|
|
100
|
+
userRealm: t.optional(t.text()),
|
|
101
|
+
userEmail: t.optional(t.email()),
|
|
102
|
+
resourceType: t.optional(t.text()),
|
|
103
|
+
resourceId: t.optional(t.text()),
|
|
104
|
+
description: t.optional(t.text()),
|
|
105
|
+
metadata: t.optional(t.json()),
|
|
106
|
+
ipAddress: t.optional(t.text()),
|
|
107
|
+
userAgent: t.optional(t.text()),
|
|
108
|
+
sessionId: t.optional(t.uuid()),
|
|
109
|
+
requestId: t.optional(t.text()),
|
|
110
|
+
success: t.optional(t.boolean()),
|
|
111
|
+
errorMessage: t.optional(t.text())
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
//#endregion
|
|
115
|
+
export { auditEntityInsertSchema, auditEntitySchema, auditQuerySchema, auditResourceSchema, auditSeveritySchema, audits, createAuditSchema };
|
|
116
|
+
//# sourceMappingURL=index.browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.js","names":[],"sources":["../../src/api-audits/entities/audits.ts","../../src/api-audits/schemas/auditQuerySchema.ts","../../src/api-audits/schemas/auditResourceSchema.ts","../../src/api-audits/schemas/createAuditSchema.ts"],"sourcesContent":["import type { Static } from \"alepha\";\nimport { t } from \"alepha\";\nimport { $entity, pg } from \"alepha/orm\";\n\n/**\n * Audit severity levels for categorizing events.\n */\nexport const auditSeveritySchema = t.enum([\"info\", \"warning\", \"critical\"], {\n default: \"info\",\n description: \"Severity level of the audit event\",\n});\n\nexport type AuditSeverity = Static<typeof auditSeveritySchema>;\n\n/**\n * Audit log entity for tracking important system events.\n *\n * Stores comprehensive audit information including:\n * - Who performed the action (userId, userRealm)\n * - What happened (type, action, resource)\n * - When it happened (createdAt)\n * - Context and details (metadata, ipAddress, userAgent)\n */\nexport const audits = $entity({\n name: \"audits\",\n schema: t.object({\n id: pg.primaryKey(t.bigint()),\n createdAt: pg.createdAt(),\n\n /**\n * Audit event type (e.g., \"auth\", \"user\", \"payment\", \"system\").\n * Used for categorizing and filtering audit events.\n */\n type: t.text({\n description: \"Audit event type (e.g., auth, user, payment, system)\",\n }),\n\n /**\n * Specific action performed (e.g., \"login\", \"logout\", \"create\", \"update\", \"delete\").\n */\n action: t.text({\n description: \"Specific action performed (e.g., login, create, update)\",\n }),\n\n /**\n * Severity level of the event.\n */\n severity: pg.default(auditSeveritySchema, \"info\"),\n\n /**\n * User ID who performed the action (null for system events).\n */\n userId: t.optional(t.uuid()),\n\n /**\n * User realm for multi-tenant support.\n */\n userRealm: t.optional(t.text()),\n\n /**\n * User email at the time of the event (denormalized for history).\n */\n userEmail: t.optional(t.email()),\n\n /**\n * Resource type affected (e.g., \"user\", \"order\", \"file\").\n */\n resourceType: t.optional(t.text()),\n\n /**\n * Resource ID affected.\n */\n resourceId: t.optional(t.text()),\n\n /**\n * Human-readable description of the event.\n */\n description: t.optional(t.text()),\n\n /**\n * Additional metadata/context as JSON.\n */\n metadata: t.optional(t.json()),\n\n /**\n * Client IP address.\n */\n ipAddress: t.optional(t.text()),\n\n /**\n * Client user agent.\n */\n userAgent: t.optional(t.text()),\n\n /**\n * Session ID if applicable.\n */\n sessionId: t.optional(t.uuid()),\n\n /**\n * Request ID for correlation.\n */\n requestId: t.optional(t.text()),\n\n /**\n * Whether the action was successful.\n */\n success: pg.default(t.boolean(), true),\n\n /**\n * Error message if the action failed.\n */\n errorMessage: t.optional(t.text()),\n }),\n indexes: [\n \"createdAt\",\n \"type\",\n \"action\",\n \"userId\",\n \"userRealm\",\n \"resourceType\",\n \"resourceId\",\n \"severity\",\n { columns: [\"type\", \"action\"] },\n { columns: [\"userId\", \"createdAt\"] },\n { columns: [\"userRealm\", \"createdAt\"] },\n ],\n});\n\nexport const auditEntitySchema = audits.schema;\nexport const auditEntityInsertSchema = audits.insertSchema;\nexport type AuditEntity = Static<typeof audits.schema>;\n","import type { Static } from \"alepha\";\nimport { t } from \"alepha\";\nimport { pageQuerySchema } from \"alepha/orm\";\nimport { auditSeveritySchema } from \"../entities/audits.ts\";\n\n/**\n * Query schema for searching and filtering audit logs.\n */\nexport const auditQuerySchema = t.extend(pageQuerySchema, {\n type: t.optional(t.text({ description: \"Filter by audit type\" })),\n action: t.optional(t.text({ description: \"Filter by action\" })),\n severity: t.optional(auditSeveritySchema),\n userId: t.optional(t.uuid({ description: \"Filter by user ID\" })),\n userRealm: t.optional(t.text({ description: \"Filter by user realm\" })),\n resourceType: t.optional(t.text({ description: \"Filter by resource type\" })),\n resourceId: t.optional(t.text({ description: \"Filter by resource ID\" })),\n success: t.optional(t.boolean({ description: \"Filter by success status\" })),\n from: t.optional(t.datetime({ description: \"Start date filter\" })),\n to: t.optional(t.datetime({ description: \"End date filter\" })),\n search: t.optional(t.text({ description: \"Search in description\" })),\n});\n\nexport type AuditQuery = Static<typeof auditQuerySchema>;\n","import type { Static } from \"alepha\";\nimport { audits } from \"../entities/audits.ts\";\n\n/**\n * Resource schema for audit log responses.\n */\nexport const auditResourceSchema = audits.schema;\n\nexport type AuditResource = Static<typeof auditResourceSchema>;\n","import type { Static } from \"alepha\";\nimport { t } from \"alepha\";\nimport { auditSeveritySchema } from \"../entities/audits.ts\";\n\n/**\n * Schema for creating a new audit log entry.\n */\nexport const createAuditSchema = t.object({\n type: t.text({ description: \"Audit event type\" }),\n action: t.text({ description: \"Specific action performed\" }),\n severity: t.optional(auditSeveritySchema),\n userId: t.optional(t.uuid()),\n userRealm: t.optional(t.text()),\n userEmail: t.optional(t.email()),\n resourceType: t.optional(t.text()),\n resourceId: t.optional(t.text()),\n description: t.optional(t.text()),\n metadata: t.optional(t.json()),\n ipAddress: t.optional(t.text()),\n userAgent: t.optional(t.text()),\n sessionId: t.optional(t.uuid()),\n requestId: t.optional(t.text()),\n success: t.optional(t.boolean()),\n errorMessage: t.optional(t.text()),\n});\n\nexport type CreateAudit = Static<typeof createAuditSchema>;\n"],"mappings":"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"}
|