@postrun/js 2.11.0 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,6 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var z = require('zod');
4
+ var axios = require('axios');
5
+ var pRetry = require('p-retry');
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
4
8
 
5
9
  function _interopNamespace(e) {
6
10
  if (e && e.__esModule) return e;
@@ -21,6 +25,8 @@ function _interopNamespace(e) {
21
25
  }
22
26
 
23
27
  var z__namespace = /*#__PURE__*/_interopNamespace(z);
28
+ var axios__default = /*#__PURE__*/_interopDefault(axios);
29
+ var pRetry__default = /*#__PURE__*/_interopDefault(pRetry);
24
30
 
25
31
  // src/client/core/bodySerializer.gen.ts
26
32
  var jsonBodySerializer = {
@@ -7033,6 +7039,62 @@ var tokensMint = (options) => (options.client ?? client).post({
7033
7039
  // src/resources.ts
7034
7040
  var isPublished = (post) => post.status === "published";
7035
7041
  var failedVariants = (post) => post.variants.filter((variant) => variant.status === "failed");
7042
+ var UploadError = class extends Error {
7043
+ status;
7044
+ constructor(status, message) {
7045
+ super(message);
7046
+ this.name = "UploadError";
7047
+ this.status = status;
7048
+ }
7049
+ };
7050
+ function isTerminal(status) {
7051
+ return status >= 400 && status < 500 && status !== 429;
7052
+ }
7053
+ async function uploadToTarget(file, target, opts = {}) {
7054
+ const { onProgress, signal } = opts;
7055
+ async function putOnce() {
7056
+ try {
7057
+ await axios__default.default.request({
7058
+ method: target.method,
7059
+ url: target.url,
7060
+ data: file,
7061
+ headers: target.headers,
7062
+ signal,
7063
+ onUploadProgress: (event) => {
7064
+ if (event.total) {
7065
+ onProgress?.(event.loaded / event.total);
7066
+ }
7067
+ }
7068
+ });
7069
+ onProgress?.(1);
7070
+ } catch (error) {
7071
+ if (signal?.aborted) {
7072
+ throw error;
7073
+ }
7074
+ if (axios.isAxiosError(error)) {
7075
+ const status = error.response?.status ?? 0;
7076
+ throw new UploadError(
7077
+ status,
7078
+ status ? `Upload failed (HTTP ${status}).` : "Upload failed: network error."
7079
+ );
7080
+ }
7081
+ throw error;
7082
+ }
7083
+ }
7084
+ await pRetry__default.default(
7085
+ async () => {
7086
+ try {
7087
+ await putOnce();
7088
+ } catch (error) {
7089
+ if (error instanceof UploadError && isTerminal(error.status)) {
7090
+ throw new pRetry.AbortError(error);
7091
+ }
7092
+ throw error;
7093
+ }
7094
+ },
7095
+ { retries: opts.retries ?? 3, signal }
7096
+ );
7097
+ }
7036
7098
 
7037
7099
  // src/tiktok.ts
7038
7100
  function tiktokPrivacyLabel(value) {
@@ -7394,6 +7456,7 @@ exports.TIKTOK_CAPTION_MAX = TIKTOK_CAPTION_MAX;
7394
7456
  exports.TIKTOK_DISCLOSURE_REQUIRED_HINT = TIKTOK_DISCLOSURE_REQUIRED_HINT;
7395
7457
  exports.TIKTOK_MUSIC_CONFIRMATION_URL = TIKTOK_MUSIC_CONFIRMATION_URL;
7396
7458
  exports.TIKTOK_PROCESSING_NOTICE = TIKTOK_PROCESSING_NOTICE;
7459
+ exports.UploadError = UploadError;
7397
7460
  exports.audiencePrivacyOptions = audiencePrivacyOptions;
7398
7461
  exports.audienceUnselected = audienceUnselected;
7399
7462
  exports.brandedContentDeclared = brandedContentDeclared;
@@ -7495,6 +7558,7 @@ exports.tiktokPrivacyLabel = tiktokPrivacyLabel;
7495
7558
  exports.tiktokSettings = tiktokSettings;
7496
7559
  exports.toggleInteraction = toggleInteraction;
7497
7560
  exports.tokensMint = tokensMint;
7561
+ exports.uploadToTarget = uploadToTarget;
7498
7562
  exports.webhooksCreateEndpoint = webhooksCreateEndpoint;
7499
7563
  exports.webhooksCreatePortal = webhooksCreatePortal;
7500
7564
  exports.webhooksDeleteEndpoint = webhooksDeleteEndpoint;