cojson 0.1.7 → 0.1.9

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.
Files changed (75) hide show
  1. package/dist/account.d.ts +4 -2
  2. package/dist/account.js +4 -2
  3. package/dist/account.js.map +1 -1
  4. package/dist/coValue.d.ts +44 -81
  5. package/dist/coValue.js +4 -348
  6. package/dist/coValue.js.map +1 -1
  7. package/dist/coValueCore.d.ts +84 -0
  8. package/dist/coValueCore.js +351 -0
  9. package/dist/coValueCore.js.map +1 -0
  10. package/dist/coValues/coList.d.ts +113 -0
  11. package/dist/{contentTypes → coValues}/coList.js +59 -19
  12. package/dist/coValues/coList.js.map +1 -0
  13. package/dist/{contentTypes → coValues}/coMap.d.ts +25 -7
  14. package/dist/{contentTypes → coValues}/coMap.js +34 -15
  15. package/dist/coValues/coMap.js.map +1 -0
  16. package/dist/coValues/coStream.d.ts +14 -0
  17. package/dist/coValues/coStream.js +22 -0
  18. package/dist/coValues/coStream.js.map +1 -0
  19. package/dist/coValues/static.d.ts +14 -0
  20. package/dist/coValues/static.js +20 -0
  21. package/dist/coValues/static.js.map +1 -0
  22. package/dist/group.d.ts +54 -9
  23. package/dist/group.js +68 -28
  24. package/dist/group.js.map +1 -1
  25. package/dist/index.d.ts +17 -9
  26. package/dist/index.js +6 -4
  27. package/dist/index.js.map +1 -1
  28. package/dist/node.d.ts +59 -5
  29. package/dist/node.js +36 -15
  30. package/dist/node.js.map +1 -1
  31. package/dist/permissions.d.ts +2 -2
  32. package/dist/permissions.js +1 -1
  33. package/dist/permissions.js.map +1 -1
  34. package/dist/sync.d.ts +3 -3
  35. package/dist/sync.js +2 -2
  36. package/dist/sync.js.map +1 -1
  37. package/dist/testUtils.d.ts +2 -2
  38. package/dist/testUtils.js +1 -1
  39. package/dist/testUtils.js.map +1 -1
  40. package/package.json +2 -2
  41. package/src/account.test.ts +1 -1
  42. package/src/account.ts +6 -4
  43. package/src/coValue.test.ts +233 -130
  44. package/src/coValue.ts +50 -576
  45. package/src/coValueCore.test.ts +181 -0
  46. package/src/coValueCore.ts +588 -0
  47. package/src/{contentTypes → coValues}/coList.ts +89 -40
  48. package/src/{contentTypes → coValues}/coMap.ts +40 -20
  49. package/src/coValues/coStream.ts +33 -0
  50. package/src/coValues/static.ts +31 -0
  51. package/src/group.ts +87 -50
  52. package/src/index.ts +31 -27
  53. package/src/node.ts +47 -26
  54. package/src/permissions.test.ts +32 -32
  55. package/src/permissions.ts +5 -5
  56. package/src/sync.test.ts +77 -77
  57. package/src/sync.ts +5 -5
  58. package/src/testUtils.ts +1 -1
  59. package/tsconfig.json +1 -2
  60. package/dist/contentType.d.ts +0 -15
  61. package/dist/contentType.js +0 -7
  62. package/dist/contentType.js.map +0 -1
  63. package/dist/contentTypes/coList.d.ts +0 -77
  64. package/dist/contentTypes/coList.js.map +0 -1
  65. package/dist/contentTypes/coMap.js.map +0 -1
  66. package/dist/contentTypes/coStream.d.ts +0 -11
  67. package/dist/contentTypes/coStream.js +0 -16
  68. package/dist/contentTypes/coStream.js.map +0 -1
  69. package/dist/contentTypes/static.d.ts +0 -11
  70. package/dist/contentTypes/static.js +0 -14
  71. package/dist/contentTypes/static.js.map +0 -1
  72. package/src/contentType.test.ts +0 -284
  73. package/src/contentType.ts +0 -26
  74. package/src/contentTypes/coStream.ts +0 -24
  75. package/src/contentTypes/static.ts +0 -22
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coList.js","sourceRoot":"","sources":["../../src/coValues/coList.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAG/E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAoC5C,MAAM,OAAO,MAAM;IA2Bf,gBAAgB;IAChB,YAAY,IAAiB;QAxB7B,SAAI,GAAG,QAAiB,CAAC;QAyBrB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAA2B,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAE/B,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAY,CAAC;IACzC,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,gBAAgB;IACN,kBAAkB;QACxB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,KAAK,MAAM,EACP,IAAI,EACJ,OAAO,EACP,MAAM,GACT,IAAI,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE;YACzC,KAAK,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE;gBACxD,MAAM,MAAM,GAAG,aAAiC,CAAC;gBAEjD,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE;oBAC5C,IAAI,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACnD,IAAI,CAAC,YAAY,EAAE;wBACf,YAAY,GAAG,EAAE,CAAC;wBAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC;qBAClD;oBACD,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACzC,IAAI,CAAC,OAAO,EAAE;wBACV,OAAO,GAAG,EAAE,CAAC;wBACb,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;qBACxC;oBACD,OAAO,CAAC,SAAS,CAAC,GAAG;wBACjB,MAAM;wBACN,YAAY,EAAE,EAAE;wBAChB,UAAU,EAAE,EAAE;wBACd,GAAG,MAAM;qBACZ,CAAC;oBACF,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE;wBACrB,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE;4BACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gCAChB,GAAG,IAAI;gCACP,SAAS;6BACZ,CAAC,CAAC;yBACN;6BAAM;4BACH,MAAM,WAAW,GACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CACtC,MAAM,CAAC,MAAM,CAAC,OAAO,CACxB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;4BACjC,IAAI,CAAC,WAAW,EAAE;gCACd,MAAM,IAAI,KAAK,CACX,mDAAmD;oCAC/C,MAAM,CAAC,MAAM,CACpB,CAAC;6BACL;4BACD,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;gCAClC,GAAG,IAAI;gCACP,SAAS;6BACZ,CAAC,CAAC;yBACN;qBACJ;yBAAM;wBACH,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE;4BAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gCACjB,GAAG,IAAI;gCACP,SAAS;6BACZ,CAAC,CAAC;yBACN;6BAAM;4BACH,MAAM,UAAU,GACZ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CACrC,MAAM,CAAC,KAAK,CAAC,OAAO,CACvB,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;4BAChC,IAAI,CAAC,UAAU,EAAE;gCACb,MAAM,IAAI,KAAK,CACX,kDAAkD;oCAC9C,MAAM,CAAC,KAAK,CACnB,CAAC;6BACL;4BACD,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;gCACvB,GAAG,IAAI;gCACP,SAAS;6BACZ,CAAC,CAAC;yBACN;qBACJ;iBACJ;qBAAM,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE;oBAC5B,IAAI,YAAY,GACZ,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBAC1D,IAAI,CAAC,YAAY,EAAE;wBACf,YAAY,GAAG,EAAE,CAAC;wBAClB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;4BACjD,YAAY,CAAC;qBACpB;oBACD,IAAI,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;oBACrD,IAAI,CAAC,OAAO,EAAE;wBACV,OAAO,GAAG,EAAE,CAAC;wBACb,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;qBACpD;oBACD,IAAI,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBACtD,IAAI,CAAC,WAAW,EAAE;wBACd,WAAW,GAAG,EAAE,CAAC;wBACjB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;qBACrD;oBACD,WAAW,CAAC,IAAI,CAAC;wBACb,MAAM;wBACN,UAAU,EAAE;4BACR,GAAG,IAAI;4BACP,SAAS;yBACZ;wBACD,GAAG,MAAM;qBACZ,CAAC,CAAC;iBACN;qBAAM;oBACH,MAAM,IAAI,KAAK,CACX,yBAAyB;wBACpB,MAA0B,CAAC,EAAE,CACrC,CAAC;iBACL;aACJ;SACJ;IACL,CAAC;IAED,uCAAuC;IACvC,GAAG,CAAC,GAAW;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,SAAS,CAAC;SACpB;QACD,OAAO,KAAK,CAAC,KAAK,CAAC;IACvB,CAAC;IAED,2DAA2D;IAC3D,OAAO;QACH,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,OAAO;QACH,MAAM,GAAG,GAA+C,EAAE,CAAC;QAC3D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;YAChC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACrC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;YAC/B,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACrC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,gBAAgB;IACR,iBAAiB,CACrB,IAAU,EACV,GAA+C;QAE/C,MAAM,KAAK,GACP,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,KAAK,EAAE;YACR,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;SACzC;QACD,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,YAAY,EAAE;YAC1C,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;SAC5C;QACD,MAAM,OAAO,GACT,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CACxD,IAAI,CAAC,SAAS,CACjB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,EAAE;YACV,GAAG,CAAC,IAAI,CAAC;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI;aACP,CAAC,CAAC;SACN;QACD,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE;YACtC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;SAC1C;IACL,CAAC;IAED,mFAAmF;IACnF,WAAW,CAAC,GAAW;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,SAAS,CAAC;SACpB;QACD,MAAM,SAAS,GAAG,6BAA6B,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE;YACxB,OAAO,SAAS,CAAC;SACpB;aAAM;YACH,OAAO,SAAS,CAAC;SACpB;IACL,CAAC;IAED,gFAAgF;IAChF,MAAM;QACF,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED,GAAG,CAAI,MAAoC;QACvC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACxE,CAAC;IAGD,MAAM,CAAC,SAA6C;QAChD,OAAO,IAAI,CAAC,OAAO,EAAE;aAChB,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;aACnD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CACF,OAAqD,EACrD,YAAe;QAEf,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CACxB,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EACnE,YAAY,CACf,CAAC;IACN,CAAC;IAED,SAAS,CAAC,QAA0C;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACnC,QAAQ,CAAC,OAA0B,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,CACA,OAAqD;QAErD,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClB,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;CACJ;AAED,MAAM,OAAO,eAIT,SAAQ,MAAe;IAGvB,gBAAgB;IAChB,IAAI,CACA,QAAsD;QAEtD,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED;;;;kKAI8J;IAC9J,MAAM,CACF,KAAa,EACb,KAAQ,EACR,UAAkC,SAAS;QAE3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,UAAU,CAAC;QACf,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,WAAW,EAAE;gBACd,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC;aAC7C;YACD,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC;SACjC;aAAM;YACH,IAAI,KAAK,KAAK,CAAC,EAAE;gBACb,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC;aAC7C;YACD,UAAU,GAAG,OAAO,CAAC;SACxB;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,CACrB;YACI;gBACI,EAAE,EAAE,KAAK;gBACT,KAAK;gBACL,KAAK,EAAE,UAAU;aACpB;SACJ,EACD,OAAO,CACV,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED;;;;kKAI8J;IAC9J,IAAI,CAAC,KAAQ,EAAE,UAAkC,SAAS;QACtD,iBAAiB;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CACP,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3C,KAAK,EACL,OAAO,CACV,CAAC;IACN,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CACH,MAAc,EACd,KAAQ,EACR,UAAkC,SAAS;QAE3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,SAAS,CAAC;QACd,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,UAAU,EAAE;gBACZ,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC;aAC/B;iBAAM;gBACH,IAAI,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;oBAC3B,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,CAAC;iBAC9C;gBACD,SAAS,GAAG,KAAK,CAAC;aACrB;SACJ;aAAM;YACH,IAAI,MAAM,KAAK,CAAC,EAAE;gBACd,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,CAAC;aAC9C;YACD,SAAS,GAAG,KAAK,CAAC;SACrB;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,CACrB;YACI;gBACI,EAAE,EAAE,KAAK;gBACT,KAAK;gBACL,MAAM,EAAE,SAAS;aACpB;SACJ,EACD,OAAO,CACV,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED;;;;+KAI2K;IAC3K,MAAM,CAAC,EAAU,EAAE,UAAkC,SAAS;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE;YACR,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;SAC1C;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,CACrB;YACI;gBACI,EAAE,EAAE,KAAK;gBACT,SAAS,EAAE,KAAK,CAAC,IAAI;aACxB;SACJ,EACD,OAAO,CACV,CAAC;QAEF,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;CACJ"}
@@ -1,7 +1,7 @@
1
1
  import { JsonObject, JsonValue } from '../jsonValue.js';
2
2
  import { TransactionID } from '../ids.js';
3
- import { CoID } from '../contentType.js';
4
- import { CoValue } from '../coValue.js';
3
+ import { CoID, ReadableCoValue, WriteableCoValue } from '../coValue.js';
4
+ import { CoValueCore } from '../coValueCore.js';
5
5
  import { AccountID } from '../account.js';
6
6
  import { Group } from '../group.js';
7
7
  type MapOp<K extends string, V extends JsonValue> = {
@@ -28,22 +28,28 @@ export type MapM<M extends {
28
28
  }> = {
29
29
  [KK in MapK<M>]: M[KK];
30
30
  };
31
+ /** A collaborative map with precise shape `M` and optional static metadata `Meta` */
31
32
  export declare class CoMap<M extends {
32
33
  [key: string]: JsonValue;
33
- }, Meta extends JsonObject | null = null> {
34
+ }, Meta extends JsonObject | null = null> implements ReadableCoValue {
34
35
  id: CoID<CoMap<MapM<M>, Meta>>;
35
- coValue: CoValue;
36
36
  type: "comap";
37
+ core: CoValueCore;
38
+ /** @internal */
37
39
  ops: {
38
40
  [KK in MapK<M>]?: MapOp<KK, M[KK]>[];
39
41
  };
40
- constructor(coValue: CoValue);
42
+ /** @internal */
43
+ constructor(core: CoValueCore);
41
44
  get meta(): Meta;
42
45
  get group(): Group;
46
+ /** @internal */
43
47
  protected fillOpsFromCoValue(): void;
44
48
  keys(): MapK<M>[];
49
+ /** Returns the current value for the given key. */
45
50
  get<K extends MapK<M>>(key: K): M[K] | undefined;
46
51
  getAtTime<K extends MapK<M>>(key: K, time: number): M[K] | undefined;
52
+ /** Returns the accountID of the last account to modify the value for the given key. */
47
53
  whoEdited<K extends MapK<M>>(key: K): AccountID | undefined;
48
54
  getLastTxID<K extends MapK<M>>(key: K): TransactionID | undefined;
49
55
  getLastEntry<K extends MapK<M>>(key: K): {
@@ -57,13 +63,25 @@ export declare class CoMap<M extends {
57
63
  value: M[K] | undefined;
58
64
  }[];
59
65
  toJSON(): JsonObject;
60
- edit(changer: (editable: WriteableCoMap<M, Meta>) => void): CoMap<M, Meta>;
61
66
  subscribe(listener: (coMap: CoMap<M, Meta>) => void): () => void;
67
+ edit(changer: (editable: WriteableCoMap<M, Meta>) => void): CoMap<M, Meta>;
62
68
  }
63
69
  export declare class WriteableCoMap<M extends {
64
70
  [key: string]: JsonValue;
65
- }, Meta extends JsonObject | null = null> extends CoMap<M, Meta> {
71
+ }, Meta extends JsonObject | null = null> extends CoMap<M, Meta> implements WriteableCoValue {
72
+ /** @internal */
73
+ edit(_changer: (editable: WriteableCoMap<M, Meta>) => void): CoMap<M, Meta>;
74
+ /** Sets a new value for the given key.
75
+ *
76
+ * If `privacy` is `"private"` **(default)**, both `key` and `value` are encrypted in the transaction, only readable by other members of the group this `CoMap` belongs to. Not even sync servers can see the content in plaintext.
77
+ *
78
+ * If `privacy` is `"trusting"`, both `key` and `value` are stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers. */
66
79
  set<K extends MapK<M>>(key: K, value: M[K], privacy?: "private" | "trusting"): void;
80
+ /** Deletes the value for the given key (setting it to undefined).
81
+ *
82
+ * If `privacy` is `"private"` **(default)**, `key` is encrypted in the transaction, only readable by other members of the group this `CoMap` belongs to. Not even sync servers can see the content in plaintext.
83
+ *
84
+ * If `privacy` is `"trusting"`, `key` is stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers. */
67
85
  delete(key: MapK<M>, privacy?: "private" | "trusting"): void;
68
86
  }
69
87
  export {};
@@ -1,22 +1,25 @@
1
- import { accountOrAgentIDfromSessionID } from '../coValue.js';
1
+ import { accountOrAgentIDfromSessionID } from '../coValueCore.js';
2
2
  import { isAccountID } from '../account.js';
3
+ /** A collaborative map with precise shape `M` and optional static metadata `Meta` */
3
4
  export class CoMap {
4
- constructor(coValue) {
5
+ /** @internal */
6
+ constructor(core) {
5
7
  this.type = "comap";
6
- this.id = coValue.id;
7
- this.coValue = coValue;
8
+ this.id = core.id;
9
+ this.core = core;
8
10
  this.ops = {};
9
11
  this.fillOpsFromCoValue();
10
12
  }
11
13
  get meta() {
12
- return this.coValue.header.meta;
14
+ return this.core.header.meta;
13
15
  }
14
16
  get group() {
15
- return this.coValue.getGroup();
17
+ return this.core.getGroup();
16
18
  }
19
+ /** @internal */
17
20
  fillOpsFromCoValue() {
18
21
  this.ops = {};
19
- for (const { txID, changes, madeAt } of this.coValue.getValidSortedTransactions()) {
22
+ for (const { txID, changes, madeAt } of this.core.getValidSortedTransactions()) {
20
23
  for (const [changeIdx, changeUntyped] of (changes).entries()) {
21
24
  const change = changeUntyped;
22
25
  let entries = this.ops[change.key];
@@ -36,6 +39,7 @@ export class CoMap {
36
39
  keys() {
37
40
  return Object.keys(this.ops);
38
41
  }
42
+ /** Returns the current value for the given key. */
39
43
  get(key) {
40
44
  const ops = this.ops[key];
41
45
  if (!ops) {
@@ -65,6 +69,7 @@ export class CoMap {
65
69
  return lastOpBeforeOrAtTime.value;
66
70
  }
67
71
  }
72
+ /** Returns the accountID of the last account to modify the value for the given key. */
68
73
  whoEdited(key) {
69
74
  const tx = this.getLastTxID(key);
70
75
  if (!tx) {
@@ -125,20 +130,29 @@ export class CoMap {
125
130
  }
126
131
  return json;
127
132
  }
128
- edit(changer) {
129
- const editable = new WriteableCoMap(this.coValue);
130
- changer(editable);
131
- return new CoMap(this.coValue);
132
- }
133
133
  subscribe(listener) {
134
- return this.coValue.subscribe((content) => {
134
+ return this.core.subscribe((content) => {
135
135
  listener(content);
136
136
  });
137
137
  }
138
+ edit(changer) {
139
+ const editable = new WriteableCoMap(this.core);
140
+ changer(editable);
141
+ return new CoMap(this.core);
142
+ }
138
143
  }
139
144
  export class WriteableCoMap extends CoMap {
145
+ /** @internal */
146
+ edit(_changer) {
147
+ throw new Error("Already editing.");
148
+ }
149
+ /** Sets a new value for the given key.
150
+ *
151
+ * If `privacy` is `"private"` **(default)**, both `key` and `value` are encrypted in the transaction, only readable by other members of the group this `CoMap` belongs to. Not even sync servers can see the content in plaintext.
152
+ *
153
+ * If `privacy` is `"trusting"`, both `key` and `value` are stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers. */
140
154
  set(key, value, privacy = "private") {
141
- this.coValue.makeTransaction([
155
+ this.core.makeTransaction([
142
156
  {
143
157
  op: "set",
144
158
  key,
@@ -147,8 +161,13 @@ export class WriteableCoMap extends CoMap {
147
161
  ], privacy);
148
162
  this.fillOpsFromCoValue();
149
163
  }
164
+ /** Deletes the value for the given key (setting it to undefined).
165
+ *
166
+ * If `privacy` is `"private"` **(default)**, `key` is encrypted in the transaction, only readable by other members of the group this `CoMap` belongs to. Not even sync servers can see the content in plaintext.
167
+ *
168
+ * If `privacy` is `"trusting"`, `key` is stored in plaintext in the transaction, visible to everyone who gets a hold of it, including sync servers. */
150
169
  delete(key, privacy = "private") {
151
- this.coValue.makeTransaction([
170
+ this.core.makeTransaction([
152
171
  {
153
172
  op: "del",
154
173
  key,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coMap.js","sourceRoot":"","sources":["../../src/coValues/coMap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { JsonObject, JsonValue } from '../jsonValue.js';
2
+ import { CoID, ReadableCoValue } from '../coValue.js';
3
+ import { CoValueCore } from '../coValueCore.js';
4
+ import { Group } from '../index.js';
5
+ export declare class CoStream<T extends JsonValue, Meta extends JsonObject | null = null> implements ReadableCoValue {
6
+ id: CoID<CoStream<T, Meta>>;
7
+ type: "costream";
8
+ core: CoValueCore;
9
+ constructor(core: CoValueCore);
10
+ get meta(): Meta;
11
+ get group(): Group;
12
+ toJSON(): JsonObject;
13
+ subscribe(listener: (coMap: CoStream<T, Meta>) => void): () => void;
14
+ }
@@ -0,0 +1,22 @@
1
+ export class CoStream {
2
+ constructor(core) {
3
+ this.type = "costream";
4
+ this.id = core.id;
5
+ this.core = core;
6
+ }
7
+ get meta() {
8
+ return this.core.header.meta;
9
+ }
10
+ get group() {
11
+ return this.core.getGroup();
12
+ }
13
+ toJSON() {
14
+ throw new Error("Method not implemented.");
15
+ }
16
+ subscribe(listener) {
17
+ return this.core.subscribe((content) => {
18
+ listener(content);
19
+ });
20
+ }
21
+ }
22
+ //# sourceMappingURL=coStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coStream.js","sourceRoot":"","sources":["../../src/coValues/coStream.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,QAAQ;IAKjB,YAAY,IAAiB;QAH7B,SAAI,GAAG,UAAmB,CAAC;QAIvB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAA6B,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAY,CAAC;IACzC,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,MAAM;QACF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,SAAS,CAAC,QAA4C;QAClD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE;YACnC,QAAQ,CAAC,OAA4B,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -0,0 +1,14 @@
1
+ import { JsonObject } from '../jsonValue.js';
2
+ import { CoID, ReadableCoValue } from '../coValue.js';
3
+ import { CoValueCore } from '../coValueCore.js';
4
+ import { Group } from '../index.js';
5
+ export declare class Static<T extends JsonObject> implements ReadableCoValue {
6
+ id: CoID<Static<T>>;
7
+ type: "static";
8
+ core: CoValueCore;
9
+ constructor(core: CoValueCore);
10
+ get meta(): T;
11
+ get group(): Group;
12
+ toJSON(): JsonObject;
13
+ subscribe(_listener: (coMap: Static<T>) => void): () => void;
14
+ }
@@ -0,0 +1,20 @@
1
+ export class Static {
2
+ constructor(core) {
3
+ this.type = "static";
4
+ this.id = core.id;
5
+ this.core = core;
6
+ }
7
+ get meta() {
8
+ return this.core.header.meta;
9
+ }
10
+ get group() {
11
+ return this.core.getGroup();
12
+ }
13
+ toJSON() {
14
+ throw new Error("Method not implemented.");
15
+ }
16
+ subscribe(_listener) {
17
+ throw new Error("Method not implemented.");
18
+ }
19
+ }
20
+ //# sourceMappingURL=static.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static.js","sourceRoot":"","sources":["../../src/coValues/static.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,MAAM;IAKf,YAAY,IAAiB;QAH7B,SAAI,GAAG,QAAiB,CAAC;QAIrB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAqB,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAS,CAAC;IACtC,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAED,MAAM;QACF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IAED,SAAS,CAAC,SAAqC;QAC3C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;CACJ"}
package/dist/group.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- import { CoID, ContentType } from "./contentType.js";
2
- import { CoMap } from "./contentTypes/coMap.js";
1
+ import { CoID, CoValueImpl } from "./coValue.js";
2
+ import { CoMap } from "./coValues/coMap.js";
3
3
  import { JsonObject, JsonValue } from "./jsonValue.js";
4
4
  import { Encrypted, KeyID, KeySecret, Sealed } from "./crypto.js";
5
5
  import { LocalNode } from "./node.js";
6
- import { AgentID } from "./ids.js";
7
- import { AccountID, Profile } from "./account.js";
6
+ import { AgentID, SessionID } from "./ids.js";
7
+ import { AccountID, GeneralizedControlledAccount, Profile } from "./account.js";
8
8
  import { Role } from "./permissions.js";
9
- import { CoList } from "./contentTypes/coList.js";
9
+ import { CoList } from "./coValues/coList.js";
10
10
  export type GroupContent = {
11
11
  profile: CoID<Profile> | null;
12
12
  [key: AccountID | AgentID]: Role;
@@ -17,22 +17,67 @@ export type GroupContent = {
17
17
  encryptingID: KeyID;
18
18
  }>;
19
19
  };
20
- export declare function expectGroupContent(content: ContentType): CoMap<GroupContent, JsonObject | null>;
20
+ export declare function expectGroupContent(content: CoValueImpl): CoMap<GroupContent, JsonObject | null>;
21
+ /** A `Group` is a scope for permissions of its members (`"reader" | "writer" | "admin"`), applying to objects owned by that group.
22
+ *
23
+ * A `Group` object exposes methods for permission management and allows you to create new CoValues owned by that group.
24
+ *
25
+ * (Internally, a `Group` is also just a `CoMap`, mapping member accounts to roles and containing some
26
+ * state management for making cryptographic keys available to current members)
27
+ *
28
+ * @example
29
+ * You typically get a group from a CoValue that you already have loaded:
30
+ *
31
+ * ```typescript
32
+ * const group = coMap.group;
33
+ * ```
34
+ *
35
+ * @example
36
+ * Or, you can create a new group with a `LocalNode`:
37
+ *
38
+ * ```typescript
39
+ * const localNode.createGroup();
40
+ * ```
41
+ * */
21
42
  export declare class Group {
22
- groupMap: CoMap<GroupContent, JsonObject | null>;
43
+ underlyingMap: CoMap<GroupContent, JsonObject | null>;
44
+ /** @internal */
23
45
  node: LocalNode;
24
- constructor(groupMap: CoMap<GroupContent, JsonObject | null>, node: LocalNode);
46
+ /** @internal */
47
+ constructor(underlyingMap: CoMap<GroupContent, JsonObject | null>, node: LocalNode);
48
+ /** Returns the `CoID` of the `Group`. */
25
49
  get id(): CoID<CoMap<GroupContent, JsonObject | null>>;
50
+ /** Returns the current role of a given account. */
26
51
  roleOf(accountID: AccountID): Role | undefined;
52
+ /** @internal */
53
+ roleOfInternal(accountID: AccountID | AgentID): Role | undefined;
54
+ /** Returns the role of the current account in the group. */
27
55
  myRole(): Role | undefined;
56
+ /** Directly grants a new member a role in the group. The current account must be an
57
+ * admin to be able to do so. Throws otherwise. */
28
58
  addMember(accountID: AccountID, role: Role): void;
29
- createInvite(role: "reader" | "writer" | "admin"): InviteSecret;
59
+ /** @internal */
60
+ addMemberInternal(accountID: AccountID | AgentID, role: Role): void;
61
+ /** @internal */
30
62
  rotateReadKey(): void;
63
+ /** Strips the specified member of all roles (preventing future writes in
64
+ * the group and owned values) and rotates the read encryption key for that group
65
+ * (preventing reads of new content in the group and owned values) */
31
66
  removeMember(accountID: AccountID): void;
67
+ /** @internal */
68
+ removeMemberInternal(accountID: AccountID | AgentID): void;
69
+ /** Creates an invite for new members to indirectly join the group, allowing them to grant themselves the specified role with the InviteSecret (a string starting with "inviteSecret_") - use `LocalNode.acceptInvite()` for this purpose. */
70
+ createInvite(role: "reader" | "writer" | "admin"): InviteSecret;
71
+ /** Creates a new `CoMap` within this group, with the specified specialized
72
+ * `CoMap` type `M` and optional static metadata. */
32
73
  createMap<M extends CoMap<{
33
74
  [key: string]: JsonValue;
34
75
  }, JsonObject | null>>(meta?: M["meta"]): M;
76
+ /** Creates a new `CoList` within this group, with the specified specialized
77
+ * `CoList` type `L` and optional static metadata. */
35
78
  createList<L extends CoList<JsonValue, JsonObject | null>>(meta?: L["meta"]): L;
79
+ /** @internal */
80
+ testWithDifferentAccount(account: GeneralizedControlledAccount, sessionId: SessionID): Group;
36
81
  }
37
82
  export type InviteSecret = `inviteSecret_z${string}`;
38
83
  export declare function secretSeedFromInviteSecret(inviteSecret: InviteSecret): Uint8Array;
package/dist/group.js CHANGED
@@ -7,31 +7,58 @@ export function expectGroupContent(content) {
7
7
  }
8
8
  return content;
9
9
  }
10
+ /** A `Group` is a scope for permissions of its members (`"reader" | "writer" | "admin"`), applying to objects owned by that group.
11
+ *
12
+ * A `Group` object exposes methods for permission management and allows you to create new CoValues owned by that group.
13
+ *
14
+ * (Internally, a `Group` is also just a `CoMap`, mapping member accounts to roles and containing some
15
+ * state management for making cryptographic keys available to current members)
16
+ *
17
+ * @example
18
+ * You typically get a group from a CoValue that you already have loaded:
19
+ *
20
+ * ```typescript
21
+ * const group = coMap.group;
22
+ * ```
23
+ *
24
+ * @example
25
+ * Or, you can create a new group with a `LocalNode`:
26
+ *
27
+ * ```typescript
28
+ * const localNode.createGroup();
29
+ * ```
30
+ * */
10
31
  export class Group {
11
- constructor(groupMap, node) {
12
- this.groupMap = groupMap;
32
+ /** @internal */
33
+ constructor(underlyingMap, node) {
34
+ this.underlyingMap = underlyingMap;
13
35
  this.node = node;
14
36
  }
37
+ /** Returns the `CoID` of the `Group`. */
15
38
  get id() {
16
- return this.groupMap.id;
39
+ return this.underlyingMap.id;
17
40
  }
41
+ /** Returns the current role of a given account. */
18
42
  roleOf(accountID) {
19
43
  return this.roleOfInternal(accountID);
20
44
  }
21
45
  /** @internal */
22
46
  roleOfInternal(accountID) {
23
- return this.groupMap.get(accountID);
47
+ return this.underlyingMap.get(accountID);
24
48
  }
49
+ /** Returns the role of the current account in the group. */
25
50
  myRole() {
26
51
  return this.roleOfInternal(this.node.account.id);
27
52
  }
53
+ /** Directly grants a new member a role in the group. The current account must be an
54
+ * admin to be able to do so. Throws otherwise. */
28
55
  addMember(accountID, role) {
29
56
  this.addMemberInternal(accountID, role);
30
57
  }
31
58
  /** @internal */
32
59
  addMemberInternal(accountID, role) {
33
- this.groupMap = this.groupMap.edit((map) => {
34
- const currentReadKey = this.groupMap.coValue.getCurrentReadKey();
60
+ this.underlyingMap = this.underlyingMap.edit((map) => {
61
+ const currentReadKey = this.underlyingMap.core.getCurrentReadKey();
35
62
  if (!currentReadKey.secret) {
36
63
  throw new Error("Can't add member without read key secret");
37
64
  }
@@ -40,30 +67,28 @@ export class Group {
40
67
  if (map.get(accountID) !== role) {
41
68
  throw new Error("Failed to set role");
42
69
  }
43
- map.set(`${currentReadKey.id}_for_${accountID}`, seal(currentReadKey.secret, this.groupMap.coValue.node.account.currentSealerSecret(), getAgentSealerID(agent), {
44
- in: this.groupMap.coValue.id,
45
- tx: this.groupMap.coValue.nextTransactionID(),
70
+ map.set(`${currentReadKey.id}_for_${accountID}`, seal(currentReadKey.secret, this.underlyingMap.core.node.account.currentSealerSecret(), getAgentSealerID(agent), {
71
+ in: this.underlyingMap.core.id,
72
+ tx: this.underlyingMap.core.nextTransactionID(),
46
73
  }), "trusting");
47
74
  });
48
75
  }
49
- createInvite(role) {
50
- const secretSeed = newRandomSecretSeed();
51
- const inviteSecret = agentSecretFromSecretSeed(secretSeed);
52
- const inviteID = getAgentID(inviteSecret);
53
- this.addMemberInternal(inviteID, `${role}Invite`);
54
- return inviteSecretFromSecretSeed(secretSeed);
55
- }
76
+ /** @internal */
56
77
  rotateReadKey() {
57
- const currentlyPermittedReaders = this.groupMap.keys().filter((key) => {
78
+ const currentlyPermittedReaders = this.underlyingMap
79
+ .keys()
80
+ .filter((key) => {
58
81
  if (key.startsWith("co_") || isAgentID(key)) {
59
- const role = this.groupMap.get(key);
60
- return (role === "admin" || role === "writer" || role === "reader");
82
+ const role = this.underlyingMap.get(key);
83
+ return (role === "admin" ||
84
+ role === "writer" ||
85
+ role === "reader");
61
86
  }
62
87
  else {
63
88
  return false;
64
89
  }
65
90
  });
66
- const maybeCurrentReadKey = this.groupMap.coValue.getCurrentReadKey();
91
+ const maybeCurrentReadKey = this.underlyingMap.core.getCurrentReadKey();
67
92
  if (!maybeCurrentReadKey.secret) {
68
93
  throw new Error("Can't rotate read key secret we don't have access to");
69
94
  }
@@ -72,12 +97,12 @@ export class Group {
72
97
  secret: maybeCurrentReadKey.secret,
73
98
  };
74
99
  const newReadKey = newRandomKeySecret();
75
- this.groupMap = this.groupMap.edit((map) => {
100
+ this.underlyingMap = this.underlyingMap.edit((map) => {
76
101
  for (const readerID of currentlyPermittedReaders) {
77
102
  const reader = this.node.resolveAccountAgent(readerID, "Expected to know currently permitted reader");
78
- map.set(`${newReadKey.id}_for_${readerID}`, seal(newReadKey.secret, this.groupMap.coValue.node.account.currentSealerSecret(), getAgentSealerID(reader), {
79
- in: this.groupMap.coValue.id,
80
- tx: this.groupMap.coValue.nextTransactionID(),
103
+ map.set(`${newReadKey.id}_for_${readerID}`, seal(newReadKey.secret, this.underlyingMap.core.node.account.currentSealerSecret(), getAgentSealerID(reader), {
104
+ in: this.underlyingMap.core.id,
105
+ tx: this.underlyingMap.core.nextTransactionID(),
81
106
  }), "trusting");
82
107
  }
83
108
  map.set(`${currentReadKey.id}_for_${newReadKey.id}`, encryptKeySecret({
@@ -87,36 +112,51 @@ export class Group {
87
112
  map.set("readKey", newReadKey.id, "trusting");
88
113
  });
89
114
  }
115
+ /** Strips the specified member of all roles (preventing future writes in
116
+ * the group and owned values) and rotates the read encryption key for that group
117
+ * (preventing reads of new content in the group and owned values) */
90
118
  removeMember(accountID) {
91
119
  this.removeMemberInternal(accountID);
92
120
  }
93
121
  /** @internal */
94
122
  removeMemberInternal(accountID) {
95
- this.groupMap = this.groupMap.edit((map) => {
123
+ this.underlyingMap = this.underlyingMap.edit((map) => {
96
124
  map.set(accountID, "revoked", "trusting");
97
125
  });
98
126
  this.rotateReadKey();
99
127
  }
128
+ /** Creates an invite for new members to indirectly join the group, allowing them to grant themselves the specified role with the InviteSecret (a string starting with "inviteSecret_") - use `LocalNode.acceptInvite()` for this purpose. */
129
+ createInvite(role) {
130
+ const secretSeed = newRandomSecretSeed();
131
+ const inviteSecret = agentSecretFromSecretSeed(secretSeed);
132
+ const inviteID = getAgentID(inviteSecret);
133
+ this.addMemberInternal(inviteID, `${role}Invite`);
134
+ return inviteSecretFromSecretSeed(secretSeed);
135
+ }
136
+ /** Creates a new `CoMap` within this group, with the specified specialized
137
+ * `CoMap` type `M` and optional static metadata. */
100
138
  createMap(meta) {
101
139
  return this.node
102
140
  .createCoValue({
103
141
  type: "comap",
104
142
  ruleset: {
105
143
  type: "ownedByGroup",
106
- group: this.groupMap.id,
144
+ group: this.underlyingMap.id,
107
145
  },
108
146
  meta: meta || null,
109
147
  ...createdNowUnique(),
110
148
  })
111
149
  .getCurrentContent();
112
150
  }
151
+ /** Creates a new `CoList` within this group, with the specified specialized
152
+ * `CoList` type `L` and optional static metadata. */
113
153
  createList(meta) {
114
154
  return this.node
115
155
  .createCoValue({
116
156
  type: "colist",
117
157
  ruleset: {
118
158
  type: "ownedByGroup",
119
- group: this.groupMap.id,
159
+ group: this.underlyingMap.id,
120
160
  },
121
161
  meta: meta || null,
122
162
  ...createdNowUnique(),
@@ -125,7 +165,7 @@ export class Group {
125
165
  }
126
166
  /** @internal */
127
167
  testWithDifferentAccount(account, sessionId) {
128
- return new Group(expectGroupContent(this.groupMap.coValue
168
+ return new Group(expectGroupContent(this.underlyingMap.core
129
169
  .testWithDifferentAccount(account, sessionId)
130
170
  .getCurrentContent()), this.node);
131
171
  }
package/dist/group.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"group.js","sourceRoot":"","sources":["../src/group.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group.js","sourceRoot":"","sources":["../src/group.ts"],"names":[],"mappings":"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"}