@univerjs-pro/collaboration-database-memory 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object['defineProperty'](exports,Symbol['toStringTag'],{'value':'Module'});let e=require('@univerjs-pro/collaboration-service');var t=class{['_units']=new Map();['_tombstones']=new Set();['_disposed']=!0x1;async['getUnit'](_0x5b8337,_0x5dec3d){this['_assertOpen']();let _0x3f3a97=this['_activeUnit'](_0x5dec3d);return _0x3f3a97?c(_0x3f3a97['record']):null;}async['getSnapshot'](_0x4605b9,_0x3c5e0a,_0x221dc1){let _0x29a59d=this['_getSnapshot'](_0x3c5e0a,_0x221dc1);return _0x29a59d?c(_0x29a59d):null;}async['getSnapshotInfo'](_0x231af7,_0x1c0e0e,_0x1db7a4){let _0x44905d=this['_getSnapshot'](_0x1c0e0e,_0x1db7a4);return _0x44905d?{'unitID':_0x44905d['unitID'],'type':_0x44905d['type'],'rev':_0x44905d['rev']}:null;}['_getSnapshot'](_0x11dc24,_0x30094d){this['_assertOpen']();let _0x58342a=this['_activeUnit'](_0x11dc24);if(!_0x58342a)return null;let _0x230330=_0x30094d?.['revision'],_0x3db86d=_0x230330===void 0x0?_0x58342a['record']['headRevision']:Math['min'](_0x230330,_0x58342a['record']['headRevision']),_0x5a084a=-0x1;for(let _0x40d574 of _0x58342a['snapshots']['keys']())_0x40d574<=_0x3db86d&&_0x40d574>_0x5a084a&&(_0x5a084a=_0x40d574);return _0x58342a['snapshots']['get'](_0x5a084a)??null;}async['getChangesets'](_0x249654,_0x507bdd,_0x2f8fed){if(this['_assertOpen'](),_0x2f8fed['from']<0x0||_0x2f8fed['to']!==void 0x0&&_0x2f8fed['to']<0x0)throw a('Changeset\x20range\x20revisions\x20cannot\x20be\x20negative');let _0xfc793b=this['_activeUnit'](_0x507bdd);return _0xfc793b?[..._0xfc793b['changesets']['entries']()]['filter'](([_0x1dfcfc])=>_0x1dfcfc>_0x2f8fed['from']&&(_0x2f8fed['to']===void 0x0||_0x1dfcfc<=_0x2f8fed['to']))['sort'](([_0x1e445c],[_0x4995ef])=>_0x1e445c-_0x4995ef)['map'](([,_0x111137])=>c(_0x111137)):null;}async['createUnit'](_0x2ca949,_0x599daf){this['_assertOpen'](),n(_0x599daf);let _0x4e3106=this['_units']['get'](_0x599daf['record']['unitID']);if(_0x4e3106){if(_0x4e3106['lifecycle']==='soft-deleted')throw a('A\x20soft-deleted\x20unit\x20ID\x20cannot\x20be\x20reused');return{'status':'already-exists','record':c(_0x4e3106['record'])};}if(this['_tombstones']['has'](_0x599daf['record']['unitID']))throw a('A\x20purged\x20unit\x20ID\x20cannot\x20be\x20reused');let _0x3c6576=r(_0x599daf['sheetBlocks']),_0x50699b={'record':c(_0x599daf['record']),'lifecycle':'active','snapshots':new Map([[0x1,c(_0x599daf['snapshot'])]]),'changesets':new Map(),'sheetBlocks':_0x3c6576};return this['_units']['set'](_0x599daf['record']['unitID'],_0x50699b),{'status':'created','record':c(_0x50699b['record'])};}async['deleteUnits'](_0x149446,_0x142514){this['_assertOpen']();let _0x46c9cc=s(_0x142514['unitIDs'])['map'](_0x12fbff=>{let _0x3e51b2=this['_units']['get'](_0x12fbff);if(_0x142514['hardDelete']){if(_0x3e51b2)return{'unitID':_0x12fbff,'stored':_0x3e51b2,'status':'hard-deleted'};if(this['_tombstones']['has'](_0x12fbff))return{'unitID':_0x12fbff,'status':'already-hard-deleted'};throw o('Cannot\x20hard-delete\x20a\x20missing\x20unit');}if(!_0x3e51b2||this['_tombstones']['has'](_0x12fbff))throw o('Cannot\x20soft-delete\x20a\x20missing\x20unit');return{'unitID':_0x12fbff,'stored':_0x3e51b2,'status':_0x3e51b2['lifecycle']==='active'?'soft-deleted':'already-soft-deleted'};});for(let _0x3eef8a of _0x46c9cc)_0x142514['hardDelete']&&_0x3eef8a['status']==='hard-deleted'?(this['_units']['delete'](_0x3eef8a['unitID']),this['_tombstones']['add'](_0x3eef8a['unitID'])):!_0x142514['hardDelete']&&_0x3eef8a['stored']&&(_0x3eef8a['stored']['lifecycle']='soft-deleted');return{'units':_0x46c9cc['map'](({unitID:_0x495b00,status:_0x3b328c})=>({'unitID':_0x495b00,'status':_0x3b328c}))};}async['recoverUnits'](_0x1448f3,_0x4f4b29){this['_assertOpen']();let _0x196ede=s(_0x4f4b29['unitIDs'])['map'](_0x59f973=>{if(this['_tombstones']['has'](_0x59f973))throw a('A\x20purged\x20unit\x20cannot\x20be\x20recovered');let _0x320c78=this['_units']['get'](_0x59f973);if(!_0x320c78)throw o('Cannot\x20recover\x20a\x20missing\x20unit');return{'unitID':_0x59f973,'stored':_0x320c78,'status':_0x320c78['lifecycle']==='active'?'already-active':'recovered'};});for(let _0x2f0def of _0x196ede)_0x2f0def['stored']['lifecycle']='active';return{'units':_0x196ede['map'](({unitID:_0x395674,status:_0x2ff430})=>({'unitID':_0x395674,'status':_0x2ff430}))};}async['commitChangeset'](_0x3d3464,_0x381653){this['_assertOpen']();let {changeset:_0x1a2ff1}=_0x381653,_0xd33c=this['_activeUnit'](_0x1a2ff1['unitID']);if(!_0xd33c)throw o('Cannot\x20commit\x20to\x20a\x20missing\x20unit');if(_0xd33c['record']['headRevision']!==_0x1a2ff1['revision']-0x1)return{'status':'revision-mismatch','actualHeadRevision':_0xd33c['record']['headRevision']};let _0x115037=c(_0x1a2ff1);return _0x115037['createTime']=Math['floor'](Date['now']()/0x3e8),_0xd33c['changesets']['set'](_0x115037['revision'],_0x115037),_0xd33c['record']={..._0xd33c['record'],'headRevision':_0x115037['revision']},{'status':'committed','changeset':c(_0x115037),'headRevision':_0xd33c['record']['headRevision']};}async['saveSnapshot'](_0x506ebc,_0x3ed03f){this['_assertOpen']();let _0x374f8c=this['_activeUnit'](_0x3ed03f['snapshot']['unitID']);if(!_0x374f8c)throw o('Cannot\x20snapshot\x20a\x20missing\x20unit');if(_0x3ed03f['snapshot']['type']!==_0x374f8c['record']['type']||_0x3ed03f['snapshot']['rev']<0x1||_0x3ed03f['snapshot']['rev']>_0x374f8c['record']['headRevision'])throw a('Snapshot\x20does\x20not\x20match\x20the\x20stored\x20unit\x20head');let _0x90ae28=c(_0x3ed03f['snapshot']);i(_0x374f8c,r(_0x3ed03f['sheetBlocks'])),_0x374f8c['snapshots']['set'](_0x90ae28['rev'],_0x90ae28);}async['getSheetBlock'](_0x17b394,_0x15af1a,_0xc08ae3){this['_assertOpen']();let _0xbaa0f0=this['_activeUnit'](_0x15af1a)?.['sheetBlocks']['get'](_0xc08ae3);return _0xbaa0f0?c(_0xbaa0f0):null;}async['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_units']['clear'](),this['_tombstones']['clear']());}['_activeUnit'](_0x253004){let _0x41073f=this['_units']['get'](_0x253004);return _0x41073f?.['lifecycle']==='active'?_0x41073f:void 0x0;}['_assertOpen'](){if(this['_disposed'])throw new e['CollabError']('INTERNAL_ERROR','Memory\x20Database\x20Adapter\x20is\x20disposed');}};function n(_0x400568){let {record:_0xf305a6,snapshot:_0x183b3b}=_0x400568;if(_0xf305a6['headRevision']!==0x1||_0x183b3b['rev']!==0x1||_0x183b3b['unitID']!==_0xf305a6['unitID']||_0x183b3b['type']!==_0xf305a6['type'])throw a('Initial\x20unit\x20record\x20and\x20snapshot\x20must\x20match\x20at\x20revision\x201');if(typeof _0xf305a6['creatorID']!='string'||_0xf305a6['creatorID']['length']===0x0||!Number['isSafeInteger'](_0xf305a6['createdAt'])||_0xf305a6['createdAt']<0x0)throw a('Unit\x20creation\x20requires\x20creatorID\x20and\x20createdAt\x20in\x20Unix\x20milliseconds');}function r(_0xe8ec45){let _0x56b3a9=new Map();for(let _0x57618d of _0xe8ec45??[])_0x56b3a9['set'](_0x57618d['id'],c(_0x57618d));return _0x56b3a9;}function i(_0x2db553,_0x5658c1){for(let [_0x1ac017,_0x1d9671]of _0x5658c1)_0x2db553['sheetBlocks']['set'](_0x1ac017,_0x1d9671);}function a(_0x543073){return new e['CollabError']('INVALID_REQUEST',_0x543073);}function o(_0x4b969e){return new e['CollabError']('UNIT_NOT_FOUND',_0x4b969e);}function s(_0x32473a){return[...new Set(_0x32473a)];}function c(_0x85898f){return structuredClone(_0x85898f);}exports['MemoryDatabaseAdapter']=t;
1
+ Object['defineProperty'](exports,Symbol['toStringTag'],{'value':'Module'});let e=require('@univerjs-pro/collaboration-service');var t=class{['_units']=new Map();['_tombstones']=new Set();['_disposed']=!0x1;async['getUnit'](_0x39e5e4,_0x31426f){this['_assertOpen']();let _0x4fb1b7=this['_activeUnit'](_0x31426f);return _0x4fb1b7?c(_0x4fb1b7['record']):null;}async['getSnapshot'](_0x149c69,_0x12fd7d,_0x4c8234){let _0x190b35=this['_getSnapshot'](_0x12fd7d,_0x4c8234);return _0x190b35?c(_0x190b35):null;}async['getSnapshotInfo'](_0x4a3c13,_0x531ff5,_0x4eb52d){let _0x27c4ad=this['_getSnapshot'](_0x531ff5,_0x4eb52d);return _0x27c4ad?{'unitID':_0x27c4ad['unitID'],'type':_0x27c4ad['type'],'rev':_0x27c4ad['rev']}:null;}['_getSnapshot'](_0x2851cf,_0x54a74b){this['_assertOpen']();let _0x51b0f9=this['_activeUnit'](_0x2851cf);if(!_0x51b0f9)return null;let _0x144c2f=_0x54a74b?.['revision'],_0x2455e5=_0x144c2f===void 0x0?_0x51b0f9['record']['headRevision']:Math['min'](_0x144c2f,_0x51b0f9['record']['headRevision']),_0x22f16d=-0x1;for(let _0x1738c3 of _0x51b0f9['snapshots']['keys']())_0x1738c3<=_0x2455e5&&_0x1738c3>_0x22f16d&&(_0x22f16d=_0x1738c3);return _0x51b0f9['snapshots']['get'](_0x22f16d)??null;}async['getChangesets'](_0x25483d,_0x309e93,_0x280617){if(this['_assertOpen'](),_0x280617['from']<0x0||_0x280617['to']!==void 0x0&&_0x280617['to']<0x0)throw a('Changeset\x20range\x20revisions\x20cannot\x20be\x20negative');let _0x4c977b=this['_activeUnit'](_0x309e93);return _0x4c977b?[..._0x4c977b['changesets']['entries']()]['filter'](([_0x3d769f])=>_0x3d769f>_0x280617['from']&&(_0x280617['to']===void 0x0||_0x3d769f<=_0x280617['to']))['sort'](([_0x4bfb63],[_0x1fa51b])=>_0x4bfb63-_0x1fa51b)['map'](([,_0x116432])=>c(_0x116432)):null;}async['createUnit'](_0x555da3,_0x324a8){this['_assertOpen'](),n(_0x324a8);let _0x414d94=this['_units']['get'](_0x324a8['record']['unitID']);if(_0x414d94){if(_0x414d94['lifecycle']==='soft-deleted')throw a('A\x20soft-deleted\x20unit\x20ID\x20cannot\x20be\x20reused');return{'status':'already-exists','record':c(_0x414d94['record'])};}if(this['_tombstones']['has'](_0x324a8['record']['unitID']))throw a('A\x20purged\x20unit\x20ID\x20cannot\x20be\x20reused');let _0x501051=r(_0x324a8['sheetBlocks']),_0x4ce658={'record':c(_0x324a8['record']),'lifecycle':'active','snapshots':new Map([[0x1,c(_0x324a8['snapshot'])]]),'changesets':new Map(),'sheetBlocks':_0x501051};return this['_units']['set'](_0x324a8['record']['unitID'],_0x4ce658),{'status':'created','record':c(_0x4ce658['record'])};}async['deleteUnits'](_0x320a17,_0x2961c5){this['_assertOpen']();let _0x5e8ef6=s(_0x2961c5['unitIDs'])['map'](_0x26d6f5=>{let _0x102711=this['_units']['get'](_0x26d6f5);if(_0x2961c5['hardDelete']){if(_0x102711)return{'unitID':_0x26d6f5,'stored':_0x102711,'status':'hard-deleted'};if(this['_tombstones']['has'](_0x26d6f5))return{'unitID':_0x26d6f5,'status':'already-hard-deleted'};throw o('Cannot\x20hard-delete\x20a\x20missing\x20unit');}if(!_0x102711||this['_tombstones']['has'](_0x26d6f5))throw o('Cannot\x20soft-delete\x20a\x20missing\x20unit');return{'unitID':_0x26d6f5,'stored':_0x102711,'status':_0x102711['lifecycle']==='active'?'soft-deleted':'already-soft-deleted'};});for(let _0xa7cc96 of _0x5e8ef6)_0x2961c5['hardDelete']&&_0xa7cc96['status']==='hard-deleted'?(this['_units']['delete'](_0xa7cc96['unitID']),this['_tombstones']['add'](_0xa7cc96['unitID'])):!_0x2961c5['hardDelete']&&_0xa7cc96['stored']&&(_0xa7cc96['stored']['lifecycle']='soft-deleted');return{'units':_0x5e8ef6['map'](({unitID:_0x2a2cbd,status:_0x580f99})=>({'unitID':_0x2a2cbd,'status':_0x580f99}))};}async['recoverUnits'](_0x3155ad,_0x250444){this['_assertOpen']();let _0x1d3bca=s(_0x250444['unitIDs'])['map'](_0xf15f32=>{if(this['_tombstones']['has'](_0xf15f32))throw a('A\x20purged\x20unit\x20cannot\x20be\x20recovered');let _0x2a859f=this['_units']['get'](_0xf15f32);if(!_0x2a859f)throw o('Cannot\x20recover\x20a\x20missing\x20unit');return{'unitID':_0xf15f32,'stored':_0x2a859f,'status':_0x2a859f['lifecycle']==='active'?'already-active':'recovered'};});for(let _0x3ad9d8 of _0x1d3bca)_0x3ad9d8['stored']['lifecycle']='active';return{'units':_0x1d3bca['map'](({unitID:_0x3c1bc0,status:_0x2df3b5})=>({'unitID':_0x3c1bc0,'status':_0x2df3b5}))};}async['commitChangeset'](_0x459eba,_0x13c3fb){this['_assertOpen']();let {changeset:_0x4ad6c3}=_0x13c3fb,_0x4e2593=this['_activeUnit'](_0x4ad6c3['unitID']);if(!_0x4e2593)throw o('Cannot\x20commit\x20to\x20a\x20missing\x20unit');if(_0x4e2593['record']['headRevision']!==_0x4ad6c3['revision']-0x1)return{'status':'revision-mismatch','actualHeadRevision':_0x4e2593['record']['headRevision']};let _0x198076=c(_0x4ad6c3);return _0x198076['createTime']=Math['floor'](Date['now']()/0x3e8),_0x4e2593['changesets']['set'](_0x198076['revision'],_0x198076),_0x4e2593['record']={..._0x4e2593['record'],'headRevision':_0x198076['revision']},{'status':'committed','changeset':c(_0x198076),'headRevision':_0x4e2593['record']['headRevision']};}async['saveSnapshot'](_0x3e337c,_0x20e26c){this['_assertOpen']();let _0x291f27=this['_activeUnit'](_0x20e26c['snapshot']['unitID']);if(!_0x291f27)throw o('Cannot\x20snapshot\x20a\x20missing\x20unit');if(_0x20e26c['snapshot']['type']!==_0x291f27['record']['type']||_0x20e26c['snapshot']['rev']<0x1||_0x20e26c['snapshot']['rev']>_0x291f27['record']['headRevision'])throw a('Snapshot\x20does\x20not\x20match\x20the\x20stored\x20unit\x20head');let _0x23d960=c(_0x20e26c['snapshot']);i(_0x291f27,r(_0x20e26c['sheetBlocks'])),_0x291f27['snapshots']['set'](_0x23d960['rev'],_0x23d960);}async['getSheetBlock'](_0x2e7841,_0x2d7d12,_0x177f19){this['_assertOpen']();let _0x27b5b4=this['_activeUnit'](_0x2d7d12)?.['sheetBlocks']['get'](_0x177f19);return _0x27b5b4?c(_0x27b5b4):null;}async['dispose'](){this['_disposed']||(this['_disposed']=!0x0,this['_units']['clear'](),this['_tombstones']['clear']());}['_activeUnit'](_0x2da7d9){let _0x3b18c1=this['_units']['get'](_0x2da7d9);return _0x3b18c1?.['lifecycle']==='active'?_0x3b18c1:void 0x0;}['_assertOpen'](){if(this['_disposed'])throw new e['CollabError']('INTERNAL_ERROR','Memory\x20Database\x20Adapter\x20is\x20disposed');}};function n(_0x2b33a5){let {record:_0x22a50c,snapshot:_0x43f3de}=_0x2b33a5;if(_0x22a50c['headRevision']!==0x1||_0x43f3de['rev']!==0x1||_0x43f3de['unitID']!==_0x22a50c['unitID']||_0x43f3de['type']!==_0x22a50c['type'])throw a('Initial\x20unit\x20record\x20and\x20snapshot\x20must\x20match\x20at\x20revision\x201');if(typeof _0x22a50c['creatorID']!='string'||_0x22a50c['creatorID']['length']===0x0||!Number['isSafeInteger'](_0x22a50c['createdAt'])||_0x22a50c['createdAt']<0x0)throw a('Unit\x20creation\x20requires\x20creatorID\x20and\x20createdAt\x20in\x20Unix\x20milliseconds');}function r(_0x555535){let _0x4e9ee9=new Map();for(let _0x53e675 of _0x555535??[])_0x4e9ee9['set'](_0x53e675['id'],c(_0x53e675));return _0x4e9ee9;}function i(_0x2f8483,_0x3e9b57){for(let [_0x82b77f,_0x4e4592]of _0x3e9b57)_0x2f8483['sheetBlocks']['set'](_0x82b77f,_0x4e4592);}function a(_0x3bc0cf){return new e['CollabError']('INVALID_REQUEST',_0x3bc0cf);}function o(_0x419bc0){return new e['CollabError']('UNIT_NOT_FOUND',_0x419bc0);}function s(_0x2682d1){return[...new Set(_0x2682d1)];}function c(_0x270303){return structuredClone(_0x270303);}exports['MemoryDatabaseAdapter']=t;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- const _0x1d54fa=_0x4c6a;(function(_0x45d0d3,_0x5e727b){const _0x5ecf29=_0x4c6a,_0x4b28a3=_0x45d0d3();while(!![]){try{const _0x40bf15=parseInt(_0x5ecf29(0x1b4))/0x1*(parseInt(_0x5ecf29(0x1ae))/0x2)+-parseInt(_0x5ecf29(0x1af))/0x3*(parseInt(_0x5ecf29(0x1ab))/0x4)+parseInt(_0x5ecf29(0x1ac))/0x5*(-parseInt(_0x5ecf29(0x1b5))/0x6)+parseInt(_0x5ecf29(0x1b0))/0x7+parseInt(_0x5ecf29(0x1b1))/0x8+-parseInt(_0x5ecf29(0x1b3))/0x9+parseInt(_0x5ecf29(0x1b2))/0xa;if(_0x40bf15===_0x5e727b)break;else _0x4b28a3['push'](_0x4b28a3['shift']());}catch(_0x19791c){_0x4b28a3['push'](_0x4b28a3['shift']());}}}(_0x4c22,0x46094));import _0x2b3b1d from'./index.cjs';function _0x4c22(){const _0x4ad0be=['125CCTspj','MemoryDatabaseAdapter','1006372bBaVjO','5223hQMyjw','2754955foxTCa','764480bnwutU','1108450rFHCur','4048830WZbWdP','1xyEXbO','15654umXLBa','692upkhhO'];_0x4c22=function(){return _0x4ad0be;};return _0x4c22();}const facadeExport0=_0x2b3b1d[_0x1d54fa(0x1ad)];function _0x4c6a(_0xa1bbb5,_0x311b20){_0xa1bbb5=_0xa1bbb5-0x1ab;const _0x4c224b=_0x4c22();let _0x4c6a4e=_0x4c224b[_0xa1bbb5];return _0x4c6a4e;}export{facadeExport0 as MemoryDatabaseAdapter};
1
+ (function(_0x2c32ae,_0x3e877a){const _0x78e03d=_0x2d61,_0x10f00d=_0x2c32ae();while(!![]){try{const _0x4aef6e=parseInt(_0x78e03d(0x143))/0x1+parseInt(_0x78e03d(0x13d))/0x2+-parseInt(_0x78e03d(0x145))/0x3*(parseInt(_0x78e03d(0x13f))/0x4)+-parseInt(_0x78e03d(0x141))/0x5+-parseInt(_0x78e03d(0x142))/0x6*(-parseInt(_0x78e03d(0x13e))/0x7)+parseInt(_0x78e03d(0x146))/0x8*(parseInt(_0x78e03d(0x140))/0x9)+parseInt(_0x78e03d(0x144))/0xa*(-parseInt(_0x78e03d(0x147))/0xb);if(_0x4aef6e===_0x3e877a)break;else _0x10f00d['push'](_0x10f00d['shift']());}catch(_0xbdc2f6){_0x10f00d['push'](_0x10f00d['shift']());}}}(_0x1566,0x3c5bf));function _0x2d61(_0xf75f45,_0x6af6d3){_0xf75f45=_0xf75f45-0x13d;const _0x156637=_0x1566();let _0x2d61e1=_0x156637[_0xf75f45];return _0x2d61e1;}function _0x1566(){const _0x16c5df=['306242kHgIaW','123753dgWRIR','659624kpCUYN','711ZsNDlQ','2073840JMuXze','132jLApmw','245982ijBypB','670PKlmEC','3ctqSbE','15904JxoLEp','19404yUsoxB'];_0x1566=function(){return _0x16c5df;};return _0x1566();}import _0x36b2b6 from'./index.cjs';const facadeExport0=_0x36b2b6['MemoryDatabaseAdapter'];export{facadeExport0 as MemoryDatabaseAdapter};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@univerjs-pro/collaboration-database-memory",
3
3
  "type": "module",
4
- "version": "1.0.3",
4
+ "version": "1.0.4",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
7
7
  "types": "./dist/index.d.ts",
@@ -16,7 +16,7 @@
16
16
  "dist"
17
17
  ],
18
18
  "dependencies": {
19
- "@univerjs-pro/collaboration-service": "1.0.3",
20
- "@univerjs/protocol": "1.0.3"
19
+ "@univerjs-pro/collaboration-service": "1.0.4",
20
+ "@univerjs/protocol": "1.0.4"
21
21
  }
22
22
  }