cojson 0.1.8 → 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.
- package/dist/account.d.ts +4 -2
- package/dist/account.js +4 -2
- package/dist/account.js.map +1 -1
- package/dist/coValue.d.ts +44 -81
- package/dist/coValue.js +4 -348
- package/dist/coValue.js.map +1 -1
- package/dist/coValueCore.d.ts +84 -0
- package/dist/coValueCore.js +351 -0
- package/dist/coValueCore.js.map +1 -0
- package/dist/coValues/coList.d.ts +113 -0
- package/dist/{contentTypes → coValues}/coList.js +59 -19
- package/dist/coValues/coList.js.map +1 -0
- package/dist/{contentTypes → coValues}/coMap.d.ts +25 -7
- package/dist/{contentTypes → coValues}/coMap.js +34 -15
- package/dist/coValues/coMap.js.map +1 -0
- package/dist/coValues/coStream.d.ts +14 -0
- package/dist/coValues/coStream.js +22 -0
- package/dist/coValues/coStream.js.map +1 -0
- package/dist/coValues/static.d.ts +14 -0
- package/dist/coValues/static.js +20 -0
- package/dist/coValues/static.js.map +1 -0
- package/dist/group.d.ts +54 -9
- package/dist/group.js +68 -28
- package/dist/group.js.map +1 -1
- package/dist/index.d.ts +17 -10
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +59 -5
- package/dist/node.js +36 -15
- package/dist/node.js.map +1 -1
- package/dist/permissions.d.ts +2 -2
- package/dist/permissions.js +1 -1
- package/dist/permissions.js.map +1 -1
- package/dist/sync.d.ts +3 -3
- package/dist/sync.js +2 -2
- package/dist/sync.js.map +1 -1
- package/dist/testUtils.d.ts +2 -2
- package/dist/testUtils.js +1 -1
- package/dist/testUtils.js.map +1 -1
- package/package.json +2 -2
- package/src/account.test.ts +1 -1
- package/src/account.ts +6 -4
- package/src/coValue.test.ts +233 -130
- package/src/coValue.ts +50 -576
- package/src/coValueCore.test.ts +181 -0
- package/src/coValueCore.ts +588 -0
- package/src/{contentTypes → coValues}/coList.ts +89 -40
- package/src/{contentTypes → coValues}/coMap.ts +40 -20
- package/src/coValues/coStream.ts +33 -0
- package/src/coValues/static.ts +31 -0
- package/src/group.ts +87 -50
- package/src/index.ts +30 -28
- package/src/node.ts +47 -26
- package/src/permissions.test.ts +32 -32
- package/src/permissions.ts +5 -5
- package/src/sync.test.ts +77 -77
- package/src/sync.ts +5 -5
- package/src/testUtils.ts +1 -1
- package/tsconfig.json +1 -2
- package/dist/contentType.d.ts +0 -15
- package/dist/contentType.js +0 -7
- package/dist/contentType.js.map +0 -1
- package/dist/contentTypes/coList.d.ts +0 -77
- package/dist/contentTypes/coList.js.map +0 -1
- package/dist/contentTypes/coMap.js.map +0 -1
- package/dist/contentTypes/coStream.d.ts +0 -11
- package/dist/contentTypes/coStream.js +0 -16
- package/dist/contentTypes/coStream.js.map +0 -1
- package/dist/contentTypes/static.d.ts +0 -11
- package/dist/contentTypes/static.js +0 -14
- package/dist/contentTypes/static.js.map +0 -1
- package/src/contentType.test.ts +0 -284
- package/src/contentType.ts +0 -26
- package/src/contentTypes/coStream.ts +0 -24
- 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 '../
|
|
4
|
-
import {
|
|
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
|
-
|
|
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 '../
|
|
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
|
-
|
|
5
|
+
/** @internal */
|
|
6
|
+
constructor(core) {
|
|
5
7
|
this.type = "comap";
|
|
6
|
-
this.id =
|
|
7
|
-
this.
|
|
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.
|
|
14
|
+
return this.core.header.meta;
|
|
13
15
|
}
|
|
14
16
|
get group() {
|
|
15
|
-
return this.
|
|
17
|
+
return this.core.getGroup();
|
|
16
18
|
}
|
|
19
|
+
/** @internal */
|
|
17
20
|
fillOpsFromCoValue() {
|
|
18
21
|
this.ops = {};
|
|
19
|
-
for (const { txID, changes, madeAt } of this.
|
|
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.
|
|
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.
|
|
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.
|
|
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,
|
|
2
|
-
import { CoMap } from "./
|
|
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 "./
|
|
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:
|
|
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
|
-
|
|
43
|
+
underlyingMap: CoMap<GroupContent, JsonObject | null>;
|
|
44
|
+
/** @internal */
|
|
23
45
|
node: LocalNode;
|
|
24
|
-
|
|
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
|
-
|
|
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
|
-
|
|
12
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
34
|
-
const currentReadKey = this.
|
|
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.
|
|
44
|
-
in: this.
|
|
45
|
-
tx: this.
|
|
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
|
-
|
|
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.
|
|
78
|
+
const currentlyPermittedReaders = this.underlyingMap
|
|
79
|
+
.keys()
|
|
80
|
+
.filter((key) => {
|
|
58
81
|
if (key.startsWith("co_") || isAgentID(key)) {
|
|
59
|
-
const role = this.
|
|
60
|
-
return (role === "admin" ||
|
|
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.
|
|
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.
|
|
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.
|
|
79
|
-
in: this.
|
|
80
|
-
tx: this.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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":"AAGA,OAAO,EAIH,gBAAgB,EAChB,kBAAkB,EAClB,IAAI,EACJ,gBAAgB,EAChB,gBAAgB,EAEhB,mBAAmB,EACnB,yBAAyB,EACzB,UAAU,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EAAsB,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"group.js","sourceRoot":"","sources":["../src/group.ts"],"names":[],"mappings":"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"}
|