@graphprotocol/hypergraph 0.0.1 → 0.0.3

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
@@ -58,8 +58,10 @@ export type PublicAppIdentity = {
58
58
  export type PrivateAppIdentity = IdentityKeys & {
59
59
  address: string;
60
60
  addressPrivateKey: string;
61
+ permissionId: string;
61
62
  sessionToken: string;
62
63
  sessionTokenExpires: Date;
64
+ accountAddress: string;
63
65
  };
64
66
 
65
67
  export class InvalidIdentityError {
@@ -5,7 +5,7 @@ export type QueryEntry = {
5
5
  data: Array<Entity<AnyNoContext>>; // holds the decoded entities of this query and must be a stable reference and use the same reference for the `entities` array
6
6
  listeners: Array<() => void>; // listeners to this query
7
7
  isInvalidated: boolean;
8
- include: { [K in keyof Schema.Schema.Type<AnyNoContext>]?: Record<string, never> };
8
+ include: { [K in keyof Schema.Schema.Type<AnyNoContext>]?: Record<string, Record<string, never>> };
9
9
  };
10
10
 
11
11
  export type DecodedEntitiesCacheEntry = {
@@ -239,7 +239,7 @@ export function findMany<const S extends AnyNoContext>(
239
239
  handle: DocHandle<DocumentContent>,
240
240
  type: S,
241
241
  filter: EntityFilter<Schema.Schema.Type<S>> | undefined,
242
- include: { [K in keyof Schema.Schema.Type<S>]?: Record<string, never> } | undefined,
242
+ include: { [K in keyof Schema.Schema.Type<S>]?: Record<string, Record<string, never>> } | undefined,
243
243
  ): { entities: Readonly<Array<Entity<S>>>; corruptEntityIds: Readonly<Array<string>> } {
244
244
  const decode = Schema.decodeUnknownSync(type);
245
245
  // TODO: what's the right way to get the name of the type?
@@ -256,13 +256,13 @@ export function findMany<const S extends AnyNoContext>(
256
256
 
257
257
  const evaluateFilter = <T>(fieldFilter: EntityFieldFilter<T>, fieldValue: T): boolean => {
258
258
  // Handle NOT operator
259
- if ('NOT' in fieldFilter && fieldFilter.NOT) {
260
- return !evaluateFilter(fieldFilter.NOT, fieldValue);
259
+ if ('not' in fieldFilter && fieldFilter.not) {
260
+ return !evaluateFilter(fieldFilter.not, fieldValue);
261
261
  }
262
262
 
263
263
  // Handle OR operator
264
- if ('OR' in fieldFilter) {
265
- const orFilters = fieldFilter.OR;
264
+ if ('or' in fieldFilter) {
265
+ const orFilters = fieldFilter.or;
266
266
  if (Array.isArray(orFilters)) {
267
267
  return orFilters.some((orFilter) => evaluateFilter(orFilter as EntityFieldFilter<T>, fieldValue));
268
268
  }
@@ -337,13 +337,13 @@ export function findMany<const S extends AnyNoContext>(
337
337
 
338
338
  const evaluateEntityFilter = (entityFilter: EntityFilter<Schema.Schema.Type<S>>, entity: Entity<S>): boolean => {
339
339
  // handle top-level NOT operator
340
- if ('NOT' in entityFilter && entityFilter.NOT) {
341
- return !evaluateCrossFieldFilter(entityFilter.NOT, entity);
340
+ if ('not' in entityFilter && entityFilter.not) {
341
+ return !evaluateCrossFieldFilter(entityFilter.not, entity);
342
342
  }
343
343
 
344
344
  // handle top-level OR operator
345
- if ('OR' in entityFilter && Array.isArray(entityFilter.OR)) {
346
- return entityFilter.OR.some((orFilter) => evaluateCrossFieldFilter(orFilter, entity));
345
+ if ('or' in entityFilter && Array.isArray(entityFilter.or)) {
346
+ return entityFilter.or.some((orFilter) => evaluateCrossFieldFilter(orFilter, entity));
347
347
  }
348
348
 
349
349
  // evaluate regular field filters
@@ -374,15 +374,17 @@ export function findMany<const S extends AnyNoContext>(
374
374
 
375
375
  const stableEmptyArray: Array<unknown> = [];
376
376
 
377
+ export type FindManySubscription<S extends AnyNoContext> = {
378
+ subscribe: (callback: () => void) => () => void;
379
+ getEntities: () => Readonly<Array<Entity<S>>>;
380
+ };
381
+
377
382
  export function subscribeToFindMany<const S extends AnyNoContext>(
378
383
  handle: DocHandle<DocumentContent>,
379
384
  type: S,
380
385
  filter: { [K in keyof Schema.Schema.Type<S>]?: EntityFieldFilter<Schema.Schema.Type<S>[K]> } | undefined,
381
- include: { [K in keyof Schema.Schema.Type<S>]?: Record<string, never> } | undefined,
382
- ): {
383
- subscribe: (callback: () => void) => () => void;
384
- getEntities: () => Readonly<Array<Entity<S>>>;
385
- } {
386
+ include: { [K in keyof Schema.Schema.Type<S>]?: Record<string, Record<string, never>> } | undefined,
387
+ ): FindManySubscription<S> {
386
388
  const queryKey = filter ? canonicalize(filter) : 'all';
387
389
  const decode = Schema.decodeUnknownSync(type);
388
390
  // TODO: what's the right way to get the name of the type?
@@ -6,7 +6,7 @@ export const getEntityRelations = <const S extends AnyNoContext>(
6
6
  entityId: string,
7
7
  type: S,
8
8
  doc: DocumentContent,
9
- include: { [K in keyof Schema.Schema.Type<S>]?: Record<string, never> } | undefined,
9
+ include: { [K in keyof Schema.Schema.Type<S>]?: Record<string, Record<string, never>> } | undefined,
10
10
  ) => {
11
11
  const relations: Record<string, Entity<AnyNoContext>> = {};
12
12
  for (const [fieldName, field] of Object.entries(type.fields)) {
@@ -55,8 +55,8 @@ export type EntityNumberFilter = {
55
55
  is?: number;
56
56
  greaterThan?: number;
57
57
  lessThan?: number;
58
- NOT?: EntityNumberFilter;
59
- OR?: EntityNumberFilter[];
58
+ not?: EntityNumberFilter;
59
+ or?: EntityNumberFilter[];
60
60
  };
61
61
 
62
62
  export type EntityTextFilter = {
@@ -65,21 +65,21 @@ export type EntityTextFilter = {
65
65
  endsWith?: string;
66
66
  contains?: string;
67
67
  equals?: string;
68
- NOT?: EntityTextFilter;
69
- OR?: EntityTextFilter[];
68
+ not?: EntityTextFilter;
69
+ or?: EntityTextFilter[];
70
70
  };
71
71
 
72
72
  export type CrossFieldFilter<T> = {
73
73
  [K in keyof T]?: EntityFieldFilter<T[K]>;
74
74
  } & {
75
- OR?: Array<CrossFieldFilter<T>>;
76
- NOT?: CrossFieldFilter<T>;
75
+ or?: Array<CrossFieldFilter<T>>;
76
+ not?: CrossFieldFilter<T>;
77
77
  };
78
78
 
79
79
  export type EntityFieldFilter<T> = {
80
80
  is?: T;
81
- NOT?: EntityFieldFilter<T>;
82
- OR?: Array<EntityFieldFilter<T>>;
81
+ not?: EntityFieldFilter<T>;
82
+ or?: Array<EntityFieldFilter<T>>;
83
83
  } & (T extends boolean
84
84
  ? {
85
85
  is?: boolean;
@@ -4,54 +4,64 @@ import type { Storage } from './types.js';
4
4
  export const storeIdentity = (storage: Storage, identity: PrivateAppIdentity) => {
5
5
  storage.setItem('hypergraph:app-identity-address', identity.address);
6
6
  storage.setItem('hypergraph:app-identity-address-private-key', identity.addressPrivateKey);
7
+ storage.setItem('hypergraph:app-identity-account-address', identity.accountAddress);
7
8
  storage.setItem('hypergraph:signature-public-key', identity.signaturePublicKey);
8
9
  storage.setItem('hypergraph:signature-private-key', identity.signaturePrivateKey);
9
10
  storage.setItem('hypergraph:encryption-public-key', identity.encryptionPublicKey);
10
11
  storage.setItem('hypergraph:encryption-private-key', identity.encryptionPrivateKey);
11
12
  storage.setItem('hypergraph:session-token', identity.sessionToken);
12
13
  storage.setItem('hypergraph:session-token-expires', identity.sessionTokenExpires.toISOString());
14
+ storage.setItem('hypergraph:permission-id', identity.permissionId);
13
15
  };
14
16
 
15
17
  export const loadIdentity = (storage: Storage): PrivateAppIdentity | null => {
16
18
  const address = storage.getItem('hypergraph:app-identity-address');
17
19
  const addressPrivateKey = storage.getItem('hypergraph:app-identity-address-private-key');
20
+ const accountAddress = storage.getItem('hypergraph:app-identity-account-address');
18
21
  const signaturePublicKey = storage.getItem('hypergraph:signature-public-key');
19
22
  const signaturePrivateKey = storage.getItem('hypergraph:signature-private-key');
20
23
  const encryptionPublicKey = storage.getItem('hypergraph:encryption-public-key');
21
24
  const encryptionPrivateKey = storage.getItem('hypergraph:encryption-private-key');
22
25
  const sessionToken = storage.getItem('hypergraph:session-token');
23
26
  const sessionTokenExpires = storage.getItem('hypergraph:session-token-expires');
27
+ const permissionId = storage.getItem('hypergraph:permission-id');
24
28
  if (
25
29
  !address ||
26
30
  !addressPrivateKey ||
31
+ !accountAddress ||
27
32
  !signaturePublicKey ||
28
33
  !signaturePrivateKey ||
29
34
  !encryptionPublicKey ||
30
35
  !encryptionPrivateKey ||
31
36
  !sessionToken ||
32
- !sessionTokenExpires
37
+ !sessionTokenExpires ||
38
+ !permissionId
33
39
  ) {
34
40
  return null;
35
41
  }
36
42
  return {
37
43
  address,
38
44
  addressPrivateKey,
45
+ accountAddress,
39
46
  signaturePublicKey,
40
47
  signaturePrivateKey,
41
48
  encryptionPublicKey,
42
49
  encryptionPrivateKey,
43
50
  sessionToken,
44
51
  sessionTokenExpires: new Date(sessionTokenExpires),
52
+ permissionId,
45
53
  };
46
54
  };
47
55
 
48
56
  export const wipeIdentity = (storage: Storage) => {
49
57
  storage.removeItem('hypergraph:app-identity-address');
50
58
  storage.removeItem('hypergraph:app-identity-address-private-key');
59
+ storage.removeItem('hypergraph:app-identity-account-address');
51
60
  storage.removeItem('hypergraph:signature-public-key');
52
61
  storage.removeItem('hypergraph:signature-private-key');
53
62
  storage.removeItem('hypergraph:encryption-public-key');
54
63
  storage.removeItem('hypergraph:encryption-private-key');
55
64
  storage.removeItem('hypergraph:session-token');
56
65
  storage.removeItem('hypergraph:session-token-expires');
66
+ storage.removeItem('hypergraph:permission-id');
57
67
  };
@@ -1,4 +1,5 @@
1
1
  import * as Schema from 'effect/Schema';
2
+ import type { Chain } from 'viem';
2
3
  import * as Messages from '../messages/index.js';
3
4
  import { store } from '../store.js';
4
5
  import { verifyIdentityOwnership } from './prove-ownership.js';
@@ -6,6 +7,8 @@ import { verifyIdentityOwnership } from './prove-ownership.js';
6
7
  export const getVerifiedIdentity = async (
7
8
  accountAddress: string,
8
9
  syncServerUri: string,
10
+ chain: Chain,
11
+ rpcUrl: string,
9
12
  ): Promise<{
10
13
  accountAddress: string;
11
14
  encryptionPublicKey: string;
@@ -32,9 +35,11 @@ export const getVerifiedIdentity = async (
32
35
  resDecoded.signaturePublicKey,
33
36
  resDecoded.accountProof,
34
37
  resDecoded.keyProof,
38
+ chain,
39
+ rpcUrl,
35
40
  ))
36
41
  ) {
37
- throw new Error('Invalid identity');
42
+ throw new Error('Invalid identity in getVerifiedIdentity');
38
43
  }
39
44
 
40
45
  store.send({
@@ -1,6 +1,6 @@
1
1
  export * from './auth-storage.js';
2
2
  export * from './get-verified-identity.js';
3
3
  export * from './identity-encryption.js';
4
- export * from './logout.js';
5
4
  export * from './prove-ownership.js';
5
+ export * from './logout.js';
6
6
  export * from './types.js';
@@ -1,8 +1,9 @@
1
- import { type Hex, verifyMessage } from 'viem';
1
+ import { http, type Chain, type Hex, type WalletClient, createPublicClient, verifyMessage } from 'viem';
2
2
  import { privateKeyToAccount } from 'viem/accounts';
3
3
 
4
+ import type { SmartAccountClient } from 'permissionless';
4
5
  import { publicKeyToAddress } from '../utils/index.js';
5
- import type { IdentityKeys, Signer } from './types.js';
6
+ import type { IdentityKeys } from './types.js';
6
7
 
7
8
  export const getAccountProofMessage = (accountAddress: string, publicKey: string): string => {
8
9
  return `This message proves I am the owner of the account ${accountAddress} and the public key ${publicKey}`;
@@ -12,15 +13,37 @@ export const getKeyProofMessage = (accountAddress: string, publicKey: string): s
12
13
  return `The public key ${publicKey} is owned by the account ${accountAddress}`;
13
14
  };
14
15
 
16
+ export const accountProofDomain = {
17
+ name: 'Hypergraph',
18
+ version: '1',
19
+ };
20
+
15
21
  export const proveIdentityOwnership = async (
16
- signer: Signer,
22
+ walletClient: WalletClient,
23
+ smartAccountClient: SmartAccountClient,
17
24
  accountAddress: string,
18
25
  keys: IdentityKeys,
19
26
  ): Promise<{ accountProof: string; keyProof: string }> => {
27
+ if (!smartAccountClient.account) {
28
+ throw new Error('Smart account client does not have an account');
29
+ }
30
+ if (!smartAccountClient.chain) {
31
+ throw new Error('Smart account client does not have a chain');
32
+ }
20
33
  const publicKey = keys.signaturePublicKey;
21
- const accountProofMessage = getAccountProofMessage(accountAddress, publicKey);
22
34
  const keyProofMessage = getKeyProofMessage(accountAddress, publicKey);
23
- const accountProof = await signer.signMessage(accountProofMessage);
35
+
36
+ const accountProof = await smartAccountClient.account.signTypedData({
37
+ message: {
38
+ message: getAccountProofMessage(accountAddress, publicKey),
39
+ },
40
+ types: {
41
+ Message: [{ name: 'message', type: 'string' }],
42
+ },
43
+ domain: accountProofDomain,
44
+ primaryType: 'Message',
45
+ });
46
+ console.log('accountProof', accountProof);
24
47
  const account = privateKeyToAccount(keys.signaturePrivateKey as Hex);
25
48
  const keyProof = await account.signMessage({ message: keyProofMessage });
26
49
  return { accountProof, keyProof };
@@ -31,12 +54,33 @@ export const verifyIdentityOwnership = async (
31
54
  publicKey: string,
32
55
  accountProof: string,
33
56
  keyProof: string,
57
+ chain: Chain,
58
+ rpcUrl: string,
34
59
  ): Promise<boolean> => {
35
- const accountProofMessage = getAccountProofMessage(accountAddress, publicKey);
36
60
  const keyProofMessage = getKeyProofMessage(accountAddress, publicKey);
37
- const validAccountProof = await verifyMessage({
61
+ const publicClient = createPublicClient({
62
+ chain,
63
+ transport: http(rpcUrl),
64
+ });
65
+ // console.log('publicClient', publicClient);
66
+ // console.log('rpcUrl', rpcUrl);
67
+ // console.log('chain', chain);
68
+
69
+ // console.log('accountProof', accountProof);
70
+ // console.log('accountAddress', accountAddress);
71
+ // console.log('publicKey', publicKey);
72
+
73
+ const accountProofMessage = getAccountProofMessage(accountAddress, publicKey);
74
+ const validAccountProof = await publicClient.verifyTypedData({
38
75
  address: accountAddress as Hex,
39
- message: accountProofMessage,
76
+ message: {
77
+ message: accountProofMessage,
78
+ },
79
+ types: {
80
+ Message: [{ name: 'message', type: 'string' }],
81
+ },
82
+ domain: accountProofDomain,
83
+ primaryType: 'Message',
40
84
  signature: accountProof as Hex,
41
85
  });
42
86
  if (!validAccountProof) {
@@ -1,3 +1,4 @@
1
+ import type { Chain } from 'viem';
1
2
  import * as Identity from '../identity/index.js';
2
3
  import type * as Messages from '../messages/index.js';
3
4
  import type { AccountInboxStorageEntry, SpaceInboxStorageEntry } from '../store.js';
@@ -8,6 +9,8 @@ export const validateSpaceInboxMessage = async (
8
9
  inbox: SpaceInboxStorageEntry,
9
10
  spaceId: string,
10
11
  syncServerUri: string,
12
+ chain: Chain,
13
+ rpcUrl: string,
11
14
  ) => {
12
15
  if (message.signature) {
13
16
  if (inbox.authPolicy === 'anonymous') {
@@ -19,7 +22,12 @@ export const validateSpaceInboxMessage = async (
19
22
  return false;
20
23
  }
21
24
  const signer = recoverSpaceInboxMessageSigner(message, spaceId, inbox.inboxId);
22
- const verifiedIdentity = await Identity.getVerifiedIdentity(message.authorAccountAddress, syncServerUri);
25
+ const verifiedIdentity = await Identity.getVerifiedIdentity(
26
+ message.authorAccountAddress,
27
+ syncServerUri,
28
+ chain,
29
+ rpcUrl,
30
+ );
23
31
  const isValid = signer === verifiedIdentity.signaturePublicKey;
24
32
  if (!isValid) {
25
33
  console.error('Invalid signature', signer, verifiedIdentity.signaturePublicKey);
@@ -39,6 +47,8 @@ export const validateAccountInboxMessage = async (
39
47
  inbox: AccountInboxStorageEntry,
40
48
  accountAddress: string,
41
49
  syncServerUri: string,
50
+ chain: Chain,
51
+ rpcUrl: string,
42
52
  ) => {
43
53
  if (message.signature) {
44
54
  if (inbox.authPolicy === 'anonymous') {
@@ -50,7 +60,12 @@ export const validateAccountInboxMessage = async (
50
60
  return false;
51
61
  }
52
62
  const signer = recoverAccountInboxMessageSigner(message, accountAddress, inbox.inboxId);
53
- const verifiedIdentity = await Identity.getVerifiedIdentity(message.authorAccountAddress, syncServerUri);
63
+ const verifiedIdentity = await Identity.getVerifiedIdentity(
64
+ message.authorAccountAddress,
65
+ syncServerUri,
66
+ chain,
67
+ rpcUrl,
68
+ );
54
69
  const isValid = signer === verifiedIdentity.signaturePublicKey;
55
70
  if (!isValid) {
56
71
  console.error('Invalid signature', signer, verifiedIdentity.signaturePublicKey);
@@ -41,6 +41,7 @@ export const KeyBoxWithKeyId = Schema.Struct({
41
41
  export type KeyBoxWithKeyId = Schema.Schema.Type<typeof KeyBoxWithKeyId>;
42
42
 
43
43
  export const IdentityKeyBox = Schema.Struct({
44
+ signer: Schema.String,
44
45
  accountAddress: Schema.String,
45
46
  ciphertext: Schema.String,
46
47
  nonce: Schema.String,
@@ -60,6 +61,7 @@ export type RequestCreateSpaceEvent = Schema.Schema.Type<typeof RequestCreateSpa
60
61
 
61
62
  export const RequestConnectCreateSpaceEvent = Schema.Struct({
62
63
  type: Schema.Literal('connect-create-space-event'),
64
+ accountAddress: Schema.String,
63
65
  spaceId: Schema.String,
64
66
  event: CreateSpaceEvent,
65
67
  keyBox: KeyBoxWithKeyId,
@@ -80,6 +82,7 @@ export const RequestCreateInvitationEvent = Schema.Struct({
80
82
  export const RequestConnectAddAppIdentityToSpaces = Schema.Struct({
81
83
  type: Schema.Literal('connect-add-app-identity-to-spaces'),
82
84
  appIdentityAddress: Schema.String,
85
+ accountAddress: Schema.String,
83
86
  spacesInput: Schema.Array(
84
87
  Schema.Struct({
85
88
  id: Schema.String,
@@ -240,6 +243,7 @@ export type RequestConnectCreateIdentity = Schema.Schema.Type<typeof RequestConn
240
243
  export const RequestConnectCreateAppIdentity = Schema.Struct({
241
244
  appId: Schema.String,
242
245
  address: Schema.String,
246
+ accountAddress: Schema.String,
243
247
  ciphertext: Schema.String,
244
248
  nonce: Schema.String,
245
249
  signaturePublicKey: Schema.String,
@@ -277,6 +281,7 @@ export const ResponseListSpaces = Schema.Struct({
277
281
  spaces: Schema.Array(
278
282
  Schema.Struct({
279
283
  id: Schema.String,
284
+ name: Schema.String,
280
285
  }),
281
286
  ),
282
287
  });
@@ -347,6 +352,7 @@ export type ResponseAccountInbox = Schema.Schema.Type<typeof ResponseAccountInbo
347
352
  export const ResponseSpace = Schema.Struct({
348
353
  type: Schema.Literal('space'),
349
354
  id: Schema.String,
355
+ name: Schema.String,
350
356
  events: Schema.Array(SpaceEvent),
351
357
  keyBoxes: Schema.Array(KeyBoxWithKeyId),
352
358
  updates: Schema.optional(Updates),
@@ -90,7 +90,6 @@ type StoreEvent =
90
90
  | { type: 'reset' }
91
91
  | { type: 'addUpdateInFlight'; updateId: string }
92
92
  | { type: 'removeUpdateInFlight'; updateId: string }
93
- | { type: 'setSpaceFromList'; spaceId: string }
94
93
  | { type: 'applyEvent'; spaceId: string; event: SpaceEvent; state: SpaceState }
95
94
  | { type: 'updateConfirmed'; spaceId: string; clock: number }
96
95
  | { type: 'applyUpdate'; spaceId: string; firstUpdateClock: number; lastUpdateClock: number }
@@ -127,6 +126,7 @@ type StoreEvent =
127
126
  | {
128
127
  type: 'setSpace';
129
128
  spaceId: string;
129
+ name: string;
130
130
  updates?: Updates;
131
131
  events: SpaceEvent[];
132
132
  inboxes?: SpaceInboxStorageEntry[];
@@ -177,57 +177,6 @@ export const store: Store<StoreContext, StoreEvent, GenericEventObject> = create
177
177
  updatesInFlight: context.updatesInFlight.filter((id) => id !== event.updateId),
178
178
  };
179
179
  },
180
- setSpaceFromList: (context, event: { spaceId: string }) => {
181
- if (!context.repo) {
182
- return context;
183
- }
184
- const existingSpace = context.spaces.find((s) => s.id === event.spaceId);
185
- const lastUpdateClock = context.lastUpdateClock[event.spaceId] ?? -1;
186
- const result = context.repo.findWithProgress(idToAutomergeId(event.spaceId) as AnyDocumentId);
187
-
188
- // set it to ready to interact with the document
189
- result.handle.doneLoading();
190
-
191
- if (existingSpace) {
192
- return {
193
- ...context,
194
- spaces: context.spaces.map((existingSpace) => {
195
- if (existingSpace.id === event.spaceId) {
196
- const newSpace: SpaceStorageEntry = {
197
- id: existingSpace.id,
198
- events: existingSpace.events ?? [],
199
- state: existingSpace.state,
200
- keys: existingSpace.keys ?? [],
201
- automergeDocHandle: result.handle,
202
- inboxes: existingSpace.inboxes ?? [],
203
- };
204
- return newSpace;
205
- }
206
- return existingSpace;
207
- }),
208
- lastUpdateClock: {
209
- ...context.lastUpdateClock,
210
- [event.spaceId]: lastUpdateClock,
211
- },
212
- };
213
- }
214
- return {
215
- ...context,
216
- spaces: [
217
- ...context.spaces,
218
- {
219
- id: event.spaceId,
220
- events: [],
221
- state: undefined,
222
- keys: [],
223
- inboxes: [],
224
- updates: [],
225
- lastUpdateClock: -1,
226
- automergeDocHandle: result.handle,
227
- },
228
- ],
229
- };
230
- },
231
180
  applyEvent: (context, event: { spaceId: string; event: SpaceEvent; state: SpaceState }) => {
232
181
  return {
233
182
  ...context,