@inappstory/game-center-api 1.3.13 → 1.3.15

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.
@@ -17,10 +17,10 @@ export declare class ResourceManager {
17
17
  private addResourceToCacheTree;
18
18
  private createCacheTree;
19
19
  cacheAllResources(): Promise<void>;
20
- cacheResource({ uri, originUri, resouceKeys, }: {
20
+ cacheResource({ uri, originUri, resourceKeys, }: {
21
21
  uri: string;
22
22
  originUri?: string;
23
- resouceKeys?: string[];
23
+ resourceKeys?: string[];
24
24
  }): Promise<string>;
25
25
  private createObjectUrlByUri;
26
26
  revokeCache(): void;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ResourceManager = void 0;
4
4
  const fetchLocalFile_1 = require("./sdkApi/fetchLocalFile");
5
+ const errorHandler_1 = require("./errorHandler");
5
6
  let instance;
6
7
  class ResourceManager {
7
8
  resLists;
@@ -44,11 +45,11 @@ class ResourceManager {
44
45
  const { resourceForFetch, relatedResources } = this.cacheTree[resUri];
45
46
  const promise = ((resourceForFetch, relatedResources) => {
46
47
  return new Promise(async (resolve, reject) => {
47
- const resouceKeys = relatedResources.map(resource => resource.key);
48
+ const resourceKeys = relatedResources.map(resource => resource.key);
48
49
  const uri = resourceForFetch.getUri();
49
50
  const originUri = resourceForFetch.getOriginUri();
50
51
  try {
51
- const objectUrl = await this.cacheResource({ uri, originUri, resouceKeys });
52
+ const objectUrl = await this.cacheResource({ uri, originUri, resourceKeys: resourceKeys });
52
53
  if (objectUrl === originUri) {
53
54
  resolve();
54
55
  return;
@@ -59,22 +60,41 @@ class ResourceManager {
59
60
  resolve();
60
61
  }
61
62
  catch (e) {
62
- reject(`Can't load resource for [${resouceKeys.join(", ")}]`);
63
+ (0, errorHandler_1.logError)(e, { resourceKeys });
64
+ reject(`Can't load resource for [${resourceKeys.join(", ")}]`);
63
65
  }
64
66
  });
65
67
  })(resourceForFetch, relatedResources);
66
68
  promises.push(promise);
67
69
  }
68
- await Promise.all(promises);
70
+ try {
71
+ await Promise.all(promises);
72
+ }
73
+ catch (e) {
74
+ (0, errorHandler_1.logError)(e);
75
+ }
69
76
  for (const resList of this.resLists)
70
77
  resList["onCacheDone"]();
71
78
  }
72
- async cacheResource({ uri, originUri = uri, resouceKeys = ["outerResource"], }) {
73
- let objectUrl = await this.createObjectUrlByUri(uri, resouceKeys);
74
- if (objectUrl === null && uri !== originUri)
75
- objectUrl = await this.createObjectUrlByUri(originUri, resouceKeys);
76
- if (objectUrl !== null)
79
+ async cacheResource({ uri, originUri = uri, resourceKeys = ["outerResource"], }) {
80
+ let objectUrl = null;
81
+ try {
82
+ objectUrl = await this.createObjectUrlByUri(uri, resourceKeys);
83
+ }
84
+ catch (e) {
85
+ (0, errorHandler_1.logError)(e, { uri, resourceKeys });
86
+ }
87
+ if (objectUrl === null && uri !== originUri) {
88
+ try {
89
+ objectUrl = await this.createObjectUrlByUri(originUri, resourceKeys);
90
+ }
91
+ catch (e) {
92
+ (0, errorHandler_1.logError)(e, { originUri, resourceKeys });
93
+ }
94
+ }
95
+ if (objectUrl !== null) {
77
96
  return objectUrl;
97
+ }
78
98
  return new Promise((resolve, reject) => {
79
99
  const image = new Image();
80
100
  image.onload = () => resolve(originUri);
@@ -82,21 +102,29 @@ class ResourceManager {
82
102
  image.src = originUri;
83
103
  });
84
104
  }
85
- async createObjectUrlByUri(uri, resouceKeys) {
105
+ async createObjectUrlByUri(uri, resourceKeys) {
86
106
  if (!uri) {
87
- throw `Resource uri for [${resouceKeys.join(", ")}] can't be empty string`;
107
+ throw `Resource uri for [${resourceKeys.join(", ")}] can't be empty string`;
88
108
  }
89
109
  try {
90
110
  const response = await (0, fetchLocalFile_1.fetchLocalFile)(uri);
91
111
  if (response != null && response.ok) {
92
- return URL.createObjectURL(await response.blob());
112
+ let blob = null;
113
+ try {
114
+ blob = await response.blob();
115
+ }
116
+ catch (e) {
117
+ (0, errorHandler_1.logError)(e);
118
+ throw e;
119
+ }
120
+ return URL.createObjectURL(blob);
93
121
  }
94
122
  else {
95
123
  throw "";
96
124
  }
97
125
  }
98
126
  catch (err) {
99
- console.warn(`Error to fetch ${uri} for related images [${resouceKeys.join(", ")}]`, err);
127
+ console.warn(`Error to fetch ${uri} for related images [${resourceKeys.join(", ")}]`, err);
100
128
  return null;
101
129
  }
102
130
  }
@@ -1 +1 @@
1
- export declare const logError: (e: unknown) => void;
1
+ export declare const logError: (e: unknown, cause?: any) => void;
@@ -1,22 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.logError = void 0;
4
- const logError = (e) => {
5
- const error = e;
6
- const message = {
7
- type: "error",
8
- errorName: error.name ?? "",
9
- message: error.message ?? "",
10
- stack: error.stack ?? "",
11
- cause: error.cause ?? "",
12
- // @ts-ignore Non-standard: This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
13
- fileName: error.fileName ?? "",
14
- // @ts-ignore Non-standard: This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
15
- lineNumber: error.lineNumber ?? "",
16
- // @ts-ignore Non-standard: This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
17
- columnNumber: error.columnNumber ?? "",
18
- };
19
- // will be handled via sdk console.error override
20
- console.error(message);
4
+ const logError = (e, cause) => {
5
+ if (e instanceof Error) {
6
+ const error = e;
7
+ const message = {
8
+ type: "error",
9
+ errorName: error.name ?? "",
10
+ message: error.message ?? "",
11
+ stack: error.stack ?? "",
12
+ cause: cause ?? error.cause ?? "",
13
+ // @ts-ignore Non-standard: This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
14
+ fileName: error.fileName ?? "",
15
+ // @ts-ignore Non-standard: This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
16
+ lineNumber: error.lineNumber ?? "",
17
+ // @ts-ignore Non-standard: This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
18
+ columnNumber: error.columnNumber ?? "",
19
+ };
20
+ // will be handled via sdk console.error override
21
+ console.error(message);
22
+ }
23
+ else {
24
+ console.error(e);
25
+ }
21
26
  };
22
27
  exports.logError = logError;
package/lib/iasApi.js CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.sendIasApiRequest = void 0;
4
4
  const gameLaunchConfig_1 = require("./gameLaunchConfig");
5
5
  const uuid_1 = require("uuid");
6
+ const errorHandler_1 = require("./errorHandler");
6
7
  const prepareHeaders = (headers) => ({
7
8
  ...{
8
9
  "Content-Type": "application/json",
@@ -34,8 +35,11 @@ async function sendIasApiRequest(requestInfo) {
34
35
  error: null,
35
36
  isOk: false,
36
37
  };
38
+ let url = "";
39
+ let requestInit = null;
37
40
  try {
38
- const response = await fetch(prepareUrl(requestInfo.path), {
41
+ url = prepareUrl(requestInfo.path);
42
+ requestInit = {
39
43
  method: requestInfo.method, // *GET, POST, PUT, DELETE, etc.
40
44
  mode: "cors", // no-cors, *cors, same-origin
41
45
  cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached
@@ -44,7 +48,13 @@ async function sendIasApiRequest(requestInfo) {
44
48
  redirect: "follow", // manual, *follow, error
45
49
  referrerPolicy: "no-referrer", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url
46
50
  body: JSON.stringify(requestInfo.data), // body data type must match "Content-Type" header
47
- });
51
+ };
52
+ }
53
+ catch (e) {
54
+ (0, errorHandler_1.logError)(e, { requestInfo });
55
+ }
56
+ try {
57
+ const response = await fetch(url, requestInit);
48
58
  result.status = response.status;
49
59
  result.payload = (await response.json()); // parses JSON response into native JavaScript objects
50
60
  if (response.status >= 200 && response.status < 300) {
@@ -53,6 +63,7 @@ async function sendIasApiRequest(requestInfo) {
53
63
  }
54
64
  catch (e) {
55
65
  result.error = e;
66
+ (0, errorHandler_1.logError)(e, { url, requestInit });
56
67
  }
57
68
  return result;
58
69
  }
package/lib/index.d.ts CHANGED
@@ -91,6 +91,6 @@ declare const GameCenterApi: {
91
91
  getApplicationVersion: () => string | null;
92
92
  getApplicationBuildVersion: () => number | null;
93
93
  openGameInstance: (openGameInstance: import("./sdkApi/openGameInstance.h").OpenGameInstanceOptions) => void;
94
- logError: (e: unknown) => void;
94
+ logError: (e: unknown, cause?: any) => void;
95
95
  };
96
96
  export { GameCenterApi as default };
package/lib/localData.js CHANGED
@@ -41,7 +41,12 @@ const initLocalData = async () => {
41
41
  if (localDataCreated) {
42
42
  console.warn("Duplicate call of initLocalData. Skipping");
43
43
  }
44
- exports.gameLocalData.init(Object.entries(await getClientLocalData()));
44
+ try {
45
+ exports.gameLocalData.init(Object.entries(await getClientLocalData()));
46
+ }
47
+ catch (e) {
48
+ (0, errorHandler_1.logError)(e);
49
+ }
45
50
  localDataCreated = true;
46
51
  };
47
52
  exports.initLocalData = initLocalData;
@@ -116,8 +121,7 @@ window.gameInstanceGetLocalDataCb = function (id, plainData) {
116
121
  localData = JSON.parse(plainData);
117
122
  }
118
123
  catch (e) {
119
- e.cause = { inputData: plainData };
120
- (0, errorHandler_1.logError)(e);
124
+ (0, errorHandler_1.logError)(e, { inputData: plainData });
121
125
  }
122
126
  finally {
123
127
  if (asyncQueue_1.asyncQueue.has(id)) {
package/lib/logger.html CHANGED
@@ -234,9 +234,21 @@
234
234
  }
235
235
 
236
236
  window._sendErrorLog(payload);
237
- console.errorOrigin(messages);
238
- if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.errorHandler && messages.length) {
239
- window.webkit.messageHandlers.errorHandler.postMessage(messages[0]);
237
+ if (messages.length && messages[0] != null) {
238
+ var errorAsString = "";
239
+ try {
240
+ errorAsString = JSON.stringify(messages[0]);
241
+ } catch (e) {
242
+ // nothing here
243
+ }
244
+ // for Android
245
+ console.errorOrigin(errorAsString);
246
+ // for iOS
247
+ if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.errorHandler) {
248
+ window.webkit.messageHandlers.errorHandler.postMessage(errorAsString);
249
+ }
250
+ } else {
251
+ console.errorOrigin(messages);
240
252
  }
241
253
  };
242
254
  </script>
@@ -5,6 +5,7 @@ const filePicker_h_1 = require("./filePicker.h");
5
5
  const uuid_1 = require("uuid");
6
6
  const asyncQueue_1 = require("../asyncQueue");
7
7
  const env_1 = require("../env");
8
+ const errorHandler_1 = require("../errorHandler");
8
9
  const defaultLang = "en";
9
10
  // TODO plural and templates for messages
10
11
  const messages = {
@@ -100,7 +101,14 @@ const openFilePicker = async ({ accept, multiple, resultAsFiles, lang, }) => {
100
101
  const blobs = new Array();
101
102
  response.forEach(src => {
102
103
  blobs.push(async () => {
103
- const blob = await (await fetch(src)).blob();
104
+ let blob = null;
105
+ try {
106
+ blob = await (await fetch(src)).blob();
107
+ }
108
+ catch (e) {
109
+ (0, errorHandler_1.logError)(e);
110
+ throw e;
111
+ }
104
112
  const fileName = src.split("\\").pop()?.split("/").pop() || "image";
105
113
  // dataTransfer.items.add(new File([blob], fileName, {
106
114
  // type: blob.type,
@@ -151,7 +159,14 @@ const openFilePicker = async ({ accept, multiple, resultAsFiles, lang, }) => {
151
159
  duration: sdkFileResponse.duration,
152
160
  getBlob: async () => {
153
161
  const fetchPath = sdkFileResponse.fetchPath;
154
- const blob = await (await fetch(fetchPath)).blob();
162
+ let blob = null;
163
+ try {
164
+ blob = await (await fetch(fetchPath)).blob();
165
+ }
166
+ catch (e) {
167
+ (0, errorHandler_1.logError)(e);
168
+ throw e;
169
+ }
155
170
  return new File([blob], fileName, {
156
171
  type: blob.type,
157
172
  lastModified: new Date().getTime(),
@@ -51,8 +51,7 @@ const createSdkApi = ({ mounted, beforeUnmount: beforeUnmountCb, onSdkCloseGameR
51
51
  }
52
52
  }
53
53
  catch (e) {
54
- e.cause = { inputData: payload };
55
- (0, errorHandler_1.logError)(e);
54
+ (0, errorHandler_1.logError)(e, { inputData: payload });
56
55
  }
57
56
  };
58
57
  // create bridge for web-sdk
@@ -36,8 +36,7 @@ const gameReader = (function () {
36
36
  window.gameLoadingInfo.description = "index: " + i;
37
37
  }
38
38
  catch (e) {
39
- e.cause = { src: "gameReaderInit queue" };
40
- (0, errorHandler_1.logError)(e);
39
+ (0, errorHandler_1.logError)(e, { src: "gameReaderInit queue" });
41
40
  }
42
41
  };
43
42
  })(self._e[i], i));
@@ -62,8 +61,7 @@ const gameReader = (function () {
62
61
  window.gameLoadingInfo.description = "index: " + i;
63
62
  }
64
63
  catch (e) {
65
- e.cause = { src: "gameReaderInit sessionStorage queue" };
66
- (0, errorHandler_1.logError)(e);
64
+ (0, errorHandler_1.logError)(e, { src: "gameReaderInit sessionStorage queue" });
67
65
  }
68
66
  };
69
67
  })(_initQueue[i], i));
@@ -85,8 +83,7 @@ const gameReader = (function () {
85
83
  window.gameLoadingInfo.description = "";
86
84
  }
87
85
  catch (e) {
88
- e.cause = { src: "gameReaderInit ready" };
89
- (0, errorHandler_1.logError)(e);
86
+ (0, errorHandler_1.logError)(e, { src: "gameReaderInit ready" });
90
87
  }
91
88
  });
92
89
  };
@@ -118,13 +115,18 @@ const createInitGame = (initLocalData, mounted = () => { }) => {
118
115
  // bcz web-sdk cannot access to document.documentElement inside game iFrame
119
116
  window.document.documentElement.dir = gameLaunchConfig_1.gameLaunchConfig?.clientConfig?.dir;
120
117
  }
121
- await initLocalData();
118
+ try {
119
+ await initLocalData();
120
+ }
121
+ catch (e) {
122
+ (0, errorHandler_1.logError)(e);
123
+ throw e;
124
+ }
122
125
  mounted();
123
126
  window.gameLoadingInfo.state = "after call initGame";
124
127
  window.gameLoadingInfo.description = JSON.stringify(config);
125
128
  }
126
129
  catch (e) {
127
- e.cause = { src: "initGame" };
128
130
  (0, errorHandler_1.logError)(e);
129
131
  }
130
132
  };
@@ -202,8 +204,7 @@ const gameLoadedSdkCallbackInternal = (config) => {
202
204
  }
203
205
  }
204
206
  catch (e) {
205
- e.cause = { src: "gameLoadedSdkCallback" };
206
- (0, errorHandler_1.logError)(e);
207
+ (0, errorHandler_1.logError)(e, { src: "gameLoadedSdkCallback" });
207
208
  }
208
209
  };
209
210
  const _gameLoadingInfoCreated = {
@@ -51,7 +51,6 @@ window.share_complete = function (requestId, isSuccess) {
51
51
  }
52
52
  }
53
53
  catch (e) {
54
- e.cause = { inputData: { requestId, isSuccess } };
55
- (0, errorHandler_1.logError)(e);
54
+ (0, errorHandler_1.logError)(e, { inputData: { requestId, isSuccess } });
56
55
  }
57
56
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inappstory/game-center-api",
3
- "version": "1.3.13",
3
+ "version": "1.3.15",
4
4
  "description": "",
5
5
  "dependencies": {
6
6
  "semver": "^7.3.8",