@aurabase/aurabase-js 0.3.0 → 0.4.0
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/README.md +26 -795
- package/{packages/aurabase/dist/AuraClient-DAtDbfPB.d.ts → dist/AuraClient-BcFE8u1v.d.cts} +1 -1
- package/{packages/aurabase/dist/AuraClient-DAtDbfPB.d.cts → dist/AuraClient-BcFE8u1v.d.ts} +1 -1
- package/{packages/aurabase/dist → dist}/index.d.cts +1 -1
- package/{packages/aurabase/dist → dist}/index.d.ts +1 -1
- package/{packages/aurabase/dist → dist}/ssr.d.cts +1 -1
- package/{packages/aurabase/dist → dist}/ssr.d.ts +1 -1
- package/package.json +72 -82
- package/.changeset/config.json +0 -11
- package/CHANGELOG.md +0 -30
- package/packages/ai/LICENSE +0 -21
- package/packages/ai/README.md +0 -106
- package/packages/ai/dist/index.cjs +0 -229
- package/packages/ai/dist/index.d.cts +0 -139
- package/packages/ai/dist/index.d.ts +0 -139
- package/packages/ai/dist/index.js +0 -226
- package/packages/ai/node_modules/.bin/esbuild +0 -19
- package/packages/ai/node_modules/.bin/tsc +0 -22
- package/packages/ai/node_modules/.bin/tsserver +0 -22
- package/packages/ai/node_modules/.bin/tsup +0 -22
- package/packages/ai/node_modules/.bin/tsup-node +0 -22
- package/packages/ai/node_modules/.bin/vite +0 -22
- package/packages/ai/node_modules/.bin/vitest +0 -22
- package/packages/ai/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/ai/package.json +0 -61
- package/packages/ai/src/AiService.ts +0 -226
- package/packages/ai/src/index.ts +0 -18
- package/packages/ai/src/sse.ts +0 -141
- package/packages/ai/src/types.ts +0 -30
- package/packages/ai/tests/chat-stream.test.ts +0 -151
- package/packages/ai/tests/rag-namespaces.test.ts +0 -54
- package/packages/ai/tests/sse.test.ts +0 -69
- package/packages/ai/tsconfig.json +0 -5
- package/packages/ai/tsup.config.ts +0 -11
- package/packages/aurabase/LICENSE +0 -21
- package/packages/aurabase/README.md +0 -64
- package/packages/aurabase/node_modules/.bin/esbuild +0 -19
- package/packages/aurabase/node_modules/.bin/tsc +0 -22
- package/packages/aurabase/node_modules/.bin/tsserver +0 -22
- package/packages/aurabase/node_modules/.bin/tsup +0 -22
- package/packages/aurabase/node_modules/.bin/tsup-node +0 -22
- package/packages/aurabase/node_modules/.bin/vite +0 -22
- package/packages/aurabase/node_modules/.bin/vitest +0 -22
- package/packages/aurabase/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/aurabase/package.json +0 -80
- package/packages/aurabase/src/AuraClient.ts +0 -237
- package/packages/aurabase/src/index.ts +0 -152
- package/packages/aurabase/src/ssr.ts +0 -156
- package/packages/aurabase/tests/ai-streaming-rag-e2e.test.ts +0 -82
- package/packages/aurabase/tests/ai.test.ts +0 -111
- package/packages/aurabase/tests/auth-admin.test.ts +0 -515
- package/packages/aurabase/tests/auth-e2e.test.ts +0 -135
- package/packages/aurabase/tests/auth-hardening.test.ts +0 -206
- package/packages/aurabase/tests/auth.test.ts +0 -947
- package/packages/aurabase/tests/database.test.ts +0 -230
- package/packages/aurabase/tests/db-types-e2e.test.ts +0 -217
- package/packages/aurabase/tests/dispose.test.ts +0 -23
- package/packages/aurabase/tests/foreign-token.e2e.test.ts +0 -129
- package/packages/aurabase/tests/functions.test.ts +0 -107
- package/packages/aurabase/tests/integration.test.ts +0 -413
- package/packages/aurabase/tests/live-production-validation.js +0 -241
- package/packages/aurabase/tests/live-sdk-production-validation.js +0 -293
- package/packages/aurabase/tests/mocks.ts +0 -139
- package/packages/aurabase/tests/notifications.test.ts +0 -314
- package/packages/aurabase/tests/observability-backup.test.ts +0 -186
- package/packages/aurabase/tests/observability-hook.test.ts +0 -130
- package/packages/aurabase/tests/production-robustness.test.ts +0 -268
- package/packages/aurabase/tests/public-api-surface.test.ts +0 -53
- package/packages/aurabase/tests/query-builder.test.ts +0 -329
- package/packages/aurabase/tests/readme-smoke-e2e.test.ts +0 -231
- package/packages/aurabase/tests/realtime-filter-e2e.test.ts +0 -344
- package/packages/aurabase/tests/refresh-locks.test.ts +0 -210
- package/packages/aurabase/tests/retry-option.test.ts +0 -17
- package/packages/aurabase/tests/rpc-e2e.test.ts +0 -254
- package/packages/aurabase/tests/rs256-local-e2e.test.ts +0 -114
- package/packages/aurabase/tests/rt-alias-public-e2e.test.ts +0 -235
- package/packages/aurabase/tests/rt-http-broadcast-e2e.test.ts +0 -124
- package/packages/aurabase/tests/service-role-guard.test.ts +0 -99
- package/packages/aurabase/tests/ssr.test.ts +0 -91
- package/packages/aurabase/tests/storage-backend-e2e.test.ts +0 -481
- package/packages/aurabase/tests/storage-sdk-parity-e2e.test.ts +0 -104
- package/packages/aurabase/tests/storage-transform-e2e.test.ts +0 -684
- package/packages/aurabase/tests/storage.test.ts +0 -55
- package/packages/aurabase/tests/types/client-generic.test-d.ts +0 -79
- package/packages/aurabase/tests/types/docs-snippets.test-d.ts +0 -571
- package/packages/aurabase/tests/types/error-code.test-d.ts +0 -53
- package/packages/aurabase/tsconfig.json +0 -5
- package/packages/aurabase/tsconfig.test-d.json +0 -5
- package/packages/aurabase/tsup.config.ts +0 -11
- package/packages/aurabase/vitest.config.ts +0 -16
- package/packages/aurabase/vitest.e2e.config.ts +0 -9
- package/packages/auth/LICENSE +0 -21
- package/packages/auth/README.md +0 -215
- package/packages/auth/dist/index.cjs +0 -1175
- package/packages/auth/dist/index.d.cts +0 -397
- package/packages/auth/dist/index.d.ts +0 -397
- package/packages/auth/dist/index.js +0 -1170
- package/packages/auth/node_modules/.bin/esbuild +0 -19
- package/packages/auth/node_modules/.bin/tsc +0 -22
- package/packages/auth/node_modules/.bin/tsserver +0 -22
- package/packages/auth/node_modules/.bin/tsup +0 -22
- package/packages/auth/node_modules/.bin/tsup-node +0 -22
- package/packages/auth/node_modules/.bin/vite +0 -22
- package/packages/auth/node_modules/.bin/vitest +0 -22
- package/packages/auth/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/auth/package.json +0 -61
- package/packages/auth/src/AuthAdminService.ts +0 -149
- package/packages/auth/src/AuthService.ts +0 -1166
- package/packages/auth/src/SessionManager.ts +0 -92
- package/packages/auth/src/index.ts +0 -17
- package/packages/auth/src/jwks.ts +0 -337
- package/packages/auth/src/pkce.ts +0 -27
- package/packages/auth/src/types.ts +0 -89
- package/packages/auth/tests/auth-lifecycle.test.ts +0 -149
- package/packages/auth/tests/detect-session.test.ts +0 -361
- package/packages/auth/tests/getclaims.test.ts +0 -780
- package/packages/auth/tests/is-mfa-challenge.test.ts +0 -27
- package/packages/auth/tests/password-recovery.test.ts +0 -124
- package/packages/auth/tests/pkce.test.ts +0 -192
- package/packages/auth/tests/session-manager.test.ts +0 -103
- package/packages/auth/tests/set-session.test.ts +0 -139
- package/packages/auth/tests/verify-otp.test.ts +0 -153
- package/packages/auth/tsconfig.json +0 -5
- package/packages/auth/tsup.config.ts +0 -11
- package/packages/core/LICENSE +0 -21
- package/packages/core/README.md +0 -132
- package/packages/core/dist/index.cjs +0 -695
- package/packages/core/dist/index.d.cts +0 -1137
- package/packages/core/dist/index.d.ts +0 -1137
- package/packages/core/dist/index.js +0 -673
- package/packages/core/node_modules/.bin/esbuild +0 -22
- package/packages/core/node_modules/.bin/tsc +0 -22
- package/packages/core/node_modules/.bin/tsserver +0 -22
- package/packages/core/node_modules/.bin/tsup +0 -22
- package/packages/core/node_modules/.bin/tsup-node +0 -22
- package/packages/core/node_modules/.bin/vite +0 -22
- package/packages/core/node_modules/.bin/vitest +0 -22
- package/packages/core/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/core/package.json +0 -57
- package/packages/core/src/AuraError.ts +0 -89
- package/packages/core/src/BaseService.ts +0 -44
- package/packages/core/src/client.ts +0 -34
- package/packages/core/src/cookie-utils.ts +0 -42
- package/packages/core/src/fetch.ts +0 -435
- package/packages/core/src/index.ts +0 -22
- package/packages/core/src/retry.ts +0 -63
- package/packages/core/src/serialize.ts +0 -6
- package/packages/core/src/stores/BaseAuthStore.ts +0 -164
- package/packages/core/src/stores/LocalAuthStore.ts +0 -199
- package/packages/core/src/types.ts +0 -1042
- package/packages/core/tests/auth-store.test.ts +0 -300
- package/packages/core/tests/error-code.test.ts +0 -61
- package/packages/core/tests/error.test.ts +0 -24
- package/packages/core/tests/fetch.test.ts +0 -286
- package/packages/core/tests/mocks.ts +0 -139
- package/packages/core/tests/observability.test.ts +0 -86
- package/packages/core/tests/refresh-hardening.test.ts +0 -164
- package/packages/core/tests/refresh-observability.test.ts +0 -111
- package/packages/core/tests/retry.test.ts +0 -106
- package/packages/core/tests/serialize.test.ts +0 -12
- package/packages/core/tests/timeout.test.ts +0 -79
- package/packages/core/tsconfig.json +0 -5
- package/packages/core/tsup.config.ts +0 -11
- package/packages/db/LICENSE +0 -21
- package/packages/db/README.md +0 -152
- package/packages/db/VENDORED.md +0 -93
- package/packages/db/dist/index.cjs +0 -544
- package/packages/db/dist/index.d.cts +0 -1111
- package/packages/db/dist/index.d.ts +0 -1111
- package/packages/db/dist/index.js +0 -541
- package/packages/db/node_modules/.bin/esbuild +0 -19
- package/packages/db/node_modules/.bin/tsc +0 -22
- package/packages/db/node_modules/.bin/tsserver +0 -22
- package/packages/db/node_modules/.bin/tsup +0 -22
- package/packages/db/node_modules/.bin/tsup-node +0 -22
- package/packages/db/node_modules/.bin/vite +0 -22
- package/packages/db/node_modules/.bin/vitest +0 -22
- package/packages/db/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/db/package.json +0 -62
- package/packages/db/src/DatabaseService.ts +0 -170
- package/packages/db/src/QueryBuilder.ts +0 -830
- package/packages/db/src/index.ts +0 -2
- package/packages/db/src/pgrst-types/common/common.ts +0 -86
- package/packages/db/src/pgrst-types/common/rpc.ts +0 -151
- package/packages/db/src/pgrst-types/feature-flags.ts +0 -20
- package/packages/db/src/pgrst-types/types.ts +0 -134
- package/packages/db/src/select-query-parser/parser.ts +0 -479
- package/packages/db/src/select-query-parser/result.ts +0 -553
- package/packages/db/src/select-query-parser/types.ts +0 -132
- package/packages/db/src/select-query-parser/utils.ts +0 -707
- package/packages/db/tests/filters.test.ts +0 -81
- package/packages/db/tests/mutations-filtered.e2e.test.ts +0 -132
- package/packages/db/tests/mutations-filtered.test.ts +0 -188
- package/packages/db/tests/order.test.ts +0 -45
- package/packages/db/tests/rpc.test.ts +0 -41
- package/packages/db/tests/scale/build-large-schema.ts +0 -94
- package/packages/db/tests/scale/scale-compile.test.ts +0 -167
- package/packages/db/tests/schema.test.ts +0 -77
- package/packages/db/tests/single-accept.e2e.test.ts +0 -123
- package/packages/db/tests/single.test.ts +0 -211
- package/packages/db/tests/types/filters.test-d.ts +0 -52
- package/packages/db/tests/types/fixtures.ts +0 -40
- package/packages/db/tests/types/from-views.test-d.ts +0 -18
- package/packages/db/tests/types/mutations.test-d.ts +0 -23
- package/packages/db/tests/types/rpc.test-d.ts +0 -60
- package/packages/db/tests/types/schema-shape.test-d.ts +0 -8
- package/packages/db/tests/types/select-inference.test-d.ts +0 -38
- package/packages/db/tests/vendored/fixtures.ts +0 -83
- package/packages/db/tests/vendored/get-result.test-d.ts +0 -75
- package/packages/db/tsconfig.json +0 -5
- package/packages/db/tsconfig.test-d.json +0 -5
- package/packages/db/tsup.config.ts +0 -11
- package/packages/db/vitest.config.ts +0 -8
- package/packages/functions/LICENSE +0 -21
- package/packages/functions/README.md +0 -96
- package/packages/functions/dist/index.cjs +0 -173
- package/packages/functions/dist/index.d.cts +0 -81
- package/packages/functions/dist/index.d.ts +0 -81
- package/packages/functions/dist/index.js +0 -168
- package/packages/functions/node_modules/.bin/esbuild +0 -19
- package/packages/functions/node_modules/.bin/tsc +0 -22
- package/packages/functions/node_modules/.bin/tsserver +0 -22
- package/packages/functions/node_modules/.bin/tsup +0 -22
- package/packages/functions/node_modules/.bin/tsup-node +0 -22
- package/packages/functions/node_modules/.bin/vite +0 -22
- package/packages/functions/node_modules/.bin/vitest +0 -22
- package/packages/functions/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/functions/package.json +0 -60
- package/packages/functions/src/FunctionsService.ts +0 -188
- package/packages/functions/src/errors.ts +0 -70
- package/packages/functions/src/index.ts +0 -6
- package/packages/functions/tests/invoke.test.ts +0 -97
- package/packages/functions/tests/response-type-errors.test.ts +0 -135
- package/packages/functions/tsconfig.json +0 -5
- package/packages/functions/tsup.config.ts +0 -11
- package/packages/gen/LICENSE +0 -21
- package/packages/gen/README.md +0 -84
- package/packages/gen/dist/cli.cjs +0 -334
- package/packages/gen/dist/cli.d.cts +0 -1
- package/packages/gen/dist/cli.d.ts +0 -1
- package/packages/gen/dist/cli.js +0 -332
- package/packages/gen/dist/index.cjs +0 -257
- package/packages/gen/dist/index.d.cts +0 -12
- package/packages/gen/dist/index.d.ts +0 -12
- package/packages/gen/dist/index.js +0 -255
- package/packages/gen/node_modules/.bin/esbuild +0 -19
- package/packages/gen/node_modules/.bin/tsc +0 -22
- package/packages/gen/node_modules/.bin/tsserver +0 -22
- package/packages/gen/node_modules/.bin/tsup +0 -22
- package/packages/gen/node_modules/.bin/tsup-node +0 -22
- package/packages/gen/node_modules/.bin/vite +0 -22
- package/packages/gen/node_modules/.bin/vitest +0 -22
- package/packages/gen/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/gen/package.json +0 -66
- package/packages/gen/src/cli.ts +0 -67
- package/packages/gen/src/generate.ts +0 -0
- package/packages/gen/src/index.ts +0 -2
- package/packages/gen/tests/compile.test.ts +0 -213
- package/packages/gen/tests/e2e.test.ts +0 -130
- package/packages/gen/tests/generate.test.ts +0 -396
- package/packages/gen/tsconfig.json +0 -5
- package/packages/gen/tsup.config.ts +0 -11
- package/packages/notifications/LICENSE +0 -21
- package/packages/notifications/README.md +0 -134
- package/packages/notifications/dist/index.cjs +0 -128
- package/packages/notifications/dist/index.d.cts +0 -81
- package/packages/notifications/dist/index.d.ts +0 -81
- package/packages/notifications/dist/index.js +0 -125
- package/packages/notifications/node_modules/.bin/esbuild +0 -19
- package/packages/notifications/node_modules/.bin/tsc +0 -22
- package/packages/notifications/node_modules/.bin/tsserver +0 -22
- package/packages/notifications/node_modules/.bin/tsup +0 -22
- package/packages/notifications/node_modules/.bin/tsup-node +0 -22
- package/packages/notifications/node_modules/.bin/vite +0 -22
- package/packages/notifications/node_modules/.bin/vitest +0 -22
- package/packages/notifications/package.json +0 -60
- package/packages/notifications/src/NotificationsService.ts +0 -230
- package/packages/notifications/src/index.ts +0 -19
- package/packages/notifications/tsconfig.json +0 -5
- package/packages/notifications/tsup.config.ts +0 -11
- package/packages/realtime/LICENSE +0 -21
- package/packages/realtime/README.md +0 -183
- package/packages/realtime/dist/index.cjs +0 -977
- package/packages/realtime/dist/index.d.cts +0 -259
- package/packages/realtime/dist/index.d.ts +0 -259
- package/packages/realtime/dist/index.js +0 -973
- package/packages/realtime/node_modules/.bin/esbuild +0 -19
- package/packages/realtime/node_modules/.bin/tsc +0 -22
- package/packages/realtime/node_modules/.bin/tsserver +0 -22
- package/packages/realtime/node_modules/.bin/tsup +0 -22
- package/packages/realtime/node_modules/.bin/tsup-node +0 -22
- package/packages/realtime/node_modules/.bin/vite +0 -22
- package/packages/realtime/node_modules/.bin/vitest +0 -22
- package/packages/realtime/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/realtime/package.json +0 -60
- package/packages/realtime/src/AuraChannel.ts +0 -485
- package/packages/realtime/src/HeartbeatManager.ts +0 -73
- package/packages/realtime/src/RealtimeService.ts +0 -505
- package/packages/realtime/src/columnFilter.ts +0 -301
- package/packages/realtime/src/index.ts +0 -4
- package/packages/realtime/tests/ack-routing.test.ts +0 -81
- package/packages/realtime/tests/column-filter.test.ts +0 -144
- package/packages/realtime/tests/dispatch.test.ts +0 -191
- package/packages/realtime/tests/heartbeat.test.ts +0 -67
- package/packages/realtime/tests/http-broadcast.test.ts +0 -68
- package/packages/realtime/tests/realtime-token.test.ts +0 -43
- package/packages/realtime/tests/reconnect-race.test.ts +0 -149
- package/packages/realtime/tests/ref-id.test.ts +0 -34
- package/packages/realtime/tests/set-auth.test.ts +0 -70
- package/packages/realtime/tsconfig.json +0 -5
- package/packages/realtime/tsup.config.ts +0 -11
- package/packages/storage/LICENSE +0 -21
- package/packages/storage/README.md +0 -141
- package/packages/storage/dist/index.cjs +0 -333
- package/packages/storage/dist/index.d.cts +0 -185
- package/packages/storage/dist/index.d.ts +0 -185
- package/packages/storage/dist/index.js +0 -329
- package/packages/storage/node_modules/.bin/esbuild +0 -19
- package/packages/storage/node_modules/.bin/tsc +0 -22
- package/packages/storage/node_modules/.bin/tsserver +0 -22
- package/packages/storage/node_modules/.bin/tsup +0 -22
- package/packages/storage/node_modules/.bin/tsup-node +0 -22
- package/packages/storage/node_modules/.bin/vite +0 -22
- package/packages/storage/node_modules/.bin/vitest +0 -22
- package/packages/storage/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
- package/packages/storage/package.json +0 -60
- package/packages/storage/src/DownloadBuilder.ts +0 -60
- package/packages/storage/src/StorageService.ts +0 -323
- package/packages/storage/src/index.ts +0 -2
- package/packages/storage/src/path.ts +0 -35
- package/packages/storage/src/transform.ts +0 -15
- package/packages/storage/tests/download.test.ts +0 -64
- package/packages/storage/tests/parity.test.ts +0 -154
- package/packages/storage/tests/path.test.ts +0 -87
- package/packages/storage/tests/transform.test.ts +0 -79
- package/packages/storage/tsconfig.json +0 -5
- package/packages/storage/tsup.config.ts +0 -11
- package/pnpm-workspace.yaml +0 -24
- package/tsconfig.base.json +0 -15
- /package/{packages/aurabase/dist → dist}/index.cjs +0 -0
- /package/{packages/aurabase/dist → dist}/index.js +0 -0
- /package/{packages/aurabase/dist → dist}/ssr.cjs +0 -0
- /package/{packages/aurabase/dist → dist}/ssr.js +0 -0
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
// ---------------------------------------------------------------------------
|
|
2
|
-
// E2E réel auth (stack live) — Task 8
|
|
3
|
-
//
|
|
4
|
-
// Valide en conditions réelles les correctifs des Tasks 3/5/6 contre le
|
|
5
|
-
// déploiement Docker local (gateway :8080, control :8090). Le JWKS de ce
|
|
6
|
-
// déploiement est vide (`{"keys":[]}`) et les tokens sont HS256 : `getClaims`
|
|
7
|
-
// doit donc exercer le chemin FALLBACK `getUser()` (pas la vérif locale
|
|
8
|
-
// JWKS/WebCrypto), cf. `AuthService.getClaims` (packages/auth/src/AuthService.ts).
|
|
9
|
-
//
|
|
10
|
-
// Flux (une seule séquence, en `it` unique) :
|
|
11
|
-
// 1. signUp + signInWithPassword (anon key) → token + user.id.
|
|
12
|
-
// 2. getClaims() sur le vrai token → fallback getUser → claims.sub === user.id.
|
|
13
|
-
// 3. generateLink admin : type 'magic' → { link, token } ; type 'magiclink'
|
|
14
|
-
// (invalide) → error.
|
|
15
|
-
// 4. updatePassword → ancien token révoqué (401 brut) + store vidé +
|
|
16
|
-
// événement SIGNED_OUT émis via onAuthStateChange.
|
|
17
|
-
// 5. getUserStats admin → total >= 1.
|
|
18
|
-
// 6. Nettoyage en `finally` (authAdmin.deleteUser, best-effort).
|
|
19
|
-
//
|
|
20
|
-
// Gaté par RUN_E2E + credentials — squelette calqué sur
|
|
21
|
-
// `packages/aurabase/tests/db-types-e2e.test.ts` (env-based, describe.runIf,
|
|
22
|
-
// cleanup en finally, timeout long).
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
|
|
25
|
-
import { describe, it, expect } from 'vitest'
|
|
26
|
-
import { createClient, createAdminClient } from '../src/index'
|
|
27
|
-
import type { AuraResponse, AuthChangePayload } from '../src/index'
|
|
28
|
-
|
|
29
|
-
const URL = process.env.AURA_E2E_URL
|
|
30
|
-
const PROJECT = process.env.AURA_E2E_PROJECT
|
|
31
|
-
const ANON = process.env.AURA_E2E_ANON_KEY
|
|
32
|
-
const SERVICE = process.env.AURA_E2E_SERVICE_KEY
|
|
33
|
-
const RUN = Boolean(process.env.RUN_E2E && URL && PROJECT && ANON && SERVICE)
|
|
34
|
-
|
|
35
|
-
/** Statuts transitoires observés sur la stack locale (timeout gateway→service sous charge). */
|
|
36
|
-
const TRANSIENT_STATUS = new Set([408, 429, 502, 503, 504])
|
|
37
|
-
|
|
38
|
-
/** Rejoue une requête tant qu'elle renvoie un statut transitoire (408/429/502/503/504), borné. */
|
|
39
|
-
async function retryTransient<T>(fn: () => Promise<AuraResponse<T>>): Promise<AuraResponse<T>> {
|
|
40
|
-
let res = await fn()
|
|
41
|
-
for (let i = 0; i < 10 && res.error && TRANSIENT_STATUS.has(res.error.status); i++) {
|
|
42
|
-
await new Promise((r) => setTimeout(r, 1000))
|
|
43
|
-
res = await fn()
|
|
44
|
-
}
|
|
45
|
-
return res
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
describe.runIf(RUN)('auth E2E réel — getClaims fallback / generateLink / updatePassword / stats (stack live)', () => {
|
|
49
|
-
it(
|
|
50
|
-
'register→login→getClaims(fallback HS256)→generateLink→updatePassword(révocation+SIGNED_OUT)→getUserStats',
|
|
51
|
-
async () => {
|
|
52
|
-
const client = createClient(URL!, PROJECT!, ANON!)
|
|
53
|
-
const admin = createAdminClient(URL!, PROJECT!, SERVICE!)
|
|
54
|
-
const suffix = process.env.AURA_E2E_SUFFIX ?? Math.random().toString(36).slice(2, 8)
|
|
55
|
-
const email = `auth-e2e-${suffix}@aurabase.dev`
|
|
56
|
-
const password = 'EndUserPassword123!'
|
|
57
|
-
|
|
58
|
-
let userId: string | null = null
|
|
59
|
-
try {
|
|
60
|
-
// -- 1. register + login (anon key) -----------------------------------
|
|
61
|
-
const signUpRes = await retryTransient(() => client.auth.signUp({ email, password }))
|
|
62
|
-
expect(signUpRes.error).toBeNull()
|
|
63
|
-
|
|
64
|
-
const loginRes = await retryTransient(() => client.auth.signInWithPassword({ email, password }))
|
|
65
|
-
expect(loginRes.error).toBeNull()
|
|
66
|
-
const loginData = loginRes.data as { access_token: string; user: { id: string } }
|
|
67
|
-
expect(loginData.access_token).toBeTruthy()
|
|
68
|
-
userId = loginData.user.id
|
|
69
|
-
expect(userId).toBeTruthy()
|
|
70
|
-
|
|
71
|
-
const { accessToken: tokenAfterLogin } = await client.auth.getSession()
|
|
72
|
-
expect(tokenAfterLogin).toBe(loginData.access_token)
|
|
73
|
-
|
|
74
|
-
// -- 2. getClaims — déploiement HS256 / JWKS vide → chemin fallback getUser --
|
|
75
|
-
const claimsRes = await client.auth.getClaims()
|
|
76
|
-
expect(claimsRes.error).toBeNull()
|
|
77
|
-
expect(claimsRes.data?.claims.sub).toBe(userId)
|
|
78
|
-
expect(claimsRes.data?.header.alg).toBe('HS256')
|
|
79
|
-
|
|
80
|
-
// -- 3. generateLink (admin) -------------------------------------------
|
|
81
|
-
const magicRes = await admin.authAdmin.generateLink(userId!, 'magic')
|
|
82
|
-
expect(magicRes.error).toBeNull()
|
|
83
|
-
expect(magicRes.data).not.toBeNull()
|
|
84
|
-
expect(magicRes.data).toHaveProperty('link')
|
|
85
|
-
expect(magicRes.data).toHaveProperty('token')
|
|
86
|
-
|
|
87
|
-
const invalidRes = await admin.authAdmin.generateLink(
|
|
88
|
-
userId!,
|
|
89
|
-
// Type invalide volontaire — vérifie le rejet serveur (400), pas le typage TS.
|
|
90
|
-
'magiclink' as unknown as 'magic',
|
|
91
|
-
)
|
|
92
|
-
expect(invalidRes.error).not.toBeNull()
|
|
93
|
-
|
|
94
|
-
// -- 4. updatePassword : ancien token révoqué + SIGNED_OUT émis --------
|
|
95
|
-
const events: AuthChangePayload[] = []
|
|
96
|
-
const sub = client.auth.onAuthStateChange((payload) => {
|
|
97
|
-
events.push(payload)
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
const oldToken = (await client.auth.getSession()).accessToken
|
|
101
|
-
expect(oldToken).toBeTruthy()
|
|
102
|
-
|
|
103
|
-
const updateRes = await client.auth.updatePassword('NewPassword456!', password)
|
|
104
|
-
expect(updateRes.error).toBeNull()
|
|
105
|
-
|
|
106
|
-
const sessionAfterUpdate = await client.auth.getSession()
|
|
107
|
-
expect(sessionAfterUpdate.accessToken).toBeNull()
|
|
108
|
-
expect(events.some((e) => e.event === 'SIGNED_OUT')).toBe(true)
|
|
109
|
-
|
|
110
|
-
sub.unsubscribe()
|
|
111
|
-
|
|
112
|
-
// Requête BRUTE avec l'ancien token (le client courant a le store vidé) :
|
|
113
|
-
// preuve que le backend a bien révoqué la session, pas seulement le SDK local.
|
|
114
|
-
const rawRes = await fetch(`${URL}/v1/auth/${PROJECT}/user`, {
|
|
115
|
-
headers: { Authorization: `Bearer ${oldToken}`, apikey: ANON! },
|
|
116
|
-
})
|
|
117
|
-
expect(rawRes.status).toBe(401)
|
|
118
|
-
|
|
119
|
-
// -- 5. getUserStats (admin) -------------------------------------------
|
|
120
|
-
const statsRes = await admin.authAdmin.getUserStats()
|
|
121
|
-
expect(statsRes.error).toBeNull()
|
|
122
|
-
expect(statsRes.data?.total).toBeGreaterThanOrEqual(1)
|
|
123
|
-
} finally {
|
|
124
|
-
if (userId) {
|
|
125
|
-
try {
|
|
126
|
-
await admin.authAdmin.deleteUser(userId)
|
|
127
|
-
} catch {
|
|
128
|
-
// best-effort cleanup
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
120_000,
|
|
134
|
-
)
|
|
135
|
-
})
|
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
// ---------------------------------------------------------------------------
|
|
2
|
-
// Tests des correctifs Lot 4 — durcissement SDK auth (E17/E18/E19/E20/E21)
|
|
3
|
-
// ---------------------------------------------------------------------------
|
|
4
|
-
|
|
5
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest'
|
|
6
|
-
import { AuraClient } from '../src/AuraClient'
|
|
7
|
-
import { createAdminClient } from '../src/index'
|
|
8
|
-
import { isAuraError, AuraError } from '@aurabase/core'
|
|
9
|
-
import { FetchMock, fakeTokenPair, fakeUser, validJwt, expiredJwt } from './mocks'
|
|
10
|
-
|
|
11
|
-
const BASE = 'http://localhost:8080'
|
|
12
|
-
const PROJECT = 'test-project'
|
|
13
|
-
const PREFIX = `${BASE}/v1/auth/${PROJECT}`
|
|
14
|
-
|
|
15
|
-
function jsonResponse(body: unknown, status: number): Response {
|
|
16
|
-
return new Response(body !== undefined ? JSON.stringify(body) : null, {
|
|
17
|
-
status,
|
|
18
|
-
headers: { 'Content-Type': 'application/json' },
|
|
19
|
-
})
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// ---------------------------------------------------------------------------
|
|
23
|
-
// E18 — le contrat d'erreur retourne de vraies instances AuraError
|
|
24
|
-
// ---------------------------------------------------------------------------
|
|
25
|
-
|
|
26
|
-
describe('E18 — error est une vraie instance AuraError', () => {
|
|
27
|
-
let fetchMock: FetchMock
|
|
28
|
-
let client: AuraClient
|
|
29
|
-
|
|
30
|
-
beforeEach(() => {
|
|
31
|
-
fetchMock = new FetchMock()
|
|
32
|
-
fetchMock.init()
|
|
33
|
-
client = new AuraClient(BASE, PROJECT, { auth: { persistSession: false } })
|
|
34
|
-
})
|
|
35
|
-
afterEach(() => {
|
|
36
|
-
fetchMock.restore()
|
|
37
|
-
fetchMock.clearMocks()
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
it('expose status / isUnauthorized / isAuraError sur une erreur HTTP', async () => {
|
|
41
|
-
fetchMock.on({
|
|
42
|
-
method: 'POST',
|
|
43
|
-
url: `${PREFIX}/login`,
|
|
44
|
-
replyCode: 401,
|
|
45
|
-
replyBody: { error: { code: 'invalid', message: 'Identifiants invalides' } },
|
|
46
|
-
})
|
|
47
|
-
const { error } = await client.auth.signInWithPassword({ email: 'a@b.com', password: 'x' })
|
|
48
|
-
expect(error).not.toBeNull()
|
|
49
|
-
expect(isAuraError(error)).toBe(true)
|
|
50
|
-
expect(error).toBeInstanceOf(AuraError)
|
|
51
|
-
expect((error as AuraError).status).toBe(401)
|
|
52
|
-
expect((error as AuraError).isUnauthorized).toBe(true)
|
|
53
|
-
expect((error as AuraError).code).toBe('invalid')
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
it('erreur synthétique (no_session) est aussi une vraie instance', async () => {
|
|
57
|
-
// pas de refresh token en mémoire → refreshSession renvoie no_session
|
|
58
|
-
const { error } = await client.auth.refreshSession()
|
|
59
|
-
expect(isAuraError(error)).toBe(true)
|
|
60
|
-
expect((error as AuraError).code).toBe('no_session')
|
|
61
|
-
expect((error as AuraError).status).toBe(0)
|
|
62
|
-
})
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
// ---------------------------------------------------------------------------
|
|
66
|
-
// E17 — single-flight unifié : refresh concurrent = un seul POST /refresh
|
|
67
|
-
// ---------------------------------------------------------------------------
|
|
68
|
-
|
|
69
|
-
describe('E17 — single-flight du refresh', () => {
|
|
70
|
-
let fetchMock: FetchMock
|
|
71
|
-
let client: AuraClient
|
|
72
|
-
|
|
73
|
-
beforeEach(() => {
|
|
74
|
-
fetchMock = new FetchMock()
|
|
75
|
-
fetchMock.init()
|
|
76
|
-
client = new AuraClient(BASE, PROJECT, { auth: { persistSession: false } })
|
|
77
|
-
})
|
|
78
|
-
afterEach(() => {
|
|
79
|
-
fetchMock.restore()
|
|
80
|
-
fetchMock.clearMocks()
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
it('refreshSession + getUser concurrents → un seul appel /refresh', async () => {
|
|
84
|
-
// token EXPIRÉ → getUser déclenche maybeRefresh, en même temps que refreshSession
|
|
85
|
-
client.authStore.save(expiredJwt(), 'rt_1', fakeUser())
|
|
86
|
-
fetchMock.on({ method: 'POST', url: `${PREFIX}/refresh`, replyCode: 200, replyBody: { data: fakeTokenPair() } })
|
|
87
|
-
fetchMock.on({ method: 'GET', url: `${PREFIX}/user`, replyCode: 200, replyBody: { data: fakeUser() } })
|
|
88
|
-
|
|
89
|
-
const [r1, r2] = await Promise.all([client.auth.refreshSession(), client.auth.getUser()])
|
|
90
|
-
|
|
91
|
-
expect(r1.error).toBeNull()
|
|
92
|
-
expect(r2.error).toBeNull()
|
|
93
|
-
const refreshCalls = fetchMock.calls.filter((c) => c.url.endsWith('/refresh') && c.method === 'POST')
|
|
94
|
-
expect(refreshCalls.length).toBe(1)
|
|
95
|
-
})
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
// ---------------------------------------------------------------------------
|
|
99
|
-
// E19 — retry réactif borné sur 401
|
|
100
|
-
// ---------------------------------------------------------------------------
|
|
101
|
-
|
|
102
|
-
describe('E19 — retry sur 401', () => {
|
|
103
|
-
it('un 401 déclenche un refresh + un unique rejeu réussi', async () => {
|
|
104
|
-
let userCalls = 0
|
|
105
|
-
let refreshCalls = 0
|
|
106
|
-
const fetchFn = (async (input: RequestInfo | URL): Promise<Response> => {
|
|
107
|
-
const url = input.toString()
|
|
108
|
-
if (url.endsWith('/refresh')) {
|
|
109
|
-
refreshCalls++
|
|
110
|
-
return jsonResponse({ data: fakeTokenPair() }, 200)
|
|
111
|
-
}
|
|
112
|
-
if (url.endsWith('/user')) {
|
|
113
|
-
userCalls++
|
|
114
|
-
return userCalls === 1
|
|
115
|
-
? jsonResponse({ error: { code: 'unauthorized', message: 'expired' } }, 401)
|
|
116
|
-
: jsonResponse({ data: fakeUser() }, 200)
|
|
117
|
-
}
|
|
118
|
-
return jsonResponse({}, 200)
|
|
119
|
-
}) as typeof globalThis.fetch
|
|
120
|
-
|
|
121
|
-
const client = new AuraClient(BASE, PROJECT, { fetch: fetchFn, auth: { persistSession: false } })
|
|
122
|
-
client.authStore.save(validJwt(), 'rt_1', fakeUser()) // token valide → pas de refresh proactif
|
|
123
|
-
|
|
124
|
-
const res = await client.auth.getUser()
|
|
125
|
-
expect(res.error).toBeNull()
|
|
126
|
-
expect(res.data).not.toBeNull()
|
|
127
|
-
expect(userCalls).toBe(2) // 401 puis rejeu 200
|
|
128
|
-
expect(refreshCalls).toBe(1)
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
it('ne boucle pas si le rejeu échoue encore (borné à un essai)', async () => {
|
|
132
|
-
let userCalls = 0
|
|
133
|
-
const fetchFn = (async (input: RequestInfo | URL): Promise<Response> => {
|
|
134
|
-
const url = input.toString()
|
|
135
|
-
if (url.endsWith('/refresh')) return jsonResponse({ data: fakeTokenPair() }, 200)
|
|
136
|
-
if (url.endsWith('/user')) {
|
|
137
|
-
userCalls++
|
|
138
|
-
return jsonResponse({ error: { code: 'unauthorized', message: 'nope' } }, 401)
|
|
139
|
-
}
|
|
140
|
-
return jsonResponse({}, 200)
|
|
141
|
-
}) as typeof globalThis.fetch
|
|
142
|
-
|
|
143
|
-
const client = new AuraClient(BASE, PROJECT, { fetch: fetchFn, auth: { persistSession: false } })
|
|
144
|
-
client.authStore.save(validJwt(), 'rt_1', fakeUser())
|
|
145
|
-
|
|
146
|
-
const res = await client.auth.getUser()
|
|
147
|
-
expect((res.error as AuraError).status).toBe(401)
|
|
148
|
-
expect(userCalls).toBe(2) // 1 essai + 1 rejeu, pas plus
|
|
149
|
-
})
|
|
150
|
-
})
|
|
151
|
-
|
|
152
|
-
// ---------------------------------------------------------------------------
|
|
153
|
-
// E20 — bus d'événements unique : refreshSession émet UN seul TOKEN_REFRESHED
|
|
154
|
-
// ---------------------------------------------------------------------------
|
|
155
|
-
|
|
156
|
-
describe('E20 — onAuthStateChange sans doublon', () => {
|
|
157
|
-
let fetchMock: FetchMock
|
|
158
|
-
let client: AuraClient
|
|
159
|
-
|
|
160
|
-
beforeEach(() => {
|
|
161
|
-
fetchMock = new FetchMock()
|
|
162
|
-
fetchMock.init()
|
|
163
|
-
client = new AuraClient(BASE, PROJECT, { auth: { persistSession: false } })
|
|
164
|
-
})
|
|
165
|
-
afterEach(() => {
|
|
166
|
-
fetchMock.restore()
|
|
167
|
-
fetchMock.clearMocks()
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
it('refreshSession émet exactement un TOKEN_REFRESHED (pas de SIGNED_IN en doublon)', async () => {
|
|
171
|
-
client.authStore.save(validJwt(), 'rt_1', fakeUser())
|
|
172
|
-
fetchMock.on({ method: 'POST', url: `${PREFIX}/refresh`, replyCode: 200, replyBody: { data: fakeTokenPair() } })
|
|
173
|
-
|
|
174
|
-
const events: string[] = []
|
|
175
|
-
const sub = client.auth.onAuthStateChange((p) => events.push(p.event))
|
|
176
|
-
await new Promise((r) => queueMicrotask(() => r(null))) // laisser passer INITIAL_SESSION
|
|
177
|
-
events.length = 0
|
|
178
|
-
|
|
179
|
-
await client.auth.refreshSession()
|
|
180
|
-
expect(events).toEqual(['TOKEN_REFRESHED'])
|
|
181
|
-
sub.unsubscribe()
|
|
182
|
-
})
|
|
183
|
-
})
|
|
184
|
-
|
|
185
|
-
// ---------------------------------------------------------------------------
|
|
186
|
-
// E21 — client admin séparé, interdit côté navigateur
|
|
187
|
-
// ---------------------------------------------------------------------------
|
|
188
|
-
|
|
189
|
-
describe('E21 — createAdminClient', () => {
|
|
190
|
-
it('lève une erreur si appelé dans un contexte navigateur', () => {
|
|
191
|
-
const g = globalThis as { window?: unknown }
|
|
192
|
-
const had = 'window' in g
|
|
193
|
-
g.window = {} // simuler un navigateur
|
|
194
|
-
try {
|
|
195
|
-
expect(() => createAdminClient(BASE, PROJECT, 'aura_srole_x')).toThrow(/navigateur/)
|
|
196
|
-
} finally {
|
|
197
|
-
if (!had) delete g.window
|
|
198
|
-
}
|
|
199
|
-
})
|
|
200
|
-
|
|
201
|
-
it("retourne un client en contexte serveur (pas de window)", () => {
|
|
202
|
-
const admin = createAdminClient(BASE, PROJECT, 'aura_srole_x')
|
|
203
|
-
expect(admin).toBeInstanceOf(AuraClient)
|
|
204
|
-
expect(admin.apiKey).toBe('aura_srole_x')
|
|
205
|
-
})
|
|
206
|
-
})
|