@effect-kit/storage 0.0.0-stage → 0.1.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 (615) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/LICENSE +204 -0
  3. package/README.md +369 -2
  4. package/dist/_virtual/_rolldown/runtime.js +17 -0
  5. package/dist/azure/account-admin.d.ts +116 -0
  6. package/dist/azure/account-admin.js +90 -0
  7. package/dist/azure/account-admin.js.map +1 -0
  8. package/dist/azure/admin.d.ts +68 -0
  9. package/dist/azure/admin.js +85 -0
  10. package/dist/azure/admin.js.map +1 -0
  11. package/dist/azure/archive.d.ts +95 -0
  12. package/dist/azure/archive.js +52 -0
  13. package/dist/azure/archive.js.map +1 -0
  14. package/dist/azure/events.d.ts +40 -0
  15. package/dist/azure/events.js +62 -0
  16. package/dist/azure/events.js.map +1 -0
  17. package/dist/azure/governance.d.ts +139 -0
  18. package/dist/azure/governance.js +59 -0
  19. package/dist/azure/governance.js.map +1 -0
  20. package/dist/azure/identity.d.ts +4 -0
  21. package/dist/azure/identity.js +8 -0
  22. package/dist/azure/identity.js.map +1 -0
  23. package/dist/azure/lifecycle.d.ts +21 -0
  24. package/dist/azure/lifecycle.js +193 -0
  25. package/dist/azure/lifecycle.js.map +1 -0
  26. package/dist/azure/signing.d.ts +17 -0
  27. package/dist/azure/signing.js +71 -0
  28. package/dist/azure/signing.js.map +1 -0
  29. package/dist/azure/uploads.d.ts +11 -0
  30. package/dist/azure/uploads.js +83 -0
  31. package/dist/azure/uploads.js.map +1 -0
  32. package/dist/azure.d.ts +427 -0
  33. package/dist/azure.js +77 -0
  34. package/dist/azure.js.map +1 -0
  35. package/dist/b2/admin.d.ts +149 -0
  36. package/dist/b2/admin.js +157 -0
  37. package/dist/b2/admin.js.map +1 -0
  38. package/dist/b2.d.ts +15 -0
  39. package/dist/b2.js +15 -0
  40. package/dist/b2.js.map +1 -0
  41. package/dist/browser.d.ts +7 -0
  42. package/dist/browser.js +11 -0
  43. package/dist/browser.js.map +1 -0
  44. package/dist/bun.d.ts +14 -0
  45. package/dist/bun.js +17 -0
  46. package/dist/bun.js.map +1 -0
  47. package/dist/cache.d.ts +18 -0
  48. package/dist/cache.js +116 -0
  49. package/dist/cache.js.map +1 -0
  50. package/dist/client/atoms/controller.d.ts +10 -0
  51. package/dist/client/atoms/controller.js +267 -0
  52. package/dist/client/atoms/controller.js.map +1 -0
  53. package/dist/client/atoms/state.d.ts +17 -0
  54. package/dist/client/atoms/state.js +11 -0
  55. package/dist/client/atoms/state.js.map +1 -0
  56. package/dist/client/atoms.d.ts +59 -0
  57. package/dist/client/atoms.js +39 -0
  58. package/dist/client/atoms.js.map +1 -0
  59. package/dist/client/fingerprint.js +28 -0
  60. package/dist/client/fingerprint.js.map +1 -0
  61. package/dist/client/store.d.ts +31 -0
  62. package/dist/client/store.js +56 -0
  63. package/dist/client/store.js.map +1 -0
  64. package/dist/client/transport.d.ts +11 -0
  65. package/dist/client/transport.js +78 -0
  66. package/dist/client/transport.js.map +1 -0
  67. package/dist/client.d.ts +259 -0
  68. package/dist/client.js +350 -0
  69. package/dist/client.js.map +1 -0
  70. package/dist/composition/layer.js +22 -0
  71. package/dist/composition/layer.js.map +1 -0
  72. package/dist/composition/representation/staging.js +46 -0
  73. package/dist/composition/representation/staging.js.map +1 -0
  74. package/dist/composition/representation/storage.js +188 -0
  75. package/dist/composition/representation/storage.js.map +1 -0
  76. package/dist/composition.d.ts +20 -0
  77. package/dist/composition.js +124 -0
  78. package/dist/composition.js.map +1 -0
  79. package/dist/compression.d.ts +16 -0
  80. package/dist/compression.js +38 -0
  81. package/dist/compression.js.map +1 -0
  82. package/dist/content.d.ts +590 -0
  83. package/dist/content.js +168 -0
  84. package/dist/content.js.map +1 -0
  85. package/dist/core/capabilities.d.ts +53 -0
  86. package/dist/core/capabilities.js +9 -0
  87. package/dist/core/capabilities.js.map +1 -0
  88. package/dist/core/contracts/multipart.d.ts +56 -0
  89. package/dist/core/contracts/resumable.d.ts +70 -0
  90. package/dist/core/errors.d.ts +55 -0
  91. package/dist/core/errors.js +55 -0
  92. package/dist/core/errors.js.map +1 -0
  93. package/dist/core/object.d.ts +97 -0
  94. package/dist/core/object.js +55 -0
  95. package/dist/core/object.js.map +1 -0
  96. package/dist/core/ranges.d.ts +17 -0
  97. package/dist/core/ranges.js +27 -0
  98. package/dist/core/ranges.js.map +1 -0
  99. package/dist/core/requests.d.ts +185 -0
  100. package/dist/core/requests.js +42 -0
  101. package/dist/core/requests.js.map +1 -0
  102. package/dist/core/storage.d.ts +249 -0
  103. package/dist/core/storage.js +173 -0
  104. package/dist/core/storage.js.map +1 -0
  105. package/dist/deno.d.ts +14 -0
  106. package/dist/deno.js +17 -0
  107. package/dist/deno.js.map +1 -0
  108. package/dist/encryption/age.d.ts +14 -0
  109. package/dist/encryption/age.js +46 -0
  110. package/dist/encryption/age.js.map +1 -0
  111. package/dist/encryption.d.ts +16 -0
  112. package/dist/encryption.js +16 -0
  113. package/dist/encryption.js.map +1 -0
  114. package/dist/events.d.ts +57 -0
  115. package/dist/events.js +106 -0
  116. package/dist/events.js.map +1 -0
  117. package/dist/filesystem.d.ts +23 -0
  118. package/dist/filesystem.js +75 -0
  119. package/dist/filesystem.js.map +1 -0
  120. package/dist/gcs/admin.d.ts +470 -0
  121. package/dist/gcs/admin.js +206 -0
  122. package/dist/gcs/admin.js.map +1 -0
  123. package/dist/gcs/events.d.ts +41 -0
  124. package/dist/gcs/events.js +45 -0
  125. package/dist/gcs/events.js.map +1 -0
  126. package/dist/gcs/governance.d.ts +158 -0
  127. package/dist/gcs/governance.js +100 -0
  128. package/dist/gcs/governance.js.map +1 -0
  129. package/dist/gcs/lifecycle.d.ts +161 -0
  130. package/dist/gcs/lifecycle.js +174 -0
  131. package/dist/gcs/lifecycle.js.map +1 -0
  132. package/dist/gcs/post.d.ts +31 -0
  133. package/dist/gcs/post.js +70 -0
  134. package/dist/gcs/post.js.map +1 -0
  135. package/dist/gcs/signing.d.ts +10 -0
  136. package/dist/gcs/signing.js +61 -0
  137. package/dist/gcs/signing.js.map +1 -0
  138. package/dist/gcs/uploads.d.ts +10 -0
  139. package/dist/gcs/uploads.js +76 -0
  140. package/dist/gcs/uploads.js.map +1 -0
  141. package/dist/gcs.d.ts +888 -0
  142. package/dist/gcs.js +91 -0
  143. package/dist/gcs.js.map +1 -0
  144. package/dist/hetzner/admin.d.ts +112 -0
  145. package/dist/hetzner/admin.js +19 -0
  146. package/dist/hetzner/admin.js.map +1 -0
  147. package/dist/hetzner.d.ts +15 -0
  148. package/dist/hetzner.js +15 -0
  149. package/dist/hetzner.js.map +1 -0
  150. package/dist/http/api.d.ts +236 -0
  151. package/dist/http/api.js +54 -0
  152. package/dist/http/api.js.map +1 -0
  153. package/dist/http/download.js +99 -0
  154. package/dist/http/download.js.map +1 -0
  155. package/dist/http/schema.d.ts +3 -0
  156. package/dist/http/schema.js +4 -0
  157. package/dist/http.d.ts +35 -0
  158. package/dist/http.js +178 -0
  159. package/dist/http.js.map +1 -0
  160. package/dist/index.d.ts +10 -0
  161. package/dist/index.js +9 -0
  162. package/dist/internal/http/control-plane.js +71 -0
  163. package/dist/internal/http/control-plane.js.map +1 -0
  164. package/dist/internal/listing-cursor.js +44 -0
  165. package/dist/internal/listing-cursor.js.map +1 -0
  166. package/dist/internal/node/provider-errors.js +16 -0
  167. package/dist/internal/node/provider-errors.js.map +1 -0
  168. package/dist/internal/node/upload-body.js +111 -0
  169. package/dist/internal/node/upload-body.js.map +1 -0
  170. package/dist/internal/provider-response.js +14 -0
  171. package/dist/internal/provider-response.js.map +1 -0
  172. package/dist/internal/public-urls.js +30 -0
  173. package/dist/internal/public-urls.js.map +1 -0
  174. package/dist/internal/read-condition.js +11 -0
  175. package/dist/internal/read-condition.js.map +1 -0
  176. package/dist/internal/request-validation.js +24 -0
  177. package/dist/internal/request-validation.js.map +1 -0
  178. package/dist/internal/signing-request.js +22 -0
  179. package/dist/internal/signing-request.js.map +1 -0
  180. package/dist/internal/web-upload-body.js +71 -0
  181. package/dist/internal/web-upload-body.js.map +1 -0
  182. package/dist/lifecycle/configuration-state.js +26 -0
  183. package/dist/lifecycle/configuration-state.js.map +1 -0
  184. package/dist/lifecycle/metadata.js +28 -0
  185. package/dist/lifecycle/metadata.js.map +1 -0
  186. package/dist/lifecycle.d.ts +269 -0
  187. package/dist/lifecycle.js +72 -0
  188. package/dist/lifecycle.js.map +1 -0
  189. package/dist/migrations.d.ts +537 -0
  190. package/dist/migrations.js +296 -0
  191. package/dist/migrations.js.map +1 -0
  192. package/dist/minio/admin.d.ts +112 -0
  193. package/dist/minio/admin.js +19 -0
  194. package/dist/minio/admin.js.map +1 -0
  195. package/dist/minio.d.ts +15 -0
  196. package/dist/minio.js +15 -0
  197. package/dist/minio.js.map +1 -0
  198. package/dist/mirror.d.ts +830 -0
  199. package/dist/mirror.js +290 -0
  200. package/dist/mirror.js.map +1 -0
  201. package/dist/node.d.ts +14 -0
  202. package/dist/node.js +17 -0
  203. package/dist/node.js.map +1 -0
  204. package/dist/providers/azure/blocks.js +94 -0
  205. package/dist/providers/azure/blocks.js.map +1 -0
  206. package/dist/providers/azure/config.d.ts +41 -0
  207. package/dist/providers/azure/config.js +62 -0
  208. package/dist/providers/azure/config.js.map +1 -0
  209. package/dist/providers/azure/mapping.js +83 -0
  210. package/dist/providers/azure/mapping.js.map +1 -0
  211. package/dist/providers/azure/native.js +88 -0
  212. package/dist/providers/azure/native.js.map +1 -0
  213. package/dist/providers/azure/primitives.js +203 -0
  214. package/dist/providers/azure/primitives.js.map +1 -0
  215. package/dist/providers/azure/properties.d.ts +180 -0
  216. package/dist/providers/azure/properties.js +55 -0
  217. package/dist/providers/azure/properties.js.map +1 -0
  218. package/dist/providers/azure/transport.js +14 -0
  219. package/dist/providers/azure/transport.js.map +1 -0
  220. package/dist/providers/azure/validation.js +11 -0
  221. package/dist/providers/azure/validation.js.map +1 -0
  222. package/dist/providers/filesystem/envelope.js +56 -0
  223. package/dist/providers/filesystem/envelope.js.map +1 -0
  224. package/dist/providers/filesystem/identity.js +68 -0
  225. package/dist/providers/filesystem/identity.js.map +1 -0
  226. package/dist/providers/filesystem/layout.d.ts +15 -0
  227. package/dist/providers/filesystem/layout.js +112 -0
  228. package/dist/providers/filesystem/layout.js.map +1 -0
  229. package/dist/providers/filesystem/list.js +82 -0
  230. package/dist/providers/filesystem/list.js.map +1 -0
  231. package/dist/providers/filesystem/operations.js +134 -0
  232. package/dist/providers/filesystem/operations.js.map +1 -0
  233. package/dist/providers/gcs/config.d.ts +34 -0
  234. package/dist/providers/gcs/config.js +60 -0
  235. package/dist/providers/gcs/config.js.map +1 -0
  236. package/dist/providers/gcs/iam.js +45 -0
  237. package/dist/providers/gcs/iam.js.map +1 -0
  238. package/dist/providers/gcs/mapping.js +118 -0
  239. package/dist/providers/gcs/mapping.js.map +1 -0
  240. package/dist/providers/gcs/native.d.ts +11 -0
  241. package/dist/providers/gcs/native.js +122 -0
  242. package/dist/providers/gcs/native.js.map +1 -0
  243. package/dist/providers/gcs/primitives.js +194 -0
  244. package/dist/providers/gcs/primitives.js.map +1 -0
  245. package/dist/providers/gcs/resumable.js +145 -0
  246. package/dist/providers/gcs/resumable.js.map +1 -0
  247. package/dist/providers/gcs/tier.d.ts +176 -0
  248. package/dist/providers/gcs/tier.js +34 -0
  249. package/dist/providers/gcs/tier.js.map +1 -0
  250. package/dist/providers/gcs/transport.js +123 -0
  251. package/dist/providers/gcs/transport.js.map +1 -0
  252. package/dist/providers/gcs/upload.js +28 -0
  253. package/dist/providers/gcs/upload.js.map +1 -0
  254. package/dist/providers/gcs/validation.js +10 -0
  255. package/dist/providers/gcs/validation.js.map +1 -0
  256. package/dist/providers/r2-workers/binding.d.ts +102 -0
  257. package/dist/providers/r2-workers/body.js +82 -0
  258. package/dist/providers/r2-workers/body.js.map +1 -0
  259. package/dist/providers/r2-workers/list.js +62 -0
  260. package/dist/providers/r2-workers/list.js.map +1 -0
  261. package/dist/providers/r2-workers/mapping.js +140 -0
  262. package/dist/providers/r2-workers/mapping.js.map +1 -0
  263. package/dist/providers/r2-workers/multipart.js +121 -0
  264. package/dist/providers/r2-workers/multipart.js.map +1 -0
  265. package/dist/providers/r2-workers/primitives.js +80 -0
  266. package/dist/providers/r2-workers/primitives.js.map +1 -0
  267. package/dist/providers/s3/admin-configuration.d.ts +19 -0
  268. package/dist/providers/s3/admin-configuration.js +171 -0
  269. package/dist/providers/s3/admin-configuration.js.map +1 -0
  270. package/dist/providers/s3/bulk-delete.d.ts +43 -0
  271. package/dist/providers/s3/bulk-delete.js +58 -0
  272. package/dist/providers/s3/bulk-delete.js.map +1 -0
  273. package/dist/providers/s3/config.d.ts +43 -0
  274. package/dist/providers/s3/config.js +89 -0
  275. package/dist/providers/s3/config.js.map +1 -0
  276. package/dist/providers/s3/copy.d.ts +115 -0
  277. package/dist/providers/s3/copy.js +122 -0
  278. package/dist/providers/s3/copy.js.map +1 -0
  279. package/dist/providers/s3/lifecycle-validation.js +33 -0
  280. package/dist/providers/s3/lifecycle-validation.js.map +1 -0
  281. package/dist/providers/s3/listing.js +56 -0
  282. package/dist/providers/s3/listing.js.map +1 -0
  283. package/dist/providers/s3/metadata.d.ts +10 -0
  284. package/dist/providers/s3/metadata.js +90 -0
  285. package/dist/providers/s3/metadata.js.map +1 -0
  286. package/dist/providers/s3/multipart.d.ts +41 -0
  287. package/dist/providers/s3/multipart.js +299 -0
  288. package/dist/providers/s3/multipart.js.map +1 -0
  289. package/dist/providers/s3/native-models.d.ts +82 -0
  290. package/dist/providers/s3/native-models.js +91 -0
  291. package/dist/providers/s3/native-models.js.map +1 -0
  292. package/dist/providers/s3/object-mapping.js +114 -0
  293. package/dist/providers/s3/object-mapping.js.map +1 -0
  294. package/dist/providers/s3/primitives.d.ts +8 -0
  295. package/dist/providers/s3/primitives.js +235 -0
  296. package/dist/providers/s3/primitives.js.map +1 -0
  297. package/dist/providers/s3/profile.d.ts +25 -0
  298. package/dist/providers/s3/profile.js +46 -0
  299. package/dist/providers/s3/profile.js.map +1 -0
  300. package/dist/providers/s3/request-extension.js +29 -0
  301. package/dist/providers/s3/request-extension.js.map +1 -0
  302. package/dist/providers/s3/service.js +55 -0
  303. package/dist/providers/s3/service.js.map +1 -0
  304. package/dist/providers/s3/signing-credentials.js +32 -0
  305. package/dist/providers/s3/signing-credentials.js.map +1 -0
  306. package/dist/providers/s3/tags.d.ts +10 -0
  307. package/dist/providers/s3/tags.js +65 -0
  308. package/dist/providers/s3/tags.js.map +1 -0
  309. package/dist/providers/s3/tier.d.ts +171 -0
  310. package/dist/providers/s3/tier.js +100 -0
  311. package/dist/providers/s3/tier.js.map +1 -0
  312. package/dist/providers/s3/transfer-driver.js +72 -0
  313. package/dist/providers/s3/transfer-driver.js.map +1 -0
  314. package/dist/providers/s3/transport.js +94 -0
  315. package/dist/providers/s3/transport.js.map +1 -0
  316. package/dist/providers/s3/upload-body.js +10 -0
  317. package/dist/providers/s3/upload-body.js.map +1 -0
  318. package/dist/providers/s3/validation.js +31 -0
  319. package/dist/providers/s3/validation.js.map +1 -0
  320. package/dist/providers/s3/versions.d.ts +10 -0
  321. package/dist/providers/s3/versions.js +143 -0
  322. package/dist/providers/s3/versions.js.map +1 -0
  323. package/dist/providers/s3-compatible/config.d.ts +36 -0
  324. package/dist/providers/s3-compatible/config.js +174 -0
  325. package/dist/providers/s3-compatible/config.js.map +1 -0
  326. package/dist/providers/s3-compatible/service.js +48 -0
  327. package/dist/providers/s3-compatible/service.js.map +1 -0
  328. package/dist/providers/supabase/config.d.ts +20 -0
  329. package/dist/providers/supabase/config.js +41 -0
  330. package/dist/providers/supabase/config.js.map +1 -0
  331. package/dist/providers/supabase/mapping.js +60 -0
  332. package/dist/providers/supabase/mapping.js.map +1 -0
  333. package/dist/providers/supabase/primitives.js +205 -0
  334. package/dist/providers/supabase/primitives.js.map +1 -0
  335. package/dist/providers/supabase/transport.js +64 -0
  336. package/dist/providers/supabase/transport.js.map +1 -0
  337. package/dist/providers/supabase/tus.js +163 -0
  338. package/dist/providers/supabase/tus.js.map +1 -0
  339. package/dist/providers/tigris/configuration.js +118 -0
  340. package/dist/providers/tigris/configuration.js.map +1 -0
  341. package/dist/providers/tigris/snapshots.js +87 -0
  342. package/dist/providers/tigris/snapshots.js.map +1 -0
  343. package/dist/providers/tigris/transport.js +18 -0
  344. package/dist/providers/tigris/transport.js.map +1 -0
  345. package/dist/providers/vercel/config.d.ts +16 -0
  346. package/dist/providers/vercel/config.js +48 -0
  347. package/dist/providers/vercel/config.js.map +1 -0
  348. package/dist/providers/vercel/mapping.js +79 -0
  349. package/dist/providers/vercel/mapping.js.map +1 -0
  350. package/dist/providers/vercel/multipart.js +113 -0
  351. package/dist/providers/vercel/multipart.js.map +1 -0
  352. package/dist/providers/vercel/primitives.js +168 -0
  353. package/dist/providers/vercel/primitives.js.map +1 -0
  354. package/dist/providers/vercel/transport.js +32 -0
  355. package/dist/providers/vercel/transport.js.map +1 -0
  356. package/dist/providers/wasabi/compliance.d.ts +52 -0
  357. package/dist/providers/wasabi/compliance.js +89 -0
  358. package/dist/providers/wasabi/compliance.js.map +1 -0
  359. package/dist/providers/wasabi/xml.js +55 -0
  360. package/dist/providers/wasabi/xml.js.map +1 -0
  361. package/dist/r2/admin.d.ts +126 -0
  362. package/dist/r2/admin.js +138 -0
  363. package/dist/r2/admin.js.map +1 -0
  364. package/dist/r2/events.d.ts +41 -0
  365. package/dist/r2/events.js +37 -0
  366. package/dist/r2/events.js.map +1 -0
  367. package/dist/r2-workers.d.ts +24 -0
  368. package/dist/r2-workers.js +115 -0
  369. package/dist/r2-workers.js.map +1 -0
  370. package/dist/r2.d.ts +15 -0
  371. package/dist/r2.js +15 -0
  372. package/dist/r2.js.map +1 -0
  373. package/dist/react.d.ts +73 -0
  374. package/dist/react.js +49 -0
  375. package/dist/react.js.map +1 -0
  376. package/dist/representation.d.ts +24 -0
  377. package/dist/representation.js +7 -0
  378. package/dist/representation.js.map +1 -0
  379. package/dist/runtime/bun-filesystem.js +136 -0
  380. package/dist/runtime/bun-filesystem.js.map +1 -0
  381. package/dist/runtime/file-target.d.ts +10 -0
  382. package/dist/runtime/file-target.js +66 -0
  383. package/dist/runtime/file-target.js.map +1 -0
  384. package/dist/runtime/filesystem.d.ts +6 -0
  385. package/dist/runtime/filesystem.js +68 -0
  386. package/dist/runtime/filesystem.js.map +1 -0
  387. package/dist/runtime/node-hash.d.ts +4 -0
  388. package/dist/runtime/node-hash.js +31 -0
  389. package/dist/runtime/node-hash.js.map +1 -0
  390. package/dist/runtime/node-protection.d.ts +4 -0
  391. package/dist/runtime/node-protection.js +46 -0
  392. package/dist/runtime/node-protection.js.map +1 -0
  393. package/dist/runtime/portable-hash.d.ts +3 -0
  394. package/dist/runtime/portable-hash.js +31 -0
  395. package/dist/runtime/portable-hash.js.map +1 -0
  396. package/dist/runtime/session-store.d.ts +12 -0
  397. package/dist/runtime/session-store.js +19 -0
  398. package/dist/runtime/session-store.js.map +1 -0
  399. package/dist/runtime/web-protection.d.ts +7 -0
  400. package/dist/runtime/web-protection.js +54 -0
  401. package/dist/runtime/web-protection.js.map +1 -0
  402. package/dist/s3/admin.d.ts +183 -0
  403. package/dist/s3/admin.js +197 -0
  404. package/dist/s3/admin.js.map +1 -0
  405. package/dist/s3/archive.d.ts +25 -0
  406. package/dist/s3/archive.js +113 -0
  407. package/dist/s3/archive.js.map +1 -0
  408. package/dist/s3/events.d.ts +42 -0
  409. package/dist/s3/events.js +69 -0
  410. package/dist/s3/events.js.map +1 -0
  411. package/dist/s3/governance.d.ts +319 -0
  412. package/dist/s3/governance.js +108 -0
  413. package/dist/s3/governance.js.map +1 -0
  414. package/dist/s3/lifecycle.d.ts +4 -0
  415. package/dist/s3/lifecycle.js +5 -0
  416. package/dist/s3/post.d.ts +31 -0
  417. package/dist/s3/post.js +93 -0
  418. package/dist/s3/post.js.map +1 -0
  419. package/dist/s3/signing.d.ts +105 -0
  420. package/dist/s3/signing.js +198 -0
  421. package/dist/s3/signing.js.map +1 -0
  422. package/dist/s3/uploads.d.ts +11 -0
  423. package/dist/s3/uploads.js +173 -0
  424. package/dist/s3/uploads.js.map +1 -0
  425. package/dist/s3.d.ts +37 -0
  426. package/dist/s3.js +114 -0
  427. package/dist/s3.js.map +1 -0
  428. package/dist/scaleway/admin.d.ts +112 -0
  429. package/dist/scaleway/admin.js +19 -0
  430. package/dist/scaleway/admin.js.map +1 -0
  431. package/dist/scaleway.d.ts +15 -0
  432. package/dist/scaleway.js +15 -0
  433. package/dist/scaleway.js.map +1 -0
  434. package/dist/session-events.d.ts +22 -0
  435. package/dist/session-events.js +22 -0
  436. package/dist/session-events.js.map +1 -0
  437. package/dist/sessions/checkpoint.d.ts +423 -0
  438. package/dist/sessions/checkpoint.js +102 -0
  439. package/dist/sessions/checkpoint.js.map +1 -0
  440. package/dist/sessions/download.d.ts +17 -0
  441. package/dist/sessions/download.js +111 -0
  442. package/dist/sessions/download.js.map +1 -0
  443. package/dist/sessions/native-upload.js +168 -0
  444. package/dist/sessions/native-upload.js.map +1 -0
  445. package/dist/sessions/store.d.ts +40 -0
  446. package/dist/sessions/store.js +77 -0
  447. package/dist/sessions/store.js.map +1 -0
  448. package/dist/sessions/upload.d.ts +10 -0
  449. package/dist/sessions/upload.js +329 -0
  450. package/dist/sessions/upload.js.map +1 -0
  451. package/dist/sessions.d.ts +98 -0
  452. package/dist/sessions.js +268 -0
  453. package/dist/sessions.js.map +1 -0
  454. package/dist/spaces/admin.d.ts +112 -0
  455. package/dist/spaces/admin.js +19 -0
  456. package/dist/spaces/admin.js.map +1 -0
  457. package/dist/spaces.d.ts +15 -0
  458. package/dist/spaces.js +15 -0
  459. package/dist/spaces.js.map +1 -0
  460. package/dist/supabase/admin.d.ts +77 -0
  461. package/dist/supabase/admin.js +74 -0
  462. package/dist/supabase/admin.js.map +1 -0
  463. package/dist/supabase/s3.d.ts +311 -0
  464. package/dist/supabase/s3.js +153 -0
  465. package/dist/supabase/s3.js.map +1 -0
  466. package/dist/supabase/signing.d.ts +23 -0
  467. package/dist/supabase/signing.js +93 -0
  468. package/dist/supabase/signing.js.map +1 -0
  469. package/dist/supabase/tus-uploads.d.ts +13 -0
  470. package/dist/supabase/tus-uploads.js +109 -0
  471. package/dist/supabase/tus-uploads.js.map +1 -0
  472. package/dist/supabase/uploads.d.ts +5 -0
  473. package/dist/supabase/uploads.js +32 -0
  474. package/dist/supabase/uploads.js.map +1 -0
  475. package/dist/supabase.d.ts +100 -0
  476. package/dist/supabase.js +50 -0
  477. package/dist/supabase.js.map +1 -0
  478. package/dist/testing/body-failure.js +18 -0
  479. package/dist/testing/body-failure.js.map +1 -0
  480. package/dist/testing/conformance/assertions.d.ts +10 -0
  481. package/dist/testing/conformance/assertions.js +21 -0
  482. package/dist/testing/conformance/assertions.js.map +1 -0
  483. package/dist/testing/conformance/core-cases.js +107 -0
  484. package/dist/testing/conformance/core-cases.js.map +1 -0
  485. package/dist/testing/conformance/list-cases.js +72 -0
  486. package/dist/testing/conformance/list-cases.js.map +1 -0
  487. package/dist/testing/conformance/read-cases.js +105 -0
  488. package/dist/testing/conformance/read-cases.js.map +1 -0
  489. package/dist/testing/conformance.d.ts +23 -0
  490. package/dist/testing/conformance.js +37 -0
  491. package/dist/testing/conformance.js.map +1 -0
  492. package/dist/testing/faults.d.ts +258 -0
  493. package/dist/testing/faults.js +111 -0
  494. package/dist/testing/faults.js.map +1 -0
  495. package/dist/testing/memory-list.js +79 -0
  496. package/dist/testing/memory-list.js.map +1 -0
  497. package/dist/testing/memory-state.d.ts +18 -0
  498. package/dist/testing/memory-state.js +57 -0
  499. package/dist/testing/memory-state.js.map +1 -0
  500. package/dist/testing/memory-upload.js +123 -0
  501. package/dist/testing/memory-upload.js.map +1 -0
  502. package/dist/testing/memory.d.ts +23 -0
  503. package/dist/testing/memory.js +121 -0
  504. package/dist/testing/memory.js.map +1 -0
  505. package/dist/testing.d.ts +6 -0
  506. package/dist/testing.js +6 -0
  507. package/dist/tigris/events.d.ts +42 -0
  508. package/dist/tigris/events.js +42 -0
  509. package/dist/tigris/events.js.map +1 -0
  510. package/dist/tigris/native.d.ts +438 -0
  511. package/dist/tigris/native.js +166 -0
  512. package/dist/tigris/native.js.map +1 -0
  513. package/dist/tigris.d.ts +15 -0
  514. package/dist/tigris.js +15 -0
  515. package/dist/tigris.js.map +1 -0
  516. package/dist/transfers/budget.js +50 -0
  517. package/dist/transfers/budget.js.map +1 -0
  518. package/dist/transfers/copy.js +250 -0
  519. package/dist/transfers/copy.js.map +1 -0
  520. package/dist/transfers/dependencies.d.ts +10 -0
  521. package/dist/transfers/dependencies.js +11 -0
  522. package/dist/transfers/dependencies.js.map +1 -0
  523. package/dist/transfers/download.js +132 -0
  524. package/dist/transfers/download.js.map +1 -0
  525. package/dist/transfers/managed-runtime.d.ts +34 -0
  526. package/dist/transfers/managed-runtime.js +30 -0
  527. package/dist/transfers/managed-runtime.js.map +1 -0
  528. package/dist/transfers/models.d.ts +160 -0
  529. package/dist/transfers/native-upload.js +195 -0
  530. package/dist/transfers/native-upload.js.map +1 -0
  531. package/dist/transfers/part-receipts.js +32 -0
  532. package/dist/transfers/part-receipts.js.map +1 -0
  533. package/dist/transfers/planner.d.ts +19 -0
  534. package/dist/transfers/planner.js +153 -0
  535. package/dist/transfers/planner.js.map +1 -0
  536. package/dist/transfers/reader.js +81 -0
  537. package/dist/transfers/reader.js.map +1 -0
  538. package/dist/transfers/runtime.d.ts +19 -0
  539. package/dist/transfers/runtime.js +132 -0
  540. package/dist/transfers/runtime.js.map +1 -0
  541. package/dist/transfers/sources.d.ts +22 -0
  542. package/dist/transfers/sources.js +83 -0
  543. package/dist/transfers/sources.js.map +1 -0
  544. package/dist/transfers/upload.js +235 -0
  545. package/dist/transfers/upload.js.map +1 -0
  546. package/dist/transfers.d.ts +31 -0
  547. package/dist/transfers.js +82 -0
  548. package/dist/transfers.js.map +1 -0
  549. package/dist/uploads/driver.d.ts +22 -0
  550. package/dist/uploads/driver.js +18 -0
  551. package/dist/uploads/driver.js.map +1 -0
  552. package/dist/uploads/policy.d.ts +39 -0
  553. package/dist/uploads/schema.d.ts +278 -0
  554. package/dist/uploads/schema.js +167 -0
  555. package/dist/uploads/schema.js.map +1 -0
  556. package/dist/uploads/signed-driver.d.ts +8 -0
  557. package/dist/uploads/signed-driver.js +36 -0
  558. package/dist/uploads/signed-driver.js.map +1 -0
  559. package/dist/uploads/store.d.ts +26 -0
  560. package/dist/uploads/store.js +51 -0
  561. package/dist/uploads/store.js.map +1 -0
  562. package/dist/uploads/verification.js +86 -0
  563. package/dist/uploads/verification.js.map +1 -0
  564. package/dist/uploads.d.ts +518 -0
  565. package/dist/uploads.js +330 -0
  566. package/dist/uploads.js.map +1 -0
  567. package/dist/vercel/authorized-uploads.d.ts +7 -0
  568. package/dist/vercel/authorized-uploads.js +15 -0
  569. package/dist/vercel/authorized-uploads.js.map +1 -0
  570. package/dist/vercel/client.d.ts +16 -0
  571. package/dist/vercel/client.js +28 -0
  572. package/dist/vercel/client.js.map +1 -0
  573. package/dist/vercel/signing.d.ts +19 -0
  574. package/dist/vercel/signing.js +120 -0
  575. package/dist/vercel/signing.js.map +1 -0
  576. package/dist/vercel/uploads.d.ts +36 -0
  577. package/dist/vercel/uploads.js +161 -0
  578. package/dist/vercel/uploads.js.map +1 -0
  579. package/dist/vercel.d.ts +86 -0
  580. package/dist/vercel.js +46 -0
  581. package/dist/vercel.js.map +1 -0
  582. package/dist/wasabi/admin.d.ts +112 -0
  583. package/dist/wasabi/admin.js +19 -0
  584. package/dist/wasabi/admin.js.map +1 -0
  585. package/dist/wasabi/native.d.ts +200 -0
  586. package/dist/wasabi/native.js +132 -0
  587. package/dist/wasabi/native.js.map +1 -0
  588. package/dist/wasabi.d.ts +15 -0
  589. package/dist/wasabi.js +15 -0
  590. package/dist/wasabi.js.map +1 -0
  591. package/dist/workflows/content/collection.js +122 -0
  592. package/dist/workflows/content/collection.js.map +1 -0
  593. package/dist/workflows/content/references.js +113 -0
  594. package/dist/workflows/content/references.js.map +1 -0
  595. package/dist/workflows/content/schema.d.ts +58 -0
  596. package/dist/workflows/content/schema.js +64 -0
  597. package/dist/workflows/content/schema.js.map +1 -0
  598. package/dist/workflows/endpoint.js +16 -0
  599. package/dist/workflows/endpoint.js.map +1 -0
  600. package/dist/workflows/migrations/schema.d.ts +149 -0
  601. package/dist/workflows/migrations/schema.js +58 -0
  602. package/dist/workflows/migrations/schema.js.map +1 -0
  603. package/dist/workflows/mirror/operations.js +175 -0
  604. package/dist/workflows/mirror/operations.js.map +1 -0
  605. package/dist/workflows/mirror/schema.d.ts +68 -0
  606. package/dist/workflows/mirror/schema.js +57 -0
  607. package/dist/workflows/mirror/schema.js.map +1 -0
  608. package/dist/workflows/mirror/view.js +103 -0
  609. package/dist/workflows/mirror/view.js.map +1 -0
  610. package/dist/workflows/objects.js +54 -0
  611. package/dist/workflows/objects.js.map +1 -0
  612. package/dist/workflows/store.d.ts +13 -0
  613. package/dist/workflows/store.js +58 -0
  614. package/dist/workflows/store.js.map +1 -0
  615. package/package.json +513 -3
@@ -0,0 +1,161 @@
1
+ import { StorageError } from "../core/errors.js";
2
+ import { MetadataService, StorageMetadata, StorageVersions, VersionsService } from "../lifecycle.js";
3
+ import "../index.js";
4
+ import { GcsStorage, GcsStorageService } from "../gcs.js";
5
+ import { Context, Effect, Layer } from "effect";
6
+ declare const GcsVersions_base: Context.ServiceClass<GcsVersions, "@effect-kit/storage/gcs/GcsVersions", VersionsService>;
7
+ export declare class GcsVersions extends GcsVersions_base {
8
+ static make(storage: GcsStorageService): VersionsService;
9
+ static readonly layer: Layer.Layer<GcsVersions | StorageVersions, never, GcsStorage>;
10
+ }
11
+ declare const GcsMetadata_base: Context.ServiceClass<GcsMetadata, "@effect-kit/storage/gcs/GcsMetadata", MetadataService>;
12
+ export declare class GcsMetadata extends GcsMetadata_base {
13
+ static make(storage: GcsStorageService): MetadataService;
14
+ static readonly layer: Layer.Layer<GcsMetadata | StorageMetadata, never, GcsStorage>;
15
+ }
16
+ declare const recovery: (storage: GcsStorageService) => {
17
+ restoreDeleted: (input: {
18
+ readonly ref: {
19
+ readonly storeId: string;
20
+ readonly key: string;
21
+ readonly version: {
22
+ readonly _tag: "S3Version";
23
+ readonly id: string;
24
+ } | {
25
+ readonly _tag: "GcsGeneration";
26
+ readonly id: string;
27
+ readonly metageneration?: string | undefined;
28
+ } | {
29
+ readonly _tag: "AzureVersion";
30
+ readonly id: string;
31
+ } | {
32
+ readonly _tag: "AzureSnapshot";
33
+ readonly id: string;
34
+ } | {
35
+ readonly _tag: "OpaqueVersion";
36
+ readonly provider: string;
37
+ readonly id: string;
38
+ };
39
+ };
40
+ readonly restoreToken?: string | undefined;
41
+ readonly copySourceAcl?: boolean | undefined;
42
+ }) => Effect.Effect<{
43
+ readonly contentType?: string | undefined;
44
+ readonly contentEncoding?: string | undefined;
45
+ readonly contentLanguage?: string | undefined;
46
+ readonly contentDisposition?: string | undefined;
47
+ readonly cacheControl?: string | undefined;
48
+ readonly customMetadata?: {
49
+ readonly [x: string]: string;
50
+ } | undefined;
51
+ readonly ref: {
52
+ readonly storeId: string;
53
+ readonly key: string;
54
+ readonly version?: {
55
+ readonly _tag: "S3Version";
56
+ readonly id: string;
57
+ } | {
58
+ readonly _tag: "GcsGeneration";
59
+ readonly id: string;
60
+ readonly metageneration?: string | undefined;
61
+ } | {
62
+ readonly _tag: "AzureVersion";
63
+ readonly id: string;
64
+ } | {
65
+ readonly _tag: "AzureSnapshot";
66
+ readonly id: string;
67
+ } | {
68
+ readonly _tag: "OpaqueVersion";
69
+ readonly provider: string;
70
+ readonly id: string;
71
+ } | undefined;
72
+ };
73
+ readonly size?: number | undefined;
74
+ readonly etag?: string | undefined;
75
+ readonly lastModified?: import("effect/DateTime").Utc | undefined;
76
+ readonly checksums?: readonly {
77
+ readonly algorithm: string;
78
+ readonly encoding: "base64" | "hex";
79
+ readonly scope: "composite" | "full-object";
80
+ readonly value: string;
81
+ readonly partCount?: number | undefined;
82
+ }[] | undefined;
83
+ readonly storageClass?: string | undefined;
84
+ }, StorageError, never>;
85
+ };
86
+ declare const GcsRecovery_base: Context.ServiceClass<GcsRecovery, "@effect-kit/storage/gcs/GcsRecovery", {
87
+ restoreDeleted: (input: {
88
+ readonly ref: {
89
+ readonly storeId: string;
90
+ readonly key: string;
91
+ readonly version: {
92
+ readonly _tag: "S3Version";
93
+ readonly id: string;
94
+ } | {
95
+ readonly _tag: "GcsGeneration";
96
+ readonly id: string;
97
+ readonly metageneration?: string | undefined;
98
+ } | {
99
+ readonly _tag: "AzureVersion";
100
+ readonly id: string;
101
+ } | {
102
+ readonly _tag: "AzureSnapshot";
103
+ readonly id: string;
104
+ } | {
105
+ readonly _tag: "OpaqueVersion";
106
+ readonly provider: string;
107
+ readonly id: string;
108
+ };
109
+ };
110
+ readonly restoreToken?: string | undefined;
111
+ readonly copySourceAcl?: boolean | undefined;
112
+ }) => Effect.Effect<{
113
+ readonly contentType?: string | undefined;
114
+ readonly contentEncoding?: string | undefined;
115
+ readonly contentLanguage?: string | undefined;
116
+ readonly contentDisposition?: string | undefined;
117
+ readonly cacheControl?: string | undefined;
118
+ readonly customMetadata?: {
119
+ readonly [x: string]: string;
120
+ } | undefined;
121
+ readonly ref: {
122
+ readonly storeId: string;
123
+ readonly key: string;
124
+ readonly version?: {
125
+ readonly _tag: "S3Version";
126
+ readonly id: string;
127
+ } | {
128
+ readonly _tag: "GcsGeneration";
129
+ readonly id: string;
130
+ readonly metageneration?: string | undefined;
131
+ } | {
132
+ readonly _tag: "AzureVersion";
133
+ readonly id: string;
134
+ } | {
135
+ readonly _tag: "AzureSnapshot";
136
+ readonly id: string;
137
+ } | {
138
+ readonly _tag: "OpaqueVersion";
139
+ readonly provider: string;
140
+ readonly id: string;
141
+ } | undefined;
142
+ };
143
+ readonly size?: number | undefined;
144
+ readonly etag?: string | undefined;
145
+ readonly lastModified?: import("effect/DateTime").Utc | undefined;
146
+ readonly checksums?: readonly {
147
+ readonly algorithm: string;
148
+ readonly encoding: "base64" | "hex";
149
+ readonly scope: "composite" | "full-object";
150
+ readonly value: string;
151
+ readonly partCount?: number | undefined;
152
+ }[] | undefined;
153
+ readonly storageClass?: string | undefined;
154
+ }, StorageError, never>;
155
+ }>;
156
+ export declare class GcsRecovery extends GcsRecovery_base {
157
+ static readonly make: typeof recovery;
158
+ static readonly layer: Layer.Layer<GcsRecovery, never, GcsStorage>;
159
+ }
160
+ export {};
161
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1,174 @@
1
+ import { storageError } from "../core/errors.js";
2
+ import { decodeRequest } from "../internal/request-validation.js";
3
+ import { decodeCursor, encodeCursor } from "../internal/listing-cursor.js";
4
+ import { decodeJson, jsonRequest } from "../providers/gcs/transport.js";
5
+ import { metadata, nativeHeaders, objectPath, target } from "../providers/gcs/mapping.js";
6
+ import { GcsStorage } from "../gcs.js";
7
+ import { MetadataMerge, MetadataReplace, RestoreVersion, StorageMetadata, StorageVersions, VersionQuery, VersionRef } from "../lifecycle.js";
8
+ import { mergeHeaders, replaceHeaders } from "../lifecycle/metadata.js";
9
+ import { Context, Effect, Layer, Redacted, Schema } from "effect";
10
+
11
+ // src/providers/gcs/lifecycle.ts
12
+ var GcsVersions = class GcsVersions extends Context.Service()("@effect-kit/storage/gcs/GcsVersions") {
13
+ static make(storage) {
14
+ return StorageVersions.make({
15
+ listPage: Effect.fnUntraced(function* (input = {}) {
16
+ const value = yield* decodeRequest(VersionQuery, input, "listVersions", "gcs");
17
+ const identity = JSON.stringify([
18
+ "versions",
19
+ value.prefix,
20
+ value.limit,
21
+ value.deleted
22
+ ]);
23
+ const token = yield* decodeCursor("gcs", value.cursor, storage.storeId, identity, "listVersions");
24
+ const response = yield* jsonRequest(storage, "listVersions", false, {
25
+ uri: `${storage.config.apiEndpoint}/storage/v1/b/${encodeURIComponent(storage.config.bucket)}/o`,
26
+ qs: {
27
+ prefix: value.prefix,
28
+ maxResults: value.limit ?? 1e3,
29
+ pageToken: token,
30
+ ...value.deleted ? { softDeleted: "true" } : { versions: "true" }
31
+ },
32
+ json: true
33
+ });
34
+ const page = yield* decodeJson(Schema.Struct({
35
+ items: Schema.optional(Schema.Array(Schema.Unknown)),
36
+ nextPageToken: Schema.optional(Schema.String)
37
+ }), response.body, "listVersions");
38
+ return {
39
+ entries: yield* Effect.forEach(page.items ?? [], (raw) => Effect.gen(function* () {
40
+ const observed = yield* metadata(storage, raw, "listVersions");
41
+ const recovery = yield* decodeJson(Schema.Struct({ restoreToken: Schema.optional(Schema.String) }), raw, "listVersions");
42
+ return {
43
+ _tag: "Version",
44
+ metadata: observed,
45
+ deleted: value.deleted ?? false,
46
+ ...recovery.restoreToken ? { recoveryToken: Redacted.make(recovery.restoreToken) } : {}
47
+ };
48
+ })),
49
+ ...page.nextPageToken ? { cursor: encodeCursor(storage.storeId, identity, page.nextPageToken) } : {}
50
+ };
51
+ }),
52
+ deleteVersion: Effect.fnUntraced(function* (input) {
53
+ const { ref } = yield* decodeRequest(Schema.Struct({ ref: VersionRef }), input, "deleteVersion", "gcs", true);
54
+ const address = yield* target(storage, { ref }, "delete");
55
+ yield* jsonRequest(storage, "deleteVersion", true, {
56
+ uri: address.uri,
57
+ method: "DELETE",
58
+ qs: {
59
+ ...address.qs,
60
+ ifGenerationMatch: ref.version.id
61
+ },
62
+ json: true
63
+ });
64
+ }),
65
+ removeDeleteMarker: () => Effect.fail(storageError("removeDeleteMarker", "gcs", {
66
+ _tag: "Unsupported",
67
+ capability: "s3-delete-markers"
68
+ }, "not-started")),
69
+ restore: Effect.fnUntraced(function* (input) {
70
+ const value = yield* decodeRequest(RestoreVersion, input, "restoreVersion", "gcs", true);
71
+ yield* target(storage, { ref: value.source }, "restoreVersion");
72
+ if (value.condition._tag !== "CreateOnly") return yield* storageError("restoreVersion", "gcs", {
73
+ _tag: "Unsupported",
74
+ capability: "etag-destination-generation-condition"
75
+ }, "not-started");
76
+ let token;
77
+ for (let attempt = 0; attempt < 1e3; attempt++) {
78
+ const result = yield* storage.rewrite({
79
+ source: value.source,
80
+ destinationKey: value.destinationKey,
81
+ preconditions: { ifGenerationMatch: "0" },
82
+ ...token ? { token } : {}
83
+ });
84
+ if (result._tag === "Completed") return result.metadata;
85
+ token = result.token;
86
+ }
87
+ return yield* storageError("restoreVersion", "gcs", {
88
+ _tag: "TransportFailure",
89
+ code: "RewriteBudgetExceeded"
90
+ }, "unknown");
91
+ })
92
+ });
93
+ }
94
+ static layer = Layer.effectContext(Effect.map(GcsStorage, (storage) => {
95
+ const service = GcsVersions.make(storage);
96
+ return Context.make(GcsVersions, service).pipe(Context.add(StorageVersions, service));
97
+ }));
98
+ };
99
+ var GcsMetadata = class GcsMetadata extends Context.Service()("@effect-kit/storage/gcs/GcsMetadata") {
100
+ static make(storage) {
101
+ const update = Effect.fnUntraced(function* (input, patch) {
102
+ const address = yield* target(storage, { ref: input.ref }, "updateMetadata");
103
+ if (input.condition) return yield* storageError("updateMetadata", "gcs", {
104
+ _tag: "Unsupported",
105
+ capability: "etag-metadata-write-condition"
106
+ }, "not-started");
107
+ if (input.ref.version?._tag !== "GcsGeneration" || !input.ref.version.metageneration) return yield* storageError("updateMetadata", "gcs", {
108
+ _tag: "InvalidInput",
109
+ field: "generation-and-metageneration"
110
+ }, "not-started");
111
+ const current = yield* storage.head({ ref: input.ref });
112
+ const headers = patch ? mergeHeaders(current, patch) : replaceHeaders(current, input.headers);
113
+ const body = nativeHeaders(headers);
114
+ const response = yield* jsonRequest(storage, "updateMetadata", true, {
115
+ uri: address.uri,
116
+ method: "PATCH",
117
+ qs: {
118
+ ...address.qs,
119
+ ifGenerationMatch: input.ref.version.id,
120
+ ifMetagenerationMatch: input.ref.version.metageneration
121
+ },
122
+ json: {
123
+ contentType: body.contentType ?? null,
124
+ contentEncoding: body.contentEncoding ?? null,
125
+ contentLanguage: body.contentLanguage ?? null,
126
+ contentDisposition: body.contentDisposition ?? null,
127
+ cacheControl: body.cacheControl ?? null,
128
+ metadata: body.metadata ?? null
129
+ }
130
+ });
131
+ return yield* metadata(storage, response.body, "updateMetadata");
132
+ });
133
+ return {
134
+ replace: (input) => decodeRequest(MetadataReplace, input, "updateMetadata", "gcs", true).pipe(Effect.flatMap((value) => update(value))),
135
+ merge: (input) => decodeRequest(MetadataMerge, input, "updateMetadata", "gcs", true).pipe(Effect.flatMap((value) => update({
136
+ ref: value.ref,
137
+ headers: {},
138
+ condition: value.condition
139
+ }, value.patch)))
140
+ };
141
+ }
142
+ static layer = Layer.effectContext(Effect.map(GcsStorage, (storage) => {
143
+ const service = GcsMetadata.make(storage);
144
+ return Context.make(GcsMetadata, service).pipe(Context.add(StorageMetadata, service));
145
+ }));
146
+ };
147
+ const RecoveryRequest = Schema.Struct({
148
+ ref: VersionRef,
149
+ restoreToken: Schema.optional(Schema.NonEmptyString),
150
+ copySourceAcl: Schema.optional(Schema.Boolean)
151
+ });
152
+ const recovery = (storage) => ({ restoreDeleted: Effect.fnUntraced(function* (input) {
153
+ const value = yield* decodeRequest(RecoveryRequest, input, "restoreDeleted", "gcs", true);
154
+ const address = yield* target(storage, { ref: value.ref }, "restoreDeleted");
155
+ const response = yield* jsonRequest(storage, "restoreDeleted", true, {
156
+ uri: `${storage.config.apiEndpoint}${objectPath(storage, value.ref.key)}/restore`,
157
+ method: "POST",
158
+ qs: {
159
+ ...address.qs,
160
+ restoreToken: value.restoreToken,
161
+ copySourceAcl: value.copySourceAcl === void 0 ? void 0 : String(value.copySourceAcl),
162
+ ifGenerationMatch: "0"
163
+ },
164
+ json: {}
165
+ });
166
+ return yield* metadata(storage, response.body, "restoreDeleted");
167
+ }) });
168
+ var GcsRecovery = class GcsRecovery extends Context.Service()("@effect-kit/storage/gcs/GcsRecovery") {
169
+ static make = recovery;
170
+ static layer = Layer.effect(GcsRecovery, Effect.map(GcsStorage, recovery));
171
+ };
172
+
173
+ export { GcsMetadata, GcsRecovery, GcsVersions };
174
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","names":[],"sources":["../../src/providers/gcs/lifecycle.ts"],"sourcesContent":["import { Context, Effect, Layer, Redacted, Schema } from \"effect\";\n\nimport { storageError } from \"../../core/errors.js\";\nimport { decodeCursor, encodeCursor } from \"../../internal/listing-cursor.js\";\nimport { decodeRequest } from \"../../internal/request-validation.js\";\nimport {\n MetadataMerge,\n MetadataReplace,\n RestoreVersion,\n StorageMetadata,\n StorageVersions,\n VersionQuery,\n VersionRef,\n} from \"../../lifecycle/index.js\";\nimport type { MetadataService, VersionEntry, VersionsService } from \"../../lifecycle/index.js\";\nimport { mergeHeaders, replaceHeaders } from \"../../lifecycle/metadata.js\";\nimport { GcsStorage } from \"./index.js\";\nimport type { GcsStorageService } from \"./index.js\";\nimport { metadata, nativeHeaders, objectPath, target } from \"./mapping.js\";\nimport { decodeJson, jsonRequest } from \"./transport.js\";\n\nexport class GcsVersions extends Context.Service<GcsVersions, VersionsService>()(\n \"@effect-kit/storage/gcs/GcsVersions\",\n) {\n static make(storage: GcsStorageService): VersionsService {\n return StorageVersions.make({\n listPage: Effect.fnUntraced(function* (input = {}) {\n const value = yield* decodeRequest(VersionQuery, input, \"listVersions\", \"gcs\");\n const identity = JSON.stringify([\"versions\", value.prefix, value.limit, value.deleted]);\n const token = yield* decodeCursor(\n \"gcs\",\n value.cursor,\n storage.storeId,\n identity,\n \"listVersions\",\n );\n const response = yield* jsonRequest(storage, \"listVersions\", false, {\n uri: `${storage.config.apiEndpoint}/storage/v1/b/${encodeURIComponent(storage.config.bucket)}/o`,\n qs: {\n prefix: value.prefix,\n maxResults: value.limit ?? 1000,\n pageToken: token,\n ...(value.deleted ? { softDeleted: \"true\" } : { versions: \"true\" }),\n },\n json: true,\n });\n const page = yield* decodeJson(\n Schema.Struct({\n items: Schema.optional(Schema.Array(Schema.Unknown)),\n nextPageToken: Schema.optional(Schema.String),\n }),\n response.body,\n \"listVersions\",\n );\n const entries: VersionEntry[] = yield* Effect.forEach(page.items ?? [], (raw) =>\n Effect.gen(function* () {\n const observed = yield* metadata(storage, raw, \"listVersions\");\n const recovery = yield* decodeJson(\n Schema.Struct({ restoreToken: Schema.optional(Schema.String) }),\n raw,\n \"listVersions\",\n );\n return {\n _tag: \"Version\" as const,\n metadata: observed,\n deleted: value.deleted ?? false,\n ...(recovery.restoreToken\n ? { recoveryToken: Redacted.make(recovery.restoreToken) }\n : {}),\n };\n }),\n );\n return {\n entries,\n ...(page.nextPageToken\n ? { cursor: encodeCursor(storage.storeId, identity, page.nextPageToken) }\n : {}),\n };\n }),\n deleteVersion: Effect.fnUntraced(function* (input) {\n const { ref } = yield* decodeRequest(\n Schema.Struct({ ref: VersionRef }),\n input,\n \"deleteVersion\",\n \"gcs\",\n true,\n );\n const address = yield* target(storage, { ref }, \"delete\");\n yield* jsonRequest(storage, \"deleteVersion\", true, {\n uri: address.uri,\n method: \"DELETE\",\n qs: { ...address.qs, ifGenerationMatch: ref.version.id },\n json: true,\n });\n }),\n removeDeleteMarker: () =>\n Effect.fail(\n storageError(\n \"removeDeleteMarker\",\n \"gcs\",\n { _tag: \"Unsupported\", capability: \"s3-delete-markers\" },\n \"not-started\",\n ),\n ),\n restore: Effect.fnUntraced(function* (input) {\n const value = yield* decodeRequest(RestoreVersion, input, \"restoreVersion\", \"gcs\", true);\n yield* target(storage, { ref: value.source }, \"restoreVersion\");\n if (value.condition._tag !== \"CreateOnly\")\n return yield* storageError(\n \"restoreVersion\",\n \"gcs\",\n { _tag: \"Unsupported\", capability: \"etag-destination-generation-condition\" },\n \"not-started\",\n );\n let token: string | undefined;\n for (let attempt = 0; attempt < 1000; attempt++) {\n const result = yield* storage.rewrite({\n source: value.source,\n destinationKey: value.destinationKey,\n preconditions: { ifGenerationMatch: \"0\" },\n ...(token ? { token } : {}),\n });\n if (result._tag === \"Completed\") return result.metadata;\n token = result.token;\n }\n return yield* storageError(\n \"restoreVersion\",\n \"gcs\",\n { _tag: \"TransportFailure\", code: \"RewriteBudgetExceeded\" },\n \"unknown\",\n );\n }),\n });\n }\n static readonly layer = Layer.effectContext(\n Effect.map(GcsStorage, (storage) => {\n const service = GcsVersions.make(storage);\n return Context.make(GcsVersions, service).pipe(Context.add(StorageVersions, service));\n }),\n );\n}\nexport class GcsMetadata extends Context.Service<GcsMetadata, MetadataService>()(\n \"@effect-kit/storage/gcs/GcsMetadata\",\n) {\n static make(storage: GcsStorageService): MetadataService {\n const update = Effect.fnUntraced(function* (\n input: typeof MetadataReplace.Type,\n patch?: (typeof MetadataMerge.Type)[\"patch\"],\n ) {\n const address = yield* target(storage, { ref: input.ref }, \"updateMetadata\");\n if (input.condition)\n return yield* storageError(\n \"updateMetadata\",\n \"gcs\",\n { _tag: \"Unsupported\", capability: \"etag-metadata-write-condition\" },\n \"not-started\",\n );\n if (input.ref.version?._tag !== \"GcsGeneration\" || !input.ref.version.metageneration)\n return yield* storageError(\n \"updateMetadata\",\n \"gcs\",\n { _tag: \"InvalidInput\", field: \"generation-and-metageneration\" },\n \"not-started\",\n );\n const current = yield* storage.head({ ref: input.ref });\n const headers = patch ? mergeHeaders(current, patch) : replaceHeaders(current, input.headers);\n const body = nativeHeaders(headers);\n const response = yield* jsonRequest(storage, \"updateMetadata\", true, {\n uri: address.uri,\n method: \"PATCH\",\n qs: {\n ...address.qs,\n ifGenerationMatch: input.ref.version.id,\n ifMetagenerationMatch: input.ref.version.metageneration,\n },\n json: {\n contentType: body.contentType ?? null,\n contentEncoding: body.contentEncoding ?? null,\n contentLanguage: body.contentLanguage ?? null,\n contentDisposition: body.contentDisposition ?? null,\n cacheControl: body.cacheControl ?? null,\n metadata: body.metadata ?? null,\n },\n });\n return yield* metadata(storage, response.body, \"updateMetadata\");\n });\n return {\n replace: (input) =>\n decodeRequest(MetadataReplace, input, \"updateMetadata\", \"gcs\", true).pipe(\n Effect.flatMap((value) => update(value)),\n ),\n merge: (input) =>\n decodeRequest(MetadataMerge, input, \"updateMetadata\", \"gcs\", true).pipe(\n Effect.flatMap((value) =>\n update({ ref: value.ref, headers: {}, condition: value.condition }, value.patch),\n ),\n ),\n };\n }\n static readonly layer = Layer.effectContext(\n Effect.map(GcsStorage, (storage) => {\n const service = GcsMetadata.make(storage);\n return Context.make(GcsMetadata, service).pipe(Context.add(StorageMetadata, service));\n }),\n );\n}\nconst RecoveryRequest = Schema.Struct({\n ref: VersionRef,\n restoreToken: Schema.optional(Schema.NonEmptyString),\n copySourceAcl: Schema.optional(Schema.Boolean),\n});\nconst recovery = (storage: GcsStorageService) => ({\n restoreDeleted: Effect.fnUntraced(function* (input: typeof RecoveryRequest.Type) {\n const value = yield* decodeRequest(RecoveryRequest, input, \"restoreDeleted\", \"gcs\", true);\n const address = yield* target(storage, { ref: value.ref }, \"restoreDeleted\");\n const response = yield* jsonRequest(storage, \"restoreDeleted\", true, {\n uri: `${storage.config.apiEndpoint}${objectPath(storage, value.ref.key)}/restore`,\n method: \"POST\",\n qs: {\n ...address.qs,\n restoreToken: value.restoreToken,\n copySourceAcl: value.copySourceAcl === undefined ? undefined : String(value.copySourceAcl),\n ifGenerationMatch: \"0\",\n },\n json: {},\n });\n return yield* metadata(storage, response.body, \"restoreDeleted\");\n }),\n});\nexport class GcsRecovery extends Context.Service<GcsRecovery, ReturnType<typeof recovery>>()(\n \"@effect-kit/storage/gcs/GcsRecovery\",\n) {\n static readonly make = recovery;\n static readonly layer = Layer.effect(GcsRecovery, Effect.map(GcsStorage, recovery));\n}\n"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { ObjectRef } from "../core/object.js";
2
+ import { StorageError } from "../core/errors.js";
3
+ import { GrantConstraint } from "../core/capabilities.js";
4
+ import { GcsStorage } from "../gcs.js";
5
+ import { Context, DateTime, Effect, Layer, Redacted, Schema } from "effect";
6
+ declare const PostRequest: Schema.Struct<{
7
+ readonly key: Schema.NonEmptyString;
8
+ readonly expiresInSeconds: Schema.Int;
9
+ readonly minBytes: Schema.optional<Schema.Natural>;
10
+ readonly maxBytes: Schema.Natural;
11
+ readonly contentType: Schema.optional<Schema.String>;
12
+ }>;
13
+ export type GcsPostRequest = typeof PostRequest.Type;
14
+ export interface GcsPostGrant {
15
+ readonly method: "POST";
16
+ readonly ref: ObjectRef;
17
+ readonly url: Redacted.Redacted<string>;
18
+ readonly fields: Redacted.Redacted<Readonly<Record<string, string>>>;
19
+ readonly expiresAt: DateTime.Utc;
20
+ readonly constraints: ReadonlyArray<GrantConstraint>;
21
+ }
22
+ declare const GcsPost_base: Context.ServiceClass<GcsPost, "@effect-kit/storage/gcs/GcsPost", {
23
+ readonly create: (input: GcsPostRequest) => Effect.Effect<GcsPostGrant, StorageError>;
24
+ }>;
25
+ export declare class GcsPost extends GcsPost_base {
26
+ static layer(options?: {
27
+ readonly authorityExpiresAt?: DateTime.Utc;
28
+ }): Layer.Layer<GcsPost, never, GcsStorage>;
29
+ }
30
+ export {};
31
+ //# sourceMappingURL=post.d.ts.map
@@ -0,0 +1,70 @@
1
+ import { HeaderValue } from "../core/object.js";
2
+ import { storageError } from "../core/errors.js";
3
+ import { GcsKey } from "../providers/gcs/validation.js";
4
+ import { GcsStorage } from "../gcs.js";
5
+ import { Clock, Context, DateTime, Effect, Layer, Redacted, Schema } from "effect";
6
+
7
+ // src/providers/gcs/post.ts
8
+ const PostRequest = Schema.Struct({
9
+ key: GcsKey,
10
+ expiresInSeconds: Schema.Int.check(Schema.isBetween({
11
+ minimum: 1,
12
+ maximum: 604800
13
+ })),
14
+ minBytes: Schema.optional(Schema.Natural),
15
+ maxBytes: Schema.Natural,
16
+ contentType: Schema.optional(HeaderValue)
17
+ });
18
+ var GcsPost = class GcsPost extends Context.Service()("@effect-kit/storage/gcs/GcsPost") {
19
+ static layer(options = {}) {
20
+ return Layer.effect(GcsPost, Effect.gen(function* () {
21
+ const storage = yield* GcsStorage;
22
+ return GcsPost.of({ create: Effect.fnUntraced(function* (input) {
23
+ const value = yield* Schema.decodeUnknownEffect(PostRequest, { onExcessProperty: "error" })(input).pipe(Effect.mapError(() => storageError("post", "gcs", {
24
+ _tag: "InvalidInput",
25
+ field: "policy"
26
+ }, "not-started")));
27
+ const now = yield* Clock.currentTimeMillis;
28
+ const expiry = Math.floor(Math.min(now + value.expiresInSeconds * 1e3, options.authorityExpiresAt ? DateTime.toEpochMillis(options.authorityExpiresAt) : Infinity) / 1e3) * 1e3;
29
+ if ((value.minBytes ?? 0) > value.maxBytes || value.key.includes(`\${filename}`) || expiry <= now || storage.config.apiEndpoint !== "https://storage.googleapis.com" || storage.config.kmsKeyName || storage.config.customerKey) return yield* storageError("post", "gcs", {
30
+ _tag: "Unsupported",
31
+ capability: "policy-or-authority"
32
+ }, "not-started");
33
+ const [grant] = yield* Effect.tryPromise({
34
+ try: () => storage.client.bucket(storage.config.bucket).file(value.key).generateSignedPostPolicyV4({
35
+ expires: expiry,
36
+ fields: value.contentType ? { "Content-Type": value.contentType } : {},
37
+ conditions: [[
38
+ "content-length-range",
39
+ value.minBytes ?? 0,
40
+ value.maxBytes
41
+ ]]
42
+ }),
43
+ catch: () => storageError("post", "gcs", { _tag: "AccessDenied" }, "not-started")
44
+ });
45
+ return {
46
+ method: "POST",
47
+ ref: {
48
+ storeId: storage.storeId,
49
+ key: value.key
50
+ },
51
+ url: Redacted.make(grant.url),
52
+ fields: Redacted.make(grant.fields),
53
+ expiresAt: DateTime.makeUnsafe(expiry),
54
+ constraints: [{
55
+ kind: "minimum-bytes",
56
+ enforcement: "provider",
57
+ value: value.minBytes ?? 0
58
+ }, {
59
+ kind: "maximum-bytes",
60
+ enforcement: "provider",
61
+ value: value.maxBytes
62
+ }]
63
+ };
64
+ }) });
65
+ }));
66
+ }
67
+ };
68
+
69
+ export { GcsPost };
70
+ //# sourceMappingURL=post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.js","names":[],"sources":["../../src/providers/gcs/post.ts"],"sourcesContent":["import { Clock, Context, DateTime, Effect, Layer, Redacted, Schema } from \"effect\";\n\nimport type { GrantConstraint } from \"../../core/capabilities.js\";\nimport { storageError } from \"../../core/errors.js\";\nimport type { StorageError } from \"../../core/errors.js\";\nimport { HeaderValue } from \"../../core/object.js\";\nimport type { ObjectRef } from \"../../core/object.js\";\nimport { GcsStorage } from \"./index.js\";\nimport { GcsKey } from \"./validation.js\";\n\nconst PostRequest = Schema.Struct({\n key: GcsKey,\n expiresInSeconds: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 604800 })),\n minBytes: Schema.optional(Schema.Natural),\n maxBytes: Schema.Natural,\n contentType: Schema.optional(HeaderValue),\n});\nexport type GcsPostRequest = typeof PostRequest.Type;\nexport interface GcsPostGrant {\n readonly method: \"POST\";\n readonly ref: ObjectRef;\n readonly url: Redacted.Redacted<string>;\n readonly fields: Redacted.Redacted<Readonly<Record<string, string>>>;\n readonly expiresAt: DateTime.Utc;\n readonly constraints: ReadonlyArray<GrantConstraint>;\n}\nexport class GcsPost extends Context.Service<\n GcsPost,\n { readonly create: (input: GcsPostRequest) => Effect.Effect<GcsPostGrant, StorageError> }\n>()(\"@effect-kit/storage/gcs/GcsPost\") {\n static layer(options: { readonly authorityExpiresAt?: DateTime.Utc } = {}) {\n return Layer.effect(\n GcsPost,\n Effect.gen(function* () {\n const storage = yield* GcsStorage;\n return GcsPost.of({\n create: Effect.fnUntraced(function* (input) {\n const value = yield* Schema.decodeUnknownEffect(PostRequest, {\n onExcessProperty: \"error\",\n })(input).pipe(\n Effect.mapError(() =>\n storageError(\n \"post\",\n \"gcs\",\n { _tag: \"InvalidInput\", field: \"policy\" },\n \"not-started\",\n ),\n ),\n );\n const now = yield* Clock.currentTimeMillis;\n const expiry =\n Math.floor(\n Math.min(\n now + value.expiresInSeconds * 1000,\n options.authorityExpiresAt\n ? DateTime.toEpochMillis(options.authorityExpiresAt)\n : Infinity,\n ) / 1000,\n ) * 1000;\n if (\n (value.minBytes ?? 0) > value.maxBytes ||\n value.key.includes(`\\${filename}`) ||\n expiry <= now ||\n storage.config.apiEndpoint !== \"https://storage.googleapis.com\" ||\n storage.config.kmsKeyName ||\n storage.config.customerKey\n )\n return yield* storageError(\n \"post\",\n \"gcs\",\n { _tag: \"Unsupported\", capability: \"policy-or-authority\" },\n \"not-started\",\n );\n const [grant] = yield* Effect.tryPromise({\n try: () =>\n storage.client\n .bucket(storage.config.bucket)\n .file(value.key)\n .generateSignedPostPolicyV4({\n expires: expiry,\n fields: value.contentType ? { \"Content-Type\": value.contentType } : {},\n conditions: [[\"content-length-range\", value.minBytes ?? 0, value.maxBytes]],\n }),\n catch: () => storageError(\"post\", \"gcs\", { _tag: \"AccessDenied\" }, \"not-started\"),\n });\n return {\n method: \"POST\" as const,\n ref: { storeId: storage.storeId, key: value.key },\n url: Redacted.make(grant.url),\n fields: Redacted.make(grant.fields),\n expiresAt: DateTime.makeUnsafe(expiry),\n constraints: [\n {\n kind: \"minimum-bytes\",\n enforcement: \"provider\" as const,\n value: value.minBytes ?? 0,\n },\n { kind: \"maximum-bytes\", enforcement: \"provider\" as const, value: value.maxBytes },\n ],\n };\n }),\n });\n }),\n );\n }\n}\n"],"mappings":";;;;;;;AAUA,MAAM,cAAc,OAAO,OAAO;CAChC,KAAK;CACL,kBAAkB,OAAO,IAAI,MAAM,OAAO,UAAU;EAAE,SAAS;EAAG,SAAS;CAAO,CAAC,CAAC;CACpF,UAAU,OAAO,SAAS,OAAO,OAAO;CACxC,UAAU,OAAO;CACjB,aAAa,OAAO,SAAS,WAAW;AAC1C,CAAC;AAUD,IAAa,UAAb,MAAa,gBAAgB,QAAQ,QAGnC,CAAC,CAAC,iCAAiC,CAAC,CAAC;CACrC,OAAO,MAAM,UAA0D,CAAC,GAAG;EACzE,OAAO,MAAM,OACX,SACA,OAAO,IAAI,aAAa;GACtB,MAAM,UAAU,OAAO;GACvB,OAAO,QAAQ,GAAG,EAChB,QAAQ,OAAO,WAAW,WAAW,OAAO;IAC1C,MAAM,QAAQ,OAAO,OAAO,oBAAoB,aAAa,EAC3D,kBAAkB,QACpB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KACR,OAAO,eACL,aACE,QACA,OACA;KAAE,MAAM;KAAgB,OAAO;IAAS,GACxC,aACF,CACF,CACF;IACA,MAAM,MAAM,OAAO,MAAM;IACzB,MAAM,SACJ,KAAK,MACH,KAAK,IACH,MAAM,MAAM,mBAAmB,KAC/B,QAAQ,qBACJ,SAAS,cAAc,QAAQ,kBAAkB,IACjD,QACN,IAAI,GACN,IAAI;IACN,KACG,MAAM,YAAY,KAAK,MAAM,YAC9B,MAAM,IAAI,SAAS,cAAc,KACjC,UAAU,OACV,QAAQ,OAAO,gBAAgB,oCAC/B,QAAQ,OAAO,cACf,QAAQ,OAAO,aAEf,OAAO,OAAO,aACZ,QACA,OACA;KAAE,MAAM;KAAe,YAAY;IAAsB,GACzD,aACF;IACF,MAAM,CAAC,SAAS,OAAO,OAAO,WAAW;KACvC,WACE,QAAQ,OACL,OAAO,QAAQ,OAAO,MAAM,CAAC,CAC7B,KAAK,MAAM,GAAG,CAAC,CACf,2BAA2B;MAC1B,SAAS;MACT,QAAQ,MAAM,cAAc,EAAE,gBAAgB,MAAM,YAAY,IAAI,CAAC;MACrE,YAAY,CAAC;OAAC;OAAwB,MAAM,YAAY;OAAG,MAAM;MAAQ,CAAC;KAC5E,CAAC;KACL,aAAa,aAAa,QAAQ,OAAO,EAAE,MAAM,eAAe,GAAG,aAAa;IAClF,CAAC;IACD,OAAO;KACL,QAAQ;KACR,KAAK;MAAE,SAAS,QAAQ;MAAS,KAAK,MAAM;KAAI;KAChD,KAAK,SAAS,KAAK,MAAM,GAAG;KAC5B,QAAQ,SAAS,KAAK,MAAM,MAAM;KAClC,WAAW,SAAS,WAAW,MAAM;KACrC,aAAa,CACX;MACE,MAAM;MACN,aAAa;MACb,OAAO,MAAM,YAAY;KAC3B,GACA;MAAE,MAAM;MAAiB,aAAa;MAAqB,OAAO,MAAM;KAAS,CACnF;IACF;GACF,CAAC,EACH,CAAC;EACH,CAAC,CACH;CACF;AACF"}
@@ -0,0 +1,10 @@
1
+ import { StorageSigning } from "../core/capabilities.js";
2
+ import { GcsStorage } from "../gcs.js";
3
+ import { DateTime, Layer } from "effect";
4
+ /** Explicitly selected signing authority; ADC data access alone need not permit signBlob. */
5
+ export declare const GcsSigning: {
6
+ layer(options?: {
7
+ readonly authorityExpiresAt?: DateTime.Utc;
8
+ }): Layer.Layer<StorageSigning, never, GcsStorage>;
9
+ };
10
+ //# sourceMappingURL=signing.d.ts.map
@@ -0,0 +1,61 @@
1
+ import { storageError } from "../core/errors.js";
2
+ import { StorageSigning } from "../core/capabilities.js";
3
+ import { target } from "../providers/gcs/mapping.js";
4
+ import { GcsStorage } from "../gcs.js";
5
+ import { signingRequest } from "../internal/signing-request.js";
6
+ import { Clock, DateTime, Effect, Layer, Redacted } from "effect";
7
+
8
+ // src/providers/gcs/signing.ts
9
+ /** Explicitly selected signing authority; ADC data access alone need not permit signBlob. */
10
+ const GcsSigning = { layer(options = {}) {
11
+ return Layer.effect(StorageSigning, Effect.gen(function* () {
12
+ const storage = yield* GcsStorage;
13
+ return StorageSigning.of({ sign: Effect.fnUntraced(function* (request) {
14
+ yield* signingRequest(request, "gcs");
15
+ if (storage.config.customerKey) return yield* storageError("sign", "gcs", {
16
+ _tag: "Unsupported",
17
+ capability: "customer-key-signing"
18
+ }, "not-started");
19
+ const address = yield* target(storage, { ref: request.ref }, "sign");
20
+ if (request.method === "PUT" && (request.ref.version || storage.config.kmsKeyName)) return yield* storageError("sign", "gcs", {
21
+ _tag: "Unsupported",
22
+ capability: "generation-or-kms-write-signing"
23
+ }, "not-started");
24
+ const now = yield* Clock.currentTimeMillis;
25
+ const expiry = Math.floor(Math.min(now + request.expiresInSeconds * 1e3, options.authorityExpiresAt ? DateTime.toEpochMillis(options.authorityExpiresAt) : Infinity) / 1e3) * 1e3;
26
+ if (!Number.isSafeInteger(request.expiresInSeconds) || request.expiresInSeconds <= 0 || request.expiresInSeconds > 604800 || expiry <= now || storage.config.apiEndpoint !== "https://storage.googleapis.com") return yield* storageError("sign", "gcs", {
27
+ _tag: "InvalidInput",
28
+ field: "expiry-or-endpoint"
29
+ }, "not-started");
30
+ if (request.method === "HEAD") return yield* storageError("sign", "gcs", {
31
+ _tag: "Unsupported",
32
+ capability: "head-signing"
33
+ }, "not-started");
34
+ const action = {
35
+ GET: "read",
36
+ PUT: "write",
37
+ DELETE: "delete"
38
+ }[request.method];
39
+ const [url] = yield* Effect.tryPromise({
40
+ try: () => storage.client.bucket(storage.config.bucket).file(address.ref.key).getSignedUrl({
41
+ version: "v4",
42
+ action,
43
+ expires: expiry,
44
+ ...address.ref.version ? { queryParams: { generation: address.ref.version.id } } : {}
45
+ }),
46
+ catch: () => storageError("sign", "gcs", { _tag: "AccessDenied" }, "not-started")
47
+ });
48
+ return {
49
+ method: request.method,
50
+ url: Redacted.make(url),
51
+ headers: Redacted.make({}),
52
+ ref: address.ref,
53
+ expiresAt: DateTime.makeUnsafe(expiry),
54
+ constraints: []
55
+ };
56
+ }) });
57
+ }));
58
+ } };
59
+
60
+ export { GcsSigning };
61
+ //# sourceMappingURL=signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.js","names":[],"sources":["../../src/providers/gcs/signing.ts"],"sourcesContent":["import { Clock, DateTime, Effect, Layer, Redacted } from \"effect\";\n\nimport { StorageSigning } from \"../../core/capabilities.js\";\nimport type { SignedRequest } from \"../../core/capabilities.js\";\nimport { storageError } from \"../../core/errors.js\";\nimport { signingRequest } from \"../../internal/signing-request.js\";\nimport { GcsStorage } from \"./index.js\";\nimport { target } from \"./mapping.js\";\n\n/** Explicitly selected signing authority; ADC data access alone need not permit signBlob. */\nexport const GcsSigning = {\n layer(options: { readonly authorityExpiresAt?: DateTime.Utc } = {}) {\n return Layer.effect(\n StorageSigning,\n Effect.gen(function* () {\n const storage = yield* GcsStorage;\n return StorageSigning.of({\n sign: Effect.fnUntraced(function* (request) {\n yield* signingRequest(request, \"gcs\");\n if (storage.config.customerKey)\n return yield* storageError(\n \"sign\",\n \"gcs\",\n { _tag: \"Unsupported\", capability: \"customer-key-signing\" },\n \"not-started\",\n );\n const address = yield* target(storage, { ref: request.ref }, \"sign\");\n if (request.method === \"PUT\" && (request.ref.version || storage.config.kmsKeyName))\n return yield* storageError(\n \"sign\",\n \"gcs\",\n { _tag: \"Unsupported\", capability: \"generation-or-kms-write-signing\" },\n \"not-started\",\n );\n const now = yield* Clock.currentTimeMillis;\n const expiry =\n Math.floor(\n Math.min(\n now + request.expiresInSeconds * 1000,\n options.authorityExpiresAt\n ? DateTime.toEpochMillis(options.authorityExpiresAt)\n : Infinity,\n ) / 1000,\n ) * 1000;\n if (\n !Number.isSafeInteger(request.expiresInSeconds) ||\n request.expiresInSeconds <= 0 ||\n request.expiresInSeconds > 604800 ||\n expiry <= now ||\n storage.config.apiEndpoint !== \"https://storage.googleapis.com\"\n )\n return yield* storageError(\n \"sign\",\n \"gcs\",\n { _tag: \"InvalidInput\", field: \"expiry-or-endpoint\" },\n \"not-started\",\n );\n if (request.method === \"HEAD\")\n return yield* storageError(\n \"sign\",\n \"gcs\",\n { _tag: \"Unsupported\", capability: \"head-signing\" },\n \"not-started\",\n );\n const actions = { GET: \"read\", PUT: \"write\", DELETE: \"delete\" } as const;\n const action = actions[request.method];\n const [url] = yield* Effect.tryPromise({\n try: () =>\n storage.client\n .bucket(storage.config.bucket)\n .file(address.ref.key)\n .getSignedUrl({\n version: \"v4\",\n action,\n expires: expiry,\n ...(address.ref.version\n ? { queryParams: { generation: address.ref.version.id } }\n : {}),\n }),\n catch: () => storageError(\"sign\", \"gcs\", { _tag: \"AccessDenied\" }, \"not-started\"),\n });\n return {\n method: request.method,\n url: Redacted.make(url),\n headers: Redacted.make({}),\n ref: address.ref,\n expiresAt: DateTime.makeUnsafe(expiry),\n constraints: [],\n } satisfies SignedRequest;\n }),\n });\n }),\n );\n },\n};\n"],"mappings":";;;;;;;;;AAUA,MAAa,aAAa,EACxB,MAAM,UAA0D,CAAC,GAAG;CAClE,OAAO,MAAM,OACX,gBACA,OAAO,IAAI,aAAa;EACtB,MAAM,UAAU,OAAO;EACvB,OAAO,eAAe,GAAG,EACvB,MAAM,OAAO,WAAW,WAAW,SAAS;GAC1C,OAAO,eAAe,SAAS,KAAK;GACpC,IAAI,QAAQ,OAAO,aACjB,OAAO,OAAO,aACZ,QACA,OACA;IAAE,MAAM;IAAe,YAAY;GAAuB,GAC1D,aACF;GACF,MAAM,UAAU,OAAO,OAAO,SAAS,EAAE,KAAK,QAAQ,IAAI,GAAG,MAAM;GACnE,IAAI,QAAQ,WAAW,UAAU,QAAQ,IAAI,WAAW,QAAQ,OAAO,aACrE,OAAO,OAAO,aACZ,QACA,OACA;IAAE,MAAM;IAAe,YAAY;GAAkC,GACrE,aACF;GACF,MAAM,MAAM,OAAO,MAAM;GACzB,MAAM,SACJ,KAAK,MACH,KAAK,IACH,MAAM,QAAQ,mBAAmB,KACjC,QAAQ,qBACJ,SAAS,cAAc,QAAQ,kBAAkB,IACjD,QACN,IAAI,GACN,IAAI;GACN,IACE,CAAC,OAAO,cAAc,QAAQ,gBAAgB,KAC9C,QAAQ,oBAAoB,KAC5B,QAAQ,mBAAmB,UAC3B,UAAU,OACV,QAAQ,OAAO,gBAAgB,kCAE/B,OAAO,OAAO,aACZ,QACA,OACA;IAAE,MAAM;IAAgB,OAAO;GAAqB,GACpD,aACF;GACF,IAAI,QAAQ,WAAW,QACrB,OAAO,OAAO,aACZ,QACA,OACA;IAAE,MAAM;IAAe,YAAY;GAAe,GAClD,aACF;GAEF,MAAM,SAAS;IADG,KAAK;IAAQ,KAAK;IAAS,QAAQ;GAChC,EAAE,QAAQ;GAC/B,MAAM,CAAC,OAAO,OAAO,OAAO,WAAW;IACrC,WACE,QAAQ,OACL,OAAO,QAAQ,OAAO,MAAM,CAAC,CAC7B,KAAK,QAAQ,IAAI,GAAG,CAAC,CACrB,aAAa;KACZ,SAAS;KACT;KACA,SAAS;KACT,GAAI,QAAQ,IAAI,UACZ,EAAE,aAAa,EAAE,YAAY,QAAQ,IAAI,QAAQ,GAAG,EAAE,IACtD,CAAC;IACP,CAAC;IACL,aAAa,aAAa,QAAQ,OAAO,EAAE,MAAM,eAAe,GAAG,aAAa;GAClF,CAAC;GACD,OAAO;IACL,QAAQ,QAAQ;IAChB,KAAK,SAAS,KAAK,GAAG;IACtB,SAAS,SAAS,KAAK,CAAC,CAAC;IACzB,KAAK,QAAQ;IACb,WAAW,SAAS,WAAW,MAAM;IACrC,aAAa,CAAC;GAChB;EACF,CAAC,EACH,CAAC;CACH,CAAC,CACH;AACF,EACF"}
@@ -0,0 +1,10 @@
1
+ import { UploadError } from "../uploads/schema.js";
2
+ import { UploadGrantDriver } from "../uploads/driver.js";
3
+ import { GcsStorage } from "../gcs.js";
4
+ import { Layer } from "effect";
5
+ export declare const GcsUploadGrants: {
6
+ layer(options?: {
7
+ readonly chunkBytes?: number;
8
+ }): Layer.Layer<UploadGrantDriver, UploadError, GcsStorage>;
9
+ };
10
+ //# sourceMappingURL=uploads.d.ts.map
@@ -0,0 +1,76 @@
1
+ import { failUpload } from "../uploads/schema.js";
2
+ import { UploadGrantDriver } from "../uploads/driver.js";
3
+ import { operationMetadata } from "../uploads/verification.js";
4
+ import { GcsStorage } from "../gcs.js";
5
+ import { Clock, Effect, Layer, Redacted, Schema } from "effect";
6
+
7
+ // src/providers/gcs/uploads.ts
8
+ const decode = (remote) => Schema.decodeUnknownEffect(Schema.Struct({
9
+ url: Schema.String,
10
+ total: Schema.Natural,
11
+ expiresAt: Schema.Number
12
+ }))(remote).pipe(Effect.mapError(() => failUpload("Conflict")));
13
+ const GcsUploadGrants = { layer(options = {}) {
14
+ return Layer.effect(UploadGrantDriver, Effect.gen(function* () {
15
+ const storage = yield* GcsStorage;
16
+ const chunkBytes = options.chunkBytes ?? 8 * 1024 ** 2;
17
+ if (chunkBytes < 262144 || chunkBytes % 262144 || chunkBytes > 64 * 1024 ** 2) return yield* failUpload("BadRequest");
18
+ return UploadGrantDriver.of({
19
+ maximumGrantLifetimeMillis: 60486e4,
20
+ begin: Effect.fnUntraced(function* (record) {
21
+ if (storage.config.customerKey || !["auto", "resumable"].includes(record.input.strategy ?? "auto")) return yield* failUpload("Unsupported");
22
+ const upload = yield* storage.offsets.create({
23
+ key: record.stagingKey,
24
+ contentLength: record.input.file.size,
25
+ contentType: record.input.file.contentType,
26
+ customMetadata: operationMetadata(record),
27
+ condition: { _tag: "CreateOnly" }
28
+ });
29
+ return {
30
+ ...yield* Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Struct({
31
+ url: Schema.String,
32
+ total: Schema.Natural
33
+ })))(Redacted.value(upload.handle)).pipe(Effect.mapError(() => failUpload("Unavailable"))),
34
+ expiresAt: (yield* Clock.currentTimeMillis) + 6048e5
35
+ };
36
+ }),
37
+ grant: Effect.fnUntraced(function* (record, expiresAt) {
38
+ const remote = yield* decode(record.remote ? Redacted.value(record.remote) : void 0);
39
+ const state = yield* storage.offsets.query({
40
+ protocol: "gcs-resumable-v1",
41
+ ref: {
42
+ storeId: storage.storeId,
43
+ key: record.stagingKey
44
+ },
45
+ handle: Redacted.make(JSON.stringify(remote))
46
+ });
47
+ if (state._tag === "Expired") return yield* failUpload("Expired");
48
+ if (state._tag === "Unknown") return yield* failUpload("Unavailable");
49
+ return {
50
+ _tag: "Resumable",
51
+ protocol: "gcs",
52
+ url: remote.url,
53
+ headers: {},
54
+ offset: state._tag === "Completed" ? record.input.file.size : state.committedOffset,
55
+ chunkBytes,
56
+ expiresAt: Math.min(expiresAt, remote.expiresAt)
57
+ };
58
+ }),
59
+ abort: Effect.fnUntraced(function* (record) {
60
+ if (record.remote === void 0) return;
61
+ const remote = yield* decode(record.remote ? Redacted.value(record.remote) : void 0);
62
+ yield* storage.offsets.cancel({
63
+ protocol: "gcs-resumable-v1",
64
+ ref: {
65
+ storeId: storage.storeId,
66
+ key: record.stagingKey
67
+ },
68
+ handle: Redacted.make(JSON.stringify(remote))
69
+ });
70
+ })
71
+ });
72
+ }));
73
+ } };
74
+
75
+ export { GcsUploadGrants };
76
+ //# sourceMappingURL=uploads.js.map