@seedprotocol/sdk 0.2.35 → 0.2.37

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 (30) hide show
  1. package/dist/{Db-D-52gLUI.js → Db-BY5tGBjf.js} +3 -2
  2. package/dist/{Db-D-52gLUI.js.map → Db-BY5tGBjf.js.map} +1 -1
  3. package/dist/{Db-NeHf94ps.js → Db-Cf-eL0dQ.js} +3 -2
  4. package/dist/{Db-NeHf94ps.js.map → Db-Cf-eL0dQ.js.map} +1 -1
  5. package/dist/{Item-DGHQwcb5.js → Item-DjAvf0La.js} +3 -2
  6. package/dist/{Item-DGHQwcb5.js.map → Item-DjAvf0La.js.map} +1 -1
  7. package/dist/{ItemProperty-DLVVxvDH.js → ItemProperty-Bw123S6a.js} +3 -2
  8. package/dist/{ItemProperty-DLVVxvDH.js.map → ItemProperty-Bw123S6a.js.map} +1 -1
  9. package/dist/{index-BNmLdqsV.js → index-B8CUXjXQ.js} +3 -2
  10. package/dist/index-B8CUXjXQ.js.map +1 -0
  11. package/dist/{index-DoItdpEH.js → index-COdd47Vz.js} +26 -11
  12. package/dist/index-COdd47Vz.js.map +1 -0
  13. package/dist/main.js +2 -1
  14. package/dist/main.js.map +1 -1
  15. package/dist/{seed.schema.config-ClaPSyZU.js → seed.schema.config-DOKzk_Aj.js} +3 -2
  16. package/dist/seed.schema.config-DOKzk_Aj.js.map +1 -0
  17. package/dist/src/actors.ts +272 -34
  18. package/dist/src/download.ts +3 -3
  19. package/dist/src/waitForDb.ts +17 -18
  20. package/dist/types/src/events/files/index.d.ts.map +1 -1
  21. package/package.json +4 -2
  22. package/dist/index-BNmLdqsV.js.map +0 -1
  23. package/dist/index-DoItdpEH.js.map +0 -1
  24. package/dist/seed.schema.config-ClaPSyZU.js.map +0 -1
  25. package/dist/src/content-hash.ts +0 -30
  26. package/dist/src/image-resize.ts +0 -28
  27. package/dist/types/src/browser/workers/content-hash.d.ts +0 -2
  28. package/dist/types/src/browser/workers/content-hash.d.ts.map +0 -1
  29. package/dist/types/src/browser/workers/image-resize.d.ts +0 -2
  30. package/dist/types/src/browser/workers/image-resize.d.ts.map +0 -1
package/dist/main.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import 'immer';
2
2
  import 'reflect-metadata';
3
- export { D as Db, c as ImageSrc, d as Item, e as ItemProperty, J as Json, L as List, M as Model, P as Property, R as Relation, T as Text, t as client, r as eventEmitter, p as getCorrectId, q as getGlobalService, h as useCreateItem, j as useDeleteItem, k as useGlobalServiceStatus, f as useItem, g as useItemProperties, i as useItemProperty, u as useItems, m as usePersistedSnapshots, l as usePublishItem, o as useService, n as useServices, s as withSeed } from './index-DoItdpEH.js';
3
+ export { D as Db, c as ImageSrc, d as Item, e as ItemProperty, J as Json, L as List, M as Model, P as Property, R as Relation, T as Text, t as client, r as eventEmitter, p as getCorrectId, q as getGlobalService, h as useCreateItem, j as useDeleteItem, k as useGlobalServiceStatus, f as useItem, g as useItemProperties, i as useItemProperty, u as useItems, m as usePersistedSnapshots, l as usePublishItem, o as useService, n as useServices, s as withSeed } from './index-COdd47Vz.js';
4
4
  export { B as BaseArweaveClient, a as BaseEasClient, c as BaseFileManager, b as BaseQueryClient } from './constants-BakHTrB9.js';
5
5
  import 'tslib';
6
6
  import '@sinclair/typebox';
@@ -20,6 +20,7 @@ import 'node:fs';
20
20
  import '@zenfs/dom';
21
21
  import 'path';
22
22
  import 'arweave';
23
+ import 'threads';
23
24
  import 'rxjs';
24
25
  import '@ethereum-attestation-service/eas-sdk';
25
26
  import 'use-immer';
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"main.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { __decorate, __metadata } from 'tslib';
2
2
  import 'reflect-metadata';
3
- import { T as Text, M as Model } from './index-DoItdpEH.js';
3
+ import { T as Text, M as Model } from './index-COdd47Vz.js';
4
4
  import 'immer';
5
5
  import '@sinclair/typebox';
6
6
  import 'eventemitter3';
@@ -21,6 +21,7 @@ import 'node:fs';
21
21
  import '@zenfs/dom';
22
22
  import 'path';
23
23
  import 'arweave';
24
+ import 'threads';
24
25
  import 'rxjs';
25
26
  import 'use-immer';
26
27
  import '@xstate/react';
@@ -71,4 +72,4 @@ const models = {
71
72
  };
72
73
 
73
74
  export { models };
74
- //# sourceMappingURL=seed.schema.config-ClaPSyZU.js.map
75
+ //# sourceMappingURL=seed.schema.config-DOKzk_Aj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.schema.config-DOKzk_Aj.js","sources":["../../src/db/configs/seed.schema.config.ts"],"sourcesContent":["import { Model, Text } from '@/schema'\n\n@Model\nclass Seed {\n @Text() uid!: string\n @Text() type!: string\n}\n\n@Model\nclass Version {\n @Text() seedUid!: string\n @Text() note!: string\n}\n\n@Model\nclass Metadata {\n @Text() key!: string\n @Text() value!: string\n}\n\nexport const models = {\n Seed,\n Version,\n Metadata,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,IAAM,IAAI,GAAV,MAAM,IAAI,CAAA;CAGT;AAFS,UAAA,CAAA;AAAP,IAAA,IAAI,EAAE;;AAAa,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,KAAA,EAAA,KAAA,CAAA,CAAA;AACZ,UAAA,CAAA;AAAP,IAAA,IAAI,EAAE;;AAAc,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA;AAFjB,IAAI,GAAA,UAAA,CAAA;IADT;AACK,CAAA,EAAA,IAAI,CAGT;AAGD,IAAM,OAAO,GAAb,MAAM,OAAO,CAAA;CAGZ;AAFS,UAAA,CAAA;AAAP,IAAA,IAAI,EAAE;;AAAiB,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;AAChB,UAAA,CAAA;AAAP,IAAA,IAAI,EAAE;;AAAc,CAAA,EAAA,OAAA,CAAA,SAAA,EAAA,MAAA,EAAA,KAAA,CAAA,CAAA;AAFjB,OAAO,GAAA,UAAA,CAAA;IADZ;AACK,CAAA,EAAA,OAAO,CAGZ;AAGD,IAAM,QAAQ,GAAd,MAAM,QAAQ,CAAA;CAGb;AAFS,UAAA,CAAA;AAAP,IAAA,IAAI,EAAE;;AAAa,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,KAAA,EAAA,KAAA,CAAA,CAAA;AACZ,UAAA,CAAA;AAAP,IAAA,IAAI,EAAE;;AAAe,CAAA,EAAA,QAAA,CAAA,SAAA,EAAA,OAAA,EAAA,KAAA,CAAA,CAAA;AAFlB,QAAQ,GAAA,UAAA,CAAA;IADb;AACK,CAAA,EAAA,QAAQ,CAGb;AAEY,MAAA,MAAM,GAAG;IACpB,IAAI;IACJ,OAAO;IACP,QAAQ;;;;;"}
@@ -1,56 +1,294 @@
1
1
  import { EventObject, fromCallback } from 'xstate'
2
- import { downloadMachine } from '@/schema/file/download'
2
+ import { fetchAllFilesMachine } from '@/schema/file/fetchAll/index'
3
+ import { ARWEAVE_HOST } from '@/services/internal/constants'
3
4
  import { GET_FILES_METADATA } from '@/schema/file/queries'
5
+ import { getArweave } from '@/helpers/ArweaveClient'
6
+ import { fs } from '@zenfs/core'
7
+ import {
8
+ getDataTypeFromString,
9
+ getMimeType,
10
+ identifyString,
11
+ } from '@/helpers'
12
+ import { appState } from '@/seedSchema'
13
+ import { eq } from 'drizzle-orm'
4
14
  import { BaseEasClient } from '@/helpers/EasClient/BaseEasClient'
5
15
  import { BaseQueryClient } from '@/helpers/QueryClient/BaseQueryClient'
16
+ import debug from 'debug'
17
+ import { BaseDb } from '@/db/Db/BaseDb'
18
+ import { saveAppState } from '@/db/write/saveAppState'
6
19
 
20
+ const logger = debug('app:file:actors:fetchAll')
7
21
 
8
- export const fetchMetadata = fromCallback<EventObject, typeof downloadMachine>(
9
- ({ sendBack, input: { context } }) => {
10
- const { addresses } = context
22
+ type FileType = {
23
+ mimeType: string
24
+ extension: string
25
+ }
11
26
 
12
- const fetchMetadata = async () => {
13
- const queryClient = BaseQueryClient.getQueryClient()
14
- const easClient = BaseEasClient.getEasClient()
27
+ // Map of common MIME types to file extensions
28
+ const fileTypeMap: Record<string, FileType> = {
29
+ 'image/jpeg': { mimeType: 'image/jpeg', extension: '.jpg' },
30
+ 'image/png': { mimeType: 'image/png', extension: '.png' },
31
+ 'application/json': { mimeType: 'application/json', extension: '.json' },
32
+ 'text/plain': { mimeType: 'text/plain', extension: '.txt' },
33
+ // Add more MIME types and file extensions as needed
34
+ }
15
35
 
16
- const metadataRecords = await queryClient.fetchQuery({
17
- queryKey: ['getFilesMetadata', ...addresses],
18
- queryFn: async () =>
19
- easClient.request(GET_FILES_METADATA, {
20
- where: {
21
- attester: {
22
- in: addresses,
23
- },
24
- decodedDataJson: {
25
- contains: 'transactionId',
36
+ export const fetchAllMetadataRecords = fromCallback<
37
+ EventObject,
38
+ typeof fetchAllFilesMachine
39
+ >(({ sendBack, receive, input: { context, event } }) => {
40
+ const { addresses } = context
41
+
42
+ const _fetchAllMetadataRecords = async () => {
43
+ const queryClient = BaseQueryClient.getQueryClient()
44
+ const easClient = BaseEasClient.getEasClient()
45
+
46
+ const { filesMetadata } = await queryClient.fetchQuery({
47
+ queryKey: ['getFilesMetadata', ...addresses],
48
+ queryFn: async () =>
49
+ easClient.request(GET_FILES_METADATA, {
50
+ where: {
51
+ attester: {
52
+ in: addresses,
53
+ },
54
+ schema: {
55
+ is: {
56
+ id: {
57
+ equals:
58
+ '0x55fdefb36fcbbaebeb7d6b41dc3a1a9666e4e42154267c889de064faa7ede517',
59
+ },
26
60
  },
27
61
  },
28
- }),
29
- })
62
+ },
63
+ }),
64
+ })
30
65
 
31
- return metadataRecords
32
- }
66
+ return filesMetadata
67
+ }
33
68
 
34
- fetchMetadata().then((metadataRecords) => {
35
- sendBack({ type: 'fetchingMetadataSuccess', metadataRecords })
36
- })
69
+ _fetchAllMetadataRecords().then((filesMetadata) => {
70
+ sendBack({ type: 'fetchingAllMetadataRecordsSuccess', filesMetadata })
71
+ })
37
72
 
38
- return () => { }
39
- },
40
- )
73
+ return () => { }
74
+ })
41
75
 
42
- export const fetchBinaryData = fromCallback<
76
+ export const fetchAllBinaryData = fromCallback<
43
77
  EventObject,
44
- typeof downloadMachine
45
- >(({ sendBack, receive, input: { context } }) => {
46
- const { addresses } = context
78
+ typeof fetchAllFilesMachine
79
+ >(({ sendBack, input: { context } }) => {
80
+ const { filesMetadata, addresses } = context
81
+
82
+ const _fetchAllBinaryData = async () => {
83
+ if (!(await fs.promises.exists('/files'))) {
84
+ await fs.promises.mkdir('/files', { recursive: true })
85
+ }
86
+
87
+ if (!(await fs.promises.exists('/files/html'))) {
88
+ await fs.promises.mkdir('/files/html', { recursive: true })
89
+ }
90
+
91
+ if (!(await fs.promises.exists('/files/json'))) {
92
+ await fs.promises.mkdir('/files/json', { recursive: true })
93
+ }
94
+
95
+ if (!(await fs.promises.exists('/files/images'))) {
96
+ await fs.promises.mkdir('/files/images', { recursive: true })
97
+ }
98
+
99
+ const appDb = BaseDb.getAppDb()
100
+
101
+ if (!appDb) {
102
+ logger('[fetchAll/actors] [fetchAllBinaryData] seedDb not available')
103
+ return []
104
+ }
105
+
106
+ for (const fileMetadata of filesMetadata) {
107
+ const json = JSON.parse(fileMetadata.decodedDataJson)
108
+ const transactionId = json[0].value.value
109
+
110
+ const excludedTransactionsQuery = await appDb
111
+ .select()
112
+ .from(appState)
113
+ .where(eq(appState.key, 'excludedTransactions'))
114
+
115
+ let excludedTransactions = new Set<string>()
116
+
117
+ if (excludedTransactionsQuery && excludedTransactionsQuery.length === 1) {
118
+ const valueString = excludedTransactionsQuery[0].value
119
+ if (valueString) {
120
+ const excludedTransactionsArray = JSON.parse(valueString)
121
+ excludedTransactions = new Set(excludedTransactionsArray)
122
+ }
123
+ }
124
+
125
+ if (excludedTransactions.has(transactionId)) {
126
+ continue
127
+ }
128
+
129
+ const arweave = getArweave()
130
+
131
+ if (!arweave) {
132
+ logger('[fetchAll/actors] [fetchAllBinaryData] arweave not available')
133
+ return []
134
+ }
135
+
136
+ try {
137
+ const res = await fetch(
138
+ `https://${ARWEAVE_HOST}/tx/${transactionId}/status`,
139
+ )
140
+
141
+ if (res.status !== 200) {
142
+ logger(
143
+ `[fetchAll/actors] [fetchAllBinaryData] error fetching transaction data for ${transactionId}`,
144
+ )
145
+
146
+ excludedTransactions.add(transactionId)
147
+
148
+ await saveAppState(
149
+ 'excludedTransactions',
150
+ JSON.stringify(Array.from(excludedTransactions)),
151
+ )
152
+
153
+ logger(
154
+ '[fetchAll/actors] [fetchAllBinaryData] updated excludedTransactions:',
155
+ excludedTransactions,
156
+ )
157
+
158
+ continue
159
+ }
160
+
161
+ const dataString = await arweave.transactions
162
+ .getData(transactionId, {
163
+ decode: true,
164
+ string: true,
165
+ })
166
+ .catch((error) => {
167
+ logger(
168
+ `[fetchAll/actors] [fetchAllBinaryData] error fetching transaction data for ${transactionId}`,
169
+ error,
170
+ )
171
+ })
172
+
173
+ const dataUint8Array = await arweave.transactions.getData(transactionId)
174
+ // let buffer
175
+ //
176
+ // if (dataUint8Array && dataUint8Array instanceof Uint8Array) {
177
+ // }
178
+
179
+ let contentType = identifyString(dataString)
180
+ if (
181
+ contentType !== 'json' &&
182
+ contentType !== 'base64' &&
183
+ contentType !== 'html'
184
+ ) {
185
+ const possibleImageType = getDataTypeFromString(dataString)
186
+ if (!possibleImageType) {
187
+ logger(
188
+ `[fetchAll/actors] [fetchAllBinaryData] transaction ${transactionId} data not in expected format: ${possibleImageType}`,
189
+ )
190
+ continue
191
+ }
192
+
193
+ contentType = possibleImageType
194
+ }
195
+
196
+ if (contentType === 'url') {
197
+ const url = dataString as string
198
+ const response = await fetch(url)
199
+ if (!response.ok) {
200
+ throw new Error(`Failed to fetch image: ${response.statusText}`)
201
+ }
202
+
203
+ // Get the image as a Blob
204
+ const blob = await response.blob()
205
+ const buffer = await blob.arrayBuffer()
206
+ const bufferUint8Array = new Uint8Array(buffer)
207
+
208
+ // Extract the file extension from the URL
209
+ const extensionMatch = url.match(
210
+ /\.(jpg|jpeg|png|gif|bmp|webp|svg)$/i,
211
+ )
212
+ if (!extensionMatch) {
213
+ throw new Error(
214
+ 'Unable to determine the file extension from the URL.',
215
+ )
216
+ }
217
+ const fileExtension = extensionMatch[0] // e.g., ".jpg"
218
+
219
+ // Set the file name (you can customize this)
220
+ // const fileNameFromUrl = `${transactionId}${fileExtension}`
221
+
222
+ await fs.promises.writeFile(
223
+ `/files/images/${transactionId}`,
224
+ bufferUint8Array,
225
+ {
226
+ encoding: 'binary',
227
+ },
228
+ )
229
+
230
+ continue
231
+ }
232
+
233
+ let mimeType = getMimeType(dataString as string)
234
+ let fileExtension = mimeType
235
+
236
+ if (fileExtension && fileExtension?.startsWith('image')) {
237
+ fileExtension = fileExtension.replace('image/', '')
238
+ }
239
+
240
+ let fileName = transactionId
241
+
242
+ if (contentType === 'base64') {
243
+ if (mimeType) {
244
+ fileName += `.${fileExtension}`
245
+ }
246
+
247
+ // Remove the Base64 header if it exists (e.g., "data:image/png;base64,")
248
+ const base64Data = dataString.split(',').pop() || ''
249
+
250
+ // Decode the Base64 string to binary
251
+ const binaryString = atob(base64Data)
252
+ const length = binaryString.length
253
+ const binaryData = new Uint8Array(length)
254
+
255
+ for (let i = 0; i < length; i++) {
256
+ binaryData[i] = binaryString.charCodeAt(i)
257
+ }
258
+
259
+ console.log(`attempting to writeFile to /files/images/${fileName}`)
260
+
261
+ await fs.promises.writeFile(`/files/images/${fileName}`, binaryData, {
262
+ encoding: 'binary',
263
+ })
264
+
265
+ // if (dataUint8Array && dataUint8Array instanceof Uint8Array) {
266
+ // await fs.promises.writeFile(
267
+ // `/files/images/${fileName}`,
268
+ // dataUint8Array,
269
+ // )
270
+ // }
271
+ }
272
+
273
+ if (contentType === 'html') {
274
+ fileName += '.html'
275
+ await fs.promises.writeFile(`/files/html/${fileName}`, dataString)
276
+ }
277
+
278
+ if (contentType === 'json') {
279
+ fileName += '.json'
280
+ await fs.promises.writeFile(`/files/json/${fileName}`, dataString)
281
+ }
282
+ } catch (error) {
283
+ logger(error)
284
+ }
285
+ }
47
286
 
48
- const fetchBinaryData = async () => {
49
287
  return []
50
288
  }
51
289
 
52
- fetchBinaryData().then(() => {
53
- sendBack({ type: 'fetchingBinaryDataSuccess' })
290
+ _fetchAllBinaryData().then((binaryData) => {
291
+ sendBack({ type: 'fetchingAllBinaryDataSuccess', binaryData })
54
292
  })
55
293
 
56
294
  return () => { }
@@ -238,11 +238,11 @@ export const downloadAllFilesBinaryRequestHandler = async () => {
238
238
  const content = dataStringParts[i + 1]
239
239
  if (contentType === 'html') {
240
240
  const fileName = `${transactionId}.html`
241
- await fs.promises.writeFile(`/files/html/${fileName}`, content)
241
+ fs.writeFileSync(`/files/html/${fileName}`, content)
242
242
  }
243
243
  if (contentType === 'json') {
244
244
  const fileName = `${transactionId}.json`
245
- await fs.promises.writeFile(`/files/json/${fileName}`, content)
245
+ fs.writeFileSync(`/files/json/${fileName}`, content)
246
246
  }
247
247
  }
248
248
 
@@ -250,7 +250,7 @@ export const downloadAllFilesBinaryRequestHandler = async () => {
250
250
  }
251
251
 
252
252
  if (!dataString && arrayBuffer) {
253
- await fs.promises.writeFile(
253
+ await fs.writeFileSync(
254
254
  `/files/images/${transactionId}`,
255
255
  new Uint8Array(arrayBuffer),
256
256
  )
@@ -1,23 +1,22 @@
1
1
  import { EventObject, fromCallback } from 'xstate'
2
- import { FromCallbackInput, PropertyMachineContext } from '@/types'
2
+ import { itemMachineSingle } from '@/Item/service/itemMachineSingle'
3
3
  import { BaseDb } from '@/db/Db/BaseDb'
4
4
 
5
- export const waitForDb = fromCallback<
6
- EventObject,
7
- FromCallbackInput<PropertyMachineContext>
8
- >(({ sendBack }) => {
9
- const _waitForDb = new Promise<void>((resolve) => {
10
- const interval = setInterval(() => {
11
- const appDb = BaseDb.getAppDb()
5
+ export const waitForDb = fromCallback<EventObject, typeof itemMachineSingle>(
6
+ ({ sendBack }) => {
7
+ const _waitForDb = new Promise<void>((resolve) => {
8
+ const interval = setInterval(() => {
9
+ const appDb = BaseDb.getAppDb()
12
10
 
13
- if (appDb) {
14
- clearInterval(interval)
15
- resolve()
16
- }
17
- }, 100)
18
- })
11
+ if (appDb) {
12
+ clearInterval(interval)
13
+ resolve()
14
+ }
15
+ }, 100)
16
+ })
19
17
 
20
- _waitForDb.then(() => {
21
- sendBack({ type: 'waitForDbSuccess' })
22
- })
23
- })
18
+ _waitForDb.then(() => {
19
+ sendBack({ type: 'waitForDbSuccess' })
20
+ })
21
+ },
22
+ )
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/events/files/index.ts"],"names":[],"mappings":"AAyCA,eAAO,MAAM,gBAAgB,YAW5B,CAAA;AAED,eAAO,MAAM,mBAAmB,eAE/B,CAAA;AAED,eAAO,MAAM,eAAe,eAE3B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/events/files/index.ts"],"names":[],"mappings":"AA0DA,eAAO,MAAM,gBAAgB,YAW5B,CAAA;AAED,eAAO,MAAM,mBAAmB,eAE/B,CAAA;AAED,eAAO,MAAM,eAAe,eAE3B,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seedprotocol/sdk",
3
- "version": "0.2.35",
3
+ "version": "0.2.37",
4
4
  "description": "The SDK for Seed Protocol",
5
5
  "type": "module",
6
6
  "engines": {
@@ -78,6 +78,7 @@
78
78
  "reflect-metadata": "^0.2.2",
79
79
  "rimraf": "^6.0.1",
80
80
  "rxjs": "^7.8.1",
81
+ "threads": "^1.7.0",
81
82
  "ts-import": "^5.0.0-beta.0",
82
83
  "ts-morph": "^24.0.0",
83
84
  "ts-proto": "^2.6.0",
@@ -159,7 +160,8 @@
159
160
  "peerDependencies": {
160
161
  "@tanstack/react-query": "^5.62.11",
161
162
  "better-sqlite3": "^11.7.0",
162
- "rxjs": "^7.8.1"
163
+ "rxjs": "^7.8.1",
164
+ "threads": "^1.7.0"
163
165
  },
164
166
  "exports": {
165
167
  ".": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BNmLdqsV.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}