@peerbit/react 0.0.5 → 0.0.6

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.
@@ -148,7 +148,7 @@ export class FastMutex {
148
148
  }
149
149
  else {
150
150
  this.localStorage.setItem(key, JSON.stringify({
151
- expiresAt: getExpiry(),
151
+ expiresAt: getExpiry(), // bump expiry
152
152
  value,
153
153
  }));
154
154
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lockstorage.js","sourceRoot":"","sources":["../../src/lockstorage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;EAeE;AAEF,OAAO,OAAO,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEnC,MAAM,OAAO,SAAS;IAClB,QAAQ,CAAS;IACjB,OAAO,CAAS;IAChB,OAAO,CAAS;IAChB,OAAO,CAAS;IAChB,YAAY,CAAM;IAClB,SAAS,CAAmB;IAE5B,YAAY,EACR,QAAQ,GAAG,IAAI,EAAE,EACjB,OAAO,GAAG,gBAAgB,EAC1B,OAAO,GAAG,gBAAgB,EAC1B,OAAO,GAAG,IAAI,EACd,YAAY,GAAG,SAAS,GAC3B,GAAG,EAAE;QACF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAE3B,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC;IAC5D,CAAC;IAED,IAAI,CACA,GAAW,EACX,UAA0B;QAE1B,KAAK,CACD,kEAAkE,EAClE,GAAG,EACH,IAAI,CAAC,QAAQ,CAChB,CAAC;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,IAAI,YAAY,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,wEAAwE;YACxE,0EAA0E;YAC1E,0EAA0E;YAC1E,wDAAwD;YACxD,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,EAAE;gBACxB,IACI,YAAY,GAAG,IAAI;oBACnB,eAAe,GAAG,IAAI;oBACtB,SAAS,GAAG,IAAI,EAClB;oBACE,MAAM,CAAC,wBAAwB,CAAC,CAAC;iBACpC;gBAED,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC;gBACxD,IAAI,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE;oBAC7B,KAAK,CACD,yEAAyE,EACzE,GAAG,EACH,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,QAAQ,CAChB,CAAC;oBACF,OAAO,MAAM,CACT,IAAI,KAAK,CACL,qCAAqC,IAAI,CAAC,OAAO,IAAI,CACxD,CACJ,CAAC;iBACL;gBAED,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAE3C,mEAAmE;gBACnE,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,GAAG,EAAE;oBACL,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;oBACnD,YAAY,EAAE,CAAC;oBACf,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnC,OAAO;iBACV;gBAED,qBAAqB;gBACrB,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAE3C,mEAAmE;gBACnE,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,EAAE;oBACvB,eAAe,EAAE,CAAC;oBAClB,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;oBAE/C,yCAAyC;oBACzC,UAAU,CAAC,GAAG,EAAE;wBACZ,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBACtB,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,EAAE;4BACvB,iBAAiB;4BACjB,KAAK,CACD,uDAAuD,EACvD,IAAI,CAAC,QAAQ,EACb,GAAG,CACN,CAAC;4BACF,OAAO,CAAC;gCACJ,eAAe;gCACf,SAAS;gCACT,YAAY;6BACf,CAAC,CAAC;yBACN;6BAAM;4BACH,8CAA8C;4BAC9C,YAAY,EAAE,CAAC;4BACf,SAAS,EAAE,CAAC;4BACZ,KAAK,CACD,+FAA+F,EAC/F,IAAI,CAAC,QAAQ,EACb,GAAG,EACH,GAAG,CACN,CAAC;4BACF,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;yBACtC;oBACL,CAAC,EAAE,EAAE,CAAC,CAAC;oBACP,OAAO;iBACV;gBAED,iBAAiB;gBACjB,KAAK,CACD,kEAAkE,EAClE,IAAI,CAAC,QAAQ,EACb,GAAG,CACN,CAAC;gBACF,OAAO,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC1D,CAAC,CAAC;YAEF,WAAW,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,QAAQ,CAAC,GAAW;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,aAAa,CAAC,GAAW;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,GAAW;QACf,KAAK,CACD,iDAAiD,EACjD,IAAI,CAAC,QAAQ,EACb,GAAG,CACN,CAAC;QACF,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;YAChB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SACnC;IACL,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,GAAW,EAAE,KAAU,EAAE,UAA0B;QACvD,IAAI,CAAC,UAAU,EAAE;YACb,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAC5B,GAAG,EACH,IAAI,CAAC,SAAS,CAAC;gBACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO;gBAC9C,KAAK;aACR,CAAC,CACL,CAAC;SACL;aAAM;YACH,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CACjC,GAAG,EACH,IAAI,CAAC,SAAS,CAAC;gBACX,SAAS,EAAE,SAAS,EAAE;gBACtB,KAAK;aACR,CAAC,CACL,CAAC;YACF,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,UAAU,EAAE,EAAE;oBACf,IAAI,CAAC,YAAY,CAAC,OAAO;oBACrB,0BAA0B;oBAC1B,GAAG,EACH,IAAI,CAAC,SAAS,CAAC;wBACX,SAAS,EAAE,CAAC;wBACZ,KAAK;qBACR,CAAC,CACL,CAAC;iBACL;qBAAM;oBACH,IAAI,CAAC,YAAY,CAAC,OAAO,CACrB,GAAG,EACH,IAAI,CAAC,SAAS,CAAC;wBACX,SAAS,EAAE,SAAS,EAAE;wBACtB,KAAK;qBACR,CAAC,CACL,CAAC;iBACL;YACL,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAClC,OAAO,GAAG,CAAC;SACd;IACL,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,GAAW;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE;YACzD,KAAK,CACD,yDAAyD,EACzD,IAAI,CAAC,QAAQ,EACb,GAAG,CACN,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAClC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO;SACV;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAClC,CAAC;CACJ"}
1
+ {"version":3,"file":"lockstorage.js","sourceRoot":"","sources":["../../src/lockstorage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;EAeE;AAEF,OAAO,OAAO,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEnC,MAAM,OAAO,SAAS;IAClB,QAAQ,CAAS;IACjB,OAAO,CAAS;IAChB,OAAO,CAAS;IAChB,OAAO,CAAS;IAChB,YAAY,CAAM;IAClB,SAAS,CAAmB;IAE5B,YAAY,EACR,QAAQ,GAAG,IAAI,EAAE,EACjB,OAAO,GAAG,gBAAgB,EAC1B,OAAO,GAAG,gBAAgB,EAC1B,OAAO,GAAG,IAAI,EACd,YAAY,GAAG,SAAS,GAC3B,GAAG,EAAE;QACF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAE3B,IAAI,CAAC,YAAY,GAAG,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC;IAC5D,CAAC;IAED,IAAI,CACA,GAAW,EACX,UAA0B;QAE1B,KAAK,CACD,kEAAkE,EAClE,GAAG,EACH,IAAI,CAAC,QAAQ,CAChB,CAAC;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,IAAI,YAAY,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,wEAAwE;YACxE,0EAA0E;YAC1E,0EAA0E;YAC1E,wDAAwD;YACxD,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,EAAE;gBACxB,IACI,YAAY,GAAG,IAAI;oBACnB,eAAe,GAAG,IAAI;oBACtB,SAAS,GAAG,IAAI,EAClB,CAAC;oBACC,MAAM,CAAC,wBAAwB,CAAC,CAAC;gBACrC,CAAC;gBAED,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC;gBACxD,IAAI,WAAW,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC9B,KAAK,CACD,yEAAyE,EACzE,GAAG,EACH,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,QAAQ,CAChB,CAAC;oBACF,OAAO,MAAM,CACT,IAAI,KAAK,CACL,qCAAqC,IAAI,CAAC,OAAO,IAAI,CACxD,CACJ,CAAC;gBACN,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAE3C,mEAAmE;gBACnE,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,GAAG,EAAE,CAAC;oBACN,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;oBACnD,YAAY,EAAE,CAAC;oBACf,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnC,OAAO;gBACX,CAAC;gBAED,qBAAqB;gBACrB,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAE3C,mEAAmE;gBACnE,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACxB,eAAe,EAAE,CAAC;oBAClB,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;oBAE/C,yCAAyC;oBACzC,UAAU,CAAC,GAAG,EAAE;wBACZ,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBACtB,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;4BACxB,iBAAiB;4BACjB,KAAK,CACD,uDAAuD,EACvD,IAAI,CAAC,QAAQ,EACb,GAAG,CACN,CAAC;4BACF,OAAO,CAAC;gCACJ,eAAe;gCACf,SAAS;gCACT,YAAY;6BACf,CAAC,CAAC;wBACP,CAAC;6BAAM,CAAC;4BACJ,8CAA8C;4BAC9C,YAAY,EAAE,CAAC;4BACf,SAAS,EAAE,CAAC;4BACZ,KAAK,CACD,+FAA+F,EAC/F,IAAI,CAAC,QAAQ,EACb,GAAG,EACH,GAAG,CACN,CAAC;4BACF,UAAU,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;wBACvC,CAAC;oBACL,CAAC,EAAE,EAAE,CAAC,CAAC;oBACP,OAAO;gBACX,CAAC;gBAED,iBAAiB;gBACjB,KAAK,CACD,kEAAkE,EAClE,IAAI,CAAC,QAAQ,EACb,GAAG,CACN,CAAC;gBACF,OAAO,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC1D,CAAC,CAAC;YAEF,WAAW,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,QAAQ,CAAC,GAAW;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,aAAa,CAAC,GAAW;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,GAAW;QACf,KAAK,CACD,iDAAiD,EACjD,IAAI,CAAC,QAAQ,EACb,GAAG,CACN,CAAC;QACF,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,GAAW,EAAE,KAAU,EAAE,UAA0B;QACvD,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAC5B,GAAG,EACH,IAAI,CAAC,SAAS,CAAC;gBACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO;gBAC9C,KAAK;aACR,CAAC,CACL,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CACjC,GAAG,EACH,IAAI,CAAC,SAAS,CAAC;gBACX,SAAS,EAAE,SAAS,EAAE;gBACtB,KAAK;aACR,CAAC,CACL,CAAC;YACF,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;oBAChB,IAAI,CAAC,YAAY,CAAC,OAAO;oBACrB,0BAA0B;oBAC1B,GAAG,EACH,IAAI,CAAC,SAAS,CAAC;wBACX,SAAS,EAAE,CAAC;wBACZ,KAAK;qBACR,CAAC,CACL,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,YAAY,CAAC,OAAO,CACrB,GAAG,EACH,IAAI,CAAC,SAAS,CAAC;wBACX,SAAS,EAAE,SAAS,EAAE,EAAE,cAAc;wBACtC,KAAK;qBACR,CAAC,CACL,CAAC;gBACN,CAAC;YACL,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACjB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAClC,OAAO,GAAG,CAAC;QACf,CAAC;IACL,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,GAAW;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1D,KAAK,CACD,yDAAyD,EACzD,IAAI,CAAC,QAAQ,EACb,GAAG,CACN,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAClC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAClC,CAAC;CACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMount.js","sourceRoot":"","sources":["../../src/useMount.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAsB,EAAE,EAAE;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE9B,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAClB,MAAM,EAAE,CAAC;SACZ;QAED,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QAEvB,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IACpB,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1B,CAAC,CAAC"}
1
+ {"version":3,"file":"useMount.js","sourceRoot":"","sources":["../../src/useMount.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAsB,EAAE,EAAE;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE9B,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,EAAE,CAAC;QACb,CAAC;QAED,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QAEvB,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;IACpB,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1B,CAAC,CAAC"}
@@ -8,6 +8,7 @@ interface IPeerContext {
8
8
  promise: Promise<void> | undefined;
9
9
  loading: boolean;
10
10
  status: ConnectionStatus;
11
+ persisted: boolean | undefined;
11
12
  }
12
13
  export declare const PeerContext: React.Context<IPeerContext>;
13
14
  export declare const usePeer: () => IPeerContext;
@@ -3,7 +3,7 @@ import React, { useContext } from "react";
3
3
  import { Peerbit } from "peerbit";
4
4
  import { webSockets } from "@libp2p/websockets";
5
5
  import { DirectSub } from "@peerbit/pubsub";
6
- import { mplex } from "@libp2p/mplex";
6
+ import { yamux } from "@chainsafe/libp2p-yamux";
7
7
  import { getFreeKeypair, getTabId, inIframe } from "./utils.js";
8
8
  import { noise } from "@dao-xyz/libp2p-noise";
9
9
  import { v4 as uuid } from "uuid";
@@ -12,7 +12,9 @@ import sodium from "libsodium-wrappers";
12
12
  import * as filters from "@libp2p/websockets/filters";
13
13
  import { useMount } from "./useMount.js";
14
14
  import { createClient, createHost } from "@peerbit/proxy-window";
15
- import { identifyService } from "libp2p/identify";
15
+ import { circuitRelayTransport } from "@libp2p/circuit-relay-v2";
16
+ import { webRTC } from "@libp2p/webrtc";
17
+ import { identify } from "@libp2p/identify";
16
18
  import { detectIncognito } from "detectincognitojs";
17
19
  if (!window.name) {
18
20
  window.name = uuid();
@@ -22,7 +24,8 @@ export const usePeer = () => useContext(PeerContext);
22
24
  export const PeerProvider = (options) => {
23
25
  const [peer, setPeer] = React.useState(undefined);
24
26
  const [promise, setPromise] = React.useState(undefined);
25
- const [loading, setLoading] = React.useState(false);
27
+ const [persisted, setPersisted] = React.useState(undefined);
28
+ const [loading, setLoading] = React.useState(true);
26
29
  const [connectionState, setConnectionState] = React.useState("disconnected");
27
30
  const memo = React.useMemo(() => ({
28
31
  peer,
@@ -30,11 +33,13 @@ export const PeerProvider = (options) => {
30
33
  loading,
31
34
  connectionState,
32
35
  status: connectionState,
36
+ persisted: persisted,
33
37
  }), [
34
38
  loading,
35
39
  !!promise,
36
40
  connectionState,
37
41
  peer?.identity?.publicKey?.hashcode(),
42
+ persisted,
38
43
  ]);
39
44
  useMount(() => {
40
45
  setLoading(true);
@@ -57,21 +62,40 @@ export const PeerProvider = (options) => {
57
62
  timeout: 1000,
58
63
  }), undefined, true // reuse keypairs from same tab, (force release)
59
64
  )).key;
65
+ const peerId = await nodeId.toPeerId();
66
+ let directory = undefined;
67
+ if (!nodeOptions.inMemory &&
68
+ !(await detectIncognito()).isPrivate) {
69
+ const persisted = await navigator.storage.persist();
70
+ console.log("CAN PERSIST?", persisted);
71
+ setPersisted(persisted);
72
+ if (!persisted) {
73
+ setPersisted(false);
74
+ if (window["chrome"]) {
75
+ console.error("Request persistance but was not given permission by browser. Adding this site to your bookmarks or enabling push notifications might allow your chrome browser to persist data");
76
+ }
77
+ else {
78
+ console.error("Request persistance but was not given permission by browser.");
79
+ }
80
+ }
81
+ else {
82
+ directory = `./repo/${peerId.toString()}/`;
83
+ }
84
+ }
60
85
  // We create a new directrory to make tab to tab communication go smoothly
86
+ console.log("Create client");
61
87
  newPeer = await Peerbit.create({
62
88
  libp2p: {
63
89
  addresses: {
64
- listen: [
65
- /* "/webrtc" */
66
- ],
90
+ listen: ["/webrtc"],
67
91
  },
68
92
  connectionEncryption: [noise()],
69
- peerId: await nodeId.toPeerId(),
93
+ peerId, //, having the same peer accross broswers does not work, only one tab will be recognized by other peers
70
94
  connectionManager: {
71
95
  maxConnections: 100,
72
- minConnections: 0,
96
+ minConnections: 1,
73
97
  },
74
- streamMuxers: [mplex() /* , mplex() */],
98
+ streamMuxers: [yamux()],
75
99
  ...(nodeOptions.network === "local"
76
100
  ? {
77
101
  connectionGater: {
@@ -88,39 +112,35 @@ export const PeerProvider = (options) => {
88
112
  webSockets({
89
113
  filter: filters.all,
90
114
  }),
91
- /* circuitRelayTransport({
92
- discoverRelays: 1,
93
- }),
94
- webRTC(), */
95
- /* circuitRelayTransport({ discoverRelays: 1 }),
96
- webRTC(), */
115
+ circuitRelayTransport({
116
+ discoverRelays: 1,
117
+ }),
118
+ webRTC(),
97
119
  ],
98
120
  }
99
121
  : {
100
122
  transports: [
101
123
  webSockets({ filter: filters.wss }),
102
- /* circuitRelayTransport({
103
- discoverRelays: 1,
104
- }),
105
- webRTC(), */
124
+ circuitRelayTransport({
125
+ discoverRelays: 1,
126
+ }),
127
+ webRTC(),
106
128
  ],
107
129
  }),
108
130
  services: {
109
131
  pubsub: (c) => new DirectSub(c, {
110
132
  canRelayMessage: true,
111
- emitSelf: true,
112
- /* connectionManager: {
113
- autoDial: false,
114
- }, */
133
+ /* connectionManager: {
134
+ autoDial: false,
135
+ }, */
115
136
  }),
116
- identify: identifyService(),
137
+ identify: identify(),
117
138
  },
118
139
  },
119
- directory: !nodeOptions.inMemory &&
120
- !(await detectIncognito()).isPrivate
121
- ? "./repo"
122
- : undefined,
140
+ directory,
123
141
  });
142
+ console.log("Create done");
143
+ console.log(newPeer?.identity.publicKey.hashcode());
124
144
  setConnectionState("connecting");
125
145
  // Resolve bootstrap nodes async (we want to return before this is done)
126
146
  const connectFn = async () => {
@@ -150,7 +170,11 @@ webRTC(), */
150
170
  newPeer = await createHost(newPeer);
151
171
  }
152
172
  };
173
+ console.log("Bootstrap start...");
153
174
  const promise = connectFn();
175
+ promise.then(() => {
176
+ console.log("Bootstrap done");
177
+ });
154
178
  // Make sure data flow as expected between tabs and windows locally (offline states)
155
179
  if (nodeOptions.waitForConnnected !== false) {
156
180
  await promise;
@@ -1 +1 @@
1
- {"version":3,"file":"usePeer.js","sourceRoot":"","sources":["../../src/usePeer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usePeer.js","sourceRoot":"","sources":["../../src/usePeer.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,11 @@
1
- import { Program, ProgramEvents, OpenOptions } from "@peerbit/program";
2
- export declare const useProgram: <A, B extends ProgramEvents, P extends Program<A, B>>(addressOrOpen: string | P, options?: OpenOptions<A, P> | undefined) => {
1
+ import { Program, OpenOptions, ProgramEvents } from "@peerbit/program";
2
+ type ExtractArgs<T> = T extends Program<infer Args> ? Args : never;
3
+ type ExtractEvents<T> = T extends Program<any, infer Events> ? Events : never;
4
+ export declare const useProgram: <P extends Program<ExtractArgs<P>, ExtractEvents<P>> & Program<any, ProgramEvents>>(addressOrOpen?: string | P | undefined, options?: OpenOptions<P> | undefined) => {
3
5
  program: P | undefined;
6
+ session: any;
4
7
  loading: boolean;
5
8
  promise: Promise<P> | undefined;
9
+ peerCounter: number;
6
10
  };
11
+ export {};
@@ -1,8 +1,8 @@
1
1
  import { usePeer } from "./usePeer.js";
2
- import { useEffect, useRef, useState } from "react";
2
+ import { useEffect, useReducer, useRef, useState } from "react";
3
3
  const addressOrUndefined = (p) => {
4
4
  try {
5
- return p.address;
5
+ return p?.address;
6
6
  }
7
7
  catch (error) {
8
8
  return undefined;
@@ -11,28 +11,65 @@ const addressOrUndefined = (p) => {
11
11
  export const useProgram = (addressOrOpen, options) => {
12
12
  const { peer } = usePeer();
13
13
  let [program, setProgram] = useState();
14
- let programRef = useRef();
15
- let [loading, setLoading] = useState(false);
14
+ let [loading, setLoading] = useState(true);
15
+ const [session, forceUpdate] = useReducer((x) => x + 1, 0);
16
+ let programLoadingRef = useRef();
17
+ const [peerCounter, setPeerCounter] = useState(1);
18
+ let closingRef = useRef(Promise.resolve());
16
19
  useEffect(() => {
17
20
  if (!peer || !addressOrOpen) {
18
21
  return;
19
22
  }
20
23
  setLoading(true);
21
- programRef.current = peer
22
- ?.open(addressOrOpen, { ...options, existing: "reuse" })
23
- .then((p) => {
24
- setProgram(p);
25
- return p;
26
- })
27
- .finally(() => {
28
- setLoading(false);
24
+ let changeListener;
25
+ closingRef.current.then(() => {
26
+ programLoadingRef.current = peer
27
+ ?.open(addressOrOpen, { ...options, existing: "reuse" })
28
+ .then((p) => {
29
+ changeListener = () => {
30
+ p.getReady().then((set) => {
31
+ setPeerCounter(set.size);
32
+ });
33
+ };
34
+ p.events.addEventListener("join", changeListener);
35
+ p.events.addEventListener("leave", changeListener);
36
+ p.getReady().then((set) => {
37
+ setPeerCounter(set.size);
38
+ });
39
+ setProgram(p);
40
+ forceUpdate();
41
+ return p;
42
+ })
43
+ .finally(() => {
44
+ setLoading(false);
45
+ });
29
46
  });
47
+ // TODO AbortController?
48
+ return () => {
49
+ let startRef = programLoadingRef.current;
50
+ // TODO don't close on reopen the same db?
51
+ closingRef.current =
52
+ programLoadingRef.current?.then((p) => p.close().then(() => {
53
+ p.events.removeEventListener("join", changeListener);
54
+ p.events.removeEventListener("leave", changeListener);
55
+ if (programLoadingRef.current === startRef) {
56
+ setProgram(undefined);
57
+ programLoadingRef.current = undefined;
58
+ }
59
+ })) || Promise.resolve();
60
+ };
30
61
  }, [
31
62
  peer?.identity.publicKey.hashcode(),
32
63
  typeof addressOrOpen === "string"
33
64
  ? addressOrOpen
34
65
  : addressOrUndefined(addressOrOpen),
35
66
  ]);
36
- return { program, loading, promise: programRef.current };
67
+ return {
68
+ program,
69
+ session,
70
+ loading,
71
+ promise: programLoadingRef.current,
72
+ peerCounter,
73
+ };
37
74
  };
38
75
  //# sourceMappingURL=useProgram.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useProgram.js","sourceRoot":"","sources":["../../src/useProgram.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEpD,MAAM,kBAAkB,GAAG,CAKvB,CAAI,EACN,EAAE;IACA,IAAI;QACA,OAAO,CAAC,CAAC,OAAO,CAAC;KACpB;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,SAAS,CAAC;KACpB;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CACtB,aAAyB,EACzB,OAA2B,EAC7B,EAAE;IACA,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAiB,CAAC;IACtD,IAAI,UAAU,GAAG,MAAM,EAAc,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE;YACzB,OAAO;SACV;QACD,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,UAAU,CAAC,OAAO,GAAG,IAAI;YACrB,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;aACvD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACR,UAAU,CAAC,CAAC,CAAC,CAAC;YACd,OAAO,CAAC,CAAC;QACb,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACV,UAAU,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACX,CAAC,EAAE;QACC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE;QACnC,OAAO,aAAa,KAAK,QAAQ;YAC7B,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC;KAC1C,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC;AAC7D,CAAC,CAAC"}
1
+ {"version":3,"file":"useProgram.js","sourceRoot":"","sources":["../../src/useProgram.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/react",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "homepage": "https://dao-xyz.github.io/peerbit-examples",
5
5
  "module": "lib/esm/index.js",
6
6
  "types": "lib/esm/index.d.ts",
@@ -22,14 +22,14 @@
22
22
  "react": "*"
23
23
  },
24
24
  "dependencies": {
25
- "@chainsafe/libp2p-yamux": "^5.0.0",
26
- "@libp2p/webrtc": "^3.2.1",
27
- "@peerbit/proxy-window": "^1.0.1",
28
- "@types/react": "^18.0.25",
29
- "@types/react-dom": "^18.0.8",
25
+ "@chainsafe/libp2p-yamux": "^6",
26
+ "@libp2p/webrtc": "^4",
27
+ "@peerbit/proxy-window": "^3",
28
+ "@types/react": "^18.2.46",
29
+ "@types/react-dom": "^18.2.18",
30
30
  "detectincognitojs": "^1.3.0",
31
31
  "path-browserify": "^1.0.1",
32
- "peerbit": "^2",
32
+ "peerbit": "^4",
33
33
  "react": "^18.2.0",
34
34
  "react-dom": "^18.2.0",
35
35
  "react-router-dom": "^6.16.0",
@@ -69,5 +69,5 @@
69
69
  "last 1 safari version"
70
70
  ]
71
71
  },
72
- "gitHead": "00c275554aa08e6a70bceaee3e3377936ca0e8d9"
72
+ "gitHead": "158537c6f6818e35e766329a6b4a5ccf7ae57ea0"
73
73
  }
package/src/usePeer.tsx CHANGED
@@ -1,12 +1,9 @@
1
1
  import React, { useContext } from "react";
2
- import { multiaddr, Multiaddr } from "@multiformats/multiaddr";
2
+ import { Multiaddr } from "@multiformats/multiaddr";
3
3
  import { Peerbit } from "peerbit";
4
4
  import { webSockets } from "@libp2p/websockets";
5
5
  import { DirectSub } from "@peerbit/pubsub";
6
-
7
- import { mplex } from "@libp2p/mplex";
8
6
  import { yamux } from "@chainsafe/libp2p-yamux";
9
-
10
7
  import { getFreeKeypair, getTabId, inIframe } from "./utils.js";
11
8
  import { noise } from "@dao-xyz/libp2p-noise";
12
9
  import { v4 as uuid } from "uuid";
@@ -17,9 +14,9 @@ import * as filters from "@libp2p/websockets/filters";
17
14
  import { useMount } from "./useMount.js";
18
15
  import { createClient, createHost } from "@peerbit/proxy-window";
19
16
  import { ProgramClient } from "@peerbit/program";
20
- import { circuitRelayTransport } from "libp2p/circuit-relay";
17
+ import { circuitRelayTransport } from "@libp2p/circuit-relay-v2";
21
18
  import { webRTC } from "@libp2p/webrtc";
22
- import { identifyService } from "libp2p/identify";
19
+ import { identify } from "@libp2p/identify";
23
20
  import { detectIncognito } from "detectincognitojs";
24
21
 
25
22
  export type ConnectionStatus =
@@ -32,6 +29,7 @@ interface IPeerContext {
32
29
  promise: Promise<void> | undefined;
33
30
  loading: boolean;
34
31
  status: ConnectionStatus;
32
+ persisted: boolean | undefined;
35
33
  }
36
34
 
37
35
  if (!window.name) {
@@ -74,7 +72,11 @@ export const PeerProvider = (options: PeerOptions) => {
74
72
  undefined
75
73
  );
76
74
 
77
- const [loading, setLoading] = React.useState<boolean>(false);
75
+ const [persisted, setPersisted] = React.useState<boolean | undefined>(
76
+ undefined
77
+ );
78
+
79
+ const [loading, setLoading] = React.useState<boolean>(true);
78
80
  const [connectionState, setConnectionState] =
79
81
  React.useState<ConnectionStatus>("disconnected");
80
82
  const memo = React.useMemo<IPeerContext>(
@@ -84,12 +86,14 @@ export const PeerProvider = (options: PeerOptions) => {
84
86
  loading,
85
87
  connectionState,
86
88
  status: connectionState,
89
+ persisted: persisted,
87
90
  }),
88
91
  [
89
92
  loading,
90
93
  !!promise,
91
94
  connectionState,
92
95
  peer?.identity?.publicKey?.hashcode(),
96
+ persisted,
93
97
  ]
94
98
  );
95
99
 
@@ -108,6 +112,7 @@ export const PeerProvider = (options: PeerOptions) => {
108
112
  ? (options as TopAndIframeOptions).iframe
109
113
  : (options as TopAndIframeOptions).top
110
114
  : (options as TopOptions);
115
+
111
116
  if (nodeOptions.type !== "proxy") {
112
117
  const nodeId =
113
118
  nodeOptions.keypair ||
@@ -122,77 +127,94 @@ export const PeerProvider = (options: PeerOptions) => {
122
127
  true // reuse keypairs from same tab, (force release)
123
128
  )
124
129
  ).key;
130
+ const peerId = await nodeId.toPeerId();
131
+
132
+ let directory: string | undefined = undefined;
133
+ if (
134
+ !(nodeOptions as WithMemory).inMemory &&
135
+ !(await detectIncognito()).isPrivate
136
+ ) {
137
+ const persisted = await navigator.storage.persist();
138
+ console.log("CAN PERSIST?", persisted);
139
+ setPersisted(persisted);
140
+ if (!persisted) {
141
+ setPersisted(false);
142
+ if (window["chrome"]) {
143
+ console.error(
144
+ "Request persistance but was not given permission by browser. Adding this site to your bookmarks or enabling push notifications might allow your chrome browser to persist data"
145
+ );
146
+ } else {
147
+ console.error(
148
+ "Request persistance but was not given permission by browser."
149
+ );
150
+ }
151
+ } else {
152
+ directory = `./repo/${peerId.toString()}/`;
153
+ }
154
+ }
125
155
 
126
156
  // We create a new directrory to make tab to tab communication go smoothly
157
+ console.log("Create client");
127
158
  newPeer = await Peerbit.create({
128
159
  libp2p: {
129
160
  addresses: {
130
- listen: [
131
- /* "/webrtc" */
132
- ],
161
+ listen: ["/webrtc"],
133
162
  },
134
163
  connectionEncryption: [noise()],
135
- peerId: await nodeId.toPeerId(), //, having the same peer accross broswers does not work, only one tab will be recognized by other peers
164
+ peerId, //, having the same peer accross broswers does not work, only one tab will be recognized by other peers
136
165
  connectionManager: {
137
166
  maxConnections: 100,
138
- minConnections: 0,
167
+ minConnections: 1,
139
168
  },
140
169
 
141
- streamMuxers: [mplex() /* , mplex() */],
170
+ streamMuxers: [yamux()],
142
171
  ...(nodeOptions.network === "local"
143
172
  ? {
144
- connectionGater: {
145
- denyDialMultiaddr: () => {
146
- // by default we refuse to dial local addresses from the browser since they
147
- // are usually sent by remote peers broadcasting undialable multiaddrs but
148
- // here we are explicitly connecting to a local node so do not deny dialing
149
- // any discovered address
150
- return false;
151
- },
152
- },
153
- transports: [
154
- // Add websocket impl so we can connect to "unsafe" ws (production only allows wss)
155
- webSockets({
156
- filter: filters.all,
157
- }),
158
- /* circuitRelayTransport({
159
- discoverRelays: 1,
160
- }),
161
- webRTC(), */
162
- /* circuitRelayTransport({ discoverRelays: 1 }),
163
- webRTC(), */
164
- ],
165
- }
173
+ connectionGater: {
174
+ denyDialMultiaddr: () => {
175
+ // by default we refuse to dial local addresses from the browser since they
176
+ // are usually sent by remote peers broadcasting undialable multiaddrs but
177
+ // here we are explicitly connecting to a local node so do not deny dialing
178
+ // any discovered address
179
+ return false;
180
+ },
181
+ },
182
+ transports: [
183
+ // Add websocket impl so we can connect to "unsafe" ws (production only allows wss)
184
+ webSockets({
185
+ filter: filters.all,
186
+ }),
187
+ circuitRelayTransport({
188
+ discoverRelays: 1,
189
+ }),
190
+ webRTC(),
191
+ ],
192
+ }
166
193
  : {
167
- transports: [
168
- webSockets({ filter: filters.wss }),
169
- /* circuitRelayTransport({
170
- discoverRelays: 1,
171
- }),
172
- webRTC(), */
173
- ],
174
- }),
194
+ transports: [
195
+ webSockets({ filter: filters.wss }),
196
+ circuitRelayTransport({
197
+ discoverRelays: 1,
198
+ }),
199
+ webRTC(),
200
+ ],
201
+ }),
175
202
 
176
203
  services: {
177
204
  pubsub: (c) =>
178
205
  new DirectSub(c, {
179
206
  canRelayMessage: true,
180
- emitSelf: true,
181
- /* connectionManager: {
182
- autoDial: false,
183
- }, */
207
+ /* connectionManager: {
208
+ autoDial: false,
209
+ }, */
184
210
  }),
185
- identify: identifyService(),
211
+ identify: identify(),
186
212
  },
187
213
  },
188
- directory:
189
- !(nodeOptions as WithMemory).inMemory &&
190
- !(
191
- await detectIncognito()
192
- ).isPrivate
193
- ? "./repo"
194
- : undefined,
214
+ directory,
195
215
  });
216
+ console.log("Create done");
217
+ console.log(newPeer?.identity.publicKey.hashcode());
196
218
 
197
219
  setConnectionState("connecting");
198
220
 
@@ -202,11 +224,11 @@ webRTC(), */
202
224
  if (nodeOptions.network === "local") {
203
225
  await newPeer.dial(
204
226
  "/ip4/127.0.0.1/tcp/8002/ws/p2p/" +
205
- (await (
206
- await fetch(
207
- "http://localhost:8082/peer/id"
208
- )
209
- ).text())
227
+ (await (
228
+ await fetch(
229
+ "http://localhost:8082/peer/id"
230
+ )
231
+ ).text())
210
232
  );
211
233
  } else {
212
234
  // TODO fix types. When proxy client this will not be available
@@ -231,8 +253,11 @@ webRTC(), */
231
253
  }
232
254
  };
233
255
 
256
+ console.log("Bootstrap start...");
234
257
  const promise = connectFn();
235
-
258
+ promise.then(() => {
259
+ console.log("Bootstrap done");
260
+ });
236
261
  // Make sure data flow as expected between tabs and windows locally (offline states)
237
262
 
238
263
  if (nodeOptions.waitForConnnected !== false) {
@@ -241,6 +266,7 @@ webRTC(), */
241
266
  } else {
242
267
  newPeer = await createClient(nodeOptions.targetOrigin);
243
268
  }
269
+
244
270
  setPeer(newPeer);
245
271
  setLoading(false);
246
272
  };
@@ -1,49 +1,96 @@
1
- import { Program, ProgramEvents, OpenOptions } from "@peerbit/program";
1
+ import { Program, OpenOptions, ProgramEvents } from "@peerbit/program";
2
2
  import { usePeer } from "./usePeer.js";
3
- import { useEffect, useRef, useState } from "react";
4
-
3
+ import { useEffect, useReducer, useRef, useState } from "react";
5
4
  const addressOrUndefined = <
6
5
  A,
7
6
  B extends ProgramEvents,
8
7
  P extends Program<A, B>
9
8
  >(
10
- p: P
9
+ p?: P
11
10
  ) => {
12
11
  try {
13
- return p.address;
12
+ return p?.address;
14
13
  } catch (error) {
15
14
  return undefined;
16
15
  }
17
16
  };
17
+ type ExtractArgs<T> = T extends Program<infer Args> ? Args : never;
18
+ type ExtractEvents<T> = T extends Program<any, infer Events> ? Events : never;
18
19
 
19
- export const useProgram = <A, B extends ProgramEvents, P extends Program<A, B>>(
20
- addressOrOpen: P | string,
21
- options?: OpenOptions<A, P>
20
+ export const useProgram = <
21
+ P extends Program<ExtractArgs<P>, ExtractEvents<P>> &
22
+ Program<any, ProgramEvents>
23
+ >(
24
+ addressOrOpen?: P | string,
25
+ options?: OpenOptions<P>
22
26
  ) => {
23
27
  const { peer } = usePeer();
24
28
  let [program, setProgram] = useState<P | undefined>();
25
- let programRef = useRef<Promise<P>>();
26
- let [loading, setLoading] = useState(false);
29
+ let [loading, setLoading] = useState(true);
30
+ const [session, forceUpdate] = useReducer((x) => x + 1, 0);
31
+ let programLoadingRef = useRef<Promise<P>>();
32
+ const [peerCounter, setPeerCounter] = useState<number>(1);
33
+ let closingRef = useRef<Promise<any>>(Promise.resolve());
27
34
 
28
35
  useEffect(() => {
29
36
  if (!peer || !addressOrOpen) {
30
37
  return;
31
38
  }
32
39
  setLoading(true);
33
- programRef.current = peer
34
- ?.open(addressOrOpen, { ...options, existing: "reuse" })
35
- .then((p) => {
36
- setProgram(p);
37
- return p;
38
- })
39
- .finally(() => {
40
- setLoading(false);
41
- });
40
+ let changeListener: () => void;
41
+ closingRef.current.then(() => {
42
+ programLoadingRef.current = peer
43
+ ?.open(addressOrOpen, { ...options, existing: "reuse" })
44
+ .then((p) => {
45
+ changeListener = () => {
46
+ p.getReady().then((set) => {
47
+ setPeerCounter(set.size);
48
+ });
49
+ };
50
+ p.events.addEventListener("join", changeListener);
51
+ p.events.addEventListener("leave", changeListener);
52
+ p.getReady().then((set) => {
53
+ setPeerCounter(set.size);
54
+ });
55
+ setProgram(p);
56
+ forceUpdate();
57
+
58
+ return p;
59
+ })
60
+ .finally(() => {
61
+ setLoading(false);
62
+ });
63
+ });
64
+
65
+ // TODO AbortController?
66
+ return () => {
67
+ let startRef = programLoadingRef.current;
68
+
69
+ // TODO don't close on reopen the same db?
70
+ closingRef.current =
71
+ programLoadingRef.current?.then((p) =>
72
+ p.close().then(() => {
73
+ p.events.removeEventListener("join", changeListener);
74
+ p.events.removeEventListener("leave", changeListener);
75
+
76
+ if (programLoadingRef.current === startRef) {
77
+ setProgram(undefined);
78
+ programLoadingRef.current = undefined;
79
+ }
80
+ })
81
+ ) || Promise.resolve();
82
+ };
42
83
  }, [
43
84
  peer?.identity.publicKey.hashcode(),
44
85
  typeof addressOrOpen === "string"
45
86
  ? addressOrOpen
46
87
  : addressOrUndefined(addressOrOpen),
47
88
  ]);
48
- return { program, loading, promise: programRef.current };
89
+ return {
90
+ program,
91
+ session,
92
+ loading,
93
+ promise: programLoadingRef.current,
94
+ peerCounter,
95
+ };
49
96
  };