@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,154 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { StorageService } from '../src/StorageService'
3
- import { BaseAuthStore } from '@aurabase/core'
4
- import type { AuraClientLike } from '@aurabase/core'
5
-
6
- interface Call {
7
- url: string
8
- method: string
9
- body: unknown
10
- }
11
-
12
- /**
13
- * Client de test capturant chaque requête (url + method + body) ; le responder
14
- * choisit la réponse en fonction de l'URL. `apiKey` présent → header apikey injecté.
15
- */
16
- function make(responder: (url: string, init: RequestInit) => Response) {
17
- const calls: Call[] = []
18
- const client: AuraClientLike = {
19
- baseUrl: 'http://x',
20
- projectId: 'p',
21
- apiKey: 'k',
22
- authStore: new BaseAuthStore(),
23
- fetchFn: (async (url: string, init: RequestInit) => {
24
- calls.push({ url: String(url), method: init.method ?? 'GET', body: init.body })
25
- return responder(String(url), init)
26
- }) as unknown as typeof globalThis.fetch,
27
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
- auth: { refreshSession: async () => ({ data: null, error: null }) as any },
29
- }
30
- return { storage: new StorageService(client), calls }
31
- }
32
-
33
- function json(body: unknown, status = 200): Response {
34
- return new Response(JSON.stringify(body), { status, headers: { 'Content-Type': 'application/json' } })
35
- }
36
-
37
- describe('storage.updateBucket', () => {
38
- it('émet PATCH /v1/storage/{pid}/buckets/{id} avec le mapping createBucket', async () => {
39
- const { storage, calls } = make(() => json({ id: 'b', name: 'b', public: true }))
40
- const { error } = await storage.updateBucket('b', { public: true, fileSizeLimit: 1024, allowedMimeTypes: ['image/png'] })
41
- expect(error).toBeNull()
42
- expect(calls).toHaveLength(1)
43
- expect(calls[0].method).toBe('PATCH')
44
- expect(calls[0].url).toBe('http://x/v1/storage/p/buckets/b')
45
- const sent = JSON.parse(calls[0].body as string)
46
- expect(sent).toEqual({ public: true, file_size_limit: 1024, allowed_mime_types: ['image/png'] })
47
- })
48
-
49
- it('mise à jour partielle : seuls les champs fournis sont envoyés (public seul)', async () => {
50
- const { storage, calls } = make(() => json({ id: 'b', name: 'b', public: false }))
51
- await storage.updateBucket('b', { public: false })
52
- const sent = JSON.parse(calls[0].body as string)
53
- expect(sent).toEqual({ public: false })
54
- expect('file_size_limit' in sent).toBe(false)
55
- expect('allowed_mime_types' in sent).toBe(false)
56
- })
57
-
58
- it('sans options → PATCH avec corps vide {}', async () => {
59
- const { storage, calls } = make(() => json({ id: 'b', name: 'b' }))
60
- await storage.updateBucket('b')
61
- expect(JSON.parse(calls[0].body as string)).toEqual({})
62
- })
63
- })
64
-
65
- describe('storage.upload — option metadata', () => {
66
- it("chaque paire metadata est ajoutée au FormData en plus de 'file'", async () => {
67
- const { storage, calls } = make(() => json({ key: 'k.png' }))
68
- await storage.upload('b', 'p.png', new Blob(['x']), { metadata: { owner: 'x', team: 'a' } })
69
- const fd = calls[0].body as FormData
70
- expect(fd).toBeInstanceOf(FormData)
71
- expect(fd.get('owner')).toBe('x')
72
- expect(fd.get('team')).toBe('a')
73
- expect(fd.get('file')).toBeInstanceOf(Blob)
74
- })
75
-
76
- it('non-régression : upload sans metadata ne contient que file (+ upsert si demandé)', async () => {
77
- const { storage, calls } = make(() => json({ key: 'k.png' }))
78
- await storage.upload('b', 'p.png', new Blob(['x']), { upsert: true })
79
- const fd = calls[0].body as FormData
80
- expect(fd.get('file')).toBeInstanceOf(Blob)
81
- expect(fd.get('upsert')).toBe('true')
82
- expect([...fd.keys()].sort()).toEqual(['file', 'upsert'])
83
- })
84
-
85
- it('metadata + upsert cohabitent', async () => {
86
- const { storage, calls } = make(() => json({ key: 'k.png' }))
87
- await storage.upload('b', 'p.png', new Blob(['x']), { upsert: true, metadata: { owner: 'z' } })
88
- const fd = calls[0].body as FormData
89
- expect(fd.get('upsert')).toBe('true')
90
- expect(fd.get('owner')).toBe('z')
91
- })
92
- })
93
-
94
- describe('storage.createSignedUrls — batch', () => {
95
- it('fan-out N : appelle createSignedUrl pour chaque chemin, renvoie N entrées avec path+url', async () => {
96
- const { storage, calls } = make((url) => {
97
- const key = new URL(url).searchParams.get('key')
98
- return json({ url: `http://signed/${key}?sig=abc`, expires_in: 3600 })
99
- })
100
- const { data, error } = await storage.createSignedUrls('b', ['a.png', 'b.png', 'c.png'])
101
- expect(error).toBeNull()
102
- expect(calls).toHaveLength(3)
103
- expect(data).toHaveLength(3)
104
- expect(data![0]).toMatchObject({ path: 'a.png', expires_in: 3600 })
105
- expect((data![0] as { url: string }).url).toContain('a.png')
106
- expect(data!.map((d) => (d as { path: string }).path)).toEqual(['a.png', 'b.png', 'c.png'])
107
- })
108
-
109
- it('résilient par-item : une erreur produit {path, error} sans faire échouer les autres', async () => {
110
- const { storage } = make((url) => {
111
- const key = new URL(url).searchParams.get('key')
112
- if (key === 'bad.png') return json({ error: { message: 'not found' } }, 404)
113
- return json({ url: `http://signed/${key}`, expires_in: 60 })
114
- })
115
- const { data, error } = await storage.createSignedUrls('b', ['ok.png', 'bad.png'], 60)
116
- expect(error).toBeNull()
117
- expect(data).toHaveLength(2)
118
- const ok = data!.find((d) => (d as { path: string }).path === 'ok.png') as { url: string }
119
- const bad = data!.find((d) => (d as { path: string }).path === 'bad.png') as { error: unknown }
120
- expect(ok.url).toContain('ok.png')
121
- expect(bad.error).toBeTruthy()
122
- })
123
-
124
- it('propage expiresInSeconds à chaque appel (ttl_secs)', async () => {
125
- const { storage, calls } = make((url) => {
126
- const key = new URL(url).searchParams.get('key')
127
- return json({ url: `http://signed/${key}`, expires_in: 120 })
128
- })
129
- await storage.createSignedUrls('b', ['a.png'], 120)
130
- expect(calls[0].url).toContain('ttl_secs=120')
131
- })
132
- })
133
-
134
- describe('storage.list — offset no-op', () => {
135
- it("n'inclut PAS offset dans l'URL même si fourni", async () => {
136
- const { storage, calls } = make(() => json([]))
137
- await storage.list('b', { offset: 10 })
138
- expect(calls[0].url).not.toContain('offset')
139
- })
140
-
141
- it('non-régression : prefix et limit toujours transmis', async () => {
142
- const { storage, calls } = make(() => json([]))
143
- await storage.list('b', { prefix: 'sub/', limit: 5, offset: 99 })
144
- expect(calls[0].url).toContain('prefix=sub%2F')
145
- expect(calls[0].url).toContain('limit=5')
146
- expect(calls[0].url).not.toContain('offset')
147
- })
148
-
149
- it('aucune option → aucune query string', async () => {
150
- const { storage, calls } = make(() => json([]))
151
- await storage.list('b')
152
- expect(calls[0].url).toBe('http://x/v1/storage/p/b')
153
- })
154
- })
@@ -1,87 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { encodeObjectPath } from '../src/path'
3
- import { StorageService } from '../src/StorageService'
4
- import { BaseAuthStore, isAuraError } from '@aurabase/core'
5
- import type { AuraClientLike } from '@aurabase/core'
6
-
7
- function make(responder: (url: string) => Response) {
8
- const calls: string[] = []
9
- const client: AuraClientLike = {
10
- baseUrl: 'http://x', projectId: 'p', apiKey: 'k', authStore: new BaseAuthStore(),
11
- fetchFn: (async (url: string) => { calls.push(String(url)); return responder(String(url)) }) as unknown as typeof globalThis.fetch,
12
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
- auth: { refreshSession: async () => ({ data: null, error: null }) as any },
14
- }
15
- return { storage: new StorageService(client), calls }
16
- }
17
-
18
- describe('encodeObjectPath — anti-traversal + encodage', () => {
19
- it('laisse un chemin normal intact et préserve la structure de dossiers', () => {
20
- expect(encodeObjectPath('k.png')).toBe('k.png')
21
- expect(encodeObjectPath('users/1.png')).toBe('users/1.png')
22
- })
23
-
24
- it('encode les caractères qui casseraient l’URL ou injecteraient une query', () => {
25
- expect(encodeObjectPath('my photo.png')).toBe('my%20photo.png')
26
- expect(encodeObjectPath('f?admin=1#frag')).toBe('f%3Fadmin%3D1%23frag')
27
- // Un `%` littéral est ré-encodé (évite le double-décodage côté serveur).
28
- expect(encodeObjectPath('50%off')).toBe('50%25off')
29
- })
30
-
31
- it('retire les slashes de tête (pas de bucket//key ni de path absolu)', () => {
32
- expect(encodeObjectPath('/leading')).toBe('leading')
33
- expect(encodeObjectPath('///a/b')).toBe('a/b')
34
- })
35
-
36
- it('rejette tout segment de traversal `..`', () => {
37
- for (const p of ['..', '../secret', 'a/../b', 'a/b/..']) {
38
- let thrown: unknown
39
- try { encodeObjectPath(p) } catch (e) { thrown = e }
40
- expect(isAuraError(thrown)).toBe(true)
41
- expect((thrown as { code: string }).code).toBe('invalid_path')
42
- }
43
- })
44
-
45
- it('un `..` déjà encodé (%2E%2E) reste littéral (pas de traversal)', () => {
46
- // Le segment n'est pas `..`, il est ré-encodé → aucune normalisation possible.
47
- expect(encodeObjectPath('%2E%2E/x')).toBe('%252E%252E/x')
48
- })
49
- })
50
-
51
- describe('StorageService — application de l’encodage', () => {
52
- it('download() encode le path (pas d’injection de query string)', () => {
53
- const { storage, calls } = make(() => new Response(new Blob(['x']), { status: 200 }))
54
- // Ne pas await : on veut juste l'URL construite au premier fetch.
55
- void storage.download('b', 'f?admin=1').then(() => {})
56
- // La requête part de façon paresseuse ; on force le déclenchement.
57
- return storage.download('b', 'f?admin=1').then(() => {
58
- const url = calls[calls.length - 1]
59
- expect(url).toContain('/b/f%3Fadmin%3D1')
60
- expect(url).not.toContain('?admin=1')
61
- })
62
- })
63
-
64
- it('download() lève synchroniquement sur `..`', () => {
65
- const { storage } = make(() => new Response(null, { status: 200 }))
66
- expect(() => storage.download('b', 'a/../../secret')).toThrow()
67
- })
68
-
69
- it('getPublicUrl() lève sur `..`, encode sinon', () => {
70
- const { storage } = make(() => new Response(null, { status: 200 }))
71
- expect(() => storage.getPublicUrl('b', '../x')).toThrow()
72
- expect(storage.getPublicUrl('b', 'dir/my file.png')).toContain('/b/dir/my%20file.png')
73
- })
74
-
75
- it('getMetadata() renvoie {error invalid_path} sur `..` (never-throw)', async () => {
76
- const { storage } = make(() => new Response(null, { status: 200 }))
77
- const { data, error } = await storage.getMetadata('b', '../etc')
78
- expect(data).toBeNull()
79
- expect(error?.code).toBe('invalid_path')
80
- })
81
-
82
- it('remove() renvoie {error} si une des clés fait du traversal', async () => {
83
- const { storage } = make(() => new Response(JSON.stringify({ data: null }), { status: 200 }))
84
- const { error } = await storage.remove('b', ['ok.png', '../evil'])
85
- expect(error?.code).toBe('invalid_path')
86
- })
87
- })
@@ -1,79 +0,0 @@
1
- import { describe, it, expect } from 'vitest'
2
- import { renderTransformParams } from '../src/transform'
3
- import { StorageService } from '../src/StorageService'
4
- import { BaseAuthStore } from '@aurabase/core'
5
- import type { AuraClientLike } from '@aurabase/core'
6
-
7
- describe('renderTransformParams', () => {
8
- it('mappe resize→fit et garde width/height/quality', () => {
9
- const qs = renderTransformParams({ width: 200, height: 100, resize: 'cover', quality: 80 }).toString()
10
- expect(qs).toContain('width=200'); expect(qs).toContain('height=100')
11
- expect(qs).toContain('fit=cover'); expect(qs).toContain('quality=80')
12
- expect(qs).not.toContain('resize=')
13
- })
14
- it("omet format quand 'origin'", () => {
15
- const qs = renderTransformParams({ format: 'origin', width: 50 }).toString()
16
- expect(qs).not.toContain('format='); expect(qs).toContain('width=50')
17
- })
18
- it('passe format webp', () => {
19
- expect(renderTransformParams({ format: 'webp' }).toString()).toContain('format=webp')
20
- })
21
- it('borne quality 20-100', () => {
22
- expect(renderTransformParams({ quality: 5 }).get('quality')).toBe('20')
23
- expect(renderTransformParams({ quality: 500 }).get('quality')).toBe('100')
24
- })
25
- })
26
-
27
- // -- Fixtures partagées avec download.test.ts (mock AuraClientLike minimal) --
28
-
29
- function make(responder: (url: string) => Response, store = new BaseAuthStore()) {
30
- const calls: string[] = []
31
- const client: AuraClientLike = {
32
- baseUrl: 'http://x', projectId: 'p', apiKey: 'k', authStore: store,
33
- fetchFn: (async (url: string) => { calls.push(String(url)); return responder(String(url)) }) as unknown as typeof globalThis.fetch,
34
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
- auth: { refreshSession: async () => ({ data: null, error: null }) as any },
36
- }
37
- return { storage: new StorageService(client), calls }
38
- }
39
-
40
- describe('getPublicUrl / download avec { transform }', () => {
41
- it('getPublicUrl appende la query transform', () => {
42
- const { storage } = make(() => new Response(null, { status: 200 }))
43
- const url = storage.getPublicUrl('b', 'k.png', { transform: { width: 50 } })
44
- expect(url).toContain('?width=50')
45
- })
46
-
47
- it('download appende la query transform à l’URL figée du builder', async () => {
48
- const { storage, calls } = make(() => new Response(new Blob(['x']), { status: 200 }))
49
- await storage.download('b', 'k.png', { transform: { width: 50, resize: 'cover' } })
50
- expect(calls[0]).toContain('width=50')
51
- expect(calls[0]).toContain('fit=cover')
52
- })
53
- })
54
-
55
- describe('createSignedUrl avec { transform }', () => {
56
- it('appende la query transform à l’URL signée retournée par le backend', async () => {
57
- const { storage } = make(() =>
58
- new Response(JSON.stringify({ url: 'http://x/signed?sig=abc', expires_in: 600 }), {
59
- status: 200,
60
- headers: { 'Content-Type': 'application/json' },
61
- }),
62
- )
63
- const { data, error } = await storage.createSignedUrl('b', 'k.png', 600, { transform: { width: 50 } })
64
- expect(error).toBeNull()
65
- expect(data?.url).toContain('sig=abc')
66
- expect(data?.url).toContain('width=50')
67
- })
68
-
69
- it('sans transform, laisse l’URL signée inchangée', async () => {
70
- const { storage } = make(() =>
71
- new Response(JSON.stringify({ url: 'http://x/signed?sig=abc', expires_in: 600 }), {
72
- status: 200,
73
- headers: { 'Content-Type': 'application/json' },
74
- }),
75
- )
76
- const { data } = await storage.createSignedUrl('b', 'k.png', 600)
77
- expect(data?.url).toBe('http://x/signed?sig=abc')
78
- })
79
- })
@@ -1,5 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": { "outDir": "dist", "rootDir": "src" },
4
- "include": ["src"]
5
- }
@@ -1,11 +0,0 @@
1
- import { defineConfig } from 'tsup'
2
-
3
- export default defineConfig({
4
- entry: ['src/index.ts'],
5
- format: ['cjs', 'esm'],
6
- dts: true,
7
- splitting: false,
8
- clean: true,
9
- treeshake: true,
10
- minify: false,
11
- })
@@ -1,24 +0,0 @@
1
- packages:
2
- - 'packages/*'
3
-
4
- catalog:
5
- tsup: ^8.0.0
6
- typescript: ^5.5.0
7
- vitest: ^4.1.6
8
- '@types/node': 20.14.15
9
-
10
- # Durcissement supply-chain (pnpm v10.16+) — imposé par le hook semgrep du projet.
11
- # - minimumReleaseAge : attendre 7 jours (10080 min) avant d'installer une version fraîchement publiée
12
- # - blockExoticSubdeps : bloquer les sous-dépendances de sources non fiables (git, tarball…)
13
- # - trustPolicy : empêcher un downgrade malveillant des réglages de sécurité
14
- minimumReleaseAge: 10080
15
- blockExoticSubdeps: true
16
- trustPolicy: no-downgrade
17
- # Exemption ciblée : chokidar@4.0.3 (dépendance transitive de tsup, l'outil de build)
18
- # a perdu son attestation de provenance — le mainteneur a cessé de signer ses publications
19
- # (les 4.0.0/4.0.1 étaient signées). Ce n'est pas une compromission. La politique stricte
20
- # reste appliquée partout ailleurs. Réf. pnpm.io/settings#trustpolicyexclude (v10.22+).
21
- trustPolicyExclude:
22
- - 'chokidar@4.0.3'
23
- allowBuilds:
24
- esbuild: true
@@ -1,15 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ESNext",
5
- "moduleResolution": "bundler",
6
- "lib": ["ES2022", "DOM"],
7
- "strict": true,
8
- "esModuleInterop": true,
9
- "skipLibCheck": true,
10
- "declaration": true,
11
- "declarationMap": true,
12
- "sourceMap": true,
13
- "types": ["vitest/globals"]
14
- }
15
- }
File without changes
File without changes
File without changes
File without changes