@anyreplay/browser 0.2.2 → 0.2.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/dist/index.js CHANGED
@@ -5071,7 +5071,7 @@ var Transport = class {
5071
5071
 
5072
5072
  // src/version.ts
5073
5073
  var SDK_NAME = "@anyreplay/browser";
5074
- var SDK_VERSION = true ? "0.2.2" : "0.0.0-dev";
5074
+ var SDK_VERSION = true ? "0.2.3" : "0.0.0-dev";
5075
5075
  var PLATFORM = "web";
5076
5076
 
5077
5077
  // src/visitor.ts
@@ -5197,7 +5197,10 @@ function createRecorder(rawOptions, shell) {
5197
5197
  let assets;
5198
5198
  let pageCount = 0;
5199
5199
  let pendingTraits;
5200
- const sendIdentity = (who, traits) => {
5200
+ let traitsAwaitingSession;
5201
+ let traitsToRetry;
5202
+ let sessionDelivered = false;
5203
+ const postIdentity = (who, traits, retryIfUnapplied) => {
5201
5204
  void fetch(`${options.ingestUrl}/v1/ingest/identify`, {
5202
5205
  method: "POST",
5203
5206
  headers: { "Content-Type": "application/json" },
@@ -5208,9 +5211,33 @@ function createRecorder(rawOptions, shell) {
5208
5211
  ...traits,
5209
5212
  ...options.appId ? { appId: options.appId } : {}
5210
5213
  })
5214
+ }).then(async (response) => {
5215
+ if (!retryIfUnapplied || response.status !== 202) return;
5216
+ const reply = await response.json();
5217
+ if (reply.applied === false && identity === who && !traitsAwaitingSession && !traitsToRetry) {
5218
+ traitsToRetry = traits;
5219
+ }
5211
5220
  }).catch(() => {
5212
5221
  });
5213
5222
  };
5223
+ const sendIdentity = (who, traits) => {
5224
+ traitsToRetry = void 0;
5225
+ if (!sessionDelivered) {
5226
+ traitsAwaitingSession = { ...traitsAwaitingSession, ...traits };
5227
+ return;
5228
+ }
5229
+ postIdentity(who, traits, true);
5230
+ };
5231
+ const noteDelivered = (channel) => {
5232
+ if (channel !== transport || !identity) return;
5233
+ sessionDelivered = true;
5234
+ const waiting = traitsAwaitingSession;
5235
+ const retry = traitsToRetry;
5236
+ traitsAwaitingSession = void 0;
5237
+ traitsToRetry = void 0;
5238
+ if (waiting) postIdentity(identity, waiting, true);
5239
+ else if (retry) postIdentity(identity, retry, false);
5240
+ };
5214
5241
  const collectMeta = (who) => {
5215
5242
  var _a, _b;
5216
5243
  return {
@@ -5319,6 +5346,7 @@ function createRecorder(rawOptions, shell) {
5319
5346
  initialSeq: who.nextSeq
5320
5347
  },
5321
5348
  {
5349
+ onSent: () => noteDelivered(channel),
5322
5350
  onSeqReserved: (next) => {
5323
5351
  var _a;
5324
5352
  reserveSeq(session, next);
@@ -5462,6 +5490,8 @@ function createRecorder(rawOptions, shell) {
5462
5490
  identity = void 0;
5463
5491
  }
5464
5492
  pendingTraits = void 0;
5493
+ traitsAwaitingSession = void 0;
5494
+ traitsToRetry = void 0;
5465
5495
  pending.length = 0;
5466
5496
  forgetVisitor(local, session);
5467
5497
  },