@ibgib/core-gib 0.1.10 → 0.1.12
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/CHANGELOG.md +18 -0
- package/dist/agent-helpers.d.mts +4 -13
- package/dist/agent-helpers.d.mts.map +1 -1
- package/dist/agent-helpers.mjs +109 -12
- package/dist/agent-helpers.mjs.map +1 -1
- package/dist/sync/sync-innerspace.respec.d.mts +8 -0
- package/dist/sync/sync-innerspace.respec.d.mts.map +1 -0
- package/dist/sync/sync-innerspace.respec.mjs +242 -0
- package/dist/sync/sync-innerspace.respec.mjs.map +1 -0
- package/dist/timeline/timeline-api.respec.d.mts +7 -0
- package/dist/timeline/timeline-api.respec.d.mts.map +1 -0
- package/dist/timeline/timeline-api.respec.mjs +210 -0
- package/dist/timeline/timeline-api.respec.mjs.map +1 -0
- package/dist/witness/space/inner-space/inner-space-v1.d.mts +1 -1
- package/dist/witness/space/inner-space/inner-space-v1.d.mts.map +1 -1
- package/dist/witness/space/inner-space/inner-space-v1.mjs +4 -3
- package/dist/witness/space/inner-space/inner-space-v1.mjs.map +1 -1
- package/dist/witness/space/metaspace/metaspace-base.d.mts.map +1 -1
- package/dist/witness/space/metaspace/metaspace-base.mjs +33 -5
- package/dist/witness/space/metaspace/metaspace-base.mjs.map +1 -1
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.d.mts +18 -0
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.d.mts.map +1 -1
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs +42 -12
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs.map +1 -1
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.d.mts.map +1 -1
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs +2 -1
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs.map +1 -1
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.d.mts +7 -0
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.d.mts.map +1 -0
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mjs +69 -0
- package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mjs.map +1 -0
- package/dist/witness/space/space-helper.d.mts.map +1 -1
- package/dist/witness/space/space-helper.mjs +1 -0
- package/dist/witness/space/space-helper.mjs.map +1 -1
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/017DF612D9A86192706EE567B059C489EC8DA0B2B558166EFE61F75D8BF1ECEE/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/0EF68E1CA839A24CAEDB224A8AF92F258BD1F364A97E708705150595B3F67985/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/12EF728E4F98DDB89990D4CDAF3AC852729E804CE37E2041AF18CBA239328085/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/152DD42FA80FA6ABD0B4DAAAE9CE1AFCF94E649B210A08955DB8B86E09AF08BE/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/16A46B37492E2688088C69F237E5CDC4F4E8C1015CF8E66D044DC2FE115F6211/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/1F7942767491C1D740FFC87E046C2470697FE8D154806B51876C53E607B7F007/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/35754C7AD2967D57C34396084F1214343C48F9C1AAF1C11CDFB57B5CB95536F5/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/38CFD2C2DFD185FC1E5BEE8C55C8A4FFBD83B03F533B4F92537000C505939E39/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/43635745EEAE9EBD3426CC4AD88D2362DE15B2F8E4D1C694B3AE8687E8C6489D/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/5C4BCD98E1B3494CCFAC355D2C61025DCD43A1D3041E637ABDA83F0E1E7FA0BE/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/5FC1BCCA0F1EB6E656233401E330A7928BF58C09EF6B6B56EC69FCFAC0B3A47A/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/60B8ED34520992236C9E1859FAE4BA9DF206CC6BD75DA574E815EAF7B577C1BD/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/68B53978461355B04CA96CEE33E448CBC39CDEFEA8E907879C1D2E6A542672C4/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/6B62E238B88A3B5050DFF02AB91402C6702A822389315B4150308B774F5A0D01/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/6F7EC702F1109A564CFE009F634B27E5F82D6A309CF51B11F49846ABEEAD04B1/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/7AE69551608DB82E23DBA98CA7D059DF3F5C9E37174E581F7C154935F4362AA7/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/8C851E9DD394053BB50716EA6CDD07A48FA76AF5BB55513F898A18B2A4C64D1F/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/984DAD369079FEF2F83082F1CD944A432690F1CB0A5ECA9F009D50B385C4061A/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/C466B016831B11EEEC611208EDB50FD7BACD7E37D0037C0D1D78BD5B3D892794/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/C5D0AA2C7A2C01C52EFDF70242AA6CAAE06BCA80301A425D4E508E9ACD33DF44/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/CDDFD5D61010F7B15CFD78C49865C0134E8E037779DD80C6B4DED7DEB0D4CBB7/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/DDFAB26C3991470523BD7543D946A24A9CFEC9D5BEC197B7BD963E1507057A93/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/E174442450BBA2A570B0166CDF04844C3A5D1F7199DC59E0FA49F1BBACA47F5F/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/E6CE9621CF266A675DB7E3EBABD5D636E46E8006F116A0F7F0769B87DDDBFBB0/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 -1 1766860935000^7978FD0F9DD4EB6208A2D2113011F95E5C7EE80072BA3B7E4AC737CC771D621B.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 0 1766860935000^013C09075DF303BB5822FEEFE57F26B9F0DEE6DD382B116816FCDC2B7CAF0696.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 1 1766860935000^4EEBAD21A82BAC51A7B952DA32DACB37A653695D5D512A348CF15DB9B7DED5AC.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 10 1766860938000^84544F34B1297ED8F5FD4B437FCD4F1044FD0D40A0B270F8C7E79D89AA058DD6.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 11 1766860938000^023B07336455CD39B03DC52AF523DA19B588FD32ED7A4BB5BBE9ABE59ED75195.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 12 1766860939000^49685AA6F0064868886EBA984B072F6C63F92FC3315C29DDDF750D5B56E87D6B.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 13 1766860939000^A2475B1C99AC9F8B9A4D8B2BD8CB39A76FAA2E13AB2F7CEADA4AB02B42FF8BE4.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 14 1766860939000^2D0C93D837FFF096346E10F276BD1F08ECE4A2EC94BE9BC58759EBABAB1F2E42.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 15 1766860939000^4FA9AFA0EA50B833B342716C7745B9A39A7C0F9A09B4666CA67080A49EAB611B.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 16 1766860939000^A65760BEED125117DE7DF2F481A0F7CD250FFB579138ECC1A19C8401DAFCEB51.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 17 1766860940000^226FA64E1B4591C150F595D8408530502417C7FFEE3915589382F9C3B585053C.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 18 1766860940000^1ABF20687FB34275E0EE737538E7E5D4F15CDCB128C4F332043CB76AC78B0F05.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 19 1766860940000^89A44A1912B20AE873402C287CE09C4D41073F0A5B703CB22FD5272BB907FC19.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 2 1766860936000^A8D1C5244B85155B130EFCA9CF25185A9B7060F549603B993F2CA98FB269B178.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 20 1766860940000^72905A7F6A0A859003049827534B579BE090F0B6A221D14584745DAE6A999943.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 21 1766860948000^71168CE7419FFDB6E945655E1B3597A726111666C305EDA9A76D97FD7215E929.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 22 1766860967000^A5E8805E1AC44CF2A07606613DE14704BC1943268EFF48BF181E7216D8F07AA3.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 3 1766860936000^66806071E91EAC9E8F90A81700DD37FB56B7DFDE7B32FE47E142BAC58907173C.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 4 1766860937000^1A097ACE63079C7D91AC964F783834D172C41CD3FAD0D27A5B95DC6E1E5B7D6A.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 5 1766860937000^746153300B51309B664E4035E092CAE07F487A2B44D5DB79B770C7D9968D45CA.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 6 1766860937000^3F1EFF11C729D6175922400928667D3391E3D7B4B29CECD67987F3259A5003C5.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 7 1766860938000^D2867FC7F2A08C6678BAA320EE449F89E56D81EDC3BFFA79F9DA64BF98701014.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 8 1766860938000^AA9E5246E533F704E42BED13B878B830B91143AE71C8603FFCF187CF39904915.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/meta_stone F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6 9 1766860938000^E4B12653516EB8690ED18ECFF3EA7AB5EA3FF70881D730F5859F193F5872DF15.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/F50B84DBC36E937524F482A095F81F7FA3ABC63CCBB65DB2719F5DE80E59D6C6/test ib.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/04E79CE54F49DCEA75652ADF674DC9B21BA641944AD97ED7ED1369CF3A880E8D/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/0647EB78DB2C48AF3AE9D3EF7989A3DDA1A797D04BE18DB1210B3504BC39BA4E/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/08B4A7A62BC7DE27C180A3F70FA7C6C8F9728A98E79B200D9B2EE2D11E62CD97/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/0B2FEF92D3630CDFDD14C453DDDA288478022CEB778E0BB4ACC9C9511C770A39/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3757E01592FABCA5D139026F156318A7F86AC097CC10ABA243D4E665EB3550C5/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3A66623B180568E2AE3E95BD6C48684E765B6B8C2147A4DD13426B6808AC2567/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/3EADB84024E06764489225E537F285BF7F7F85C3ACC013F0FCB28B79E227DE2D/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/471A5F0BA13425E3412A376452549E5158CD5516C4E005872A50A10D7390CF12/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/6E6EA2A701C3AC1B5BCD766F39C59BA7BC5139AAF0EB5E9DE8814F77C4A192A7/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/7EF033B1C3C39C05359C89C301DEE7365F6F7A816776F6A0E540CE1A212CD612/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/834AECEDC108F37DADA5BD3583FA9C1E612AFA3FFFB1153CA0CD2F51239AD93F/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/8CA9BDE2ED96C7C8039D5AF78AEF620A985E32352238DEACACC7E2329006B9B9/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/90C61CC1159B21E9FE686C06D5C76FF6F5236F8C7D39CC183B8C81CE36471D9C/fork.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/A89842F2240358AEC12AE59014A14875AB6FC5C8EF2A5C50D8BD92EB5F54F4B6/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/B10FBD60588500D94D6CDA19E5E24DF7F4C3EDF66368E5875F13C4BFF9A8FD03/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/B5A0CAF33ACC64A57647ADD18B4F0CAD820F427819BB4615567131994D0399AB/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/C0223AA1B3B147E3AFC4233C60025BE4C975652EBF77C24D8B8FABC413594137/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/D07097470D6970574C539E1E16AEFCE0A3A67987C7554C9EEFA7204D6D1D81D4/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/D92466D1FCE56DB0828A2509590DDA0040FF250FD4FCE7F3E45B5D84887C83F0/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/E035FDD6BDD26B164AF5AD675D0567BC0FFB6E10E14BAFA6617EDB536EE162B9/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/E8B2955902784AFC4B4A251C771EC770D94234440C8B02C63B12628C29447069/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/EF9D3619C817B27EC4402BC215D08CC95A83E5042F4FC35AE2E737AC33B05629/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F0D5006EF21791D68460DB0111983602EC450BBFFB3E47134D357A1BCD9FBD15/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F15D698186AADD2BA9F3028F4F84630505D06220AB6482381FB35755AFC77E5F/mut8.json +1 -0
- package/ibgib/registerNewI_troot/4215392c-space_baseDir/tmp/4215392c-space/dna/F1913D9CF3C4F2CDE56C39EA86F8EB9A65D8FA22750DACD2B496EF27D88DE260/mut8.json +1 -0
- package/package.json +1 -1
- package/src/agent-helpers.mts +119 -18
- package/src/sync/sync-innerspace.respec.mts +289 -0
- package/src/timeline/timeline-api.respec.mts +255 -0
- package/src/witness/space/inner-space/inner-space-v1.mts +5 -3
- package/src/witness/space/metaspace/metaspace-base.mts +31 -5
- package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mts +43 -12
- package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mts +2 -1
- package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mts +92 -0
- package/src/witness/space/space-helper.mts +1 -1
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module timeline-api.respec
|
|
3
|
+
*
|
|
4
|
+
* specs for the high-level timeline api.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
firstOfEach, firstOfAll, ifWe,
|
|
9
|
+
lastOfEach, lastOfAll,
|
|
10
|
+
ifWeMight, iReckon, respecfully, respecfullyDear
|
|
11
|
+
} from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
|
|
12
|
+
const maam = `[${import.meta.url}]`, sir = maam;
|
|
13
|
+
import { getUUID } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
|
|
14
|
+
import { IbGibData_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
|
|
15
|
+
import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
|
|
16
|
+
|
|
17
|
+
import { GLOBAL_LOG_A_LOT } from '../core-constants.mjs';
|
|
18
|
+
import { InnerSpace_V1 } from '../witness/space/inner-space/inner-space-v1.mjs';
|
|
19
|
+
import { getLatestAddrs, getFromSpace } from '../witness/space/space-helper.mjs';
|
|
20
|
+
import {
|
|
21
|
+
createTimeline, mut8Timeline, getHistory, appendToTimeline
|
|
22
|
+
} from './timeline-api.mjs';
|
|
23
|
+
import { Metaspace_Innerspace } from '../witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs';
|
|
24
|
+
import { resetInnerSpaces } from '../witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs';
|
|
25
|
+
|
|
26
|
+
const logalot = GLOBAL_LOG_A_LOT;
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
interface TestData extends IbGibData_V1 {
|
|
30
|
+
note?: string;
|
|
31
|
+
testId?: string;
|
|
32
|
+
uniq?: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
respecfully(sir, `[timeline-api]`, async () => {
|
|
36
|
+
|
|
37
|
+
let space: InnerSpace_V1;
|
|
38
|
+
let metaspace: Metaspace_Innerspace;
|
|
39
|
+
|
|
40
|
+
firstOfEach(sir, async () => {
|
|
41
|
+
resetInnerSpaces();
|
|
42
|
+
metaspace = new Metaspace_Innerspace(undefined);
|
|
43
|
+
await metaspace.initialize({
|
|
44
|
+
getFnAlert: () => async ({ title, msg }) => { console.log(`[Alert] ${title}: ${msg}`); },
|
|
45
|
+
getFnPrompt: () => async ({ title, msg }) => { console.log(`[Prompt] ${title}: ${msg}`); return ''; },
|
|
46
|
+
getFnPromptPassword: () => async (title, msg) => { console.log(`[PromptPwd] ${title}: ${msg}`); return 'password'; },
|
|
47
|
+
});
|
|
48
|
+
space = metaspace.zeroSpace as InnerSpace_V1;
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
await ifWe(sir, `createTimeline`, async () => {
|
|
52
|
+
const res = await createTimeline<TestData>({
|
|
53
|
+
space,
|
|
54
|
+
metaspace,
|
|
55
|
+
data: { note: 'first timeline' },
|
|
56
|
+
ib: 'timeline',
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
const newTimeline = res.newIbGib;
|
|
60
|
+
iReckon(sir, newTimeline).asTo('newTimeline').isGonnaBeTruthy();
|
|
61
|
+
const addr = getIbGibAddr({ ibGib: newTimeline });
|
|
62
|
+
|
|
63
|
+
// verify persistence
|
|
64
|
+
const resGet = await getFromSpace({ addr, space });
|
|
65
|
+
iReckon(sir, resGet.success).asTo('persisted success').isGonnaBeTrue();
|
|
66
|
+
iReckon(sir, resGet.ibGibs![0]).asTo('persisted ibGib').isGonnaBe(newTimeline);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
await ifWe(sir, `mut8Timeline`, async () => {
|
|
70
|
+
// Arrange
|
|
71
|
+
const resCreate = await createTimeline<TestData>({
|
|
72
|
+
space,
|
|
73
|
+
metaspace,
|
|
74
|
+
data: { note: 'orig' },
|
|
75
|
+
ib: 'timeline',
|
|
76
|
+
});
|
|
77
|
+
const timeline = resCreate.newIbGib;
|
|
78
|
+
console.log(`[mut8Timeline] created timeline n=${timeline.data!.n}`);
|
|
79
|
+
const initialPastLength = timeline.rel8ns?.past?.length || 0;
|
|
80
|
+
console.log(`[mut8Timeline] created timeline past length=${initialPastLength}`);
|
|
81
|
+
|
|
82
|
+
// Act
|
|
83
|
+
const mutatedTimeline = await mut8Timeline<TestData>({
|
|
84
|
+
timeline,
|
|
85
|
+
metaspace,
|
|
86
|
+
space,
|
|
87
|
+
mut8Opts: {
|
|
88
|
+
dataToAddOrPatch: { note: 'mutated' },
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
console.log(`[mut8Timeline] mutated timeline n=${mutatedTimeline.data!.n}`);
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
// Assert
|
|
95
|
+
iReckon(sir, mutatedTimeline).asTo('mutatedTimeline').isGonnaBeTruthy();
|
|
96
|
+
iReckon(sir, mutatedTimeline.data!.note).asTo('data.note').isGonnaBe('mutated');
|
|
97
|
+
|
|
98
|
+
// n should increment by 1
|
|
99
|
+
const expectedN = (timeline.data!.n || 0) + 1;
|
|
100
|
+
iReckon(sir, mutatedTimeline.data!.n).asTo('data.n').isGonnaBe(expectedN);
|
|
101
|
+
|
|
102
|
+
iReckon(sir, mutatedTimeline.rel8ns!.past).asTo('past').isGonnaBeTruthy();
|
|
103
|
+
// past length should include the previous frame + whatever it had
|
|
104
|
+
iReckon(sir, mutatedTimeline.rel8ns!.past!.length).asTo('past length').isGonnaBe(initialPastLength + 1);
|
|
105
|
+
iReckon(sir, mutatedTimeline.rel8ns!.past!.at(-1)).asTo('past addr').isGonnaBe(getIbGibAddr({ ibGib: timeline }));
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
await ifWe(sir, `appendToTimeline`, async () => {
|
|
109
|
+
// Arrange
|
|
110
|
+
const resCreate = await createTimeline<TestData>({
|
|
111
|
+
space,
|
|
112
|
+
metaspace,
|
|
113
|
+
data: { n: 0 },
|
|
114
|
+
ib: 'timeline',
|
|
115
|
+
});
|
|
116
|
+
let timeline = resCreate.newIbGib;
|
|
117
|
+
const rel8nInfos = [{
|
|
118
|
+
rel8nName: 'attachment',
|
|
119
|
+
ibGibs: [timeline] // just attaching itself as a test, weird but valid structure
|
|
120
|
+
}];
|
|
121
|
+
const timelinePastLength = timeline.rel8ns?.past?.length || 0;
|
|
122
|
+
|
|
123
|
+
// Act
|
|
124
|
+
const appendedTimeline = await appendToTimeline({
|
|
125
|
+
timeline,
|
|
126
|
+
rel8nInfos,
|
|
127
|
+
metaspace,
|
|
128
|
+
space,
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// Assert
|
|
132
|
+
iReckon(sir, appendedTimeline).asTo('appendedTimeline').isGonnaBeTruthy();
|
|
133
|
+
iReckon(sir, appendedTimeline.rel8ns!.attachment).asTo('attachment').isGonnaBeTruthy();
|
|
134
|
+
iReckon(sir, appendedTimeline.rel8ns!.past?.length).asTo('past').isGonnaBe(timelinePastLength + 1);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
await ifWe(sir, `getHistory`, async () => {
|
|
138
|
+
// Arrange
|
|
139
|
+
let t0 = (await createTimeline<TestData>({ space, metaspace, data: { n: 0 }, ib: 'timeline' })).newIbGib;
|
|
140
|
+
let t1 = await mut8Timeline<TestData>({ timeline: t0, metaspace, space, mut8Opts: { dataToAddOrPatch: { n: 1 } } });
|
|
141
|
+
let t2 = await mut8Timeline<TestData>({ timeline: t1, metaspace, space, mut8Opts: { dataToAddOrPatch: { n: 2 } } });
|
|
142
|
+
|
|
143
|
+
// Act
|
|
144
|
+
const history = await getHistory({
|
|
145
|
+
timeline: t2,
|
|
146
|
+
metaspace,
|
|
147
|
+
space,
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
// Assert
|
|
151
|
+
// t0 is actually 2nd frame (fork -> mut8).
|
|
152
|
+
// so history is [genesis, t0, t1]. length 3.
|
|
153
|
+
iReckon(sir, history.orderedPastIbGibs.length).asTo('history length').isGonnaBe(3);
|
|
154
|
+
// index 0 is genesis (the fork)
|
|
155
|
+
// index 1 is t0
|
|
156
|
+
// index 2 is t1
|
|
157
|
+
iReckon(sir, getIbGibAddr({ ibGib: history.orderedPastIbGibs[1] })).asTo('t0').isGonnaBe(getIbGibAddr({ ibGib: t0 }));
|
|
158
|
+
iReckon(sir, getIbGibAddr({ ibGib: history.orderedPastIbGibs[2] })).asTo('t1').isGonnaBe(getIbGibAddr({ ibGib: t1 }));
|
|
159
|
+
iReckon(sir, getIbGibAddr({ ibGib: history.headIbGib })).asTo('head').isGonnaBe(getIbGibAddr({ ibGib: t2 }));
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
await ifWe(sir, `Concurrency & Locking (Stress Test)`, async () => {
|
|
163
|
+
// const concurrencyLevels = [1, 2, 5, 50, 1000]; // too slow, because the locking mechanism doesn't scale well.
|
|
164
|
+
const concurrencyLevels = [1, 2, 5, 50];
|
|
165
|
+
|
|
166
|
+
for (const N of concurrencyLevels) {
|
|
167
|
+
if (logalot) { console.log(`[Stress Test] Testing concurrency level: ${N}`); }
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
// Arrange: Baseline
|
|
171
|
+
let tInitial = (await createTimeline<TestData>({
|
|
172
|
+
space,
|
|
173
|
+
metaspace,
|
|
174
|
+
data: { n: 0, testId: `concurrent-${N}` },
|
|
175
|
+
ib: 'timeline',
|
|
176
|
+
})).newIbGib;
|
|
177
|
+
|
|
178
|
+
// Initial state check
|
|
179
|
+
const initialN = (tInitial.data!.n || 0); // should be 1
|
|
180
|
+
const historyInitial = await getHistory({ timeline: tInitial, metaspace, space });
|
|
181
|
+
const initialHistoryLength = historyInitial.orderedPastIbGibs.length; // should be 1 (genesis)
|
|
182
|
+
console.log(`already had addr for fork expected (I: 585a392f1c5aa0eedc1aedd8bbc31325)`);
|
|
183
|
+
|
|
184
|
+
// Act: Launch N mutations simultaneously
|
|
185
|
+
/**
|
|
186
|
+
* I'm getting output (warnings?) that the transform ibgib addr
|
|
187
|
+
* already exists. This stems from the fact that dna/transform
|
|
188
|
+
* ibgibs do not have timestamps or anything, they simply are
|
|
189
|
+
* memoized args to the transform functions. So we need something
|
|
190
|
+
* unique _in the arg itself_, which in this case means in the
|
|
191
|
+
* `dataToAddOrPatch` field.
|
|
192
|
+
*
|
|
193
|
+
* Note, however, that it is expected for the original `fork`
|
|
194
|
+
* transform that created tInitial to be common and for it to
|
|
195
|
+
* already have this fork dna ibgib. But this shouldn't happen for
|
|
196
|
+
* each mut8 transform.
|
|
197
|
+
*/
|
|
198
|
+
const uniqueIdsForUniqueTransforms: string[] = [];
|
|
199
|
+
for (let i = 0; i < N; i++) {
|
|
200
|
+
uniqueIdsForUniqueTransforms.push(await getUUID());
|
|
201
|
+
}
|
|
202
|
+
const promises: Promise<any>[] = [];
|
|
203
|
+
for (let i = 0; i < N; i++) {
|
|
204
|
+
promises.push(mut8Timeline<TestData>({
|
|
205
|
+
timeline: tInitial, // All start referencing the same initial frame (or logically the timeline itself)
|
|
206
|
+
// Note: In reality, if we pass the *same* object tInitial, mut8Timeline should
|
|
207
|
+
// resolve the *latest* inside the function.
|
|
208
|
+
metaspace,
|
|
209
|
+
space,
|
|
210
|
+
mut8Opts: {
|
|
211
|
+
dataToAddOrPatch: {
|
|
212
|
+
uniqueId: uniqueIdsForUniqueTransforms.pop(),
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// No skipLock! We want them to contend.
|
|
216
|
+
}));
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
try {
|
|
220
|
+
// Wait for all to complete
|
|
221
|
+
await Promise.all(promises);
|
|
222
|
+
|
|
223
|
+
// Verification
|
|
224
|
+
// 1. Get Latest Address
|
|
225
|
+
const resLatest = await getLatestAddrs({ ibGibs: [tInitial], space });
|
|
226
|
+
const latestAddr = resLatest.data!.latestAddrsMap![getIbGibAddr({ ibGib: tInitial })] as string;
|
|
227
|
+
|
|
228
|
+
iReckon(sir, latestAddr).asTo(`[N=${N}] latestAddr exists`).isGonnaBeTruthy();
|
|
229
|
+
|
|
230
|
+
// 2. Load the latest frame
|
|
231
|
+
const resGet = await getFromSpace({ addr: latestAddr, space });
|
|
232
|
+
const latestIbGib = resGet.ibGibs![0];
|
|
233
|
+
|
|
234
|
+
// 3. Verify data.n
|
|
235
|
+
// Initial n=1. We did N mutations.
|
|
236
|
+
// Each mutation increments nCounter.
|
|
237
|
+
const expectedN = initialN + N;
|
|
238
|
+
iReckon(sir, latestIbGib.data!.n).asTo(`[N=${N}] data.n should be ${expectedN}`).isGonnaBe(expectedN);
|
|
239
|
+
|
|
240
|
+
// 4. Verify Lineage (no divergence)
|
|
241
|
+
// History length should be initialHistoryLength + N
|
|
242
|
+
const history = await getHistory({ timeline: latestIbGib, metaspace, space });
|
|
243
|
+
const expectedHistoryLength = initialHistoryLength + N;
|
|
244
|
+
iReckon(sir, history.orderedPastIbGibs.length).asTo(`[N=${N}] history length`).isGonnaBe(expectedHistoryLength);
|
|
245
|
+
|
|
246
|
+
if (logalot) { console.log(`[Stress Test] [N=${N}] SUCCESS. Final n=${latestIbGib.data!.n}`); }
|
|
247
|
+
|
|
248
|
+
} catch (err) {
|
|
249
|
+
console.error(`[Stress Test] [N=${N}] FAILED:`, err);
|
|
250
|
+
throw err;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { clone, extractErrorMsg, groupBy, pretty } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
|
|
2
2
|
import { IbGibAddr } from '@ibgib/ts-gib/dist/types.mjs';
|
|
3
3
|
import { getIbGibAddr, } from '@ibgib/ts-gib/dist/helper.mjs';
|
|
4
|
-
import { IbGib_V1, getGib, } from '@ibgib/ts-gib/dist/V1/index.mjs';
|
|
5
4
|
import { validateIbGibIntrinsically } from '@ibgib/ts-gib/dist/V1/validate-helper.mjs';
|
|
6
5
|
|
|
7
6
|
import { GLOBAL_LOG_A_LOT } from '../../../core-constants.mjs';
|
|
@@ -14,6 +13,8 @@ import { getSpaceIb, } from '../space-helper.mjs';
|
|
|
14
13
|
import { getTjpAddr } from '../../../common/other/ibgib-helper.mjs';
|
|
15
14
|
import { ReconciliationSpaceBase, ReconciliationSpaceData, ReconciliationSpaceRel8ns } from '../reconciliation-space/reconciliation-space-base.mjs';
|
|
16
15
|
import { DEFAULT_INNER_SPACE_DATA_V1, InnerSpaceData_V1, InnerSpaceRel8ns_V1 } from './inner-space-types.mjs';
|
|
16
|
+
import { IbGib_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
|
|
17
|
+
import { getGib } from '@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs';
|
|
17
18
|
|
|
18
19
|
const logalot = GLOBAL_LOG_A_LOT;
|
|
19
20
|
|
|
@@ -197,7 +198,7 @@ export class InnerSpace_V1<
|
|
|
197
198
|
|
|
198
199
|
if (addrsAlreadyHave.length > 0) {
|
|
199
200
|
resultData.addrsAlreadyHave = addrsAlreadyHave;
|
|
200
|
-
resultData.warnings = (resultData.warnings || []).concat([`${lc} already had addr(s)
|
|
201
|
+
resultData.warnings = (resultData.warnings || []).concat([`${lc} already had addr(s): ${addrsAlreadyHave.join('|')}`]);
|
|
201
202
|
}
|
|
202
203
|
resultData.success = true;
|
|
203
204
|
} catch (error) {
|
|
@@ -321,7 +322,8 @@ export class InnerSpace_V1<
|
|
|
321
322
|
const timeline = ibGibsInSpaceByTjp[tjpAddr];
|
|
322
323
|
|
|
323
324
|
if (timeline.some(ibGib => ibGib.data?.n === undefined)) {
|
|
324
|
-
|
|
325
|
+
const filtered = timeline.filter(ibGib => ibGib.data?.n === undefined);
|
|
326
|
+
console.warn(`${lc} timeline includes ibgibs with ibGib.data?.n === undefined.\nfiltered:\n${filtered.map(x => pretty(x)).join('\n')}}(W: 7360a8e81b05accf244fb4b86e796325)`);
|
|
325
327
|
}
|
|
326
328
|
// sort mutates array in place
|
|
327
329
|
timeline.sort((a, b) => (a.data?.n ?? -1) > (b.data?.n ?? -1) ? 1 : -1); // sorts ascending, e.g., 0,1,2...[Highest]
|
|
@@ -1539,11 +1539,37 @@ export abstract class MetaspaceBase implements MetaspaceService {
|
|
|
1539
1539
|
if (!resGetLatest) { throw new Error(`resGetLatest falsy (E: 3851bbe4427ae11771f222234e8c6622)`); }
|
|
1540
1540
|
if (!resGetLatest.data) { throw new Error(`invalid resGetLatest: data falsy (E: 134e0f1f65edc69c6951c32e00a4bb22)`); }
|
|
1541
1541
|
if (resGetLatest.data.success) {
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1542
|
+
// Should have addrs map
|
|
1543
|
+
const latestAddrsMap = resGetLatest.data.latestAddrsMap;
|
|
1544
|
+
if (!latestAddrsMap) {
|
|
1545
|
+
// fallback to old way just in case? Or just error.
|
|
1546
|
+
// The error I saw had latestAddrsMap but no addrs.
|
|
1547
|
+
// So we should look at the map.
|
|
1548
|
+
if (resGetLatest.data.addrs?.length === 1) {
|
|
1549
|
+
return resGetLatest.data.addrs[0];
|
|
1550
|
+
} else if (resGetLatest.data.addrsNotFound?.length === 1) {
|
|
1551
|
+
return undefined;
|
|
1552
|
+
}
|
|
1553
|
+
} else {
|
|
1554
|
+
// We have the map. Ideally we want the one entry.
|
|
1555
|
+
const keys = Object.keys(latestAddrsMap);
|
|
1556
|
+
if (keys.length === 1) {
|
|
1557
|
+
return latestAddrsMap[keys[0]] || undefined;
|
|
1558
|
+
} else if (keys.length === 0) {
|
|
1559
|
+
// could be not found?
|
|
1560
|
+
if (resGetLatest.data.addrsNotFound?.length === 1) {
|
|
1561
|
+
return undefined;
|
|
1562
|
+
} else {
|
|
1563
|
+
// If we didn't find it, and success is true, maybe it's just undefined?
|
|
1564
|
+
// But usually getLatestAddrs returns map entries for found ones.
|
|
1565
|
+
return undefined;
|
|
1566
|
+
}
|
|
1567
|
+
} else {
|
|
1568
|
+
throw new Error(`(UNEXPECTED) latestAddrsMap has multiple entries? We only asked for one. (E: 790518290f6b46729017684698539222)`);
|
|
1569
|
+
}
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1572
|
+
if (resGetLatest.data.addrsErrored?.length === 1) {
|
|
1547
1573
|
const emsg = resGetLatest.data.errors?.join('|') ?? "[unspecified error(s)] (E: 24f338036aa84ac99e3c39a660207222)";
|
|
1548
1574
|
throw new Error(`resGetLatest had error(s): ${emsg}`);
|
|
1549
1575
|
} else {
|
|
@@ -9,7 +9,40 @@ import { DEFAULT_LOCAL_SPACE_POLLING_INTERVAL_MS, } from "../../../../witness/sp
|
|
|
9
9
|
import { InnerSpace_V1, } from "../../inner-space/inner-space-v1.mjs";
|
|
10
10
|
import { InnerSpaceData_V1 } from "../../inner-space/inner-space-types.mjs";
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
const innerSpaces: { [spaceId: string]: IbGibSpaceAny } = {};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Extracts the spaceId from the ib string.
|
|
17
|
+
*
|
|
18
|
+
* ib format: `witness space [classname] [name] [id] [type] [subtype]`
|
|
19
|
+
*/
|
|
20
|
+
export function getSpaceIdFromIb(ib: string): string {
|
|
21
|
+
if (!ib) { throw new Error(`ib required. (E: 7c28c8e1a8a24345bb344155b4131422)`); }
|
|
22
|
+
const parts = ib.split(' ');
|
|
23
|
+
// witness space classname name id ...
|
|
24
|
+
// 0 1 2 3 4
|
|
25
|
+
if (parts.length < 5) { throw new Error(`invalid space ib format: ${ib} (E: 14a84497e59648949822067786481223)`); }
|
|
26
|
+
return parts[4];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Manually registers a space in the module-level registry.
|
|
31
|
+
* Use this when creating spaces outside of the standard factory functions
|
|
32
|
+
* (e.g. via direct constructor calls) to ensure they are resolvable by DTO.
|
|
33
|
+
*/
|
|
34
|
+
export const registerInnerSpace = (space: IbGibSpaceAny) => {
|
|
35
|
+
const spaceId = getSpaceIdFromIb(space.ib);
|
|
36
|
+
innerSpaces[spaceId] = space;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Resets the internal registry of spaces.
|
|
41
|
+
* USE FOR TESTING ONLY.
|
|
42
|
+
*/
|
|
43
|
+
export const resetInnerSpaces = () => {
|
|
44
|
+
Object.keys(innerSpaces).forEach(key => delete innerSpaces[key]);
|
|
45
|
+
}
|
|
13
46
|
|
|
14
47
|
export const fnCreateNewLocalSpace: LocalSpaceFactoryFunction = async ({
|
|
15
48
|
allowCancel,
|
|
@@ -73,9 +106,7 @@ Enter space name:
|
|
|
73
106
|
if (newLocalSpace.gib === GIB) { throw new Error(`localSpace.gib not updated correctly.`); }
|
|
74
107
|
if (logalot) { console.log(`${lc} localSpace.gib: ${newLocalSpace.gib} (after sha256v1)`); }
|
|
75
108
|
|
|
76
|
-
|
|
77
|
-
const tjpGib = gibInfo.tjpGib ?? newLocalSpace.gib!;
|
|
78
|
-
innerSpaces[tjpGib] = newLocalSpace;
|
|
109
|
+
registerInnerSpace(newLocalSpace as IbGibSpaceAny);
|
|
79
110
|
|
|
80
111
|
return newLocalSpace as IbGibSpaceAny;
|
|
81
112
|
} catch (error) {
|
|
@@ -96,14 +127,15 @@ export const fnDtoToSpace: DtoToSpaceFunction = async (spaceDto) => {
|
|
|
96
127
|
if ((spaceDto as InnerSpace_V1).ibGibs) {
|
|
97
128
|
return spaceDto as InnerSpace_V1;
|
|
98
129
|
} else {
|
|
99
|
-
|
|
130
|
+
// test is outputting a lot of these logs
|
|
131
|
+
// console.log(`${lc} spaceDto: ${pretty(spaceDto)} (I: d69ab87f2fa8360ff8e60e78aa15c825)`); // I want to keep this in if we need to turn the logging back on
|
|
100
132
|
|
|
101
133
|
if (!spaceDto.data) { throw new Error(`invalid spaceDto. InnerSpace_V1 should have truthy data. (E: d402fda7a6a53668b655c2885029a423)`); }
|
|
102
|
-
console.dir(spaceDto);
|
|
134
|
+
// console.dir(spaceDto); // I want to keep this in if we need to turn the logging back on
|
|
103
135
|
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
const existingSpace = innerSpaces[
|
|
136
|
+
const spaceId = getSpaceIdFromIb(spaceDto.ib);
|
|
137
|
+
// console.log(`${lc} spaceDto.gib: ${spaceDto.gib}\ninnerSpaces keys:\n${Object.keys(innerSpaces).join('\n')}`);
|
|
138
|
+
const existingSpace = innerSpaces[spaceId];
|
|
107
139
|
if (existingSpace) {
|
|
108
140
|
return existingSpace;
|
|
109
141
|
} else {
|
|
@@ -111,9 +143,8 @@ export const fnDtoToSpace: DtoToSpaceFunction = async (spaceDto) => {
|
|
|
111
143
|
console.warn(`${lc} in memory innerspace dto that isnt' the reference to the object itself in memory, and we don't have it in the inner spaces map? i guess we'll create a new one from the dto (W: b8973f3a43f546eeaf59f60331896e75)`)
|
|
112
144
|
let space = new InnerSpace_V1(spaceDto.data as InnerSpaceData_V1, spaceDto.rel8ns);
|
|
113
145
|
await space.initialized;
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
innerSpaces[tjpGib] = space;
|
|
146
|
+
|
|
147
|
+
registerInnerSpace(space);
|
|
117
148
|
return space;
|
|
118
149
|
}
|
|
119
150
|
}
|
|
@@ -12,7 +12,7 @@ import { IbGibSpaceAny } from '../../../../witness/space/space-base-v1.mjs';
|
|
|
12
12
|
import { InnerSpace_V1 } from '../../../../witness/space/inner-space/inner-space-v1.mjs';
|
|
13
13
|
import { IbGibCacheService } from '../../../../common/cache/cache-types.mjs';
|
|
14
14
|
import { MetaspaceFactory } from '../metaspace-types.mjs';
|
|
15
|
-
import { fnCreateNewLocalSpace, fnDtoToSpace } from './metaspace-innerspace-helper.mjs';
|
|
15
|
+
import { fnCreateNewLocalSpace, fnDtoToSpace, registerInnerSpace } from './metaspace-innerspace-helper.mjs';
|
|
16
16
|
import { MetaspaceBase } from '../metaspace-base.mjs';
|
|
17
17
|
|
|
18
18
|
const logalot = GLOBAL_LOG_A_LOT;
|
|
@@ -75,6 +75,7 @@ export class Metaspace_Innerspace extends MetaspaceBase {
|
|
|
75
75
|
const zeroSpace = new InnerSpace_V1(/*initialData*/ undefined as any, /*initialRel8ns*/ undefined);
|
|
76
76
|
zeroSpace.gib = 'gib';
|
|
77
77
|
this._zeroSpace = zeroSpace;
|
|
78
|
+
registerInnerSpace(this._zeroSpace);
|
|
78
79
|
return zeroSpace;
|
|
79
80
|
}
|
|
80
81
|
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module metaspace-innerspace.respec
|
|
3
|
+
*
|
|
4
|
+
* specs for the in-memory metaspace implementation.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
firstOfEach, firstOfAll, ifWe,
|
|
9
|
+
lastOfEach, lastOfAll,
|
|
10
|
+
ifWeMight, iReckon, respecfully, respecfullyDear
|
|
11
|
+
} from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
|
|
12
|
+
|
|
13
|
+
import { IbGib_V1, IbGibData_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
|
|
14
|
+
import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
|
|
15
|
+
import { InnerSpace_V1 } from '../../../../witness/space/inner-space/inner-space-v1.mjs';
|
|
16
|
+
import { Metaspace_Innerspace } from './metaspace-innerspace.mjs';
|
|
17
|
+
import { createTimeline, mut8Timeline } from '../../../../timeline/timeline-api.mjs';
|
|
18
|
+
import { MetaspaceService } from '../metaspace-types.mjs';
|
|
19
|
+
import { resetInnerSpaces } from './metaspace-innerspace-helper.mjs';
|
|
20
|
+
|
|
21
|
+
const maam = `[${import.meta.url}]`, sir = maam;
|
|
22
|
+
|
|
23
|
+
respecfully(sir, `[metaspace-innerspace]`, async () => {
|
|
24
|
+
|
|
25
|
+
let metaspace: Metaspace_Innerspace;
|
|
26
|
+
|
|
27
|
+
firstOfEach(sir, async () => {
|
|
28
|
+
resetInnerSpaces();
|
|
29
|
+
metaspace = new Metaspace_Innerspace(undefined); // no cache for now
|
|
30
|
+
await metaspace.initialize({
|
|
31
|
+
getFnAlert: () => async ({ title, msg }) => { console.log(`[Alert] ${title}: ${msg}`); },
|
|
32
|
+
getFnPrompt: () => async ({ title, msg }) => { console.log(`[Prompt] ${title}: ${msg}`); return ''; },
|
|
33
|
+
getFnPromptPassword: () => async (title, msg) => { console.log(`[PromptPwd] ${title}: ${msg}`); return null; },
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
await ifWe(sir, `can instantiate`, async () => {
|
|
38
|
+
iReckon(sir, metaspace).asTo('metaspace').isGonnaBeTruthy();
|
|
39
|
+
iReckon(sir, metaspace.initialized).asTo('initialized').isGonnaBeTrue();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
await ifWe(sir, `has zeroSpace`, async () => {
|
|
43
|
+
const zs = metaspace.zeroSpace;
|
|
44
|
+
iReckon(sir, zs).asTo('zeroSpace').isGonnaBeTruthy();
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
await ifWe(sir, `can createTimeline and track latest`, async () => {
|
|
48
|
+
// This implicitly tests getLatestAddr/s via timeline-api usage if we were using it,
|
|
49
|
+
// but here we call it directly or via minimal timeline op.
|
|
50
|
+
|
|
51
|
+
// 1. Create a timeline via timeline-api using this metaspace
|
|
52
|
+
const resCreate = await createTimeline({
|
|
53
|
+
space: metaspace.zeroSpace,
|
|
54
|
+
metaspace: metaspace,
|
|
55
|
+
data: { n: 0 },
|
|
56
|
+
ib: 'timeline'
|
|
57
|
+
});
|
|
58
|
+
const t0 = resCreate.newIbGib;
|
|
59
|
+
const t0Addr = getIbGibAddr({ ibGib: t0 });
|
|
60
|
+
|
|
61
|
+
// 2. Verify we can get latest addr
|
|
62
|
+
// Ideally metaspace should track this automatically if registerNewIbGib is called inside createTimeline,
|
|
63
|
+
// which calls metaspace.registerNewIbGib.
|
|
64
|
+
|
|
65
|
+
// Note: timeline-api calls metaspace.registerNewIbGib.
|
|
66
|
+
// So we check if metaspace has it.
|
|
67
|
+
|
|
68
|
+
const latestAddr = await metaspace.getLatestAddr({
|
|
69
|
+
ibGib: t0,
|
|
70
|
+
space: metaspace.zeroSpace,
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
iReckon(sir, latestAddr).asTo('latestAddr matches initial').isGonnaBe(t0Addr);
|
|
74
|
+
|
|
75
|
+
// 3. Mutate
|
|
76
|
+
const t1 = await mut8Timeline({
|
|
77
|
+
timeline: t0,
|
|
78
|
+
metaspace,
|
|
79
|
+
space: metaspace.zeroSpace,
|
|
80
|
+
mut8Opts: { dataToAddOrPatch: { n: 1 } }
|
|
81
|
+
});
|
|
82
|
+
const t1Addr = getIbGibAddr({ ibGib: t1 });
|
|
83
|
+
|
|
84
|
+
// 4. Verify latest addr updated
|
|
85
|
+
const latestAddr2 = await metaspace.getLatestAddr({
|
|
86
|
+
ibGib: t0, // asking about t0's latest
|
|
87
|
+
space: metaspace.zeroSpace,
|
|
88
|
+
});
|
|
89
|
+
iReckon(sir, latestAddr2).asTo('latestAddr2 matches mutated').isGonnaBe(t1Addr);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
});
|
|
@@ -51,7 +51,6 @@ import { validateBootstrapIbGib } from './bootstrap/bootstrap-helper.mjs';
|
|
|
51
51
|
import { BootstrapData, BootstrapIbGib, BootstrapRel8ns } from './bootstrap/bootstrap-types.mjs';
|
|
52
52
|
import { newUpMetaStone } from '../../common/meta-stone/meta-stone-helper.mjs';
|
|
53
53
|
import { WITNESS_ATOM } from '../witness-constants.mjs';
|
|
54
|
-
import { SyncSpaceIbGib } from './outer-space/outer-space-types.mjs';
|
|
55
54
|
|
|
56
55
|
let logalot = GLOBAL_LOG_A_LOT;
|
|
57
56
|
|
|
@@ -1620,6 +1619,7 @@ async function createRootIbGib({
|
|
|
1620
1619
|
linkedRel8ns: [Rel8n.past, Rel8n.ancestor],
|
|
1621
1620
|
tjp: { uuid: true, timestamp: true },
|
|
1622
1621
|
dna: true,
|
|
1622
|
+
nCounter: true,
|
|
1623
1623
|
});
|
|
1624
1624
|
const { newIbGib } = resNewIbGib;
|
|
1625
1625
|
await persistTransformResult({
|