@searchspring/snap-client 0.43.1 → 0.44.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.
@@ -1 +1 @@
1
- {"version":3,"file":"Abstract.d.ts","sourceRoot":"","sources":["../../../../src/Client/apis/Abstract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIvE,oBAAY,IAAI,GAAG,GAAG,CAAC;AACvB,oBAAY,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAC1F,oBAAY,SAAS,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,SAAS,CAAA;CAAE,CAAC;AAClI,oBAAY,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,CAAC;CAChB;AAED,qBAAa,GAAG;IAMI,aAAa,EAAE,gBAAgB;IALlD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,UAAU,CAAK;IAEhB,KAAK,EAAE,YAAY,CAAC;gBAER,aAAa,EAAE,gBAAgB;IAIlD,SAAS,KAAK,IAAI,IAAI,OAAO,CAE5B;cAEe,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmChF,OAAO,CAAC,iBAAiB;YAoCX,QAAQ;CAKtB;AAED,oBAAY,QAAQ,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAE1D,MAAM,WAAW,0BAA0B;IAC1C,IAAI,CAAC,EAAE,MAAM,OAAO,OAAO,GAAG,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC;IACrD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAChB,OAAO,CAAC,aAAa;gBAAb,aAAa,GAAE,0BAA+B;IAalE,IAAI,KAAK,IAAI,WAAW,CAEvB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,oBAAoB,IAAI,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAExD;IAED,IAAI,OAAO,IAAI,WAAW,CAEzB;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,WAAW,EAElC;IAED,IAAI,OAAO,IAAI,cAAc,CAE5B;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,cAAc,EAErC;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;CACD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,SAAK,GAAG,MAAM,CAmBlE"}
1
+ {"version":3,"file":"Abstract.d.ts","sourceRoot":"","sources":["../../../../src/Client/apis/Abstract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIvE,oBAAY,IAAI,GAAG,GAAG,CAAC;AACvB,oBAAY,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAC1F,oBAAY,SAAS,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,SAAS,CAAA;CAAE,CAAC;AAClI,oBAAY,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,CAAC;CAChB;AAED,qBAAa,GAAG;IAMI,aAAa,EAAE,gBAAgB;IALlD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,UAAU,CAAK;IAEhB,KAAK,EAAE,YAAY,CAAC;gBAER,aAAa,EAAE,gBAAgB;IAIlD,SAAS,KAAK,IAAI,IAAI,OAAO,CAE5B;cAEe,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgDhF,OAAO,CAAC,iBAAiB;YAoCX,QAAQ;CAKtB;AAED,oBAAY,QAAQ,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAE1D,MAAM,WAAW,0BAA0B;IAC1C,IAAI,CAAC,EAAE,MAAM,OAAO,OAAO,GAAG,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC;IACrD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAChB,OAAO,CAAC,aAAa;gBAAb,aAAa,GAAE,0BAA+B;IAalE,IAAI,KAAK,IAAI,WAAW,CAEvB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,oBAAoB,IAAI,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAExD;IAED,IAAI,OAAO,IAAI,WAAW,CAEzB;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,WAAW,EAElC;IAED,IAAI,OAAO,IAAI,cAAc,CAE5B;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,cAAc,EAErC;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;CACD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,SAAK,GAAG,MAAM,CAmBlE"}
@@ -72,7 +72,7 @@ var API = /** @class */ (function () {
72
72
  });
73
73
  API.prototype.request = function (context, cacheKey) {
74
74
  return __awaiter(this, void 0, void 0, function () {
75
- var _a, url, init, cachedResponse, response, responseJSON;
75
+ var _a, url, init, cachedResponse, response, responseJSON, err_1;
76
76
  var _this = this;
77
77
  return __generator(this, function (_b) {
78
78
  switch (_b.label) {
@@ -86,13 +86,16 @@ var API = /** @class */ (function () {
86
86
  return [2 /*return*/, cachedResponse];
87
87
  }
88
88
  }
89
- return [4 /*yield*/, this.fetchApi(url, init)];
89
+ _b.label = 1;
90
90
  case 1:
91
+ _b.trys.push([1, 8, , 11]);
92
+ return [4 /*yield*/, this.fetchApi(url, init)];
93
+ case 2:
91
94
  response = _b.sent();
92
95
  return [4 /*yield*/, (response === null || response === void 0 ? void 0 : response.json())];
93
- case 2:
96
+ case 3:
94
97
  responseJSON = _b.sent();
95
- if (!(response.status >= 200 && response.status < 300)) return [3 /*break*/, 3];
98
+ if (!(response.status >= 200 && response.status < 300)) return [3 /*break*/, 4];
96
99
  this.retryCount = 0; // reset count and delay incase rate limit occurs again before a page refresh
97
100
  this.retryDelay = 1000;
98
101
  if (cacheKey) {
@@ -100,18 +103,26 @@ var API = /** @class */ (function () {
100
103
  this.cache.set(cacheKey, responseJSON);
101
104
  }
102
105
  return [2 /*return*/, responseJSON];
103
- case 3:
106
+ case 4:
104
107
  if (!(response.status == 429)) return [3 /*break*/, 7];
105
108
  if (!(this.retryCount < this.configuration.maxRetry)) return [3 /*break*/, 6];
106
109
  return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, _this.retryDelay); })];
107
- case 4:
110
+ case 5:
108
111
  _b.sent(); // delay retry
109
112
  this.retryDelay = (0, fibonacci_1.fibonacci)(this.retryCount) * 1000;
110
113
  this.retryCount++;
114
+ throw new Error('Rate limited.');
115
+ case 6: throw new Error('Retry rate limit exceeded.');
116
+ case 7: throw new Error('Unexpected Response Status.');
117
+ case 8:
118
+ err_1 = _b.sent();
119
+ if (!(err_1.message == 'Rate limited.')) return [3 /*break*/, 10];
111
120
  return [4 /*yield*/, this.request(context, cacheKey)];
112
- case 5: return [2 /*return*/, _b.sent()];
113
- case 6: throw response.status;
114
- case 7: throw response.status;
121
+ case 9: return [2 /*return*/, _b.sent()];
122
+ case 10:
123
+ // throw an object with fetch details
124
+ throw { err: err_1, fetchDetails: __assign({ status: response === null || response === void 0 ? void 0 : response.status, message: (response === null || response === void 0 ? void 0 : response.statusText) || 'FAILED', url: url }, init) };
125
+ case 11: return [2 /*return*/];
115
126
  }
116
127
  });
117
128
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Abstract.d.ts","sourceRoot":"","sources":["../../../../src/Client/apis/Abstract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIvE,oBAAY,IAAI,GAAG,GAAG,CAAC;AACvB,oBAAY,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAC1F,oBAAY,SAAS,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,SAAS,CAAA;CAAE,CAAC;AAClI,oBAAY,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,CAAC;CAChB;AAED,qBAAa,GAAG;IAMI,aAAa,EAAE,gBAAgB;IALlD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,UAAU,CAAK;IAEhB,KAAK,EAAE,YAAY,CAAC;gBAER,aAAa,EAAE,gBAAgB;IAIlD,SAAS,KAAK,IAAI,IAAI,OAAO,CAE5B;cAEe,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmChF,OAAO,CAAC,iBAAiB;YAoCX,QAAQ;CAKtB;AAED,oBAAY,QAAQ,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAE1D,MAAM,WAAW,0BAA0B;IAC1C,IAAI,CAAC,EAAE,MAAM,OAAO,OAAO,GAAG,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC;IACrD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAChB,OAAO,CAAC,aAAa;gBAAb,aAAa,GAAE,0BAA+B;IAalE,IAAI,KAAK,IAAI,WAAW,CAEvB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,oBAAoB,IAAI,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAExD;IAED,IAAI,OAAO,IAAI,WAAW,CAEzB;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,WAAW,EAElC;IAED,IAAI,OAAO,IAAI,cAAc,CAE5B;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,cAAc,EAErC;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;CACD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,SAAK,GAAG,MAAM,CAmBlE"}
1
+ {"version":3,"file":"Abstract.d.ts","sourceRoot":"","sources":["../../../../src/Client/apis/Abstract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIvE,oBAAY,IAAI,GAAG,GAAG,CAAC;AACvB,oBAAY,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAC1F,oBAAY,SAAS,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,SAAS,CAAA;CAAE,CAAC;AAClI,oBAAY,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,CAAC;CAChB;AAED,qBAAa,GAAG;IAMI,aAAa,EAAE,gBAAgB;IALlD,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,UAAU,CAAK;IAEhB,KAAK,EAAE,YAAY,CAAC;gBAER,aAAa,EAAE,gBAAgB;IAIlD,SAAS,KAAK,IAAI,IAAI,OAAO,CAE5B;cAEe,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgDhF,OAAO,CAAC,iBAAiB;YAoCX,QAAQ;CAKtB;AAED,oBAAY,QAAQ,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAE1D,MAAM,WAAW,0BAA0B;IAC1C,IAAI,CAAC,EAAE,MAAM,OAAO,OAAO,GAAG,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC;IACrD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAChB,OAAO,CAAC,aAAa;gBAAb,aAAa,GAAE,0BAA+B;IAalE,IAAI,KAAK,IAAI,WAAW,CAEvB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,oBAAoB,IAAI,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAExD;IAED,IAAI,OAAO,IAAI,WAAW,CAEzB;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,WAAW,EAElC;IAED,IAAI,OAAO,IAAI,cAAc,CAE5B;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,cAAc,EAErC;IAED,IAAI,IAAI,IAAI,OAAO,CAElB;CACD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,SAAK,GAAG,MAAM,CAmBlE"}
@@ -23,29 +23,40 @@ export class API {
23
23
  return cachedResponse;
24
24
  }
25
25
  }
26
- const response = await this.fetchApi(url, init);
27
- const responseJSON = await response?.json();
28
- if (response.status >= 200 && response.status < 300) {
29
- this.retryCount = 0; // reset count and delay incase rate limit occurs again before a page refresh
30
- this.retryDelay = 1000;
31
- if (cacheKey) {
32
- // save in the cache before returning
33
- this.cache.set(cacheKey, responseJSON);
26
+ let response;
27
+ let responseJSON;
28
+ try {
29
+ response = await this.fetchApi(url, init);
30
+ responseJSON = await response?.json();
31
+ if (response.status >= 200 && response.status < 300) {
32
+ this.retryCount = 0; // reset count and delay incase rate limit occurs again before a page refresh
33
+ this.retryDelay = 1000;
34
+ if (cacheKey) {
35
+ // save in the cache before returning
36
+ this.cache.set(cacheKey, responseJSON);
37
+ }
38
+ return responseJSON;
34
39
  }
35
- return responseJSON;
40
+ else if (response.status == 429) {
41
+ if (this.retryCount < this.configuration.maxRetry) {
42
+ await new Promise((resolve) => setTimeout(resolve, this.retryDelay)); // delay retry
43
+ this.retryDelay = fibonacci(this.retryCount) * 1000;
44
+ this.retryCount++;
45
+ throw new Error('Rate limited.');
46
+ }
47
+ else {
48
+ throw new Error('Retry rate limit exceeded.');
49
+ }
50
+ }
51
+ throw new Error('Unexpected Response Status.');
36
52
  }
37
- else if (response.status == 429) {
38
- if (this.retryCount < this.configuration.maxRetry) {
39
- await new Promise((resolve) => setTimeout(resolve, this.retryDelay)); // delay retry
40
- this.retryDelay = fibonacci(this.retryCount) * 1000;
41
- this.retryCount++;
53
+ catch (err) {
54
+ if (err.message == 'Rate limited.') {
42
55
  return await this.request(context, cacheKey);
43
56
  }
44
- else {
45
- throw response.status;
46
- }
57
+ // throw an object with fetch details
58
+ throw { err, fetchDetails: { status: response?.status, message: response?.statusText || 'FAILED', url, ...init } };
47
59
  }
48
- throw response.status;
49
60
  }
50
61
  createFetchParams(context) {
51
62
  // grab siteID out of context to generate apiHost fo URL
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@searchspring/snap-client",
3
- "version": "0.43.1",
3
+ "version": "0.44.0",
4
4
  "description": "Snap Client",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -20,12 +20,12 @@
20
20
  "test:watch": "jest --watch"
21
21
  },
22
22
  "dependencies": {
23
- "@searchspring/snap-toolbox": "^0.43.1",
23
+ "@searchspring/snap-toolbox": "^0.44.0",
24
24
  "deepmerge": "4.3.1"
25
25
  },
26
26
  "sideEffects": false,
27
27
  "files": [
28
28
  "dist/**/*"
29
29
  ],
30
- "gitHead": "45b2fd3657b3d4dddf4256657d18baa4be0647f8"
30
+ "gitHead": "d22fcf1a316fdae0866c21dbd697da8c4a706965"
31
31
  }