alepha 0.19.4 → 0.19.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 (104) hide show
  1. package/dist/api/audits/index.d.ts +8 -8
  2. package/dist/api/issues/index.d.ts +810 -0
  3. package/dist/api/issues/index.d.ts.map +1 -0
  4. package/dist/api/issues/index.js +447 -0
  5. package/dist/api/issues/index.js.map +1 -0
  6. package/dist/api/keys/index.d.ts +5 -5
  7. package/dist/api/users/index.d.ts +6 -0
  8. package/dist/api/users/index.d.ts.map +1 -1
  9. package/dist/api/users/index.js +10 -3
  10. package/dist/api/users/index.js.map +1 -1
  11. package/dist/api/workflows/index.d.ts +3 -3
  12. package/dist/captcha/index.d.ts +142 -0
  13. package/dist/captcha/index.d.ts.map +1 -0
  14. package/dist/captcha/index.js +177 -0
  15. package/dist/captcha/index.js.map +1 -0
  16. package/dist/cli/core/index.d.ts +82 -2
  17. package/dist/cli/core/index.d.ts.map +1 -1
  18. package/dist/cli/core/index.js +90 -6
  19. package/dist/cli/core/index.js.map +1 -1
  20. package/dist/cli/platform/index.d.ts +84 -10
  21. package/dist/cli/platform/index.d.ts.map +1 -1
  22. package/dist/cli/platform/index.js +92 -4
  23. package/dist/cli/platform/index.js.map +1 -1
  24. package/dist/cli/vendor/index.d.ts +30 -3
  25. package/dist/cli/vendor/index.d.ts.map +1 -1
  26. package/dist/cli/vendor/index.js +98 -21
  27. package/dist/cli/vendor/index.js.map +1 -1
  28. package/dist/command/index.d.ts.map +1 -1
  29. package/dist/command/index.js +2 -3
  30. package/dist/command/index.js.map +1 -1
  31. package/dist/orm/core/index.bun.js +6 -6
  32. package/dist/orm/core/index.bun.js.map +1 -1
  33. package/dist/orm/core/index.d.ts.map +1 -1
  34. package/dist/orm/core/index.js +6 -6
  35. package/dist/orm/core/index.js.map +1 -1
  36. package/dist/react/i18n/index.d.ts +1 -0
  37. package/dist/react/i18n/index.d.ts.map +1 -1
  38. package/dist/react/i18n/index.js +8 -4
  39. package/dist/react/i18n/index.js.map +1 -1
  40. package/dist/security/index.d.ts.map +1 -1
  41. package/dist/security/index.js.map +1 -1
  42. package/dist/server/auth/index.d.ts +145 -2
  43. package/dist/server/auth/index.d.ts.map +1 -1
  44. package/dist/server/auth/index.js +364 -63
  45. package/dist/server/auth/index.js.map +1 -1
  46. package/dist/server/cookies/index.d.ts.map +1 -1
  47. package/dist/server/cookies/index.js.map +1 -1
  48. package/dist/websocket/index.d.ts.map +1 -1
  49. package/dist/websocket/index.js.map +1 -1
  50. package/package.json +11 -1
  51. package/src/api/issues/__tests__/IssueService.spec.ts +263 -0
  52. package/src/api/issues/controllers/AdminIssueController.ts +149 -0
  53. package/src/api/issues/controllers/IssueController.ts +44 -0
  54. package/src/api/issues/entities/issues.ts +49 -0
  55. package/src/api/issues/index.ts +53 -0
  56. package/src/api/issues/schemas/createIssueSchema.ts +13 -0
  57. package/src/api/issues/schemas/issueConfigAtom.ts +13 -0
  58. package/src/api/issues/schemas/issueQuerySchema.ts +18 -0
  59. package/src/api/issues/schemas/issueResourceSchema.ts +6 -0
  60. package/src/api/issues/schemas/myIssueQuerySchema.ts +10 -0
  61. package/src/api/issues/schemas/updateIssueSchema.ts +13 -0
  62. package/src/api/issues/services/IssueService.ts +264 -0
  63. package/src/api/users/primitives/$realm.ts +24 -0
  64. package/src/api/users/services/CredentialService.ts +6 -3
  65. package/src/api/users/services/RegistrationService.ts +15 -5
  66. package/src/api/users/services/SessionService.ts +2 -0
  67. package/src/captcha/__tests__/MemoryCaptchaProvider.spec.ts +74 -0
  68. package/src/captcha/index.ts +33 -0
  69. package/src/captcha/providers/CaptchaProvider.ts +17 -0
  70. package/src/captcha/providers/MemoryCaptchaProvider.ts +65 -0
  71. package/src/captcha/providers/TurnstileCaptchaProvider.ts +125 -0
  72. package/src/cli/core/atoms/buildOptions.ts +57 -0
  73. package/src/cli/core/commands/build.ts +2 -0
  74. package/src/cli/core/providers/ViteDevServerProvider.ts +1 -1
  75. package/src/cli/core/services/ViteUtils.ts +5 -2
  76. package/src/cli/core/tasks/BuildClientTask.ts +3 -1
  77. package/src/cli/core/tasks/BuildCloudflareTask.ts +4 -0
  78. package/src/cli/core/tasks/BuildPwaTask.ts +81 -0
  79. package/src/cli/platform/adapters/CloudflareAdapter.ts +24 -0
  80. package/src/cli/platform/atoms/platformOptions.ts +19 -3
  81. package/src/cli/platform/hooks/PlatformHook.ts +51 -0
  82. package/src/cli/platform/index.ts +1 -0
  83. package/src/cli/platform/services/CloudflareApi.ts +22 -1
  84. package/src/cli/platform/services/PlatformOrchestrator.ts +67 -2
  85. package/src/cli/vendor/__tests__/VendorService.spec.ts +40 -1
  86. package/src/cli/vendor/commands/VendorCommand.ts +41 -38
  87. package/src/cli/vendor/services/VendorService.ts +108 -4
  88. package/src/command/__tests__/CliProvider.spec.ts +45 -0
  89. package/src/command/providers/CliProvider.ts +3 -4
  90. package/src/orm/core/services/Repository.ts +20 -6
  91. package/src/react/i18n/__tests__/I18nProvider.spec.ts +83 -0
  92. package/src/react/i18n/providers/I18nProvider.ts +12 -10
  93. package/src/security/primitives/$issuer.ts +3 -1
  94. package/src/server/auth/index.ts +7 -0
  95. package/src/server/auth/primitives/$auth.ts +37 -3
  96. package/src/server/auth/primitives/$authApple.ts +114 -4
  97. package/src/server/auth/primitives/$authFacebook.ts +98 -0
  98. package/src/server/auth/primitives/$authFranceConnect.ts +105 -0
  99. package/src/server/auth/primitives/$authGithub.ts +22 -16
  100. package/src/server/auth/primitives/$authMicrosoft.ts +88 -0
  101. package/src/server/auth/providers/ServerAuthProvider.ts +197 -72
  102. package/src/server/cookies/providers/ServerCookiesProvider.ts +3 -0
  103. package/src/server/core/__tests__/ServerRouterProvider-errorHandler.spec.ts +1 -1
  104. package/src/websocket/providers/NodeWebSocketServerProvider.ts +3 -1
@@ -7,11 +7,12 @@ import { $entity, $repository, db, pageQuerySchema, parseQueryString, sql } from
7
7
  import { $logger } from "alepha/logger";
8
8
  import { $client } from "alepha/server/links";
9
9
  import { $notification } from "alepha/api/notifications";
10
- import { $authCredentials, $authGithub, $authGoogle, ServerAuthProvider, authenticationProviderSchema } from "alepha/server/auth";
10
+ import { $authApple, $authCredentials, $authFacebook, $authFranceConnect, $authGithub, $authGoogle, $authMicrosoft, ServerAuthProvider, authenticationProviderSchema } from "alepha/server/auth";
11
11
  import { $etag } from "alepha/server/etag";
12
12
  import { randomInt, randomUUID } from "node:crypto";
13
13
  import { $cache, CacheProvider } from "alepha/cache";
14
14
  import { DateTimeProvider } from "alepha/datetime";
15
+ import { CaptchaProvider } from "alepha/captcha";
15
16
  import { $job } from "alepha/api/jobs";
16
17
  import { FileSystemProvider } from "alepha/system";
17
18
  import { AlephaApiKeys, ApiKeyService } from "alepha/api/keys";
@@ -1446,10 +1447,10 @@ var CredentialService = class {
1446
1447
  });
1447
1448
  throw new BadRequestError("Verification code has already been used");
1448
1449
  }
1449
- await this.intentCache.invalidate(body.intentId);
1450
1450
  const hashedPassword = await this.cryptoProvider.hashPassword(body.newPassword);
1451
1451
  await this.identities(intent.realmName).updateById(intent.identityId, { password: hashedPassword });
1452
1452
  await this.sessions(intent.realmName).deleteMany({ userId: { eq: intent.userId } });
1453
+ await this.intentCache.invalidate(body.intentId);
1453
1454
  this.log.info("Password reset completed", {
1454
1455
  userId: intent.userId,
1455
1456
  email: intent.email
@@ -1544,6 +1545,7 @@ var RegistrationService = class {
1544
1545
  verificationController = $client();
1545
1546
  realmProvider = $inject(RealmProvider);
1546
1547
  credentialService = $inject(CredentialService);
1548
+ captchaProvider = $inject(CaptchaProvider);
1547
1549
  intentCache = $cache({
1548
1550
  name: "api:users:registrations",
1549
1551
  ttl: [INTENT_TTL_MINUTES, "minutes"]
@@ -1689,6 +1691,7 @@ var RegistrationService = class {
1689
1691
  }
1690
1692
  if (intent.requirements.captcha) {
1691
1693
  if (!body.captchaToken) throw new BadRequestError("Captcha verification is required");
1694
+ if (!await this.captchaProvider.verify(body.captchaToken)) throw new BadRequestError("Captcha verification failed");
1692
1695
  }
1693
1696
  await this.checkUserAvailability({
1694
1697
  username: intent.data.username,
@@ -1709,12 +1712,12 @@ var RegistrationService = class {
1709
1712
  enabled: true,
1710
1713
  emailVerified: intent.requirements.email
1711
1714
  });
1712
- await this.intentCache.invalidate(body.intentId);
1713
1715
  await identityRepository.create({
1714
1716
  userId: user.id,
1715
1717
  provider: "credentials",
1716
1718
  password: intent.data.passwordHash
1717
1719
  });
1720
+ await this.intentCache.invalidate(body.intentId);
1718
1721
  this.log.info("User registered successfully", {
1719
1722
  userId: user.id,
1720
1723
  email: user.email,
@@ -2754,6 +2757,10 @@ const $realm = (options = {}) => {
2754
2757
  else realmRegistration.settings.registrationAllowed = false;
2755
2758
  if (identities.google) auth.google = $authGoogle(realm);
2756
2759
  if (identities.github) auth.github = $authGithub(realm);
2760
+ if (identities.apple) auth.apple = $authApple(realm);
2761
+ if (identities.facebook) auth.facebook = $authFacebook(realm);
2762
+ if (identities.microsoft) auth.microsoft = $authMicrosoft(realm);
2763
+ if (identities.franceconnect) auth.franceconnect = $authFranceConnect(realm);
2757
2764
  alepha.with(() => auth);
2758
2765
  }
2759
2766
  if (features.parameters) {