alepha 0.15.4 → 0.15.5

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 (282) hide show
  1. package/README.md +26 -11
  2. package/dist/api/audits/index.d.ts +3 -3
  3. package/dist/api/audits/index.js +3 -3
  4. package/dist/api/audits/index.js.map +1 -1
  5. package/dist/api/files/index.d.ts +3 -3
  6. package/dist/api/files/index.js +3 -3
  7. package/dist/api/files/index.js.map +1 -1
  8. package/dist/api/jobs/index.d.ts +47 -4
  9. package/dist/api/jobs/index.d.ts.map +1 -1
  10. package/dist/api/jobs/index.js +100 -5
  11. package/dist/api/jobs/index.js.map +1 -1
  12. package/dist/api/keys/index.d.ts +3 -3
  13. package/dist/api/keys/index.js +3 -3
  14. package/dist/api/keys/index.js.map +1 -1
  15. package/dist/api/notifications/index.d.ts +3 -3
  16. package/dist/api/notifications/index.js +3 -3
  17. package/dist/api/notifications/index.js.map +1 -1
  18. package/dist/api/parameters/index.d.ts +263 -263
  19. package/dist/api/parameters/index.d.ts.map +1 -1
  20. package/dist/api/parameters/index.js +31 -30
  21. package/dist/api/parameters/index.js.map +1 -1
  22. package/dist/api/users/index.d.ts +373 -67
  23. package/dist/api/users/index.d.ts.map +1 -1
  24. package/dist/api/users/index.js +273 -72
  25. package/dist/api/users/index.js.map +1 -1
  26. package/dist/api/verifications/index.d.ts +3 -3
  27. package/dist/api/verifications/index.js +3 -3
  28. package/dist/api/verifications/index.js.map +1 -1
  29. package/dist/batch/index.d.ts +7 -7
  30. package/dist/batch/index.js +3 -3
  31. package/dist/batch/index.js.map +1 -1
  32. package/dist/bucket/index.d.ts +3 -3
  33. package/dist/bucket/index.js +6 -6
  34. package/dist/bucket/index.js.map +1 -1
  35. package/dist/cache/core/index.d.ts +3 -3
  36. package/dist/cache/core/index.js +3 -3
  37. package/dist/cache/core/index.js.map +1 -1
  38. package/dist/cli/index.d.ts +5607 -20
  39. package/dist/cli/index.d.ts.map +1 -1
  40. package/dist/cli/index.js +103 -89
  41. package/dist/cli/index.js.map +1 -1
  42. package/dist/command/index.d.ts +11 -4
  43. package/dist/command/index.d.ts.map +1 -1
  44. package/dist/command/index.js +8 -6
  45. package/dist/command/index.js.map +1 -1
  46. package/dist/core/index.browser.js.map +1 -1
  47. package/dist/core/index.d.ts +4 -8
  48. package/dist/core/index.d.ts.map +1 -1
  49. package/dist/core/index.js +3 -3
  50. package/dist/core/index.js.map +1 -1
  51. package/dist/core/index.native.js.map +1 -1
  52. package/dist/datetime/index.d.ts +3 -3
  53. package/dist/datetime/index.js +3 -3
  54. package/dist/datetime/index.js.map +1 -1
  55. package/dist/email/index.d.ts +3 -3
  56. package/dist/email/index.js +8 -8
  57. package/dist/email/index.js.map +1 -1
  58. package/dist/fake/index.d.ts +3 -3
  59. package/dist/fake/index.js +3 -3
  60. package/dist/fake/index.js.map +1 -1
  61. package/dist/lock/core/index.d.ts +3 -3
  62. package/dist/lock/core/index.js +3 -3
  63. package/dist/lock/core/index.js.map +1 -1
  64. package/dist/logger/index.d.ts +3 -3
  65. package/dist/logger/index.js +6 -3
  66. package/dist/logger/index.js.map +1 -1
  67. package/dist/mcp/index.d.ts +3 -3
  68. package/dist/mcp/index.js +3 -3
  69. package/dist/mcp/index.js.map +1 -1
  70. package/dist/orm/index.d.ts +12 -12
  71. package/dist/orm/index.js +4 -4
  72. package/dist/orm/index.js.map +1 -1
  73. package/dist/queue/core/index.d.ts +3 -3
  74. package/dist/queue/core/index.js +3 -3
  75. package/dist/queue/core/index.js.map +1 -1
  76. package/dist/react/auth/index.d.ts +3 -3
  77. package/dist/react/auth/index.js +3 -3
  78. package/dist/react/auth/index.js.map +1 -1
  79. package/dist/react/core/index.d.ts +3 -3
  80. package/dist/react/core/index.js +3 -3
  81. package/dist/react/core/index.js.map +1 -1
  82. package/dist/react/form/index.d.ts +3 -3
  83. package/dist/react/form/index.js +3 -3
  84. package/dist/react/form/index.js.map +1 -1
  85. package/dist/react/head/index.d.ts +3 -3
  86. package/dist/react/head/index.js +3 -3
  87. package/dist/react/head/index.js.map +1 -1
  88. package/dist/react/i18n/index.d.ts +3 -3
  89. package/dist/react/i18n/index.js +3 -3
  90. package/dist/react/i18n/index.js.map +1 -1
  91. package/dist/react/intro/index.css +337 -0
  92. package/dist/react/intro/index.css.map +1 -0
  93. package/dist/react/intro/index.d.ts +10 -0
  94. package/dist/react/intro/index.d.ts.map +1 -0
  95. package/dist/react/intro/index.js +222 -0
  96. package/dist/react/intro/index.js.map +1 -0
  97. package/dist/react/router/index.browser.js +2 -2
  98. package/dist/react/router/index.browser.js.map +1 -1
  99. package/dist/react/router/index.d.ts +1 -1
  100. package/dist/react/router/index.d.ts.map +1 -1
  101. package/dist/react/router/index.js +5 -5
  102. package/dist/react/router/index.js.map +1 -1
  103. package/dist/redis/index.d.ts +17 -17
  104. package/dist/redis/index.js +3 -3
  105. package/dist/redis/index.js.map +1 -1
  106. package/dist/retry/index.d.ts +3 -3
  107. package/dist/retry/index.js +3 -3
  108. package/dist/retry/index.js.map +1 -1
  109. package/dist/scheduler/index.d.ts +3 -3
  110. package/dist/scheduler/index.js +3 -3
  111. package/dist/scheduler/index.js.map +1 -1
  112. package/dist/security/index.d.ts +3 -3
  113. package/dist/security/index.js +5 -5
  114. package/dist/security/index.js.map +1 -1
  115. package/dist/server/auth/index.d.ts +3 -3
  116. package/dist/server/auth/index.js +3 -3
  117. package/dist/server/auth/index.js.map +1 -1
  118. package/dist/server/cache/index.d.ts +3 -3
  119. package/dist/server/cache/index.js +3 -3
  120. package/dist/server/cache/index.js.map +1 -1
  121. package/dist/server/compress/index.d.ts +3 -3
  122. package/dist/server/compress/index.js +3 -3
  123. package/dist/server/compress/index.js.map +1 -1
  124. package/dist/server/cookies/index.d.ts +3 -3
  125. package/dist/server/cookies/index.js +3 -3
  126. package/dist/server/cookies/index.js.map +1 -1
  127. package/dist/server/core/index.d.ts +5 -16
  128. package/dist/server/core/index.d.ts.map +1 -1
  129. package/dist/server/core/index.js +13 -29
  130. package/dist/server/core/index.js.map +1 -1
  131. package/dist/server/cors/index.d.ts +3 -3
  132. package/dist/server/cors/index.js +3 -3
  133. package/dist/server/cors/index.js.map +1 -1
  134. package/dist/server/health/index.d.ts +20 -20
  135. package/dist/server/health/index.js +3 -3
  136. package/dist/server/health/index.js.map +1 -1
  137. package/dist/server/helmet/index.d.ts +3 -3
  138. package/dist/server/helmet/index.js +3 -3
  139. package/dist/server/helmet/index.js.map +1 -1
  140. package/dist/server/links/index.d.ts +42 -42
  141. package/dist/server/links/index.d.ts.map +1 -1
  142. package/dist/server/links/index.js +3 -3
  143. package/dist/server/links/index.js.map +1 -1
  144. package/dist/server/metrics/index.d.ts +3 -3
  145. package/dist/server/metrics/index.js +3 -3
  146. package/dist/server/metrics/index.js.map +1 -1
  147. package/dist/server/multipart/index.d.ts +3 -3
  148. package/dist/server/multipart/index.js +3 -3
  149. package/dist/server/multipart/index.js.map +1 -1
  150. package/dist/server/proxy/index.d.ts +3 -3
  151. package/dist/server/proxy/index.js +3 -3
  152. package/dist/server/proxy/index.js.map +1 -1
  153. package/dist/server/rate-limit/index.d.ts +3 -3
  154. package/dist/server/rate-limit/index.js +3 -3
  155. package/dist/server/rate-limit/index.js.map +1 -1
  156. package/dist/server/static/index.d.ts +3 -3
  157. package/dist/server/static/index.js +6 -6
  158. package/dist/server/static/index.js.map +1 -1
  159. package/dist/server/swagger/index.d.ts +3 -3
  160. package/dist/server/swagger/index.js +6 -6
  161. package/dist/server/swagger/index.js.map +1 -1
  162. package/dist/sms/index.d.ts +3 -3
  163. package/dist/sms/index.js +6 -6
  164. package/dist/sms/index.js.map +1 -1
  165. package/dist/system/index.d.ts +3 -3
  166. package/dist/system/index.js +3 -3
  167. package/dist/system/index.js.map +1 -1
  168. package/dist/thread/index.d.ts +3 -3
  169. package/dist/thread/index.js +3 -3
  170. package/dist/thread/index.js.map +1 -1
  171. package/dist/topic/core/index.d.ts +3 -3
  172. package/dist/topic/core/index.js +3 -3
  173. package/dist/topic/core/index.js.map +1 -1
  174. package/dist/vite/index.d.ts +6284 -3
  175. package/dist/vite/index.d.ts.map +1 -1
  176. package/dist/websocket/index.d.ts +3 -3
  177. package/dist/websocket/index.js +3 -3
  178. package/dist/websocket/index.js.map +1 -1
  179. package/package.json +7 -2
  180. package/src/api/audits/index.ts +3 -3
  181. package/src/api/files/index.ts +3 -3
  182. package/src/api/jobs/controllers/AdminJobController.ts +15 -2
  183. package/src/api/jobs/index.ts +4 -3
  184. package/src/api/jobs/services/JobAudits.spec.ts +89 -0
  185. package/src/api/jobs/services/JobAudits.ts +101 -0
  186. package/src/api/keys/index.ts +3 -3
  187. package/src/api/notifications/index.ts +3 -3
  188. package/src/api/parameters/index.ts +5 -3
  189. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +1 -1
  190. package/src/api/users/__tests__/ApiKeys.spec.ts +1 -1
  191. package/src/api/users/__tests__/EmailVerification.spec.ts +16 -1
  192. package/src/api/users/__tests__/PasswordReset.spec.ts +11 -0
  193. package/src/api/users/atoms/realmAuthSettingsAtom.ts +10 -0
  194. package/src/api/users/index.ts +8 -9
  195. package/src/api/users/primitives/$realm.ts +117 -19
  196. package/src/api/users/providers/RealmProvider.ts +15 -7
  197. package/src/api/users/services/CredentialService.spec.ts +11 -0
  198. package/src/api/users/services/CredentialService.ts +47 -24
  199. package/src/api/users/services/IdentityService.ts +12 -4
  200. package/src/api/users/services/RegistrationService.spec.ts +11 -0
  201. package/src/api/users/services/RegistrationService.ts +33 -12
  202. package/src/api/users/services/SessionService.ts +83 -12
  203. package/src/api/users/services/UserAudits.ts +47 -0
  204. package/src/api/users/services/UserFiles.ts +19 -0
  205. package/src/api/users/services/UserJobs.spec.ts +107 -0
  206. package/src/api/users/services/UserJobs.ts +62 -0
  207. package/src/api/users/services/UserParameters.ts +23 -0
  208. package/src/api/users/services/UserService.ts +34 -17
  209. package/src/api/verifications/index.ts +3 -3
  210. package/src/batch/index.ts +3 -3
  211. package/src/bucket/index.ts +3 -3
  212. package/src/cache/core/index.ts +3 -3
  213. package/src/cli/commands/db.ts +9 -0
  214. package/src/cli/commands/init.spec.ts +2 -17
  215. package/src/cli/commands/init.ts +37 -1
  216. package/src/cli/providers/ViteDevServerProvider.ts +5 -2
  217. package/src/cli/services/AlephaCliUtils.ts +17 -0
  218. package/src/cli/services/PackageManagerUtils.ts +15 -1
  219. package/src/cli/services/ProjectScaffolder.ts +8 -13
  220. package/src/cli/templates/agentMd.ts +2 -25
  221. package/src/cli/templates/apiAppSecurityTs.ts +37 -2
  222. package/src/cli/templates/mainCss.ts +2 -32
  223. package/src/cli/templates/webAppRouterTs.ts +5 -5
  224. package/src/cli/templates/webHomeComponentTsx.ts +10 -0
  225. package/src/command/helpers/Runner.ts +14 -1
  226. package/src/command/index.ts +3 -3
  227. package/src/core/helpers/primitive.ts +0 -5
  228. package/src/core/index.ts +3 -3
  229. package/src/datetime/index.ts +3 -3
  230. package/src/email/index.ts +3 -3
  231. package/src/email/providers/LocalEmailProvider.ts +2 -2
  232. package/src/fake/index.ts +3 -3
  233. package/src/lock/core/index.ts +3 -3
  234. package/src/logger/index.ts +3 -3
  235. package/src/logger/providers/PrettyFormatterProvider.ts +7 -0
  236. package/src/mcp/index.ts +3 -3
  237. package/src/orm/index.ts +3 -3
  238. package/src/orm/providers/drivers/NodeSqliteProvider.ts +1 -1
  239. package/src/queue/core/index.ts +3 -3
  240. package/src/react/auth/index.ts +3 -3
  241. package/src/react/core/index.ts +3 -3
  242. package/src/react/form/index.ts +3 -3
  243. package/src/react/head/index.ts +3 -3
  244. package/src/react/i18n/index.ts +3 -3
  245. package/src/react/intro/components/GettingStarted.css +334 -0
  246. package/src/react/intro/components/GettingStarted.tsx +276 -0
  247. package/src/react/intro/index.ts +1 -0
  248. package/src/react/router/index.browser.ts +2 -0
  249. package/src/react/router/index.ts +2 -0
  250. package/src/redis/index.ts +3 -3
  251. package/src/retry/index.ts +3 -3
  252. package/src/router/index.ts +3 -3
  253. package/src/scheduler/index.ts +3 -3
  254. package/src/security/index.ts +3 -3
  255. package/src/security/providers/JwtProvider.ts +2 -2
  256. package/src/server/auth/index.ts +3 -3
  257. package/src/server/cache/index.ts +3 -3
  258. package/src/server/compress/index.ts +3 -3
  259. package/src/server/cookies/index.ts +3 -3
  260. package/src/server/core/index.ts +3 -3
  261. package/src/server/core/primitives/$action.spec.ts +3 -2
  262. package/src/server/core/primitives/$action.ts +6 -2
  263. package/src/server/core/providers/NodeHttpServerProvider.ts +2 -15
  264. package/src/server/core/providers/ServerProvider.ts +4 -2
  265. package/src/server/core/providers/ServerRouterProvider.ts +5 -27
  266. package/src/server/cors/index.ts +3 -3
  267. package/src/server/health/index.ts +3 -3
  268. package/src/server/helmet/index.ts +3 -3
  269. package/src/server/links/index.ts +3 -3
  270. package/src/server/metrics/index.ts +3 -3
  271. package/src/server/multipart/index.ts +3 -3
  272. package/src/server/proxy/index.ts +3 -3
  273. package/src/server/rate-limit/index.ts +3 -3
  274. package/src/server/static/index.ts +3 -3
  275. package/src/server/swagger/index.ts +3 -3
  276. package/src/sms/index.ts +3 -3
  277. package/src/system/index.ts +3 -3
  278. package/src/thread/index.ts +3 -3
  279. package/src/topic/core/index.ts +3 -3
  280. package/src/websocket/index.ts +3 -3
  281. package/src/cli/templates/webHelloComponentTsx.ts +0 -30
  282. /package/src/api/users/{notifications → services}/UserNotifications.ts +0 -0
@@ -47,7 +47,7 @@ export class JwtProvider {
47
47
  } else if (this.isSecretKey(secretKeyOrJwks)) {
48
48
  const secretKey = this.encoder.encode(secretKeyOrJwks);
49
49
  this.log.info(
50
- `will verify JWTs from '${name}' with secret a key (${secretKey.length} bytes)`,
50
+ `will verify JWTs from issuer '${name}' with secret key (${secretKey.length} bytes)`,
51
51
  );
52
52
  this.keystore.push({
53
53
  name,
@@ -56,7 +56,7 @@ export class JwtProvider {
56
56
  });
57
57
  } else {
58
58
  this.log.info(
59
- `will verify JWTs from '${name}' with JWKS ${secretKeyOrJwks}`,
59
+ `will verify JWTs from issuer '${name}' with JWKS ${secretKeyOrJwks}`,
60
60
  );
61
61
  this.keystore.push({
62
62
  name,
@@ -29,9 +29,9 @@ declare module "alepha" {
29
29
  // ---------------------------------------------------------------------------------------------------------------------
30
30
 
31
31
  /**
32
- * | type | quality | stability |
33
- * |------|---------|-----------|
34
- * | backend | rare | stable |
32
+ * | Stability | Since | Runtime |
33
+ * |-----------|-------|---------|
34
+ * | 3 - stable | 0.8.0 | node, bun, workerd|
35
35
  *
36
36
  * OAuth2/OIDC authentication with social login providers.
37
37
  *
@@ -9,9 +9,9 @@ export * from "./providers/ServerCacheProvider.ts";
9
9
  // ---------------------------------------------------------------------------------------------------------------------
10
10
 
11
11
  /**
12
- * | type | quality | stability |
13
- * |------|---------|-----------|
14
- * | backend | standard | stable |
12
+ * | Stability | Since | Runtime |
13
+ * |-----------|-------|---------|
14
+ * | 3 - stable | 0.10.0 | node, bun, workerd|
15
15
  *
16
16
  * ETag-based response caching.
17
17
  *
@@ -9,9 +9,9 @@ export * from "./providers/ServerCompressProvider.ts";
9
9
  // ---------------------------------------------------------------------------------------------------------------------
10
10
 
11
11
  /**
12
- * | type | quality | stability |
13
- * |------|---------|-----------|
14
- * | backend | standard | stable |
12
+ * | Stability | Since | Runtime |
13
+ * |-----------|-------|---------|
14
+ * | 3 - stable | 0.13.0 | node, bun|
15
15
  *
16
16
  * Response compression.
17
17
  *
@@ -18,9 +18,9 @@ declare module "alepha/server" {
18
18
  }
19
19
 
20
20
  /**
21
- * | type | quality | stability |
22
- * |------|---------|-----------|
23
- * | backend | standard | stable |
21
+ * | Stability | Since | Runtime |
22
+ * |-----------|-------|---------|
23
+ * | 3 - stable | 0.3.0 | node, bun, workerd|
24
24
  *
25
25
  * Server and browser-safe cookie handling.
26
26
  *
@@ -114,9 +114,9 @@ export * from "./services/UserAgentParser.ts";
114
114
  // ---------------------------------------------------------------------------------------------------------------------
115
115
 
116
116
  /**
117
- * | type | quality | stability |
118
- * |------|---------|-----------|
119
- * | backend | epic | stable |
117
+ * | Stability | Since | Runtime |
118
+ * |-----------|-------|---------|
119
+ * | 3 - stable | 0.1.0 | node, bun, workerd|
120
120
  *
121
121
  * Convention-driven HTTP server with automatic validation and type inference.
122
122
  *
@@ -81,8 +81,9 @@ describe("$action", () => {
81
81
 
82
82
  expect(await app.a1.fetch({}).then((it) => it.data)).toBe("ok:a1");
83
83
  expect(await app.a2.fetch({}).then((it) => it.data)).toBe("Not Found");
84
- // note: $action disabled is callable locally
85
- expect(await app.a2.run({})).toBe("ok:a2");
84
+ await expect(app.a2.run({})).rejects.toThrowError(
85
+ "Action 'a2' is disabled.",
86
+ );
86
87
  });
87
88
 
88
89
  test("should return nothing", async ({ expect }) => {
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  $env,
3
3
  $inject,
4
+ AlephaError,
4
5
  type Async,
5
6
  createPrimitive,
6
7
  isTypeFile,
@@ -188,8 +189,8 @@ export interface ActionPrimitiveOptions<TConfig extends RequestConfigSchema>
188
189
  description?: string;
189
190
 
190
191
  /**
191
- * Disable the route. Useful with env variables do disable one specific route.
192
- * Route won't be available in the API but can still be called locally!
192
+ * Disable the route. Useful with env variables to disable one specific route.
193
+ * Route won't be available in the API nor locally.
193
194
  */
194
195
  disabled?: boolean;
195
196
 
@@ -317,6 +318,9 @@ export class ActionPrimitive<
317
318
  config?: ClientRequestEntry<TConfig>,
318
319
  options: ClientRequestOptions = {}, // most of the options are ignored here
319
320
  ): Promise<ClientRequestResponse<TConfig>> {
321
+ if (this.options.disabled) {
322
+ throw new AlephaError(`Action '${this.name}' is disabled.`);
323
+ }
320
324
  const handler = this.options.handler;
321
325
  const {
322
326
  body,
@@ -76,22 +76,9 @@ export class NodeHttpServerProvider extends ServerProvider {
76
76
  res.end("Internal Server Error");
77
77
  };
78
78
 
79
- // P3: Pre-allocated event object to avoid { req, res } allocation per request
80
- // Safe because handleNodeRequest completes before the next request reuses this object
81
- protected readonly nodeRequestEvent = {
82
- req: null as unknown as IncomingMessage,
83
- res: null as unknown as ServerResponse,
84
- };
85
-
86
79
  public readonly server = this.createHttpServer((req, res) => {
87
- // Reuse pre-allocated event object instead of creating { req, res } per request
88
- const ev = this.nodeRequestEvent;
89
- ev.req = req;
90
- ev.res = res;
91
- // Note: handleNodeRequest returns a promise that resolves after response is sent
92
- this.handleNodeRequest(ev).catch((err) =>
93
- this.handleRequestError(res, err),
94
- );
80
+ const promise = this.handleNodeRequest({ req, res });
81
+ promise.catch((err) => this.handleRequestError(res, err));
95
82
  });
96
83
 
97
84
  public readonly start = $hook({
@@ -220,13 +220,15 @@ export class ServerProvider {
220
220
 
221
221
  // empty body - just send status & headers
222
222
  if (!response.body) {
223
- res.writeHead(response.status, response.headers).end();
223
+ res.writeHead(response.status, response.headers);
224
+ res.end();
224
225
  return;
225
226
  }
226
227
 
227
228
  // if response.body is string or buffer
228
229
  if (typeof response.body === "string" || Buffer.isBuffer(response.body)) {
229
- res.writeHead(response.status, response.headers).end(response.body);
230
+ res.writeHead(response.status, response.headers);
231
+ res.end(response.body);
230
232
  return;
231
233
  }
232
234
 
@@ -45,23 +45,6 @@ export class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
45
45
  >;
46
46
  protected compiledOnError?: CompiledEventExecutor<Hooks["server:onError"]>;
47
47
 
48
- // Reusable context.run options object - mutated per request
49
- // Includes slots for request data to avoid closure allocation in context.run
50
- protected readonly contextRunOptions = {
51
- context: "",
52
- // Request data slots - populated before context.run, read by processRequestBound
53
- _request: null as unknown as ServerRequest,
54
- _route: null as unknown as ServerRoute,
55
- _responseKind: "any" as ResponseKind,
56
- };
57
-
58
- // Pre-bound method reference - created once at instantiation, reused for all requests
59
- // Reads arguments from contextRunOptions to avoid closure allocation per request
60
- protected readonly processRequestBound = (): Promise<any> => {
61
- const opts = this.contextRunOptions;
62
- return this.processRequest(opts._request, opts._route, opts._responseKind);
63
- };
64
-
65
48
  // Cache query schema keys to avoid property enumeration on every request
66
49
  // WeakMap allows GC of schemas that are no longer referenced
67
50
  protected readonly queryKeysCache = new WeakMap<object, string[]>();
@@ -137,16 +120,11 @@ export class ServerRouterProvider extends RouterProvider<ServerRouteMatcher> {
137
120
  const request =
138
121
  this.serverRequestParser.createServerRequest(rawRequest);
139
122
 
140
- // Populate pre-allocated options with request data
141
- // This avoids closure allocation - processRequestBound reads from these slots
142
- const opts = this.contextRunOptions;
143
- opts.context = this.getContextId(rawRequest.headers);
144
- opts._request = request;
145
- opts._route = route;
146
- opts._responseKind = responseKind;
147
-
148
- // Use pre-bound method reference instead of creating closure per request
149
- return this.alepha.context.run(this.processRequestBound, opts);
123
+ // Create context options per request to avoid race conditions with concurrent requests
124
+ return this.alepha.context.run(
125
+ () => this.processRequest(request, route, responseKind),
126
+ { context: this.getContextId(rawRequest.headers) },
127
+ );
150
128
  },
151
129
  });
152
130
  }
@@ -25,9 +25,9 @@ declare module "alepha/server" {
25
25
  // ---------------------------------------------------------------------------------------------------------------------
26
26
 
27
27
  /**
28
- * | type | quality | stability |
29
- * |------|---------|-----------|
30
- * | backend | standard | stable |
28
+ * | Stability | Since | Runtime |
29
+ * |-----------|-------|---------|
30
+ * | 3 - stable | 0.3.0 | node, bun, workerd|
31
31
  *
32
32
  * Cross-Origin Resource Sharing configuration.
33
33
  *
@@ -10,9 +10,9 @@ export * from "./schemas/healthSchema.ts";
10
10
  // ---------------------------------------------------------------------------------------------------------------------
11
11
 
12
12
  /**
13
- * | type | quality | stability |
14
- * |------|---------|-----------|
15
- * | devops | standard | stable |
13
+ * | Stability | Since | Runtime |
14
+ * |-----------|-------|---------|
15
+ * | 3 - stable | 0.7.0 | node, bun, workerd|
16
16
  *
17
17
  * Application health monitoring endpoints.
18
18
  *
@@ -9,9 +9,9 @@ export * from "./providers/ServerHelmetProvider.ts";
9
9
  // ---------------------------------------------------------------------------------------------------------------------
10
10
 
11
11
  /**
12
- * | type | quality | stability |
13
- * |------|---------|-----------|
14
- * | backend | standard | stable |
12
+ * | Stability | Since | Runtime |
13
+ * |-----------|-------|---------|
14
+ * | 3 - stable | 0.15.0 | node, bun, workerd|
15
15
  *
16
16
  * HTTP security headers.
17
17
  *
@@ -35,9 +35,9 @@ declare module "alepha" {
35
35
  // ---------------------------------------------------------------------------------------------------------------------
36
36
 
37
37
  /**
38
- * | type | quality | stability |
39
- * |------|---------|-----------|
40
- * | backend | standard | stable |
38
+ * | Stability | Since | Runtime |
39
+ * |-----------|-------|---------|
40
+ * | 3 - stable | 0.6.0 | node, bun, workerd, expo |
41
41
  *
42
42
  * Type-safe API client with request deduplication.
43
43
  *
@@ -9,9 +9,9 @@ export * from "./providers/ServerMetricsProvider.ts";
9
9
  // ---------------------------------------------------------------------------------------------------------------------
10
10
 
11
11
  /**
12
- * | type | quality | stability |
13
- * |------|---------|-----------|
14
- * | devops | standard | stable |
12
+ * | Stability | Since | Runtime |
13
+ * |-----------|-------|---------|
14
+ * | 2 - beta | 0.14.0 | node, bun|
15
15
  *
16
16
  * Prometheus-style metrics collection.
17
17
  *
@@ -9,9 +9,9 @@ export * from "./providers/ServerMultipartProvider.ts";
9
9
  // ---------------------------------------------------------------------------------------------------------------------
10
10
 
11
11
  /**
12
- * | type | quality | stability |
13
- * |------|---------|-----------|
14
- * | backend | standard | stable |
12
+ * | Stability | Since | Runtime |
13
+ * |-----------|-------|---------|
14
+ * | 3 - stable | 0.5.0 | node, bun|
15
15
  *
16
16
  * Multipart form data handling for file uploads.
17
17
  *
@@ -11,9 +11,9 @@ export * from "./providers/ServerProxyProvider.ts";
11
11
  // ---------------------------------------------------------------------------------------------------------------------
12
12
 
13
13
  /**
14
- * | type | quality | stability |
15
- * |------|---------|-----------|
16
- * | backend | standard | stable |
14
+ * | Stability | Since | Runtime |
15
+ * |-----------|-------|---------|
16
+ * | 2 - beta | 0.12.0 | node, bun|
17
17
  *
18
18
  * Reverse proxy routing.
19
19
  *
@@ -54,9 +54,9 @@ export interface RateLimitOptions {
54
54
  }
55
55
 
56
56
  /**
57
- * | type | quality | stability |
58
- * |------|---------|-----------|
59
- * | backend | standard | stable |
57
+ * | Stability | Since | Runtime |
58
+ * |-----------|-------|---------|
59
+ * | 3 - stable | 0.16.0 | node, bun, workerd|
60
60
  *
61
61
  * Request rate limiting on actions.
62
62
  *
@@ -11,9 +11,9 @@ export * from "./providers/ServerStaticProvider.ts";
11
11
  // ---------------------------------------------------------------------------------------------------------------------
12
12
 
13
13
  /**
14
- * | type | quality | stability |
15
- * |------|---------|-----------|
16
- * | backend | standard | stable |
14
+ * | Stability | Since | Runtime |
15
+ * |-----------|-------|---------|
16
+ * | 3 - stable | 0.3.0 | node, bun|
17
17
  *
18
18
  * Static file serving.
19
19
  *
@@ -30,9 +30,9 @@ declare module "alepha/server" {
30
30
  // ---------------------------------------------------------------------------------------------------------------------
31
31
 
32
32
  /**
33
- * | type | quality | stability |
34
- * |------|---------|-----------|
35
- * | backend | standard | stable |
33
+ * | Stability | Since | Runtime |
34
+ * |-----------|-------|---------|
35
+ * | 3 - stable | 0.9.0 | node, bun|
36
36
  *
37
37
  * Automatic API documentation generation.
38
38
  *
package/src/sms/index.ts CHANGED
@@ -34,9 +34,9 @@ declare module "alepha" {
34
34
  // ---------------------------------------------------------------------------------------------------------------------
35
35
 
36
36
  /**
37
- * | type | quality | stability |
38
- * |------|---------|-----------|
39
- * | backend | rare | stable |
37
+ * | Stability | Since | Runtime |
38
+ * |-----------|-------|---------|
39
+ * | 3 - stable | 0.15.0 | node, bun|
40
40
  *
41
41
  * SMS delivery with multiple provider support.
42
42
  *
@@ -21,9 +21,9 @@ export * from "./services/FileDetector.ts";
21
21
  // ---------------------------------------------------------------------------------------------------------------------
22
22
 
23
23
  /**
24
- * | type | quality | stability |
25
- * |------|---------|-----------|
26
- * | tooling | standard | stable |
24
+ * | Stability | Since | Runtime |
25
+ * |-----------|-------|---------|
26
+ * | 3 - stable | 0.14.0 | node, bun, browser|
27
27
  *
28
28
  * System-level abstractions for portable code across runtimes.
29
29
  *
@@ -22,9 +22,9 @@ Alepha.prototype.isWorkerThread = function (this: Alepha): boolean {
22
22
  // ---------------------------------------------------------------------------------------------------------------------
23
23
 
24
24
  /**
25
- * | type | quality | stability |
26
- * |------|---------|-----------|
27
- * | backend | standard | experimental |
25
+ * | Stability | Since | Runtime |
26
+ * |-----------|-------|---------|
27
+ * | 1 - experimental | 0.16.0 | node|
28
28
  *
29
29
  * Multi-threading support.
30
30
  *
@@ -15,9 +15,9 @@ export * from "./providers/TopicProvider.ts";
15
15
  // ---------------------------------------------------------------------------------------------------------------------
16
16
 
17
17
  /**
18
- * | type | quality | stability |
19
- * |------|---------|-----------|
20
- * | backend | rare | stable |
18
+ * | Stability | Since | Runtime |
19
+ * |-----------|-------|---------|
20
+ * | 3 - stable | 0.7.0 | node, bun|
21
21
  *
22
22
  * Publish/subscribe messaging for event-driven architectures.
23
23
  *
@@ -58,9 +58,9 @@ export * from "./providers/NodeWebSocketServerProvider.ts";
58
58
  // ---------------------------------------------------------------------------------------------------------------------
59
59
 
60
60
  /**
61
- * | type | quality | stability |
62
- * |------|---------|-----------|
63
- * | backend | rare | experimental |
61
+ * | Stability | Since | Runtime |
62
+ * |-----------|-------|---------|
63
+ * | 1 - experimental | 0.19.0 | node, browser|
64
64
  *
65
65
  * Real-time bidirectional communication.
66
66
  *
@@ -1,30 +0,0 @@
1
- export const webHelloComponentTsx = (options: { auth?: boolean } = {}) => {
2
- const imports: string[] = [];
3
-
4
- if (options.auth) {
5
- imports.push('import { UserButton } from "@alepha/ui/auth";');
6
- }
7
- imports.push('import { useState } from "react";');
8
-
9
- const userButton = options.auth ? "\n <UserButton />" : "";
10
-
11
- return `${imports.join("\n")}
12
-
13
- interface Props {
14
- message?: string;
15
- }
16
-
17
- const Hello = (props: Props) => {
18
- const [message, setMessage] = useState(props.message ?? "");
19
- return (
20
- <div>
21
- <h1>{message}</h1>
22
- <input value={message} onChange={(e) => setMessage(e.target.value)} />
23
- <p>Edit this component in src/web/components/Hello.tsx</p>${userButton}
24
- </div>
25
- );
26
- };
27
-
28
- export default Hello;
29
- `;
30
- };