@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.
Files changed (343) hide show
  1. package/README.md +26 -795
  2. package/{packages/aurabase/dist/AuraClient-DAtDbfPB.d.ts → dist/AuraClient-BcFE8u1v.d.cts} +1 -1
  3. package/{packages/aurabase/dist/AuraClient-DAtDbfPB.d.cts → dist/AuraClient-BcFE8u1v.d.ts} +1 -1
  4. package/{packages/aurabase/dist → dist}/index.d.cts +1 -1
  5. package/{packages/aurabase/dist → dist}/index.d.ts +1 -1
  6. package/{packages/aurabase/dist → dist}/ssr.d.cts +1 -1
  7. package/{packages/aurabase/dist → dist}/ssr.d.ts +1 -1
  8. package/package.json +72 -82
  9. package/.changeset/config.json +0 -11
  10. package/CHANGELOG.md +0 -30
  11. package/packages/ai/LICENSE +0 -21
  12. package/packages/ai/README.md +0 -106
  13. package/packages/ai/dist/index.cjs +0 -229
  14. package/packages/ai/dist/index.d.cts +0 -139
  15. package/packages/ai/dist/index.d.ts +0 -139
  16. package/packages/ai/dist/index.js +0 -226
  17. package/packages/ai/node_modules/.bin/esbuild +0 -19
  18. package/packages/ai/node_modules/.bin/tsc +0 -22
  19. package/packages/ai/node_modules/.bin/tsserver +0 -22
  20. package/packages/ai/node_modules/.bin/tsup +0 -22
  21. package/packages/ai/node_modules/.bin/tsup-node +0 -22
  22. package/packages/ai/node_modules/.bin/vite +0 -22
  23. package/packages/ai/node_modules/.bin/vitest +0 -22
  24. package/packages/ai/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  25. package/packages/ai/package.json +0 -61
  26. package/packages/ai/src/AiService.ts +0 -226
  27. package/packages/ai/src/index.ts +0 -18
  28. package/packages/ai/src/sse.ts +0 -141
  29. package/packages/ai/src/types.ts +0 -30
  30. package/packages/ai/tests/chat-stream.test.ts +0 -151
  31. package/packages/ai/tests/rag-namespaces.test.ts +0 -54
  32. package/packages/ai/tests/sse.test.ts +0 -69
  33. package/packages/ai/tsconfig.json +0 -5
  34. package/packages/ai/tsup.config.ts +0 -11
  35. package/packages/aurabase/LICENSE +0 -21
  36. package/packages/aurabase/README.md +0 -64
  37. package/packages/aurabase/node_modules/.bin/esbuild +0 -19
  38. package/packages/aurabase/node_modules/.bin/tsc +0 -22
  39. package/packages/aurabase/node_modules/.bin/tsserver +0 -22
  40. package/packages/aurabase/node_modules/.bin/tsup +0 -22
  41. package/packages/aurabase/node_modules/.bin/tsup-node +0 -22
  42. package/packages/aurabase/node_modules/.bin/vite +0 -22
  43. package/packages/aurabase/node_modules/.bin/vitest +0 -22
  44. package/packages/aurabase/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  45. package/packages/aurabase/package.json +0 -80
  46. package/packages/aurabase/src/AuraClient.ts +0 -237
  47. package/packages/aurabase/src/index.ts +0 -152
  48. package/packages/aurabase/src/ssr.ts +0 -156
  49. package/packages/aurabase/tests/ai-streaming-rag-e2e.test.ts +0 -82
  50. package/packages/aurabase/tests/ai.test.ts +0 -111
  51. package/packages/aurabase/tests/auth-admin.test.ts +0 -515
  52. package/packages/aurabase/tests/auth-e2e.test.ts +0 -135
  53. package/packages/aurabase/tests/auth-hardening.test.ts +0 -206
  54. package/packages/aurabase/tests/auth.test.ts +0 -947
  55. package/packages/aurabase/tests/database.test.ts +0 -230
  56. package/packages/aurabase/tests/db-types-e2e.test.ts +0 -217
  57. package/packages/aurabase/tests/dispose.test.ts +0 -23
  58. package/packages/aurabase/tests/foreign-token.e2e.test.ts +0 -129
  59. package/packages/aurabase/tests/functions.test.ts +0 -107
  60. package/packages/aurabase/tests/integration.test.ts +0 -413
  61. package/packages/aurabase/tests/live-production-validation.js +0 -241
  62. package/packages/aurabase/tests/live-sdk-production-validation.js +0 -293
  63. package/packages/aurabase/tests/mocks.ts +0 -139
  64. package/packages/aurabase/tests/notifications.test.ts +0 -314
  65. package/packages/aurabase/tests/observability-backup.test.ts +0 -186
  66. package/packages/aurabase/tests/observability-hook.test.ts +0 -130
  67. package/packages/aurabase/tests/production-robustness.test.ts +0 -268
  68. package/packages/aurabase/tests/public-api-surface.test.ts +0 -53
  69. package/packages/aurabase/tests/query-builder.test.ts +0 -329
  70. package/packages/aurabase/tests/readme-smoke-e2e.test.ts +0 -231
  71. package/packages/aurabase/tests/realtime-filter-e2e.test.ts +0 -344
  72. package/packages/aurabase/tests/refresh-locks.test.ts +0 -210
  73. package/packages/aurabase/tests/retry-option.test.ts +0 -17
  74. package/packages/aurabase/tests/rpc-e2e.test.ts +0 -254
  75. package/packages/aurabase/tests/rs256-local-e2e.test.ts +0 -114
  76. package/packages/aurabase/tests/rt-alias-public-e2e.test.ts +0 -235
  77. package/packages/aurabase/tests/rt-http-broadcast-e2e.test.ts +0 -124
  78. package/packages/aurabase/tests/service-role-guard.test.ts +0 -99
  79. package/packages/aurabase/tests/ssr.test.ts +0 -91
  80. package/packages/aurabase/tests/storage-backend-e2e.test.ts +0 -481
  81. package/packages/aurabase/tests/storage-sdk-parity-e2e.test.ts +0 -104
  82. package/packages/aurabase/tests/storage-transform-e2e.test.ts +0 -684
  83. package/packages/aurabase/tests/storage.test.ts +0 -55
  84. package/packages/aurabase/tests/types/client-generic.test-d.ts +0 -79
  85. package/packages/aurabase/tests/types/docs-snippets.test-d.ts +0 -571
  86. package/packages/aurabase/tests/types/error-code.test-d.ts +0 -53
  87. package/packages/aurabase/tsconfig.json +0 -5
  88. package/packages/aurabase/tsconfig.test-d.json +0 -5
  89. package/packages/aurabase/tsup.config.ts +0 -11
  90. package/packages/aurabase/vitest.config.ts +0 -16
  91. package/packages/aurabase/vitest.e2e.config.ts +0 -9
  92. package/packages/auth/LICENSE +0 -21
  93. package/packages/auth/README.md +0 -215
  94. package/packages/auth/dist/index.cjs +0 -1175
  95. package/packages/auth/dist/index.d.cts +0 -397
  96. package/packages/auth/dist/index.d.ts +0 -397
  97. package/packages/auth/dist/index.js +0 -1170
  98. package/packages/auth/node_modules/.bin/esbuild +0 -19
  99. package/packages/auth/node_modules/.bin/tsc +0 -22
  100. package/packages/auth/node_modules/.bin/tsserver +0 -22
  101. package/packages/auth/node_modules/.bin/tsup +0 -22
  102. package/packages/auth/node_modules/.bin/tsup-node +0 -22
  103. package/packages/auth/node_modules/.bin/vite +0 -22
  104. package/packages/auth/node_modules/.bin/vitest +0 -22
  105. package/packages/auth/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  106. package/packages/auth/package.json +0 -61
  107. package/packages/auth/src/AuthAdminService.ts +0 -149
  108. package/packages/auth/src/AuthService.ts +0 -1166
  109. package/packages/auth/src/SessionManager.ts +0 -92
  110. package/packages/auth/src/index.ts +0 -17
  111. package/packages/auth/src/jwks.ts +0 -337
  112. package/packages/auth/src/pkce.ts +0 -27
  113. package/packages/auth/src/types.ts +0 -89
  114. package/packages/auth/tests/auth-lifecycle.test.ts +0 -149
  115. package/packages/auth/tests/detect-session.test.ts +0 -361
  116. package/packages/auth/tests/getclaims.test.ts +0 -780
  117. package/packages/auth/tests/is-mfa-challenge.test.ts +0 -27
  118. package/packages/auth/tests/password-recovery.test.ts +0 -124
  119. package/packages/auth/tests/pkce.test.ts +0 -192
  120. package/packages/auth/tests/session-manager.test.ts +0 -103
  121. package/packages/auth/tests/set-session.test.ts +0 -139
  122. package/packages/auth/tests/verify-otp.test.ts +0 -153
  123. package/packages/auth/tsconfig.json +0 -5
  124. package/packages/auth/tsup.config.ts +0 -11
  125. package/packages/core/LICENSE +0 -21
  126. package/packages/core/README.md +0 -132
  127. package/packages/core/dist/index.cjs +0 -695
  128. package/packages/core/dist/index.d.cts +0 -1137
  129. package/packages/core/dist/index.d.ts +0 -1137
  130. package/packages/core/dist/index.js +0 -673
  131. package/packages/core/node_modules/.bin/esbuild +0 -22
  132. package/packages/core/node_modules/.bin/tsc +0 -22
  133. package/packages/core/node_modules/.bin/tsserver +0 -22
  134. package/packages/core/node_modules/.bin/tsup +0 -22
  135. package/packages/core/node_modules/.bin/tsup-node +0 -22
  136. package/packages/core/node_modules/.bin/vite +0 -22
  137. package/packages/core/node_modules/.bin/vitest +0 -22
  138. package/packages/core/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  139. package/packages/core/package.json +0 -57
  140. package/packages/core/src/AuraError.ts +0 -89
  141. package/packages/core/src/BaseService.ts +0 -44
  142. package/packages/core/src/client.ts +0 -34
  143. package/packages/core/src/cookie-utils.ts +0 -42
  144. package/packages/core/src/fetch.ts +0 -435
  145. package/packages/core/src/index.ts +0 -22
  146. package/packages/core/src/retry.ts +0 -63
  147. package/packages/core/src/serialize.ts +0 -6
  148. package/packages/core/src/stores/BaseAuthStore.ts +0 -164
  149. package/packages/core/src/stores/LocalAuthStore.ts +0 -199
  150. package/packages/core/src/types.ts +0 -1042
  151. package/packages/core/tests/auth-store.test.ts +0 -300
  152. package/packages/core/tests/error-code.test.ts +0 -61
  153. package/packages/core/tests/error.test.ts +0 -24
  154. package/packages/core/tests/fetch.test.ts +0 -286
  155. package/packages/core/tests/mocks.ts +0 -139
  156. package/packages/core/tests/observability.test.ts +0 -86
  157. package/packages/core/tests/refresh-hardening.test.ts +0 -164
  158. package/packages/core/tests/refresh-observability.test.ts +0 -111
  159. package/packages/core/tests/retry.test.ts +0 -106
  160. package/packages/core/tests/serialize.test.ts +0 -12
  161. package/packages/core/tests/timeout.test.ts +0 -79
  162. package/packages/core/tsconfig.json +0 -5
  163. package/packages/core/tsup.config.ts +0 -11
  164. package/packages/db/LICENSE +0 -21
  165. package/packages/db/README.md +0 -152
  166. package/packages/db/VENDORED.md +0 -93
  167. package/packages/db/dist/index.cjs +0 -544
  168. package/packages/db/dist/index.d.cts +0 -1111
  169. package/packages/db/dist/index.d.ts +0 -1111
  170. package/packages/db/dist/index.js +0 -541
  171. package/packages/db/node_modules/.bin/esbuild +0 -19
  172. package/packages/db/node_modules/.bin/tsc +0 -22
  173. package/packages/db/node_modules/.bin/tsserver +0 -22
  174. package/packages/db/node_modules/.bin/tsup +0 -22
  175. package/packages/db/node_modules/.bin/tsup-node +0 -22
  176. package/packages/db/node_modules/.bin/vite +0 -22
  177. package/packages/db/node_modules/.bin/vitest +0 -22
  178. package/packages/db/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  179. package/packages/db/package.json +0 -62
  180. package/packages/db/src/DatabaseService.ts +0 -170
  181. package/packages/db/src/QueryBuilder.ts +0 -830
  182. package/packages/db/src/index.ts +0 -2
  183. package/packages/db/src/pgrst-types/common/common.ts +0 -86
  184. package/packages/db/src/pgrst-types/common/rpc.ts +0 -151
  185. package/packages/db/src/pgrst-types/feature-flags.ts +0 -20
  186. package/packages/db/src/pgrst-types/types.ts +0 -134
  187. package/packages/db/src/select-query-parser/parser.ts +0 -479
  188. package/packages/db/src/select-query-parser/result.ts +0 -553
  189. package/packages/db/src/select-query-parser/types.ts +0 -132
  190. package/packages/db/src/select-query-parser/utils.ts +0 -707
  191. package/packages/db/tests/filters.test.ts +0 -81
  192. package/packages/db/tests/mutations-filtered.e2e.test.ts +0 -132
  193. package/packages/db/tests/mutations-filtered.test.ts +0 -188
  194. package/packages/db/tests/order.test.ts +0 -45
  195. package/packages/db/tests/rpc.test.ts +0 -41
  196. package/packages/db/tests/scale/build-large-schema.ts +0 -94
  197. package/packages/db/tests/scale/scale-compile.test.ts +0 -167
  198. package/packages/db/tests/schema.test.ts +0 -77
  199. package/packages/db/tests/single-accept.e2e.test.ts +0 -123
  200. package/packages/db/tests/single.test.ts +0 -211
  201. package/packages/db/tests/types/filters.test-d.ts +0 -52
  202. package/packages/db/tests/types/fixtures.ts +0 -40
  203. package/packages/db/tests/types/from-views.test-d.ts +0 -18
  204. package/packages/db/tests/types/mutations.test-d.ts +0 -23
  205. package/packages/db/tests/types/rpc.test-d.ts +0 -60
  206. package/packages/db/tests/types/schema-shape.test-d.ts +0 -8
  207. package/packages/db/tests/types/select-inference.test-d.ts +0 -38
  208. package/packages/db/tests/vendored/fixtures.ts +0 -83
  209. package/packages/db/tests/vendored/get-result.test-d.ts +0 -75
  210. package/packages/db/tsconfig.json +0 -5
  211. package/packages/db/tsconfig.test-d.json +0 -5
  212. package/packages/db/tsup.config.ts +0 -11
  213. package/packages/db/vitest.config.ts +0 -8
  214. package/packages/functions/LICENSE +0 -21
  215. package/packages/functions/README.md +0 -96
  216. package/packages/functions/dist/index.cjs +0 -173
  217. package/packages/functions/dist/index.d.cts +0 -81
  218. package/packages/functions/dist/index.d.ts +0 -81
  219. package/packages/functions/dist/index.js +0 -168
  220. package/packages/functions/node_modules/.bin/esbuild +0 -19
  221. package/packages/functions/node_modules/.bin/tsc +0 -22
  222. package/packages/functions/node_modules/.bin/tsserver +0 -22
  223. package/packages/functions/node_modules/.bin/tsup +0 -22
  224. package/packages/functions/node_modules/.bin/tsup-node +0 -22
  225. package/packages/functions/node_modules/.bin/vite +0 -22
  226. package/packages/functions/node_modules/.bin/vitest +0 -22
  227. package/packages/functions/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  228. package/packages/functions/package.json +0 -60
  229. package/packages/functions/src/FunctionsService.ts +0 -188
  230. package/packages/functions/src/errors.ts +0 -70
  231. package/packages/functions/src/index.ts +0 -6
  232. package/packages/functions/tests/invoke.test.ts +0 -97
  233. package/packages/functions/tests/response-type-errors.test.ts +0 -135
  234. package/packages/functions/tsconfig.json +0 -5
  235. package/packages/functions/tsup.config.ts +0 -11
  236. package/packages/gen/LICENSE +0 -21
  237. package/packages/gen/README.md +0 -84
  238. package/packages/gen/dist/cli.cjs +0 -334
  239. package/packages/gen/dist/cli.d.cts +0 -1
  240. package/packages/gen/dist/cli.d.ts +0 -1
  241. package/packages/gen/dist/cli.js +0 -332
  242. package/packages/gen/dist/index.cjs +0 -257
  243. package/packages/gen/dist/index.d.cts +0 -12
  244. package/packages/gen/dist/index.d.ts +0 -12
  245. package/packages/gen/dist/index.js +0 -255
  246. package/packages/gen/node_modules/.bin/esbuild +0 -19
  247. package/packages/gen/node_modules/.bin/tsc +0 -22
  248. package/packages/gen/node_modules/.bin/tsserver +0 -22
  249. package/packages/gen/node_modules/.bin/tsup +0 -22
  250. package/packages/gen/node_modules/.bin/tsup-node +0 -22
  251. package/packages/gen/node_modules/.bin/vite +0 -22
  252. package/packages/gen/node_modules/.bin/vitest +0 -22
  253. package/packages/gen/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  254. package/packages/gen/package.json +0 -66
  255. package/packages/gen/src/cli.ts +0 -67
  256. package/packages/gen/src/generate.ts +0 -0
  257. package/packages/gen/src/index.ts +0 -2
  258. package/packages/gen/tests/compile.test.ts +0 -213
  259. package/packages/gen/tests/e2e.test.ts +0 -130
  260. package/packages/gen/tests/generate.test.ts +0 -396
  261. package/packages/gen/tsconfig.json +0 -5
  262. package/packages/gen/tsup.config.ts +0 -11
  263. package/packages/notifications/LICENSE +0 -21
  264. package/packages/notifications/README.md +0 -134
  265. package/packages/notifications/dist/index.cjs +0 -128
  266. package/packages/notifications/dist/index.d.cts +0 -81
  267. package/packages/notifications/dist/index.d.ts +0 -81
  268. package/packages/notifications/dist/index.js +0 -125
  269. package/packages/notifications/node_modules/.bin/esbuild +0 -19
  270. package/packages/notifications/node_modules/.bin/tsc +0 -22
  271. package/packages/notifications/node_modules/.bin/tsserver +0 -22
  272. package/packages/notifications/node_modules/.bin/tsup +0 -22
  273. package/packages/notifications/node_modules/.bin/tsup-node +0 -22
  274. package/packages/notifications/node_modules/.bin/vite +0 -22
  275. package/packages/notifications/node_modules/.bin/vitest +0 -22
  276. package/packages/notifications/package.json +0 -60
  277. package/packages/notifications/src/NotificationsService.ts +0 -230
  278. package/packages/notifications/src/index.ts +0 -19
  279. package/packages/notifications/tsconfig.json +0 -5
  280. package/packages/notifications/tsup.config.ts +0 -11
  281. package/packages/realtime/LICENSE +0 -21
  282. package/packages/realtime/README.md +0 -183
  283. package/packages/realtime/dist/index.cjs +0 -977
  284. package/packages/realtime/dist/index.d.cts +0 -259
  285. package/packages/realtime/dist/index.d.ts +0 -259
  286. package/packages/realtime/dist/index.js +0 -973
  287. package/packages/realtime/node_modules/.bin/esbuild +0 -19
  288. package/packages/realtime/node_modules/.bin/tsc +0 -22
  289. package/packages/realtime/node_modules/.bin/tsserver +0 -22
  290. package/packages/realtime/node_modules/.bin/tsup +0 -22
  291. package/packages/realtime/node_modules/.bin/tsup-node +0 -22
  292. package/packages/realtime/node_modules/.bin/vite +0 -22
  293. package/packages/realtime/node_modules/.bin/vitest +0 -22
  294. package/packages/realtime/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  295. package/packages/realtime/package.json +0 -60
  296. package/packages/realtime/src/AuraChannel.ts +0 -485
  297. package/packages/realtime/src/HeartbeatManager.ts +0 -73
  298. package/packages/realtime/src/RealtimeService.ts +0 -505
  299. package/packages/realtime/src/columnFilter.ts +0 -301
  300. package/packages/realtime/src/index.ts +0 -4
  301. package/packages/realtime/tests/ack-routing.test.ts +0 -81
  302. package/packages/realtime/tests/column-filter.test.ts +0 -144
  303. package/packages/realtime/tests/dispatch.test.ts +0 -191
  304. package/packages/realtime/tests/heartbeat.test.ts +0 -67
  305. package/packages/realtime/tests/http-broadcast.test.ts +0 -68
  306. package/packages/realtime/tests/realtime-token.test.ts +0 -43
  307. package/packages/realtime/tests/reconnect-race.test.ts +0 -149
  308. package/packages/realtime/tests/ref-id.test.ts +0 -34
  309. package/packages/realtime/tests/set-auth.test.ts +0 -70
  310. package/packages/realtime/tsconfig.json +0 -5
  311. package/packages/realtime/tsup.config.ts +0 -11
  312. package/packages/storage/LICENSE +0 -21
  313. package/packages/storage/README.md +0 -141
  314. package/packages/storage/dist/index.cjs +0 -333
  315. package/packages/storage/dist/index.d.cts +0 -185
  316. package/packages/storage/dist/index.d.ts +0 -185
  317. package/packages/storage/dist/index.js +0 -329
  318. package/packages/storage/node_modules/.bin/esbuild +0 -19
  319. package/packages/storage/node_modules/.bin/tsc +0 -22
  320. package/packages/storage/node_modules/.bin/tsserver +0 -22
  321. package/packages/storage/node_modules/.bin/tsup +0 -22
  322. package/packages/storage/node_modules/.bin/tsup-node +0 -22
  323. package/packages/storage/node_modules/.bin/vite +0 -22
  324. package/packages/storage/node_modules/.bin/vitest +0 -22
  325. package/packages/storage/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  326. package/packages/storage/package.json +0 -60
  327. package/packages/storage/src/DownloadBuilder.ts +0 -60
  328. package/packages/storage/src/StorageService.ts +0 -323
  329. package/packages/storage/src/index.ts +0 -2
  330. package/packages/storage/src/path.ts +0 -35
  331. package/packages/storage/src/transform.ts +0 -15
  332. package/packages/storage/tests/download.test.ts +0 -64
  333. package/packages/storage/tests/parity.test.ts +0 -154
  334. package/packages/storage/tests/path.test.ts +0 -87
  335. package/packages/storage/tests/transform.test.ts +0 -79
  336. package/packages/storage/tsconfig.json +0 -5
  337. package/packages/storage/tsup.config.ts +0 -11
  338. package/pnpm-workspace.yaml +0 -24
  339. package/tsconfig.base.json +0 -15
  340. /package/{packages/aurabase/dist → dist}/index.cjs +0 -0
  341. /package/{packages/aurabase/dist → dist}/index.js +0 -0
  342. /package/{packages/aurabase/dist → dist}/ssr.cjs +0 -0
  343. /package/{packages/aurabase/dist → dist}/ssr.js +0 -0
@@ -1,107 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest'
2
- import { AuraClient } from '../src/AuraClient'
3
- import { FetchMock, fakeTokenPair } from './mocks'
4
-
5
- const BASE = 'http://localhost:8080'
6
- const PROJECT = '00000000-0000-0000-0000-000000000001'
7
- const PREFIX = `${BASE}/v1/functions/${PROJECT}`
8
-
9
- let fetchMock: FetchMock
10
- let client: AuraClient
11
-
12
- beforeEach(() => {
13
- fetchMock = new FetchMock()
14
- fetchMock.init()
15
- client = new AuraClient(BASE, PROJECT, 'aura_anon_test', {
16
- auth: { persistSession: false },
17
- })
18
- const tp = fakeTokenPair()
19
- client.authStore.save(tp.access_token, tp.refresh_token, tp.user)
20
- })
21
-
22
- afterEach(() => {
23
- fetchMock.restore()
24
- fetchMock.clearMocks()
25
- })
26
-
27
- describe('FunctionsService route contract', () => {
28
- it('lists and gets functions through backend routes', async () => {
29
- fetchMock.on({ method: 'GET', url: PREFIX, replyCode: 200, replyBody: { data: [] } })
30
- fetchMock.on({
31
- method: 'GET',
32
- url: `${PREFIX}/hello`,
33
- replyCode: 200,
34
- replyBody: { data: { id: 'fn-1', name: 'hello' } },
35
- })
36
-
37
- await client.functions.list()
38
- await client.functions.get('hello')
39
-
40
- expect(fetchMock.calls[0].url).toBe(PREFIX)
41
- expect(fetchMock.calls[1].url).toBe(`${PREFIX}/hello`)
42
- })
43
-
44
- it('invokes a function at /{name}/invoke and wraps the request body', async () => {
45
- fetchMock.on({
46
- method: 'POST',
47
- url: `${PREFIX}/hello/invoke`,
48
- replyCode: 200,
49
- replyBody: { data: { status: 200 } },
50
- })
51
-
52
- await client.functions.invoke('hello', {
53
- body: { name: 'Ada' },
54
- method: 'POST',
55
- path: '/welcome',
56
- headers: { 'x-test': '1' },
57
- })
58
-
59
- expect(fetchMock.calls[0].url).toBe(`${PREFIX}/hello/invoke`)
60
- expect(fetchMock.calls[0].body).toEqual({
61
- method: 'POST',
62
- path: '/welcome',
63
- headers: { 'x-test': '1' },
64
- body: { name: 'Ada' },
65
- })
66
- })
67
-
68
- it('uses status and limit query params for jobs', async () => {
69
- fetchMock.on({
70
- method: 'GET',
71
- url: `${PREFIX}/jobs?status=pending&limit=10`,
72
- replyCode: 200,
73
- replyBody: { data: [] },
74
- })
75
-
76
- await client.functions.listJobs({ status: 'pending', limit: 10 })
77
-
78
- expect(fetchMock.calls[0].url).toBe(`${PREFIX}/jobs?status=pending&limit=10`)
79
- })
80
-
81
- it('creates and deletes cron jobs by name', async () => {
82
- fetchMock.on({
83
- method: 'POST',
84
- url: `${PREFIX}/cron`,
85
- replyCode: 200,
86
- replyBody: { data: { name: 'nightly' } },
87
- })
88
- fetchMock.on({
89
- method: 'DELETE',
90
- url: `${PREFIX}/cron/nightly`,
91
- replyCode: 204,
92
- })
93
-
94
- await client.functions.createCronJob('nightly', '0 0 * * * *', 'hello', {
95
- payload: { ok: true },
96
- })
97
- await client.functions.deleteCronJob('nightly')
98
-
99
- expect(fetchMock.calls[0].body).toEqual({
100
- name: 'nightly',
101
- schedule: '0 0 * * * *',
102
- function_name: 'hello',
103
- payload: { ok: true },
104
- })
105
- expect(fetchMock.calls[1].url).toBe(`${PREFIX}/cron/nightly`)
106
- })
107
- })
@@ -1,413 +0,0 @@
1
- import { describe, it, expect, beforeAll, afterAll } from 'vitest'
2
- import { createClient } from '../src/index'
3
-
4
- const GATEWAY_URL = 'http://localhost:8080'
5
- const MGMT_URL = 'http://localhost:8090'
6
-
7
- describe('Tests d\'intégration du SDK JS en conditions réelles (E2E)', () => {
8
- let devToken: string
9
- let projectId: string
10
- let anonKey: string
11
- let serviceKey: string
12
-
13
- // Identifiants développeur console générés dynamiquement
14
- const runId = Math.random().toString(36).substring(2, 10)
15
- const devEmail = `integration-dev-${runId}@aurabase.dev`
16
- const devPassword = 'DevPasswordE2E123!'
17
- const projectName = `integration-proj-${runId}`
18
-
19
- // Identifiants utilisateur final
20
- const endUserEmail = `enduser-${runId}@example.com`
21
- const endUserPassword = 'EndUserPassword123!'
22
- const otherUserEmail = `other-${runId}@example.com`
23
- const otherUserPassword = 'OtherPassword123!'
24
-
25
- beforeAll(async () => {
26
- // 1. Enregistrement du développeur sur la console
27
- const regRes = await fetch(`${MGMT_URL}/v1/control/accounts/register`, {
28
- method: 'POST',
29
- headers: { 'Content-Type': 'application/json' },
30
- body: JSON.stringify({ email: devEmail, password: devPassword }),
31
- })
32
- expect(regRes.status).toBe(200)
33
- const regData = await regRes.json()
34
- devToken = regData.data.access_token
35
- expect(devToken).toBeDefined()
36
-
37
- // 2. Création dynamique d'une organisation
38
- const orgRes = await fetch(`${MGMT_URL}/v1/control/orgs`, {
39
- method: 'POST',
40
- headers: {
41
- 'Authorization': `Bearer ${devToken}`,
42
- 'Content-Type': 'application/json',
43
- },
44
- body: JSON.stringify({ name: 'Integration Org', slug: `integration-org-${runId}` }),
45
- })
46
- expect(orgRes.status).toBeLessThan(300)
47
- const orgData = await orgRes.json()
48
- const orgId = orgData.id
49
- expect(orgId).toBeDefined()
50
-
51
- // 3. Création du projet temporaire via l'organisation
52
- const projRes = await fetch(`${MGMT_URL}/v1/control/orgs/${orgId}/projects`, {
53
- method: 'POST',
54
- headers: {
55
- 'Authorization': `Bearer ${devToken}`,
56
- 'Content-Type': 'application/json',
57
- },
58
- body: JSON.stringify({ name: projectName, engine: 'postgres', region: 'eu-west-1' }),
59
- })
60
- expect(projRes.status).toBe(202) // 202 ACCEPTED
61
- const projData = await projRes.json()
62
- projectId = projData.id
63
- expect(projectId).toBeDefined()
64
-
65
- // Attente active du provisioning du projet (status = active)
66
- let active = false
67
- for (let i = 0; i < 50; i++) {
68
- const statusRes = await fetch(`${MGMT_URL}/v1/control/projects/${projectId}`, {
69
- headers: { 'Authorization': `Bearer ${devToken}` },
70
- })
71
- const statusData = await statusRes.json()
72
- if (statusData && statusData.status === 'active') {
73
- active = true
74
- break
75
- }
76
- await new Promise((resolve) => setTimeout(resolve, 1500))
77
- }
78
- expect(active).toBe(true)
79
-
80
- // Récupération des clés API initiales (avec retry en cas de KEYS_PENDING / 404)
81
- let keysRes: Response | null = null
82
- for (let i = 0; i < 15; i++) {
83
- keysRes = await fetch(`${MGMT_URL}/v1/control/projects/${projectId}/initial-keys`, {
84
- headers: { 'Authorization': `Bearer ${devToken}` },
85
- })
86
- if (keysRes.status === 200) {
87
- break
88
- }
89
- await new Promise((resolve) => setTimeout(resolve, 1000))
90
- }
91
- expect(keysRes).not.toBeNull()
92
- expect(keysRes!.status).toBe(200)
93
- const keysData = await keysRes!.json()
94
- const keys = keysData.data || keysData
95
- anonKey = keys.find((k: any) => k.scope === 'anon').key
96
- serviceKey = keys.find((k: any) => k.scope === 'service_role').key
97
- expect(anonKey).toBeDefined()
98
- expect(serviceKey).toBeDefined()
99
-
100
- // 4. Création de la table 'todos' avec RLS active
101
- const tableDef = {
102
- name: 'todos',
103
- columns: [
104
- {
105
- name: 'id',
106
- col_type: 'uuid',
107
- nullable: false,
108
- unique: true,
109
- default_val: 'gen_random_uuid()',
110
- references: null
111
- },
112
- {
113
- name: 'title',
114
- col_type: 'text',
115
- nullable: false,
116
- unique: false,
117
- default_val: null,
118
- references: null
119
- },
120
- {
121
- name: 'completed',
122
- col_type: 'bool',
123
- nullable: false,
124
- unique: false,
125
- default_val: 'false',
126
- references: null
127
- },
128
- {
129
- name: 'owner_id',
130
- col_type: 'text',
131
- nullable: false,
132
- unique: false,
133
- default_val: null,
134
- references: null
135
- }
136
- ],
137
- primary_key: 'id',
138
- indexes: [],
139
- rls_enabled: true,
140
- realtime_enabled: true
141
- }
142
-
143
- const tableRes = await fetch(`${MGMT_URL}/v1/db/${projectId}/schema/tables`, {
144
- method: 'POST',
145
- headers: {
146
- 'Authorization': `Bearer ${devToken}`,
147
- 'Content-Type': 'application/json',
148
- },
149
- body: JSON.stringify(tableDef),
150
- })
151
- expect(tableRes.status).toBe(200)
152
-
153
- // 5. Création de la policy RLS (propriétaire uniquement)
154
- const policyDef = {
155
- name: 'todos_owner_policy',
156
- table: 'todos',
157
- command: 'ALL',
158
- using_expr: 'auth.uid()::text = owner_id',
159
- check_expr: 'auth.uid()::text = owner_id'
160
- }
161
-
162
- const policyRes = await fetch(`${MGMT_URL}/v1/db/${projectId}/policies`, {
163
- method: 'POST',
164
- headers: {
165
- 'Authorization': `Bearer ${devToken}`,
166
- 'Content-Type': 'application/json',
167
- },
168
- body: JSON.stringify(policyDef),
169
- })
170
- expect(policyRes.status).toBe(200)
171
-
172
- // 6. Attente de l'indexation PostgREST (statut 200 OK garanti et réponse JSON sous forme de tableau ou de enveloppe data)
173
- let ready = false
174
- for (let i = 0; i < 30; i++) {
175
- const probeRes = await fetch(`${GATEWAY_URL}/v1/db/${projectId}/todos`, {
176
- headers: { 'apikey': anonKey },
177
- })
178
- const status = probeRes.status
179
- let bodyText = ''
180
- try {
181
- bodyText = await probeRes.text()
182
- } catch (e) {}
183
- console.log(`[PROBE LOOP ${i}] HTTP STATUS:`, status, 'BODY:', bodyText)
184
-
185
- // On s'assure que la Gateway ou PostgREST répond avec un succès (soit un tableau [], soit un objet enveloppe {"data":[]})
186
- if (status === 200 && (bodyText.trim().startsWith('[') || bodyText.includes('"data":'))) {
187
- ready = true
188
- break
189
- }
190
- await new Promise((resolve) => setTimeout(resolve, 1500))
191
- }
192
- expect(ready).toBe(true)
193
-
194
- // Attendre 3 secondes supplémentaires de sécurité pour garantir la stabilisation complète du cache PostgREST
195
- await new Promise((resolve) => setTimeout(resolve, 3000))
196
- }, 50000)
197
-
198
- afterAll(async () => {
199
- // Suppression propre du projet de test
200
- if (projectId && devToken) {
201
- const delRes = await fetch(`${MGMT_URL}/v1/control/projects/${projectId}`, {
202
- method: 'DELETE',
203
- headers: { 'Authorization': `Bearer ${devToken}` },
204
- })
205
- expect(delRes.status).toBe(204) // NO CONTENT
206
- }
207
- })
208
-
209
- it('devrait inscrire et connecter un utilisateur final avec succès', async () => {
210
- const client = createClient(GATEWAY_URL, projectId, anonKey, {
211
- auth: { persistSession: false },
212
- })
213
-
214
- // Inscription utilisateur principal
215
- const signUpRes = await client.auth.signUp({
216
- email: endUserEmail,
217
- password: endUserPassword,
218
- })
219
- expect(signUpRes.error).toBeNull()
220
- expect(signUpRes.data?.user).toBeDefined()
221
- expect(signUpRes.data?.user?.email).toBe(endUserEmail)
222
-
223
- // Inscription du second utilisateur (pour tester l'isolation RLS plus tard)
224
- const signUpOtherRes = await client.auth.signUp({
225
- email: otherUserEmail,
226
- password: otherUserPassword,
227
- })
228
- expect(signUpOtherRes.error).toBeNull()
229
-
230
- // Connexion
231
- const signInRes = await client.auth.signInWithPassword({
232
- email: endUserEmail,
233
- password: endUserPassword,
234
- })
235
- expect(signInRes.error).toBeNull()
236
- expect(signInRes.data?.access_token).toBeDefined()
237
-
238
- // Récupération de l'utilisateur courant
239
- const userRes = await client.auth.getUser()
240
- expect(userRes.error).toBeNull()
241
- expect(userRes.data?.email).toBe(endUserEmail)
242
- })
243
-
244
- it('devrait exécuter des requêtes CRUD avec RLS et valider l\'isolation des données', async () => {
245
- const client = createClient(GATEWAY_URL, projectId, anonKey, {
246
- auth: { persistSession: false },
247
- })
248
-
249
- // Se connecter en tant qu'utilisateur principal
250
- await client.auth.signInWithPassword({
251
- email: endUserEmail,
252
- password: endUserPassword,
253
- })
254
-
255
- const user = (await client.auth.getUser()).data
256
- expect(user).toBeDefined()
257
- const userId = user!.id
258
-
259
- // 1. Insertion de todo
260
- const insertRes = await client.db.from('todos').insert({
261
- title: 'Tester le SDK en conditions réelles',
262
- completed: false,
263
- owner_id: userId,
264
- })
265
- if (insertRes.error) {
266
- console.log('DEBUG INSERT ERROR DETAIL:', JSON.stringify(insertRes.error, null, 2))
267
- }
268
- expect(insertRes.error).toBeNull()
269
-
270
- // 2. Sélection de todo
271
- const selectRes = await client.db.from('todos').select('*')
272
- expect(selectRes.error).toBeNull()
273
- expect(selectRes.data).toBeInstanceOf(Array)
274
- expect(selectRes.data!.length).toBe(1)
275
- expect(selectRes.data![0].title).toBe('Tester le SDK en conditions réelles')
276
-
277
- const todoId = selectRes.data![0].id
278
- expect(todoId).toBeDefined()
279
-
280
- // 3. Vérification de l'isolation RLS : l'accès anonyme (sans JWT) doit retourner 0 lignes
281
- const anonClient = createClient(GATEWAY_URL, projectId, anonKey, {
282
- auth: { persistSession: false },
283
- })
284
- const anonSelectRes = await anonClient.db.from('todos').select('*')
285
- expect(anonSelectRes.error).toBeNull()
286
- expect(anonSelectRes.data).toBeInstanceOf(Array)
287
- expect(anonSelectRes.data!.length).toBe(0)
288
-
289
- // 4. Vérification de l'isolation RLS : un autre utilisateur connecté doit obtenir 0 lignes
290
- const otherClient = createClient(GATEWAY_URL, projectId, anonKey, {
291
- auth: { persistSession: false },
292
- })
293
- await otherClient.auth.signInWithPassword({
294
- email: otherUserEmail,
295
- password: otherUserPassword,
296
- })
297
- const otherSelectRes = await otherClient.db.from('todos').select('*')
298
- expect(otherSelectRes.error).toBeNull()
299
- expect(otherSelectRes.data).toBeInstanceOf(Array)
300
- expect(otherSelectRes.data!.length).toBe(0)
301
-
302
- // 5. Mise à jour de todo (l'utilisateur principal modifie son propre todo)
303
- const updateRes = await client.db.from('todos').update(todoId, {
304
- completed: true,
305
- })
306
- expect(updateRes.error).toBeNull()
307
-
308
- const selectUpdatedRes = await client.db.from('todos').select('*')
309
- expect(selectUpdatedRes.data![0].completed).toBe(true)
310
-
311
- // 6. Suppression de todo
312
- const deleteRes = await client.db.from('todos').delete(todoId)
313
- expect(deleteRes.error).toBeNull()
314
-
315
- const selectDeletedRes = await client.db.from('todos').select('*')
316
- expect(selectDeletedRes.data!.length).toBe(0)
317
- })
318
-
319
- it('devrait exécuter des requêtes SQL brutes et rejeter les requêtes non autorisées', async () => {
320
- const client = createClient(GATEWAY_URL, projectId, anonKey, {
321
- auth: { persistSession: false },
322
- })
323
-
324
- await client.auth.signInWithPassword({
325
- email: endUserEmail,
326
- password: endUserPassword,
327
- })
328
-
329
- const user = (await client.auth.getUser()).data
330
- const userId = user!.id
331
-
332
- // Insérer un todo temporaire pour la requête SQL
333
- const sqlInsert = await client.db.from('todos').insert({
334
- title: 'SQL Todo',
335
- completed: false,
336
- owner_id: userId,
337
- })
338
- if (sqlInsert.error) {
339
- console.log('DEBUG SQL INSERT ERROR:', JSON.stringify(sqlInsert.error, null, 2))
340
- }
341
-
342
- // Requête SQL autorisée
343
- const sqlRes = await client.db.sql<any[]>('SELECT title FROM todos WHERE owner_id = $1', [userId])
344
- expect(sqlRes.error).toBeNull()
345
- expect(sqlRes.data).toBeDefined()
346
- expect(sqlRes.data!.length).toBe(1)
347
- expect(sqlRes.data![0].title).toBe('SQL Todo')
348
-
349
- // Requête SQL non autorisée vers pg_catalog (rejetée par l'AST de la gateway)
350
- const forbiddenSqlRes = await client.db.sql('SELECT * FROM pg_catalog.pg_tables')
351
- expect(forbiddenSqlRes.error).not.toBeNull()
352
- expect(forbiddenSqlRes.error?.message).toMatch(/non autorisées|interdit|rejetée|pg_catalog/)
353
- })
354
-
355
- it('devrait manipuler le service Storage (buckets et objets) avec succès', async () => {
356
- // La gestion des buckets (create/delete) exige une clé service_role côté gateway ;
357
- // ce test valide les méthodes storage du SDK de bout en bout, on utilise donc un
358
- // client service_role (la RLS storage est testée ailleurs).
359
- const client = createClient(GATEWAY_URL, projectId, serviceKey, {
360
- auth: { persistSession: false },
361
- })
362
-
363
- const bucketName = `integration-bucket-${runId}`
364
- const fileName = 'test-file.txt'
365
- const fileContent = 'Bonjour Aurabase E2E'
366
-
367
- // 1. Création de bucket
368
- const bucketCreateRes = await client.storage.createBucket(bucketName, {
369
- public: true,
370
- })
371
- expect(bucketCreateRes.error).toBeNull()
372
- expect(bucketCreateRes.data?.name).toBe(bucketName)
373
-
374
- // 2. Téléversement de fichier (upload)
375
- const blob = new Blob([fileContent], { type: 'text/plain' })
376
- const uploadRes = await client.storage.upload(bucketName, fileName, blob, {
377
- contentType: 'text/plain',
378
- })
379
- expect(uploadRes.error).toBeNull()
380
- expect(uploadRes.data?.key).toBeDefined()
381
-
382
- // `data.key` est déjà relative au bucket (contrat SDK : réutilisable directement).
383
- // Robuste : strippe un éventuel préfixe bucket si le backend en ajoutait un.
384
- const uploadedKey = uploadRes.data!.key
385
- const objectPath = uploadedKey.startsWith(`${bucketName}/`)
386
- ? uploadedKey.slice(bucketName.length + 1)
387
- : uploadedKey
388
- expect(objectPath).toBeTruthy()
389
-
390
- // 3. Récupération des métadonnées
391
- const metaRes = await client.storage.getMetadata(bucketName, objectPath)
392
- expect(metaRes.error).toBeNull()
393
- // Note : `getMetadata` renvoie la clé préfixée du bucket alors qu'`upload` renvoie la clé
394
- // nue (incohérence de format backend, à harmoniser) → on vérifie l'inclusion, pas l'égalité.
395
- expect((metaRes.data as any)?.key).toContain(uploadedKey)
396
-
397
- // 4. Téléchargement et vérification du contenu
398
- const downloadRes = await client.storage.download(bucketName, objectPath)
399
- expect(downloadRes.error).toBeNull()
400
- expect(downloadRes.data).toBeInstanceOf(Blob)
401
-
402
- const textContent = await downloadRes.data!.text()
403
- expect(textContent).toBe(fileContent)
404
-
405
- // 5. Suppression du fichier
406
- const removeRes = await client.storage.remove(bucketName, [objectPath])
407
- expect(removeRes.error).toBeNull()
408
-
409
- // 6. Suppression du bucket
410
- const bucketDeleteRes = await client.storage.deleteBucket(bucketName)
411
- expect(bucketDeleteRes.error).toBeNull()
412
- })
413
- })