@graphprotocol/hypergraph 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/dist/connect/abis/MainVotingPlugin.json +1865 -0
  2. package/dist/connect/abis/PersonalSpaceAdminPlugin.json +531 -0
  3. package/dist/connect/abis.d.ts +115 -0
  4. package/dist/connect/abis.d.ts.map +1 -0
  5. package/dist/connect/abis.js +141 -0
  6. package/dist/connect/abis.js.map +1 -0
  7. package/dist/connect/auth-storage.d.ts +15 -0
  8. package/dist/connect/auth-storage.js +53 -0
  9. package/dist/connect/auth-storage.js.map +1 -0
  10. package/dist/connect/create-app-identity.d.ts +7 -0
  11. package/dist/connect/create-app-identity.js +15 -0
  12. package/dist/connect/create-app-identity.js.map +1 -0
  13. package/dist/connect/create-auth-url.d.ts +15 -0
  14. package/dist/connect/create-callback-params.d.ts +28 -0
  15. package/dist/connect/create-callback-params.d.ts.map +1 -1
  16. package/dist/connect/create-callback-params.js.map +1 -1
  17. package/dist/connect/create-identity-keys.d.ts +3 -0
  18. package/dist/connect/create-identity-keys.js +20 -0
  19. package/dist/connect/create-identity-keys.js.map +1 -0
  20. package/dist/connect/identity-encryption.d.ts +12 -0
  21. package/dist/connect/identity-encryption.d.ts.map +1 -1
  22. package/dist/connect/identity-encryption.js +187 -0
  23. package/dist/connect/identity-encryption.js.map +1 -0
  24. package/dist/connect/index.d.ts +11 -0
  25. package/dist/connect/index.d.ts.map +1 -1
  26. package/dist/connect/index.js +11 -0
  27. package/dist/connect/index.js.map +1 -0
  28. package/dist/connect/login.d.ts +22 -0
  29. package/dist/connect/login.d.ts.map +1 -1
  30. package/dist/connect/login.js +172 -0
  31. package/dist/connect/login.js.map +1 -0
  32. package/dist/connect/parse-auth-params.d.ts +14 -0
  33. package/dist/connect/parse-auth-params.d.ts.map +1 -0
  34. package/dist/connect/parse-auth-params.js +40 -0
  35. package/dist/connect/parse-auth-params.js.map +1 -0
  36. package/dist/connect/parse-callback-params.d.ts +13 -0
  37. package/dist/connect/parse-callback-params.d.ts.map +1 -1
  38. package/dist/connect/parse-callback-params.js +4 -1
  39. package/dist/connect/parse-callback-params.js.map +1 -1
  40. package/dist/connect/smart-account.d.ts +96 -0
  41. package/dist/connect/smart-account.d.ts.map +1 -0
  42. package/dist/connect/smart-account.js +761 -0
  43. package/dist/connect/smart-account.js.map +1 -0
  44. package/dist/connect/types.d.ts +2 -0
  45. package/dist/connect/types.d.ts.map +1 -1
  46. package/dist/connect/types.js.map +1 -1
  47. package/dist/entity/create.d.ts +8 -0
  48. package/dist/entity/create.js +51 -0
  49. package/dist/entity/create.js.map +1 -0
  50. package/dist/entity/decodedEntitiesCache.d.ts +23 -0
  51. package/dist/entity/decodedEntitiesCache.d.ts.map +1 -1
  52. package/dist/entity/decodedEntitiesCache.js +2 -0
  53. package/dist/entity/decodedEntitiesCache.js.map +1 -0
  54. package/dist/entity/delete.d.ts +12 -0
  55. package/dist/entity/delete.js +44 -0
  56. package/dist/entity/delete.js.map +1 -0
  57. package/dist/entity/entity.d.ts +18 -0
  58. package/dist/entity/entity.js +19 -0
  59. package/dist/entity/entity.js.map +1 -0
  60. package/dist/entity/entityRelationParentsMap.d.ts +4 -0
  61. package/dist/entity/entityRelationParentsMap.js +2 -0
  62. package/dist/entity/entityRelationParentsMap.js.map +1 -0
  63. package/dist/entity/findMany.d.ts +22 -0
  64. package/dist/entity/findMany.d.ts.map +1 -1
  65. package/dist/entity/findMany.js +8 -8
  66. package/dist/entity/findMany.js.map +1 -1
  67. package/dist/entity/findOne.d.ts +8 -0
  68. package/dist/entity/findOne.js +31 -0
  69. package/dist/entity/findOne.js.map +1 -0
  70. package/dist/entity/getEntityRelations.d.ts +4 -0
  71. package/dist/entity/getEntityRelations.d.ts.map +1 -1
  72. package/dist/entity/getEntityRelations.js +35 -0
  73. package/dist/entity/getEntityRelations.js.map +1 -0
  74. package/dist/entity/hasValidTypesProperty.d.ts +2 -0
  75. package/dist/entity/hasValidTypesProperty.d.ts.map +1 -0
  76. package/dist/entity/hasValidTypesProperty.js +4 -0
  77. package/dist/entity/hasValidTypesProperty.js.map +1 -0
  78. package/dist/entity/index.d.ts +9 -0
  79. package/dist/entity/index.js +9 -0
  80. package/dist/entity/index.js.map +1 -0
  81. package/dist/entity/relationParentsMap.d.ts +4 -0
  82. package/dist/entity/relationParentsMap.js +2 -0
  83. package/dist/entity/relationParentsMap.js.map +1 -0
  84. package/dist/entity/removeRelation.d.ts +7 -0
  85. package/dist/entity/removeRelation.js +17 -0
  86. package/dist/entity/removeRelation.js.map +1 -0
  87. package/dist/entity/test.d.ts +2 -0
  88. package/dist/entity/test.d.ts.map +1 -0
  89. package/dist/entity/test.js +2 -0
  90. package/dist/entity/test.js.map +1 -0
  91. package/dist/entity/types.d.ts +8 -8
  92. package/dist/entity/update.d.ts +8 -0
  93. package/dist/entity/update.js +58 -0
  94. package/dist/entity/update.js.map +1 -0
  95. package/dist/entity/variant-schema.d.ts +247 -0
  96. package/dist/entity/variant-schema.d.ts.map +1 -0
  97. package/dist/entity/variant-schema.js +204 -0
  98. package/dist/entity/variant-schema.js.map +1 -0
  99. package/dist/identity/auth-storage.d.ts +6 -0
  100. package/dist/identity/auth-storage.d.ts.map +1 -1
  101. package/dist/identity/auth-storage.js +52 -0
  102. package/dist/identity/auth-storage.js.map +1 -0
  103. package/dist/identity/get-verified-identity.d.ts +7 -0
  104. package/dist/identity/get-verified-identity.d.ts.map +1 -1
  105. package/dist/identity/get-verified-identity.js +37 -0
  106. package/dist/identity/get-verified-identity.js.map +1 -0
  107. package/dist/identity/identity-encryption.d.ts +7 -0
  108. package/dist/identity/identity-encryption.js +120 -0
  109. package/dist/identity/identity-encryption.js.map +1 -0
  110. package/dist/identity/index.d.ts +7 -0
  111. package/dist/identity/index.d.ts.map +1 -1
  112. package/dist/identity/index.js +7 -0
  113. package/dist/identity/index.js.map +1 -0
  114. package/dist/identity/logout.d.ts +3 -0
  115. package/dist/identity/logout.js +9 -0
  116. package/dist/identity/logout.js.map +1 -0
  117. package/dist/identity/prove-ownership.d.ts +15 -0
  118. package/dist/identity/prove-ownership.d.ts.map +1 -1
  119. package/dist/identity/prove-ownership.js +90 -0
  120. package/dist/identity/prove-ownership.js.map +1 -0
  121. package/dist/identity/types.d.ts +37 -0
  122. package/dist/identity/types.d.ts.map +1 -0
  123. package/dist/identity/types.js +11 -0
  124. package/dist/identity/types.js.map +1 -0
  125. package/dist/inboxes/create-inbox.d.ts +22 -0
  126. package/dist/inboxes/create-inbox.js +76 -0
  127. package/dist/inboxes/create-inbox.js.map +1 -0
  128. package/dist/inboxes/get-list-inboxes.d.ts +20 -0
  129. package/dist/inboxes/get-list-inboxes.js +45 -0
  130. package/dist/inboxes/get-list-inboxes.js.map +1 -0
  131. package/dist/inboxes/index.d.ts +11 -0
  132. package/dist/inboxes/index.js +11 -0
  133. package/dist/inboxes/index.js.map +1 -0
  134. package/dist/inboxes/merge-messages.d.ts +6 -0
  135. package/dist/inboxes/merge-messages.js +23 -0
  136. package/dist/inboxes/merge-messages.js.map +1 -0
  137. package/dist/inboxes/message-encryption.d.ts +15 -0
  138. package/dist/inboxes/message-encryption.js +29 -0
  139. package/dist/inboxes/message-encryption.js.map +1 -0
  140. package/dist/inboxes/message-validation.d.ts +6 -0
  141. package/dist/inboxes/message-validation.d.ts.map +1 -1
  142. package/dist/inboxes/message-validation.js +53 -0
  143. package/dist/inboxes/message-validation.js.map +1 -0
  144. package/dist/inboxes/prepare-message.d.ts +2 -2
  145. package/dist/inboxes/prepare-message.js +78 -0
  146. package/dist/inboxes/prepare-message.js.map +1 -0
  147. package/dist/inboxes/recover-inbox-creator.d.ts +5 -0
  148. package/dist/inboxes/recover-inbox-creator.js +24 -0
  149. package/dist/inboxes/recover-inbox-creator.js.map +1 -0
  150. package/dist/inboxes/recover-inbox-message-signer.d.ts +4 -0
  151. package/dist/inboxes/recover-inbox-message-signer.js +32 -0
  152. package/dist/inboxes/recover-inbox-message-signer.js.map +1 -0
  153. package/dist/inboxes/send-message.d.ts +19 -0
  154. package/dist/inboxes/send-message.js +58 -0
  155. package/dist/inboxes/send-message.js.map +1 -0
  156. package/dist/inboxes/types.d.ts +4 -0
  157. package/dist/inboxes/types.d.ts.map +1 -0
  158. package/dist/inboxes/types.js +3 -0
  159. package/dist/inboxes/types.js.map +1 -0
  160. package/dist/index.d.ts +14 -0
  161. package/dist/index.js +14 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/key/create-key.d.ts +11 -0
  164. package/dist/key/create-key.d.ts.map +1 -0
  165. package/dist/key/create-key.js +22 -0
  166. package/dist/key/create-key.js.map +1 -0
  167. package/dist/key/decrypt-key.d.ts +9 -0
  168. package/dist/key/decrypt-key.d.ts.map +1 -0
  169. package/dist/key/decrypt-key.js +16 -0
  170. package/dist/key/decrypt-key.js.map +1 -0
  171. package/dist/key/encrypt-key.d.ts +11 -0
  172. package/dist/key/encrypt-key.d.ts.map +1 -0
  173. package/dist/key/encrypt-key.js +20 -0
  174. package/dist/key/encrypt-key.js.map +1 -0
  175. package/dist/key/index.d.ts +5 -0
  176. package/dist/key/index.d.ts.map +1 -0
  177. package/dist/key/index.js +5 -0
  178. package/dist/key/index.js.map +1 -0
  179. package/dist/key/key-box.d.ts +19 -0
  180. package/dist/key/key-box.d.ts.map +1 -0
  181. package/dist/key/key-box.js +38 -0
  182. package/dist/key/key-box.js.map +1 -0
  183. package/dist/messages/decrypt-message.d.ts +7 -0
  184. package/dist/messages/decrypt-message.d.ts.map +1 -0
  185. package/dist/messages/decrypt-message.js +11 -0
  186. package/dist/messages/decrypt-message.js.map +1 -0
  187. package/dist/messages/encrypt-message.d.ts +7 -0
  188. package/dist/messages/encrypt-message.d.ts.map +1 -0
  189. package/dist/messages/encrypt-message.js +12 -0
  190. package/dist/messages/encrypt-message.js.map +1 -0
  191. package/dist/messages/index.d.ts +6 -0
  192. package/dist/messages/index.js +6 -0
  193. package/dist/messages/index.js.map +1 -0
  194. package/dist/messages/serialize.d.ts +3 -0
  195. package/dist/messages/serialize.d.ts.map +1 -0
  196. package/dist/messages/serialize.js +30 -0
  197. package/dist/messages/serialize.js.map +1 -0
  198. package/dist/messages/signed-update-message.d.ts +23 -0
  199. package/dist/messages/signed-update-message.js +56 -0
  200. package/dist/messages/signed-update-message.js.map +1 -0
  201. package/dist/messages/types.d.ts +1268 -0
  202. package/dist/messages/types.d.ts.map +1 -1
  203. package/dist/messages/types.js +312 -0
  204. package/dist/messages/types.js.map +1 -0
  205. package/dist/space-events/accept-invitation.d.ts +9 -0
  206. package/dist/space-events/accept-invitation.js +28 -0
  207. package/dist/space-events/accept-invitation.js.map +1 -0
  208. package/dist/space-events/apply-event.d.ts +11 -0
  209. package/dist/space-events/apply-event.js +130 -0
  210. package/dist/space-events/apply-event.js.map +1 -0
  211. package/dist/space-events/create-inbox.d.ts +14 -0
  212. package/dist/space-events/create-inbox.js +41 -0
  213. package/dist/space-events/create-inbox.js.map +1 -0
  214. package/dist/space-events/create-invitation.d.ts +12 -0
  215. package/dist/space-events/create-invitation.js +30 -0
  216. package/dist/space-events/create-invitation.js.map +1 -0
  217. package/dist/space-events/create-space.d.ts +9 -0
  218. package/dist/space-events/create-space.js +29 -0
  219. package/dist/space-events/create-space.js.map +1 -0
  220. package/dist/space-events/delete-space.d.ts +10 -0
  221. package/dist/space-events/delete-space.js +30 -0
  222. package/dist/space-events/delete-space.js.map +1 -0
  223. package/dist/space-events/hash-event.d.ts +3 -0
  224. package/dist/space-events/hash-event.js +7 -0
  225. package/dist/space-events/hash-event.js.map +1 -0
  226. package/dist/space-events/index.d.ts +9 -0
  227. package/dist/space-events/index.js +9 -0
  228. package/dist/space-events/index.js.map +1 -0
  229. package/dist/space-events/types.d.ts +222 -0
  230. package/dist/space-events/types.d.ts.map +1 -0
  231. package/dist/space-events/types.js +102 -0
  232. package/dist/space-events/types.js.map +1 -0
  233. package/dist/space-info/decrypt-space-info.d.ts +7 -0
  234. package/dist/space-info/decrypt-space-info.js +18 -0
  235. package/dist/space-info/decrypt-space-info.js.map +1 -0
  236. package/dist/space-info/encrypt-and-sign-space-info.d.ts +17 -0
  237. package/dist/space-info/encrypt-and-sign-space-info.js +39 -0
  238. package/dist/space-info/encrypt-and-sign-space-info.js.map +1 -0
  239. package/dist/space-info/index.d.ts +4 -0
  240. package/dist/space-info/index.js +4 -0
  241. package/dist/space-info/index.js.map +1 -0
  242. package/dist/space-info/types.d.ts +6 -0
  243. package/dist/space-info/types.d.ts.map +1 -0
  244. package/dist/space-info/types.js +5 -0
  245. package/dist/space-info/types.js.map +1 -0
  246. package/dist/store-connect.d.ts +149 -0
  247. package/dist/store-connect.d.ts.map +1 -1
  248. package/dist/store-connect.js +289 -0
  249. package/dist/store-connect.js.map +1 -0
  250. package/dist/store.d.ts +158 -0
  251. package/dist/store.d.ts.map +1 -1
  252. package/dist/store.js +354 -0
  253. package/dist/store.js.map +1 -0
  254. package/dist/type/type.d.ts +14 -0
  255. package/dist/type/type.d.ts.map +1 -1
  256. package/dist/type/type.js +25 -0
  257. package/dist/type/type.js.map +1 -0
  258. package/dist/types.d.ts +80 -0
  259. package/dist/types.d.ts.map +1 -0
  260. package/dist/types.js +37 -0
  261. package/dist/types.js.map +1 -0
  262. package/dist/utils/assertExhaustive.d.ts +2 -0
  263. package/dist/utils/assertExhaustive.d.ts.map +1 -0
  264. package/dist/utils/assertExhaustive.js +4 -0
  265. package/dist/utils/assertExhaustive.js.map +1 -0
  266. package/dist/utils/automergeId.d.ts +1 -1
  267. package/dist/utils/automergeId.d.ts.map +1 -1
  268. package/dist/utils/automergeId.js +1 -1
  269. package/dist/utils/automergeId.js.map +1 -1
  270. package/dist/utils/base58.d.ts +36 -0
  271. package/dist/utils/base58.d.ts.map +1 -0
  272. package/dist/utils/base58.js +62 -0
  273. package/dist/utils/base58.js.map +1 -0
  274. package/dist/utils/hexBytesAddressUtils.d.ts +4 -0
  275. package/dist/utils/hexBytesAddressUtils.d.ts.map +1 -0
  276. package/dist/utils/hexBytesAddressUtils.js +21 -0
  277. package/dist/utils/hexBytesAddressUtils.js.map +1 -0
  278. package/dist/utils/index.d.ts +9 -0
  279. package/dist/utils/index.js +9 -0
  280. package/dist/utils/index.js.map +1 -0
  281. package/dist/utils/internal/base58Utils.d.ts +4 -0
  282. package/dist/utils/internal/base58Utils.d.ts.map +1 -0
  283. package/dist/utils/internal/base58Utils.js +40 -0
  284. package/dist/utils/internal/base58Utils.js.map +1 -0
  285. package/dist/utils/internal/deep-merge.d.ts +7 -0
  286. package/dist/utils/internal/deep-merge.d.ts.map +1 -0
  287. package/dist/utils/internal/deep-merge.js +33 -0
  288. package/dist/utils/internal/deep-merge.js.map +1 -0
  289. package/dist/utils/isRelationField.d.ts +3 -0
  290. package/dist/utils/isRelationField.d.ts.map +1 -0
  291. package/dist/utils/isRelationField.js +8 -0
  292. package/dist/utils/isRelationField.js.map +1 -0
  293. package/dist/utils/jsc.d.ts +49 -0
  294. package/dist/utils/jsc.d.ts.map +1 -0
  295. package/dist/utils/jsc.js +88 -0
  296. package/dist/utils/jsc.js.map +1 -0
  297. package/dist/utils/stringToUint8Array.d.ts +3 -0
  298. package/dist/utils/stringToUint8Array.d.ts.map +1 -0
  299. package/dist/utils/stringToUint8Array.js +9 -0
  300. package/dist/utils/stringToUint8Array.js.map +1 -0
  301. package/package.json +5 -2
  302. package/src/connect/abis/MainVotingPlugin.json +1865 -0
  303. package/src/connect/abis/PersonalSpaceAdminPlugin.json +531 -0
  304. package/src/connect/abis.ts +183 -0
  305. package/src/connect/create-callback-params.ts +4 -1
  306. package/src/connect/identity-encryption.ts +10 -14
  307. package/src/connect/index.ts +1 -1
  308. package/src/connect/login.ts +106 -18
  309. package/src/connect/parse-callback-params.ts +4 -1
  310. package/src/connect/smart-account.ts +915 -0
  311. package/src/connect/types.ts +2 -0
  312. package/src/entity/decodedEntitiesCache.ts +1 -1
  313. package/src/entity/findMany.ts +16 -14
  314. package/src/entity/getEntityRelations.ts +1 -1
  315. package/src/entity/types.ts +8 -8
  316. package/src/identity/auth-storage.ts +11 -1
  317. package/src/identity/get-verified-identity.ts +6 -1
  318. package/src/identity/index.ts +1 -1
  319. package/src/identity/prove-ownership.ts +52 -8
  320. package/src/inboxes/message-validation.ts +17 -2
  321. package/src/messages/types.ts +6 -0
  322. package/src/store-connect.ts +1 -52
  323. package/src/store.ts +78 -48
  324. package/src/type/type.ts +4 -2
  325. package/src/types.ts +19 -1
  326. package/src/utils/automergeId.ts +1 -1
  327. package/dist/connect/prove-ownership.d.ts.map +0 -1
  328. package/src/connect/prove-ownership.ts +0 -58
package/src/store.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  import type { AnyDocumentId, DocHandle, Repo } from '@automerge/automerge-repo';
2
2
  import { type Store, createStore } from '@xstate/store';
3
3
  import type { PrivateAppIdentity } from './connect/types.js';
4
+ import type { DocumentContent } from './entity/types.js';
4
5
  import { mergeMessages } from './inboxes/merge-messages.js';
5
6
  import type { InboxSenderAuthPolicy } from './inboxes/types.js';
6
7
  import type { Invitation, Updates } from './messages/index.js';
7
8
  import type { SpaceEvent, SpaceState } from './space-events/index.js';
9
+ import type { Mapping } from './types.js';
8
10
  import { idToAutomergeId } from './utils/automergeId.js';
9
11
 
10
12
  export type InboxMessageStorageEntry = {
@@ -42,15 +44,17 @@ export type AccountInboxStorageEntry = {
42
44
 
43
45
  export type SpaceStorageEntry = {
44
46
  id: string;
47
+ name: string;
45
48
  events: SpaceEvent[];
46
49
  state: SpaceState | undefined;
47
50
  keys: { id: string; key: string }[];
48
- automergeDocHandle: DocHandle<unknown> | undefined;
51
+ automergeDocHandle: DocHandle<DocumentContent>;
49
52
  inboxes: SpaceInboxStorageEntry[];
50
53
  };
51
54
 
52
55
  interface StoreContext {
53
56
  spaces: SpaceStorageEntry[];
57
+ spacesLoadingIsPending: boolean;
54
58
  updatesInFlight: string[];
55
59
  invitations: Invitation[];
56
60
  repo: Repo | null;
@@ -66,10 +70,12 @@ interface StoreContext {
66
70
  identity: PrivateAppIdentity | null;
67
71
  lastUpdateClock: { [spaceId: string]: number };
68
72
  accountInboxes: AccountInboxStorageEntry[];
73
+ mapping: Mapping;
69
74
  }
70
75
 
71
76
  const initialStoreContext: StoreContext = {
72
77
  spaces: [],
78
+ spacesLoadingIsPending: true,
73
79
  updatesInFlight: [],
74
80
  invitations: [],
75
81
  repo: null,
@@ -78,14 +84,16 @@ const initialStoreContext: StoreContext = {
78
84
  identity: null,
79
85
  lastUpdateClock: {},
80
86
  accountInboxes: [],
87
+ mapping: {},
81
88
  };
82
89
 
83
90
  type StoreEvent =
84
91
  | { type: 'setInvitations'; invitations: Invitation[] }
92
+ | { type: 'setMapping'; mapping: Mapping }
85
93
  | { type: 'reset' }
86
94
  | { type: 'addUpdateInFlight'; updateId: string }
87
95
  | { type: 'removeUpdateInFlight'; updateId: string }
88
- | { type: 'setSpaceFromList'; spaceId: string }
96
+ | { type: 'setSpacesList'; spaces: { id: string; name: string }[] }
89
97
  | { type: 'applyEvent'; spaceId: string; event: SpaceEvent; state: SpaceState }
90
98
  | { type: 'updateConfirmed'; spaceId: string; clock: number }
91
99
  | { type: 'applyUpdate'; spaceId: string; firstUpdateClock: number; lastUpdateClock: number }
@@ -122,6 +130,7 @@ type StoreEvent =
122
130
  | {
123
131
  type: 'setSpace';
124
132
  spaceId: string;
133
+ name: string;
125
134
  updates?: Updates;
126
135
  events: SpaceEvent[];
127
136
  inboxes?: SpaceInboxStorageEntry[];
@@ -154,9 +163,15 @@ export const store: Store<StoreContext, StoreEvent, GenericEventObject> = create
154
163
  invitations: event.invitations,
155
164
  };
156
165
  },
166
+ setMapping: (context, event: { mapping: Mapping }) => {
167
+ return {
168
+ ...context,
169
+ mapping: event.mapping,
170
+ };
171
+ },
157
172
  reset: (context) => {
158
173
  // once the repo is initialized, there is no need to reset it
159
- return { ...initialStoreContext, repo: context.repo };
174
+ return { ...initialStoreContext, repo: context.repo, mapping: context.mapping };
160
175
  },
161
176
  addUpdateInFlight: (context, event: { updateId: string }) => {
162
177
  return {
@@ -170,56 +185,68 @@ export const store: Store<StoreContext, StoreEvent, GenericEventObject> = create
170
185
  updatesInFlight: context.updatesInFlight.filter((id) => id !== event.updateId),
171
186
  };
172
187
  },
173
- setSpaceFromList: (context, event: { spaceId: string }) => {
188
+ setSpacesList: (context, event: { spaces: { id: string; name: string }[] }) => {
174
189
  if (!context.repo) {
175
190
  return context;
176
191
  }
177
- const existingSpace = context.spaces.find((s) => s.id === event.spaceId);
178
- const lastUpdateClock = context.lastUpdateClock[event.spaceId] ?? -1;
179
- const result = context.repo.findWithProgress(idToAutomergeId(event.spaceId) as AnyDocumentId);
180
192
 
181
- // set it to ready to interact with the document
182
- result.handle.doneLoading();
193
+ let storeContext: StoreContext = { ...context, spacesLoadingIsPending: false };
183
194
 
184
- if (existingSpace) {
185
- return {
186
- ...context,
187
- spaces: context.spaces.map((existingSpace) => {
188
- if (existingSpace.id === event.spaceId) {
189
- const newSpace: SpaceStorageEntry = {
190
- id: existingSpace.id,
191
- events: existingSpace.events ?? [],
192
- state: existingSpace.state,
193
- keys: existingSpace.keys ?? [],
195
+ for (const space of event.spaces) {
196
+ const existingSpace = context.spaces.find((s) => s.id === space.id);
197
+ const lastUpdateClock = context.lastUpdateClock[space.id] ?? -1;
198
+ const result = context.repo.findWithProgress<DocumentContent>(idToAutomergeId(space.id) as AnyDocumentId);
199
+
200
+ // set it to ready to interact with the document
201
+ result.handle.doneLoading();
202
+
203
+ if (existingSpace) {
204
+ storeContext = {
205
+ ...storeContext,
206
+ spaces: storeContext.spaces.map((existingSpace) => {
207
+ if (existingSpace.id === space.id) {
208
+ const newSpace: SpaceStorageEntry = {
209
+ id: existingSpace.id,
210
+ name: existingSpace.name,
211
+ events: existingSpace.events ?? [],
212
+ state: existingSpace.state,
213
+ keys: existingSpace.keys ?? [],
214
+ automergeDocHandle: result.handle,
215
+ inboxes: existingSpace.inboxes ?? [],
216
+ };
217
+ return newSpace;
218
+ }
219
+ return existingSpace;
220
+ }),
221
+ lastUpdateClock: {
222
+ ...storeContext.lastUpdateClock,
223
+ [space.id]: lastUpdateClock,
224
+ },
225
+ };
226
+ } else {
227
+ storeContext = {
228
+ ...storeContext,
229
+ spaces: [
230
+ ...storeContext.spaces,
231
+ {
232
+ id: space.id,
233
+ name: space.name,
234
+ events: [],
235
+ state: undefined,
236
+ keys: [],
237
+ inboxes: [],
194
238
  automergeDocHandle: result.handle,
195
- inboxes: existingSpace.inboxes ?? [],
196
- };
197
- return newSpace;
198
- }
199
- return existingSpace;
200
- }),
201
- lastUpdateClock: {
202
- ...context.lastUpdateClock,
203
- [event.spaceId]: lastUpdateClock,
204
- },
205
- };
239
+ },
240
+ ],
241
+ lastUpdateClock: {
242
+ ...storeContext.lastUpdateClock,
243
+ [space.id]: -1,
244
+ },
245
+ };
246
+ }
206
247
  }
207
- return {
208
- ...context,
209
- spaces: [
210
- ...context.spaces,
211
- {
212
- id: event.spaceId,
213
- events: [],
214
- state: undefined,
215
- keys: [],
216
- inboxes: [],
217
- updates: [],
218
- lastUpdateClock: -1,
219
- automergeDocHandle: result.handle,
220
- },
221
- ],
222
- };
248
+
249
+ return storeContext;
223
250
  },
224
251
  applyEvent: (context, event: { spaceId: string; event: SpaceEvent; state: SpaceState }) => {
225
252
  return {
@@ -398,6 +425,7 @@ export const store: Store<StoreContext, StoreEvent, GenericEventObject> = create
398
425
  context,
399
426
  event: {
400
427
  spaceId: string;
428
+ name: string;
401
429
  updates?: Updates;
402
430
  inboxes?: SpaceInboxStorageEntry[];
403
431
  events: SpaceEvent[];
@@ -410,11 +438,12 @@ export const store: Store<StoreContext, StoreEvent, GenericEventObject> = create
410
438
  ) => {
411
439
  const existingSpace = context.spaces.find((s) => s.id === event.spaceId);
412
440
  if (!existingSpace && context.repo) {
413
- const result = context.repo.findWithProgress(idToAutomergeId(event.spaceId) as AnyDocumentId);
441
+ const result = context.repo.findWithProgress<DocumentContent>(idToAutomergeId(event.spaceId) as AnyDocumentId);
414
442
  // set it to ready to interact with the document
415
443
  result.handle.doneLoading();
416
444
 
417
445
  const newSpace: SpaceStorageEntry = {
446
+ name: event.name,
418
447
  id: event.spaceId,
419
448
  events: event.events,
420
449
  state: event.spaceState,
@@ -473,7 +502,8 @@ export const store: Store<StoreContext, StoreEvent, GenericEventObject> = create
473
502
  return {
474
503
  ...context,
475
504
  authenticated: true,
476
- identity: event.identity,
505
+ // TODO: remove hard-coded account address and use the one from the identity
506
+ identity: { ...event.identity },
477
507
  };
478
508
  },
479
509
  resetAuth: (context) => {
package/src/type/type.ts CHANGED
@@ -17,9 +17,11 @@ export const Point = Schema.transform(Schema.String, Schema.Array(Number), {
17
17
  encode: (points: readonly number[]) => points.join(','),
18
18
  });
19
19
 
20
- export const Relation = <S extends AnyNoContext>(schema: S) =>
21
- Field({
20
+ export const Relation = <S extends AnyNoContext>(schema: S) => {
21
+ const relationSchema = Field({
22
22
  select: Schema.Array(schema) as unknown as Schema.Schema<ReadonlyArray<EntityWithRelation<S>>>,
23
23
  insert: Schema.optional(Schema.Array(Schema.String)),
24
24
  update: Schema.Undefined,
25
25
  });
26
+ return relationSchema;
27
+ };
package/src/types.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { Id as Grc20Id } from '@graphprotocol/grc-20';
1
2
  import * as Data from 'effect/Data';
2
3
  import * as Schema from 'effect/Schema';
3
4
 
@@ -19,13 +20,16 @@ export type ConnectAuthPayload = Schema.Schema.Type<typeof ConnectAuthPayload>;
19
20
  export const ConnectCallbackResult = Schema.Struct({
20
21
  appIdentityAddress: Schema.String,
21
22
  appIdentityAddressPrivateKey: Schema.String,
23
+ accountAddress: Schema.String,
24
+ permissionId: Schema.String,
22
25
  signaturePublicKey: Schema.String,
23
26
  signaturePrivateKey: Schema.String,
24
27
  encryptionPublicKey: Schema.String,
25
28
  encryptionPrivateKey: Schema.String,
26
29
  sessionToken: Schema.String,
27
30
  sessionTokenExpires: Schema.Date,
28
- spaces: Schema.Array(Schema.Struct({ id: Schema.String })),
31
+ privateSpaces: Schema.Array(Schema.Struct({ id: Schema.String })),
32
+ publicSpaces: Schema.Array(Schema.Struct({ id: Schema.String })),
29
33
  });
30
34
 
31
35
  export type ConnectCallbackResult = Schema.Schema.Type<typeof ConnectCallbackResult>;
@@ -45,3 +49,17 @@ export class FailedToParseConnectAuthUrl extends Data.TaggedError('FailedToParse
45
49
  export class FailedToParseAuthCallbackUrl extends Data.TaggedError('FailedToParseAuthCallbackUrl')<{
46
50
  message: string;
47
51
  }> {}
52
+
53
+ export type MappingEntry = {
54
+ typeIds: Grc20Id.Id[];
55
+ properties?: {
56
+ [key: string]: Grc20Id.Id;
57
+ };
58
+ relations?: {
59
+ [key: string]: Grc20Id.Id;
60
+ };
61
+ };
62
+
63
+ export type Mapping = {
64
+ [key: string]: MappingEntry;
65
+ };
@@ -4,7 +4,7 @@ import { parse as parseUuid, stringify as stringifyUuid } from 'uuid';
4
4
  /**
5
5
  * Converts a UUID into Base58Check
6
6
  */
7
- export function idToAutomergeId(uuid: string, _versionByte = 0x00) {
7
+ export function idToAutomergeId(uuid: string) {
8
8
  const payload = parseUuid(uuid);
9
9
  return bs58check.encode(payload);
10
10
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"prove-ownership.d.ts","sourceRoot":"","sources":["../../src/connect/prove-ownership.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEvD,eAAO,MAAM,sBAAsB,GAAI,gBAAgB,MAAM,EAAE,WAAW,MAAM,KAAG,MAElF,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,gBAAgB,MAAM,EAAE,WAAW,MAAM,KAAG,MAE9E,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,EACd,gBAAgB,MAAM,EACtB,MAAM,YAAY,KACjB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAQpD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,gBAAgB,MAAM,EACtB,WAAW,MAAM,EACjB,cAAc,MAAM,EACpB,UAAU,MAAM,KACf,OAAO,CAAC,OAAO,CAwBjB,CAAC"}
@@ -1,58 +0,0 @@
1
- import { type Hex, verifyMessage } from 'viem';
2
- import { privateKeyToAccount } from 'viem/accounts';
3
-
4
- import { publicKeyToAddress } from '../utils/index.js';
5
- import type { IdentityKeys, Signer } from './types.js';
6
-
7
- export const getAccountProofMessage = (accountAddress: string, publicKey: string): string => {
8
- return `This message proves I am the owner of the account ${accountAddress} and the public key ${publicKey}`;
9
- };
10
-
11
- export const getKeyProofMessage = (accountAddress: string, publicKey: string): string => {
12
- return `The public key ${publicKey} is owned by the account ${accountAddress}`;
13
- };
14
-
15
- export const proveIdentityOwnership = async (
16
- signer: Signer,
17
- accountAddress: string,
18
- keys: IdentityKeys,
19
- ): Promise<{ accountProof: string; keyProof: string }> => {
20
- const publicKey = keys.signaturePublicKey;
21
- const accountProofMessage = getAccountProofMessage(accountAddress, publicKey);
22
- const keyProofMessage = getKeyProofMessage(accountAddress, publicKey);
23
- const accountProof = await signer.signMessage(accountProofMessage);
24
- const account = privateKeyToAccount(keys.signaturePrivateKey as Hex);
25
- const keyProof = await account.signMessage({ message: keyProofMessage });
26
- return { accountProof, keyProof };
27
- };
28
-
29
- export const verifyIdentityOwnership = async (
30
- accountAddress: string,
31
- publicKey: string,
32
- accountProof: string,
33
- keyProof: string,
34
- ): Promise<boolean> => {
35
- const accountProofMessage = getAccountProofMessage(accountAddress, publicKey);
36
- const keyProofMessage = getKeyProofMessage(accountAddress, publicKey);
37
- const validAccountProof = await verifyMessage({
38
- address: accountAddress as Hex,
39
- message: accountProofMessage,
40
- signature: accountProof as Hex,
41
- });
42
- if (!validAccountProof) {
43
- console.log('Invalid account proof');
44
- return false;
45
- }
46
-
47
- const keyAddress = publicKeyToAddress(publicKey) as Hex;
48
- const validKeyProof = await verifyMessage({
49
- address: keyAddress,
50
- message: keyProofMessage,
51
- signature: keyProof as Hex,
52
- });
53
- if (!validKeyProof) {
54
- console.log('Invalid key proof');
55
- return false;
56
- }
57
- return true;
58
- };