@todesktop/cli 1.7.5 → 1.7.7

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/README.md CHANGED
@@ -239,11 +239,11 @@ The path can be absolute or a relative path from the project root. The directory
239
239
 
240
240
  Side note: if your `package.json` contains a `postinstall` script which references scripts, these must be accessible within the `appPath` directory as only the `appPath` is uploaded to our servers.
241
241
 
242
- ### `appProtocolScheme` - (optional) string
242
+ ### `appProtocolScheme` - (optional) string | string[]
243
243
 
244
244
  Default: no protocol scheme is registered.
245
245
 
246
- Example: `word`.
246
+ Example: `word` or `[word, ...]`.
247
247
 
248
248
  If you want to register a protocol for your application (e.g. `example://`) and or support deeplinking, you will need to use this option. If your desired protocol is `example://`, you would set `"appProtocolScheme": "example"`. NOTE: these features also require additional application logic.
249
249
 
@@ -989,6 +989,14 @@ Now, when we build your app on ToDesktop servers, it will also run your custom `
989
989
 
990
990
  ## Changelog
991
991
 
992
+ ### v1.7.7
993
+
994
+ - Report errors when S3 upload fails and retry 3 times
995
+
996
+ ### v1.7.6
997
+
998
+ - Add support for multiple app protocol schemes
999
+
992
1000
  ### v1.7.5
993
1001
 
994
1002
  - Add support for specifying custom `npmVersion` in config
package/dist/cli.js CHANGED
@@ -1449,7 +1449,16 @@ var full_default = (context) => {
1449
1449
  },
1450
1450
  minItems: 1
1451
1451
  },
1452
- appProtocolScheme: { type: "string", minLength: 1 },
1452
+ appProtocolScheme: {
1453
+ oneOf: [
1454
+ { type: "string", minLength: 1 },
1455
+ {
1456
+ type: "array",
1457
+ items: { type: "string", minLength: 1 },
1458
+ minItems: 1
1459
+ }
1460
+ ]
1461
+ },
1453
1462
  appPath: {
1454
1463
  type: "string",
1455
1464
  file: {
@@ -1922,35 +1931,55 @@ var generateS3Key_default = ({ appId, buildId, filenameSuffix }) => `${appId}/so
1922
1931
 
1923
1932
  // src/utilities/uploadToS3.ts
1924
1933
  var import_superagent = __toESM(require("superagent"));
1925
- var import_util = __toESM(require("util"));
1926
1934
  var import_stream_to_array = __toESM(require("stream-to-array"));
1927
1935
  var { TODESKTOP_CLI_S3_BUCKET } = getEnvironmentVariables_default();
1928
- var uploadToS3_default = async ({
1936
+ var MAX_RETRIES = 3;
1937
+ var RETRY_DELAY = 2e3;
1938
+ var delay = (ms) => new Promise((resolve4) => setTimeout(resolve4, ms));
1939
+ var uploadToS3WithRetry = async (input, retries = MAX_RETRIES) => {
1940
+ try {
1941
+ return await uploadToS3(input);
1942
+ } catch (error) {
1943
+ if (retries > 0) {
1944
+ logger_default.warn(
1945
+ `Upload failed. Retrying... (${MAX_RETRIES - retries + 1} of ${MAX_RETRIES})`
1946
+ );
1947
+ await delay(RETRY_DELAY);
1948
+ return uploadToS3WithRetry(input, retries - 1);
1949
+ } else {
1950
+ logger_default.error("All retries exhausted. Upload failed.");
1951
+ throw error;
1952
+ }
1953
+ }
1954
+ };
1955
+ var uploadToS3 = async ({
1929
1956
  bucket = TODESKTOP_CLI_S3_BUCKET,
1930
1957
  inputStream,
1931
1958
  key,
1932
1959
  onProgress = () => {
1933
1960
  }
1934
1961
  }) => {
1935
- const { data } = await getCallableFirebaseFunction_default("getSignedURL")({
1962
+ const getSignedURL = getCallableFirebaseFunction_default("getSignedURL");
1963
+ const { data } = await getSignedURL({
1936
1964
  key
1937
1965
  });
1938
- const body = await new Promise((resolve4) => {
1939
- (0, import_stream_to_array.default)(inputStream).then(function(parts) {
1940
- const buffers = parts.map(
1941
- (part) => import_util.default.isBuffer(part) ? part : Buffer.from(part)
1942
- );
1943
- return resolve4(Buffer.concat(buffers));
1944
- });
1945
- });
1946
- return new Promise((resolve4) => {
1947
- import_superagent.default.put(data.signedURL).send(body).set("content-type", "application/zip").on("progress", (event) => onProgress(event)).end(() => {
1966
+ const parts = await (0, import_stream_to_array.default)(inputStream);
1967
+ const buffers = parts.map(
1968
+ (part) => Buffer.isBuffer(part) ? part : Buffer.from(part)
1969
+ );
1970
+ const body = Buffer.concat(buffers);
1971
+ return new Promise((resolve4, reject) => {
1972
+ import_superagent.default.put(data.signedURL).send(body).set("content-type", "application/zip").on("progress", onProgress).end((err) => {
1948
1973
  logger_default.debug({ bucket, key, url: data.uploadURL }, "uploadToS3");
1949
- resolve4({ bucket, key, url: data.uploadURL });
1974
+ if (err) {
1975
+ logger_default.error({ err }, "uploadToS3");
1976
+ return reject(err);
1977
+ }
1978
+ return resolve4({ bucket, key, url: data.uploadURL });
1950
1979
  });
1951
- return { bucket, key, url: data.uploadURL };
1952
1980
  });
1953
1981
  };
1982
+ var uploadToS3_default = uploadToS3WithRetry;
1954
1983
 
1955
1984
  // src/utilities/zip.ts
1956
1985
  var import_archiver = __toESM(require("archiver"));
@@ -3380,7 +3409,7 @@ var getRelativeDateFromDateString_default = (input) => dateFns.formatDistance(ne
3380
3409
  var import_chalk2 = __toESM(require("chalk"));
3381
3410
  var React3 = __toESM(require("react"));
3382
3411
  var import_ink25 = require("ink");
3383
- var import_util2 = __toESM(require("util"));
3412
+ var import_util = __toESM(require("util"));
3384
3413
  var import_jsx_runtime28 = require("react/jsx-runtime");
3385
3414
  var supportsColor = import_chalk2.default.stderr.supportsColor;
3386
3415
  var SyntaxHighlight = ({
@@ -3389,7 +3418,7 @@ var SyntaxHighlight = ({
3389
3418
  }) => {
3390
3419
  const { stdout } = (0, import_ink25.useStdout)();
3391
3420
  const highlightedCode = React3.useMemo(() => {
3392
- return stdout.isTTY ? import_util2.default.inspect(object, { colors, depth: 6 }) : JSON.stringify(object, null, 2);
3421
+ return stdout.isTTY ? import_util.default.inspect(object, { colors, depth: 6 }) : JSON.stringify(object, null, 2);
3393
3422
  }, [colors, object, stdout.isTTY]);
3394
3423
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_ink25.Text, { wrap: "end", children: highlightedCode });
3395
3424
  };
@@ -4791,7 +4820,7 @@ var package_default = {
4791
4820
  access: "public"
4792
4821
  },
4793
4822
  name: "@todesktop/cli",
4794
- version: "1.7.4",
4823
+ version: "1.7.6",
4795
4824
  license: "MIT",
4796
4825
  author: "Dave Jeffery <dave@todesktop.com> (http://www.todesktop.com/)",
4797
4826
  homepage: "https://todesktop.com/cli",
@@ -4871,8 +4900,9 @@ var package_default = {
4871
4900
  "xdg-basedir": "^4.0.0"
4872
4901
  },
4873
4902
  devDependencies: {
4874
- "@todesktop/shared": "^7.186.3",
4903
+ "@todesktop/shared": "^7.186.6",
4875
4904
  "@types/bunyan": "^1.8.6",
4905
+ "@types/node": "^20.8.4",
4876
4906
  "@types/react": "^18.0.26",
4877
4907
  "@typescript-eslint/eslint-plugin": "^5.46.1",
4878
4908
  "@typescript-eslint/parser": "^5.46.1",