posthog-node 3.0.0 → 3.1.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/CHANGELOG.md +11 -1
- package/lib/index.cjs.js +110 -31
- package/lib/index.cjs.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.esm.js +110 -31
- package/lib/index.esm.js.map +1 -1
- package/lib/posthog-core/src/utils.d.ts +1 -1
- package/package.json +1 -1
- package/src/feature-flags.ts +1 -1
- package/src/fetch.ts +4 -2
- package/test/feature-flags.spec.ts +41 -6
- package/test/posthog-node.spec.ts +17 -4
package/lib/index.d.ts
CHANGED
|
@@ -85,7 +85,7 @@ declare type JsonType = string | number | boolean | null | {
|
|
|
85
85
|
interface RetriableOptions {
|
|
86
86
|
retryCount?: number;
|
|
87
87
|
retryDelay?: number;
|
|
88
|
-
retryCheck?: (err: any) =>
|
|
88
|
+
retryCheck?: (err: any) => boolean;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
declare class SimpleEventEmitter {
|
package/lib/index.esm.js
CHANGED
|
@@ -155,7 +155,7 @@ function __spreadArray(to, from, pack) {
|
|
|
155
155
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
var version = "3.
|
|
158
|
+
var version = "3.1.0";
|
|
159
159
|
|
|
160
160
|
var PostHogPersistedProperty;
|
|
161
161
|
(function (PostHogPersistedProperty) {
|
|
@@ -193,29 +193,31 @@ function retriable(fn, props) {
|
|
|
193
193
|
i = 0;
|
|
194
194
|
_d.label = 1;
|
|
195
195
|
case 1:
|
|
196
|
-
if (!(i < retryCount + 1)) return [3 /*break*/,
|
|
197
|
-
|
|
196
|
+
if (!(i < retryCount + 1)) return [3 /*break*/, 7];
|
|
197
|
+
if (!(i > 0)) return [3 /*break*/, 3];
|
|
198
|
+
// don't wait when it's the last try
|
|
199
|
+
return [4 /*yield*/, new Promise(function (r) { return setTimeout(r, retryDelay); })];
|
|
198
200
|
case 2:
|
|
199
|
-
|
|
200
|
-
|
|
201
|
+
// don't wait when it's the last try
|
|
202
|
+
_d.sent();
|
|
203
|
+
_d.label = 3;
|
|
201
204
|
case 3:
|
|
205
|
+
_d.trys.push([3, 5, , 6]);
|
|
206
|
+
return [4 /*yield*/, fn()];
|
|
207
|
+
case 4:
|
|
202
208
|
res = _d.sent();
|
|
203
209
|
return [2 /*return*/, res];
|
|
204
|
-
case
|
|
210
|
+
case 5:
|
|
205
211
|
e_1 = _d.sent();
|
|
206
212
|
lastError = e_1;
|
|
207
213
|
if (!retryCheck(e_1)) {
|
|
208
214
|
throw e_1;
|
|
209
215
|
}
|
|
210
|
-
return [3 /*break*/,
|
|
211
|
-
case 5: return [4 /*yield*/, new Promise(function (r) { return setTimeout(r, retryDelay); })];
|
|
216
|
+
return [3 /*break*/, 6];
|
|
212
217
|
case 6:
|
|
213
|
-
_d.sent();
|
|
214
|
-
_d.label = 7;
|
|
215
|
-
case 7:
|
|
216
218
|
i++;
|
|
217
219
|
return [3 /*break*/, 1];
|
|
218
|
-
case
|
|
220
|
+
case 7: throw lastError;
|
|
219
221
|
}
|
|
220
222
|
});
|
|
221
223
|
});
|
|
@@ -714,6 +716,29 @@ var SimpleEventEmitter = /** @class */ (function () {
|
|
|
714
716
|
return SimpleEventEmitter;
|
|
715
717
|
}());
|
|
716
718
|
|
|
719
|
+
var PostHogFetchHttpError = /** @class */ (function (_super) {
|
|
720
|
+
__extends(PostHogFetchHttpError, _super);
|
|
721
|
+
function PostHogFetchHttpError(response) {
|
|
722
|
+
var _this = _super.call(this, 'HTTP error while fetching PostHog: ' + response.status) || this;
|
|
723
|
+
_this.response = response;
|
|
724
|
+
_this.name = 'PostHogFetchHttpError';
|
|
725
|
+
return _this;
|
|
726
|
+
}
|
|
727
|
+
return PostHogFetchHttpError;
|
|
728
|
+
}(Error));
|
|
729
|
+
var PostHogFetchNetworkError = /** @class */ (function (_super) {
|
|
730
|
+
__extends(PostHogFetchNetworkError, _super);
|
|
731
|
+
function PostHogFetchNetworkError(error) {
|
|
732
|
+
var _this = _super.call(this, 'Network error while fetching PostHog', error instanceof Error ? { cause: error } : {}) || this;
|
|
733
|
+
_this.error = error;
|
|
734
|
+
_this.name = 'PostHogFetchNetworkError';
|
|
735
|
+
return _this;
|
|
736
|
+
}
|
|
737
|
+
return PostHogFetchNetworkError;
|
|
738
|
+
}(Error));
|
|
739
|
+
function isPostHogFetchError(err) {
|
|
740
|
+
return typeof err === 'object' && (err.name === 'PostHogFetchHttpError' || err.name === 'PostHogFetchNetworkError');
|
|
741
|
+
}
|
|
717
742
|
var PostHogCoreStateless = /** @class */ (function () {
|
|
718
743
|
function PostHogCoreStateless(apiKey, options) {
|
|
719
744
|
var _a, _b, _c, _d, _e;
|
|
@@ -733,6 +758,7 @@ var PostHogCoreStateless = /** @class */ (function () {
|
|
|
733
758
|
this._retryOptions = {
|
|
734
759
|
retryCount: (_b = options === null || options === void 0 ? void 0 : options.fetchRetryCount) !== null && _b !== void 0 ? _b : 3,
|
|
735
760
|
retryDelay: (_c = options === null || options === void 0 ? void 0 : options.fetchRetryDelay) !== null && _c !== void 0 ? _c : 3000,
|
|
761
|
+
retryCheck: isPostHogFetchError,
|
|
736
762
|
};
|
|
737
763
|
this.requestTimeout = (_d = options === null || options === void 0 ? void 0 : options.requestTimeout) !== null && _d !== void 0 ? _d : 10000; // 10 seconds
|
|
738
764
|
this.disableGeoip = (_e = options === null || options === void 0 ? void 0 : options.disableGeoip) !== null && _e !== void 0 ? _e : true;
|
|
@@ -1025,6 +1051,9 @@ var PostHogCoreStateless = /** @class */ (function () {
|
|
|
1025
1051
|
};
|
|
1026
1052
|
var promiseUUID = generateUUID();
|
|
1027
1053
|
var done = function (err) {
|
|
1054
|
+
if (err) {
|
|
1055
|
+
_this._events.emit('error', err);
|
|
1056
|
+
}
|
|
1028
1057
|
callback === null || callback === void 0 ? void 0 : callback(err, messages);
|
|
1029
1058
|
// remove promise from pendingPromises
|
|
1030
1059
|
delete _this.pendingPromises[promiseUUID];
|
|
@@ -1057,10 +1086,6 @@ var PostHogCoreStateless = /** @class */ (function () {
|
|
|
1057
1086
|
requestPromise
|
|
1058
1087
|
.then(function () { return done(); })
|
|
1059
1088
|
.catch(function (err) {
|
|
1060
|
-
if (err.response) {
|
|
1061
|
-
var error = new Error(err.response.statusText);
|
|
1062
|
-
return done(error);
|
|
1063
|
-
}
|
|
1064
1089
|
done(err);
|
|
1065
1090
|
});
|
|
1066
1091
|
};
|
|
@@ -1070,30 +1095,68 @@ var PostHogCoreStateless = /** @class */ (function () {
|
|
|
1070
1095
|
return __awaiter(this, void 0, void 0, function () {
|
|
1071
1096
|
var _this = this;
|
|
1072
1097
|
return __generator(this, function (_c) {
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1098
|
+
switch (_c.label) {
|
|
1099
|
+
case 0:
|
|
1100
|
+
(_a = (_b = AbortSignal).timeout) !== null && _a !== void 0 ? _a : (_b.timeout = function timeout(ms) {
|
|
1101
|
+
var ctrl = new AbortController();
|
|
1102
|
+
setTimeout(function () { return ctrl.abort(); }, ms);
|
|
1103
|
+
return ctrl.signal;
|
|
1104
|
+
});
|
|
1105
|
+
return [4 /*yield*/, retriable(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1106
|
+
var res, e_1;
|
|
1107
|
+
return __generator(this, function (_a) {
|
|
1108
|
+
switch (_a.label) {
|
|
1109
|
+
case 0:
|
|
1110
|
+
res = null;
|
|
1111
|
+
_a.label = 1;
|
|
1112
|
+
case 1:
|
|
1113
|
+
_a.trys.push([1, 3, , 4]);
|
|
1114
|
+
return [4 /*yield*/, this.fetch(url, __assign({ signal: AbortSignal.timeout(this.requestTimeout) }, options))];
|
|
1115
|
+
case 2:
|
|
1116
|
+
res = _a.sent();
|
|
1117
|
+
return [3 /*break*/, 4];
|
|
1118
|
+
case 3:
|
|
1119
|
+
e_1 = _a.sent();
|
|
1120
|
+
// fetch will only throw on network errors or on timeouts
|
|
1121
|
+
throw new PostHogFetchNetworkError(e_1);
|
|
1122
|
+
case 4:
|
|
1123
|
+
if (res.status < 200 || res.status >= 400) {
|
|
1124
|
+
throw new PostHogFetchHttpError(res);
|
|
1125
|
+
}
|
|
1126
|
+
return [2 /*return*/, res];
|
|
1127
|
+
}
|
|
1128
|
+
});
|
|
1129
|
+
}); }, __assign(__assign({}, this._retryOptions), retryOptions))];
|
|
1130
|
+
case 1: return [2 /*return*/, _c.sent()];
|
|
1131
|
+
}
|
|
1081
1132
|
});
|
|
1082
1133
|
});
|
|
1083
1134
|
};
|
|
1084
1135
|
PostHogCoreStateless.prototype.shutdownAsync = function () {
|
|
1085
1136
|
return __awaiter(this, void 0, void 0, function () {
|
|
1137
|
+
var e_2;
|
|
1086
1138
|
return __generator(this, function (_a) {
|
|
1087
1139
|
switch (_a.label) {
|
|
1088
1140
|
case 0:
|
|
1089
1141
|
clearTimeout(this._flushTimer);
|
|
1090
|
-
|
|
1142
|
+
_a.label = 1;
|
|
1091
1143
|
case 1:
|
|
1144
|
+
_a.trys.push([1, 4, , 5]);
|
|
1145
|
+
return [4 /*yield*/, this.flushAsync()];
|
|
1146
|
+
case 2:
|
|
1092
1147
|
_a.sent();
|
|
1093
1148
|
return [4 /*yield*/, Promise.allSettled(Object.values(this.pendingPromises))];
|
|
1094
|
-
case
|
|
1149
|
+
case 3:
|
|
1095
1150
|
_a.sent();
|
|
1096
|
-
return [
|
|
1151
|
+
return [3 /*break*/, 5];
|
|
1152
|
+
case 4:
|
|
1153
|
+
e_2 = _a.sent();
|
|
1154
|
+
if (!isPostHogFetchError(e_2)) {
|
|
1155
|
+
throw e_2;
|
|
1156
|
+
}
|
|
1157
|
+
console.error('Error while shutting down PostHog', e_2);
|
|
1158
|
+
return [3 /*break*/, 5];
|
|
1159
|
+
case 5: return [2 /*return*/];
|
|
1097
1160
|
}
|
|
1098
1161
|
});
|
|
1099
1162
|
});
|
|
@@ -1537,7 +1600,11 @@ var fetch = function (url, options) {
|
|
|
1537
1600
|
headers: options.headers,
|
|
1538
1601
|
method: options.method.toLowerCase(),
|
|
1539
1602
|
data: options.body,
|
|
1540
|
-
signal: options.signal
|
|
1603
|
+
signal: options.signal,
|
|
1604
|
+
// fetch only throws on network errors, not on HTTP errors
|
|
1605
|
+
validateStatus: function () {
|
|
1606
|
+
return true;
|
|
1607
|
+
}
|
|
1541
1608
|
})];
|
|
1542
1609
|
|
|
1543
1610
|
case 1:
|
|
@@ -1547,10 +1614,22 @@ var fetch = function (url, options) {
|
|
|
1547
1614
|
, {
|
|
1548
1615
|
status: res.status,
|
|
1549
1616
|
text: function () {
|
|
1550
|
-
return
|
|
1617
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
1618
|
+
return __generator(this, function (_a) {
|
|
1619
|
+
return [2
|
|
1620
|
+
/*return*/
|
|
1621
|
+
, res.data];
|
|
1622
|
+
});
|
|
1623
|
+
});
|
|
1551
1624
|
},
|
|
1552
1625
|
json: function () {
|
|
1553
|
-
return
|
|
1626
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
1627
|
+
return __generator(this, function (_a) {
|
|
1628
|
+
return [2
|
|
1629
|
+
/*return*/
|
|
1630
|
+
, res.data];
|
|
1631
|
+
});
|
|
1632
|
+
});
|
|
1554
1633
|
}
|
|
1555
1634
|
}];
|
|
1556
1635
|
}
|
|
@@ -2170,7 +2249,7 @@ function () {
|
|
|
2170
2249
|
|
|
2171
2250
|
case 3:
|
|
2172
2251
|
err_2 = _a.sent();
|
|
2173
|
-
throw
|
|
2252
|
+
throw err_2;
|
|
2174
2253
|
|
|
2175
2254
|
case 4:
|
|
2176
2255
|
clearTimeout(abortTimeout);
|