@graphprotocol/hypergraph 0.0.1
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/LICENSE +21 -0
- package/README.md +2 -0
- package/dist/connect/auth-storage.d.ts.map +1 -0
- package/dist/connect/create-app-identity.d.ts.map +1 -0
- package/dist/connect/create-auth-url.d.ts.map +1 -0
- package/dist/connect/create-auth-url.js +35 -0
- package/dist/connect/create-auth-url.js.map +1 -0
- package/dist/connect/create-callback-params.d.ts.map +1 -0
- package/dist/connect/create-callback-params.js +17 -0
- package/dist/connect/create-callback-params.js.map +1 -0
- package/dist/connect/create-identity-keys.d.ts.map +1 -0
- package/dist/connect/identity-encryption.d.ts.map +1 -0
- package/dist/connect/index.d.ts.map +1 -0
- package/dist/connect/login.d.ts.map +1 -0
- package/dist/connect/parse-callback-params.d.ts.map +1 -0
- package/dist/connect/parse-callback-params.js +63 -0
- package/dist/connect/parse-callback-params.js.map +1 -0
- package/dist/connect/prove-ownership.d.ts.map +1 -0
- package/dist/connect/types.d.ts +57 -0
- package/dist/connect/types.d.ts.map +1 -0
- package/dist/connect/types.js +24 -0
- package/dist/connect/types.js.map +1 -0
- package/dist/entity/create.d.ts.map +1 -0
- package/dist/entity/decodedEntitiesCache.d.ts.map +1 -0
- package/dist/entity/delete.d.ts.map +1 -0
- package/dist/entity/entity.d.ts.map +1 -0
- package/dist/entity/entityRelationParentsMap.d.ts.map +1 -0
- package/dist/entity/findMany.d.ts.map +1 -0
- package/dist/entity/findMany.js +436 -0
- package/dist/entity/findMany.js.map +1 -0
- package/dist/entity/findOne.d.ts.map +1 -0
- package/dist/entity/getEntityRelations.d.ts.map +1 -0
- package/dist/entity/index.d.ts.map +1 -0
- package/dist/entity/relationParentsMap.d.ts.map +1 -0
- package/dist/entity/removeRelation.d.ts.map +1 -0
- package/dist/entity/types.d.ts +79 -0
- package/dist/entity/types.d.ts.map +1 -0
- package/dist/entity/types.js +2 -0
- package/dist/entity/types.js.map +1 -0
- package/dist/entity/update.d.ts.map +1 -0
- package/dist/identity/auth-storage.d.ts.map +1 -0
- package/dist/identity/get-verified-identity.d.ts.map +1 -0
- package/dist/identity/identity-encryption.d.ts.map +1 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/logout.d.ts.map +1 -0
- package/dist/identity/prove-ownership.d.ts.map +1 -0
- package/dist/inboxes/create-inbox.d.ts.map +1 -0
- package/dist/inboxes/get-list-inboxes.d.ts.map +1 -0
- package/dist/inboxes/index.d.ts.map +1 -0
- package/dist/inboxes/merge-messages.d.ts.map +1 -0
- package/dist/inboxes/message-encryption.d.ts.map +1 -0
- package/dist/inboxes/message-validation.d.ts.map +1 -0
- package/dist/inboxes/prepare-message.d.ts +31 -0
- package/dist/inboxes/prepare-message.d.ts.map +1 -0
- package/dist/inboxes/recover-inbox-creator.d.ts.map +1 -0
- package/dist/inboxes/recover-inbox-message-signer.d.ts.map +1 -0
- package/dist/inboxes/send-message.d.ts.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/messages/index.d.ts.map +1 -0
- package/dist/messages/signed-update-message.d.ts.map +1 -0
- package/dist/messages/types.d.ts.map +1 -0
- package/dist/space-events/accept-invitation.d.ts.map +1 -0
- package/dist/space-events/apply-event.d.ts.map +1 -0
- package/dist/space-events/create-inbox.d.ts.map +1 -0
- package/dist/space-events/create-invitation.d.ts.map +1 -0
- package/dist/space-events/create-space.d.ts.map +1 -0
- package/dist/space-events/delete-space.d.ts.map +1 -0
- package/dist/space-events/hash-event.d.ts.map +1 -0
- package/dist/space-events/index.d.ts.map +1 -0
- package/dist/space-info/decrypt-space-info.d.ts.map +1 -0
- package/dist/space-info/encrypt-and-sign-space-info.d.ts.map +1 -0
- package/dist/space-info/index.d.ts.map +1 -0
- package/dist/store-connect.d.ts.map +1 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/type/type.d.ts.map +1 -0
- package/dist/utils/automergeId.d.ts +9 -0
- package/dist/utils/automergeId.d.ts.map +1 -0
- package/dist/utils/automergeId.js +17 -0
- package/dist/utils/automergeId.js.map +1 -0
- package/dist/utils/generateId.d.ts +15 -0
- package/dist/utils/generateId.d.ts.map +1 -0
- package/dist/utils/generateId.js +18 -0
- package/dist/utils/generateId.js.map +1 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/package.json +35 -0
- package/src/connect/auth-storage.ts +67 -0
- package/src/connect/create-app-identity.ts +16 -0
- package/src/connect/create-auth-url.ts +42 -0
- package/src/connect/create-callback-params.ts +30 -0
- package/src/connect/create-identity-keys.ts +20 -0
- package/src/connect/identity-encryption.ts +232 -0
- package/src/connect/index.ts +10 -0
- package/src/connect/login.ts +114 -0
- package/src/connect/parse-auth-params.ts +37 -0
- package/src/connect/parse-callback-params.ts +67 -0
- package/src/connect/prove-ownership.ts +58 -0
- package/src/connect/types.ts +67 -0
- package/src/entity/create.ts +58 -0
- package/src/entity/decodedEntitiesCache.ts +38 -0
- package/src/entity/delete.ts +52 -0
- package/src/entity/entity.ts +26 -0
- package/src/entity/entityRelationParentsMap.ts +6 -0
- package/src/entity/findMany.ts +506 -0
- package/src/entity/findOne.ts +34 -0
- package/src/entity/getEntityRelations.ts +45 -0
- package/src/entity/hasValidTypesProperty.ts +8 -0
- package/src/entity/index.ts +8 -0
- package/src/entity/relationParentsMap.ts +6 -0
- package/src/entity/removeRelation.ts +21 -0
- package/src/entity/test.ts +0 -0
- package/src/entity/types.ts +100 -0
- package/src/entity/update.ts +58 -0
- package/src/entity/variant-schema.ts +677 -0
- package/src/identity/auth-storage.ts +57 -0
- package/src/identity/get-verified-identity.ts +53 -0
- package/src/identity/identity-encryption.ts +140 -0
- package/src/identity/index.ts +6 -0
- package/src/identity/logout.ts +8 -0
- package/src/identity/prove-ownership.ts +58 -0
- package/src/identity/types.ts +44 -0
- package/src/inboxes/create-inbox.ts +102 -0
- package/src/inboxes/get-list-inboxes.ts +52 -0
- package/src/inboxes/index.ts +10 -0
- package/src/inboxes/merge-messages.ts +28 -0
- package/src/inboxes/message-encryption.ts +35 -0
- package/src/inboxes/message-validation.ts +66 -0
- package/src/inboxes/prepare-message.ts +85 -0
- package/src/inboxes/recover-inbox-creator.ts +29 -0
- package/src/inboxes/recover-inbox-message-signer.ts +42 -0
- package/src/inboxes/send-message.ts +75 -0
- package/src/inboxes/types.ts +9 -0
- package/src/index.ts +13 -0
- package/src/key/create-key.ts +27 -0
- package/src/key/decrypt-key.ts +19 -0
- package/src/key/encrypt-key.ts +27 -0
- package/src/key/index.ts +4 -0
- package/src/key/key-box.ts +31 -0
- package/src/messages/decrypt-message.ts +13 -0
- package/src/messages/encrypt-message.ts +14 -0
- package/src/messages/index.ts +5 -0
- package/src/messages/serialize.ts +24 -0
- package/src/messages/signed-update-message.ts +84 -0
- package/src/messages/types.ts +506 -0
- package/src/space-events/accept-invitation.ts +36 -0
- package/src/space-events/apply-event.ts +150 -0
- package/src/space-events/create-inbox.ts +56 -0
- package/src/space-events/create-invitation.ts +41 -0
- package/src/space-events/create-space.ts +35 -0
- package/src/space-events/delete-space.ts +36 -0
- package/src/space-events/hash-event.ts +10 -0
- package/src/space-events/index.ts +8 -0
- package/src/space-events/types.ts +137 -0
- package/src/space-info/decrypt-space-info.ts +22 -0
- package/src/space-info/encrypt-and-sign-space-info.ts +50 -0
- package/src/space-info/index.ts +3 -0
- package/src/space-info/types.ts +7 -0
- package/src/store-connect.ts +504 -0
- package/src/store.ts +493 -0
- package/src/type/type.ts +25 -0
- package/src/types.ts +47 -0
- package/src/utils/assertExhaustive.ts +3 -0
- package/src/utils/automergeId.ts +18 -0
- package/src/utils/base58.ts +74 -0
- package/src/utils/generateId.ts +18 -0
- package/src/utils/hexBytesAddressUtils.ts +25 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/internal/base58Utils.ts +47 -0
- package/src/utils/internal/deep-merge.ts +38 -0
- package/src/utils/isRelationField.ts +9 -0
- package/src/utils/jsc.ts +94 -0
- package/src/utils/stringToUint8Array.ts +9 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { DocHandle } from '@automerge/automerge-repo';
|
|
2
|
+
import type { DocumentContent } from './types.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Removes a relation from an entity
|
|
6
|
+
*/
|
|
7
|
+
export const removeRelation = (handle: DocHandle<DocumentContent>) => {
|
|
8
|
+
return (relationId: string): boolean => {
|
|
9
|
+
let result = false;
|
|
10
|
+
|
|
11
|
+
// apply changes to the repo -> removes the existing entity by its id
|
|
12
|
+
handle.change((doc) => {
|
|
13
|
+
if (doc.relations?.[relationId] !== undefined) {
|
|
14
|
+
doc.relations[relationId].__deleted = true;
|
|
15
|
+
result = true;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type * as Schema from 'effect/Schema';
|
|
2
|
+
|
|
3
|
+
export type Any = Schema.Schema.Any & {
|
|
4
|
+
readonly fields: Schema.Struct.Fields;
|
|
5
|
+
readonly insert: Schema.Schema.Any;
|
|
6
|
+
readonly update: Schema.Schema.Any;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export type AnyNoContext = Schema.Schema.AnyNoContext & {
|
|
10
|
+
readonly fields: Schema.Struct.Fields;
|
|
11
|
+
readonly insert: Schema.Schema.AnyNoContext;
|
|
12
|
+
readonly update: Schema.Schema.AnyNoContext;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export type Update<S extends Any> = S['update'];
|
|
16
|
+
export type Insert<S extends Any> = S['insert'];
|
|
17
|
+
|
|
18
|
+
export type Entity<S extends AnyNoContext> = Schema.Schema.Type<S> & {
|
|
19
|
+
type: string;
|
|
20
|
+
// TODO: can we solve this directly on the variante schema?
|
|
21
|
+
id: string;
|
|
22
|
+
// TODO: should we expose these internal fields?
|
|
23
|
+
// __deleted: boolean;
|
|
24
|
+
// __version: string;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type EntityWithRelation<S extends AnyNoContext> = Entity<S> & {
|
|
28
|
+
_relation: { id: string } | undefined;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export type DocumentEntity = {
|
|
32
|
+
__deleted: boolean;
|
|
33
|
+
[key: string]: unknown;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export type DocumentRelation = {
|
|
37
|
+
from: string;
|
|
38
|
+
to: string;
|
|
39
|
+
fromTypeName: string;
|
|
40
|
+
fromPropertyName: string;
|
|
41
|
+
__deleted: boolean;
|
|
42
|
+
[key: string]: unknown;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export type DocumentContent = {
|
|
46
|
+
entities?: Record<string, DocumentEntity>;
|
|
47
|
+
relations?: Record<string, DocumentRelation>;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export type EntityCheckboxFilter = {
|
|
51
|
+
is: boolean;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export type EntityNumberFilter = {
|
|
55
|
+
is?: number;
|
|
56
|
+
greaterThan?: number;
|
|
57
|
+
lessThan?: number;
|
|
58
|
+
NOT?: EntityNumberFilter;
|
|
59
|
+
OR?: EntityNumberFilter[];
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export type EntityTextFilter = {
|
|
63
|
+
is?: string;
|
|
64
|
+
startsWith?: string;
|
|
65
|
+
endsWith?: string;
|
|
66
|
+
contains?: string;
|
|
67
|
+
equals?: string;
|
|
68
|
+
NOT?: EntityTextFilter;
|
|
69
|
+
OR?: EntityTextFilter[];
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export type CrossFieldFilter<T> = {
|
|
73
|
+
[K in keyof T]?: EntityFieldFilter<T[K]>;
|
|
74
|
+
} & {
|
|
75
|
+
OR?: Array<CrossFieldFilter<T>>;
|
|
76
|
+
NOT?: CrossFieldFilter<T>;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
export type EntityFieldFilter<T> = {
|
|
80
|
+
is?: T;
|
|
81
|
+
NOT?: EntityFieldFilter<T>;
|
|
82
|
+
OR?: Array<EntityFieldFilter<T>>;
|
|
83
|
+
} & (T extends boolean
|
|
84
|
+
? {
|
|
85
|
+
is?: boolean;
|
|
86
|
+
}
|
|
87
|
+
: T extends number
|
|
88
|
+
? {
|
|
89
|
+
greaterThan?: number;
|
|
90
|
+
lessThan?: number;
|
|
91
|
+
}
|
|
92
|
+
: T extends string
|
|
93
|
+
? {
|
|
94
|
+
startsWith?: string;
|
|
95
|
+
endsWith?: string;
|
|
96
|
+
contains?: string;
|
|
97
|
+
}
|
|
98
|
+
: Record<string, never>);
|
|
99
|
+
|
|
100
|
+
export type EntityFilter<T> = CrossFieldFilter<T>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { DocHandle } from '@automerge/automerge-repo';
|
|
2
|
+
import * as Schema from 'effect/Schema';
|
|
3
|
+
import { EntityNotFoundError } from './entity.js';
|
|
4
|
+
import type { AnyNoContext, DocumentContent, Entity, Update } from './types.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Update an existing entity model of given type in the repo.
|
|
8
|
+
*/
|
|
9
|
+
export const update = <const S extends AnyNoContext>(handle: DocHandle<DocumentContent>, type: S) => {
|
|
10
|
+
const validate = Schema.validateSync(Schema.partial(type.update));
|
|
11
|
+
const encode = Schema.encodeSync(type.update);
|
|
12
|
+
const decode = Schema.decodeUnknownSync(type.update);
|
|
13
|
+
|
|
14
|
+
// TODO: what's the right way to get the name of the type?
|
|
15
|
+
// @ts-expect-error name is defined
|
|
16
|
+
const typeName = type.name;
|
|
17
|
+
|
|
18
|
+
return (id: string, data: Schema.Simplify<Partial<Schema.Schema.Type<Update<S>>>>): Entity<S> => {
|
|
19
|
+
validate(data);
|
|
20
|
+
|
|
21
|
+
// apply changes to the repo -> updates the existing entity to the repo entities document
|
|
22
|
+
let updated: Schema.Schema.Type<S> | undefined = undefined;
|
|
23
|
+
handle.change((doc) => {
|
|
24
|
+
if (doc.entities === undefined) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// TODO: Fetch the pre-decoded value from the local cache.
|
|
29
|
+
const entity = doc.entities[id] ?? undefined;
|
|
30
|
+
if (entity === undefined || typeof entity !== 'object') {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// TODO: Try to get a diff of the entity properties and only override the changed ones.
|
|
35
|
+
updated = { ...decode(entity), ...data };
|
|
36
|
+
|
|
37
|
+
const encoded = {
|
|
38
|
+
...encode(updated),
|
|
39
|
+
'@@types@@': [typeName],
|
|
40
|
+
__deleted: entity.__deleted ?? false,
|
|
41
|
+
__version: entity.__version ?? '',
|
|
42
|
+
};
|
|
43
|
+
// filter out undefined values otherwise Automerge will throw an error
|
|
44
|
+
for (const key in updated) {
|
|
45
|
+
if (updated[key] === undefined) {
|
|
46
|
+
delete encoded[key];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
doc.entities[id] = encoded;
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
if (updated === undefined) {
|
|
53
|
+
throw new EntityNotFoundError({ id, type });
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return { id, type: typeName, ...(updated as Schema.Schema.Type<S>) };
|
|
57
|
+
};
|
|
58
|
+
};
|