@ixo/editor 1.1.3 → 1.2.0

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.
@@ -1,180 +0,0 @@
1
- // src/core/lib/graphql-client.ts
2
- var GraphQLClient = class {
3
- constructor(endpoint, headers = {}) {
4
- this.endpoint = endpoint;
5
- this.headers = {
6
- "Content-Type": "application/json",
7
- ...headers
8
- };
9
- }
10
- async request(request) {
11
- const response = await fetch(this.endpoint, {
12
- method: "POST",
13
- headers: this.headers,
14
- body: JSON.stringify(request)
15
- });
16
- if (!response.ok) {
17
- throw new Error(`HTTP error! status: ${response.status}`);
18
- }
19
- const result = await response.json();
20
- if (result.errors && result.errors.length > 0) {
21
- throw new Error(`GraphQL error: ${result.errors[0].message}`);
22
- }
23
- if (!result.data) {
24
- throw new Error("No data returned from GraphQL query");
25
- }
26
- return result.data;
27
- }
28
- };
29
- var ixoGraphQLClient = new GraphQLClient(
30
- "https://devnet-blocksync-graphql.ixo.earth/graphql"
31
- );
32
-
33
- // src/core/lib/graphql-queries.ts
34
- var ENTITY_QUERY = `
35
- query Entity($entityId: String!) {
36
- entity(id: $entityId) {
37
- context
38
- relayerNode
39
- controller
40
- id
41
- type
42
- startDate
43
- endDate
44
- metadata
45
- linkedResource
46
- settings
47
- service
48
- externalId
49
- }
50
- }
51
- `;
52
- async function getEntity(entityId) {
53
- const response = await ixoGraphQLClient.request({
54
- query: ENTITY_QUERY,
55
- variables: { entityId },
56
- operationName: "Entity"
57
- });
58
- return response.entity;
59
- }
60
-
61
- // src/core/hooks/useMatrixProvider.ts
62
- import { useEffect, useState, useRef, useCallback, useMemo } from "react";
63
- import { MatrixProvider } from "ixo-matrix-crdt";
64
- function useMatrixProvider({
65
- matrixClient,
66
- roomId,
67
- yDoc
68
- }) {
69
- const [matrixProvider, setProvider] = useState(null);
70
- const [status, setStatus] = useState(
71
- "disconnected"
72
- );
73
- const isMountedRef = useRef(true);
74
- const providerRef = useRef(null);
75
- const retryTimeoutRef = useRef(null);
76
- const providerOptions = useMemo(
77
- () => ({
78
- translator: {
79
- updateEventType: "matrix-crdt.doc_update",
80
- snapshotEventType: "matrix-crdt.doc_snapshot"
81
- },
82
- enableExperimentalWebrtcSync: true,
83
- enableAwareness: true,
84
- reader: { snapshotInterval: 10 },
85
- writer: { flushInterval: 300, retryIfForbiddenInterval: 3e4 }
86
- }),
87
- []
88
- );
89
- const handleDocumentAvailable = useCallback(() => {
90
- if (isMountedRef.current) {
91
- setStatus("connected");
92
- }
93
- }, []);
94
- const handleDocumentUnavailable = useCallback(() => {
95
- if (isMountedRef.current) {
96
- setStatus("failed");
97
- }
98
- }, []);
99
- const handleCanWriteChanged = useCallback(() => {
100
- if (isMountedRef.current && providerRef.current) {
101
- setStatus(providerRef.current.canWrite ? "connected" : "failed");
102
- }
103
- }, []);
104
- const initProvider = useCallback(async () => {
105
- if (!isMountedRef.current) return;
106
- if (retryTimeoutRef.current) {
107
- clearTimeout(retryTimeoutRef.current);
108
- retryTimeoutRef.current = null;
109
- }
110
- setStatus("connecting");
111
- try {
112
- const client = matrixClient;
113
- client.canSupportVoip = false;
114
- client.clientOpts = { lazyLoadMembers: true };
115
- const provider = new MatrixProvider(
116
- yDoc,
117
- client,
118
- { type: "id", id: roomId },
119
- providerOptions
120
- );
121
- providerRef.current = provider;
122
- provider.onDocumentAvailable(handleDocumentAvailable);
123
- provider.onDocumentUnavailable(handleDocumentUnavailable);
124
- provider.onCanWriteChanged(handleCanWriteChanged);
125
- await provider.initialize();
126
- if (isMountedRef.current) {
127
- setProvider(provider);
128
- } else {
129
- provider.dispose();
130
- }
131
- } catch (err) {
132
- console.error("Matrix setup failed", err);
133
- if (isMountedRef.current) {
134
- setStatus("failed");
135
- retryTimeoutRef.current = setTimeout(() => {
136
- if (isMountedRef.current && !providerRef.current) {
137
- initProvider();
138
- }
139
- }, 5e3);
140
- }
141
- }
142
- }, [
143
- matrixClient,
144
- providerOptions,
145
- handleDocumentAvailable,
146
- handleDocumentUnavailable,
147
- handleCanWriteChanged
148
- ]);
149
- useEffect(() => {
150
- isMountedRef.current = true;
151
- initProvider();
152
- return () => {
153
- isMountedRef.current = false;
154
- if (retryTimeoutRef.current) {
155
- clearTimeout(retryTimeoutRef.current);
156
- retryTimeoutRef.current = null;
157
- }
158
- if (providerRef.current) {
159
- providerRef.current.dispose();
160
- providerRef.current = null;
161
- }
162
- setProvider(null);
163
- setStatus("disconnected");
164
- };
165
- }, [initProvider]);
166
- useEffect(() => {
167
- return () => {
168
- isMountedRef.current = false;
169
- };
170
- }, []);
171
- return { matrixProvider, connectionStatus: status };
172
- }
173
-
174
- export {
175
- GraphQLClient,
176
- ixoGraphQLClient,
177
- getEntity,
178
- useMatrixProvider
179
- };
180
- //# sourceMappingURL=chunk-2UJGZZWQ.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/lib/graphql-client.ts","../src/core/lib/graphql-queries.ts","../src/core/hooks/useMatrixProvider.ts"],"sourcesContent":["/**\n * Lightweight GraphQL client for IXO network queries\n */\n\nexport interface GraphQLResponse<T = any> {\n data?: T;\n errors?: Array<{\n message: string;\n locations?: Array<{ line: number; column: number }>;\n path?: Array<string | number>;\n }>;\n}\n\nexport interface GraphQLRequest {\n query: string;\n variables?: Record<string, any>;\n operationName?: string;\n}\n\nexport class GraphQLClient {\n private endpoint: string;\n private headers: Record<string, string>;\n\n constructor(endpoint: string, headers: Record<string, string> = {}) {\n this.endpoint = endpoint;\n this.headers = {\n 'Content-Type': 'application/json',\n ...headers,\n };\n }\n\n async request<T = any>(request: GraphQLRequest): Promise<T> {\n const response = await fetch(this.endpoint, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const result: GraphQLResponse<T> = await response.json();\n\n if (result.errors && result.errors.length > 0) {\n throw new Error(`GraphQL error: ${result.errors[0].message}`);\n }\n\n if (!result.data) {\n throw new Error('No data returned from GraphQL query');\n }\n\n return result.data;\n }\n}\n\n// Default client instance for IXO network\nexport const ixoGraphQLClient = new GraphQLClient(\n 'https://devnet-blocksync-graphql.ixo.earth/graphql'\n);\n","/**\n * GraphQL queries and types for IXO network\n */\n\nimport { ixoGraphQLClient } from './graphql-client';\n\n// Entity type definition based on the GraphQL schema\nexport interface Entity {\n context: string;\n relayerNode: string;\n controller: string;\n id: string;\n type: string;\n startDate: string;\n endDate: string;\n metadata: string;\n linkedResource: any[];\n settings: Record<string, Record<string, any>>;\n service: string;\n externalId: string;\n}\n\nexport interface EntityResponse {\n entity: Entity;\n}\n\nexport interface EntityVariables {\n entityId: string;\n}\n\n// GraphQL query for fetching entity data\nexport const ENTITY_QUERY = `\n query Entity($entityId: String!) {\n entity(id: $entityId) {\n context\n relayerNode\n controller\n id\n type\n startDate\n endDate\n metadata\n linkedResource\n settings\n service\n externalId\n }\n }\n`;\n\n/**\n * Fetches entity data by ID from the IXO network\n * @param entityId - The unique identifier for the entity\n * @returns Promise resolving to the entity data\n */\nexport async function getEntity(entityId: string): Promise<Entity> {\n const response = await ixoGraphQLClient.request<EntityResponse>({\n query: ENTITY_QUERY,\n variables: { entityId },\n operationName: 'Entity',\n });\n\n return response.entity;\n}\n","import { useEffect, useState, useRef, useCallback, useMemo } from 'react';\nimport { MatrixProvider } from 'ixo-matrix-crdt';\nimport { MatrixClient } from 'matrix-js-sdk';\nimport * as Y from 'yjs';\n\nexport function useMatrixProvider({\n matrixClient,\n roomId,\n yDoc,\n}: {\n matrixClient: MatrixClient;\n roomId: string;\n yDoc: Y.Doc;\n}) {\n const [matrixProvider, setProvider] = useState<MatrixProvider | null>(null);\n const [status, setStatus] = useState<'connecting' | 'connected' | 'failed' | 'disconnected'>(\n 'disconnected'\n );\n\n // Use refs to track cleanup and prevent memory leaks\n const isMountedRef = useRef(true);\n const providerRef = useRef<MatrixProvider | null>(null);\n const retryTimeoutRef = useRef<number | null>(null);\n\n // Memoize provider options to prevent recreation\n const providerOptions = useMemo(\n () => ({\n translator: {\n updateEventType: 'matrix-crdt.doc_update',\n snapshotEventType: 'matrix-crdt.doc_snapshot',\n },\n enableExperimentalWebrtcSync: true,\n enableAwareness: true,\n reader: { snapshotInterval: 10 },\n writer: { flushInterval: 300, retryIfForbiddenInterval: 30000 },\n }),\n []\n );\n\n // Memoized status update callbacks to prevent recreation\n const handleDocumentAvailable = useCallback(() => {\n if (isMountedRef.current) {\n setStatus('connected');\n }\n }, []);\n\n const handleDocumentUnavailable = useCallback(() => {\n if (isMountedRef.current) {\n setStatus('failed');\n }\n }, []);\n\n const handleCanWriteChanged = useCallback(() => {\n if (isMountedRef.current && providerRef.current) {\n setStatus(providerRef.current.canWrite ? 'connected' : 'failed');\n }\n }, []);\n\n const initProvider = useCallback(async () => {\n if (!isMountedRef.current) return;\n\n // Clear any existing retry timeout\n if (retryTimeoutRef.current) {\n clearTimeout(retryTimeoutRef.current);\n retryTimeoutRef.current = null;\n }\n\n setStatus('connecting');\n\n try {\n const client = matrixClient;\n (client as any).canSupportVoip = false;\n (client as any).clientOpts = { lazyLoadMembers: true };\n\n const provider = new MatrixProvider(\n yDoc,\n client,\n { type: 'id', id: roomId },\n providerOptions\n );\n\n providerRef.current = provider;\n\n provider.onDocumentAvailable(handleDocumentAvailable);\n provider.onDocumentUnavailable(handleDocumentUnavailable);\n provider.onCanWriteChanged(handleCanWriteChanged);\n\n await provider.initialize();\n\n if (isMountedRef.current) {\n setProvider(provider);\n } else {\n // Component was unmounted during initialization\n provider.dispose();\n }\n } catch (err) {\n console.error('Matrix setup failed', err);\n if (isMountedRef.current) {\n setStatus('failed');\n // Retry with exponential backoff, but only if component is still mounted\n // @ts-ignore\n retryTimeoutRef.current = setTimeout(() => {\n if (isMountedRef.current && !providerRef.current) {\n initProvider();\n }\n }, 5000);\n }\n }\n }, [\n matrixClient,\n providerOptions,\n handleDocumentAvailable,\n handleDocumentUnavailable,\n handleCanWriteChanged,\n ]);\n\n useEffect(() => {\n isMountedRef.current = true;\n initProvider();\n\n return () => {\n isMountedRef.current = false;\n\n // Clear retry timeout\n if (retryTimeoutRef.current) {\n clearTimeout(retryTimeoutRef.current);\n retryTimeoutRef.current = null;\n }\n\n // Cleanup provider\n if (providerRef.current) {\n providerRef.current.dispose();\n providerRef.current = null;\n }\n\n setProvider(null);\n setStatus('disconnected');\n };\n }, [initProvider]);\n\n // Cleanup effect to ensure refs are reset on unmount\n useEffect(() => {\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n return { matrixProvider, connectionStatus: status };\n}\n"],"mappings":"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","names":[]}