@hot-updater/react-native 1.0.0-rc.31 → 1.0.0-rc.32

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.
@@ -13,7 +13,11 @@ const fetchUpdateResponse = async ({
13
13
  onResponse
14
14
  }) => {
15
15
  const controller = new AbortController();
16
- const timeoutId = setTimeout(() => controller.abort(), requestTimeout);
16
+ let timedOut = false;
17
+ const timeoutId = setTimeout(() => {
18
+ timedOut = true;
19
+ controller.abort();
20
+ }, requestTimeout);
17
21
  try {
18
22
  const headers = new Headers(requestHeaders);
19
23
  if (!headers.has("Accept")) headers.set("Accept", "application/json");
@@ -42,7 +46,9 @@ const fetchUpdateResponse = async ({
42
46
  body
43
47
  };
44
48
  } catch (error) {
45
- if (error instanceof Error && error.name === "AbortError") {
49
+ // Whatever the fetch rejects with once its timeout aborts it: an
50
+ // AbortError, or Expo's "fetch failed: FetchRequestCanceledException".
51
+ if (timedOut || error instanceof Error && error.name === "AbortError") {
46
52
  throw new Error("Request timed out");
47
53
  }
48
54
  throw error;
@@ -1 +1 @@
1
- {"version":3,"names":["fetchUpdateResponse","url","resource","requestHeaders","requestTimeout","onResponse","controller","AbortController","timeoutId","setTimeout","abort","headers","Headers","has","set","response","fetch","signal","body","text","error","status","path","replace","split","bodyTruncated","Error","name","clearTimeout","exports"],"sourceRoot":"../../src","sources":["fetchUpdateResponse.ts"],"mappings":";;;;;;AAUA;AACO,MAAMA,mBAAmB,GAAG,MAAAA,CAAO;EACxCC,GAAG;EACHC,QAAQ;EACRC,cAAc;EACdC,cAAc,GAAG,IAAI;EACrBC;AACa,CAAC,KAA2D;EACzE,MAAMC,UAAU,GAAG,IAAIC,eAAe,CAAC,CAAC;EACxC,MAAMC,SAAS,GAAGC,UAAU,CAAC,MAAMH,UAAU,CAACI,KAAK,CAAC,CAAC,EAAEN,cAAc,CAAC;EACtE,IAAI;IACF,MAAMO,OAAO,GAAG,IAAIC,OAAO,CAACT,cAAc,CAAC;IAC3C,IAAI,CAACQ,OAAO,CAACE,GAAG,CAAC,QAAQ,CAAC,EAAEF,OAAO,CAACG,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACrE,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAACf,GAAG,EAAE;MAChCU,OAAO;MACPM,MAAM,EAAEX,UAAU,CAACW;IACrB,CAAC,CAAC;IACF,IAAIC,IAAmB,GAAG,IAAI;IAC9B,IAAI;MACFA,IAAI,GAAG,MAAMH,QAAQ,CAACI,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd;MACA,IAAIL,QAAQ,CAACM,MAAM,KAAK,GAAG,EAAE,MAAMD,KAAK;IAC1C,CAAC,SAAS;MACRf,UAAU,GAAG;QACXH,QAAQ;QACR;QACAoB,IAAI,EACFrB,GAAG,CAACsB,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAACC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;QACpEH,MAAM,EAAEN,QAAQ,CAACM,MAAM;QACvBH,IAAI;QACJO,aAAa,EAAE;MACjB,CAAC,CAAC;IACJ;IACA,OAAO;MAAEV,QAAQ;MAAEG;IAAK,CAAC;EAC3B,CAAC,CAAC,OAAOE,KAAc,EAAE;IACvB,IAAIA,KAAK,YAAYM,KAAK,IAAIN,KAAK,CAACO,IAAI,KAAK,YAAY,EAAE;MACzD,MAAM,IAAID,KAAK,CAAC,mBAAmB,CAAC;IACtC;IACA,MAAMN,KAAK;EACb,CAAC,SAAS;IACRQ,YAAY,CAACpB,SAAS,CAAC;EACzB;AACF,CAAC;AAACqB,OAAA,CAAA7B,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"names":["fetchUpdateResponse","url","resource","requestHeaders","requestTimeout","onResponse","controller","AbortController","timedOut","timeoutId","setTimeout","abort","headers","Headers","has","set","response","fetch","signal","body","text","error","status","path","replace","split","bodyTruncated","Error","name","clearTimeout","exports"],"sourceRoot":"../../src","sources":["fetchUpdateResponse.ts"],"mappings":";;;;;;AAUA;AACO,MAAMA,mBAAmB,GAAG,MAAAA,CAAO;EACxCC,GAAG;EACHC,QAAQ;EACRC,cAAc;EACdC,cAAc,GAAG,IAAI;EACrBC;AACa,CAAC,KAA2D;EACzE,MAAMC,UAAU,GAAG,IAAIC,eAAe,CAAC,CAAC;EACxC,IAAIC,QAAQ,GAAG,KAAK;EACpB,MAAMC,SAAS,GAAGC,UAAU,CAAC,MAAM;IACjCF,QAAQ,GAAG,IAAI;IACfF,UAAU,CAACK,KAAK,CAAC,CAAC;EACpB,CAAC,EAAEP,cAAc,CAAC;EAClB,IAAI;IACF,MAAMQ,OAAO,GAAG,IAAIC,OAAO,CAACV,cAAc,CAAC;IAC3C,IAAI,CAACS,OAAO,CAACE,GAAG,CAAC,QAAQ,CAAC,EAAEF,OAAO,CAACG,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACrE,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAAChB,GAAG,EAAE;MAChCW,OAAO;MACPM,MAAM,EAAEZ,UAAU,CAACY;IACrB,CAAC,CAAC;IACF,IAAIC,IAAmB,GAAG,IAAI;IAC9B,IAAI;MACFA,IAAI,GAAG,MAAMH,QAAQ,CAACI,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd;MACA,IAAIL,QAAQ,CAACM,MAAM,KAAK,GAAG,EAAE,MAAMD,KAAK;IAC1C,CAAC,SAAS;MACRhB,UAAU,GAAG;QACXH,QAAQ;QACR;QACAqB,IAAI,EACFtB,GAAG,CAACuB,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAACC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;QACpEH,MAAM,EAAEN,QAAQ,CAACM,MAAM;QACvBH,IAAI;QACJO,aAAa,EAAE;MACjB,CAAC,CAAC;IACJ;IACA,OAAO;MAAEV,QAAQ;MAAEG;IAAK,CAAC;EAC3B,CAAC,CAAC,OAAOE,KAAc,EAAE;IACvB;IACA;IACA,IAAIb,QAAQ,IAAKa,KAAK,YAAYM,KAAK,IAAIN,KAAK,CAACO,IAAI,KAAK,YAAa,EAAE;MACvE,MAAM,IAAID,KAAK,CAAC,mBAAmB,CAAC;IACtC;IACA,MAAMN,KAAK;EACb,CAAC,SAAS;IACRQ,YAAY,CAACpB,SAAS,CAAC;EACzB;AACF,CAAC;AAACqB,OAAA,CAAA9B,mBAAA,GAAAA,mBAAA","ignoreList":[]}
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.HOT_UPDATER_SDK_VERSION = void 0;
7
- const HOT_UPDATER_SDK_VERSION = exports.HOT_UPDATER_SDK_VERSION = "1.0.0-rc.31";
7
+ const HOT_UPDATER_SDK_VERSION = exports.HOT_UPDATER_SDK_VERSION = "1.0.0-rc.32";
8
8
  //# sourceMappingURL=sdkVersion.js.map
@@ -33,6 +33,8 @@ const RESOURCES = ["catalog", "artifact", "manifest", "file", "patch", "archive"
33
33
  const TRANSPORTS = ["timeout", "dns", "tls", "connection", "offline", "cancelled"];
34
34
  /** An S3, R2, or GCS error code: letters, digits, and punctuation only. */
35
35
  const ORIGIN_CODE = /^[A-Za-z0-9._-]{1,64}$/;
36
+ /** Expo's iOS and Android names for a fetch canceled before its response. */
37
+ const EXPO_FETCH_CANCELED = /FetchRequestCanceledException|Fetch request has been canceled|The operation was aborted/;
36
38
  const oneOf = (values, value) => values.includes(value);
37
39
  const readNativeClassification = error => {
38
40
  if (!("code" in error) || typeof error.code !== "string") return undefined;
@@ -115,6 +117,17 @@ const classifyUpdateError = (error, stage, resource) => {
115
117
  transport: "cancelled"
116
118
  };
117
119
  }
120
+ // Expo's fetch rejects with "fetch failed: <native exception>" when no
121
+ // response arrives, and names a canceled request.
122
+ if (error instanceof Error && error.message.startsWith("fetch failed:")) {
123
+ return {
124
+ ...scope,
125
+ reason: "network",
126
+ ...(EXPO_FETCH_CANCELED.test(error.message) ? {
127
+ transport: "cancelled"
128
+ } : {})
129
+ };
130
+ }
118
131
  if (name === "TypeError") {
119
132
  // fetch rejects with a TypeError when no response arrives, without
120
133
  // saying why.
@@ -1 +1 @@
1
- {"version":3,"names":["_error","require","InvalidUpdateResponseError","HotUpdaterError","constructor","message","options","name","cause","undefined","exports","UpdateHttpError","status","statusText","STAGES","REASONS","RESOURCES","TRANSPORTS","ORIGIN_CODE","oneOf","values","value","includes","readNativeClassification","error","code","userInfo","stage","reason","resource","transport","originCode","httpStatus","Number","isSafeInteger","test","classifyUpdateError","native","scope","Error"],"sourceRoot":"../../src","sources":["updateError.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_error","require","InvalidUpdateResponseError","HotUpdaterError","constructor","message","options","name","cause","undefined","exports","UpdateHttpError","status","statusText","STAGES","REASONS","RESOURCES","TRANSPORTS","ORIGIN_CODE","EXPO_FETCH_CANCELED","oneOf","values","value","includes","readNativeClassification","error","code","userInfo","stage","reason","resource","transport","originCode","httpStatus","Number","isSafeInteger","test","classifyUpdateError","native","scope","Error","startsWith"],"sourceRoot":"../../src","sources":["updateError.ts"],"mappings":"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","ignoreList":[]}
@@ -9,7 +9,11 @@ export const fetchUpdateResponse = async ({
9
9
  onResponse
10
10
  }) => {
11
11
  const controller = new AbortController();
12
- const timeoutId = setTimeout(() => controller.abort(), requestTimeout);
12
+ let timedOut = false;
13
+ const timeoutId = setTimeout(() => {
14
+ timedOut = true;
15
+ controller.abort();
16
+ }, requestTimeout);
13
17
  try {
14
18
  const headers = new Headers(requestHeaders);
15
19
  if (!headers.has("Accept")) headers.set("Accept", "application/json");
@@ -38,7 +42,9 @@ export const fetchUpdateResponse = async ({
38
42
  body
39
43
  };
40
44
  } catch (error) {
41
- if (error instanceof Error && error.name === "AbortError") {
45
+ // Whatever the fetch rejects with once its timeout aborts it: an
46
+ // AbortError, or Expo's "fetch failed: FetchRequestCanceledException".
47
+ if (timedOut || error instanceof Error && error.name === "AbortError") {
42
48
  throw new Error("Request timed out");
43
49
  }
44
50
  throw error;
@@ -1 +1 @@
1
- {"version":3,"names":["fetchUpdateResponse","url","resource","requestHeaders","requestTimeout","onResponse","controller","AbortController","timeoutId","setTimeout","abort","headers","Headers","has","set","response","fetch","signal","body","text","error","status","path","replace","split","bodyTruncated","Error","name","clearTimeout"],"sourceRoot":"../../src","sources":["fetchUpdateResponse.ts"],"mappings":";;AAUA;AACA,OAAO,MAAMA,mBAAmB,GAAG,MAAAA,CAAO;EACxCC,GAAG;EACHC,QAAQ;EACRC,cAAc;EACdC,cAAc,GAAG,IAAI;EACrBC;AACa,CAAC,KAA2D;EACzE,MAAMC,UAAU,GAAG,IAAIC,eAAe,CAAC,CAAC;EACxC,MAAMC,SAAS,GAAGC,UAAU,CAAC,MAAMH,UAAU,CAACI,KAAK,CAAC,CAAC,EAAEN,cAAc,CAAC;EACtE,IAAI;IACF,MAAMO,OAAO,GAAG,IAAIC,OAAO,CAACT,cAAc,CAAC;IAC3C,IAAI,CAACQ,OAAO,CAACE,GAAG,CAAC,QAAQ,CAAC,EAAEF,OAAO,CAACG,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACrE,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAACf,GAAG,EAAE;MAChCU,OAAO;MACPM,MAAM,EAAEX,UAAU,CAACW;IACrB,CAAC,CAAC;IACF,IAAIC,IAAmB,GAAG,IAAI;IAC9B,IAAI;MACFA,IAAI,GAAG,MAAMH,QAAQ,CAACI,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd;MACA,IAAIL,QAAQ,CAACM,MAAM,KAAK,GAAG,EAAE,MAAMD,KAAK;IAC1C,CAAC,SAAS;MACRf,UAAU,GAAG;QACXH,QAAQ;QACR;QACAoB,IAAI,EACFrB,GAAG,CAACsB,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAACC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;QACpEH,MAAM,EAAEN,QAAQ,CAACM,MAAM;QACvBH,IAAI;QACJO,aAAa,EAAE;MACjB,CAAC,CAAC;IACJ;IACA,OAAO;MAAEV,QAAQ;MAAEG;IAAK,CAAC;EAC3B,CAAC,CAAC,OAAOE,KAAc,EAAE;IACvB,IAAIA,KAAK,YAAYM,KAAK,IAAIN,KAAK,CAACO,IAAI,KAAK,YAAY,EAAE;MACzD,MAAM,IAAID,KAAK,CAAC,mBAAmB,CAAC;IACtC;IACA,MAAMN,KAAK;EACb,CAAC,SAAS;IACRQ,YAAY,CAACpB,SAAS,CAAC;EACzB;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["fetchUpdateResponse","url","resource","requestHeaders","requestTimeout","onResponse","controller","AbortController","timedOut","timeoutId","setTimeout","abort","headers","Headers","has","set","response","fetch","signal","body","text","error","status","path","replace","split","bodyTruncated","Error","name","clearTimeout"],"sourceRoot":"../../src","sources":["fetchUpdateResponse.ts"],"mappings":";;AAUA;AACA,OAAO,MAAMA,mBAAmB,GAAG,MAAAA,CAAO;EACxCC,GAAG;EACHC,QAAQ;EACRC,cAAc;EACdC,cAAc,GAAG,IAAI;EACrBC;AACa,CAAC,KAA2D;EACzE,MAAMC,UAAU,GAAG,IAAIC,eAAe,CAAC,CAAC;EACxC,IAAIC,QAAQ,GAAG,KAAK;EACpB,MAAMC,SAAS,GAAGC,UAAU,CAAC,MAAM;IACjCF,QAAQ,GAAG,IAAI;IACfF,UAAU,CAACK,KAAK,CAAC,CAAC;EACpB,CAAC,EAAEP,cAAc,CAAC;EAClB,IAAI;IACF,MAAMQ,OAAO,GAAG,IAAIC,OAAO,CAACV,cAAc,CAAC;IAC3C,IAAI,CAACS,OAAO,CAACE,GAAG,CAAC,QAAQ,CAAC,EAAEF,OAAO,CAACG,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACrE,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAAChB,GAAG,EAAE;MAChCW,OAAO;MACPM,MAAM,EAAEZ,UAAU,CAACY;IACrB,CAAC,CAAC;IACF,IAAIC,IAAmB,GAAG,IAAI;IAC9B,IAAI;MACFA,IAAI,GAAG,MAAMH,QAAQ,CAACI,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd;MACA,IAAIL,QAAQ,CAACM,MAAM,KAAK,GAAG,EAAE,MAAMD,KAAK;IAC1C,CAAC,SAAS;MACRhB,UAAU,GAAG;QACXH,QAAQ;QACR;QACAqB,IAAI,EACFtB,GAAG,CAACuB,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAACC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;QACpEH,MAAM,EAAEN,QAAQ,CAACM,MAAM;QACvBH,IAAI;QACJO,aAAa,EAAE;MACjB,CAAC,CAAC;IACJ;IACA,OAAO;MAAEV,QAAQ;MAAEG;IAAK,CAAC;EAC3B,CAAC,CAAC,OAAOE,KAAc,EAAE;IACvB;IACA;IACA,IAAIb,QAAQ,IAAKa,KAAK,YAAYM,KAAK,IAAIN,KAAK,CAACO,IAAI,KAAK,YAAa,EAAE;MACvE,MAAM,IAAID,KAAK,CAAC,mBAAmB,CAAC;IACtC;IACA,MAAMN,KAAK;EACb,CAAC,SAAS;IACRQ,YAAY,CAACpB,SAAS,CAAC;EACzB;AACF,CAAC","ignoreList":[]}
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
 
3
- export const HOT_UPDATER_SDK_VERSION = "1.0.0-rc.31";
3
+ export const HOT_UPDATER_SDK_VERSION = "1.0.0-rc.32";
4
4
  //# sourceMappingURL=sdkVersion.js.map
@@ -28,6 +28,8 @@ const RESOURCES = ["catalog", "artifact", "manifest", "file", "patch", "archive"
28
28
  const TRANSPORTS = ["timeout", "dns", "tls", "connection", "offline", "cancelled"];
29
29
  /** An S3, R2, or GCS error code: letters, digits, and punctuation only. */
30
30
  const ORIGIN_CODE = /^[A-Za-z0-9._-]{1,64}$/;
31
+ /** Expo's iOS and Android names for a fetch canceled before its response. */
32
+ const EXPO_FETCH_CANCELED = /FetchRequestCanceledException|Fetch request has been canceled|The operation was aborted/;
31
33
  const oneOf = (values, value) => values.includes(value);
32
34
  const readNativeClassification = error => {
33
35
  if (!("code" in error) || typeof error.code !== "string") return undefined;
@@ -110,6 +112,17 @@ export const classifyUpdateError = (error, stage, resource) => {
110
112
  transport: "cancelled"
111
113
  };
112
114
  }
115
+ // Expo's fetch rejects with "fetch failed: <native exception>" when no
116
+ // response arrives, and names a canceled request.
117
+ if (error instanceof Error && error.message.startsWith("fetch failed:")) {
118
+ return {
119
+ ...scope,
120
+ reason: "network",
121
+ ...(EXPO_FETCH_CANCELED.test(error.message) ? {
122
+ transport: "cancelled"
123
+ } : {})
124
+ };
125
+ }
113
126
  if (name === "TypeError") {
114
127
  // fetch rejects with a TypeError when no response arrives, without
115
128
  // saying why.
@@ -1 +1 @@
1
- {"version":3,"names":["HotUpdaterError","InvalidUpdateResponseError","constructor","message","options","name","cause","undefined","UpdateHttpError","status","statusText","STAGES","REASONS","RESOURCES","TRANSPORTS","ORIGIN_CODE","oneOf","values","value","includes","readNativeClassification","error","code","userInfo","stage","reason","resource","transport","originCode","httpStatus","Number","isSafeInteger","test","classifyUpdateError","native","scope","Error"],"sourceRoot":"../../src","sources":["updateError.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["HotUpdaterError","InvalidUpdateResponseError","constructor","message","options","name","cause","undefined","UpdateHttpError","status","statusText","STAGES","REASONS","RESOURCES","TRANSPORTS","ORIGIN_CODE","EXPO_FETCH_CANCELED","oneOf","values","value","includes","readNativeClassification","error","code","userInfo","stage","reason","resource","transport","originCode","httpStatus","Number","isSafeInteger","test","classifyUpdateError","native","scope","Error","startsWith"],"sourceRoot":"../../src","sources":["updateError.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"fetchUpdateResponse.d.ts","sourceRoot":"","sources":["../../../src/fetchUpdateResponse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAClD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC9D;AAED,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,mEAM7B,aAAa,KAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAoCrE,CAAC"}
1
+ {"version":3,"file":"fetchUpdateResponse.d.ts","sourceRoot":"","sources":["../../../src/fetchUpdateResponse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAClD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC9D;AAED,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,mEAM7B,aAAa,KAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA0CrE,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const HOT_UPDATER_SDK_VERSION = "1.0.0-rc.31";
1
+ export declare const HOT_UPDATER_SDK_VERSION = "1.0.0-rc.32";
2
2
  //# sourceMappingURL=sdkVersion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"updateError.d.ts","sourceRoot":"","sources":["../../../src/updateError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEX,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,eAAe;IAC7D,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAIzD;CACF;AAED,2EAA2E;AAC3E,qBAAa,eAAgB,SAAQ,eAAe;IAEhD,QAAQ,CAAC,MAAM,EAAE,MAAM;IADzB,YACW,MAAM,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAMnB;CACF;AAiCD,KAAK,cAAc,GAAG,IAAI,CACxB,WAAW,EACX,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,CAC5E,CAAC;AAsCF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,UACvB,OAAO,SACP,gBAAgB,aACZ,mBAAmB,KAC7B,cAAc,GAAG,IAoCnB,CAAC"}
1
+ {"version":3,"file":"updateError.d.ts","sourceRoot":"","sources":["../../../src/updateError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEX,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,eAAe;IAC7D,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAIzD;CACF;AAED,2EAA2E;AAC3E,qBAAa,eAAgB,SAAQ,eAAe;IAEhD,QAAQ,CAAC,MAAM,EAAE,MAAM;IADzB,YACW,MAAM,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAMnB;CACF;AAoCD,KAAK,cAAc,GAAG,IAAI,CACxB,WAAW,EACX,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,CAC5E,CAAC;AAsCF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,UACvB,OAAO,SACP,gBAAgB,aACZ,mBAAmB,KAC7B,cAAc,GAAG,IA+CnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetchUpdateResponse.d.ts","sourceRoot":"","sources":["../../../src/fetchUpdateResponse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAClD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC9D;AAED,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,mEAM7B,aAAa,KAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAoCrE,CAAC"}
1
+ {"version":3,"file":"fetchUpdateResponse.d.ts","sourceRoot":"","sources":["../../../src/fetchUpdateResponse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAClD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC9D;AAED,6EAA6E;AAC7E,eAAO,MAAM,mBAAmB,mEAM7B,aAAa,KAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CA0CrE,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const HOT_UPDATER_SDK_VERSION = "1.0.0-rc.31";
1
+ export declare const HOT_UPDATER_SDK_VERSION = "1.0.0-rc.32";
2
2
  //# sourceMappingURL=sdkVersion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"updateError.d.ts","sourceRoot":"","sources":["../../../src/updateError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEX,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,eAAe;IAC7D,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAIzD;CACF;AAED,2EAA2E;AAC3E,qBAAa,eAAgB,SAAQ,eAAe;IAEhD,QAAQ,CAAC,MAAM,EAAE,MAAM;IADzB,YACW,MAAM,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAMnB;CACF;AAiCD,KAAK,cAAc,GAAG,IAAI,CACxB,WAAW,EACX,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,CAC5E,CAAC;AAsCF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,UACvB,OAAO,SACP,gBAAgB,aACZ,mBAAmB,KAC7B,cAAc,GAAG,IAoCnB,CAAC"}
1
+ {"version":3,"file":"updateError.d.ts","sourceRoot":"","sources":["../../../src/updateError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEX,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1C;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,eAAe;IAC7D,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAIzD;CACF;AAED,2EAA2E;AAC3E,qBAAa,eAAgB,SAAQ,eAAe;IAEhD,QAAQ,CAAC,MAAM,EAAE,MAAM;IADzB,YACW,MAAM,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAMnB;CACF;AAoCD,KAAK,cAAc,GAAG,IAAI,CACxB,WAAW,EACX,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,CAC5E,CAAC;AAsCF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,UACvB,OAAO,SACP,gBAAgB,aACZ,mBAAmB,KAC7B,cAAc,GAAG,IA+CnB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hot-updater/react-native",
3
- "version": "1.0.0-rc.31",
3
+ "version": "1.0.0-rc.32",
4
4
  "description": "React Native OTA solution for self-hosted",
5
5
  "source": "./src/index.ts",
6
6
  "main": "./lib/commonjs/index.js",
@@ -123,8 +123,8 @@
123
123
  },
124
124
  "dependencies": {
125
125
  "use-sync-external-store": "1.5.0",
126
- "@hot-updater/protocol": "1.0.0-rc.28",
127
- "@hot-updater/plugin-insights": "1.0.0-rc.31"
126
+ "@hot-updater/protocol": "1.0.0-rc.29",
127
+ "@hot-updater/plugin-insights": "1.0.0-rc.32"
128
128
  },
129
129
  "scripts": {
130
130
  "build": "node ./scripts/sync-sdk-version.mjs run -- bob build",
@@ -17,7 +17,11 @@ export const fetchUpdateResponse = async ({
17
17
  onResponse,
18
18
  }: UpdateRequest): Promise<{ response: Response; body: string | null }> => {
19
19
  const controller = new AbortController();
20
- const timeoutId = setTimeout(() => controller.abort(), requestTimeout);
20
+ let timedOut = false;
21
+ const timeoutId = setTimeout(() => {
22
+ timedOut = true;
23
+ controller.abort();
24
+ }, requestTimeout);
21
25
  try {
22
26
  const headers = new Headers(requestHeaders);
23
27
  if (!headers.has("Accept")) headers.set("Accept", "application/json");
@@ -44,7 +48,9 @@ export const fetchUpdateResponse = async ({
44
48
  }
45
49
  return { response, body };
46
50
  } catch (error: unknown) {
47
- if (error instanceof Error && error.name === "AbortError") {
51
+ // Whatever the fetch rejects with once its timeout aborts it: an
52
+ // AbortError, or Expo's "fetch failed: FetchRequestCanceledException".
53
+ if (timedOut || (error instanceof Error && error.name === "AbortError")) {
48
54
  throw new Error("Request timed out");
49
55
  }
50
56
  throw error;
package/src/sdkVersion.ts CHANGED
@@ -1 +1 @@
1
- export const HOT_UPDATER_SDK_VERSION = "1.0.0-rc.31";
1
+ export const HOT_UPDATER_SDK_VERSION = "1.0.0-rc.32";
@@ -62,6 +62,9 @@ const TRANSPORTS: readonly UpdateErrorTransport[] = [
62
62
  ];
63
63
  /** An S3, R2, or GCS error code: letters, digits, and punctuation only. */
64
64
  const ORIGIN_CODE = /^[A-Za-z0-9._-]{1,64}$/;
65
+ /** Expo's iOS and Android names for a fetch canceled before its response. */
66
+ const EXPO_FETCH_CANCELED =
67
+ /FetchRequestCanceledException|Fetch request has been canceled|The operation was aborted/;
65
68
 
66
69
  type Classification = Pick<
67
70
  UpdateError,
@@ -144,6 +147,17 @@ export const classifyUpdateError = (
144
147
  if (name === "AbortError") {
145
148
  return { ...scope, reason: "network", transport: "cancelled" };
146
149
  }
150
+ // Expo's fetch rejects with "fetch failed: <native exception>" when no
151
+ // response arrives, and names a canceled request.
152
+ if (error instanceof Error && error.message.startsWith("fetch failed:")) {
153
+ return {
154
+ ...scope,
155
+ reason: "network",
156
+ ...(EXPO_FETCH_CANCELED.test(error.message)
157
+ ? { transport: "cancelled" }
158
+ : {}),
159
+ };
160
+ }
147
161
  if (name === "TypeError") {
148
162
  // fetch rejects with a TypeError when no response arrives, without
149
163
  // saying why.