@backblaze-labs/b2-sdk 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 (393) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/README.md +18 -5
  3. package/dist/_virtual/_b2-sdk-version-json.cjs +1 -1
  4. package/dist/_virtual/_b2-sdk-version-json.js +1 -1
  5. package/dist/auth/reauth-coalescer.cjs +65 -0
  6. package/dist/auth/reauth-coalescer.cjs.map +1 -0
  7. package/dist/auth/reauth-coalescer.d.cts +34 -0
  8. package/dist/auth/reauth-coalescer.d.cts.map +1 -0
  9. package/dist/auth/reauth-coalescer.d.ts +34 -0
  10. package/dist/auth/reauth-coalescer.d.ts.map +1 -0
  11. package/dist/auth/reauth-coalescer.js +65 -0
  12. package/dist/auth/reauth-coalescer.js.map +1 -0
  13. package/dist/backup/raw.cjs +37 -15
  14. package/dist/backup/raw.cjs.map +1 -1
  15. package/dist/backup/raw.d.cts +2 -2
  16. package/dist/backup/raw.d.cts.map +1 -1
  17. package/dist/backup/raw.d.ts +2 -2
  18. package/dist/backup/raw.d.ts.map +1 -1
  19. package/dist/backup/raw.js +37 -15
  20. package/dist/backup/raw.js.map +1 -1
  21. package/dist/bucket-validation.cjs +111 -0
  22. package/dist/bucket-validation.cjs.map +1 -0
  23. package/dist/bucket-validation.d.cts +27 -0
  24. package/dist/bucket-validation.d.cts.map +1 -0
  25. package/dist/bucket-validation.d.ts +27 -0
  26. package/dist/bucket-validation.d.ts.map +1 -0
  27. package/dist/bucket-validation.js +109 -0
  28. package/dist/bucket-validation.js.map +1 -0
  29. package/dist/bucket.cjs +123 -73
  30. package/dist/bucket.cjs.map +1 -1
  31. package/dist/bucket.d.cts +156 -61
  32. package/dist/bucket.d.cts.map +1 -1
  33. package/dist/bucket.d.ts +156 -61
  34. package/dist/bucket.d.ts.map +1 -1
  35. package/dist/bucket.js +123 -73
  36. package/dist/bucket.js.map +1 -1
  37. package/dist/client.cjs +29 -8
  38. package/dist/client.cjs.map +1 -1
  39. package/dist/client.d.cts +30 -9
  40. package/dist/client.d.cts.map +1 -1
  41. package/dist/client.d.ts +30 -9
  42. package/dist/client.d.ts.map +1 -1
  43. package/dist/client.js +29 -8
  44. package/dist/client.js.map +1 -1
  45. package/dist/download/single.cjs +38 -13
  46. package/dist/download/single.cjs.map +1 -1
  47. package/dist/download/single.d.cts +10 -4
  48. package/dist/download/single.d.cts.map +1 -1
  49. package/dist/download/single.d.ts +10 -4
  50. package/dist/download/single.d.ts.map +1 -1
  51. package/dist/download/single.js +38 -13
  52. package/dist/download/single.js.map +1 -1
  53. package/dist/errors/index.cjs +27 -4
  54. package/dist/errors/index.cjs.map +1 -1
  55. package/dist/errors/index.d.cts +15 -0
  56. package/dist/errors/index.d.cts.map +1 -1
  57. package/dist/errors/index.d.ts +15 -0
  58. package/dist/errors/index.d.ts.map +1 -1
  59. package/dist/errors/index.js +27 -5
  60. package/dist/errors/index.js.map +1 -1
  61. package/dist/http/non-idempotent-mutations.cjs +38 -0
  62. package/dist/http/non-idempotent-mutations.cjs.map +1 -0
  63. package/dist/http/non-idempotent-mutations.d.cts +25 -0
  64. package/dist/http/non-idempotent-mutations.d.cts.map +1 -0
  65. package/dist/http/non-idempotent-mutations.d.ts +25 -0
  66. package/dist/http/non-idempotent-mutations.d.ts.map +1 -0
  67. package/dist/http/non-idempotent-mutations.js +35 -0
  68. package/dist/http/non-idempotent-mutations.js.map +1 -0
  69. package/dist/http/transport.cjs +9 -8
  70. package/dist/http/transport.cjs.map +1 -1
  71. package/dist/http/transport.d.cts +5 -0
  72. package/dist/http/transport.d.cts.map +1 -1
  73. package/dist/http/transport.d.ts +5 -0
  74. package/dist/http/transport.d.ts.map +1 -1
  75. package/dist/http/transport.js +9 -8
  76. package/dist/http/transport.js.map +1 -1
  77. package/dist/http/user-agent.cjs +12 -1
  78. package/dist/http/user-agent.cjs.map +1 -1
  79. package/dist/http/user-agent.d.cts +8 -0
  80. package/dist/http/user-agent.d.cts.map +1 -1
  81. package/dist/http/user-agent.d.ts +8 -0
  82. package/dist/http/user-agent.d.ts.map +1 -1
  83. package/dist/http/user-agent.js +13 -3
  84. package/dist/http/user-agent.js.map +1 -1
  85. package/dist/index.cjs +25 -0
  86. package/dist/index.d.cts +10 -9
  87. package/dist/index.d.cts.map +1 -1
  88. package/dist/index.d.ts +10 -9
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +7 -6
  91. package/dist/notifications/index.cjs +3 -0
  92. package/dist/notifications/index.d.cts +2 -0
  93. package/dist/notifications/index.d.cts.map +1 -1
  94. package/dist/notifications/index.d.ts +2 -0
  95. package/dist/notifications/index.d.ts.map +1 -1
  96. package/dist/notifications/index.js +2 -1
  97. package/dist/object.cjs +12 -1
  98. package/dist/object.cjs.map +1 -1
  99. package/dist/object.d.cts +7 -1
  100. package/dist/object.d.cts.map +1 -1
  101. package/dist/object.d.ts +7 -1
  102. package/dist/object.d.ts.map +1 -1
  103. package/dist/object.js +12 -1
  104. package/dist/object.js.map +1 -1
  105. package/dist/partner/auth-core.cjs +4 -23
  106. package/dist/partner/auth-core.cjs.map +1 -1
  107. package/dist/partner/auth-core.d.cts +1 -1
  108. package/dist/partner/auth-core.d.cts.map +1 -1
  109. package/dist/partner/auth-core.d.ts +1 -1
  110. package/dist/partner/auth-core.d.ts.map +1 -1
  111. package/dist/partner/auth-core.js +5 -24
  112. package/dist/partner/auth-core.js.map +1 -1
  113. package/dist/partner/client.cjs +25 -10
  114. package/dist/partner/client.cjs.map +1 -1
  115. package/dist/partner/client.d.cts +32 -10
  116. package/dist/partner/client.d.cts.map +1 -1
  117. package/dist/partner/client.d.ts +32 -10
  118. package/dist/partner/client.d.ts.map +1 -1
  119. package/dist/partner/client.js +25 -10
  120. package/dist/partner/client.js.map +1 -1
  121. package/dist/partner/endpoint-url.cjs +1 -0
  122. package/dist/partner/endpoint-url.cjs.map +1 -1
  123. package/dist/partner/endpoint-url.d.cts +2 -0
  124. package/dist/partner/endpoint-url.d.cts.map +1 -1
  125. package/dist/partner/endpoint-url.d.ts +2 -0
  126. package/dist/partner/endpoint-url.d.ts.map +1 -1
  127. package/dist/partner/endpoint-url.js +1 -0
  128. package/dist/partner/endpoint-url.js.map +1 -1
  129. package/dist/partner/in-memory.cjs.map +1 -1
  130. package/dist/partner/in-memory.js.map +1 -1
  131. package/dist/partner/index.cjs +9 -0
  132. package/dist/partner/index.d.cts +11 -2
  133. package/dist/partner/index.d.cts.map +1 -1
  134. package/dist/partner/index.d.ts +11 -2
  135. package/dist/partner/index.d.ts.map +1 -1
  136. package/dist/partner/index.js +3 -1
  137. package/dist/partner/raw.cjs +52 -44
  138. package/dist/partner/raw.cjs.map +1 -1
  139. package/dist/partner/raw.d.cts +16 -19
  140. package/dist/partner/raw.d.cts.map +1 -1
  141. package/dist/partner/raw.d.ts +16 -19
  142. package/dist/partner/raw.d.ts.map +1 -1
  143. package/dist/partner/raw.js +52 -44
  144. package/dist/partner/raw.js.map +1 -1
  145. package/dist/partner/redaction.cjs +133 -108
  146. package/dist/partner/redaction.cjs.map +1 -1
  147. package/dist/partner/redaction.d.cts +47 -13
  148. package/dist/partner/redaction.d.cts.map +1 -1
  149. package/dist/partner/redaction.d.ts +47 -13
  150. package/dist/partner/redaction.d.ts.map +1 -1
  151. package/dist/partner/redaction.js +133 -109
  152. package/dist/partner/redaction.js.map +1 -1
  153. package/dist/raw/encoding.cjs +29 -10
  154. package/dist/raw/encoding.cjs.map +1 -1
  155. package/dist/raw/encoding.d.cts +3 -2
  156. package/dist/raw/encoding.d.cts.map +1 -1
  157. package/dist/raw/encoding.d.ts +3 -2
  158. package/dist/raw/encoding.d.ts.map +1 -1
  159. package/dist/raw/encoding.js +29 -10
  160. package/dist/raw/encoding.js.map +1 -1
  161. package/dist/raw/index.cjs +64 -39
  162. package/dist/raw/index.cjs.map +1 -1
  163. package/dist/raw/index.d.cts +21 -19
  164. package/dist/raw/index.d.cts.map +1 -1
  165. package/dist/raw/index.d.ts +21 -19
  166. package/dist/raw/index.d.ts.map +1 -1
  167. package/dist/raw/index.js +47 -40
  168. package/dist/raw/index.js.map +1 -1
  169. package/dist/raw/url.cjs.map +1 -1
  170. package/dist/raw/url.d.cts +3 -3
  171. package/dist/raw/url.d.ts +3 -3
  172. package/dist/raw/url.js.map +1 -1
  173. package/dist/simulator/index.cjs +456 -125
  174. package/dist/simulator/index.cjs.map +1 -1
  175. package/dist/simulator/index.d.cts +16 -1
  176. package/dist/simulator/index.d.cts.map +1 -1
  177. package/dist/simulator/index.d.ts +16 -1
  178. package/dist/simulator/index.d.ts.map +1 -1
  179. package/dist/simulator/index.js +449 -130
  180. package/dist/simulator/index.js.map +1 -1
  181. package/dist/simulator/partner-capabilities.cjs +77 -0
  182. package/dist/simulator/partner-capabilities.cjs.map +1 -0
  183. package/dist/simulator/partner-capabilities.d.cts +53 -0
  184. package/dist/simulator/partner-capabilities.d.cts.map +1 -0
  185. package/dist/simulator/partner-capabilities.d.ts +53 -0
  186. package/dist/simulator/partner-capabilities.d.ts.map +1 -0
  187. package/dist/simulator/partner-capabilities.js +73 -0
  188. package/dist/simulator/partner-capabilities.js.map +1 -0
  189. package/dist/simulator/partner.cjs +55 -61
  190. package/dist/simulator/partner.cjs.map +1 -1
  191. package/dist/simulator/partner.d.cts +5 -2
  192. package/dist/simulator/partner.d.cts.map +1 -1
  193. package/dist/simulator/partner.d.ts +5 -2
  194. package/dist/simulator/partner.d.ts.map +1 -1
  195. package/dist/simulator/partner.js +56 -61
  196. package/dist/simulator/partner.js.map +1 -1
  197. package/dist/simulator/validation.cjs +160 -30
  198. package/dist/simulator/validation.cjs.map +1 -1
  199. package/dist/simulator/validation.d.cts +28 -6
  200. package/dist/simulator/validation.d.cts.map +1 -1
  201. package/dist/simulator/validation.d.ts +28 -6
  202. package/dist/simulator/validation.d.ts.map +1 -1
  203. package/dist/simulator/validation.js +148 -31
  204. package/dist/simulator/validation.js.map +1 -1
  205. package/dist/streams/file-source.cjs +1 -1
  206. package/dist/streams/file-source.cjs.map +1 -1
  207. package/dist/streams/file-source.js +1 -1
  208. package/dist/streams/file-source.js.map +1 -1
  209. package/dist/streams/hash.cjs +246 -13
  210. package/dist/streams/hash.cjs.map +1 -1
  211. package/dist/streams/hash.d.cts +37 -12
  212. package/dist/streams/hash.d.cts.map +1 -1
  213. package/dist/streams/hash.d.ts +37 -12
  214. package/dist/streams/hash.d.ts.map +1 -1
  215. package/dist/streams/hash.js +246 -15
  216. package/dist/streams/hash.js.map +1 -1
  217. package/dist/streams/index.cjs +2 -0
  218. package/dist/streams/index.d.cts +1 -1
  219. package/dist/streams/index.d.cts.map +1 -1
  220. package/dist/streams/index.d.ts +1 -1
  221. package/dist/streams/index.d.ts.map +1 -1
  222. package/dist/streams/index.js +2 -2
  223. package/dist/streams/progress.cjs +63 -4
  224. package/dist/streams/progress.cjs.map +1 -1
  225. package/dist/streams/progress.d.cts +28 -2
  226. package/dist/streams/progress.d.cts.map +1 -1
  227. package/dist/streams/progress.d.ts +28 -2
  228. package/dist/streams/progress.d.ts.map +1 -1
  229. package/dist/streams/progress.js +63 -4
  230. package/dist/streams/progress.js.map +1 -1
  231. package/dist/sync/download-staging.cjs +147 -35
  232. package/dist/sync/download-staging.cjs.map +1 -1
  233. package/dist/sync/download-staging.d.cts +25 -2
  234. package/dist/sync/download-staging.d.cts.map +1 -1
  235. package/dist/sync/download-staging.d.ts +25 -2
  236. package/dist/sync/download-staging.d.ts.map +1 -1
  237. package/dist/sync/download-staging.js +146 -36
  238. package/dist/sync/download-staging.js.map +1 -1
  239. package/dist/sync/index.d.cts +1 -1
  240. package/dist/sync/index.d.cts.map +1 -1
  241. package/dist/sync/index.d.ts +1 -1
  242. package/dist/sync/index.d.ts.map +1 -1
  243. package/dist/sync/local-file-io.cjs +5 -1
  244. package/dist/sync/local-file-io.cjs.map +1 -1
  245. package/dist/sync/local-file-io.d.cts +2 -0
  246. package/dist/sync/local-file-io.d.cts.map +1 -1
  247. package/dist/sync/local-file-io.d.ts +2 -0
  248. package/dist/sync/local-file-io.d.ts.map +1 -1
  249. package/dist/sync/local-file-io.js +5 -1
  250. package/dist/sync/local-file-io.js.map +1 -1
  251. package/dist/sync/pairing.cjs +1 -0
  252. package/dist/sync/pairing.cjs.map +1 -1
  253. package/dist/sync/pairing.js +1 -0
  254. package/dist/sync/pairing.js.map +1 -1
  255. package/dist/sync/scanners/b2.cjs +2 -0
  256. package/dist/sync/scanners/b2.cjs.map +1 -1
  257. package/dist/sync/scanners/b2.d.cts.map +1 -1
  258. package/dist/sync/scanners/b2.d.ts.map +1 -1
  259. package/dist/sync/scanners/b2.js +2 -0
  260. package/dist/sync/scanners/b2.js.map +1 -1
  261. package/dist/sync/scanners/local.cjs +150 -33
  262. package/dist/sync/scanners/local.cjs.map +1 -1
  263. package/dist/sync/scanners/local.d.cts +6 -0
  264. package/dist/sync/scanners/local.d.cts.map +1 -1
  265. package/dist/sync/scanners/local.d.ts +6 -0
  266. package/dist/sync/scanners/local.d.ts.map +1 -1
  267. package/dist/sync/scanners/local.js +150 -33
  268. package/dist/sync/scanners/local.js.map +1 -1
  269. package/dist/sync/synchronizer.cjs +76 -29
  270. package/dist/sync/synchronizer.cjs.map +1 -1
  271. package/dist/sync/synchronizer.d.cts +1 -0
  272. package/dist/sync/synchronizer.d.cts.map +1 -1
  273. package/dist/sync/synchronizer.d.ts +1 -0
  274. package/dist/sync/synchronizer.d.ts.map +1 -1
  275. package/dist/sync/synchronizer.js +76 -29
  276. package/dist/sync/synchronizer.js.map +1 -1
  277. package/dist/sync/types.d.cts +19 -3
  278. package/dist/sync/types.d.cts.map +1 -1
  279. package/dist/sync/types.d.ts +19 -3
  280. package/dist/sync/types.d.ts.map +1 -1
  281. package/dist/types/backup.d.cts +6 -1
  282. package/dist/types/backup.d.cts.map +1 -1
  283. package/dist/types/backup.d.ts +6 -1
  284. package/dist/types/backup.d.ts.map +1 -1
  285. package/dist/types/bucket.cjs +81 -11
  286. package/dist/types/bucket.cjs.map +1 -1
  287. package/dist/types/bucket.d.cts +190 -39
  288. package/dist/types/bucket.d.cts.map +1 -1
  289. package/dist/types/bucket.d.ts +190 -39
  290. package/dist/types/bucket.d.ts.map +1 -1
  291. package/dist/types/bucket.js +67 -12
  292. package/dist/types/bucket.js.map +1 -1
  293. package/dist/types/download.cjs.map +1 -1
  294. package/dist/types/download.d.cts +3 -17
  295. package/dist/types/download.d.cts.map +1 -1
  296. package/dist/types/download.d.ts +3 -17
  297. package/dist/types/download.d.ts.map +1 -1
  298. package/dist/types/download.js.map +1 -1
  299. package/dist/types/encryption.cjs +18 -0
  300. package/dist/types/encryption.cjs.map +1 -1
  301. package/dist/types/encryption.d.cts +21 -11
  302. package/dist/types/encryption.d.cts.map +1 -1
  303. package/dist/types/encryption.d.ts +21 -11
  304. package/dist/types/encryption.d.ts.map +1 -1
  305. package/dist/types/encryption.js +18 -0
  306. package/dist/types/encryption.js.map +1 -1
  307. package/dist/types/file.cjs +3 -0
  308. package/dist/types/file.cjs.map +1 -1
  309. package/dist/types/file.d.cts +125 -16
  310. package/dist/types/file.d.cts.map +1 -1
  311. package/dist/types/file.d.ts +125 -16
  312. package/dist/types/file.d.ts.map +1 -1
  313. package/dist/types/file.js +3 -1
  314. package/dist/types/file.js.map +1 -1
  315. package/dist/types/index.d.cts +7 -7
  316. package/dist/types/index.d.cts.map +1 -1
  317. package/dist/types/index.d.ts +7 -7
  318. package/dist/types/index.d.ts.map +1 -1
  319. package/dist/types/key.d.cts +4 -3
  320. package/dist/types/key.d.cts.map +1 -1
  321. package/dist/types/key.d.ts +4 -3
  322. package/dist/types/key.d.ts.map +1 -1
  323. package/dist/types/notifications.cjs +30 -0
  324. package/dist/types/notifications.cjs.map +1 -1
  325. package/dist/types/notifications.d.cts +26 -1
  326. package/dist/types/notifications.d.cts.map +1 -1
  327. package/dist/types/notifications.d.ts +26 -1
  328. package/dist/types/notifications.d.ts.map +1 -1
  329. package/dist/types/notifications.js +29 -1
  330. package/dist/types/notifications.js.map +1 -1
  331. package/dist/types/partner.cjs.map +1 -1
  332. package/dist/types/partner.d.cts +28 -36
  333. package/dist/types/partner.d.cts.map +1 -1
  334. package/dist/types/partner.d.ts +28 -36
  335. package/dist/types/partner.d.ts.map +1 -1
  336. package/dist/types/partner.js.map +1 -1
  337. package/dist/types/upload.d.cts +4 -0
  338. package/dist/types/upload.d.cts.map +1 -1
  339. package/dist/types/upload.d.ts +4 -0
  340. package/dist/types/upload.d.ts.map +1 -1
  341. package/dist/upload/large.cjs +10 -7
  342. package/dist/upload/large.cjs.map +1 -1
  343. package/dist/upload/large.d.cts +15 -6
  344. package/dist/upload/large.d.cts.map +1 -1
  345. package/dist/upload/large.d.ts +15 -6
  346. package/dist/upload/large.d.ts.map +1 -1
  347. package/dist/upload/large.js +10 -7
  348. package/dist/upload/large.js.map +1 -1
  349. package/dist/upload/options.cjs.map +1 -1
  350. package/dist/upload/options.d.cts +12 -0
  351. package/dist/upload/options.d.cts.map +1 -1
  352. package/dist/upload/options.d.ts +12 -0
  353. package/dist/upload/options.d.ts.map +1 -1
  354. package/dist/upload/options.js.map +1 -1
  355. package/dist/upload/resume.cjs +4 -3
  356. package/dist/upload/resume.cjs.map +1 -1
  357. package/dist/upload/resume.d.cts +6 -4
  358. package/dist/upload/resume.d.cts.map +1 -1
  359. package/dist/upload/resume.d.ts +6 -4
  360. package/dist/upload/resume.d.ts.map +1 -1
  361. package/dist/upload/resume.js +4 -3
  362. package/dist/upload/resume.js.map +1 -1
  363. package/dist/upload/retry.cjs +17 -10
  364. package/dist/upload/retry.cjs.map +1 -1
  365. package/dist/upload/retry.d.cts.map +1 -1
  366. package/dist/upload/retry.d.ts.map +1 -1
  367. package/dist/upload/retry.js +17 -10
  368. package/dist/upload/retry.js.map +1 -1
  369. package/dist/upload/single.cjs +35 -31
  370. package/dist/upload/single.cjs.map +1 -1
  371. package/dist/upload/single.d.cts +6 -0
  372. package/dist/upload/single.d.cts.map +1 -1
  373. package/dist/upload/single.d.ts +6 -0
  374. package/dist/upload/single.d.ts.map +1 -1
  375. package/dist/upload/single.js +35 -31
  376. package/dist/upload/single.js.map +1 -1
  377. package/dist/upload/stream.cjs +12 -1
  378. package/dist/upload/stream.cjs.map +1 -1
  379. package/dist/upload/stream.d.cts +6 -0
  380. package/dist/upload/stream.d.cts.map +1 -1
  381. package/dist/upload/stream.d.ts +6 -0
  382. package/dist/upload/stream.d.ts.map +1 -1
  383. package/dist/upload/stream.js +12 -1
  384. package/dist/upload/stream.js.map +1 -1
  385. package/dist/version.cjs +56 -4
  386. package/dist/version.cjs.map +1 -1
  387. package/dist/version.d.cts +53 -4
  388. package/dist/version.d.cts.map +1 -1
  389. package/dist/version.d.ts +53 -4
  390. package/dist/version.d.ts.map +1 -1
  391. package/dist/version.js +52 -5
  392. package/dist/version.js.map +1 -1
  393. package/package.json +11 -4
@@ -8,10 +8,15 @@ const require_auth_shape = require("./auth-shape.cjs");
8
8
  const require_redaction = require("./redaction.cjs");
9
9
  const require_endpoint_url = require("./endpoint-url.cjs");
10
10
  //#region src/partner/raw.ts
11
- var PARTNER_API_V3 = {
12
- prefix: "b2api",
11
+ var PARTNER_API_PREFIX = "b2api";
12
+ var PARTNER_AUTHORIZE_API = {
13
+ prefix: PARTNER_API_PREFIX,
13
14
  version: "v3"
14
15
  };
16
+ var PARTNER_GROUPS_API = {
17
+ prefix: PARTNER_API_PREFIX,
18
+ version: "v4"
19
+ };
15
20
  var DEFAULT_PARTNER_REALM_URL = "https://api.backblazeb2.com";
16
21
  var PRODUCTION_HOST_SUFFIX = "backblazeb2.com";
17
22
  var PRODUCTION_ENDPOINT_HOST_SUFFIX = "backblaze.com";
@@ -140,12 +145,25 @@ function validatePartnerRequestGroupsApiUrl(transport, authorizedSuffixes, group
140
145
  return require_endpoint_url.validatePartnerEndpointUrl(groupsApiUrl, "groupsApiUrl", partnerEndpointAllowedSuffixes(transport, authorizedSuffixes));
141
146
  }
142
147
  function reserveTrialCreateAccountRequestBody(request) {
143
- return (Array.isArray(request) ? request : [request]).map((entry) => ({
144
- email: entry.email,
145
- term: entry.term,
146
- storage: entry.storage,
147
- ...entry.region != null ? { region: entry.region } : {}
148
- }));
148
+ if (Array.isArray(request)) throw new TypeError("reserveTrialCreateAccount request must be a single account object.");
149
+ return {
150
+ email: request.email,
151
+ term: request.term,
152
+ storage: request.storage,
153
+ ...request.region != null ? { region: request.region } : {}
154
+ };
155
+ }
156
+ function partnerAuthorizeUrl(realmUrl) {
157
+ return require_url.b2Url(realmUrl, {
158
+ ...PARTNER_AUTHORIZE_API,
159
+ endpoint: "b2_authorize_account"
160
+ });
161
+ }
162
+ function partnerGroupsEndpointUrl(groupsApiUrl, endpoint) {
163
+ return require_url.b2Url(groupsApiUrl, {
164
+ ...PARTNER_GROUPS_API,
165
+ endpoint
166
+ });
149
167
  }
150
168
  /**
151
169
  * Low-level client for Partner API authorization and endpoint bindings.
@@ -197,10 +215,7 @@ var PartnerRawClient = class {
197
215
  require_realms.assertSecureRealmUrl(realmUrl);
198
216
  assertVerifiedPartnerAuthorizeRealm(realmUrl, this.allowCustomAuthorizeRealm);
199
217
  const auth = normalizePartnerAuthorizeResponse(await (await this.transport.send({
200
- url: require_url.b2Url(realmUrl, {
201
- ...PARTNER_API_V3,
202
- endpoint: "b2_authorize_account"
203
- }),
218
+ url: partnerAuthorizeUrl(realmUrl),
204
219
  method: "GET",
205
220
  headers: { Authorization: `Basic ${btoa(`${masterKeyId}:${masterKey}`)}` },
206
221
  ...options?.signal !== void 0 ? { signal: options.signal } : {},
@@ -216,22 +231,22 @@ var PartnerRawClient = class {
216
231
  *
217
232
  * The Partner API creates a new Backblaze account for an email address that
218
233
  * is not already a Backblaze account and adds that account to the managed
219
- * group. The wire response is a JSON array.
234
+ * group. The wire response is a single JSON object.
220
235
  *
221
236
  * @param groupsApiUrl - The Partner API base URL from `authorizePartner`.
222
237
  * @param authToken - The Partner API authorization token.
223
238
  * @param request - The group-member creation request body.
224
239
  * @param options - Optional abort and per-request retry settings.
225
240
  *
226
- * @returns The created member result array, including the member application key.
241
+ * @returns The created member result, including the member application key.
227
242
  */
228
243
  async createGroupMember(groupsApiUrl, authToken, request, options) {
229
- const response = await this.postJson(groupsApiUrl, authToken, "b2_create_group_member", {
244
+ const response = await this.postNonRetryingMutationJson(groupsApiUrl, authToken, "b2_create_group_member", {
230
245
  adminAccountId: request.adminAccountId,
231
246
  groupId: request.groupId,
232
247
  memberEmail: request.memberEmail,
233
248
  ...request.region != null ? { region: request.region } : {}
234
- }, require_endpoint_url.nonRetryingMutationRequestOptions(options));
249
+ }, options);
235
250
  return require_redaction.redactCreateGroupMemberResponse(response);
236
251
  }
237
252
  /**
@@ -248,47 +263,44 @@ var PartnerRawClient = class {
248
263
  * @returns The ejected member object.
249
264
  */
250
265
  async ejectGroupMember(groupsApiUrl, authToken, request, options) {
251
- return this.postJson(groupsApiUrl, authToken, "b2_eject_group_member", {
266
+ return this.postNonRetryingMutationJson(groupsApiUrl, authToken, "b2_eject_group_member", {
252
267
  adminAccountId: request.adminAccountId,
253
268
  groupId: request.groupId,
254
269
  memberAccountId: request.memberAccountId,
255
270
  ...request.email !== void 0 ? { email: request.email } : {}
256
- }, require_endpoint_url.nonRetryingMutationRequestOptions(options));
271
+ }, options);
257
272
  }
258
273
  /**
259
274
  * Calls {@link https://www.backblaze.com/apidocs/b2-reserve-trial-create-account | b2_reserve_trial_create_account}.
260
275
  *
261
- * The Partner API creates one or more new Backblaze B2 accounts and starts
262
- * B2 Reserve trials for them. Backblaze documents both the wire request and
263
- * the success response as JSON arrays. The array form must include at least
264
- * one request entry. For convenience, this raw binding intentionally accepts
265
- * one request entry for the one-account case and always sends an array on the
266
- * wire.
276
+ * The Partner API creates one new Backblaze B2 account and starts a B2
277
+ * Reserve trial for it. The wire request and success response are single
278
+ * JSON objects.
267
279
  *
268
280
  * Each email address must not already be a Backblaze account. `term` is the
269
281
  * trial duration in days, documented as 7 through 30 inclusive. `storage` is
270
282
  * the requested storage in TB, documented as 1 through 50 inclusive.
271
283
  *
272
284
  * This operation is non-idempotent and creates billable accounts. Automatic
273
- * retries and expired-token reauthorization are disabled; long-lived batch
285
+ * retries and expired-token reauthorization are disabled; long-lived
274
286
  * callers must catch auth expiry, reauthorize, and then decide whether to
275
287
  * issue a new request. A network or timeout failure after the server has
276
- * processed the request may still have created one or more accounts, and the
277
- * application keys from a lost response are not recoverable from B2. Bulk
278
- * callers should reconcile account state out of band, such as through Partner
279
- * account listing, before re-issuing the same batch.
288
+ * processed the request may still have created an account, and the
289
+ * application key from a lost response is not recoverable from B2. Callers
290
+ * should reconcile account state out of band, such as through Partner
291
+ * account listing, before re-issuing a request for the same email address.
280
292
  *
281
293
  * @param groupsApiUrl - The Partner API base URL from `authorizePartner`. The authorize response currently exposes the shared Partner endpoint base as `groupsApiUrl`.
282
294
  * @param authToken - The Partner API authorization token.
283
- * @param request - One reserve-trial account request, or one or more entries.
295
+ * @param request - Email, term, storage, and optional region for the account to create.
284
296
  * @param options - Optional abort and per-request retry settings.
285
297
  *
286
- * @returns The created reserve-trial account result array.
298
+ * @returns The created reserve-trial account result.
287
299
  *
288
300
  * @experimental Partner API surface; shape may change as the Partner API docs evolve.
289
301
  */
290
302
  async reserveTrialCreateAccount(groupsApiUrl, authToken, request, options) {
291
- const response = await this.postJson(groupsApiUrl, authToken, "b2_reserve_trial_create_account", reserveTrialCreateAccountRequestBody(request), require_endpoint_url.nonRetryingMutationRequestOptions(options));
303
+ const response = await this.postNonRetryingMutationJson(groupsApiUrl, authToken, "b2_reserve_trial_create_account", reserveTrialCreateAccountRequestBody(request), options);
292
304
  return require_redaction.redactReserveTrialCreateAccountResponse(response);
293
305
  }
294
306
  /**
@@ -346,10 +358,7 @@ var PartnerRawClient = class {
346
358
  async getJson(groupsApiUrl, authToken, endpoint, query, options) {
347
359
  const safeGroupsApiUrl = validatePartnerRequestGroupsApiUrl(this.transport, this.authorizedEndpointSuffixes, groupsApiUrl);
348
360
  return (await this.transport.send({
349
- url: require_endpoint_url.withQueryString(require_url.b2Url(safeGroupsApiUrl, {
350
- ...PARTNER_API_V3,
351
- endpoint
352
- }), query),
361
+ url: require_endpoint_url.withQueryString(partnerGroupsEndpointUrl(safeGroupsApiUrl, endpoint), query),
353
362
  method: "GET",
354
363
  headers: { Authorization: authToken },
355
364
  ...options?.signal !== void 0 ? { signal: options.signal } : {},
@@ -357,7 +366,7 @@ var PartnerRawClient = class {
357
366
  })).json();
358
367
  }
359
368
  /**
360
- * Sends a JSON POST request to the specified Partner API endpoint.
369
+ * Sends a non-retrying JSON mutation POST request to the specified Partner API endpoint.
361
370
  * @param groupsApiUrl - The Partner API base URL.
362
371
  * @param authToken - The Partner API authorization token.
363
372
  * @param endpoint - The Partner API endpoint name.
@@ -366,21 +375,20 @@ var PartnerRawClient = class {
366
375
  *
367
376
  * @returns The parsed JSON response.
368
377
  */
369
- async postJson(groupsApiUrl, authToken, endpoint, body, options) {
378
+ async postNonRetryingMutationJson(groupsApiUrl, authToken, endpoint, body, options) {
370
379
  const safeGroupsApiUrl = validatePartnerRequestGroupsApiUrl(this.transport, this.authorizedEndpointSuffixes, groupsApiUrl);
380
+ const requestOptions = require_endpoint_url.nonRetryingMutationRequestOptions(options);
371
381
  return (await this.transport.send({
372
- url: require_url.b2Url(safeGroupsApiUrl, {
373
- ...PARTNER_API_V3,
374
- endpoint
375
- }),
382
+ url: partnerGroupsEndpointUrl(safeGroupsApiUrl, endpoint),
376
383
  method: "POST",
377
384
  headers: {
378
385
  Authorization: authToken,
379
386
  "Content-Type": "application/json"
380
387
  },
381
388
  body: JSON.stringify(body),
382
- ...options?.signal !== void 0 ? { signal: options.signal } : {},
383
- ...options?.retry !== void 0 ? { retry: options.retry } : {}
389
+ ...requestOptions.signal !== void 0 ? { signal: requestOptions.signal } : {},
390
+ ...requestOptions.idempotent !== void 0 ? { idempotent: requestOptions.idempotent } : {},
391
+ ...requestOptions.retry !== void 0 ? { retry: requestOptions.retry } : {}
384
392
  })).json();
385
393
  }
386
394
  };
@@ -1 +1 @@
1
- {"version":3,"file":"raw.cjs","names":[],"sources":["../../src/partner/raw.ts"],"sourcesContent":["import { assertSecureRealmUrl } from '../auth/realms.ts'\nimport { B2PartnerAuthorizationError, B2RealmConfigurationError } from '../errors/index.ts'\nimport type { RetryOptions } from '../http/retry.ts'\nimport {\n getTransportUrlGuard,\n type HttpTransport,\n type UrlGuardedTransport,\n} from '../http/transport.ts'\nimport { hostMatchesAllowedSuffix } from '../http/url-guard.ts'\nimport { type B2EndpointUrlOptions, b2Url } from '../raw/url.ts'\nimport { accountId, partnerToken } from '../types/ids.ts'\nimport type {\n CreateGroupMemberRequest,\n CreateGroupMemberResponse,\n EjectGroupMemberRequest,\n EjectGroupMemberResponse,\n ListGroupMembersRequest,\n ListGroupMembersResponse,\n ListGroupsRequest,\n ListGroupsResponse,\n PartnerApiInfo,\n PartnerAuthorizeResponse,\n PartnerBackupApiInfo,\n PartnerGroupsApiInfo,\n ReserveTrialCreateAccountRequest,\n ReserveTrialCreateAccountRequestEntry,\n ReserveTrialCreateAccountResponse,\n} from '../types/partner.ts'\nimport { validatePartnerAuthorizeResponseShape } from './auth-shape.ts'\nimport {\n endpointAllowedSuffixes,\n nonRetryingMutationRequestOptions,\n type QueryParams,\n validatePartnerEndpointUrl,\n withQueryString,\n} from './endpoint-url.ts'\nimport {\n redactCreateGroupMemberResponse,\n redactPartnerAuthorizeResponse,\n redactReserveTrialCreateAccountResponse,\n} from './redaction.ts'\n\nconst PARTNER_API_V3: B2EndpointUrlOptions = { prefix: 'b2api', version: 'v3' }\nconst DEFAULT_PARTNER_REALM_URL = 'https://api.backblazeb2.com'\nconst PRODUCTION_HOST_SUFFIX = 'backblazeb2.com'\nconst PRODUCTION_ENDPOINT_HOST_SUFFIX = 'backblaze.com'\nconst STAGING_HOST_SUFFIX = 'backblaze.net'\nconst VERIFIED_PARTNER_AUTHORIZE_REALM_ORIGINS = new Set([\n 'https://api.backblazeb2.com',\n 'https://api.backblaze.net',\n])\n\n/** Configuration for constructing a {@link PartnerRawClient}. */\nexport interface PartnerRawClientOptions {\n /**\n * The HTTP transport used to send requests.\n *\n * Partner endpoint calls validate URLs against suffixes recorded by\n * `authorizePartner()`. A rehydrated client that skips authorization must use\n * `authorizedPartnerEndpointSuffixes` or a {@link UrlGuardedTransport} with a\n * locked `urlGuard`. Because Partner authorize responses redact\n * `authorizationToken` under `JSON.stringify`, durable caches should persist\n * `partnerAuthorizeResponseForPersistence(auth)` only to encrypted or\n * otherwise credential-grade storage, or use another secure token-preserving\n * representation.\n */\n readonly transport: HttpTransport\n /**\n * Validated Partner endpoint host suffixes restored from cached\n * authorization. Facades normally manage this after authorization; direct raw\n * clients can pass suffixes derived from trusted Partner authorization when\n * rehydrating an auth cache. Do not derive this cache with\n * `JSON.stringify(authorizePartner())`, which intentionally stores a redacted\n * token placeholder instead of a usable Partner token. Rehydrating that\n * placeholder fails fast.\n */\n readonly authorizedPartnerEndpointSuffixes?: readonly string[]\n /**\n * Allow direct custom authorize realms for tests or private proxies.\n * Leave disabled unless the configured host is trusted with the Master Application Key.\n */\n readonly allowCustomAuthorizeRealm?: boolean\n}\n\n/** Optional controls for raw Partner API requests. */\nexport interface PartnerRawRequestOptions {\n /** Abort signal for cancelling the request. */\n readonly signal?: AbortSignal\n /** Per-request retry override. */\n readonly retry?: Partial<RetryOptions>\n}\n\ninterface WirePartnerAuthorizeResponse {\n readonly accountId: string\n readonly authorizationToken: string\n readonly apiInfo: PartnerApiInfo\n readonly applicationKeyExpirationTimestamp: number | null\n}\n\nfunction assertVerifiedPartnerAuthorizeRealm(realmUrl: string, allowCustomAuthorizeRealm: boolean) {\n if (allowCustomAuthorizeRealm) return\n\n const realm = new URL(realmUrl)\n if (VERIFIED_PARTNER_AUTHORIZE_REALM_ORIGINS.has(realm.origin)) return\n\n throw new B2RealmConfigurationError(\n `refusing to send Master Application Key credentials to unverified Partner authorize realm: ${realm.origin}`,\n )\n}\n\nfunction endpointAllowedSuffixesForRealm(\n realmUrl: string,\n allowCustomAuthorizeRealm: boolean,\n): readonly string[] {\n const realmHost = new URL(realmUrl).hostname.toLowerCase()\n if (hostMatchesAllowedSuffix(realmHost, PRODUCTION_HOST_SUFFIX)) {\n return [PRODUCTION_ENDPOINT_HOST_SUFFIX, PRODUCTION_HOST_SUFFIX]\n }\n if (hostMatchesAllowedSuffix(realmHost, STAGING_HOST_SUFFIX)) return [STAGING_HOST_SUFFIX]\n return allowCustomAuthorizeRealm ? [authorizeRealmAllowedSuffix(realmUrl)] : [realmHost]\n}\n\nfunction authorizeRealmAllowedSuffix(realmUrl: string): string {\n const host = new URL(realmUrl).hostname.toLowerCase()\n if (hostMatchesAllowedSuffix(host, PRODUCTION_HOST_SUFFIX)) return PRODUCTION_HOST_SUFFIX\n if (hostMatchesAllowedSuffix(host, STAGING_HOST_SUFFIX)) return STAGING_HOST_SUFFIX\n if (hostMatchesAllowedSuffix(host, PRODUCTION_ENDPOINT_HOST_SUFFIX)) {\n return PRODUCTION_ENDPOINT_HOST_SUFFIX\n }\n return host\n}\n\nfunction endpointAllowedSuffix(url: string): string {\n const host = new URL(url).hostname.toLowerCase()\n if (hostMatchesAllowedSuffix(host, PRODUCTION_HOST_SUFFIX)) return PRODUCTION_HOST_SUFFIX\n if (hostMatchesAllowedSuffix(host, STAGING_HOST_SUFFIX)) return STAGING_HOST_SUFFIX\n if (hostMatchesAllowedSuffix(host, PRODUCTION_ENDPOINT_HOST_SUFFIX)) {\n return PRODUCTION_ENDPOINT_HOST_SUFFIX\n }\n return host\n}\n\nfunction normalizeGroupsApi(\n groupsApi: PartnerGroupsApiInfo,\n allowedSuffixes: readonly string[],\n): PartnerGroupsApiInfo {\n return {\n ...groupsApi,\n groupsApiUrl: validatePartnerEndpointUrl(\n groupsApi.groupsApiUrl,\n 'groupsApiUrl',\n allowedSuffixes,\n ),\n capabilities: [...(groupsApi.capabilities ?? [])],\n infoType: 'groupsApi',\n }\n}\n\nfunction normalizeBackupApi(\n backupApi: PartnerBackupApiInfo,\n allowedSuffixes: readonly string[],\n): PartnerBackupApiInfo {\n return {\n ...backupApi,\n backupApiUrl: validatePartnerEndpointUrl(\n backupApi.backupApiUrl,\n 'backupApiUrl',\n allowedSuffixes,\n ),\n capabilities: [...(backupApi.capabilities ?? [])],\n infoType: 'backupApi',\n }\n}\n\nfunction normalizePartnerAuthorizeResponse(\n response: WirePartnerAuthorizeResponse,\n realmUrl: string,\n allowCustomAuthorizeRealm: boolean,\n): PartnerAuthorizeResponse {\n const { groupsApi, backupApi } = response.apiInfo\n if (groupsApi === undefined && backupApi === undefined) {\n throw new B2PartnerAuthorizationError(\n 'Partner authorize response did not include apiInfo.groupsApi or apiInfo.backupApi',\n )\n }\n\n const allowedSuffixes = endpointAllowedSuffixesForRealm(realmUrl, allowCustomAuthorizeRealm)\n const normalizedGroupsApi =\n groupsApi !== undefined ? normalizeGroupsApi(groupsApi, allowedSuffixes) : undefined\n const normalizedBackupApi =\n backupApi !== undefined ? normalizeBackupApi(backupApi, allowedSuffixes) : undefined\n const apiInfo: PartnerApiInfo = {\n ...(response.apiInfo.storageApi !== undefined\n ? { storageApi: response.apiInfo.storageApi }\n : {}),\n ...(normalizedGroupsApi !== undefined ? { groupsApi: normalizedGroupsApi } : {}),\n ...(normalizedBackupApi !== undefined ? { backupApi: normalizedBackupApi } : {}),\n }\n const normalized: PartnerAuthorizeResponse = {\n accountId: accountId(response.accountId),\n authorizationToken: partnerToken(response.authorizationToken),\n apiInfo,\n ...(normalizedGroupsApi !== undefined\n ? { groupsApiUrl: normalizedGroupsApi.groupsApiUrl }\n : {}),\n ...(normalizedBackupApi !== undefined\n ? { backupApiUrl: normalizedBackupApi.backupApiUrl }\n : {}),\n ...(normalizedGroupsApi !== undefined\n ? { groupsCapabilities: normalizedGroupsApi.capabilities }\n : {}),\n ...(normalizedBackupApi !== undefined\n ? { backupCapabilities: normalizedBackupApi.capabilities }\n : {}),\n applicationKeyExpirationTimestamp: response.applicationKeyExpirationTimestamp,\n }\n\n validatePartnerAuthorizeResponseShape(normalized)\n return redactPartnerAuthorizeResponse(normalized)\n}\n\n/**\n * Derives the Partner authorize and endpoint host suffixes that may receive\n * Partner tokens after a trusted authorize response has been validated.\n *\n * @param auth - Normalized Partner authorize response.\n * @param realmUrl - Realm URL used for Partner authorization.\n *\n * @returns Sorted list of unique host suffixes to allow.\n *\n * @internal\n */\nexport function derivePartnerAllowedSuffixes(\n auth: PartnerAuthorizeResponse,\n realmUrl: string,\n): readonly string[] {\n const suffixes = new Set<string>([authorizeRealmAllowedSuffix(realmUrl)])\n if (auth.apiInfo.groupsApi !== undefined) {\n suffixes.add(endpointAllowedSuffix(auth.apiInfo.groupsApi.groupsApiUrl))\n }\n if (auth.apiInfo.backupApi !== undefined) {\n suffixes.add(endpointAllowedSuffix(auth.apiInfo.backupApi.backupApiUrl))\n }\n return Array.from(suffixes).sort()\n}\n\n/**\n * Validates cached Partner authorize endpoint URLs with the same realm policy\n * applied to fresh `authorizePartner()` responses and returns guard suffixes.\n *\n * @param auth - Cached Partner authorize response to validate.\n * @param realmUrl - Realm URL used for Partner authorization.\n * @param allowCustomAuthorizeRealm - Whether custom authorize realms are trusted.\n *\n * @returns Sorted list of host suffixes derived from the validated auth state.\n *\n * @throws B2PartnerAuthorizationError if the cached auth endpoints are unsafe.\n *\n * @internal\n */\nexport function validatePartnerAuthorizeResponseEndpoints(\n auth: PartnerAuthorizeResponse,\n realmUrl: string,\n allowCustomAuthorizeRealm: boolean,\n): readonly string[] {\n assertSecureRealmUrl(realmUrl)\n assertVerifiedPartnerAuthorizeRealm(realmUrl, allowCustomAuthorizeRealm)\n validatePartnerAuthorizeResponseShape(auth)\n\n const { groupsApi, backupApi } = auth.apiInfo\n const allowedSuffixes = endpointAllowedSuffixesForRealm(realmUrl, allowCustomAuthorizeRealm)\n if (groupsApi !== undefined) {\n validatePartnerEndpointUrl(groupsApi.groupsApiUrl, 'groupsApiUrl', allowedSuffixes)\n }\n if (backupApi !== undefined) {\n validatePartnerEndpointUrl(backupApi.backupApiUrl, 'backupApiUrl', allowedSuffixes)\n }\n\n return derivePartnerAllowedSuffixes(auth, realmUrl)\n}\n\nfunction lockTransportUrlGuard(transport: HttpTransport, allowedSuffixes: readonly string[]): void {\n const guard = getTransportUrlGuard(transport)\n if (guard === undefined) return\n\n const suffixes = new Set([...guard.getAllowedSuffixes(), ...allowedSuffixes])\n guard.setAllowedSuffixes(Array.from(suffixes).sort())\n}\n\nfunction partnerEndpointAllowedSuffixes(\n transport: HttpTransport,\n authorizedSuffixes: readonly string[],\n): readonly string[] {\n return endpointAllowedSuffixes(transport, authorizedSuffixes, {\n missingGuard:\n 'Partner endpoint requests require authorizePartner() or a UrlGuardedTransport with a locked URL guard before sending Partner tokens',\n unlockedGuard:\n 'Partner endpoint requests require a locked URL guard before sending Partner tokens',\n })\n}\n\nfunction validatePartnerRequestGroupsApiUrl(\n transport: HttpTransport,\n authorizedSuffixes: readonly string[],\n groupsApiUrl: string,\n): string {\n return validatePartnerEndpointUrl(\n groupsApiUrl,\n 'groupsApiUrl',\n partnerEndpointAllowedSuffixes(transport, authorizedSuffixes),\n )\n}\n\nfunction reserveTrialCreateAccountRequestBody(\n request: ReserveTrialCreateAccountRequestEntry | ReserveTrialCreateAccountRequest,\n): readonly ReserveTrialCreateAccountRequestEntry[] {\n const entries = Array.isArray(request) ? request : [request]\n return entries.map((entry) => ({\n email: entry.email,\n term: entry.term,\n storage: entry.storage,\n ...(entry.region != null ? { region: entry.region } : {}),\n }))\n}\n\n/**\n * Low-level client for Partner API authorization and endpoint bindings.\n */\nexport class PartnerRawClient {\n /** @internal */\n private readonly transport: HttpTransport\n private readonly allowCustomAuthorizeRealm: boolean\n private authorizedEndpointSuffixes: readonly string[]\n\n /**\n * Creates a new PartnerRawClient with the given transport.\n *\n * @param options - The constructor configuration.\n */\n constructor(options: PartnerRawClientOptions) {\n this.transport = options.transport\n this.allowCustomAuthorizeRealm = options.allowCustomAuthorizeRealm ?? false\n this.authorizedEndpointSuffixes = Array.from(options.authorizedPartnerEndpointSuffixes ?? [])\n }\n\n /**\n * Replaces the validated Partner endpoint host suffixes.\n *\n * @param suffixes - Host suffixes derived from Partner authorization.\n *\n * @internal\n */\n setAuthorizedEndpointSuffixes(suffixes: readonly string[]): void {\n this.authorizedEndpointSuffixes = Array.from(suffixes)\n }\n\n /**\n * Calls `b2_authorize_account` with Master Application Key credentials and\n * normalizes the Partner/Backup suites into a Partner-specific auth shape.\n *\n * The Partner API documentation currently shows the v3 authorize path, so\n * this method intentionally uses `/b2api/v3/b2_authorize_account` while the\n * storage raw client keeps using v4.\n *\n * @param masterKeyId - The Master Application Key ID for authentication.\n * @param masterKey - The Master Application Key secret.\n * @param realmUrl - The B2 realm URL to authenticate against.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The normalized Partner authorization response.\n *\n * @throws B2RealmConfigurationError if the realm URL is unsafe for Master Application Key credentials.\n * @throws B2PartnerAuthorizationError if the response omits or returns unsafe Partner endpoint data.\n */\n async authorizePartner(\n masterKeyId: string,\n masterKey: string,\n realmUrl = DEFAULT_PARTNER_REALM_URL,\n options?: PartnerRawRequestOptions,\n ): Promise<PartnerAuthorizeResponse> {\n assertSecureRealmUrl(realmUrl)\n assertVerifiedPartnerAuthorizeRealm(realmUrl, this.allowCustomAuthorizeRealm)\n const response = await this.transport.send({\n url: b2Url(realmUrl, { ...PARTNER_API_V3, endpoint: 'b2_authorize_account' }),\n method: 'GET',\n headers: {\n Authorization: `Basic ${btoa(`${masterKeyId}:${masterKey}`)}`,\n },\n ...(options?.signal !== undefined ? { signal: options.signal } : {}),\n ...(options?.retry !== undefined ? { retry: options.retry } : {}),\n })\n const auth = normalizePartnerAuthorizeResponse(\n await response.json<WirePartnerAuthorizeResponse>(),\n realmUrl,\n this.allowCustomAuthorizeRealm,\n )\n const suffixes = derivePartnerAllowedSuffixes(auth, realmUrl)\n this.setAuthorizedEndpointSuffixes(suffixes)\n lockTransportUrlGuard(this.transport, suffixes)\n return auth\n }\n\n /**\n * Calls {@link https://www.backblaze.com/apidocs/b2-create-group-member | b2_create_group_member}.\n *\n * The Partner API creates a new Backblaze account for an email address that\n * is not already a Backblaze account and adds that account to the managed\n * group. The wire response is a JSON array.\n *\n * @param groupsApiUrl - The Partner API base URL from `authorizePartner`.\n * @param authToken - The Partner API authorization token.\n * @param request - The group-member creation request body.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The created member result array, including the member application key.\n */\n async createGroupMember(\n groupsApiUrl: string,\n authToken: string,\n request: CreateGroupMemberRequest,\n options?: PartnerRawRequestOptions,\n ): Promise<CreateGroupMemberResponse> {\n const response = await this.postJson<CreateGroupMemberResponse>(\n groupsApiUrl,\n authToken,\n 'b2_create_group_member',\n {\n adminAccountId: request.adminAccountId,\n groupId: request.groupId,\n memberEmail: request.memberEmail,\n ...(request.region != null ? { region: request.region } : {}),\n },\n nonRetryingMutationRequestOptions(options),\n )\n return redactCreateGroupMemberResponse(response)\n }\n\n /**\n * Calls {@link https://www.backblaze.com/apidocs/b2-eject-group-member | b2_eject_group_member}.\n *\n * Ejection removes the member account from the group but does not delete the\n * Backblaze account. The wire response is a single JSON object.\n *\n * @param groupsApiUrl - The Partner API base URL from `authorizePartner`.\n * @param authToken - The Partner API authorization token.\n * @param request - The group-member ejection request body.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The ejected member object.\n */\n async ejectGroupMember(\n groupsApiUrl: string,\n authToken: string,\n request: EjectGroupMemberRequest,\n options?: PartnerRawRequestOptions,\n ): Promise<EjectGroupMemberResponse> {\n return this.postJson<EjectGroupMemberResponse>(\n groupsApiUrl,\n authToken,\n 'b2_eject_group_member',\n {\n adminAccountId: request.adminAccountId,\n groupId: request.groupId,\n memberAccountId: request.memberAccountId,\n ...(request.email !== undefined ? { email: request.email } : {}),\n },\n nonRetryingMutationRequestOptions(options),\n )\n }\n\n /**\n * Calls {@link https://www.backblaze.com/apidocs/b2-reserve-trial-create-account | b2_reserve_trial_create_account}.\n *\n * The Partner API creates one or more new Backblaze B2 accounts and starts\n * B2 Reserve trials for them. Backblaze documents both the wire request and\n * the success response as JSON arrays. The array form must include at least\n * one request entry. For convenience, this raw binding intentionally accepts\n * one request entry for the one-account case and always sends an array on the\n * wire.\n *\n * Each email address must not already be a Backblaze account. `term` is the\n * trial duration in days, documented as 7 through 30 inclusive. `storage` is\n * the requested storage in TB, documented as 1 through 50 inclusive.\n *\n * This operation is non-idempotent and creates billable accounts. Automatic\n * retries and expired-token reauthorization are disabled; long-lived batch\n * callers must catch auth expiry, reauthorize, and then decide whether to\n * issue a new request. A network or timeout failure after the server has\n * processed the request may still have created one or more accounts, and the\n * application keys from a lost response are not recoverable from B2. Bulk\n * callers should reconcile account state out of band, such as through Partner\n * account listing, before re-issuing the same batch.\n *\n * @param groupsApiUrl - The Partner API base URL from `authorizePartner`. The authorize response currently exposes the shared Partner endpoint base as `groupsApiUrl`.\n * @param authToken - The Partner API authorization token.\n * @param request - One reserve-trial account request, or one or more entries.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The created reserve-trial account result array.\n *\n * @experimental Partner API surface; shape may change as the Partner API docs evolve.\n */\n async reserveTrialCreateAccount(\n groupsApiUrl: string,\n authToken: string,\n request: ReserveTrialCreateAccountRequestEntry | ReserveTrialCreateAccountRequest,\n options?: PartnerRawRequestOptions,\n ): Promise<ReserveTrialCreateAccountResponse> {\n const response = await this.postJson<ReserveTrialCreateAccountResponse>(\n groupsApiUrl,\n authToken,\n 'b2_reserve_trial_create_account',\n reserveTrialCreateAccountRequestBody(request),\n nonRetryingMutationRequestOptions(options),\n )\n return redactReserveTrialCreateAccountResponse(response)\n }\n\n /**\n * Calls {@link https://www.backblaze.com/apidocs/b2-list-groups | b2_list_groups}.\n *\n * Uses the documented canonical GET form. The wire response is a single JSON\n * object that surfaces `nextGroupId` for cursor-based pagination.\n *\n * @param groupsApiUrl - The Partner API base URL from `authorizePartner`.\n * @param authToken - The Partner API authorization token.\n * @param request - The group listing query parameters.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The groups page object.\n */\n async listGroups(\n groupsApiUrl: string,\n authToken: string,\n request: ListGroupsRequest,\n options?: PartnerRawRequestOptions,\n ): Promise<ListGroupsResponse> {\n return this.getJson<ListGroupsResponse>(\n groupsApiUrl,\n authToken,\n 'b2_list_groups',\n {\n adminAccountId: request.adminAccountId,\n ...(request.groupName !== undefined ? { groupName: request.groupName } : {}),\n ...(request.startGroupId !== undefined ? { startGroupId: request.startGroupId } : {}),\n ...(request.maxGroupCount !== undefined ? { maxGroupCount: request.maxGroupCount } : {}),\n },\n options,\n )\n }\n\n /**\n * Calls {@link https://www.backblaze.com/apidocs/b2-list-group-members | b2_list_group_members}.\n *\n * Uses the documented canonical GET form. The wire response is a JSON array\n * whose result objects surface `nextEmail` for cursor-based pagination.\n *\n * @param groupsApiUrl - The Partner API base URL from `authorizePartner`.\n * @param authToken - The Partner API authorization token.\n * @param request - The member listing query parameters.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The group-member page result array.\n */\n async listGroupMembers(\n groupsApiUrl: string,\n authToken: string,\n request: ListGroupMembersRequest,\n options?: PartnerRawRequestOptions,\n ): Promise<ListGroupMembersResponse> {\n return this.getJson<ListGroupMembersResponse>(\n groupsApiUrl,\n authToken,\n 'b2_list_group_members',\n {\n adminAccountId: request.adminAccountId,\n groupId: request.groupId,\n ...(request.startEmail !== undefined ? { startEmail: request.startEmail } : {}),\n ...(request.maxMemberCount !== undefined ? { maxMemberCount: request.maxMemberCount } : {}),\n },\n options,\n )\n }\n\n /**\n * Sends a JSON GET request to the specified Partner API endpoint.\n * @param groupsApiUrl - The Partner API base URL.\n * @param authToken - The Partner API authorization token.\n * @param endpoint - The Partner API endpoint name.\n * @param query - The query-string parameters.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The parsed JSON response.\n */\n private async getJson<T>(\n groupsApiUrl: string,\n authToken: string,\n endpoint: string,\n query: QueryParams,\n options?: PartnerRawRequestOptions,\n ): Promise<T> {\n const safeGroupsApiUrl = validatePartnerRequestGroupsApiUrl(\n this.transport,\n this.authorizedEndpointSuffixes,\n groupsApiUrl,\n )\n const response = await this.transport.send({\n url: withQueryString(b2Url(safeGroupsApiUrl, { ...PARTNER_API_V3, endpoint }), query),\n method: 'GET',\n headers: {\n Authorization: authToken,\n },\n ...(options?.signal !== undefined ? { signal: options.signal } : {}),\n ...(options?.retry !== undefined ? { retry: options.retry } : {}),\n })\n return response.json<T>()\n }\n\n /**\n * Sends a JSON POST request to the specified Partner API endpoint.\n * @param groupsApiUrl - The Partner API base URL.\n * @param authToken - The Partner API authorization token.\n * @param endpoint - The Partner API endpoint name.\n * @param body - The JSON request body.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The parsed JSON response.\n */\n private async postJson<T>(\n groupsApiUrl: string,\n authToken: string,\n endpoint: string,\n body: unknown,\n options?: PartnerRawRequestOptions,\n ): Promise<T> {\n const safeGroupsApiUrl = validatePartnerRequestGroupsApiUrl(\n this.transport,\n this.authorizedEndpointSuffixes,\n groupsApiUrl,\n )\n const response = await this.transport.send({\n url: b2Url(safeGroupsApiUrl, { ...PARTNER_API_V3, endpoint }),\n method: 'POST',\n headers: {\n Authorization: authToken,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n ...(options?.signal !== undefined ? { signal: options.signal } : {}),\n ...(options?.retry !== undefined ? { retry: options.retry } : {}),\n })\n return response.json<T>()\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"raw.cjs","names":[],"sources":["../../src/partner/raw.ts"],"sourcesContent":["import { assertSecureRealmUrl } from '../auth/realms.ts'\nimport { B2PartnerAuthorizationError, B2RealmConfigurationError } from '../errors/index.ts'\nimport type { PartnerNonIdempotentMutationEndpoint } from '../http/non-idempotent-mutations.ts'\nimport type { RetryOptions } from '../http/retry.ts'\nimport {\n getTransportUrlGuard,\n type HttpTransport,\n type UrlGuardedTransport,\n} from '../http/transport.ts'\nimport { hostMatchesAllowedSuffix } from '../http/url-guard.ts'\nimport { type B2EndpointUrlOptions, b2Url } from '../raw/url.ts'\nimport { accountId, partnerToken } from '../types/ids.ts'\nimport type {\n CreateGroupMemberRequest,\n CreateGroupMemberResponse,\n EjectGroupMemberRequest,\n EjectGroupMemberResponse,\n ListGroupMembersRequest,\n ListGroupMembersResponse,\n ListGroupsRequest,\n ListGroupsResponse,\n PartnerApiInfo,\n PartnerAuthorizeResponse,\n PartnerBackupApiInfo,\n PartnerGroupsApiInfo,\n ReserveTrialCreateAccountRequest,\n ReserveTrialCreateAccountResponse,\n} from '../types/partner.ts'\nimport { validatePartnerAuthorizeResponseShape } from './auth-shape.ts'\nimport {\n endpointAllowedSuffixes,\n nonRetryingMutationRequestOptions,\n type QueryParams,\n validatePartnerEndpointUrl,\n withQueryString,\n} from './endpoint-url.ts'\nimport {\n redactCreateGroupMemberResponse,\n redactPartnerAuthorizeResponse,\n redactReserveTrialCreateAccountResponse,\n} from './redaction.ts'\n\nconst PARTNER_API_PREFIX = 'b2api'\nconst PARTNER_AUTHORIZE_API: B2EndpointUrlOptions = {\n prefix: PARTNER_API_PREFIX,\n version: 'v3',\n}\nconst PARTNER_GROUPS_API: B2EndpointUrlOptions = {\n prefix: PARTNER_API_PREFIX,\n version: 'v4',\n}\nconst DEFAULT_PARTNER_REALM_URL = 'https://api.backblazeb2.com'\nconst PRODUCTION_HOST_SUFFIX = 'backblazeb2.com'\nconst PRODUCTION_ENDPOINT_HOST_SUFFIX = 'backblaze.com'\nconst STAGING_HOST_SUFFIX = 'backblaze.net'\nconst VERIFIED_PARTNER_AUTHORIZE_REALM_ORIGINS = new Set([\n 'https://api.backblazeb2.com',\n 'https://api.backblaze.net',\n])\n\n/** Configuration for constructing a {@link PartnerRawClient}. */\nexport interface PartnerRawClientOptions {\n /**\n * The HTTP transport used to send requests.\n *\n * Partner endpoint calls validate URLs against suffixes recorded by\n * `authorizePartner()`. A rehydrated client that skips authorization must use\n * `authorizedPartnerEndpointSuffixes` or a {@link UrlGuardedTransport} with a\n * locked `urlGuard`. Because Partner authorize responses redact\n * `authorizationToken` under `JSON.stringify`, durable caches should persist\n * `partnerAuthorizeResponseForPersistence(auth)` only to encrypted or\n * otherwise credential-grade storage, or use another secure token-preserving\n * representation.\n */\n readonly transport: HttpTransport\n /**\n * Validated Partner endpoint host suffixes restored from cached\n * authorization. Facades normally manage this after authorization; direct raw\n * clients can pass suffixes derived from trusted Partner authorization when\n * rehydrating an auth cache. Do not derive this cache with\n * `JSON.stringify(authorizePartner())`, which intentionally stores a redacted\n * token placeholder instead of a usable Partner token. Rehydrating that\n * placeholder fails fast.\n */\n readonly authorizedPartnerEndpointSuffixes?: readonly string[]\n /**\n * Allow direct custom authorize realms for tests or private proxies.\n * Leave disabled unless the configured host is trusted with the Master Application Key.\n */\n readonly allowCustomAuthorizeRealm?: boolean\n}\n\n/** Optional controls for raw Partner API requests. */\nexport interface PartnerRawRequestOptions {\n /** Abort signal for cancelling the request. */\n readonly signal?: AbortSignal\n /** Per-request retry override. */\n readonly retry?: Partial<RetryOptions>\n}\n\ninterface WirePartnerAuthorizeResponse {\n readonly accountId: string\n readonly authorizationToken: string\n readonly apiInfo: PartnerApiInfo\n readonly applicationKeyExpirationTimestamp: number | null\n}\n\nfunction assertVerifiedPartnerAuthorizeRealm(realmUrl: string, allowCustomAuthorizeRealm: boolean) {\n if (allowCustomAuthorizeRealm) return\n\n const realm = new URL(realmUrl)\n if (VERIFIED_PARTNER_AUTHORIZE_REALM_ORIGINS.has(realm.origin)) return\n\n throw new B2RealmConfigurationError(\n `refusing to send Master Application Key credentials to unverified Partner authorize realm: ${realm.origin}`,\n )\n}\n\nfunction endpointAllowedSuffixesForRealm(\n realmUrl: string,\n allowCustomAuthorizeRealm: boolean,\n): readonly string[] {\n const realmHost = new URL(realmUrl).hostname.toLowerCase()\n if (hostMatchesAllowedSuffix(realmHost, PRODUCTION_HOST_SUFFIX)) {\n return [PRODUCTION_ENDPOINT_HOST_SUFFIX, PRODUCTION_HOST_SUFFIX]\n }\n if (hostMatchesAllowedSuffix(realmHost, STAGING_HOST_SUFFIX)) return [STAGING_HOST_SUFFIX]\n return allowCustomAuthorizeRealm ? [authorizeRealmAllowedSuffix(realmUrl)] : [realmHost]\n}\n\nfunction authorizeRealmAllowedSuffix(realmUrl: string): string {\n const host = new URL(realmUrl).hostname.toLowerCase()\n if (hostMatchesAllowedSuffix(host, PRODUCTION_HOST_SUFFIX)) return PRODUCTION_HOST_SUFFIX\n if (hostMatchesAllowedSuffix(host, STAGING_HOST_SUFFIX)) return STAGING_HOST_SUFFIX\n if (hostMatchesAllowedSuffix(host, PRODUCTION_ENDPOINT_HOST_SUFFIX)) {\n return PRODUCTION_ENDPOINT_HOST_SUFFIX\n }\n return host\n}\n\nfunction endpointAllowedSuffix(url: string): string {\n const host = new URL(url).hostname.toLowerCase()\n if (hostMatchesAllowedSuffix(host, PRODUCTION_HOST_SUFFIX)) return PRODUCTION_HOST_SUFFIX\n if (hostMatchesAllowedSuffix(host, STAGING_HOST_SUFFIX)) return STAGING_HOST_SUFFIX\n if (hostMatchesAllowedSuffix(host, PRODUCTION_ENDPOINT_HOST_SUFFIX)) {\n return PRODUCTION_ENDPOINT_HOST_SUFFIX\n }\n return host\n}\n\nfunction normalizeGroupsApi(\n groupsApi: PartnerGroupsApiInfo,\n allowedSuffixes: readonly string[],\n): PartnerGroupsApiInfo {\n return {\n ...groupsApi,\n groupsApiUrl: validatePartnerEndpointUrl(\n groupsApi.groupsApiUrl,\n 'groupsApiUrl',\n allowedSuffixes,\n ),\n capabilities: [...(groupsApi.capabilities ?? [])],\n infoType: 'groupsApi',\n }\n}\n\nfunction normalizeBackupApi(\n backupApi: PartnerBackupApiInfo,\n allowedSuffixes: readonly string[],\n): PartnerBackupApiInfo {\n return {\n ...backupApi,\n backupApiUrl: validatePartnerEndpointUrl(\n backupApi.backupApiUrl,\n 'backupApiUrl',\n allowedSuffixes,\n ),\n capabilities: [...(backupApi.capabilities ?? [])],\n infoType: 'backupApi',\n }\n}\n\nfunction normalizePartnerAuthorizeResponse(\n response: WirePartnerAuthorizeResponse,\n realmUrl: string,\n allowCustomAuthorizeRealm: boolean,\n): PartnerAuthorizeResponse {\n const { groupsApi, backupApi } = response.apiInfo\n if (groupsApi === undefined && backupApi === undefined) {\n throw new B2PartnerAuthorizationError(\n 'Partner authorize response did not include apiInfo.groupsApi or apiInfo.backupApi',\n )\n }\n\n const allowedSuffixes = endpointAllowedSuffixesForRealm(realmUrl, allowCustomAuthorizeRealm)\n const normalizedGroupsApi =\n groupsApi !== undefined ? normalizeGroupsApi(groupsApi, allowedSuffixes) : undefined\n const normalizedBackupApi =\n backupApi !== undefined ? normalizeBackupApi(backupApi, allowedSuffixes) : undefined\n const apiInfo: PartnerApiInfo = {\n ...(response.apiInfo.storageApi !== undefined\n ? { storageApi: response.apiInfo.storageApi }\n : {}),\n ...(normalizedGroupsApi !== undefined ? { groupsApi: normalizedGroupsApi } : {}),\n ...(normalizedBackupApi !== undefined ? { backupApi: normalizedBackupApi } : {}),\n }\n const normalized: PartnerAuthorizeResponse = {\n accountId: accountId(response.accountId),\n authorizationToken: partnerToken(response.authorizationToken),\n apiInfo,\n ...(normalizedGroupsApi !== undefined\n ? { groupsApiUrl: normalizedGroupsApi.groupsApiUrl }\n : {}),\n ...(normalizedBackupApi !== undefined\n ? { backupApiUrl: normalizedBackupApi.backupApiUrl }\n : {}),\n ...(normalizedGroupsApi !== undefined\n ? { groupsCapabilities: normalizedGroupsApi.capabilities }\n : {}),\n ...(normalizedBackupApi !== undefined\n ? { backupCapabilities: normalizedBackupApi.capabilities }\n : {}),\n applicationKeyExpirationTimestamp: response.applicationKeyExpirationTimestamp,\n }\n\n validatePartnerAuthorizeResponseShape(normalized)\n return redactPartnerAuthorizeResponse(normalized)\n}\n\n/**\n * Derives the Partner authorize and endpoint host suffixes that may receive\n * Partner tokens after a trusted authorize response has been validated.\n *\n * @param auth - Normalized Partner authorize response.\n * @param realmUrl - Realm URL used for Partner authorization.\n *\n * @returns Sorted list of unique host suffixes to allow.\n *\n * @internal\n */\nexport function derivePartnerAllowedSuffixes(\n auth: PartnerAuthorizeResponse,\n realmUrl: string,\n): readonly string[] {\n const suffixes = new Set<string>([authorizeRealmAllowedSuffix(realmUrl)])\n if (auth.apiInfo.groupsApi !== undefined) {\n suffixes.add(endpointAllowedSuffix(auth.apiInfo.groupsApi.groupsApiUrl))\n }\n if (auth.apiInfo.backupApi !== undefined) {\n suffixes.add(endpointAllowedSuffix(auth.apiInfo.backupApi.backupApiUrl))\n }\n return Array.from(suffixes).sort()\n}\n\n/**\n * Validates cached Partner authorize endpoint URLs with the same realm policy\n * applied to fresh `authorizePartner()` responses and returns guard suffixes.\n *\n * @param auth - Cached Partner authorize response to validate.\n * @param realmUrl - Realm URL used for Partner authorization.\n * @param allowCustomAuthorizeRealm - Whether custom authorize realms are trusted.\n *\n * @returns Sorted list of host suffixes derived from the validated auth state.\n *\n * @throws B2PartnerAuthorizationError if the cached auth endpoints are unsafe.\n *\n * @internal\n */\nexport function validatePartnerAuthorizeResponseEndpoints(\n auth: PartnerAuthorizeResponse,\n realmUrl: string,\n allowCustomAuthorizeRealm: boolean,\n): readonly string[] {\n assertSecureRealmUrl(realmUrl)\n assertVerifiedPartnerAuthorizeRealm(realmUrl, allowCustomAuthorizeRealm)\n validatePartnerAuthorizeResponseShape(auth)\n\n const { groupsApi, backupApi } = auth.apiInfo\n const allowedSuffixes = endpointAllowedSuffixesForRealm(realmUrl, allowCustomAuthorizeRealm)\n if (groupsApi !== undefined) {\n validatePartnerEndpointUrl(groupsApi.groupsApiUrl, 'groupsApiUrl', allowedSuffixes)\n }\n if (backupApi !== undefined) {\n validatePartnerEndpointUrl(backupApi.backupApiUrl, 'backupApiUrl', allowedSuffixes)\n }\n\n return derivePartnerAllowedSuffixes(auth, realmUrl)\n}\n\nfunction lockTransportUrlGuard(transport: HttpTransport, allowedSuffixes: readonly string[]): void {\n const guard = getTransportUrlGuard(transport)\n if (guard === undefined) return\n\n const suffixes = new Set([...guard.getAllowedSuffixes(), ...allowedSuffixes])\n guard.setAllowedSuffixes(Array.from(suffixes).sort())\n}\n\nfunction partnerEndpointAllowedSuffixes(\n transport: HttpTransport,\n authorizedSuffixes: readonly string[],\n): readonly string[] {\n return endpointAllowedSuffixes(transport, authorizedSuffixes, {\n missingGuard:\n 'Partner endpoint requests require authorizePartner() or a UrlGuardedTransport with a locked URL guard before sending Partner tokens',\n unlockedGuard:\n 'Partner endpoint requests require a locked URL guard before sending Partner tokens',\n })\n}\n\nfunction validatePartnerRequestGroupsApiUrl(\n transport: HttpTransport,\n authorizedSuffixes: readonly string[],\n groupsApiUrl: string,\n): string {\n return validatePartnerEndpointUrl(\n groupsApiUrl,\n 'groupsApiUrl',\n partnerEndpointAllowedSuffixes(transport, authorizedSuffixes),\n )\n}\n\nfunction reserveTrialCreateAccountRequestBody(\n request: ReserveTrialCreateAccountRequest,\n): ReserveTrialCreateAccountRequest {\n if (Array.isArray(request)) {\n throw new TypeError('reserveTrialCreateAccount request must be a single account object.')\n }\n\n return {\n email: request.email,\n term: request.term,\n storage: request.storage,\n ...(request.region != null ? { region: request.region } : {}),\n }\n}\n\nfunction partnerAuthorizeUrl(realmUrl: string): string {\n return b2Url(realmUrl, { ...PARTNER_AUTHORIZE_API, endpoint: 'b2_authorize_account' })\n}\n\nfunction partnerGroupsEndpointUrl(groupsApiUrl: string, endpoint: string): string {\n return b2Url(groupsApiUrl, { ...PARTNER_GROUPS_API, endpoint })\n}\n\n/**\n * Low-level client for Partner API authorization and endpoint bindings.\n */\nexport class PartnerRawClient {\n /** @internal */\n private readonly transport: HttpTransport\n private readonly allowCustomAuthorizeRealm: boolean\n private authorizedEndpointSuffixes: readonly string[]\n\n /**\n * Creates a new PartnerRawClient with the given transport.\n *\n * @param options - The constructor configuration.\n */\n constructor(options: PartnerRawClientOptions) {\n this.transport = options.transport\n this.allowCustomAuthorizeRealm = options.allowCustomAuthorizeRealm ?? false\n this.authorizedEndpointSuffixes = Array.from(options.authorizedPartnerEndpointSuffixes ?? [])\n }\n\n /**\n * Replaces the validated Partner endpoint host suffixes.\n *\n * @param suffixes - Host suffixes derived from Partner authorization.\n *\n * @internal\n */\n setAuthorizedEndpointSuffixes(suffixes: readonly string[]): void {\n this.authorizedEndpointSuffixes = Array.from(suffixes)\n }\n\n /**\n * Calls `b2_authorize_account` with Master Application Key credentials and\n * normalizes the Partner/Backup suites into a Partner-specific auth shape.\n *\n * The Partner API documentation currently shows the v3 authorize path, so\n * this method intentionally uses `/b2api/v3/b2_authorize_account` while the\n * storage raw client keeps using v4.\n *\n * @param masterKeyId - The Master Application Key ID for authentication.\n * @param masterKey - The Master Application Key secret.\n * @param realmUrl - The B2 realm URL to authenticate against.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The normalized Partner authorization response.\n *\n * @throws B2RealmConfigurationError if the realm URL is unsafe for Master Application Key credentials.\n * @throws B2PartnerAuthorizationError if the response omits or returns unsafe Partner endpoint data.\n */\n async authorizePartner(\n masterKeyId: string,\n masterKey: string,\n realmUrl = DEFAULT_PARTNER_REALM_URL,\n options?: PartnerRawRequestOptions,\n ): Promise<PartnerAuthorizeResponse> {\n assertSecureRealmUrl(realmUrl)\n assertVerifiedPartnerAuthorizeRealm(realmUrl, this.allowCustomAuthorizeRealm)\n const response = await this.transport.send({\n url: partnerAuthorizeUrl(realmUrl),\n method: 'GET',\n headers: {\n Authorization: `Basic ${btoa(`${masterKeyId}:${masterKey}`)}`,\n },\n ...(options?.signal !== undefined ? { signal: options.signal } : {}),\n ...(options?.retry !== undefined ? { retry: options.retry } : {}),\n })\n const auth = normalizePartnerAuthorizeResponse(\n await response.json<WirePartnerAuthorizeResponse>(),\n realmUrl,\n this.allowCustomAuthorizeRealm,\n )\n const suffixes = derivePartnerAllowedSuffixes(auth, realmUrl)\n this.setAuthorizedEndpointSuffixes(suffixes)\n lockTransportUrlGuard(this.transport, suffixes)\n return auth\n }\n\n /**\n * Calls {@link https://www.backblaze.com/apidocs/b2-create-group-member | b2_create_group_member}.\n *\n * The Partner API creates a new Backblaze account for an email address that\n * is not already a Backblaze account and adds that account to the managed\n * group. The wire response is a single JSON object.\n *\n * @param groupsApiUrl - The Partner API base URL from `authorizePartner`.\n * @param authToken - The Partner API authorization token.\n * @param request - The group-member creation request body.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The created member result, including the member application key.\n */\n async createGroupMember(\n groupsApiUrl: string,\n authToken: string,\n request: CreateGroupMemberRequest,\n options?: PartnerRawRequestOptions,\n ): Promise<CreateGroupMemberResponse> {\n const response = await this.postNonRetryingMutationJson<CreateGroupMemberResponse>(\n groupsApiUrl,\n authToken,\n 'b2_create_group_member',\n {\n adminAccountId: request.adminAccountId,\n groupId: request.groupId,\n memberEmail: request.memberEmail,\n ...(request.region != null ? { region: request.region } : {}),\n },\n options,\n )\n return redactCreateGroupMemberResponse(response)\n }\n\n /**\n * Calls {@link https://www.backblaze.com/apidocs/b2-eject-group-member | b2_eject_group_member}.\n *\n * Ejection removes the member account from the group but does not delete the\n * Backblaze account. The wire response is a single JSON object.\n *\n * @param groupsApiUrl - The Partner API base URL from `authorizePartner`.\n * @param authToken - The Partner API authorization token.\n * @param request - The group-member ejection request body.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The ejected member object.\n */\n async ejectGroupMember(\n groupsApiUrl: string,\n authToken: string,\n request: EjectGroupMemberRequest,\n options?: PartnerRawRequestOptions,\n ): Promise<EjectGroupMemberResponse> {\n return this.postNonRetryingMutationJson<EjectGroupMemberResponse>(\n groupsApiUrl,\n authToken,\n 'b2_eject_group_member',\n {\n adminAccountId: request.adminAccountId,\n groupId: request.groupId,\n memberAccountId: request.memberAccountId,\n ...(request.email !== undefined ? { email: request.email } : {}),\n },\n options,\n )\n }\n\n /**\n * Calls {@link https://www.backblaze.com/apidocs/b2-reserve-trial-create-account | b2_reserve_trial_create_account}.\n *\n * The Partner API creates one new Backblaze B2 account and starts a B2\n * Reserve trial for it. The wire request and success response are single\n * JSON objects.\n *\n * Each email address must not already be a Backblaze account. `term` is the\n * trial duration in days, documented as 7 through 30 inclusive. `storage` is\n * the requested storage in TB, documented as 1 through 50 inclusive.\n *\n * This operation is non-idempotent and creates billable accounts. Automatic\n * retries and expired-token reauthorization are disabled; long-lived\n * callers must catch auth expiry, reauthorize, and then decide whether to\n * issue a new request. A network or timeout failure after the server has\n * processed the request may still have created an account, and the\n * application key from a lost response is not recoverable from B2. Callers\n * should reconcile account state out of band, such as through Partner\n * account listing, before re-issuing a request for the same email address.\n *\n * @param groupsApiUrl - The Partner API base URL from `authorizePartner`. The authorize response currently exposes the shared Partner endpoint base as `groupsApiUrl`.\n * @param authToken - The Partner API authorization token.\n * @param request - Email, term, storage, and optional region for the account to create.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The created reserve-trial account result.\n *\n * @experimental Partner API surface; shape may change as the Partner API docs evolve.\n */\n async reserveTrialCreateAccount(\n groupsApiUrl: string,\n authToken: string,\n request: ReserveTrialCreateAccountRequest,\n options?: PartnerRawRequestOptions,\n ): Promise<ReserveTrialCreateAccountResponse> {\n const response = await this.postNonRetryingMutationJson<ReserveTrialCreateAccountResponse>(\n groupsApiUrl,\n authToken,\n 'b2_reserve_trial_create_account',\n reserveTrialCreateAccountRequestBody(request),\n options,\n )\n return redactReserveTrialCreateAccountResponse(response)\n }\n\n /**\n * Calls {@link https://www.backblaze.com/apidocs/b2-list-groups | b2_list_groups}.\n *\n * Uses the documented canonical GET form. The wire response is a single JSON\n * object that surfaces `nextGroupId` for cursor-based pagination.\n *\n * @param groupsApiUrl - The Partner API base URL from `authorizePartner`.\n * @param authToken - The Partner API authorization token.\n * @param request - The group listing query parameters.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The groups page object.\n */\n async listGroups(\n groupsApiUrl: string,\n authToken: string,\n request: ListGroupsRequest,\n options?: PartnerRawRequestOptions,\n ): Promise<ListGroupsResponse> {\n return this.getJson<ListGroupsResponse>(\n groupsApiUrl,\n authToken,\n 'b2_list_groups',\n {\n adminAccountId: request.adminAccountId,\n ...(request.groupName !== undefined ? { groupName: request.groupName } : {}),\n ...(request.startGroupId !== undefined ? { startGroupId: request.startGroupId } : {}),\n ...(request.maxGroupCount !== undefined ? { maxGroupCount: request.maxGroupCount } : {}),\n },\n options,\n )\n }\n\n /**\n * Calls {@link https://www.backblaze.com/apidocs/b2-list-group-members | b2_list_group_members}.\n *\n * Uses the documented canonical GET form. The wire response is a JSON array\n * whose result objects surface `nextEmail` for cursor-based pagination.\n *\n * @param groupsApiUrl - The Partner API base URL from `authorizePartner`.\n * @param authToken - The Partner API authorization token.\n * @param request - The member listing query parameters.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The group-member page result array.\n */\n async listGroupMembers(\n groupsApiUrl: string,\n authToken: string,\n request: ListGroupMembersRequest,\n options?: PartnerRawRequestOptions,\n ): Promise<ListGroupMembersResponse> {\n return this.getJson<ListGroupMembersResponse>(\n groupsApiUrl,\n authToken,\n 'b2_list_group_members',\n {\n adminAccountId: request.adminAccountId,\n groupId: request.groupId,\n ...(request.startEmail !== undefined ? { startEmail: request.startEmail } : {}),\n ...(request.maxMemberCount !== undefined ? { maxMemberCount: request.maxMemberCount } : {}),\n },\n options,\n )\n }\n\n /**\n * Sends a JSON GET request to the specified Partner API endpoint.\n * @param groupsApiUrl - The Partner API base URL.\n * @param authToken - The Partner API authorization token.\n * @param endpoint - The Partner API endpoint name.\n * @param query - The query-string parameters.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The parsed JSON response.\n */\n private async getJson<T>(\n groupsApiUrl: string,\n authToken: string,\n endpoint: string,\n query: QueryParams,\n options?: PartnerRawRequestOptions,\n ): Promise<T> {\n const safeGroupsApiUrl = validatePartnerRequestGroupsApiUrl(\n this.transport,\n this.authorizedEndpointSuffixes,\n groupsApiUrl,\n )\n const response = await this.transport.send({\n url: withQueryString(partnerGroupsEndpointUrl(safeGroupsApiUrl, endpoint), query),\n method: 'GET',\n headers: {\n Authorization: authToken,\n },\n ...(options?.signal !== undefined ? { signal: options.signal } : {}),\n ...(options?.retry !== undefined ? { retry: options.retry } : {}),\n })\n return response.json<T>()\n }\n\n /**\n * Sends a non-retrying JSON mutation POST request to the specified Partner API endpoint.\n * @param groupsApiUrl - The Partner API base URL.\n * @param authToken - The Partner API authorization token.\n * @param endpoint - The Partner API endpoint name.\n * @param body - The JSON request body.\n * @param options - Optional abort and per-request retry settings.\n *\n * @returns The parsed JSON response.\n */\n private async postNonRetryingMutationJson<T>(\n groupsApiUrl: string,\n authToken: string,\n endpoint: PartnerNonIdempotentMutationEndpoint,\n body: unknown,\n options?: PartnerRawRequestOptions,\n ): Promise<T> {\n const safeGroupsApiUrl = validatePartnerRequestGroupsApiUrl(\n this.transport,\n this.authorizedEndpointSuffixes,\n groupsApiUrl,\n )\n const requestOptions = nonRetryingMutationRequestOptions(options)\n const response = await this.transport.send({\n url: partnerGroupsEndpointUrl(safeGroupsApiUrl, endpoint),\n method: 'POST',\n headers: {\n Authorization: authToken,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n ...(requestOptions.signal !== undefined ? { signal: requestOptions.signal } : {}),\n ...(requestOptions.idempotent !== undefined ? { idempotent: requestOptions.idempotent } : {}),\n ...(requestOptions.retry !== undefined ? { retry: requestOptions.retry } : {}),\n })\n return response.json<T>()\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { RetryOptions } from '../http/retry.js';
2
2
  import { HttpTransport } from '../http/transport.js';
3
- import { CreateGroupMemberRequest, CreateGroupMemberResponse, EjectGroupMemberRequest, EjectGroupMemberResponse, ListGroupMembersRequest, ListGroupMembersResponse, ListGroupsRequest, ListGroupsResponse, PartnerAuthorizeResponse, ReserveTrialCreateAccountRequest, ReserveTrialCreateAccountRequestEntry, ReserveTrialCreateAccountResponse } from '../types/partner.js';
3
+ import { CreateGroupMemberRequest, CreateGroupMemberResponse, EjectGroupMemberRequest, EjectGroupMemberResponse, ListGroupMembersRequest, ListGroupMembersResponse, ListGroupsRequest, ListGroupsResponse, PartnerAuthorizeResponse, ReserveTrialCreateAccountRequest, ReserveTrialCreateAccountResponse } from '../types/partner.js';
4
4
  /** Configuration for constructing a {@link PartnerRawClient}. */
5
5
  export interface PartnerRawClientOptions {
6
6
  /**
@@ -112,14 +112,14 @@ export declare class PartnerRawClient {
112
112
  *
113
113
  * The Partner API creates a new Backblaze account for an email address that
114
114
  * is not already a Backblaze account and adds that account to the managed
115
- * group. The wire response is a JSON array.
115
+ * group. The wire response is a single JSON object.
116
116
  *
117
117
  * @param groupsApiUrl - The Partner API base URL from `authorizePartner`.
118
118
  * @param authToken - The Partner API authorization token.
119
119
  * @param request - The group-member creation request body.
120
120
  * @param options - Optional abort and per-request retry settings.
121
121
  *
122
- * @returns The created member result array, including the member application key.
122
+ * @returns The created member result, including the member application key.
123
123
  */
124
124
  createGroupMember(groupsApiUrl: string, authToken: string, request: CreateGroupMemberRequest, options?: PartnerRawRequestOptions): Promise<CreateGroupMemberResponse>;
125
125
  /**
@@ -139,36 +139,33 @@ export declare class PartnerRawClient {
139
139
  /**
140
140
  * Calls {@link https://www.backblaze.com/apidocs/b2-reserve-trial-create-account | b2_reserve_trial_create_account}.
141
141
  *
142
- * The Partner API creates one or more new Backblaze B2 accounts and starts
143
- * B2 Reserve trials for them. Backblaze documents both the wire request and
144
- * the success response as JSON arrays. The array form must include at least
145
- * one request entry. For convenience, this raw binding intentionally accepts
146
- * one request entry for the one-account case and always sends an array on the
147
- * wire.
142
+ * The Partner API creates one new Backblaze B2 account and starts a B2
143
+ * Reserve trial for it. The wire request and success response are single
144
+ * JSON objects.
148
145
  *
149
146
  * Each email address must not already be a Backblaze account. `term` is the
150
147
  * trial duration in days, documented as 7 through 30 inclusive. `storage` is
151
148
  * the requested storage in TB, documented as 1 through 50 inclusive.
152
149
  *
153
150
  * This operation is non-idempotent and creates billable accounts. Automatic
154
- * retries and expired-token reauthorization are disabled; long-lived batch
151
+ * retries and expired-token reauthorization are disabled; long-lived
155
152
  * callers must catch auth expiry, reauthorize, and then decide whether to
156
153
  * issue a new request. A network or timeout failure after the server has
157
- * processed the request may still have created one or more accounts, and the
158
- * application keys from a lost response are not recoverable from B2. Bulk
159
- * callers should reconcile account state out of band, such as through Partner
160
- * account listing, before re-issuing the same batch.
154
+ * processed the request may still have created an account, and the
155
+ * application key from a lost response is not recoverable from B2. Callers
156
+ * should reconcile account state out of band, such as through Partner
157
+ * account listing, before re-issuing a request for the same email address.
161
158
  *
162
159
  * @param groupsApiUrl - The Partner API base URL from `authorizePartner`. The authorize response currently exposes the shared Partner endpoint base as `groupsApiUrl`.
163
160
  * @param authToken - The Partner API authorization token.
164
- * @param request - One reserve-trial account request, or one or more entries.
161
+ * @param request - Email, term, storage, and optional region for the account to create.
165
162
  * @param options - Optional abort and per-request retry settings.
166
163
  *
167
- * @returns The created reserve-trial account result array.
164
+ * @returns The created reserve-trial account result.
168
165
  *
169
166
  * @experimental Partner API surface; shape may change as the Partner API docs evolve.
170
167
  */
171
- reserveTrialCreateAccount(groupsApiUrl: string, authToken: string, request: ReserveTrialCreateAccountRequestEntry | ReserveTrialCreateAccountRequest, options?: PartnerRawRequestOptions): Promise<ReserveTrialCreateAccountResponse>;
168
+ reserveTrialCreateAccount(groupsApiUrl: string, authToken: string, request: ReserveTrialCreateAccountRequest, options?: PartnerRawRequestOptions): Promise<ReserveTrialCreateAccountResponse>;
172
169
  /**
173
170
  * Calls {@link https://www.backblaze.com/apidocs/b2-list-groups | b2_list_groups}.
174
171
  *
@@ -209,7 +206,7 @@ export declare class PartnerRawClient {
209
206
  */
210
207
  private getJson;
211
208
  /**
212
- * Sends a JSON POST request to the specified Partner API endpoint.
209
+ * Sends a non-retrying JSON mutation POST request to the specified Partner API endpoint.
213
210
  * @param groupsApiUrl - The Partner API base URL.
214
211
  * @param authToken - The Partner API authorization token.
215
212
  * @param endpoint - The Partner API endpoint name.
@@ -218,6 +215,6 @@ export declare class PartnerRawClient {
218
215
  *
219
216
  * @returns The parsed JSON response.
220
217
  */
221
- private postJson;
218
+ private postNonRetryingMutationJson;
222
219
  }
223
220
  //# sourceMappingURL=raw.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"raw.d.ts","sourceRoot":"","sources":["../../src/partner/raw.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"raw.d.ts","sourceRoot":"","sources":["../../src/partner/raw.js"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,sBAAsB,CAAA;AAI7B,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,EACjB,kBAAkB,EAElB,wBAAwB,EAGxB,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,qBAAqB,CAAA;AAiC5B,iEAAiE;AACjE,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAA;IACjC;;;;;;;;OAQG;IACH,QAAQ,CAAC,iCAAiC,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9D;;;OAGG;IACH,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,CAAA;CAC7C;AAED,sDAAsD;AACtD,MAAM,WAAW,wBAAwB;IACvC,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,kCAAkC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CACvC;AAmID;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,wBAAwB,EAC9B,QAAQ,EAAE,MAAM,GACf,SAAS,MAAM,EAAE,CASnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yCAAyC,CACvD,IAAI,EAAE,wBAAwB,EAC9B,QAAQ,EAAE,MAAM,EAChB,yBAAyB,EAAE,OAAO,GACjC,SAAS,MAAM,EAAE,CAenB;AAyDD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAS;IACnD,OAAO,CAAC,0BAA0B,CAAmB;IAErD;;;;OAIG;gBACS,OAAO,EAAE,uBAAuB;IAM5C;;;;;;OAMG;IACH,6BAA6B,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAIhE;;;;;;;;;;;;;;;;;OAiBG;IACG,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,SAA4B,EACpC,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,wBAAwB,CAAC;IAuBpC;;;;;;;;;;;;;OAaG;IACG,iBAAiB,CACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,wBAAwB,EACjC,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,yBAAyB,CAAC;IAgBrC;;;;;;;;;;;;OAYG;IACG,gBAAgB,CACpB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,EAChC,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,wBAAwB,CAAC;IAepC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,yBAAyB,CAC7B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gCAAgC,EACzC,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,iCAAiC,CAAC;IAW7C;;;;;;;;;;;;OAYG;IACG,UAAU,CACd,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,kBAAkB,CAAC;IAe9B;;;;;;;;;;;;OAYG;IACG,gBAAgB,CACpB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,EAChC,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,wBAAwB,CAAC;IAepC;;;;;;;;;OASG;YACW,OAAO;IAwBrB;;;;;;;;;OASG;YACW,2BAA2B;CA2B1C"}
@@ -1,6 +1,6 @@
1
1
  import { RetryOptions } from '../http/retry.js';
2
2
  import { HttpTransport } from '../http/transport.js';
3
- import { CreateGroupMemberRequest, CreateGroupMemberResponse, EjectGroupMemberRequest, EjectGroupMemberResponse, ListGroupMembersRequest, ListGroupMembersResponse, ListGroupsRequest, ListGroupsResponse, PartnerAuthorizeResponse, ReserveTrialCreateAccountRequest, ReserveTrialCreateAccountRequestEntry, ReserveTrialCreateAccountResponse } from '../types/partner.js';
3
+ import { CreateGroupMemberRequest, CreateGroupMemberResponse, EjectGroupMemberRequest, EjectGroupMemberResponse, ListGroupMembersRequest, ListGroupMembersResponse, ListGroupsRequest, ListGroupsResponse, PartnerAuthorizeResponse, ReserveTrialCreateAccountRequest, ReserveTrialCreateAccountResponse } from '../types/partner.js';
4
4
  /** Configuration for constructing a {@link PartnerRawClient}. */
5
5
  export interface PartnerRawClientOptions {
6
6
  /**
@@ -112,14 +112,14 @@ export declare class PartnerRawClient {
112
112
  *
113
113
  * The Partner API creates a new Backblaze account for an email address that
114
114
  * is not already a Backblaze account and adds that account to the managed
115
- * group. The wire response is a JSON array.
115
+ * group. The wire response is a single JSON object.
116
116
  *
117
117
  * @param groupsApiUrl - The Partner API base URL from `authorizePartner`.
118
118
  * @param authToken - The Partner API authorization token.
119
119
  * @param request - The group-member creation request body.
120
120
  * @param options - Optional abort and per-request retry settings.
121
121
  *
122
- * @returns The created member result array, including the member application key.
122
+ * @returns The created member result, including the member application key.
123
123
  */
124
124
  createGroupMember(groupsApiUrl: string, authToken: string, request: CreateGroupMemberRequest, options?: PartnerRawRequestOptions): Promise<CreateGroupMemberResponse>;
125
125
  /**
@@ -139,36 +139,33 @@ export declare class PartnerRawClient {
139
139
  /**
140
140
  * Calls {@link https://www.backblaze.com/apidocs/b2-reserve-trial-create-account | b2_reserve_trial_create_account}.
141
141
  *
142
- * The Partner API creates one or more new Backblaze B2 accounts and starts
143
- * B2 Reserve trials for them. Backblaze documents both the wire request and
144
- * the success response as JSON arrays. The array form must include at least
145
- * one request entry. For convenience, this raw binding intentionally accepts
146
- * one request entry for the one-account case and always sends an array on the
147
- * wire.
142
+ * The Partner API creates one new Backblaze B2 account and starts a B2
143
+ * Reserve trial for it. The wire request and success response are single
144
+ * JSON objects.
148
145
  *
149
146
  * Each email address must not already be a Backblaze account. `term` is the
150
147
  * trial duration in days, documented as 7 through 30 inclusive. `storage` is
151
148
  * the requested storage in TB, documented as 1 through 50 inclusive.
152
149
  *
153
150
  * This operation is non-idempotent and creates billable accounts. Automatic
154
- * retries and expired-token reauthorization are disabled; long-lived batch
151
+ * retries and expired-token reauthorization are disabled; long-lived
155
152
  * callers must catch auth expiry, reauthorize, and then decide whether to
156
153
  * issue a new request. A network or timeout failure after the server has
157
- * processed the request may still have created one or more accounts, and the
158
- * application keys from a lost response are not recoverable from B2. Bulk
159
- * callers should reconcile account state out of band, such as through Partner
160
- * account listing, before re-issuing the same batch.
154
+ * processed the request may still have created an account, and the
155
+ * application key from a lost response is not recoverable from B2. Callers
156
+ * should reconcile account state out of band, such as through Partner
157
+ * account listing, before re-issuing a request for the same email address.
161
158
  *
162
159
  * @param groupsApiUrl - The Partner API base URL from `authorizePartner`. The authorize response currently exposes the shared Partner endpoint base as `groupsApiUrl`.
163
160
  * @param authToken - The Partner API authorization token.
164
- * @param request - One reserve-trial account request, or one or more entries.
161
+ * @param request - Email, term, storage, and optional region for the account to create.
165
162
  * @param options - Optional abort and per-request retry settings.
166
163
  *
167
- * @returns The created reserve-trial account result array.
164
+ * @returns The created reserve-trial account result.
168
165
  *
169
166
  * @experimental Partner API surface; shape may change as the Partner API docs evolve.
170
167
  */
171
- reserveTrialCreateAccount(groupsApiUrl: string, authToken: string, request: ReserveTrialCreateAccountRequestEntry | ReserveTrialCreateAccountRequest, options?: PartnerRawRequestOptions): Promise<ReserveTrialCreateAccountResponse>;
168
+ reserveTrialCreateAccount(groupsApiUrl: string, authToken: string, request: ReserveTrialCreateAccountRequest, options?: PartnerRawRequestOptions): Promise<ReserveTrialCreateAccountResponse>;
172
169
  /**
173
170
  * Calls {@link https://www.backblaze.com/apidocs/b2-list-groups | b2_list_groups}.
174
171
  *
@@ -209,7 +206,7 @@ export declare class PartnerRawClient {
209
206
  */
210
207
  private getJson;
211
208
  /**
212
- * Sends a JSON POST request to the specified Partner API endpoint.
209
+ * Sends a non-retrying JSON mutation POST request to the specified Partner API endpoint.
213
210
  * @param groupsApiUrl - The Partner API base URL.
214
211
  * @param authToken - The Partner API authorization token.
215
212
  * @param endpoint - The Partner API endpoint name.
@@ -218,6 +215,6 @@ export declare class PartnerRawClient {
218
215
  *
219
216
  * @returns The parsed JSON response.
220
217
  */
221
- private postJson;
218
+ private postNonRetryingMutationJson;
222
219
  }
223
220
  //# sourceMappingURL=raw.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"raw.d.ts","sourceRoot":"","sources":["../../src/partner/raw.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"raw.d.ts","sourceRoot":"","sources":["../../src/partner/raw.js"],"names":[],"mappings":"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"}