@amplitude/session-replay-browser 1.14.2 → 1.14.3
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/lib/cjs/events/events-idb-store.d.ts.map +1 -1
- package/lib/cjs/events/events-idb-store.js +8 -2
- package/lib/cjs/events/events-idb-store.js.map +1 -1
- package/lib/cjs/version.d.ts +1 -1
- package/lib/cjs/version.js +1 -1
- package/lib/cjs/version.js.map +1 -1
- package/lib/esm/events/events-idb-store.d.ts.map +1 -1
- package/lib/esm/events/events-idb-store.js +8 -2
- package/lib/esm/events/events-idb-store.js.map +1 -1
- package/lib/esm/version.d.ts +1 -1
- package/lib/esm/version.js +1 -1
- package/lib/esm/version.js.map +1 -1
- package/lib/scripts/amplitude-min.js +1 -1
- package/lib/scripts/amplitude-min.js.gz +0 -0
- package/lib/scripts/amplitude-min.umd.js +1 -1
- package/lib/scripts/amplitude-min.umd.js.gz +0 -0
- package/lib/scripts/events/events-idb-store.d.ts.map +1 -1
- package/lib/scripts/version.d.ts +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-idb-store.d.ts","sourceRoot":"","sources":["../../../src/events/events-idb-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAU,MAAM,KAAK,CAAC;AAGrD,OAAO,EACL,2BAA2B,IAAI,oCAAoC,EACnE,SAAS,EACT,MAAM,EACN,wBAAwB,EAEzB,MAAM,2BAA2B,CAAC;AAGnC,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AACpD,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAE9C,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,sBAAsB,EAAE;QACtB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE;YACL,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,eAAe,EAAE;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,wBAAwB,CAAC;QAChC,OAAO,EAAE;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;KAChC,CAAC;CACH;AAED,eAAO,MAAM,oBAAoB,QAAgB,QAAQ,WAAW,GAAG,IAAI,CA4B1E,CAAC;AAUF,eAAO,MAAM,kBAAkB,OAAQ,aAAa,eAAe,CAAC;;;CAmBnE,CAAC;AAEF,eAAO,MAAM,WAAW,WAAkB,MAAM,2CAI/C,CAAC;AACF,qBAAa,2BAA4B,YAAW,oCAAoC;IACtF,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;IAC9C,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,SAAM;IAChB,sBAAsB,SAAgC;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,EACV,cAAc,EACd,MAAM,EACN,WAAW,EACX,WAAW,GACZ,EAAE;QACD,cAAc,EAAE,OAAO,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;IAQK,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"events-idb-store.d.ts","sourceRoot":"","sources":["../../../src/events/events-idb-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAU,MAAM,KAAK,CAAC;AAGrD,OAAO,EACL,2BAA2B,IAAI,oCAAoC,EACnE,SAAS,EACT,MAAM,EACN,wBAAwB,EAEzB,MAAM,2BAA2B,CAAC;AAGnC,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AACpD,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAE9C,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,sBAAsB,EAAE;QACtB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE;YACL,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,eAAe,EAAE;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,wBAAwB,CAAC;QAChC,OAAO,EAAE;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;KAChC,CAAC;CACH;AAED,eAAO,MAAM,oBAAoB,QAAgB,QAAQ,WAAW,GAAG,IAAI,CA4B1E,CAAC;AAUF,eAAO,MAAM,kBAAkB,OAAQ,aAAa,eAAe,CAAC;;;CAmBnE,CAAC;AAEF,eAAO,MAAM,WAAW,WAAkB,MAAM,2CAI/C,CAAC;AACF,qBAAa,2BAA4B,YAAW,oCAAoC;IACtF,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;IAC9C,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,SAAM;IAChB,sBAAsB,SAAgC;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,EACV,cAAc,EACd,MAAM,EACN,WAAW,EACX,WAAW,GACZ,EAAE;QACD,cAAc,EAAE,OAAO,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;IAQK,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM;IAYpD;;;;;OAKG;IACH,qBAAqB,oCAAqC,MAAM,KAAG,OAAO,CAiBxE;IAEF,kBAAkB,kEAWhB;IAEF,oBAAoB,cAAqB,MAAM;;;;mBA0B7C;IAEF,yBAAyB,cAAqB,MAAM,SAAS,MAAM;;;;mBA8CjE;IAEF,kBAAkB,cAAqB,MAAM,iDAW3C;IAEF,yBAAyB,eAAsB,MAAM,mBAMnD;IAEF,yBAAyB,eAAsB,MAAM,mBA6EnD;CACH;AAED,eAAO,MAAM,oBAAoB;oBAQf,OAAO;YACf,MAAM;UACR,SAAS;;;;0CAQhB,CAAC"}
|
|
@@ -388,10 +388,11 @@ var SessionReplayEventsIDBStore = /** @class */ (function () {
|
|
|
388
388
|
}
|
|
389
389
|
SessionReplayEventsIDBStore.prototype.initialize = function (type, sessionId) {
|
|
390
390
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
391
|
-
var dbSuffix, dbName, _a;
|
|
391
|
+
var dbSuffix, dbName, _a, e_8;
|
|
392
392
|
return tslib_1.__generator(this, function (_b) {
|
|
393
393
|
switch (_b.label) {
|
|
394
394
|
case 0:
|
|
395
|
+
_b.trys.push([0, 3, , 4]);
|
|
395
396
|
dbSuffix = type === 'replay' ? '' : "_".concat(type);
|
|
396
397
|
dbName = "".concat(this.apiKey.substring(0, 10), "_amp_session_replay_events").concat(dbSuffix);
|
|
397
398
|
_a = this;
|
|
@@ -402,7 +403,12 @@ var SessionReplayEventsIDBStore = /** @class */ (function () {
|
|
|
402
403
|
return [4 /*yield*/, this.transitionFromKeyValStore(sessionId)];
|
|
403
404
|
case 2:
|
|
404
405
|
_b.sent();
|
|
405
|
-
return [
|
|
406
|
+
return [3 /*break*/, 4];
|
|
407
|
+
case 3:
|
|
408
|
+
e_8 = _b.sent();
|
|
409
|
+
this.loggerProvider.warn("".concat(messages_1.STORAGE_FAILURE, ": ").concat(e_8));
|
|
410
|
+
return [3 /*break*/, 4];
|
|
411
|
+
case 4: return [2 /*return*/];
|
|
406
412
|
}
|
|
407
413
|
});
|
|
408
414
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-idb-store.js","sourceRoot":"","sources":["../../../src/events/events-idb-store.ts"],"names":[],"mappings":"AAAA,iBAkXA;;;;AAlXA,8EAAoE;AACpE,4DAA2D;AAE3D,2BAAqD;AACrD,0CAAwF;AACxF,wCAA8C;AAQ9C,uDAAgF;AAEnE,QAAA,kBAAkB,GAAG,wBAAwB,CAAC;AAC9C,QAAA,kBAAkB,GAAG,iBAAiB,CAAC;AACvC,QAAA,eAAe,GAAG,cAAc,CAAC;AAiBvC,IAAM,oBAAoB,GAAG;IAClC,IAAM,WAAW,GAAG,IAAA,wCAAc,GAAE,CAAC;IACrC,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;QACjC,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;SACpD;QAED,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;YAC1B,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;SACnE;QAED,IAAI;YACF,IAAM,SAAO,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC3D,SAAO,CAAC,eAAe,GAAG;gBACxB,IAAI,SAAO,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE;oBAChC,SAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACvB,SAAO,CAAC,WAAW,IAAI,SAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;oBACnD,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;oBACrD,OAAO,EAAE,CAAC;iBACX;YACH,CAAC,CAAC;YACF,SAAO,CAAC,SAAS,GAAG;gBAClB,OAAO,CAAC,SAAO,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,CAAC,CAAC,CAAC;SACX;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AA5BW,QAAA,oBAAoB,wBA4B/B;AAEF,IAAM,eAAe,GAAG,UAAO,YAA4B;;;;;qBAClD,CAAA,YAAY,CAAC,MAAM,GAAG,CAAC,CAAA;gBACtB,SAAS,GAAG,EAAE,CAAC;gBACf,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAChD,qBAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAA;;gBAAxB,SAAwB,CAAC;;;;;KAE5B,CAAC;AAEK,IAAM,kBAAkB,GAAG,UAAC,EAAiC;IAClE,IAAI,cAAc,CAAC;IACnB,IAAI,oBAAoB,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,0BAAkB,CAAC,EAAE;QACrD,oBAAoB,GAAG,EAAE,CAAC,iBAAiB,CAAC,0BAAkB,EAAE;YAC9D,OAAO,EAAE,WAAW;SACrB,CAAC,CAAC;KACJ;IACD,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,0BAAkB,CAAC,EAAE;QACrD,cAAc,GAAG,EAAE,CAAC,iBAAiB,CAAC,0BAAkB,EAAE;YACxD,OAAO,EAAE,YAAY;YACrB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,cAAc,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;KACtD;IACD,OAAO;QACL,cAAc,gBAAA;QACd,oBAAoB,sBAAA;KACrB,CAAC;AACJ,CAAC,CAAC;AAnBW,QAAA,kBAAkB,sBAmB7B;AAEK,IAAM,WAAW,GAAG,UAAO,MAAc;;;oBACvC,qBAAM,IAAA,YAAM,EAAkB,MAAM,EAAE,CAAC,EAAE;oBAC9C,OAAO,EAAE,0BAAkB;iBAC5B,CAAC,EAAA;oBAFF,sBAAO,SAEL,EAAC;;;KACJ,CAAC;AAJW,QAAA,WAAW,eAItB;AACF;IAYE,qCAAY,EAUX;YATC,cAAc,oBAAA,EACd,MAAM,YAAA,EACN,WAAW,iBAAA,EACX,WAAW,iBAAA;QAJb,iBAgBC;QAxBD,eAAU,GAAG,EAAE,CAAC;QAChB,2BAAsB,GAAG,wCAA4B,CAAC;QAEtD,oBAAe,GAAkB,IAAI,CAAC;QA+BtC;;;;;WAKG;QACH,0BAAqB,GAAG,UAAC,MAAc,EAAE,eAAuB;YAC9D,IAAM,eAAe,GAAG,IAAI,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;YACzD,IAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YAC/C,IAAI,gBAAgB,GAAG,eAAe,IAAI,KAAI,CAAC,sBAAsB,EAAE;gBACrE,OAAO,IAAI,CAAC;aACb;YACD,IACE,KAAI,CAAC,eAAe,KAAK,IAAI;gBAC7B,KAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,GAAG,EAAE,GAAG,KAAI,CAAC,eAAe,GAAG,KAAI,CAAC,QAAQ;gBACjD,MAAM,CAAC,MAAM,EACb;gBACA,KAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAI,CAAC,WAAW,EAAE,KAAI,CAAC,QAAQ,GAAG,KAAI,CAAC,WAAW,CAAC,CAAC;gBAC7E,KAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,uBAAkB,GAAG;;;;;;;wBAEQ,qBAAM,CAAA,MAAA,IAAI,CAAC,EAAE,0CAAE,MAAM,CAC5C,0BAAkB,CACnB,CAAA,EAAA;;wBAFK,eAAe,GAAG,CAAC,SAExB,CAAgC;wBAEjC,sBAAO,eAAe,EAAC;;;wBAEvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAG,0BAAe,eAAK,GAAW,CAAE,CAAC,CAAC;;4BAEjE,sBAAO,SAAS,EAAC;;;aAClB,CAAC;QAEF,yBAAoB,GAAG,UAAO,SAAiB;;;;;;wBAE3C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;4BACZ,sBAAO,SAAS,EAAC;yBAClB;wBAC2B,qBAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAA2B,0BAAkB,EAAE,SAAS,CAAC,EAAA;;wBAAhG,mBAAmB,GAAG,SAA0E;wBACtG,IAAI,CAAC,mBAAmB,EAAE;4BACxB,sBAAO,SAAS,EAAC;yBAClB;wBAEkB,qBAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAoB,0BAAkB,EAAE;gCAC1E,SAAS,EAAE,SAAS;gCACpB,MAAM,EAAE,mBAAmB,CAAC,MAAM;6BACnC,CAAC,EAAA;;wBAHI,UAAU,GAAG,SAGjB;wBAEF,qBAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAA2B,0BAAkB,EAAE,EAAE,SAAS,WAAA,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAA;;wBAA1F,SAA0F,CAAC;wBAE3F,4DACK,mBAAmB,KACtB,SAAS,WAAA,EACT,UAAU,YAAA,KACV;;;wBAEF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAG,0BAAe,eAAK,GAAW,CAAE,CAAC,CAAC;;4BAEjE,sBAAO,SAAS,EAAC;;;aAClB,CAAC;QAEF,8BAAyB,GAAG,UAAO,SAAiB,EAAE,KAAa;;;;;;wBACjE,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;4BACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;yBAClC;;;;wBAGO,EAAE,GAAG,MAAA,IAAI,CAAC,EAAE,0CAAE,WAAW,CAAwC,0BAAkB,EAAE,WAAW,CAAC,CAAC;wBACxG,IAAI,CAAC,EAAE,EAAE;4BACP,sBAAO;yBACR;wBACsB,qBAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAA;;wBAA9C,cAAc,GAAG,SAA6B;6BAChD,CAAC,cAAc,EAAf,wBAAe;wBACjB,qBAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,WAAA,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAA;;wBAAlD,SAAkD,CAAC;wBACnD,sBAAO;;wBAEL,YAAY,SAAA,CAAC;6BACb,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,EAAxD,wBAAwD;wBAC1D,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC;wBACrC,2BAA2B;wBAC3B,qBAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,WAAA,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAA;;wBADlD,2BAA2B;wBAC3B,SAAkD,CAAC;;;wBAG7C,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC1D,qBAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,WAAA,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EAAA;;wBAAxD,SAAwD,CAAC;;4BAG3D,qBAAM,EAAE,CAAC,IAAI,EAAA;;wBAAb,SAAa,CAAC;wBACd,IAAI,CAAC,YAAY,EAAE;4BACjB,sBAAO,SAAS,EAAC;yBAClB;wBAEkB,qBAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,YAAY,CAAC,EAAA;;wBAAnE,UAAU,GAAG,SAAsD;wBAEzE,IAAI,CAAC,UAAU,EAAE;4BACf,sBAAO,SAAS,EAAC;yBAClB;wBAED,sBAAO;gCACL,MAAM,EAAE,YAAY;gCACpB,SAAS,WAAA;gCACT,UAAU,YAAA;6BACX,EAAC;;;wBAEF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAG,0BAAe,eAAK,GAAW,CAAE,CAAC,CAAC;;6BAEjE,sBAAO,SAAS,EAAC;;;aAClB,CAAC;QAEF,uBAAkB,GAAG,UAAO,SAAiB,EAAE,MAAc;;;;;;;wBAEtC,qBAAM,CAAA,MAAA,IAAI,CAAC,EAAE,0CAAE,GAAG,CAAoB,0BAAkB,EAAE;gCAC3E,SAAS,EAAE,SAAS;gCACpB,MAAM,EAAE,MAAM;6BACf,CAAC,CAAA,EAAA;;wBAHI,UAAU,GAAG,SAGjB;wBACF,sBAAO,UAAU,EAAC;;;wBAElB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAG,0BAAe,eAAK,GAAW,CAAE,CAAC,CAAC;;4BAEjE,sBAAO,SAAS,EAAC;;;aAClB,CAAC;QAEF,8BAAyB,GAAG,UAAO,UAAkB;;;;;;;wBAEjD,qBAAM,CAAA,MAAA,IAAI,CAAC,EAAE,0CAAE,MAAM,CAAoB,0BAAkB,EAAE,UAAU,CAAC,CAAA,EAAA;;wBAAxE,SAAwE,CAAC;;;;wBAEzE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAG,0BAAe,eAAK,GAAW,CAAE,CAAC,CAAC;;;;;aAElE,CAAC;QAEF,8BAAyB,GAAG,UAAO,SAAkB;;;;;;;wBAEhC,qBAAM,IAAA,4BAAoB,GAAE,EAAA;;wBAAvC,QAAQ,GAAG,SAA4B;wBAC7C,IAAI,CAAC,QAAQ,EAAE;4BACb,sBAAO;yBACR;wBAEK,sCAAoC,UAAO,gBAAwB,EAAE,YAA6B;;;;;;wCAChG,uBAAuB,GAAG,YAAY,CAAC,gBAAgB,CAAC;wCACxD,eAAe,GAA8D,EAAE,CAAC;wCAEtF,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAAC,UAAC,UAAU;4CACtD,IAAM,iBAAiB,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;4CACnD,IAAM,QAAQ,GAAG,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;4CAC5D,IAAI,iBAAiB,KAAK,YAAY,CAAC,iBAAiB,EAAE;gDACxD,IAAM,gBAAgB,GAAqD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAC5F,UAAO,KAAK;oDAAK,sBAAA,IAAI,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAA;yDAAA,CACzE,CAAC;gDACF,eAAe,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;6CAC1C;iDAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,kCAAe,CAAC,IAAI,EAAE;gDACnD,eAAe,CAAC,IAAI,CAAC,KAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;6CAClF;wCACH,CAAC,CAAC,CAAC;wCAEH,qBAAM,eAAe,CAAC,eAAe,CAAC,EAAA;;wCAAtC,SAAsC,CAAC;;;;6BACxC,CAAC;wBAEI,UAAU,GAAG,UAAG,+BAAc,cAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC;;;;wBAE/D,kBAAgB,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;wBACxF,iBAAiB,GAAG,IAAI,OAAO,CAAO,UAAC,OAAO;4BAClD,eAAa,CAAC,SAAS,GAAG,UAAO,CAAC;;;;;;4CAC1B,8BAA8B,GAAG,CAAC,IAAM,CAAC,CAAC,MAAqB,CAAC,MAAqB,CAAC;4CACtF,2BAA2B,GAAG,8BAA8B,IAAI,8BAA8B,CAAC,CAAC,CAAC,CAAC;iDACpG,2BAA2B,EAA3B,wBAA2B;4CACvB,oBAAkC,EAAE,CAAC;4CAE3C,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,OAAO,CAAC,UAAC,eAAe;gDAC/D,IAAM,gBAAgB,GAAG,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;gDACvD,IAAM,eAAe,GAAG,2BAA2B,CAAC,gBAAgB,CAAC,CAAC;gDAEtE,IAAI,SAAS,KAAK,gBAAgB,EAAE;oDAClC,iBAAe,CAAC,IAAI,CAAC,mCAAiC,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC;iDAC5F;qDAAM;oDACL,IAAM,qBAAmB,GAAG,eAAe,CAAC,gBAAgB,CAAC;oDAC7D,MAAM,CAAC,IAAI,CAAC,qBAAmB,CAAC,CAAC,OAAO,CAAC,UAAC,UAAU;wDAClD,IAAM,iBAAiB,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;wDACnD,IAAI,qBAAmB,CAAC,iBAAiB,CAAC,CAAC,MAAM,KAAK,kCAAe,CAAC,IAAI,EAAE;4DAC1E,iBAAe,CAAC,IAAI,CAClB,KAAI,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,qBAAmB,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CACzF,CAAC;yDACH;oDACH,CAAC,CAAC,CAAC;iDACJ;4CACH,CAAC,CAAC,CAAC;4CAEH,qBAAM,eAAe,CAAC,iBAAe,CAAC,EAAA;;4CAAtC,SAAsC,CAAC;;;4CAEzC,OAAO,EAAE,CAAC;;;;iCACX,CAAC;wBACJ,CAAC,CAAC,CAAC;wBAEH,qBAAM,iBAAiB,EAAA;;wBAAvB,SAAuB,CAAC;wBAClB,WAAW,GAAG,IAAA,wCAAc,GAAE,CAAC;wBACrC,IAAI,WAAW,EAAE;4BACf,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;yBACtD;;;;wBAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,+EAAwE,GAAW,CAAE,CAAC,CAAC;;;;;wBAGlH,IAAI,CAAC,cAAc,CAAC,IAAI,CACtB,yCACE,GAAW,sIACsH,CACpI,CAAC;;;;;aAEL,CAAC;QAnOA,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,wBAAY,CAAC;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,wBAAY,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;IACpB,CAAC;IAEK,gDAAU,GAAhB,UAAiB,IAAe,EAAE,SAAkB;;;;;;wBAC5C,QAAQ,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAI,IAAI,CAAE,CAAC;wBAC/C,MAAM,GAAG,UAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,uCAA6B,QAAQ,CAAE,CAAC;wBACtF,KAAA,IAAI,CAAA;wBAAM,qBAAM,IAAA,mBAAW,EAAC,MAAM,CAAC,EAAA;;wBAAnC,GAAK,EAAE,GAAG,SAAyB,CAAC;wBACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,4EAA4E;wBAC/G,qBAAM,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,EAAA;;wBAA/C,SAA+C,CAAC;;;;;KACjD;IAuNH,kCAAC;AAAD,CAAC,AA3PD,IA2PC;AA3PY,kEAA2B;AA6PjC,IAAM,oBAAoB,GAAG,UAAO,EAc1C;QAbC,cAAc,oBAAA,EACd,MAAM,YAAA,EACN,SAAS,eAAA,EACT,IAAI,UAAA,EACJ,WAAW,iBAAA,EACX,WAAW,iBAAA;;;;;;oBASL,cAAc,GAAG,IAAI,2BAA2B,CAAC,EAAE,cAAc,gBAAA,EAAE,MAAM,QAAA,EAAE,WAAW,aAAA,EAAE,WAAW,aAAA,EAAE,CAAC,CAAC;oBAC7G,qBAAM,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,EAAA;;oBAAhD,SAAgD,CAAC;oBACjD,sBAAO,cAAc,EAAC;;;;CACvB,CAAC;AAlBW,QAAA,oBAAoB,wBAkB/B","sourcesContent":["import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { STORAGE_PREFIX } from '@amplitude/analytics-core';\nimport { Logger as ILogger } from '@amplitude/analytics-types';\nimport { DBSchema, IDBPDatabase, openDB } from 'idb';\nimport { MAX_EVENT_LIST_SIZE_IN_BYTES, MAX_INTERVAL, MIN_INTERVAL } from '../constants';\nimport { STORAGE_FAILURE } from '../messages';\nimport {\n SessionReplayEventsIDBStore as AmplitudeSessionReplayEventsIDBStore,\n EventType,\n Events,\n SendingSequencesIDBInput,\n SendingSequencesIDBReturn,\n} from '../typings/session-replay';\nimport { IDBStore, IDBStoreSession, RecordingStatus } from './legacy-idb-types';\n\nexport const currentSequenceKey = 'sessionCurrentSequence';\nexport const sequencesToSendKey = 'sequencesToSend';\nexport const remoteConfigKey = 'remoteConfig';\n\nexport interface SessionReplayDB extends DBSchema {\n sessionCurrentSequence: {\n key: number;\n value: {\n sessionId: number;\n events: Events;\n };\n };\n sequencesToSend: {\n key: number;\n value: SendingSequencesIDBInput;\n indexes: { sessionId: number };\n };\n}\n\nexport const keyValDatabaseExists = function (): Promise<IDBDatabase | void> {\n const globalScope = getGlobalScope();\n return new Promise((resolve, reject) => {\n if (!globalScope) {\n return reject(new Error('Global scope not found'));\n }\n\n if (!globalScope.indexedDB) {\n return reject(new Error('Session Replay: cannot find indexedDB'));\n }\n\n try {\n const request = globalScope.indexedDB.open('keyval-store');\n request.onupgradeneeded = function () {\n if (request.result.version === 1) {\n request.result.close();\n request.transaction && request.transaction.abort();\n globalScope.indexedDB.deleteDatabase('keyval-store');\n resolve();\n }\n };\n request.onsuccess = function () {\n resolve(request.result);\n };\n } catch (e) {\n reject(e);\n }\n });\n};\n\nconst batchPromiseAll = async (promiseBatch: Promise<any>[]) => {\n while (promiseBatch.length > 0) {\n const chunkSize = 10;\n const batch = promiseBatch.splice(0, chunkSize);\n await Promise.all(batch);\n }\n};\n\nexport const defineObjectStores = (db: IDBPDatabase<SessionReplayDB>) => {\n let sequencesStore;\n let currentSequenceStore;\n if (!db.objectStoreNames.contains(currentSequenceKey)) {\n currentSequenceStore = db.createObjectStore(currentSequenceKey, {\n keyPath: 'sessionId',\n });\n }\n if (!db.objectStoreNames.contains(sequencesToSendKey)) {\n sequencesStore = db.createObjectStore(sequencesToSendKey, {\n keyPath: 'sequenceId',\n autoIncrement: true,\n });\n sequencesStore.createIndex('sessionId', 'sessionId');\n }\n return {\n sequencesStore,\n currentSequenceStore,\n };\n};\n\nexport const createStore = async (dbName: string) => {\n return await openDB<SessionReplayDB>(dbName, 1, {\n upgrade: defineObjectStores,\n });\n};\nexport class SessionReplayEventsIDBStore implements AmplitudeSessionReplayEventsIDBStore {\n apiKey: string;\n db: IDBPDatabase<SessionReplayDB> | undefined;\n loggerProvider: ILogger;\n storageKey = '';\n maxPersistedEventsSize = MAX_EVENT_LIST_SIZE_IN_BYTES;\n interval: number;\n timeAtLastSplit: number | null = null;\n\n private readonly minInterval: number;\n private readonly maxInterval: number;\n\n constructor({\n loggerProvider,\n apiKey,\n minInterval,\n maxInterval,\n }: {\n loggerProvider: ILogger;\n apiKey: string;\n minInterval?: number;\n maxInterval?: number;\n }) {\n this.loggerProvider = loggerProvider;\n this.apiKey = apiKey;\n this.maxInterval = maxInterval ?? MAX_INTERVAL;\n this.minInterval = minInterval ?? MIN_INTERVAL;\n this.interval = 0;\n }\n\n async initialize(type: EventType, sessionId?: number) {\n const dbSuffix = type === 'replay' ? '' : `_${type}`;\n const dbName = `${this.apiKey.substring(0, 10)}_amp_session_replay_events${dbSuffix}`;\n this.db = await createStore(dbName);\n this.timeAtLastSplit = Date.now(); // Initialize this so we have a point of comparison when events are recorded\n await this.transitionFromKeyValStore(sessionId);\n }\n\n /**\n * Determines whether to send the events list to the backend and start a new\n * empty events list, based on the size of the list as well as the last time sent\n * @param nextEventString\n * @returns boolean\n */\n shouldSplitEventsList = (events: Events, nextEventString: string): boolean => {\n const sizeOfNextEvent = new Blob([nextEventString]).size;\n const sizeOfEventsList = new Blob(events).size;\n if (sizeOfEventsList + sizeOfNextEvent >= this.maxPersistedEventsSize) {\n return true;\n }\n if (\n this.timeAtLastSplit !== null &&\n this.interval &&\n Date.now() - this.timeAtLastSplit > this.interval &&\n events.length\n ) {\n this.interval = Math.min(this.maxInterval, this.interval + this.minInterval);\n this.timeAtLastSplit = Date.now();\n return true;\n }\n return false;\n };\n\n getSequencesToSend = async () => {\n try {\n const sequencesToSend = (await this.db?.getAll<'sequencesToSend'>(\n sequencesToSendKey,\n )) as SendingSequencesIDBReturn[];\n\n return sequencesToSend;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeCurrentSequence = async (sessionId: number) => {\n try {\n if (!this.db) {\n return undefined;\n }\n const currentSequenceData = await this.db.get<'sessionCurrentSequence'>(currentSequenceKey, sessionId);\n if (!currentSequenceData) {\n return undefined;\n }\n\n const sequenceId = await this.db.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: currentSequenceData.events,\n });\n\n await this.db.put<'sessionCurrentSequence'>(currentSequenceKey, { sessionId, events: [] });\n\n return {\n ...currentSequenceData,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n addEventToCurrentSequence = async (sessionId: number, event: string) => {\n if (this.interval === 0) {\n this.interval = this.minInterval;\n }\n\n try {\n const tx = this.db?.transaction<'sessionCurrentSequence', 'readwrite'>(currentSequenceKey, 'readwrite');\n if (!tx) {\n return;\n }\n const sequenceEvents = await tx.store.get(sessionId);\n if (!sequenceEvents) {\n await tx.store.put({ sessionId, events: [event] });\n return;\n }\n let eventsToSend;\n if (this.shouldSplitEventsList(sequenceEvents.events, event)) {\n eventsToSend = sequenceEvents.events;\n // set store to empty array\n await tx.store.put({ sessionId, events: [event] });\n } else {\n // add event to array\n const updatedEvents = sequenceEvents.events.concat(event);\n await tx.store.put({ sessionId, events: updatedEvents });\n }\n\n await tx.done;\n if (!eventsToSend) {\n return undefined;\n }\n\n const sequenceId = await this.storeSendingEvents(sessionId, eventsToSend);\n\n if (!sequenceId) {\n return undefined;\n }\n\n return {\n events: eventsToSend,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeSendingEvents = async (sessionId: number, events: Events) => {\n try {\n const sequenceId = await this.db?.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: events,\n });\n return sequenceId;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n cleanUpSessionEventsStore = async (sequenceId: number) => {\n try {\n await this.db?.delete<'sequencesToSend'>(sequencesToSendKey, sequenceId);\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n };\n\n transitionFromKeyValStore = async (sessionId?: number) => {\n try {\n const keyValDb = await keyValDatabaseExists();\n if (!keyValDb) {\n return;\n }\n\n const transitionCurrentSessionSequences = async (numericSessionId: number, sessionStore: IDBStoreSession) => {\n const currentSessionSequences = sessionStore.sessionSequences;\n const promisesToBatch: Promise<number | SendingSequencesIDBReturn | undefined>[] = [];\n\n Object.keys(currentSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n const sequence = currentSessionSequences[numericSequenceId];\n if (numericSequenceId === sessionStore.currentSequenceId) {\n const eventAddPromises: Promise<SendingSequencesIDBReturn | undefined>[] = sequence.events.map(\n async (event) => this.addEventToCurrentSequence(numericSessionId, event),\n );\n promisesToBatch.concat(eventAddPromises);\n } else if (sequence.status !== RecordingStatus.SENT) {\n promisesToBatch.push(this.storeSendingEvents(numericSessionId, sequence.events));\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n };\n\n const storageKey = `${STORAGE_PREFIX}_${this.apiKey.substring(0, 10)}`;\n try {\n const getAllRequest = keyValDb.transaction('keyval').objectStore('keyval').getAll(storageKey);\n const transitionPromise = new Promise<void>((resolve) => {\n getAllRequest.onsuccess = async (e) => {\n const storedReplaySessionContextList = e && ((e.target as IDBRequest).result as IDBStore[]);\n const storedReplaySessionContexts = storedReplaySessionContextList && storedReplaySessionContextList[0];\n if (storedReplaySessionContexts) {\n const promisesToBatch: Promise<any>[] = [];\n\n Object.keys(storedReplaySessionContexts).forEach((storedSessionId) => {\n const numericSessionId = parseInt(storedSessionId, 10);\n const oldSessionStore = storedReplaySessionContexts[numericSessionId];\n\n if (sessionId === numericSessionId) {\n promisesToBatch.push(transitionCurrentSessionSequences(numericSessionId, oldSessionStore));\n } else {\n const oldSessionSequences = oldSessionStore.sessionSequences;\n Object.keys(oldSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n if (oldSessionSequences[numericSequenceId].status !== RecordingStatus.SENT) {\n promisesToBatch.push(\n this.storeSendingEvents(numericSessionId, oldSessionSequences[numericSequenceId].events),\n );\n }\n });\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n }\n resolve();\n };\n });\n\n await transitionPromise;\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.indexedDB.deleteDatabase('keyval-store');\n }\n } catch (e) {\n this.loggerProvider.warn(`Failed to transition session replay events from keyval to new store: ${e as string}`);\n }\n } catch (e) {\n this.loggerProvider.warn(\n `Failed to access keyval store: ${\n e as string\n }. For more information, visit: https://www.docs.developers.amplitude.com/session-replay/sdks/standalone/#indexeddb-best-practices`,\n );\n }\n };\n}\n\nexport const createEventsIDBStore = async ({\n loggerProvider,\n apiKey,\n sessionId,\n type,\n minInterval,\n maxInterval,\n}: {\n loggerProvider: ILogger;\n apiKey: string;\n type: EventType;\n minInterval?: number;\n maxInterval?: number;\n sessionId?: number;\n}) => {\n const eventsIDBStore = new SessionReplayEventsIDBStore({ loggerProvider, apiKey, minInterval, maxInterval });\n await eventsIDBStore.initialize(type, sessionId);\n return eventsIDBStore;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"events-idb-store.js","sourceRoot":"","sources":["../../../src/events/events-idb-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { STORAGE_PREFIX } from '@amplitude/analytics-core';\nimport { Logger as ILogger } from '@amplitude/analytics-types';\nimport { DBSchema, IDBPDatabase, openDB } from 'idb';\nimport { MAX_EVENT_LIST_SIZE_IN_BYTES, MAX_INTERVAL, MIN_INTERVAL } from '../constants';\nimport { STORAGE_FAILURE } from '../messages';\nimport {\n SessionReplayEventsIDBStore as AmplitudeSessionReplayEventsIDBStore,\n EventType,\n Events,\n SendingSequencesIDBInput,\n SendingSequencesIDBReturn,\n} from '../typings/session-replay';\nimport { IDBStore, IDBStoreSession, RecordingStatus } from './legacy-idb-types';\n\nexport const currentSequenceKey = 'sessionCurrentSequence';\nexport const sequencesToSendKey = 'sequencesToSend';\nexport const remoteConfigKey = 'remoteConfig';\n\nexport interface SessionReplayDB extends DBSchema {\n sessionCurrentSequence: {\n key: number;\n value: {\n sessionId: number;\n events: Events;\n };\n };\n sequencesToSend: {\n key: number;\n value: SendingSequencesIDBInput;\n indexes: { sessionId: number };\n };\n}\n\nexport const keyValDatabaseExists = function (): Promise<IDBDatabase | void> {\n const globalScope = getGlobalScope();\n return new Promise((resolve, reject) => {\n if (!globalScope) {\n return reject(new Error('Global scope not found'));\n }\n\n if (!globalScope.indexedDB) {\n return reject(new Error('Session Replay: cannot find indexedDB'));\n }\n\n try {\n const request = globalScope.indexedDB.open('keyval-store');\n request.onupgradeneeded = function () {\n if (request.result.version === 1) {\n request.result.close();\n request.transaction && request.transaction.abort();\n globalScope.indexedDB.deleteDatabase('keyval-store');\n resolve();\n }\n };\n request.onsuccess = function () {\n resolve(request.result);\n };\n } catch (e) {\n reject(e);\n }\n });\n};\n\nconst batchPromiseAll = async (promiseBatch: Promise<any>[]) => {\n while (promiseBatch.length > 0) {\n const chunkSize = 10;\n const batch = promiseBatch.splice(0, chunkSize);\n await Promise.all(batch);\n }\n};\n\nexport const defineObjectStores = (db: IDBPDatabase<SessionReplayDB>) => {\n let sequencesStore;\n let currentSequenceStore;\n if (!db.objectStoreNames.contains(currentSequenceKey)) {\n currentSequenceStore = db.createObjectStore(currentSequenceKey, {\n keyPath: 'sessionId',\n });\n }\n if (!db.objectStoreNames.contains(sequencesToSendKey)) {\n sequencesStore = db.createObjectStore(sequencesToSendKey, {\n keyPath: 'sequenceId',\n autoIncrement: true,\n });\n sequencesStore.createIndex('sessionId', 'sessionId');\n }\n return {\n sequencesStore,\n currentSequenceStore,\n };\n};\n\nexport const createStore = async (dbName: string) => {\n return await openDB<SessionReplayDB>(dbName, 1, {\n upgrade: defineObjectStores,\n });\n};\nexport class SessionReplayEventsIDBStore implements AmplitudeSessionReplayEventsIDBStore {\n apiKey: string;\n db: IDBPDatabase<SessionReplayDB> | undefined;\n loggerProvider: ILogger;\n storageKey = '';\n maxPersistedEventsSize = MAX_EVENT_LIST_SIZE_IN_BYTES;\n interval: number;\n timeAtLastSplit: number | null = null;\n\n private readonly minInterval: number;\n private readonly maxInterval: number;\n\n constructor({\n loggerProvider,\n apiKey,\n minInterval,\n maxInterval,\n }: {\n loggerProvider: ILogger;\n apiKey: string;\n minInterval?: number;\n maxInterval?: number;\n }) {\n this.loggerProvider = loggerProvider;\n this.apiKey = apiKey;\n this.maxInterval = maxInterval ?? MAX_INTERVAL;\n this.minInterval = minInterval ?? MIN_INTERVAL;\n this.interval = 0;\n }\n\n async initialize(type: EventType, sessionId?: number) {\n try {\n const dbSuffix = type === 'replay' ? '' : `_${type}`;\n const dbName = `${this.apiKey.substring(0, 10)}_amp_session_replay_events${dbSuffix}`;\n this.db = await createStore(dbName);\n this.timeAtLastSplit = Date.now(); // Initialize this so we have a point of comparison when events are recorded\n await this.transitionFromKeyValStore(sessionId);\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n }\n\n /**\n * Determines whether to send the events list to the backend and start a new\n * empty events list, based on the size of the list as well as the last time sent\n * @param nextEventString\n * @returns boolean\n */\n shouldSplitEventsList = (events: Events, nextEventString: string): boolean => {\n const sizeOfNextEvent = new Blob([nextEventString]).size;\n const sizeOfEventsList = new Blob(events).size;\n if (sizeOfEventsList + sizeOfNextEvent >= this.maxPersistedEventsSize) {\n return true;\n }\n if (\n this.timeAtLastSplit !== null &&\n this.interval &&\n Date.now() - this.timeAtLastSplit > this.interval &&\n events.length\n ) {\n this.interval = Math.min(this.maxInterval, this.interval + this.minInterval);\n this.timeAtLastSplit = Date.now();\n return true;\n }\n return false;\n };\n\n getSequencesToSend = async () => {\n try {\n const sequencesToSend = (await this.db?.getAll<'sequencesToSend'>(\n sequencesToSendKey,\n )) as SendingSequencesIDBReturn[];\n\n return sequencesToSend;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeCurrentSequence = async (sessionId: number) => {\n try {\n if (!this.db) {\n return undefined;\n }\n const currentSequenceData = await this.db.get<'sessionCurrentSequence'>(currentSequenceKey, sessionId);\n if (!currentSequenceData) {\n return undefined;\n }\n\n const sequenceId = await this.db.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: currentSequenceData.events,\n });\n\n await this.db.put<'sessionCurrentSequence'>(currentSequenceKey, { sessionId, events: [] });\n\n return {\n ...currentSequenceData,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n addEventToCurrentSequence = async (sessionId: number, event: string) => {\n if (this.interval === 0) {\n this.interval = this.minInterval;\n }\n\n try {\n const tx = this.db?.transaction<'sessionCurrentSequence', 'readwrite'>(currentSequenceKey, 'readwrite');\n if (!tx) {\n return;\n }\n const sequenceEvents = await tx.store.get(sessionId);\n if (!sequenceEvents) {\n await tx.store.put({ sessionId, events: [event] });\n return;\n }\n let eventsToSend;\n if (this.shouldSplitEventsList(sequenceEvents.events, event)) {\n eventsToSend = sequenceEvents.events;\n // set store to empty array\n await tx.store.put({ sessionId, events: [event] });\n } else {\n // add event to array\n const updatedEvents = sequenceEvents.events.concat(event);\n await tx.store.put({ sessionId, events: updatedEvents });\n }\n\n await tx.done;\n if (!eventsToSend) {\n return undefined;\n }\n\n const sequenceId = await this.storeSendingEvents(sessionId, eventsToSend);\n\n if (!sequenceId) {\n return undefined;\n }\n\n return {\n events: eventsToSend,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeSendingEvents = async (sessionId: number, events: Events) => {\n try {\n const sequenceId = await this.db?.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: events,\n });\n return sequenceId;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n cleanUpSessionEventsStore = async (sequenceId: number) => {\n try {\n await this.db?.delete<'sequencesToSend'>(sequencesToSendKey, sequenceId);\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n };\n\n transitionFromKeyValStore = async (sessionId?: number) => {\n try {\n const keyValDb = await keyValDatabaseExists();\n if (!keyValDb) {\n return;\n }\n\n const transitionCurrentSessionSequences = async (numericSessionId: number, sessionStore: IDBStoreSession) => {\n const currentSessionSequences = sessionStore.sessionSequences;\n const promisesToBatch: Promise<number | SendingSequencesIDBReturn | undefined>[] = [];\n\n Object.keys(currentSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n const sequence = currentSessionSequences[numericSequenceId];\n if (numericSequenceId === sessionStore.currentSequenceId) {\n const eventAddPromises: Promise<SendingSequencesIDBReturn | undefined>[] = sequence.events.map(\n async (event) => this.addEventToCurrentSequence(numericSessionId, event),\n );\n promisesToBatch.concat(eventAddPromises);\n } else if (sequence.status !== RecordingStatus.SENT) {\n promisesToBatch.push(this.storeSendingEvents(numericSessionId, sequence.events));\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n };\n\n const storageKey = `${STORAGE_PREFIX}_${this.apiKey.substring(0, 10)}`;\n try {\n const getAllRequest = keyValDb.transaction('keyval').objectStore('keyval').getAll(storageKey);\n const transitionPromise = new Promise<void>((resolve) => {\n getAllRequest.onsuccess = async (e) => {\n const storedReplaySessionContextList = e && ((e.target as IDBRequest).result as IDBStore[]);\n const storedReplaySessionContexts = storedReplaySessionContextList && storedReplaySessionContextList[0];\n if (storedReplaySessionContexts) {\n const promisesToBatch: Promise<any>[] = [];\n\n Object.keys(storedReplaySessionContexts).forEach((storedSessionId) => {\n const numericSessionId = parseInt(storedSessionId, 10);\n const oldSessionStore = storedReplaySessionContexts[numericSessionId];\n\n if (sessionId === numericSessionId) {\n promisesToBatch.push(transitionCurrentSessionSequences(numericSessionId, oldSessionStore));\n } else {\n const oldSessionSequences = oldSessionStore.sessionSequences;\n Object.keys(oldSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n if (oldSessionSequences[numericSequenceId].status !== RecordingStatus.SENT) {\n promisesToBatch.push(\n this.storeSendingEvents(numericSessionId, oldSessionSequences[numericSequenceId].events),\n );\n }\n });\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n }\n resolve();\n };\n });\n\n await transitionPromise;\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.indexedDB.deleteDatabase('keyval-store');\n }\n } catch (e) {\n this.loggerProvider.warn(`Failed to transition session replay events from keyval to new store: ${e as string}`);\n }\n } catch (e) {\n this.loggerProvider.warn(\n `Failed to access keyval store: ${\n e as string\n }. For more information, visit: https://www.docs.developers.amplitude.com/session-replay/sdks/standalone/#indexeddb-best-practices`,\n );\n }\n };\n}\n\nexport const createEventsIDBStore = async ({\n loggerProvider,\n apiKey,\n sessionId,\n type,\n minInterval,\n maxInterval,\n}: {\n loggerProvider: ILogger;\n apiKey: string;\n type: EventType;\n minInterval?: number;\n maxInterval?: number;\n sessionId?: number;\n}) => {\n const eventsIDBStore = new SessionReplayEventsIDBStore({ loggerProvider, apiKey, minInterval, maxInterval });\n await eventsIDBStore.initialize(type, sessionId);\n return eventsIDBStore;\n};\n"]}
|
package/lib/cjs/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "1.14.
|
|
1
|
+
export declare const VERSION = "1.14.3";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/cjs/version.js
CHANGED
package/lib/cjs/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;AAAA,oDAAoD;AACvC,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.14.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":";;AAAA,oDAAoD;AACvC,QAAA,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.14.3';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-idb-store.d.ts","sourceRoot":"","sources":["../../../src/events/events-idb-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAU,MAAM,KAAK,CAAC;AAGrD,OAAO,EACL,2BAA2B,IAAI,oCAAoC,EACnE,SAAS,EACT,MAAM,EACN,wBAAwB,EAEzB,MAAM,2BAA2B,CAAC;AAGnC,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AACpD,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAE9C,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,sBAAsB,EAAE;QACtB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE;YACL,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,eAAe,EAAE;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,wBAAwB,CAAC;QAChC,OAAO,EAAE;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;KAChC,CAAC;CACH;AAED,eAAO,MAAM,oBAAoB,QAAgB,QAAQ,WAAW,GAAG,IAAI,CA4B1E,CAAC;AAUF,eAAO,MAAM,kBAAkB,OAAQ,aAAa,eAAe,CAAC;;;CAmBnE,CAAC;AAEF,eAAO,MAAM,WAAW,WAAkB,MAAM,2CAI/C,CAAC;AACF,qBAAa,2BAA4B,YAAW,oCAAoC;IACtF,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;IAC9C,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,SAAM;IAChB,sBAAsB,SAAgC;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,EACV,cAAc,EACd,MAAM,EACN,WAAW,EACX,WAAW,GACZ,EAAE;QACD,cAAc,EAAE,OAAO,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;IAQK,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"events-idb-store.d.ts","sourceRoot":"","sources":["../../../src/events/events-idb-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAU,MAAM,KAAK,CAAC;AAGrD,OAAO,EACL,2BAA2B,IAAI,oCAAoC,EACnE,SAAS,EACT,MAAM,EACN,wBAAwB,EAEzB,MAAM,2BAA2B,CAAC;AAGnC,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AACpD,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAE9C,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,sBAAsB,EAAE;QACtB,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE;YACL,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,eAAe,EAAE;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,wBAAwB,CAAC;QAChC,OAAO,EAAE;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;KAChC,CAAC;CACH;AAED,eAAO,MAAM,oBAAoB,QAAgB,QAAQ,WAAW,GAAG,IAAI,CA4B1E,CAAC;AAUF,eAAO,MAAM,kBAAkB,OAAQ,aAAa,eAAe,CAAC;;;CAmBnE,CAAC;AAEF,eAAO,MAAM,WAAW,WAAkB,MAAM,2CAI/C,CAAC;AACF,qBAAa,2BAA4B,YAAW,oCAAoC;IACtF,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC;IAC9C,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,SAAM;IAChB,sBAAsB,SAAgC;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,EACV,cAAc,EACd,MAAM,EACN,WAAW,EACX,WAAW,GACZ,EAAE;QACD,cAAc,EAAE,OAAO,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;IAQK,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM;IAYpD;;;;;OAKG;IACH,qBAAqB,oCAAqC,MAAM,KAAG,OAAO,CAiBxE;IAEF,kBAAkB,kEAWhB;IAEF,oBAAoB,cAAqB,MAAM;;;;mBA0B7C;IAEF,yBAAyB,cAAqB,MAAM,SAAS,MAAM;;;;mBA8CjE;IAEF,kBAAkB,cAAqB,MAAM,iDAW3C;IAEF,yBAAyB,eAAsB,MAAM,mBAMnD;IAEF,yBAAyB,eAAsB,MAAM,mBA6EnD;CACH;AAED,eAAO,MAAM,oBAAoB;oBAQf,OAAO;YACf,MAAM;UACR,SAAS;;;;0CAQhB,CAAC"}
|
|
@@ -382,10 +382,11 @@ var SessionReplayEventsIDBStore = /** @class */ (function () {
|
|
|
382
382
|
}
|
|
383
383
|
SessionReplayEventsIDBStore.prototype.initialize = function (type, sessionId) {
|
|
384
384
|
return __awaiter(this, void 0, void 0, function () {
|
|
385
|
-
var dbSuffix, dbName, _a;
|
|
385
|
+
var dbSuffix, dbName, _a, e_8;
|
|
386
386
|
return __generator(this, function (_b) {
|
|
387
387
|
switch (_b.label) {
|
|
388
388
|
case 0:
|
|
389
|
+
_b.trys.push([0, 3, , 4]);
|
|
389
390
|
dbSuffix = type === 'replay' ? '' : "_".concat(type);
|
|
390
391
|
dbName = "".concat(this.apiKey.substring(0, 10), "_amp_session_replay_events").concat(dbSuffix);
|
|
391
392
|
_a = this;
|
|
@@ -396,7 +397,12 @@ var SessionReplayEventsIDBStore = /** @class */ (function () {
|
|
|
396
397
|
return [4 /*yield*/, this.transitionFromKeyValStore(sessionId)];
|
|
397
398
|
case 2:
|
|
398
399
|
_b.sent();
|
|
399
|
-
return [
|
|
400
|
+
return [3 /*break*/, 4];
|
|
401
|
+
case 3:
|
|
402
|
+
e_8 = _b.sent();
|
|
403
|
+
this.loggerProvider.warn("".concat(STORAGE_FAILURE, ": ").concat(e_8));
|
|
404
|
+
return [3 /*break*/, 4];
|
|
405
|
+
case 4: return [2 /*return*/];
|
|
400
406
|
}
|
|
401
407
|
});
|
|
402
408
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events-idb-store.js","sourceRoot":"","sources":["../../../src/events/events-idb-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { STORAGE_PREFIX } from '@amplitude/analytics-core';\nimport { Logger as ILogger } from '@amplitude/analytics-types';\nimport { DBSchema, IDBPDatabase, openDB } from 'idb';\nimport { MAX_EVENT_LIST_SIZE_IN_BYTES, MAX_INTERVAL, MIN_INTERVAL } from '../constants';\nimport { STORAGE_FAILURE } from '../messages';\nimport {\n SessionReplayEventsIDBStore as AmplitudeSessionReplayEventsIDBStore,\n EventType,\n Events,\n SendingSequencesIDBInput,\n SendingSequencesIDBReturn,\n} from '../typings/session-replay';\nimport { IDBStore, IDBStoreSession, RecordingStatus } from './legacy-idb-types';\n\nexport const currentSequenceKey = 'sessionCurrentSequence';\nexport const sequencesToSendKey = 'sequencesToSend';\nexport const remoteConfigKey = 'remoteConfig';\n\nexport interface SessionReplayDB extends DBSchema {\n sessionCurrentSequence: {\n key: number;\n value: {\n sessionId: number;\n events: Events;\n };\n };\n sequencesToSend: {\n key: number;\n value: SendingSequencesIDBInput;\n indexes: { sessionId: number };\n };\n}\n\nexport const keyValDatabaseExists = function (): Promise<IDBDatabase | void> {\n const globalScope = getGlobalScope();\n return new Promise((resolve, reject) => {\n if (!globalScope) {\n return reject(new Error('Global scope not found'));\n }\n\n if (!globalScope.indexedDB) {\n return reject(new Error('Session Replay: cannot find indexedDB'));\n }\n\n try {\n const request = globalScope.indexedDB.open('keyval-store');\n request.onupgradeneeded = function () {\n if (request.result.version === 1) {\n request.result.close();\n request.transaction && request.transaction.abort();\n globalScope.indexedDB.deleteDatabase('keyval-store');\n resolve();\n }\n };\n request.onsuccess = function () {\n resolve(request.result);\n };\n } catch (e) {\n reject(e);\n }\n });\n};\n\nconst batchPromiseAll = async (promiseBatch: Promise<any>[]) => {\n while (promiseBatch.length > 0) {\n const chunkSize = 10;\n const batch = promiseBatch.splice(0, chunkSize);\n await Promise.all(batch);\n }\n};\n\nexport const defineObjectStores = (db: IDBPDatabase<SessionReplayDB>) => {\n let sequencesStore;\n let currentSequenceStore;\n if (!db.objectStoreNames.contains(currentSequenceKey)) {\n currentSequenceStore = db.createObjectStore(currentSequenceKey, {\n keyPath: 'sessionId',\n });\n }\n if (!db.objectStoreNames.contains(sequencesToSendKey)) {\n sequencesStore = db.createObjectStore(sequencesToSendKey, {\n keyPath: 'sequenceId',\n autoIncrement: true,\n });\n sequencesStore.createIndex('sessionId', 'sessionId');\n }\n return {\n sequencesStore,\n currentSequenceStore,\n };\n};\n\nexport const createStore = async (dbName: string) => {\n return await openDB<SessionReplayDB>(dbName, 1, {\n upgrade: defineObjectStores,\n });\n};\nexport class SessionReplayEventsIDBStore implements AmplitudeSessionReplayEventsIDBStore {\n apiKey: string;\n db: IDBPDatabase<SessionReplayDB> | undefined;\n loggerProvider: ILogger;\n storageKey = '';\n maxPersistedEventsSize = MAX_EVENT_LIST_SIZE_IN_BYTES;\n interval: number;\n timeAtLastSplit: number | null = null;\n\n private readonly minInterval: number;\n private readonly maxInterval: number;\n\n constructor({\n loggerProvider,\n apiKey,\n minInterval,\n maxInterval,\n }: {\n loggerProvider: ILogger;\n apiKey: string;\n minInterval?: number;\n maxInterval?: number;\n }) {\n this.loggerProvider = loggerProvider;\n this.apiKey = apiKey;\n this.maxInterval = maxInterval ?? MAX_INTERVAL;\n this.minInterval = minInterval ?? MIN_INTERVAL;\n this.interval = 0;\n }\n\n async initialize(type: EventType, sessionId?: number) {\n const dbSuffix = type === 'replay' ? '' : `_${type}`;\n const dbName = `${this.apiKey.substring(0, 10)}_amp_session_replay_events${dbSuffix}`;\n this.db = await createStore(dbName);\n this.timeAtLastSplit = Date.now(); // Initialize this so we have a point of comparison when events are recorded\n await this.transitionFromKeyValStore(sessionId);\n }\n\n /**\n * Determines whether to send the events list to the backend and start a new\n * empty events list, based on the size of the list as well as the last time sent\n * @param nextEventString\n * @returns boolean\n */\n shouldSplitEventsList = (events: Events, nextEventString: string): boolean => {\n const sizeOfNextEvent = new Blob([nextEventString]).size;\n const sizeOfEventsList = new Blob(events).size;\n if (sizeOfEventsList + sizeOfNextEvent >= this.maxPersistedEventsSize) {\n return true;\n }\n if (\n this.timeAtLastSplit !== null &&\n this.interval &&\n Date.now() - this.timeAtLastSplit > this.interval &&\n events.length\n ) {\n this.interval = Math.min(this.maxInterval, this.interval + this.minInterval);\n this.timeAtLastSplit = Date.now();\n return true;\n }\n return false;\n };\n\n getSequencesToSend = async () => {\n try {\n const sequencesToSend = (await this.db?.getAll<'sequencesToSend'>(\n sequencesToSendKey,\n )) as SendingSequencesIDBReturn[];\n\n return sequencesToSend;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeCurrentSequence = async (sessionId: number) => {\n try {\n if (!this.db) {\n return undefined;\n }\n const currentSequenceData = await this.db.get<'sessionCurrentSequence'>(currentSequenceKey, sessionId);\n if (!currentSequenceData) {\n return undefined;\n }\n\n const sequenceId = await this.db.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: currentSequenceData.events,\n });\n\n await this.db.put<'sessionCurrentSequence'>(currentSequenceKey, { sessionId, events: [] });\n\n return {\n ...currentSequenceData,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n addEventToCurrentSequence = async (sessionId: number, event: string) => {\n if (this.interval === 0) {\n this.interval = this.minInterval;\n }\n\n try {\n const tx = this.db?.transaction<'sessionCurrentSequence', 'readwrite'>(currentSequenceKey, 'readwrite');\n if (!tx) {\n return;\n }\n const sequenceEvents = await tx.store.get(sessionId);\n if (!sequenceEvents) {\n await tx.store.put({ sessionId, events: [event] });\n return;\n }\n let eventsToSend;\n if (this.shouldSplitEventsList(sequenceEvents.events, event)) {\n eventsToSend = sequenceEvents.events;\n // set store to empty array\n await tx.store.put({ sessionId, events: [event] });\n } else {\n // add event to array\n const updatedEvents = sequenceEvents.events.concat(event);\n await tx.store.put({ sessionId, events: updatedEvents });\n }\n\n await tx.done;\n if (!eventsToSend) {\n return undefined;\n }\n\n const sequenceId = await this.storeSendingEvents(sessionId, eventsToSend);\n\n if (!sequenceId) {\n return undefined;\n }\n\n return {\n events: eventsToSend,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeSendingEvents = async (sessionId: number, events: Events) => {\n try {\n const sequenceId = await this.db?.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: events,\n });\n return sequenceId;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n cleanUpSessionEventsStore = async (sequenceId: number) => {\n try {\n await this.db?.delete<'sequencesToSend'>(sequencesToSendKey, sequenceId);\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n };\n\n transitionFromKeyValStore = async (sessionId?: number) => {\n try {\n const keyValDb = await keyValDatabaseExists();\n if (!keyValDb) {\n return;\n }\n\n const transitionCurrentSessionSequences = async (numericSessionId: number, sessionStore: IDBStoreSession) => {\n const currentSessionSequences = sessionStore.sessionSequences;\n const promisesToBatch: Promise<number | SendingSequencesIDBReturn | undefined>[] = [];\n\n Object.keys(currentSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n const sequence = currentSessionSequences[numericSequenceId];\n if (numericSequenceId === sessionStore.currentSequenceId) {\n const eventAddPromises: Promise<SendingSequencesIDBReturn | undefined>[] = sequence.events.map(\n async (event) => this.addEventToCurrentSequence(numericSessionId, event),\n );\n promisesToBatch.concat(eventAddPromises);\n } else if (sequence.status !== RecordingStatus.SENT) {\n promisesToBatch.push(this.storeSendingEvents(numericSessionId, sequence.events));\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n };\n\n const storageKey = `${STORAGE_PREFIX}_${this.apiKey.substring(0, 10)}`;\n try {\n const getAllRequest = keyValDb.transaction('keyval').objectStore('keyval').getAll(storageKey);\n const transitionPromise = new Promise<void>((resolve) => {\n getAllRequest.onsuccess = async (e) => {\n const storedReplaySessionContextList = e && ((e.target as IDBRequest).result as IDBStore[]);\n const storedReplaySessionContexts = storedReplaySessionContextList && storedReplaySessionContextList[0];\n if (storedReplaySessionContexts) {\n const promisesToBatch: Promise<any>[] = [];\n\n Object.keys(storedReplaySessionContexts).forEach((storedSessionId) => {\n const numericSessionId = parseInt(storedSessionId, 10);\n const oldSessionStore = storedReplaySessionContexts[numericSessionId];\n\n if (sessionId === numericSessionId) {\n promisesToBatch.push(transitionCurrentSessionSequences(numericSessionId, oldSessionStore));\n } else {\n const oldSessionSequences = oldSessionStore.sessionSequences;\n Object.keys(oldSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n if (oldSessionSequences[numericSequenceId].status !== RecordingStatus.SENT) {\n promisesToBatch.push(\n this.storeSendingEvents(numericSessionId, oldSessionSequences[numericSequenceId].events),\n );\n }\n });\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n }\n resolve();\n };\n });\n\n await transitionPromise;\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.indexedDB.deleteDatabase('keyval-store');\n }\n } catch (e) {\n this.loggerProvider.warn(`Failed to transition session replay events from keyval to new store: ${e as string}`);\n }\n } catch (e) {\n this.loggerProvider.warn(\n `Failed to access keyval store: ${\n e as string\n }. For more information, visit: https://www.docs.developers.amplitude.com/session-replay/sdks/standalone/#indexeddb-best-practices`,\n );\n }\n };\n}\n\nexport const createEventsIDBStore = async ({\n loggerProvider,\n apiKey,\n sessionId,\n type,\n minInterval,\n maxInterval,\n}: {\n loggerProvider: ILogger;\n apiKey: string;\n type: EventType;\n minInterval?: number;\n maxInterval?: number;\n sessionId?: number;\n}) => {\n const eventsIDBStore = new SessionReplayEventsIDBStore({ loggerProvider, apiKey, minInterval, maxInterval });\n await eventsIDBStore.initialize(type, sessionId);\n return eventsIDBStore;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"events-idb-store.js","sourceRoot":"","sources":["../../../src/events/events-idb-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { getGlobalScope } from '@amplitude/analytics-client-common';\nimport { STORAGE_PREFIX } from '@amplitude/analytics-core';\nimport { Logger as ILogger } from '@amplitude/analytics-types';\nimport { DBSchema, IDBPDatabase, openDB } from 'idb';\nimport { MAX_EVENT_LIST_SIZE_IN_BYTES, MAX_INTERVAL, MIN_INTERVAL } from '../constants';\nimport { STORAGE_FAILURE } from '../messages';\nimport {\n SessionReplayEventsIDBStore as AmplitudeSessionReplayEventsIDBStore,\n EventType,\n Events,\n SendingSequencesIDBInput,\n SendingSequencesIDBReturn,\n} from '../typings/session-replay';\nimport { IDBStore, IDBStoreSession, RecordingStatus } from './legacy-idb-types';\n\nexport const currentSequenceKey = 'sessionCurrentSequence';\nexport const sequencesToSendKey = 'sequencesToSend';\nexport const remoteConfigKey = 'remoteConfig';\n\nexport interface SessionReplayDB extends DBSchema {\n sessionCurrentSequence: {\n key: number;\n value: {\n sessionId: number;\n events: Events;\n };\n };\n sequencesToSend: {\n key: number;\n value: SendingSequencesIDBInput;\n indexes: { sessionId: number };\n };\n}\n\nexport const keyValDatabaseExists = function (): Promise<IDBDatabase | void> {\n const globalScope = getGlobalScope();\n return new Promise((resolve, reject) => {\n if (!globalScope) {\n return reject(new Error('Global scope not found'));\n }\n\n if (!globalScope.indexedDB) {\n return reject(new Error('Session Replay: cannot find indexedDB'));\n }\n\n try {\n const request = globalScope.indexedDB.open('keyval-store');\n request.onupgradeneeded = function () {\n if (request.result.version === 1) {\n request.result.close();\n request.transaction && request.transaction.abort();\n globalScope.indexedDB.deleteDatabase('keyval-store');\n resolve();\n }\n };\n request.onsuccess = function () {\n resolve(request.result);\n };\n } catch (e) {\n reject(e);\n }\n });\n};\n\nconst batchPromiseAll = async (promiseBatch: Promise<any>[]) => {\n while (promiseBatch.length > 0) {\n const chunkSize = 10;\n const batch = promiseBatch.splice(0, chunkSize);\n await Promise.all(batch);\n }\n};\n\nexport const defineObjectStores = (db: IDBPDatabase<SessionReplayDB>) => {\n let sequencesStore;\n let currentSequenceStore;\n if (!db.objectStoreNames.contains(currentSequenceKey)) {\n currentSequenceStore = db.createObjectStore(currentSequenceKey, {\n keyPath: 'sessionId',\n });\n }\n if (!db.objectStoreNames.contains(sequencesToSendKey)) {\n sequencesStore = db.createObjectStore(sequencesToSendKey, {\n keyPath: 'sequenceId',\n autoIncrement: true,\n });\n sequencesStore.createIndex('sessionId', 'sessionId');\n }\n return {\n sequencesStore,\n currentSequenceStore,\n };\n};\n\nexport const createStore = async (dbName: string) => {\n return await openDB<SessionReplayDB>(dbName, 1, {\n upgrade: defineObjectStores,\n });\n};\nexport class SessionReplayEventsIDBStore implements AmplitudeSessionReplayEventsIDBStore {\n apiKey: string;\n db: IDBPDatabase<SessionReplayDB> | undefined;\n loggerProvider: ILogger;\n storageKey = '';\n maxPersistedEventsSize = MAX_EVENT_LIST_SIZE_IN_BYTES;\n interval: number;\n timeAtLastSplit: number | null = null;\n\n private readonly minInterval: number;\n private readonly maxInterval: number;\n\n constructor({\n loggerProvider,\n apiKey,\n minInterval,\n maxInterval,\n }: {\n loggerProvider: ILogger;\n apiKey: string;\n minInterval?: number;\n maxInterval?: number;\n }) {\n this.loggerProvider = loggerProvider;\n this.apiKey = apiKey;\n this.maxInterval = maxInterval ?? MAX_INTERVAL;\n this.minInterval = minInterval ?? MIN_INTERVAL;\n this.interval = 0;\n }\n\n async initialize(type: EventType, sessionId?: number) {\n try {\n const dbSuffix = type === 'replay' ? '' : `_${type}`;\n const dbName = `${this.apiKey.substring(0, 10)}_amp_session_replay_events${dbSuffix}`;\n this.db = await createStore(dbName);\n this.timeAtLastSplit = Date.now(); // Initialize this so we have a point of comparison when events are recorded\n await this.transitionFromKeyValStore(sessionId);\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n }\n\n /**\n * Determines whether to send the events list to the backend and start a new\n * empty events list, based on the size of the list as well as the last time sent\n * @param nextEventString\n * @returns boolean\n */\n shouldSplitEventsList = (events: Events, nextEventString: string): boolean => {\n const sizeOfNextEvent = new Blob([nextEventString]).size;\n const sizeOfEventsList = new Blob(events).size;\n if (sizeOfEventsList + sizeOfNextEvent >= this.maxPersistedEventsSize) {\n return true;\n }\n if (\n this.timeAtLastSplit !== null &&\n this.interval &&\n Date.now() - this.timeAtLastSplit > this.interval &&\n events.length\n ) {\n this.interval = Math.min(this.maxInterval, this.interval + this.minInterval);\n this.timeAtLastSplit = Date.now();\n return true;\n }\n return false;\n };\n\n getSequencesToSend = async () => {\n try {\n const sequencesToSend = (await this.db?.getAll<'sequencesToSend'>(\n sequencesToSendKey,\n )) as SendingSequencesIDBReturn[];\n\n return sequencesToSend;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeCurrentSequence = async (sessionId: number) => {\n try {\n if (!this.db) {\n return undefined;\n }\n const currentSequenceData = await this.db.get<'sessionCurrentSequence'>(currentSequenceKey, sessionId);\n if (!currentSequenceData) {\n return undefined;\n }\n\n const sequenceId = await this.db.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: currentSequenceData.events,\n });\n\n await this.db.put<'sessionCurrentSequence'>(currentSequenceKey, { sessionId, events: [] });\n\n return {\n ...currentSequenceData,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n addEventToCurrentSequence = async (sessionId: number, event: string) => {\n if (this.interval === 0) {\n this.interval = this.minInterval;\n }\n\n try {\n const tx = this.db?.transaction<'sessionCurrentSequence', 'readwrite'>(currentSequenceKey, 'readwrite');\n if (!tx) {\n return;\n }\n const sequenceEvents = await tx.store.get(sessionId);\n if (!sequenceEvents) {\n await tx.store.put({ sessionId, events: [event] });\n return;\n }\n let eventsToSend;\n if (this.shouldSplitEventsList(sequenceEvents.events, event)) {\n eventsToSend = sequenceEvents.events;\n // set store to empty array\n await tx.store.put({ sessionId, events: [event] });\n } else {\n // add event to array\n const updatedEvents = sequenceEvents.events.concat(event);\n await tx.store.put({ sessionId, events: updatedEvents });\n }\n\n await tx.done;\n if (!eventsToSend) {\n return undefined;\n }\n\n const sequenceId = await this.storeSendingEvents(sessionId, eventsToSend);\n\n if (!sequenceId) {\n return undefined;\n }\n\n return {\n events: eventsToSend,\n sessionId,\n sequenceId,\n };\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n storeSendingEvents = async (sessionId: number, events: Events) => {\n try {\n const sequenceId = await this.db?.put<'sequencesToSend'>(sequencesToSendKey, {\n sessionId: sessionId,\n events: events,\n });\n return sequenceId;\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n return undefined;\n };\n\n cleanUpSessionEventsStore = async (sequenceId: number) => {\n try {\n await this.db?.delete<'sequencesToSend'>(sequencesToSendKey, sequenceId);\n } catch (e) {\n this.loggerProvider.warn(`${STORAGE_FAILURE}: ${e as string}`);\n }\n };\n\n transitionFromKeyValStore = async (sessionId?: number) => {\n try {\n const keyValDb = await keyValDatabaseExists();\n if (!keyValDb) {\n return;\n }\n\n const transitionCurrentSessionSequences = async (numericSessionId: number, sessionStore: IDBStoreSession) => {\n const currentSessionSequences = sessionStore.sessionSequences;\n const promisesToBatch: Promise<number | SendingSequencesIDBReturn | undefined>[] = [];\n\n Object.keys(currentSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n const sequence = currentSessionSequences[numericSequenceId];\n if (numericSequenceId === sessionStore.currentSequenceId) {\n const eventAddPromises: Promise<SendingSequencesIDBReturn | undefined>[] = sequence.events.map(\n async (event) => this.addEventToCurrentSequence(numericSessionId, event),\n );\n promisesToBatch.concat(eventAddPromises);\n } else if (sequence.status !== RecordingStatus.SENT) {\n promisesToBatch.push(this.storeSendingEvents(numericSessionId, sequence.events));\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n };\n\n const storageKey = `${STORAGE_PREFIX}_${this.apiKey.substring(0, 10)}`;\n try {\n const getAllRequest = keyValDb.transaction('keyval').objectStore('keyval').getAll(storageKey);\n const transitionPromise = new Promise<void>((resolve) => {\n getAllRequest.onsuccess = async (e) => {\n const storedReplaySessionContextList = e && ((e.target as IDBRequest).result as IDBStore[]);\n const storedReplaySessionContexts = storedReplaySessionContextList && storedReplaySessionContextList[0];\n if (storedReplaySessionContexts) {\n const promisesToBatch: Promise<any>[] = [];\n\n Object.keys(storedReplaySessionContexts).forEach((storedSessionId) => {\n const numericSessionId = parseInt(storedSessionId, 10);\n const oldSessionStore = storedReplaySessionContexts[numericSessionId];\n\n if (sessionId === numericSessionId) {\n promisesToBatch.push(transitionCurrentSessionSequences(numericSessionId, oldSessionStore));\n } else {\n const oldSessionSequences = oldSessionStore.sessionSequences;\n Object.keys(oldSessionSequences).forEach((sequenceId) => {\n const numericSequenceId = parseInt(sequenceId, 10);\n if (oldSessionSequences[numericSequenceId].status !== RecordingStatus.SENT) {\n promisesToBatch.push(\n this.storeSendingEvents(numericSessionId, oldSessionSequences[numericSequenceId].events),\n );\n }\n });\n }\n });\n\n await batchPromiseAll(promisesToBatch);\n }\n resolve();\n };\n });\n\n await transitionPromise;\n const globalScope = getGlobalScope();\n if (globalScope) {\n globalScope.indexedDB.deleteDatabase('keyval-store');\n }\n } catch (e) {\n this.loggerProvider.warn(`Failed to transition session replay events from keyval to new store: ${e as string}`);\n }\n } catch (e) {\n this.loggerProvider.warn(\n `Failed to access keyval store: ${\n e as string\n }. For more information, visit: https://www.docs.developers.amplitude.com/session-replay/sdks/standalone/#indexeddb-best-practices`,\n );\n }\n };\n}\n\nexport const createEventsIDBStore = async ({\n loggerProvider,\n apiKey,\n sessionId,\n type,\n minInterval,\n maxInterval,\n}: {\n loggerProvider: ILogger;\n apiKey: string;\n type: EventType;\n minInterval?: number;\n maxInterval?: number;\n sessionId?: number;\n}) => {\n const eventsIDBStore = new SessionReplayEventsIDBStore({ loggerProvider, apiKey, minInterval, maxInterval });\n await eventsIDBStore.initialize(type, sessionId);\n return eventsIDBStore;\n};\n"]}
|
package/lib/esm/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "1.14.
|
|
1
|
+
export declare const VERSION = "1.14.3";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/esm/version.js
CHANGED
package/lib/esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,MAAM,CAAC,IAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.14.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,MAAM,CAAC,IAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// Autogenerated by `yarn version-file`. DO NOT EDIT\nexport const VERSION = '1.14.3';\n"]}
|