@comapeo/core 4.0.0 → 4.1.1

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.
@@ -11,5 +11,6 @@ export namespace NAMESPACE_SCHEMAS {
11
11
  }
12
12
  export const SUPPORTED_CONFIG_VERSION: 1;
13
13
  export const DRIZZLE_MIGRATIONS_TABLE: "__drizzle_migrations";
14
+ export const UNIX_EPOCH_DATE: string;
14
15
  import type { Namespace } from './types.js';
15
16
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.js"],"names":[],"mappings":"AAAA,8CAA8C;AAI9C,kFAME;AAEF,uCAAuC;AACvC,iCADW,aAAa,CAAC,SAAS,CAAC,CAC8B;AAEjE,uCAAuC;AACvC,8BADW,aAAa,CAAC,SAAS,CAAC,CAGlC;;;;;;AAeD,yCAAyC;AAGzC,8DAA8D;+BApC/B,YAAY"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.js"],"names":[],"mappings":"AAAA,8CAA8C;AAI9C,kFAME;AAEF,uCAAuC;AACvC,iCADW,aAAa,CAAC,SAAS,CAAC,CAC8B;AAEjE,uCAAuC;AACvC,8BADW,aAAa,CAAC,SAAS,CAAC,CAGlC;;;;;;AAeD,yCAAyC;AAGzC,8DAA8D;AAG9D,qCAAwD;+BAvCzB,YAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"local-discovery.d.ts","sourceRoot":"","sources":["../../src/discovery/local-discovery.js"],"names":[],"mappings":"AAqBA,mDAAmD;AAEnD;;;GAGG;AAEH;;GAEG;AACH;IAYE;;;;OAIG;IACH,yCAHG;QAAsB,eAAe,EAA7B,OAAO;QACO,MAAM;KAAC,EAqB/B;IAED,yDAAyD;IACzD,SADc,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAIpD;IAWD;;;;;;OAMG;IACH,qCALG;QAAqB,OAAO,EAApB,MAAM;QACO,IAAI,EAAjB,MAAM;QACO,IAAI,EAAjB,MAAM;KACd,GAAU,IAAI,CAkBhB;IAqJD;;;;;;;;;OASG;IACH;;;oBAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;;CAqBF;sBAnRa;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;mCACxC,kBAAkB,GAAG,CAAC,MAAM,CAAC;;gBAU7B,CAAC,UAAU,EAAE,oBAAoB,KAAK,IAAI;;6BAzB3B,oBAAoB;uBAU1B,cAAc;gBATrB,UAAU;uCAWa,uCAAuC"}
1
+ {"version":3,"file":"local-discovery.d.ts","sourceRoot":"","sources":["../../src/discovery/local-discovery.js"],"names":[],"mappings":"AAqBA,mDAAmD;AAEnD;;;GAGG;AAEH;;GAEG;AACH;IAaE;;;;OAIG;IACH,yCAHG;QAAsB,eAAe,EAA7B,OAAO;QACO,MAAM;KAAC,EAqB/B;IAED,yDAAyD;IACzD,SADc,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAIpD;IAqBD;;;;;;OAMG;IACH,qCALG;QAAqB,OAAO,EAApB,MAAM;QACO,IAAI,EAAjB,MAAM;QACO,IAAI,EAAjB,MAAM;KACd,GAAU,IAAI,CAkBhB;IAqJD;;;;;;;;;OASG;IACH;;;oBAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;;CA+BF;sBAxSa;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;mCACxC,kBAAkB,GAAG,CAAC,MAAM,CAAC;;gBAU7B,CAAC,UAAU,EAAE,oBAAoB,KAAK,IAAI;;6BAzB3B,oBAAoB;uBAU1B,cAAc;gBATrB,UAAU;uCAWa,uCAAuC"}
package/dist/errors.d.ts CHANGED
@@ -22,10 +22,6 @@ export class ProjectDetailsSendFailError extends Error {
22
22
  /** @param {string} [message] */
23
23
  constructor(message?: string | undefined);
24
24
  }
25
- export class InviteInitialSyncFailError extends Error {
26
- /** @param {string} [message] */
27
- constructor(message?: string | undefined);
28
- }
29
25
  export class RPCDisconnectBeforeSendingError extends Error {
30
26
  /** @param {string} [message] */
31
27
  constructor(message?: string | undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.js"],"names":[],"mappings":"AAuEA;;;GAGG;AACH,oCAHW,OAAO,GACL,IAAI,CAKhB;AA9ED;IACE,8BAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.js"],"names":[],"mappings":"AA+DA;;;GAGG;AACH,oCAHW,OAAO,GACL,IAAI,CAKhB;AAtED;IACE,8BAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF;AAED;IACE,gCAAgC;IAChC,0CAGC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":";;;AAgBO,0CAJI,YAAY,gKAEV,UAAU,yCAUyvlB,QAAQ,kBAAyB,SAAS,qDAVxvlB,CAG7B;;;;;;kCARH,oBAAoB;gCAL/C,YAAY;oCAAZ,YAAY;+BAAZ,YAAY"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":";;;AAgBO,0CAJI,YAAY,gKAEV,UAAU,yCAU4kmB,QAAQ,kBAAyB,SAAS,qDAV3kmB,CAG7B;;;;;;kCARH,oBAAoB;gCAL/C,YAAY;oCAAZ,YAAY;+BAAZ,YAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"invite-api.d.ts","sourceRoot":"","sources":["../../src/invite/invite-api.js"],"names":[],"mappings":"AAcA,iEAAiE;AACjE,gDAAgD;AAChD;;;;;;GAMG;AAQH;;;GAGG;AACH,4GAA4G;AAC5G,+LAA+L;AAE/L;;GAEG;AAEH;;;;GAIG;AAEH;;GAEG;AAEH;;GAEG;AACH;IAOE;;;;;;;OAOG;IACH,sCANG;QAAwD,GAAG,EAAnD,OAAO,mBAAmB,EAAE,UAAU;QACtB,OAAO,EAC/B;YAAwG,oBAAoB,EAApH,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,SAAS,GAAG;gBAAE,eAAe,EAAE,MAAM,CAAA;aAAE;YAC7C,UAAU,EAA3C,eAAe;SACvB;QAAyB,MAAM;KAAC,EAkClC;IA3BC,4CAAc;IAqKhB;;;;OAIG;IACH,WAFa,KAAK,CAAC,MAAM,CAAC,CAUzB;IAED;;;;;OAKG;IACH,wBAHW,MAAM,GACJ,MAAM,CASlB;IAED;;;;;;;;;;;;OAYG;IACH,qCAHW,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,GACtB,OAAO,CAAC,MAAM,CAAC,CAgC3B;IAED;;;OAGG;IACH,qCAHW,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,GACtB,IAAI,CAWhB;;CACF;+BAmD0C,CAAC,SAA/B,OAAQ,QAAQ,EAAE,UAAW,IAC7B,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,OAAO,QAAQ,EAAE,aAAa,GAAG,MAAM,CAAC,GAAG,KAAK;6BA5VjF,gBAAgB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE;0BAExC,kBAAkB,CAAC,OAAO,QAAQ,EAAE,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAAC;qBAC9E,OAAO,WAAW,EAAE,QAAQ,CAAC,WAAW,cAAc,CAAC,GAAG;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;;iBAGvK,OAAO,QAAQ,EAAE,YAAY,CAAC,OAAO,kBAAkB,CAAC;;;uBAKvD,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;sBACxB,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;;8BAIzB,CAAC,cAAc,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC;6BAhDxC,oBAAoB;uBAK1B,cAAc;gDAgB3B,qBAAqB;mCAdI,2BAA2B;gCAQ9B,aAAa;yCADJ,qBAAqB"}
1
+ {"version":3,"file":"invite-api.d.ts","sourceRoot":"","sources":["../../src/invite/invite-api.js"],"names":[],"mappings":"AAcA,iEAAiE;AACjE,gDAAgD;AAChD;;;;;;GAMG;AAQH;;;GAGG;AACH,4GAA4G;AAC5G,+LAA+L;AAE/L;;GAEG;AAEH;;;;GAIG;AAEH;;GAEG;AAEH;;GAEG;AACH;IAOE;;;;;;;OAOG;IACH,sCANG;QAAwD,GAAG,EAAnD,OAAO,mBAAmB,EAAE,UAAU;QACtB,OAAO,EAC/B;YAAwG,oBAAoB,EAApH,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,SAAS,GAAG;gBAAE,eAAe,EAAE,MAAM,CAAA;aAAE;YAC7C,UAAU,EAA3C,eAAe;SACvB;QAAyB,MAAM;KAAC,EAkClC;IA3BC,4CAAc;IAqKhB;;;;OAIG;IACH,WAFa,KAAK,CAAC,MAAM,CAAC,CAUzB;IAED;;;;;OAKG;IACH,wBAHW,MAAM,GACJ,MAAM,CASlB;IAED;;;;;;;;;;;;OAYG;IACH,qCAHW,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,GACtB,OAAO,CAAC,MAAM,CAAC,CAwC3B;IAED;;;OAGG;IACH,qCAHW,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,GACtB,IAAI,CAWhB;;CACF;+BAmD0C,CAAC,SAA/B,OAAQ,QAAQ,EAAE,UAAW,IAC7B,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,CAAC,SAAS,OAAO,QAAQ,EAAE,aAAa,GAAG,MAAM,CAAC,GAAG,KAAK;6BApWjF,gBAAgB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE;0BAExC,kBAAkB,CAAC,OAAO,QAAQ,EAAE,cAAc,CAAC,OAAO,kBAAkB,CAAC,CAAC;qBAC9E,OAAO,WAAW,EAAE,QAAQ,CAAC,WAAW,cAAc,CAAC,GAAG;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;;iBAGvK,OAAO,QAAQ,EAAE,YAAY,CAAC,OAAO,kBAAkB,CAAC;;;uBAKvD,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;sBACxB,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;;8BAIzB,CAAC,cAAc,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC;6BAhDxC,oBAAoB;uBAK1B,cAAc;gDAgB3B,qBAAqB;mCAdI,2BAA2B;gCAQ9B,aAAa;yCADJ,qBAAqB"}
@@ -1 +1 @@
1
- {"version":3,"file":"mapeo-manager.d.ts","sourceRoot":"","sources":["../src/mapeo-manager.js"],"names":[],"mappings":"AAoFA,oDAEC;AAED,mFAC6C;AAE7C;;GAEG;AAEH;;;GAGG;AAEH;;GAEG;AACH;IAsBE;;;;;;;;;;;;;OAaG;IACH,oMAZG;QAAqB,OAAO,EAApB,MAAM;QACO,QAAQ,EAArB,MAAM;QACO,uBAAuB,EAApC,MAAM;QACO,sBAAsB,EAAnC,MAAM;QACqB,WAAW,EAAtC,MAAM,GAAG,WAAW;QACoB,OAAO,EAA/C,OAAO,SAAS,EAAE,eAAe;QACnB,iBAAiB;QACjB,aAAa;QACb,eAAe;QACf,qBAAqB;QACD,aAAa,UAAzC,MAAM,KAAK,SAAS;KAAsB,EA+F1D;IAED,uBAEC;IAsID;;;;;OAKG;IACH;eAHoB,MAAM;qBAAe,MAAM;uBAAiB,MAAM;6BAAuB,MAAM;oBACtF,OAAO,CAAC,MAAM,CAAC,CAoF3B;IAED;;;OAGG;IACH,4BAHW,MAAM,GACJ,OAAO,CAAC,YAAY,CAAC,CAuCjC;IAwBD;;OAEG;IACH,gBAFa,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAuDzC;IAED;;;;;;;;OAQG;IACH,6FAJW,mBAAmB;sBACH,OAAO;sBACrB,OAAO,CAAC,MAAM,CAAC,CAsF3B;IAwED;;OAEG;IAEH;;;;OAIG;IACH,cAHoF,CAAC,SADxE,OAAQ,WAAW,EAAE,KAAK,CACtC,OAAS,oBAAoB,EAAE,eAAe,GAAG;QAAC,UAAU,CAAC,oGAAe;KAAC,EAAE,CAAC,CAAE,cACxE,CAAC,iBA6CX;IAED;;;;;;;OAOG;IACH,iBAPa,CACZ;QACM,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;KAC3C,GAAG,OAAO,CAAC,eAAe,CAAC,CAC7B,CAaH;IAED;;;;;;OAMG;IACH,oCAHW,OAAO,GACL,IAAI,CAkBhB;IAED;;;;;OAKG;IACH,sBAFa,OAAO,CAanB;IAED;;OAEG;IACH,wBAEC;IAED,yDAAyD;IACzD,iCADc,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAGpD;;;;;;;;;;IAYD;;OAEG;IACH,kBAFa,OAAO,CAAC,cAAc,EAAE,CAAC,CAIrC;IAED;;;;;;;OAOG;IACH,kBAFa,IAAI,CAKhB;IAED;;;;;;;OAOG;IACH,kBAFa,IAAI,CAKhB;IAED;;OAEG;IACH,8BAFW,MAAM,iBAgDhB;IAED,sCAGC;;CACF;mCA/4Ba,eAAe,WAAW,EAAE,gBAAgB,CAAC;kCAC7C,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,gBAAgB,CAAC,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE;4BACvI;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE;6BAwBjI,IAAI,CAAC,OAAO,kBAAkB,EAAE,QAAQ,EAAE,UAAU,CAAC;;;;;mBAKpD,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI;;6BAzFlB,oBAAoB;6BAY1C,oBAAoB;qCA4CuB,oBAAoB;0BAhB5C,wBAAwB;iCAeN,YAAY;0BAL9B,IAAI;4BAhCF,qBAAqB;oCAmCb,WAAW;wCACN,oBAAoB"}
1
+ {"version":3,"file":"mapeo-manager.d.ts","sourceRoot":"","sources":["../src/mapeo-manager.js"],"names":[],"mappings":"AAqFA,oDAEC;AAED,mFAC6C;AAE7C;;GAEG;AAEH;;;GAGG;AAEH;;GAEG;AACH;IAsBE;;;;;;;;;;;;;OAaG;IACH,oMAZG;QAAqB,OAAO,EAApB,MAAM;QACO,QAAQ,EAArB,MAAM;QACO,uBAAuB,EAApC,MAAM;QACO,sBAAsB,EAAnC,MAAM;QACqB,WAAW,EAAtC,MAAM,GAAG,WAAW;QACoB,OAAO,EAA/C,OAAO,SAAS,EAAE,eAAe;QACnB,iBAAiB;QACjB,aAAa;QACb,eAAe;QACf,qBAAqB;QACD,aAAa,UAAzC,MAAM,KAAK,SAAS;KAAsB,EA+F1D;IAED,uBAEC;IAsID;;;;;OAKG;IACH;eAHoB,MAAM;qBAAe,MAAM;uBAAiB,MAAM;6BAAuB,MAAM;oBACtF,OAAO,CAAC,MAAM,CAAC,CAoF3B;IAED;;;OAGG;IACH,4BAHW,MAAM,GACJ,OAAO,CAAC,YAAY,CAAC,CAuCjC;IAwBD;;OAEG;IACH,gBAFa,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAyDzC;IAED;;;;;;;;OAQG;IACH,6FAJW,mBAAmB;sBACH,OAAO;sBACrB,OAAO,CAAC,MAAM,CAAC,CA2G3B;IAqED;;OAEG;IAEH;;;;OAIG;IACH,cAHoF,CAAC,SADxE,OAAQ,WAAW,EAAE,KAAK,CACtC,OAAS,oBAAoB,EAAE,eAAe,GAAG;QAAC,UAAU,CAAC,oGAAe;KAAC,EAAE,CAAC,CAAE,cACxE,CAAC,iBA6CX;IAED;;;;;;;OAOG;IACH,iBAPa,CACZ;QACM,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;KAC3C,GAAG,OAAO,CAAC,eAAe,CAAC,CAC7B,CAaH;IAED;;;;;;OAMG;IACH,oCAHW,OAAO,GACL,IAAI,CAkBhB;IAED;;;;;OAKG;IACH,sBAFa,OAAO,CAanB;IAED;;OAEG;IACH,wBAEC;IAED,yDAAyD;IACzD,iCADc,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAGpD;;;;;;;;;;IAYD;;OAEG;IACH,kBAFa,OAAO,CAAC,cAAc,EAAE,CAAC,CAIrC;IAED;;;;;;;OAOG;IACH,kBAFa,IAAI,CAKhB;IAED;;;;;;;OAOG;IACH,kBAFa,IAAI,CAKhB;IAED;;OAEG;IACH,8BAFW,MAAM,iBAgDhB;IAED,sCAGC;;CACF;mCAn6Ba,eAAe,WAAW,EAAE,gBAAgB,CAAC;kCAC7C,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,gBAAgB,CAAC,GAAG;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE;4BACvI;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE;6BAwBjI,IAAI,CAAC,OAAO,kBAAkB,EAAE,QAAQ,EAAE,UAAU,CAAC;;;;;mBAKpD,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI;;6BA1FlB,oBAAoB;6BAY1C,oBAAoB;qCA6CuB,oBAAoB;0BAhB5C,wBAAwB;iCAeN,YAAY;0BAL9B,IAAI;4BAjCF,qBAAqB;oCAoCb,WAAW;wCACN,oBAAoB"}
@@ -1274,7 +1274,11 @@ export class MapeoProject extends TypedEmitter<{
1274
1274
  * @returns {Promise<EditableProjectSettings>}
1275
1275
  */
1276
1276
  $getProjectSettings(): Promise<EditableProjectSettings>;
1277
- $getOwnRole(): Promise<import("./roles.js").Role<"a12a6702b93bd7ff" | "f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9" | "8ced989b1904606b" | "a24eaca65ab5d5d0" | "08e4251e36f6e7ed">>;
1277
+ /**
1278
+ * @returns {Promise<boolean>}
1279
+ */
1280
+ $hasSyncedProjectSettings(): Promise<boolean>;
1281
+ $getOwnRole(): Promise<import("./roles.js").Role<"a12a6702b93bd7ff" | "f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9" | "8ced989b1904606b" | "08e4251e36f6e7ed">>;
1278
1282
  /**
1279
1283
  * @param {string} originalVersionId The `originalVersionId` from a document.
1280
1284
  * @returns {Promise<string>} The device ID for this creator.
@@ -1 +1 @@
1
- {"version":3,"file":"mapeo-project.d.ts","sourceRoot":"","sources":["../src/mapeo-project.js"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA4X7B;IAED,8BAEC;IAoLD;;;;;;;;;;;OAWG;IACH,yCAPW,CACV,OAAW,GACX,OAAW,QAAQ,EAAE,MAAM,GAC3B,OAAW,SAAS,EAAE,MAAM,CACzB,GACS,iBAAiB,CAqB7B;IAED;;;OAGG;IACH,2BAHW,IAAI,CAAC,OAAO,iBAAiB,EAAE,eAAe,EAAE,MAAM,GAAG,YAAY,GAAG,yBAAyB,CAAC,GAChG,OAAO,CAAC,OAAO,iBAAiB,EAAE,UAAU,CAAC,CAwBzD;IAED,uCAAuC;IACvC,uCADY,OAAO,iBAGlB;IAED,yBAAyB;IACzB,kCAEC;IAqOD;;;;OAIG;IACH,iCAJW,OAAO,UACP,OAAO,GACL,OAAO,CAAC,MAAM,CAAC,CAY3B;IAqPD,iCAMC;IAED;;;OAGG;IACH,sBAFa,OAAO,CAAC,IAAI,CAAC,CAoCzB;;CAuKF;sCA92Ca,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC;6BACxC,oBAAoB,CAAC,gBAAgB,CAAC;8BACtC,GAAG,CAAC,MAAM,EAAC,UAAU,CAAC;;cAE1B,MAAM,GAAC,SAAS;YAChB,MAAM;;6BArEa,oBAAoB;wBAYzB,eAAe;0BAHb,sBAAsB;yBACL,qBAAqB;0BAuCtC,iBAAiB;wBAKpC,oBAAoB;2BAIA,sBAAsB;wBAFzB,eAAe;4BAhDX,yBAAyB;8BAuB9C,qBAAqB;0BApBF,uBAAuB;uCAoD8H,YAAY;4BAlD/J,yBAAyB;iCAkD0H,YAAY;0BAHjK,IAAI;uBALP,aAAa;0CAO0B,iBAAiB;gCACgG,YAAY;4BAAZ,YAAY"}
1
+ {"version":3,"file":"mapeo-project.d.ts","sourceRoot":"","sources":["../src/mapeo-project.js"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6XZ;IAED,8BAEC;IAmMD;;;;;;;;;;;OAWG;IACH,yCAPW,CACV,OAAW,GACX,OAAW,QAAQ,EAAE,MAAM,GAC3B,OAAW,SAAS,EAAE,MAAM,CACzB,GACS,iBAAiB,CAqB7B;IAED;;;OAGG;IACH,2BAHW,IAAI,CAAC,OAAO,iBAAiB,EAAE,eAAe,EAAE,MAAM,GAAG,YAAY,GAAG,yBAAyB,CAAC,GAChG,OAAO,CAAC,OAAO,iBAAiB,EAAE,UAAU,CAAC,CAwBzD;IAED,uCAAuC;IACvC,uCADY,OAAO,iBAGlB;IAED,yBAAyB;IACzB,kCAEC;IAgOD;;;;OAIG;IACH,iCAJW,OAAO,UACP,OAAO,GACL,OAAO,CAAC,MAAM,CAAC,CAY3B;IAmPD,iCAMC;IAED;;;OAGG;IACH,sBAFa,OAAO,CAAC,IAAI,CAAC,CAoCzB;;CAuKF;sCAv3Ca,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC;6BACxC,oBAAoB,CAAC,gBAAgB,CAAC;8BACtC,GAAG,CAAC,MAAM,EAAC,UAAU,CAAC;;cAE1B,MAAM,GAAC,SAAS;YAChB,MAAM;;6BArEa,oBAAoB;wBAYzB,eAAe;0BAHb,sBAAsB;yBACL,qBAAqB;0BAuCtC,iBAAiB;wBAKpC,oBAAoB;2BAIA,sBAAsB;wBAFzB,eAAe;4BAhDX,yBAAyB;8BAuB9C,qBAAqB;0BApBF,uBAAuB;uCAoD8H,YAAY;4BAlD/J,yBAAyB;iCAkD0H,YAAY;0BAHjK,IAAI;uBALP,aAAa;0CAO0B,iBAAiB;gCACgG,YAAY;4BAAZ,YAAY"}
@@ -41,8 +41,9 @@ export class MemberApi extends TypedEmitter<import("tiny-typed-emitter").Default
41
41
  * @param {Object} opts.dataTypes
42
42
  * @param {Pick<DeviceInfoDataType, 'getByDocId' | 'getMany'>} opts.dataTypes.deviceInfo
43
43
  * @param {Pick<ProjectDataType, 'getByDocId'>} opts.dataTypes.project
44
+ * @param {Logger} [opts.logger]
44
45
  */
45
- constructor({ deviceId, roles, coreOwnership, encryptionKeys, getProjectName, projectKey, rpc, makeWebsocket, getReplicationStream, waitForInitialSyncWithPeer, dataTypes, }: {
46
+ constructor({ deviceId, roles, coreOwnership, encryptionKeys, getProjectName, projectKey, rpc, makeWebsocket, getReplicationStream, waitForInitialSyncWithPeer, dataTypes, logger, }: {
46
47
  deviceId: string;
47
48
  roles: import("./roles.js").Roles;
48
49
  coreOwnership: import("./core-ownership.js").CoreOwnership;
@@ -57,6 +58,7 @@ export class MemberApi extends TypedEmitter<import("tiny-typed-emitter").Default
57
58
  deviceInfo: Pick<DeviceInfoDataType, "getByDocId" | "getMany">;
58
59
  project: Pick<ProjectDataType, "getByDocId">;
59
60
  };
61
+ logger?: Logger | undefined;
60
62
  });
61
63
  /**
62
64
  * Send an invite. Resolves when receiving a response. Rejects if the invite
@@ -68,17 +70,19 @@ export class MemberApi extends TypedEmitter<import("tiny-typed-emitter").Default
68
70
  * @param {string} [opts.roleName]
69
71
  * @param {string} [opts.roleDescription]
70
72
  * @param {Buffer} [opts.__testOnlyInviteId] Hard-code the invite ID. Only for tests.
73
+ * @param {number} [opts.initialSyncTimeoutMs=5000]
71
74
  * @returns {Promise<(
72
75
  * typeof InviteResponse_Decision.ACCEPT |
73
76
  * typeof InviteResponse_Decision.REJECT |
74
77
  * typeof InviteResponse_Decision.ALREADY
75
78
  * )>}
76
79
  */
77
- invite(deviceId: string, { roleId, roleName, roleDescription, __testOnlyInviteId, }: {
80
+ invite(deviceId: string, { roleId, roleName, roleDescription, __testOnlyInviteId, initialSyncTimeoutMs, }: {
78
81
  roleId: import("./roles.js").RoleIdForNewInvite;
79
82
  roleName?: string | undefined;
80
83
  roleDescription?: string | undefined;
81
84
  __testOnlyInviteId?: Buffer | undefined;
85
+ initialSyncTimeoutMs?: number | undefined;
82
86
  }): Promise<(typeof InviteResponse_Decision.ACCEPT | typeof InviteResponse_Decision.REJECT | typeof InviteResponse_Decision.ALREADY)>;
83
87
  /**
84
88
  * Attempt to cancel an outbound invite, if it exists.
@@ -162,6 +166,7 @@ import { InviteResponse_Decision } from './generated/rpc.js';
162
166
  import type { Promisable } from 'type-fest';
163
167
  import WebSocket from 'ws';
164
168
  import type { ReplicationStream } from './types.js';
169
+ import { Logger } from './logger.js';
165
170
  import type { DataStore } from './datastore/index.js';
166
171
  import type { deviceInfoTable } from './schema/project.js';
167
172
  import type { DeviceInfo } from '@comapeo/schema';
@@ -1 +1 @@
1
- {"version":3,"file":"member-api.d.ts","sourceRoot":"","sources":["../src/member-api.js"],"names":[],"mappings":"AAgCA;;;;;;;GAOG;AACH,8CAA8C;AAC9C,mEAAmE;AACnE,sDAAsD;AACtD,wDAAwD;AACxD,6DAA6D;AAC7D,iEAAiE;AACjE,sDAAsD;AAEtD,qIAAqI;AACrI,sJAAsJ;AACtJ;;;;;;;;;GASG;AAEH;IAgBE;;;;;;;;;;;;;;;OAeG;IACH,8KAdG;QAAqB,QAAQ,EAArB,MAAM;QAC2B,KAAK,EAAtC,OAAO,YAAY,EAAE,KAAK;QACwB,aAAa,EAA/D,OAAO,qBAAqB,EAAE,aAAa;QACQ,cAAc,EAAjE,OAAO,qBAAqB,EAAE,cAAc;QACD,cAAc,EAAzD,MAAM,WAAW,SAAS,GAAG,MAAM,CAAC;QACvB,UAAU,EAAvB,MAAM;QACsC,GAAG,EAA/C,OAAO,kBAAkB,EAAE,UAAU;QACH,aAAa,UAAzC,MAAM,KAAK,SAAS;QACI,oBAAoB,EAAlD,MAAM,iBAAiB;QAC6C,0BAA0B,EAA9F,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC;QAChD,SAAS,EAC9B;YAA2E,UAAU,EAA7E,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,SAAS,CAAC;YACE,OAAO,EAA3D,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC;SAC7C;KAAA,EA0BA;IAED;;;;;;;;;;;;;;;OAeG;IACH,iBAZW,MAAM,8DAEd;QAAsD,MAAM,EAApD,OAAO,YAAY,EAAE,kBAAkB;QACzB,QAAQ;QACR,eAAe;QACf,kBAAkB;KACxC,GAAU,OAAO,CAAC,CACpB,OAAW,uBAAuB,CAAC,MAAM,GACzC,OAAW,uBAAuB,CAAC,MAAM,GACzC,OAAW,uBAAuB,CAAC,OAAO,CACvC,CAAC,CA4GJ;IAmDD;;;;;;;OAOG;IACH,8BAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,uBALW,MAAM;;oBAGJ,OAAO,CAAC,IAAI,CAAC,CAqBzB;IAED;;;;;;;OAOG;IACH,iCALW,MAAM;;oBAGJ,OAAO,CAAC,IAAI,CAAC,CAgCzB;IAkHD;;;OAGG;IACH,kBAHW,MAAM,GACJ,OAAO,CAAC,UAAU,CAAC,CA6B/B;IAED;;OAEG;IACH,WAFa,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAqCtC;IAED;;;;OAIG;IACH,qBAJW,MAAM,UACN,OAAO,YAAY,EAAE,wBAAwB,GAC3C,OAAO,CAAC,IAAI,CAAC,CAIzB;;CACF;iCAxhBa,SAAS,UAAU,QAAQ,CAAC,EAAE,sBAAsB,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,CAAC;8BAChG,SAAS,UAAU,QAAQ,CAAC,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,eAAe,EAAE,oBAAoB,CAAC;;cAGxH,MAAM;UACN,OAAO,YAAY,EAAE,IAAI;;;;;iBAKzB,MAAM;;;6BAvDa,oBAAoB;wCAET,oBAAoB;gCAmC5B,WAAW;sBAtCrB,IAAI;uCA4Ca,YAAY;+BAHpB,sBAAsB;qCAChB,qBAAqB;gCANhD,iBAAiB;qCAAjB,iBAAiB;8BAIG,qBAAqB;0CAGT,oBAAoB;qCAPpD,iBAAiB;0CAAjB,iBAAiB"}
1
+ {"version":3,"file":"member-api.d.ts","sourceRoot":"","sources":["../src/member-api.js"],"names":[],"mappings":"AA4BA;;;;;;;GAOG;AACH,8CAA8C;AAC9C,mEAAmE;AACnE,sDAAsD;AACtD,wDAAwD;AACxD,6DAA6D;AAC7D,iEAAiE;AACjE,sDAAsD;AAEtD,qIAAqI;AACrI,sJAAsJ;AACtJ;;;;;;;;;GASG;AAEH;IAiBE;;;;;;;;;;;;;;;;OAgBG;IACH,sLAfG;QAAqB,QAAQ,EAArB,MAAM;QAC2B,KAAK,EAAtC,OAAO,YAAY,EAAE,KAAK;QACwB,aAAa,EAA/D,OAAO,qBAAqB,EAAE,aAAa;QACQ,cAAc,EAAjE,OAAO,qBAAqB,EAAE,cAAc;QACD,cAAc,EAAzD,MAAM,WAAW,SAAS,GAAG,MAAM,CAAC;QACvB,UAAU,EAAvB,MAAM;QACsC,GAAG,EAA/C,OAAO,kBAAkB,EAAE,UAAU;QACH,aAAa,UAAzC,MAAM,KAAK,SAAS;QACI,oBAAoB,EAAlD,MAAM,iBAAiB;QAC6C,0BAA0B,EAA9F,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC;QAChD,SAAS,EAC9B;YAA2E,UAAU,EAA7E,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,SAAS,CAAC;YACE,OAAO,EAA3D,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC;SAC3C;QAAsB,MAAM;KAAC,EA6B/B;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,iBAbW,MAAM,oFAEd;QAAsD,MAAM,EAApD,OAAO,YAAY,EAAE,kBAAkB;QACzB,QAAQ;QACR,eAAe;QACf,kBAAkB;QAClB,oBAAoB;KAC1C,GAAU,OAAO,CAAC,CACpB,OAAW,uBAAuB,CAAC,MAAM,GACzC,OAAW,uBAAuB,CAAC,MAAM,GACzC,OAAW,uBAAuB,CAAC,OAAO,CACvC,CAAC,CA6GJ;IAqDD;;;;;;;OAOG;IACH,8BAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,uBALW,MAAM;;oBAGJ,OAAO,CAAC,IAAI,CAAC,CAqBzB;IAED;;;;;;;OAOG;IACH,iCALW,MAAM;;oBAGJ,OAAO,CAAC,IAAI,CAAC,CAgCzB;IAkHD;;;OAGG;IACH,kBAHW,MAAM,GACJ,OAAO,CAAC,UAAU,CAAC,CA6B/B;IAED;;OAEG;IACH,WAFa,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAqCtC;IAED;;;;OAIG;IACH,qBAJW,MAAM,UACN,OAAO,YAAY,EAAE,wBAAwB,GAC3C,OAAO,CAAC,IAAI,CAAC,CAIzB;;CACF;iCAhiBa,SAAS,UAAU,QAAQ,CAAC,EAAE,sBAAsB,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,CAAC;8BAChG,SAAS,UAAU,QAAQ,CAAC,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,eAAe,EAAE,oBAAoB,CAAC;;cAGxH,MAAM;UACN,OAAO,YAAY,EAAE,IAAI;;;;;iBAKzB,MAAM;;;6BAnDa,oBAAoB;wCAET,oBAAoB;gCA+B5B,WAAW;sBAlCrB,IAAI;uCAwCa,YAAY;uBA5B5B,aAAa;+BAyBL,sBAAsB;qCAChB,qBAAqB;gCANhD,iBAAiB;qCAAjB,iBAAiB;8BAIG,qBAAqB;0CAGT,oBAAoB;qCAPpD,iBAAiB;0CAAjB,iBAAiB"}
package/dist/roles.d.ts CHANGED
@@ -4,7 +4,6 @@ export const COORDINATOR_ROLE_ID: "f7c150f5a3a9a855";
4
4
  export const MEMBER_ROLE_ID: "012fd2d431c0bf60";
5
5
  export const BLOCKED_ROLE_ID: "9e6d29263cba36c9";
6
6
  export const LEFT_ROLE_ID: "8ced989b1904606b";
7
- export const FAILED_ROLE_ID: "a24eaca65ab5d5d0";
8
7
  export const NO_ROLE_ID: "08e4251e36f6e7ed";
9
8
  export const isRoleIdForNewInvite: (value: unknown) => value is "f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9";
10
9
  export const isRoleIdAssignableToOthers: (value: unknown) => value is "f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9";
@@ -127,7 +126,7 @@ export type DocCapability = {
127
126
  */
128
127
  writeOthers: boolean;
129
128
  };
130
- export type Role<T extends RoleId = "a12a6702b93bd7ff" | "f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9" | "8ced989b1904606b" | "a24eaca65ab5d5d0" | "08e4251e36f6e7ed"> = {
129
+ export type Role<T extends RoleId = "a12a6702b93bd7ff" | "f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9" | "8ced989b1904606b" | "08e4251e36f6e7ed"> = {
131
130
  roleId: T;
132
131
  name: string;
133
132
  docs: Record<import("@comapeo/schema").MapeoDoc["schemaName"], DocCapability>;
@@ -146,13 +145,13 @@ import { TypedEmitter } from 'tiny-typed-emitter';
146
145
  * @template T
147
146
  */
148
147
  /** @typedef {ElementOf<typeof ROLE_IDS>} RoleId */
149
- declare const ROLE_IDS: Set<"a12a6702b93bd7ff" | "f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9" | "8ced989b1904606b" | "a24eaca65ab5d5d0" | "08e4251e36f6e7ed">;
148
+ declare const ROLE_IDS: Set<"a12a6702b93bd7ff" | "f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9" | "8ced989b1904606b" | "08e4251e36f6e7ed">;
150
149
  /** @typedef {ElementOf<typeof ROLE_IDS_FOR_NEW_INVITE>} RoleIdForNewInvite */
151
150
  declare const ROLE_IDS_FOR_NEW_INVITE: Set<"f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9">;
152
151
  /** @typedef {ElementOf<typeof ROLE_IDS_ASSIGNABLE_TO_OTHERS>} RoleIdAssignableToOthers */
153
152
  declare const ROLE_IDS_ASSIGNABLE_TO_OTHERS: Set<"f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9">;
154
153
  /** @typedef {ElementOf<typeof ROLE_IDS_ASSIGNABLE_TO_ANYONE>} RoleIdAssignableToAnyone */
155
- declare const ROLE_IDS_ASSIGNABLE_TO_ANYONE: Set<"f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9" | "8ced989b1904606b" | "a24eaca65ab5d5d0">;
154
+ declare const ROLE_IDS_ASSIGNABLE_TO_ANYONE: Set<"f7c150f5a3a9a855" | "012fd2d431c0bf60" | "9e6d29263cba36c9" | "8ced989b1904606b">;
156
155
  import type { Namespace } from './types.js';
157
156
  export {};
158
157
  //# sourceMappingURL=roles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../src/roles.js"],"names":[],"mappings":"AAMA,8CAA8C;AAG9C,iDAAiD;AACjD,qDAAqD;AACrD,gDAAgD;AAChD,iDAAiD;AACjD,8CAA8C;AAC9C,gDAAgD;AAChD,4CAA4C;AAyB5C,6HAAmE;AAMnE,mIAA+E;AAc/E;;;;;;GAMG;AAEH;;;;;;;;GAQG;AAEH;;;;;;GAMG;AACH,2BAFU,IAAI,CAAC,OAAO,eAAe,CAAC,CAmBrC;AAyDD;;;;;;;;;GASG;AACH,sBAFU,IAAI,CAAC,OAAO,UAAU,CAAC,CAmBhC;AAED,yCAAyC;AACzC,oBADW,GAAG,CAAW,IAAN,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAE,CAiEpC;AAED;;;GAGG;AAEH;;GAEG;AACH;IAOE,yCAAwB;IAExB;;;;;;;;;;;;;;OAcG;IACH,6EAZG;QAMQ,QAAQ,EANR,OAAO,qBAAqB,EAAE,QAAQ,CAChD,OAAW,sBAAsB,EAAE,SAAS,CAAC,MAAM,CAAC,EACpD,cAAkB,qBAAqB,EAAE,SAAS,EAClD,MAAU,EACV,OAAW,iBAAiB,EAAE,IAAI,EAClC,OAAW,iBAAiB,EAAE,SAAS,CACpC;QACyD,aAAa,EAA/D,OAAO,qBAAqB,EAAE,aAAa;QACS,WAAW,EAA/D,OAAO,yBAAyB,EAAE,WAAW;QAChC,UAAU,EAAvB,MAAM;QACO,SAAS,EAAtB,MAAM;KAChB,EASA;IAED;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAuBzB;IAED;;;;;;;OAOG;IACH,UAFa,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAsCtC;IAED;;;;;;;;OAQG;IACH,qBAHW,MAAM,UACN,wBAAwB,iBAmElC;;CAQF;sBAnbY,CAAC,IADD,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;qBAItC,SAAS,CAAC,OAAO,QAAQ,CAAC;iCAc1B,SAAS,CAAC,OAAO,uBAAuB,CAAC;uCAMzC,SAAS,CAAC,OAAO,6BAA6B,CAAC;uCAM/C,SAAS,CAAC,OAAO,6BAA6B,CAAC;;;;;aAc/C,OAAO;;;;cACP,OAAO;;;;gBACP,OAAO;;;;iBACP,OAAO;;iBAIE,CAAC,SAAV,MAAO;YAEP,CAAC;UACD,MAAM;UACN,MAAM,CAAC,OAAO,iBAAiB,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC;oBACvE,wBAAwB,EAAE;UAC1B,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;;;;;;YAsLxC,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI;;6BA5Pd,oBAAoB;AAYjD;;;GAGG;AAEH,mDAAmD;AACnD,8KAUC;AAGD,8EAA8E;AAC9E,yGAEC;AAGD,0FAA0F;AAC1F,+GAEC;AAGD,0FAA0F;AAC1F,yJAQC;+BAnD8B,YAAY"}
1
+ {"version":3,"file":"roles.d.ts","sourceRoot":"","sources":["../src/roles.js"],"names":[],"mappings":"AAMA,8CAA8C;AAG9C,iDAAiD;AACjD,qDAAqD;AACrD,gDAAgD;AAChD,iDAAiD;AACjD,8CAA8C;AAC9C,4CAA4C;AAwB5C,6HAAmE;AAMnE,mIAA+E;AAa/E;;;;;;GAMG;AAEH;;;;;;;;GAQG;AAEH;;;;;;GAMG;AACH,2BAFU,IAAI,CAAC,OAAO,eAAe,CAAC,CAmBrC;AA6BD;;;;;;;;;GASG;AACH,sBAFU,IAAI,CAAC,OAAO,UAAU,CAAC,CAmBhC;AAED,yCAAyC;AACzC,oBADW,GAAG,CAAW,IAAN,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAE,CAgEpC;AAED;;;GAGG;AAEH;;GAEG;AACH;IAOE,yCAAwB;IAExB;;;;;;;;;;;;;;OAcG;IACH,6EAZG;QAMQ,QAAQ,EANR,OAAO,qBAAqB,EAAE,QAAQ,CAChD,OAAW,sBAAsB,EAAE,SAAS,CAAC,MAAM,CAAC,EACpD,cAAkB,qBAAqB,EAAE,SAAS,EAClD,MAAU,EACV,OAAW,iBAAiB,EAAE,IAAI,EAClC,OAAW,iBAAiB,EAAE,SAAS,CACpC;QACyD,aAAa,EAA/D,OAAO,qBAAqB,EAAE,aAAa;QACS,WAAW,EAA/D,OAAO,yBAAyB,EAAE,WAAW;QAChC,UAAU,EAAvB,MAAM;QACO,SAAS,EAAtB,MAAM;KAChB,EASA;IAED;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAuBzB;IAED;;;;;;;OAOG;IACH,UAFa,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAsCtC;IAED;;;;;;;;OAQG;IACH,qBAHW,MAAM,UACN,wBAAwB,iBA8DlC;;CAQF;sBA/YY,CAAC,IADD,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;qBAItC,SAAS,CAAC,OAAO,QAAQ,CAAC;iCAa1B,SAAS,CAAC,OAAO,uBAAuB,CAAC;uCAMzC,SAAS,CAAC,OAAO,6BAA6B,CAAC;uCAM/C,SAAS,CAAC,OAAO,6BAA6B,CAAC;;;;;aAa/C,OAAO;;;;cACP,OAAO;;;;gBACP,OAAO;;;;iBACP,OAAO;;iBAIE,CAAC,SAAV,MAAO;YAEP,CAAC;UACD,MAAM;UACN,MAAM,CAAC,OAAO,iBAAiB,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC;oBACvE,wBAAwB,EAAE;UAC1B,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;;;;;;YAyJxC,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI;;6BA5Nd,oBAAoB;AAWjD;;;GAGG;AAEH,mDAAmD;AACnD,yJASC;AAGD,8EAA8E;AAC9E,yGAEC;AAGD,0FAA0F;AAC1F,+GAEC;AAGD,0FAA0F;AAC1F,oIAOC;+BAhD8B,YAAY"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@comapeo/core",
3
- "version": "4.0.0",
3
+ "version": "4.1.1",
4
4
  "description": "Offline p2p mapping library",
5
5
  "main": "src/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -108,7 +108,7 @@
108
108
  "homepage": "https://github.com/digidem/comapeo-core#readme",
109
109
  "devDependencies": {
110
110
  "@bufbuild/buf": "^1.26.1",
111
- "@comapeo/cloud": "^0.1.0",
111
+ "@comapeo/cloud": "^0.2.1",
112
112
  "@comapeo/core2.0.1": "npm:@comapeo/core@2.0.1",
113
113
  "@comapeo/ipc": "^2.1.0",
114
114
  "@mapeo/default-config": "5.0.0",
package/src/constants.js CHANGED
@@ -35,3 +35,6 @@ export const SUPPORTED_CONFIG_VERSION = 1
35
35
 
36
36
  // WARNING: This value is persisted. Be careful when changing it.
37
37
  export const DRIZZLE_MIGRATIONS_TABLE = '__drizzle_migrations'
38
+
39
+ // Oldest possible time, ensure it gets overwritten with any updates
40
+ export const UNIX_EPOCH_DATE = new Date(0).toISOString()
@@ -40,6 +40,7 @@ export class LocalDiscovery extends TypedEmitter {
40
40
  /** @type {(e: Error) => void} */
41
41
  #handleSocketError
42
42
  #l
43
+ #port = 0
43
44
 
44
45
  /**
45
46
  * @param {Object} opts
@@ -76,9 +77,19 @@ export class LocalDiscovery extends TypedEmitter {
76
77
  /** @returns {Promise<void>} */
77
78
  async #start() {
78
79
  // Let OS choose port, listen on ip4, all interfaces
79
- this.#server.listen(0, '0.0.0.0')
80
- await once(this.#server, 'listening')
80
+ const onListening = once(this.#server, 'listening')
81
+
82
+ try {
83
+ this.#server.listen(this.#port, '0.0.0.0')
84
+ await onListening
85
+ } catch (e) {
86
+ if (this.#port === 0) throw e
87
+ // Account for errors from re-binding the port failing
88
+ this.#port = 0
89
+ return this.#start()
90
+ }
81
91
  const addr = getAddress(this.#server)
92
+ this.#port = addr.port
82
93
  this.#log('server listening on port ' + addr.port)
83
94
  }
84
95
 
@@ -276,15 +287,25 @@ export class LocalDiscovery extends TypedEmitter {
276
287
  const { port } = getAddress(this.#server)
277
288
  this.#server.close()
278
289
  const closePromise = once(this.#server, 'close')
279
- await pTimeout(closePromise, {
280
- milliseconds: force ? (timeout === 0 ? 1 : timeout) : Infinity,
281
- fallback: () => {
282
- for (const socket of this.#noiseConnections.values()) {
283
- socket.destroy()
284
- }
285
- return pTimeout(closePromise, { milliseconds: 500 })
286
- },
287
- })
290
+
291
+ const forceClose = () => {
292
+ for (const socket of this.#noiseConnections.values()) {
293
+ socket.destroy()
294
+ }
295
+ return pTimeout(closePromise, { milliseconds: 500 })
296
+ }
297
+
298
+ if (!force) {
299
+ await closePromise
300
+ } else if (timeout === 0) {
301
+ // If timeout is 0, we force-close immediately
302
+ await forceClose()
303
+ } else {
304
+ await pTimeout(closePromise, {
305
+ milliseconds: timeout,
306
+ fallback: forceClose,
307
+ })
308
+ }
288
309
  this.#log(`stopped for ${port}`)
289
310
  }
290
311
  }
package/src/errors.js CHANGED
@@ -37,14 +37,6 @@ export class ProjectDetailsSendFailError extends Error {
37
37
  }
38
38
  }
39
39
 
40
- export class InviteInitialSyncFailError extends Error {
41
- /** @param {string} [message] */
42
- constructor(message = 'Failed to sync config for invite') {
43
- super(message)
44
- this.name = 'InviteInitialSyncFailError'
45
- }
46
- }
47
-
48
40
  export class RPCDisconnectBeforeSendingError extends Error {
49
41
  /** @param {string} [message] */
50
42
  constructor(message = 'RPC disconnected before sending') {
@@ -281,35 +281,43 @@ export class InviteApi extends TypedEmitter {
281
281
  * @returns {Promise<string>}
282
282
  */
283
283
  async accept({ inviteId: inviteIdString }) {
284
- const inviteId = Buffer.from(inviteIdString, 'hex')
285
-
286
- const invite = this.#invites.get(inviteId)
287
- assert(!!invite, new NotFoundError(`Cannot find invite ${inviteIdString}`))
288
- assertCanSend(invite.actor, { type: 'ACCEPT_INVITE' })
284
+ try {
285
+ const inviteId = Buffer.from(inviteIdString, 'hex')
289
286
 
290
- this.#l.log('Accepting invite %h', inviteId)
291
- invite.actor.send({ type: 'ACCEPT_INVITE' })
292
-
293
- for (const { value, actor } of this.#invites.values()) {
294
- if (value.inviteId.equals(inviteId)) continue
295
- const inviteIsForSameProject = value.projectInviteId.equals(
296
- invite.value.projectInviteId
287
+ const invite = this.#invites.get(inviteId)
288
+ assert(
289
+ !!invite,
290
+ new NotFoundError(`Cannot find invite ${inviteIdString}`)
297
291
  )
298
- if (inviteIsForSameProject) {
299
- actor.send({ type: 'ALREADY_IN_PROJECT' })
292
+ assertCanSend(invite.actor, { type: 'ACCEPT_INVITE' })
293
+
294
+ this.#l.log('Accepting invite %h', inviteId)
295
+ invite.actor.send({ type: 'ACCEPT_INVITE' })
296
+
297
+ for (const { value, actor } of this.#invites.values()) {
298
+ if (value.inviteId.equals(inviteId)) continue
299
+ const inviteIsForSameProject = value.projectInviteId.equals(
300
+ invite.value.projectInviteId
301
+ )
302
+ if (inviteIsForSameProject) {
303
+ actor.send({ type: 'ALREADY_IN_PROJECT' })
304
+ }
300
305
  }
301
- }
302
306
 
303
- const { projectPublicId } = await toPromise(invite.actor)
307
+ const { projectPublicId } = await toPromise(invite.actor)
304
308
 
305
- if (!projectPublicId) {
306
- const { context, value } = invite.actor.getSnapshot()
307
- throw value === 'respondedAlready'
308
- ? new AlreadyJoinedError('Already joining or in project')
309
- : context.error || new Error('Unknown error')
310
- }
309
+ if (!projectPublicId) {
310
+ const { context, value } = invite.actor.getSnapshot()
311
+ throw value === 'respondedAlready'
312
+ ? new AlreadyJoinedError('Already joining or in project')
313
+ : context.error || new Error('Unknown error')
314
+ }
311
315
 
312
- return projectPublicId
316
+ return projectPublicId
317
+ } catch (err) {
318
+ this.#l.log('ERROR: Unable to accept invite', err)
319
+ throw err
320
+ }
313
321
  }
314
322
 
315
323
  /**
@@ -38,6 +38,7 @@ import {
38
38
  projectKeyToProjectInviteId,
39
39
  projectKeyToPublicId,
40
40
  } from './utils.js'
41
+ import { UNIX_EPOCH_DATE } from './constants.js'
41
42
  import { openedNoiseSecretStream } from './lib/noise-secret-stream-helpers.js'
42
43
  import { omit } from './lib/omit.js'
43
44
  import { RandomAccessFilePool } from './core-manager/random-access-file-pool.js'
@@ -563,11 +564,13 @@ export class MapeoManager extends TypedEmitter {
563
564
  (p) => p.projectId === projectId
564
565
  )
565
566
 
567
+ if (!existingProject) continue
568
+
566
569
  result.push(
567
570
  deNullify({
568
571
  projectId: projectPublicId,
569
- createdAt: existingProject?.createdAt,
570
- updatedAt: existingProject?.updatedAt,
572
+ createdAt: ignoreUnixDate(existingProject?.createdAt),
573
+ updatedAt: ignoreUnixDate(existingProject?.updatedAt),
571
574
  name: existingProject?.name || projectInfo.name,
572
575
  projectColor:
573
576
  existingProject?.projectColor || projectInfo.projectColor,
@@ -640,31 +643,29 @@ export class MapeoManager extends TypedEmitter {
640
643
 
641
644
  // Any errors from here we need to remove project from db because it has not
642
645
  // been fully added and synced
646
+ let project = null
643
647
  try {
644
- // 4. Write device info into project
645
- const project = await this.getProject(projectPublicId)
646
-
647
- try {
648
- const deviceInfo = this.getDeviceInfo()
649
- if (hasSavedDeviceInfo(deviceInfo)) {
650
- await project[kSetOwnDeviceInfo](deviceInfo)
651
- }
652
- } catch (e) {
653
- // Can ignore an error trying to write device info
654
- this.#l.log(
655
- 'ERROR: failed to write project %h deviceInfo %o',
656
- projectKey,
657
- e
658
- )
659
- }
660
-
661
- // 5. Wait for initial project sync
662
- if (waitForSync) {
663
- await this.#waitForInitialSync(project)
648
+ project = await this.getProject(projectPublicId)
649
+
650
+ /** @type {import('drizzle-orm').InferInsertModel<typeof projectSettingsTable>} */
651
+ const settingsDoc = {
652
+ schemaName: 'projectSettings',
653
+ docId: projectId,
654
+ versionId: 'unknown',
655
+ originalVersionId: 'unknown',
656
+ createdAt: UNIX_EPOCH_DATE,
657
+ updatedAt: UNIX_EPOCH_DATE,
658
+ deleted: false,
659
+ links: [],
660
+ forks: [],
661
+ name: projectName,
662
+ projectDescription,
664
663
  }
665
664
 
665
+ await this.#db.insert(projectSettingsTable).values([settingsDoc])
666
666
  this.#activeProjects.set(projectPublicId, project)
667
667
  } catch (e) {
668
+ // Only happens if getProject or the the DB insert fails
668
669
  this.#l.log('ERROR: could not add project', e)
669
670
  this.#db
670
671
  .delete(projectKeysTable)
@@ -672,6 +673,29 @@ export class MapeoManager extends TypedEmitter {
672
673
  .run()
673
674
  throw e
674
675
  }
676
+
677
+ try {
678
+ const deviceInfo = this.getDeviceInfo()
679
+ if (hasSavedDeviceInfo(deviceInfo)) {
680
+ await project[kSetOwnDeviceInfo](deviceInfo)
681
+ }
682
+ } catch (e) {
683
+ // Can ignore an error trying to write device info
684
+ this.#l.log(
685
+ 'ERROR: failed to write project %h deviceInfo %o',
686
+ projectKey,
687
+ e
688
+ )
689
+ }
690
+
691
+ // 5. Wait for initial project sync
692
+ if (waitForSync) {
693
+ try {
694
+ await this.#waitForInitialSync(project)
695
+ } catch (e) {
696
+ this.#l.log('ERROR: could not do initial project sync', e)
697
+ }
698
+ }
675
699
  this.#l.log('Added project %h, public ID: %S', projectKey, projectPublicId)
676
700
  return projectPublicId
677
701
  }
@@ -692,17 +716,15 @@ export class MapeoManager extends TypedEmitter {
692
716
  * @returns {Promise<boolean>}
693
717
  */
694
718
  async #waitForInitialSync(project, { timeoutMs = 5000 } = {}) {
695
- const [ownRole, projectSettings] = await Promise.all([
719
+ const [ownRole, isProjectSettingsSynced] = await Promise.all([
696
720
  project.$getOwnRole(),
697
- project.$getProjectSettings(),
721
+ project.$hasSyncedProjectSettings(),
698
722
  ])
699
723
  const {
700
724
  auth: { localState: authState },
701
725
  config: { localState: configState },
702
726
  } = project.$sync[kSyncState].getState()
703
727
  const isRoleSynced = ownRole !== Roles.NO_ROLE
704
- const isProjectSettingsSynced =
705
- projectSettings !== MapeoProject.EMPTY_PROJECT_SETTINGS
706
728
  // Assumes every project that someone is invited to has at least one record
707
729
  // in the auth store - the row record for the invited device
708
730
  const isAuthSynced = authState.want === 0 && authState.have > 0
@@ -721,7 +743,6 @@ export class MapeoManager extends TypedEmitter {
721
743
  this.#l.log(
722
744
  'Pending initial sync: role %s, projectSettings %o, auth %o, config %o',
723
745
  isRoleSynced,
724
- isProjectSettingsSynced,
725
746
  isAuthSynced,
726
747
  isConfigSynced
727
748
  )
@@ -1012,3 +1033,13 @@ function validateProjectKeys(projectKeys) {
1012
1033
  function hasSavedDeviceInfo(partialDeviceInfo) {
1013
1034
  return Boolean(partialDeviceInfo.name)
1014
1035
  }
1036
+
1037
+ /**
1038
+ * @param {string|undefined} date
1039
+ * @returns {string|null}
1040
+ */
1041
+ function ignoreUnixDate(date) {
1042
+ if (date === UNIX_EPOCH_DATE) return null
1043
+ if (date === undefined) return null
1044
+ return date
1045
+ }
@@ -10,7 +10,7 @@ import mime from 'mime/lite'
10
10
  // @ts-expect-error
11
11
  import { Readable, pipelinePromise } from 'streamx'
12
12
 
13
- import { NAMESPACES, NAMESPACE_SCHEMAS } from './constants.js'
13
+ import { NAMESPACES, NAMESPACE_SCHEMAS, UNIX_EPOCH_DATE } from './constants.js'
14
14
  import { CoreManager } from './core-manager/index.js'
15
15
  import { DataStore } from './datastore/index.js'
16
16
  import { DataType, kCreateWithDocId } from './datatype/index.js'
@@ -376,6 +376,7 @@ export class MapeoProject extends TypedEmitter {
376
376
  deviceInfo: this.#dataTypes.deviceInfo,
377
377
  project: this.#dataTypes.projectSettings,
378
378
  },
379
+ logger: this.#l,
379
380
  })
380
381
 
381
382
  this.#blobStore = new BlobStore({
@@ -661,6 +662,21 @@ export class MapeoProject extends TypedEmitter {
661
662
  }
662
663
  }
663
664
 
665
+ /**
666
+ * @returns {Promise<boolean>}
667
+ */
668
+ async $hasSyncedProjectSettings() {
669
+ try {
670
+ const settings = await this.#dataTypes.projectSettings.getByDocId(
671
+ this.#projectId
672
+ )
673
+
674
+ return settings.createdAt !== UNIX_EPOCH_DATE
675
+ } catch (e) {
676
+ return false
677
+ }
678
+ }
679
+
664
680
  /**
665
681
  * @returns {Promise<undefined | string>}
666
682
  */
@@ -973,15 +989,10 @@ export class MapeoProject extends TypedEmitter {
973
989
  async #exportPrefix(type = '') {
974
990
  const name = await this.#getProjectName()
975
991
  const date = new Date()
976
- const dateSection = date
977
- .toLocaleDateString('nu', {
978
- year: 'numeric',
979
- month: 'numeric',
980
- day: 'numeric',
981
- })
982
- .replaceAll('/', '_')
983
- .replaceAll('-', '_')
984
- return `CoMapeo_${name}_${type}_${dateSection}`
992
+ const yyyy = date.getFullYear()
993
+ const mm = `${date.getMonth() + 1}`.padStart(2, '0')
994
+ const dd = `${date.getDate()}`.padStart(2, '0')
995
+ return `CoMapeo_${name}_${type}_${yyyy}_${mm}_${dd}`
985
996
  }
986
997
 
987
998
  /**
@@ -1129,10 +1140,8 @@ export class MapeoProject extends TypedEmitter {
1129
1140
  const stream = this.#blobStore.createReadStream(blobId)
1130
1141
  const name = path.posix.join(
1131
1142
  mediaFolder,
1132
- blobId.variant,
1133
- `${attachment.name}${extensionString}`
1143
+ `${attachment.name}_${blobId.variant}${extensionString}`
1134
1144
  )
1135
-
1136
1145
  // @ts-expect-error
1137
1146
  await archive.entry(stream, { name })
1138
1147
  }
package/src/member-api.js CHANGED
@@ -12,20 +12,16 @@ import {
12
12
  projectKeyToProjectInviteId,
13
13
  projectKeyToPublicId,
14
14
  } from './utils.js'
15
+ import { Logger } from './logger.js'
15
16
  import { keyBy } from './lib/key-by.js'
16
17
  import { abortSignalAny } from './lib/ponyfills.js'
17
18
  import timingSafeEqual from 'string-timing-safe-equal'
18
19
  import { isHostnameIpAddress } from './lib/is-hostname-ip-address.js'
19
20
  import { ErrorWithCode, getErrorMessage } from './lib/error.js'
20
- import {
21
- InviteAbortedError,
22
- InviteInitialSyncFailError,
23
- ProjectDetailsSendFailError,
24
- } from './errors.js'
21
+ import { InviteAbortedError, ProjectDetailsSendFailError } from './errors.js'
25
22
  import { wsCoreReplicator } from './lib/ws-core-replicator.js'
26
23
  import {
27
24
  BLOCKED_ROLE_ID,
28
- FAILED_ROLE_ID,
29
25
  MEMBER_ROLE_ID,
30
26
  ROLES,
31
27
  isRoleIdForNewInvite,
@@ -71,6 +67,7 @@ export class MemberApi extends TypedEmitter {
71
67
  #getReplicationStream
72
68
  #waitForInitialSyncWithPeer
73
69
  #dataTypes
70
+ #l
74
71
 
75
72
  /** @type {Map<string, { abortController: AbortController }>} */
76
73
  #outboundInvitesByDevice = new Map()
@@ -90,6 +87,7 @@ export class MemberApi extends TypedEmitter {
90
87
  * @param {Object} opts.dataTypes
91
88
  * @param {Pick<DeviceInfoDataType, 'getByDocId' | 'getMany'>} opts.dataTypes.deviceInfo
92
89
  * @param {Pick<ProjectDataType, 'getByDocId'>} opts.dataTypes.project
90
+ * @param {Logger} [opts.logger]
93
91
  */
94
92
  constructor({
95
93
  deviceId,
@@ -103,8 +101,10 @@ export class MemberApi extends TypedEmitter {
103
101
  getReplicationStream,
104
102
  waitForInitialSyncWithPeer,
105
103
  dataTypes,
104
+ logger,
106
105
  }) {
107
106
  super()
107
+ this.#l = Logger.create('member-api', logger)
108
108
  this.#ownDeviceId = deviceId
109
109
  this.#roles = roles
110
110
  this.#coreOwnership = coreOwnership
@@ -128,6 +128,7 @@ export class MemberApi extends TypedEmitter {
128
128
  * @param {string} [opts.roleName]
129
129
  * @param {string} [opts.roleDescription]
130
130
  * @param {Buffer} [opts.__testOnlyInviteId] Hard-code the invite ID. Only for tests.
131
+ * @param {number} [opts.initialSyncTimeoutMs=5000]
131
132
  * @returns {Promise<(
132
133
  * typeof InviteResponse_Decision.ACCEPT |
133
134
  * typeof InviteResponse_Decision.REJECT |
@@ -141,6 +142,7 @@ export class MemberApi extends TypedEmitter {
141
142
  roleName = ROLES[roleId]?.name,
142
143
  roleDescription,
143
144
  __testOnlyInviteId,
145
+ initialSyncTimeoutMs = 5000,
144
146
  }
145
147
  ) {
146
148
  assert(isRoleIdForNewInvite(roleId), 'Invalid role ID for new invite')
@@ -205,10 +207,6 @@ export class MemberApi extends TypedEmitter {
205
207
  case InviteResponse_Decision.DECISION_UNSPECIFIED:
206
208
  return InviteResponse_Decision.REJECT
207
209
  case InviteResponse_Decision.ACCEPT:
208
- // Technically we can assign after sending project details
209
- // This lets us test role removal
210
- await this.#roles.assignRole(deviceId, roleId)
211
-
212
210
  try {
213
211
  await this.#rpc.sendProjectJoinDetails(deviceId, {
214
212
  inviteId,
@@ -216,27 +214,31 @@ export class MemberApi extends TypedEmitter {
216
214
  encryptionKeys: this.#encryptionKeys,
217
215
  })
218
216
  } catch {
219
- try {
220
- // Mark them as "failed" so we can retry the flow
221
- await this.#roles.assignRole(deviceId, FAILED_ROLE_ID)
222
- } catch (e) {
223
- console.error(e)
224
- }
225
217
  throw new ProjectDetailsSendFailError()
226
218
  }
219
+ await this.#roles.assignRole(deviceId, roleId)
227
220
 
228
221
  try {
229
- await this.#waitForInitialSyncWithPeer(deviceId, abortSignal)
230
- } catch {
231
- // Mark them as "failed" so we can retry the flow
232
- await this.#roles.assignRole(deviceId, FAILED_ROLE_ID)
233
- throw new InviteInitialSyncFailError()
222
+ let abortSync = new AbortController().signal
223
+ if (initialSyncTimeoutMs) {
224
+ abortSync = AbortSignal.timeout(initialSyncTimeoutMs)
225
+ }
226
+
227
+ await this.#waitForInitialSyncWithPeer(deviceId, abortSync)
228
+ } catch (e) {
229
+ this.#l.log('ERROR: Could not initial sync with peer', e)
234
230
  }
235
231
 
236
232
  return inviteResponse.decision
237
233
  default:
238
234
  throw new ExhaustivenessError(inviteResponse.decision)
239
235
  }
236
+ } catch (err) {
237
+ if (err instanceof Error && err.name === 'RPCDisconnectBeforeAckError') {
238
+ this.#l.log('ERROR: Disconnect before ack', err)
239
+ throw new InviteAbortedError()
240
+ }
241
+ throw err
240
242
  } finally {
241
243
  this.#outboundInvitesByDevice.delete(deviceId)
242
244
  }
@@ -282,8 +284,10 @@ export class MemberApi extends TypedEmitter {
282
284
  return await responsePromise
283
285
  } catch (err) {
284
286
  if (err instanceof Error && err.name === 'AbortError') {
287
+ this.#l.log('ERROR: Timed out sending invite', err)
285
288
  throw new InviteAbortedError()
286
289
  } else {
290
+ this.#l.log('ERROR: Unexpected error during invite send', err)
287
291
  throw err
288
292
  }
289
293
  } finally {
@@ -472,6 +476,7 @@ export class MemberApi extends TypedEmitter {
472
476
  )
473
477
  }
474
478
 
479
+ const onClosePromise = pEvent(websocket, 'close')
475
480
  const onErrorPromise = pEvent(websocket, 'error')
476
481
 
477
482
  const replicationStream = this.#getReplicationStream()
@@ -494,7 +499,6 @@ export class MemberApi extends TypedEmitter {
494
499
  websocket.close()
495
500
  throw errorEvent.error
496
501
  } else {
497
- const onClosePromise = pEvent(websocket, 'close')
498
502
  onErrorPromise.cancel()
499
503
  websocket.close()
500
504
  await onClosePromise
package/src/roles.js CHANGED
@@ -12,7 +12,6 @@ export const COORDINATOR_ROLE_ID = 'f7c150f5a3a9a855'
12
12
  export const MEMBER_ROLE_ID = '012fd2d431c0bf60'
13
13
  export const BLOCKED_ROLE_ID = '9e6d29263cba36c9'
14
14
  export const LEFT_ROLE_ID = '8ced989b1904606b'
15
- export const FAILED_ROLE_ID = 'a24eaca65ab5d5d0'
16
15
  export const NO_ROLE_ID = '08e4251e36f6e7ed'
17
16
 
18
17
  /**
@@ -28,7 +27,6 @@ const ROLE_IDS = new Set(
28
27
  MEMBER_ROLE_ID,
29
28
  BLOCKED_ROLE_ID,
30
29
  LEFT_ROLE_ID,
31
- FAILED_ROLE_ID,
32
30
  NO_ROLE_ID,
33
31
  ])
34
32
  )
@@ -53,7 +51,6 @@ const ROLE_IDS_ASSIGNABLE_TO_ANYONE = new Set(
53
51
  MEMBER_ROLE_ID,
54
52
  BLOCKED_ROLE_ID,
55
53
  LEFT_ROLE_ID,
56
- FAILED_ROLE_ID,
57
54
  ])
58
55
  )
59
56
  const isRoleIdAssignableToAnyone = setHas(ROLE_IDS_ASSIGNABLE_TO_ANYONE)
@@ -129,34 +126,6 @@ const BLOCKED_ROLE = {
129
126
  },
130
127
  }
131
128
 
132
- /**
133
- * This role is used for devices that failed to sync after accepting an invite and being added
134
- * @type {Role<typeof FAILED_ROLE_ID>}
135
- */
136
- const FAILED_ROLE = {
137
- roleId: FAILED_ROLE_ID,
138
- name: 'Failed',
139
- docs: mapObject(currentSchemaVersions, (key) => {
140
- return [
141
- key,
142
- {
143
- readOwn: false,
144
- writeOwn: false,
145
- readOthers: false,
146
- writeOthers: false,
147
- },
148
- ]
149
- }),
150
- roleAssignment: [],
151
- sync: {
152
- auth: 'blocked',
153
- config: 'blocked',
154
- data: 'blocked',
155
- blobIndex: 'blocked',
156
- blob: 'blocked',
157
- },
158
- }
159
-
160
129
  /**
161
130
  * This is the role assumed for a device when no role record can be found. This
162
131
  * can happen when an invited device did not manage to sync with the device that
@@ -250,7 +219,6 @@ export const ROLES = {
250
219
  },
251
220
  },
252
221
  [NO_ROLE_ID]: NO_ROLE,
253
- [FAILED_ROLE_ID]: FAILED_ROLE,
254
222
  }
255
223
 
256
224
  /**
@@ -412,11 +380,6 @@ export class Roles extends TypedEmitter {
412
380
  if (deviceId !== this.#ownDeviceId) {
413
381
  throw new Error('Cannot assign LEFT role to another device')
414
382
  }
415
- } else if (roleId === FAILED_ROLE_ID) {
416
- const ownRole = await this.getRole(this.#ownDeviceId)
417
- if (!ownRole.roleAssignment.includes(COORDINATOR_ROLE_ID)) {
418
- throw new Error('Lacks permission to assign role ' + roleId)
419
- }
420
383
  } else {
421
384
  const ownRole = await this.getRole(this.#ownDeviceId)
422
385
  if (!ownRole.roleAssignment.includes(roleId)) {